diff --git a/src/TaxBaik.Web/wwwroot/css/admin.css b/src/TaxBaik.Web/wwwroot/css/admin.css index 3a933a0..a6f4095 100644 --- a/src/TaxBaik.Web/wwwroot/css/admin.css +++ b/src/TaxBaik.Web/wwwroot/css/admin.css @@ -1203,368 +1203,9 @@ textarea:focus-visible { } /* ============================================================================ - Dashboard Page Styles + Shared Admin UI ============================================================================ */ -.admin-page-hero { - display: flex; - justify-content: space-between; - align-items: center; - gap: 16px; - margin-bottom: 16px; - padding: 14px 16px; - border: 1px solid var(--border-color); - border-radius: var(--radius-lg); - background: linear-gradient(180deg, #FFFFFF 0%, #F8FAFC 100%); - box-shadow: var(--shadow-sm); -} - -.admin-page-hero > div:first-child { - flex: 1; -} - -.admin-eyebrow { - display: block; - color: var(--primary-color); - font-weight: var(--font-weight-semibold); - text-transform: uppercase; - font-size: 0.7rem; - letter-spacing: 0; - margin-bottom: var(--space-1); -} - -.admin-page-title { - display: block; - color: var(--text-primary); - font-weight: var(--font-weight-semibold); - margin-bottom: 2px; - font-size: 1.45rem; - line-height: var(--line-height-tight); -} - -.admin-page-subtitle { - display: block; - color: var(--text-secondary); - font-size: 0.8rem; - line-height: 1.35; -} - -/* Metrics Grid */ -.admin-metric-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: var(--space-4); - margin-bottom: var(--space-6); - width: 100%; -} - -/* Metric Card - Enterprise Grade */ -.admin-metric-card { - padding: 12px; - border-radius: var(--radius-lg); - background-color: var(--bg-primary); - border: 1px solid var(--border-color); - transition: all var(--transition-base); - cursor: pointer; - display: flex; - flex-direction: column; - justify-content: space-between; - min-height: 116px; - box-shadow: var(--shadow-xs); - position: relative; - overflow: hidden; -} - -.admin-metric-card-body { - display: flex; - flex-direction: column; - gap: 8px; - height: 100%; -} - -.admin-metric-card-label { - font-size: 0.68rem; - color: var(--text-tertiary); - text-transform: uppercase; - font-weight: var(--font-weight-semibold); -} - -.admin-metric-card-value-row { - display: flex; - justify-content: space-between; - align-items: center; - flex: 1; - gap: 8px; -} - -.admin-metric-card-value { - font-size: 1.45rem; - font-weight: var(--font-weight-bold); - line-height: 1; - color: var(--admin-metric-value-color, var(--primary-color)); -} - -.admin-metric-card-icon { - font-size: 1.9rem; - opacity: 0.14; - line-height: 1; - color: var(--admin-metric-icon-color, var(--secondary-color)); -} - -.admin-metric-card-caption { - font-size: 0.78rem; - color: var(--text-secondary); - line-height: 1.3; -} - -.admin-metric-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, currentColor, transparent); - opacity: 0; - transition: opacity var(--transition-fast); -} - -.admin-metric-card:hover { - box-shadow: var(--shadow-lg); - border-color: var(--border-color-strong); - transform: translateY(-4px); -} - -.admin-metric-card:hover::before { - opacity: 1; -} - -.admin-metric-card:active { - transform: translateY(-2px); -} - -/* Card Accent Colors */ -.accent-blue { - background: linear-gradient(135deg, var(--primary-light) 0%, #F7FAFC 100%); - border-color: #C9D8E6; - color: var(--primary-dark); -} - -.accent-blue:hover { - background: linear-gradient(135deg, #E3F2FD 0%, #BBDEFB 100%); - border-color: #90CAF9; -} - -.accent-amber { - background: linear-gradient(135deg, #F7EFE8 0%, #F1E3D7 100%); - border-color: var(--tertiary-color); - color: var(--tertiary-dark); -} - -.accent-amber:hover { - background: linear-gradient(135deg, #FFE0B2 0%, #FFCC80 100%); - border-color: #FFAB91; -} - -.accent-slate { - background: linear-gradient(135deg, #F5F7FA 0%, #F1F5F9 100%); - border-color: #CBD5E1; - color: #455A64; -} - -.accent-slate:hover { - background: linear-gradient(135deg, #F1F5F9 0%, #E2E8F0 100%); - border-color: #94A3B8; -} - -.accent-green { - background: linear-gradient(135deg, #E7F2EE 0%, #D7E8E3 100%); - border-color: var(--success-color); - color: var(--success-dark); -} - -.accent-green:hover { - background: linear-gradient(135deg, #C8E6C9 0%, #A5D6A7 100%); - border-color: #81C784; -} - -/* Surfaces & Containers */ -.admin-surface { - padding: 10px !important; - border-radius: var(--radius-md) !important; - background-color: var(--bg-primary) !important; - border: 1px solid var(--border-color) !important; - margin-bottom: 10px !important; - box-shadow: var(--shadow-xs); -} - -.admin-section-header { - display: flex; - justify-content: space-between; - align-items: flex-start; - gap: 10px; - margin-bottom: 10px; - padding-bottom: 6px; - border-bottom: 1px solid var(--border-color-light); -} - -.admin-section-header > div:first-child { - flex: 1; -} - -.admin-section-header h6 { - font-size: 0.85rem; - font-weight: var(--font-weight-semibold); - color: var(--text-primary); - margin-bottom: 2px; -} - -.admin-section-header p { - font-size: 0.75rem; - color: var(--text-secondary); - margin: 0; -} - -/* Tables */ -.admin-table { - width: 100%; - border-collapse: collapse; - font-size: 0.75rem; -} - -.admin-table thead { - background-color: var(--bg-tertiary); - border-bottom: 1px solid var(--border-color); -} - -.admin-table thead th { - padding: 5px 8px; - text-align: left; - font-weight: var(--font-weight-semibold); - color: var(--text-secondary); - font-size: 0.65rem; - text-transform: uppercase; - letter-spacing: 0; -} - -.admin-table tbody tr { - border-bottom: 1px solid var(--border-color-light); - transition: background-color var(--transition-fast); -} - -.admin-table tbody tr:hover { - background-color: var(--bg-overlay); -} - -.admin-table tbody tr:focus-within { - background-color: var(--bg-overlay-strong); -} - -.admin-table tbody td { - padding: 5px 8px; - color: var(--text-primary); - vertical-align: middle; -} - -.admin-table .mud-chip { - font-size: 0.68rem; - height: 22px; -} - -.admin-table tbody a { - color: var(--primary-color); - text-decoration: none; - font-weight: var(--font-weight-semibold); - transition: color var(--transition-fast); -} - -.admin-table tbody a:hover { - color: var(--primary-dark); - text-decoration: underline; -} - -.admin-table tbody a:focus-visible { - outline: 2px solid var(--primary-color); - outline-offset: 2px; -} - -.admin-table .mud-chip-small { - height: 24px !important; - font-size: var(--font-size-xs) !important; - font-weight: var(--font-weight-medium); - min-width: 60px; - display: inline-flex; - align-items: center; - justify-content: center; -} - -/* Loading States */ -.admin-skeleton { - background: linear-gradient(90deg, var(--bg-overlay) 0%, var(--bg-overlay-strong) 50%, var(--bg-overlay) 100%); - background-size: 200% 100%; - animation: loading 1.5s infinite; -} - -.admin-skeleton-stack { - display: flex; - flex-direction: column; - gap: 12px; - padding: 4px 0; -} - -.admin-skeleton-row { - display: grid; - grid-template-columns: 1.4fr 0.8fr 0.6fr; - gap: 12px; - align-items: center; -} - -.admin-skeleton-block { - height: 14px; - border-radius: 999px; - background: linear-gradient(90deg, var(--bg-overlay) 0%, var(--bg-overlay-strong) 50%, var(--bg-overlay) 100%); - background-size: 200% 100%; - animation: loading 1.4s infinite; -} - -.admin-skeleton-block.w-40 { width: 40%; } -.admin-skeleton-block.w-25 { width: 25%; } -.admin-skeleton-block.w-20 { width: 20%; } - -@keyframes loading { - 0% { - background-position: 200% 0; - } - 100% { - background-position: -200% 0; - } -} - -/* Empty States */ -.admin-empty-state { - text-align: center; - padding: var(--space-12); - color: var(--text-secondary); -} - -.admin-empty-state-icon { - font-size: 3rem; - margin-bottom: var(--space-4); - opacity: 0.5; -} - -.admin-empty-state-title { - font-size: var(--font-size-lg); - font-weight: var(--font-weight-semibold); - color: var(--text-primary); - margin-bottom: var(--space-2); -} - -.admin-empty-state-description { - font-size: var(--font-size-sm); - color: var(--text-secondary); -} - .admin-page-shell { padding-top: 1rem; padding-bottom: 1rem;