fix: resolve admin CSS loading path and add dashboard styles
TaxBaik CI/CD / build-and-deploy (push) Successful in 49s

- Change CSS/JS paths from absolute (/taxbaik/...) to relative (css/..., js/...) to work correctly with UsePathBase("/taxbaik")
- Add comprehensive admin layout styles: admin-shell, admin-topbar, admin-drawer, admin-nav
- Add dashboard metrics grid and accent card styles (blue, amber, slate, green)
- Add page header styles with eyebrow, title, subtitle
- Add table and surface component styles
- Add responsive design for mobile/tablet breakpoints
- Integrate with MudBlazor theme colors and components

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-28 09:50:59 +09:00
parent fb04f73f46
commit 821b73fe01
2 changed files with 327 additions and 2 deletions
+2 -2
View File
@@ -14,7 +14,7 @@
'admin-login-route',
window.location.pathname.toLowerCase().endsWith('/admin/login'));
</script>
<link rel="stylesheet" href="/taxbaik/css/admin.css" />
<link rel="stylesheet" href="css/admin.css" />
<component type="typeof(HeadOutlet)" render-mode="InteractiveServer" />
</head>
<body>
@@ -26,7 +26,7 @@
</div>
<Routes @rendermode="new InteractiveServerRenderMode(prerender: false)" />
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
<script src="/taxbaik/js/admin-session.js"></script>
<script src="js/admin-session.js"></script>
<script src="_framework/blazor.web.js"></script>
<script>window.taxbaikAdminSession?.watchReconnect();</script>
</body>
+325
View File
@@ -202,7 +202,316 @@ html, body {
color: #64748b;
}
/* Admin Shell & Layout */
.admin-shell {
display: flex;
flex-direction: column;
height: 100vh;
background-color: #f5f5f5;
}
.admin-topbar {
display: flex;
align-items: center;
gap: 16px;
padding: 12px 24px;
background-color: #fff;
border-bottom: 1px solid #e0e0e0;
z-index: 100;
}
.admin-menu-button {
margin-right: 8px;
}
.admin-topbar-title {
display: flex;
flex-direction: column;
gap: 4px;
}
.admin-topbar-action {
white-space: nowrap;
}
.admin-drawer {
width: 280px;
background-color: #fff;
border-right: 1px solid #e0e0e0;
}
.admin-drawer-brand {
display: flex;
align-items: center;
gap: 12px;
padding: 20px 16px;
border-bottom: 1px solid #f0f0f0;
}
.admin-brand-mark {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
border-radius: 8px;
background: linear-gradient(135deg, #1976d2 0%, #1565c0 100%);
color: white;
font-weight: bold;
font-size: 18px;
}
.admin-nav {
padding: 16px 0;
}
.admin-nav :deep(.mud-nav-link),
.admin-nav :deep(.mud-nav-group-header) {
margin: 4px 8px;
border-radius: 8px;
}
.admin-nav :deep(.mud-nav-link.active) {
background-color: #e3f2fd;
}
.admin-drawer-footer {
padding: 16px;
border-top: 1px solid #f0f0f0;
font-size: 0.875rem;
}
.admin-main {
flex: 1;
overflow-y: auto;
background-color: #f5f5f5;
}
.admin-content {
padding: 32px;
max-width: 1400px;
margin: 0 auto;
width: 100%;
}
/* Page Header */
.admin-page-hero {
display: flex;
justify-content: space-between;
align-items: flex-end;
gap: 24px;
margin-bottom: 32px;
padding-bottom: 24px;
border-bottom: 1px solid #e0e0e0;
}
.admin-eyebrow {
display: block;
color: #1976d2;
font-weight: 600;
text-transform: uppercase;
font-size: 0.75rem;
letter-spacing: 0.5px;
margin-bottom: 4px;
}
.admin-page-title {
display: block;
color: #1a1a1a;
font-weight: 600;
margin-bottom: 8px;
}
.admin-page-subtitle {
display: block;
color: #666;
font-size: 0.95rem;
}
/* Metrics Grid */
.admin-metric-grid {
margin-bottom: 32px;
}
.admin-metric-card {
padding: 20px;
border-radius: 8px;
background-color: #fff;
border: 1px solid #e0e0e0;
transition: all 0.2s ease;
cursor: pointer;
}
.admin-metric-card:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border-color: #d0d0d0;
transform: translateY(-2px);
}
.admin-metric-card .mud-typography-caption {
display: block;
color: #999;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 12px;
}
.admin-metric-card .mud-typography-h3 {
font-weight: 700;
color: #1a1a1a;
margin-bottom: 8px;
}
.admin-metric-card .mud-typography-body2 {
color: #666;
font-size: 0.85rem;
}
.accent-blue {
background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
border-color: #90caf9;
}
.accent-blue .mud-typography-h3 {
color: #1565c0;
}
.accent-amber {
background: linear-gradient(135deg, #fff3e0 0%, #ffe0b2 100%);
border-color: #ffcc80;
}
.accent-amber .mud-typography-h3 {
color: #e65100;
}
.accent-slate {
background: linear-gradient(135deg, #eceff1 0%, #cfd8dc 100%);
border-color: #b0bec5;
}
.accent-slate .mud-typography-h3 {
color: #455a64;
}
.accent-green {
background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
border-color: #81c784;
}
.accent-green .mud-typography-h3 {
color: #2e7d32;
}
/* Surfaces */
.admin-surface {
padding: 24px;
border-radius: 8px;
background-color: #fff;
border: 1px solid #e0e0e0;
margin-bottom: 24px;
}
.admin-section-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 16px;
margin-bottom: 20px;
padding-bottom: 16px;
border-bottom: 1px solid #f0f0f0;
}
.admin-section-header > div {
flex: 1;
}
.admin-section-header .mud-typography-h6 {
color: #1a1a1a;
font-weight: 600;
margin-bottom: 4px;
}
.admin-section-header .mud-typography-body2 {
color: #666;
font-size: 0.9rem;
}
/* Tables */
.admin-table {
width: 100%;
border-collapse: collapse;
}
.admin-table thead {
background-color: #f5f5f5;
border-bottom: 2px solid #e0e0e0;
}
.admin-table thead th {
padding: 12px 16px;
text-align: left;
font-weight: 600;
color: #666;
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.admin-table tbody tr {
border-bottom: 1px solid #f0f0f0;
}
.admin-table tbody tr:hover {
background-color: #fafafa;
}
.admin-table tbody td {
padding: 12px 16px;
color: #333;
}
.admin-table tbody a {
color: #1976d2;
text-decoration: none;
font-weight: 600;
}
.admin-table tbody a:hover {
text-decoration: underline;
}
.admin-table :deep(.mud-chip-small) {
height: 24px;
font-size: 0.75rem;
}
/* Cursor utilities */
.cursor-pointer {
cursor: pointer;
}
/* Responsive */
@media (max-width: 960px) {
.admin-drawer {
width: 64px;
}
.admin-content {
padding: 24px;
}
.admin-page-hero {
flex-direction: column;
align-items: stretch;
}
.admin-section-header {
flex-direction: column;
}
}
@media (max-width: 600px) {
.admin-login-page.mud-container-maxwidth-small {
max-width: 100% !important;
@@ -212,4 +521,20 @@ html, body {
.admin-login-page .mud-typography--h4 {
font-size: 1.5rem;
}
.admin-content {
padding: 16px;
}
.admin-metric-card {
padding: 16px;
}
.admin-surface {
padding: 16px;
}
.admin-section-header > div {
width: 100%;
}
}