Spaces:
Running
Running
User commited on
Commit ·
be17a46
1
Parent(s): 22f4a07
Deploy refreshed UI theme
Browse files- TaskTrackingSystem.WebApp/Components/App.razor +47 -47
- TaskTrackingSystem.WebApp/Components/Layout/MainLayout.razor +9 -9
- TaskTrackingSystem.WebApp/Components/Layout/MainLayout.razor.css +7 -7
- TaskTrackingSystem.WebApp/Components/Layout/NavMenu.razor.css +3 -3
- TaskTrackingSystem.WebApp/Components/Pages/Features/Auth/Login.razor +1 -1
- TaskTrackingSystem.WebApp/Components/Pages/Features/Auth/Register.razor +1 -1
- TaskTrackingSystem.WebApp/Components/Pages/Features/Auth/ResetPassword.razor +1 -1
- TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Components/AdminOverview.razor +2 -2
- TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Components/EmployeeOverview.razor +1 -1
- TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Components/ManagerOverview.razor +1 -1
- TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/EmployeeDashboard.razor +2 -2
- TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Home.razor +2 -2
- TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/ManagerDashboard.razor +3 -3
- TaskTrackingSystem.WebApp/Components/Pages/Features/Reports/Components/ReportKpiGrid.razor +2 -2
- TaskTrackingSystem.WebApp/wwwroot/app.css +613 -55
TaskTrackingSystem.WebApp/Components/App.razor
CHANGED
|
@@ -71,40 +71,40 @@
|
|
| 71 |
};
|
| 72 |
</script>
|
| 73 |
<script>
|
| 74 |
-
const brandDark = "#
|
| 75 |
-
const brandDarkAlt = "#
|
| 76 |
-
const brandPrimary = "#
|
| 77 |
-
const brandPrimaryHover = "#
|
| 78 |
-
const brandAccent = "#
|
| 79 |
-
const brandLight = "#
|
| 80 |
-
const brandMuted = "#
|
| 81 |
|
| 82 |
-
const semanticRedBg = "#
|
| 83 |
-
const semanticRedText = "#
|
| 84 |
|
| 85 |
-
const semanticGreenBg = "#
|
| 86 |
const semanticGreenText = "#0F766E";
|
| 87 |
|
| 88 |
-
const semanticNeutralBg = "#
|
| 89 |
-
const semanticNeutralText = "#
|
| 90 |
|
| 91 |
-
const neutralBg = "#
|
| 92 |
-
const neutralBorder = "#
|
| 93 |
-
const neutralMuted = "#
|
| 94 |
-
const neutralDark = "#
|
| 95 |
|
| 96 |
const customGray = {
|
| 97 |
50: neutralBg,
|
| 98 |
-
100: "#
|
| 99 |
200: neutralBorder,
|
| 100 |
-
300: "#
|
| 101 |
-
400: "#
|
| 102 |
500: neutralMuted,
|
| 103 |
-
600: "#
|
| 104 |
-
700: "#
|
| 105 |
-
800: "#
|
| 106 |
900: neutralDark,
|
| 107 |
-
950: "#
|
| 108 |
};
|
| 109 |
|
| 110 |
tailwind.config = {
|
|
@@ -207,12 +207,12 @@
|
|
| 207 |
900: "#0C4A6E"
|
| 208 |
},
|
| 209 |
blue: {
|
| 210 |
-
50:
|
| 211 |
-
100: "#
|
| 212 |
-
200: "#
|
| 213 |
-
300: "#
|
| 214 |
-
400: "#
|
| 215 |
-
500: "#
|
| 216 |
600: brandPrimary,
|
| 217 |
700: brandPrimaryHover,
|
| 218 |
800: brandDarkAlt,
|
|
@@ -285,7 +285,7 @@
|
|
| 285 |
chart: {
|
| 286 |
purple: brandPrimary,
|
| 287 |
teal: "#14B8A6",
|
| 288 |
-
green: "#
|
| 289 |
neutral: neutralBorder
|
| 290 |
},
|
| 291 |
|
|
@@ -349,15 +349,15 @@
|
|
| 349 |
text: null
|
| 350 |
},
|
| 351 |
tooltip: {
|
| 352 |
-
backgroundColor: 'rgba(255, 255, 255, 0.
|
| 353 |
borderWidth: 1,
|
| 354 |
-
borderColor: '#
|
| 355 |
-
borderRadius:
|
| 356 |
shadow: true,
|
| 357 |
style: {
|
| 358 |
fontFamily: 'Inter, sans-serif',
|
| 359 |
fontSize: '13px',
|
| 360 |
-
color: '#
|
| 361 |
},
|
| 362 |
pointFormat: '<b>{point.name}</b>: <b>{point.y}</b> tasks ({point.percentage:.1f}%)'
|
| 363 |
},
|
|
@@ -435,14 +435,14 @@
|
|
| 435 |
enabled: false
|
| 436 |
},
|
| 437 |
tooltip: {
|
| 438 |
-
backgroundColor: 'rgba(255, 255, 255, 0.
|
| 439 |
borderWidth: 1,
|
| 440 |
-
borderColor: '#
|
| 441 |
-
borderRadius:
|
| 442 |
shadow: true,
|
| 443 |
style: {
|
| 444 |
fontSize: '13px',
|
| 445 |
-
color: '#
|
| 446 |
},
|
| 447 |
pointFormatter: function() {
|
| 448 |
const start = Highcharts.dateFormat('%b %e, %Y', this.start);
|
|
@@ -458,24 +458,24 @@
|
|
| 458 |
min: options.xAxisMin,
|
| 459 |
max: options.xAxisMax,
|
| 460 |
gridLineWidth: 1,
|
| 461 |
-
gridLineColor: '#
|
| 462 |
-
lineColor: '#
|
| 463 |
-
tickColor: '#
|
| 464 |
labels: {
|
| 465 |
format: '{value:%b %Y}',
|
| 466 |
style: {
|
| 467 |
-
color: '#
|
| 468 |
fontSize: '11px'
|
| 469 |
}
|
| 470 |
},
|
| 471 |
currentDateIndicator: {
|
| 472 |
-
color: '#
|
| 473 |
dashStyle: 'ShortDash',
|
| 474 |
width: 2,
|
| 475 |
label: {
|
| 476 |
format: 'Today',
|
| 477 |
style: {
|
| 478 |
-
color: '#
|
| 479 |
fontWeight: 'bold'
|
| 480 |
}
|
| 481 |
}
|
|
@@ -483,10 +483,10 @@
|
|
| 483 |
}],
|
| 484 |
yAxis: {
|
| 485 |
gridLineWidth: 1,
|
| 486 |
-
gridLineColor: '#
|
| 487 |
labels: {
|
| 488 |
style: {
|
| 489 |
-
color: '#
|
| 490 |
fontSize: '12px',
|
| 491 |
fontWeight: '600'
|
| 492 |
}
|
|
@@ -528,7 +528,7 @@
|
|
| 528 |
amount: item.completed,
|
| 529 |
fill: item.color
|
| 530 |
},
|
| 531 |
-
color: '#
|
| 532 |
}))
|
| 533 |
}]
|
| 534 |
});
|
|
|
|
| 71 |
};
|
| 72 |
</script>
|
| 73 |
<script>
|
| 74 |
+
const brandDark = "#12312D";
|
| 75 |
+
const brandDarkAlt = "#115E59";
|
| 76 |
+
const brandPrimary = "#0F766E";
|
| 77 |
+
const brandPrimaryHover = "#115E59";
|
| 78 |
+
const brandAccent = "#B45309";
|
| 79 |
+
const brandLight = "#E6F4F1";
|
| 80 |
+
const brandMuted = "#64706D";
|
| 81 |
|
| 82 |
+
const semanticRedBg = "#FCE4E1";
|
| 83 |
+
const semanticRedText = "#B42318";
|
| 84 |
|
| 85 |
+
const semanticGreenBg = "#DFF6EE";
|
| 86 |
const semanticGreenText = "#0F766E";
|
| 87 |
|
| 88 |
+
const semanticNeutralBg = "#F1F5F4";
|
| 89 |
+
const semanticNeutralText = "#4F5D59";
|
| 90 |
|
| 91 |
+
const neutralBg = "#F7F8F7";
|
| 92 |
+
const neutralBorder = "#DDE5E2";
|
| 93 |
+
const neutralMuted = "#64706D";
|
| 94 |
+
const neutralDark = "#17211F";
|
| 95 |
|
| 96 |
const customGray = {
|
| 97 |
50: neutralBg,
|
| 98 |
+
100: "#EFF3F1",
|
| 99 |
200: neutralBorder,
|
| 100 |
+
300: "#B9C8C3",
|
| 101 |
+
400: "#8B9894",
|
| 102 |
500: neutralMuted,
|
| 103 |
+
600: "#4F5D59",
|
| 104 |
+
700: "#34413D",
|
| 105 |
+
800: "#222C29",
|
| 106 |
900: neutralDark,
|
| 107 |
+
950: "#101614"
|
| 108 |
};
|
| 109 |
|
| 110 |
tailwind.config = {
|
|
|
|
| 207 |
900: "#0C4A6E"
|
| 208 |
},
|
| 209 |
blue: {
|
| 210 |
+
50: brandLight,
|
| 211 |
+
100: "#CFE8E3",
|
| 212 |
+
200: "#A7D8CF",
|
| 213 |
+
300: "#76C3B8",
|
| 214 |
+
400: "#3AA89A",
|
| 215 |
+
500: "#16877E",
|
| 216 |
600: brandPrimary,
|
| 217 |
700: brandPrimaryHover,
|
| 218 |
800: brandDarkAlt,
|
|
|
|
| 285 |
chart: {
|
| 286 |
purple: brandPrimary,
|
| 287 |
teal: "#14B8A6",
|
| 288 |
+
green: "#0F766E",
|
| 289 |
neutral: neutralBorder
|
| 290 |
},
|
| 291 |
|
|
|
|
| 349 |
text: null
|
| 350 |
},
|
| 351 |
tooltip: {
|
| 352 |
+
backgroundColor: 'rgba(255, 255, 255, 0.97)',
|
| 353 |
borderWidth: 1,
|
| 354 |
+
borderColor: '#dde5e2',
|
| 355 |
+
borderRadius: 8,
|
| 356 |
shadow: true,
|
| 357 |
style: {
|
| 358 |
fontFamily: 'Inter, sans-serif',
|
| 359 |
fontSize: '13px',
|
| 360 |
+
color: '#17211f'
|
| 361 |
},
|
| 362 |
pointFormat: '<b>{point.name}</b>: <b>{point.y}</b> tasks ({point.percentage:.1f}%)'
|
| 363 |
},
|
|
|
|
| 435 |
enabled: false
|
| 436 |
},
|
| 437 |
tooltip: {
|
| 438 |
+
backgroundColor: 'rgba(255, 255, 255, 0.97)',
|
| 439 |
borderWidth: 1,
|
| 440 |
+
borderColor: '#dde5e2',
|
| 441 |
+
borderRadius: 8,
|
| 442 |
shadow: true,
|
| 443 |
style: {
|
| 444 |
fontSize: '13px',
|
| 445 |
+
color: '#17211f'
|
| 446 |
},
|
| 447 |
pointFormatter: function() {
|
| 448 |
const start = Highcharts.dateFormat('%b %e, %Y', this.start);
|
|
|
|
| 458 |
min: options.xAxisMin,
|
| 459 |
max: options.xAxisMax,
|
| 460 |
gridLineWidth: 1,
|
| 461 |
+
gridLineColor: '#eff3f1',
|
| 462 |
+
lineColor: '#dde5e2',
|
| 463 |
+
tickColor: '#dde5e2',
|
| 464 |
labels: {
|
| 465 |
format: '{value:%b %Y}',
|
| 466 |
style: {
|
| 467 |
+
color: '#64706d',
|
| 468 |
fontSize: '11px'
|
| 469 |
}
|
| 470 |
},
|
| 471 |
currentDateIndicator: {
|
| 472 |
+
color: '#0f766e',
|
| 473 |
dashStyle: 'ShortDash',
|
| 474 |
width: 2,
|
| 475 |
label: {
|
| 476 |
format: 'Today',
|
| 477 |
style: {
|
| 478 |
+
color: '#0f766e',
|
| 479 |
fontWeight: 'bold'
|
| 480 |
}
|
| 481 |
}
|
|
|
|
| 483 |
}],
|
| 484 |
yAxis: {
|
| 485 |
gridLineWidth: 1,
|
| 486 |
+
gridLineColor: '#eff3f1',
|
| 487 |
labels: {
|
| 488 |
style: {
|
| 489 |
+
color: '#34413d',
|
| 490 |
fontSize: '12px',
|
| 491 |
fontWeight: '600'
|
| 492 |
}
|
|
|
|
| 528 |
amount: item.completed,
|
| 529 |
fill: item.color
|
| 530 |
},
|
| 531 |
+
color: '#dde5e2'
|
| 532 |
}))
|
| 533 |
}]
|
| 534 |
});
|
TaskTrackingSystem.WebApp/Components/Layout/MainLayout.razor
CHANGED
|
@@ -3,23 +3,23 @@
|
|
| 3 |
@using System.Security.Claims
|
| 4 |
@inject TaskTrackingSystem.WebApp.Localization.UiLanguageService Language
|
| 5 |
|
| 6 |
-
<div class="app-shell min-h-screen bg-slate-50 text-slate-950
|
| 7 |
<button type="button"
|
| 8 |
class="sidebar-scrim"
|
| 9 |
onclick="document.body.classList.remove('tts-sidebar-open');"
|
| 10 |
aria-label="@AppLocalization.Text("common.closeNavigation", "Close navigation")"></button>
|
| 11 |
|
| 12 |
-
<aside class="app-sidebar fixed inset-y-0 left-0 z-[60] flex
|
| 13 |
<div class="app-sidebar-brand flex min-h-20 items-center gap-3 px-5 py-4">
|
| 14 |
-
<span class="app-sidebar-logo inline-flex h-10 w-10 items-center justify-center rounded-lg
|
| 15 |
-
<i data-lucide="
|
| 16 |
</span>
|
| 17 |
<span class="app-sidebar-title flex flex-col leading-tight">
|
| 18 |
<strong class="text-lg font-bold tracking-normal text-white">Taskify</strong>
|
| 19 |
<span class="mt-0.5 text-[11px] font-semibold uppercase tracking-wide text-slate-400">@AppLocalization.Text("common.workspace", "Workspace")</span>
|
| 20 |
</span>
|
| 21 |
<button type="button"
|
| 22 |
-
class="control-button mobile-sidebar-close ml-auto
|
| 23 |
onclick="document.body.classList.remove('tts-sidebar-open');"
|
| 24 |
aria-label="@AppLocalization.Text("common.closeNavigation", "Close navigation")">
|
| 25 |
<i data-lucide="x" class="h-4 w-4"></i>
|
|
@@ -58,11 +58,11 @@
|
|
| 58 |
</div>
|
| 59 |
</aside>
|
| 60 |
|
| 61 |
-
<main class="app-main flex min-w-0 flex-1 flex-col
|
| 62 |
-
<header class="app-topbar flex min-h-16 items-center justify-between gap-3 border-b border-slate-200 bg-slate-50/95 px-4 text-slate-900 backdrop-blur dark:border-slate-800 dark:bg-slate-950/90 dark:text-slate-100
|
| 63 |
<div class="flex min-w-0 items-center gap-3">
|
| 64 |
<button type="button"
|
| 65 |
-
class="control-button mobile-sidebar-toggle
|
| 66 |
onclick="document.body.classList.add('tts-sidebar-open');"
|
| 67 |
aria-label="@AppLocalization.Text("common.openNavigation", "Open navigation")">
|
| 68 |
<i data-lucide="menu" class="h-4 w-4"></i>
|
|
@@ -84,7 +84,7 @@
|
|
| 84 |
</div>
|
| 85 |
</header>
|
| 86 |
|
| 87 |
-
<div class="app-content flex-1 overflow-y-auto
|
| 88 |
@if (isAuthorizedPage)
|
| 89 |
{
|
| 90 |
@Body
|
|
|
|
| 3 |
@using System.Security.Claims
|
| 4 |
@inject TaskTrackingSystem.WebApp.Localization.UiLanguageService Language
|
| 5 |
|
| 6 |
+
<div class="app-shell min-h-screen bg-slate-50 text-slate-950 dark:bg-slate-950 dark:text-slate-50">
|
| 7 |
<button type="button"
|
| 8 |
class="sidebar-scrim"
|
| 9 |
onclick="document.body.classList.remove('tts-sidebar-open');"
|
| 10 |
aria-label="@AppLocalization.Text("common.closeNavigation", "Close navigation")"></button>
|
| 11 |
|
| 12 |
+
<aside class="app-sidebar fixed inset-y-0 left-0 z-[60] flex flex-col overflow-hidden border-r border-slate-800 bg-slate-950 text-white transition-transform duration-200">
|
| 13 |
<div class="app-sidebar-brand flex min-h-20 items-center gap-3 px-5 py-4">
|
| 14 |
+
<span class="app-sidebar-logo inline-flex h-10 w-10 items-center justify-center rounded-lg text-white shadow-sm">
|
| 15 |
+
<i data-lucide="clipboard-check" class="h-5 w-5"></i>
|
| 16 |
</span>
|
| 17 |
<span class="app-sidebar-title flex flex-col leading-tight">
|
| 18 |
<strong class="text-lg font-bold tracking-normal text-white">Taskify</strong>
|
| 19 |
<span class="mt-0.5 text-[11px] font-semibold uppercase tracking-wide text-slate-400">@AppLocalization.Text("common.workspace", "Workspace")</span>
|
| 20 |
</span>
|
| 21 |
<button type="button"
|
| 22 |
+
class="control-button mobile-sidebar-close ml-auto h-9 w-9 items-center justify-center rounded-lg border border-white/10 bg-white/10 text-white hover:bg-white/15 hover:text-white"
|
| 23 |
onclick="document.body.classList.remove('tts-sidebar-open');"
|
| 24 |
aria-label="@AppLocalization.Text("common.closeNavigation", "Close navigation")">
|
| 25 |
<i data-lucide="x" class="h-4 w-4"></i>
|
|
|
|
| 58 |
</div>
|
| 59 |
</aside>
|
| 60 |
|
| 61 |
+
<main class="app-main flex min-w-0 flex-1 flex-col">
|
| 62 |
+
<header class="app-topbar flex min-h-16 items-center justify-between gap-3 border-b border-slate-200 bg-slate-50/95 px-4 text-slate-900 backdrop-blur dark:border-slate-800 dark:bg-slate-950/90 dark:text-slate-100">
|
| 63 |
<div class="flex min-w-0 items-center gap-3">
|
| 64 |
<button type="button"
|
| 65 |
+
class="control-button mobile-sidebar-toggle h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 shadow-sm hover:bg-slate-50 hover:text-violet-600 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-300 dark:hover:bg-slate-800 dark:hover:text-white"
|
| 66 |
onclick="document.body.classList.add('tts-sidebar-open');"
|
| 67 |
aria-label="@AppLocalization.Text("common.openNavigation", "Open navigation")">
|
| 68 |
<i data-lucide="menu" class="h-4 w-4"></i>
|
|
|
|
| 84 |
</div>
|
| 85 |
</header>
|
| 86 |
|
| 87 |
+
<div class="app-content flex-1 overflow-y-auto">
|
| 88 |
@if (isAuthorizedPage)
|
| 89 |
{
|
| 90 |
@Body
|
TaskTrackingSystem.WebApp/Components/Layout/MainLayout.razor.css
CHANGED
|
@@ -10,12 +10,12 @@ main {
|
|
| 10 |
}
|
| 11 |
|
| 12 |
.sidebar {
|
| 13 |
-
background-color:
|
| 14 |
}
|
| 15 |
|
| 16 |
.top-row {
|
| 17 |
-
background-color:
|
| 18 |
-
border-bottom: 1px solid
|
| 19 |
justify-content: flex-end;
|
| 20 |
height: 3.5rem;
|
| 21 |
display: flex;
|
|
@@ -27,13 +27,13 @@ main {
|
|
| 27 |
white-space: nowrap;
|
| 28 |
margin-left: 1.5rem;
|
| 29 |
text-decoration: none;
|
| 30 |
-
color:
|
| 31 |
}
|
| 32 |
|
| 33 |
.top-row ::deep a:hover,
|
| 34 |
.top-row ::deep .btn-link:hover {
|
| 35 |
text-decoration: underline;
|
| 36 |
-
color:
|
| 37 |
}
|
| 38 |
|
| 39 |
@media (min-width: 641px) {
|
|
@@ -50,8 +50,8 @@ main {
|
|
| 50 |
}
|
| 51 |
|
| 52 |
#blazor-error-ui {
|
| 53 |
-
background:
|
| 54 |
-
color:
|
| 55 |
bottom: 0;
|
| 56 |
position: fixed;
|
| 57 |
width: 100%;
|
|
|
|
| 10 |
}
|
| 11 |
|
| 12 |
.sidebar {
|
| 13 |
+
background-color: var(--sidebar-bg);
|
| 14 |
}
|
| 15 |
|
| 16 |
.top-row {
|
| 17 |
+
background-color: var(--surface);
|
| 18 |
+
border-bottom: 1px solid var(--border);
|
| 19 |
justify-content: flex-end;
|
| 20 |
height: 3.5rem;
|
| 21 |
display: flex;
|
|
|
|
| 27 |
white-space: nowrap;
|
| 28 |
margin-left: 1.5rem;
|
| 29 |
text-decoration: none;
|
| 30 |
+
color: var(--text-muted);
|
| 31 |
}
|
| 32 |
|
| 33 |
.top-row ::deep a:hover,
|
| 34 |
.top-row ::deep .btn-link:hover {
|
| 35 |
text-decoration: underline;
|
| 36 |
+
color: var(--text-primary);
|
| 37 |
}
|
| 38 |
|
| 39 |
@media (min-width: 641px) {
|
|
|
|
| 50 |
}
|
| 51 |
|
| 52 |
#blazor-error-ui {
|
| 53 |
+
background: var(--status-danger-bg);
|
| 54 |
+
color: var(--status-danger-text);
|
| 55 |
bottom: 0;
|
| 56 |
position: fixed;
|
| 57 |
width: 100%;
|
TaskTrackingSystem.WebApp/Components/Layout/NavMenu.razor.css
CHANGED
|
@@ -24,13 +24,13 @@
|
|
| 24 |
|
| 25 |
::deep a.nav-link-item:hover,
|
| 26 |
::deep button.nav-dropdown-toggle:hover {
|
| 27 |
-
border-color: rgba(
|
| 28 |
-
background-color: rgba(255, 255, 255, 0.
|
| 29 |
color: #FFFFFF;
|
| 30 |
}
|
| 31 |
|
| 32 |
::deep a.nav-link-item.active {
|
| 33 |
-
border-color: rgba(
|
| 34 |
background-color: var(--sidebar-active, rgba(37, 99, 235, 0.18)) !important;
|
| 35 |
color: #FFFFFF !important;
|
| 36 |
box-shadow: inset 3px 0 0 var(--brand-primary);
|
|
|
|
| 24 |
|
| 25 |
::deep a.nav-link-item:hover,
|
| 26 |
::deep button.nav-dropdown-toggle:hover {
|
| 27 |
+
border-color: rgba(94, 234, 212, 0.14);
|
| 28 |
+
background-color: rgba(255, 255, 255, 0.065);
|
| 29 |
color: #FFFFFF;
|
| 30 |
}
|
| 31 |
|
| 32 |
::deep a.nav-link-item.active {
|
| 33 |
+
border-color: rgba(94, 234, 212, 0.26) !important;
|
| 34 |
background-color: var(--sidebar-active, rgba(37, 99, 235, 0.18)) !important;
|
| 35 |
color: #FFFFFF !important;
|
| 36 |
box-shadow: inset 3px 0 0 var(--brand-primary);
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Auth/Login.razor
CHANGED
|
@@ -14,7 +14,7 @@
|
|
| 14 |
<div>
|
| 15 |
<div class="flex justify-center">
|
| 16 |
<span class="flex h-12 w-12 items-center justify-center rounded-xl bg-violet-600 text-white shadow-sm">
|
| 17 |
-
<i data-lucide="
|
| 18 |
</span>
|
| 19 |
</div>
|
| 20 |
<h2 class="mt-5 text-center text-2xl font-bold text-slate-900">@AppLocalization.Text("common.signIn", "Sign In") - Taskify</h2>
|
|
|
|
| 14 |
<div>
|
| 15 |
<div class="flex justify-center">
|
| 16 |
<span class="flex h-12 w-12 items-center justify-center rounded-xl bg-violet-600 text-white shadow-sm">
|
| 17 |
+
<i data-lucide="clipboard-check" class="h-6 w-6"></i>
|
| 18 |
</span>
|
| 19 |
</div>
|
| 20 |
<h2 class="mt-5 text-center text-2xl font-bold text-slate-900">@AppLocalization.Text("common.signIn", "Sign In") - Taskify</h2>
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Auth/Register.razor
CHANGED
|
@@ -12,7 +12,7 @@
|
|
| 12 |
<div>
|
| 13 |
<div class="flex justify-center">
|
| 14 |
<span class="flex h-12 w-12 items-center justify-center rounded-xl bg-violet-600 text-white shadow-sm">
|
| 15 |
-
<i data-lucide="
|
| 16 |
</span>
|
| 17 |
</div>
|
| 18 |
<h2 class="mt-5 text-center text-2xl font-bold text-slate-900">Create your Taskify account</h2>
|
|
|
|
| 12 |
<div>
|
| 13 |
<div class="flex justify-center">
|
| 14 |
<span class="flex h-12 w-12 items-center justify-center rounded-xl bg-violet-600 text-white shadow-sm">
|
| 15 |
+
<i data-lucide="clipboard-check" class="h-6 w-6"></i>
|
| 16 |
</span>
|
| 17 |
</div>
|
| 18 |
<h2 class="mt-5 text-center text-2xl font-bold text-slate-900">Create your Taskify account</h2>
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Auth/ResetPassword.razor
CHANGED
|
@@ -12,7 +12,7 @@
|
|
| 12 |
<div>
|
| 13 |
<div class="flex justify-center">
|
| 14 |
<span class="flex h-12 w-12 items-center justify-center rounded-xl bg-violet-600 text-white shadow-sm">
|
| 15 |
-
<i data-lucide="
|
| 16 |
</span>
|
| 17 |
</div>
|
| 18 |
<h2 class="mt-5 text-center text-2xl font-bold text-slate-900">@AppLocalization.Text("auth.resetPassword", "Reset your password")</h2>
|
|
|
|
| 12 |
<div>
|
| 13 |
<div class="flex justify-center">
|
| 14 |
<span class="flex h-12 w-12 items-center justify-center rounded-xl bg-violet-600 text-white shadow-sm">
|
| 15 |
+
<i data-lucide="clipboard-check" class="h-6 w-6"></i>
|
| 16 |
</span>
|
| 17 |
</div>
|
| 18 |
<h2 class="mt-5 text-center text-2xl font-bold text-slate-900">@AppLocalization.Text("auth.resetPassword", "Reset your password")</h2>
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Components/AdminOverview.razor
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
@namespace TaskTrackingSystem.WebApp.Components.Pages.Features.Dashboard.Components
|
| 2 |
|
| 3 |
-
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2
|
| 4 |
@foreach (var metric in Metrics)
|
| 5 |
{
|
| 6 |
<KpiCard Icon="@metric.Icon"
|
|
@@ -9,7 +9,7 @@
|
|
| 9 |
BadgeText="@metric.BadgeText"
|
| 10 |
IconWrapClass="@metric.IconWrapClass"
|
| 11 |
BadgeClass="@metric.BadgeClass"
|
| 12 |
-
CardClass="rounded-xl border border-slate-200 bg-white p-
|
| 13 |
}
|
| 14 |
</div>
|
| 15 |
|
|
|
|
| 1 |
@namespace TaskTrackingSystem.WebApp.Components.Pages.Features.Dashboard.Components
|
| 2 |
|
| 3 |
+
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
| 4 |
@foreach (var metric in Metrics)
|
| 5 |
{
|
| 6 |
<KpiCard Icon="@metric.Icon"
|
|
|
|
| 9 |
BadgeText="@metric.BadgeText"
|
| 10 |
IconWrapClass="@metric.IconWrapClass"
|
| 11 |
BadgeClass="@metric.BadgeClass"
|
| 12 |
+
CardClass="rounded-xl border border-slate-200 bg-white p-4 text-slate-900 shadow-sm shadow-slate-200/50" />
|
| 13 |
}
|
| 14 |
</div>
|
| 15 |
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Components/EmployeeOverview.razor
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
@namespace TaskTrackingSystem.WebApp.Components.Pages.Features.Dashboard.Components
|
| 2 |
|
| 3 |
-
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2
|
| 4 |
@foreach (var metric in Metrics)
|
| 5 |
{
|
| 6 |
<KpiCard Icon="@metric.Icon"
|
|
|
|
| 1 |
@namespace TaskTrackingSystem.WebApp.Components.Pages.Features.Dashboard.Components
|
| 2 |
|
| 3 |
+
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-5">
|
| 4 |
@foreach (var metric in Metrics)
|
| 5 |
{
|
| 6 |
<KpiCard Icon="@metric.Icon"
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Components/ManagerOverview.razor
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
@namespace TaskTrackingSystem.WebApp.Components.Pages.Features.Dashboard.Components
|
| 2 |
|
| 3 |
-
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2
|
| 4 |
@foreach (var metric in Metrics)
|
| 5 |
{
|
| 6 |
<KpiCard Icon="@metric.Icon"
|
|
|
|
| 1 |
@namespace TaskTrackingSystem.WebApp.Components.Pages.Features.Dashboard.Components
|
| 2 |
|
| 3 |
+
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
| 4 |
@foreach (var metric in Metrics)
|
| 5 |
{
|
| 6 |
<KpiCard Icon="@metric.Icon"
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/EmployeeDashboard.razor
CHANGED
|
@@ -10,7 +10,7 @@
|
|
| 10 |
|
| 11 |
<PageTitle>Employee Dashboard</PageTitle>
|
| 12 |
|
| 13 |
-
<div class="min-h-screen bg-slate-50 px-4 py-6 text-slate-900 sm:px-6 lg:px-8">
|
| 14 |
<div class="mx-auto max-w-[1440px] space-y-6">
|
| 15 |
<div class="rounded-xl border border-slate-200 bg-white px-8 py-8 shadow-sm">
|
| 16 |
<div class="flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between">
|
|
@@ -57,7 +57,7 @@
|
|
| 57 |
{
|
| 58 |
<EmployeeOverview Metrics="SummaryMetrics" />
|
| 59 |
|
| 60 |
-
<div class="grid grid-cols-1 gap-5
|
| 61 |
<div class="space-y-5">
|
| 62 |
<div class="overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm">
|
| 63 |
<div class="flex items-center justify-between gap-4 border-b border-slate-100 px-6 py-5">
|
|
|
|
| 10 |
|
| 11 |
<PageTitle>Employee Dashboard</PageTitle>
|
| 12 |
|
| 13 |
+
<div class="min-h-screen bg-slate-50 px-4 py-6 text-slate-900 sm:px-6 lg:px-8 dark:bg-slate-950 dark:text-slate-50">
|
| 14 |
<div class="mx-auto max-w-[1440px] space-y-6">
|
| 15 |
<div class="rounded-xl border border-slate-200 bg-white px-8 py-8 shadow-sm">
|
| 16 |
<div class="flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between">
|
|
|
|
| 57 |
{
|
| 58 |
<EmployeeOverview Metrics="SummaryMetrics" />
|
| 59 |
|
| 60 |
+
<div class="grid grid-cols-1 gap-5 lg:grid-cols-[minmax(0,1.7fr)_minmax(280px,1fr)]">
|
| 61 |
<div class="space-y-5">
|
| 62 |
<div class="overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm">
|
| 63 |
<div class="flex items-center justify-between gap-4 border-b border-slate-100 px-6 py-5">
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/Home.razor
CHANGED
|
@@ -46,7 +46,7 @@
|
|
| 46 |
|
| 47 |
<AdminOverview Metrics="SummaryMetrics" />
|
| 48 |
|
| 49 |
-
<div class="grid grid-cols-1 gap-5
|
| 50 |
<div class="rounded-xl border border-slate-200 bg-white p-6 text-slate-900 shadow-sm shadow-slate-200/60">
|
| 51 |
<div class="flex items-start justify-between gap-4">
|
| 52 |
<div>
|
|
@@ -121,7 +121,7 @@
|
|
| 121 |
</ChartCard>
|
| 122 |
</div>
|
| 123 |
|
| 124 |
-
<div class="grid grid-cols-1 gap-5
|
| 125 |
<div class="rounded-xl border border-slate-200 bg-white p-6 shadow-sm shadow-slate-200/60">
|
| 126 |
<div class="flex items-center justify-between gap-4">
|
| 127 |
<div>
|
|
|
|
| 46 |
|
| 47 |
<AdminOverview Metrics="SummaryMetrics" />
|
| 48 |
|
| 49 |
+
<div class="grid grid-cols-1 gap-5 lg:grid-cols-[minmax(0,1.7fr)_minmax(280px,1fr)]">
|
| 50 |
<div class="rounded-xl border border-slate-200 bg-white p-6 text-slate-900 shadow-sm shadow-slate-200/60">
|
| 51 |
<div class="flex items-start justify-between gap-4">
|
| 52 |
<div>
|
|
|
|
| 121 |
</ChartCard>
|
| 122 |
</div>
|
| 123 |
|
| 124 |
+
<div class="grid grid-cols-1 gap-5 lg:grid-cols-[minmax(0,1.25fr)_minmax(280px,0.75fr)]">
|
| 125 |
<div class="rounded-xl border border-slate-200 bg-white p-6 shadow-sm shadow-slate-200/60">
|
| 126 |
<div class="flex items-center justify-between gap-4">
|
| 127 |
<div>
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Dashboard/ManagerDashboard.razor
CHANGED
|
@@ -9,7 +9,7 @@
|
|
| 9 |
|
| 10 |
<PageTitle>Manager Dashboard</PageTitle>
|
| 11 |
|
| 12 |
-
<div class="min-h-screen bg-slate-50 px-4 py-6 text-slate-900 sm:px-6 lg:px-8">
|
| 13 |
<div class="mx-auto max-w-[1440px] space-y-6">
|
| 14 |
<div class="rounded-xl border border-slate-200 bg-white px-8 py-8 shadow-sm">
|
| 15 |
<div class="flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between">
|
|
@@ -60,7 +60,7 @@
|
|
| 60 |
{
|
| 61 |
<ManagerOverview Metrics="SummaryMetrics" />
|
| 62 |
|
| 63 |
-
<div class="grid grid-cols-1 gap-5
|
| 64 |
<ChartCard Title="Weekly Task Progress" Subtitle="Completed vs pending tasks per week" TitleClass="text-xl font-bold text-slate-950">
|
| 65 |
<Actions>
|
| 66 |
<div class="text-sm text-slate-500">@WeeklyRangeLabel</div>
|
|
@@ -79,7 +79,7 @@
|
|
| 79 |
</ChartCard>
|
| 80 |
</div>
|
| 81 |
|
| 82 |
-
<div class="grid grid-cols-1 gap-5
|
| 83 |
<div class="rounded-xl border border-slate-200 bg-white p-6 shadow-sm">
|
| 84 |
<div class="flex items-start justify-between gap-4">
|
| 85 |
<div>
|
|
|
|
| 9 |
|
| 10 |
<PageTitle>Manager Dashboard</PageTitle>
|
| 11 |
|
| 12 |
+
<div class="min-h-screen bg-slate-50 px-4 py-6 text-slate-900 sm:px-6 lg:px-8 dark:bg-slate-950 dark:text-slate-50">
|
| 13 |
<div class="mx-auto max-w-[1440px] space-y-6">
|
| 14 |
<div class="rounded-xl border border-slate-200 bg-white px-8 py-8 shadow-sm">
|
| 15 |
<div class="flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between">
|
|
|
|
| 60 |
{
|
| 61 |
<ManagerOverview Metrics="SummaryMetrics" />
|
| 62 |
|
| 63 |
+
<div class="grid grid-cols-1 gap-5 lg:grid-cols-[minmax(0,1.7fr)_minmax(280px,1fr)]">
|
| 64 |
<ChartCard Title="Weekly Task Progress" Subtitle="Completed vs pending tasks per week" TitleClass="text-xl font-bold text-slate-950">
|
| 65 |
<Actions>
|
| 66 |
<div class="text-sm text-slate-500">@WeeklyRangeLabel</div>
|
|
|
|
| 79 |
</ChartCard>
|
| 80 |
</div>
|
| 81 |
|
| 82 |
+
<div class="grid grid-cols-1 gap-5 lg:grid-cols-[minmax(0,1.05fr)_minmax(0,0.95fr)]">
|
| 83 |
<div class="rounded-xl border border-slate-200 bg-white p-6 shadow-sm">
|
| 84 |
<div class="flex items-start justify-between gap-4">
|
| 85 |
<div>
|
TaskTrackingSystem.WebApp/Components/Pages/Features/Reports/Components/ReportKpiGrid.razor
CHANGED
|
@@ -15,6 +15,6 @@
|
|
| 15 |
|
| 16 |
@code {
|
| 17 |
[Parameter] public IReadOnlyList<DashboardMetric> Metrics { get; set; } = Array.Empty<DashboardMetric>();
|
| 18 |
-
[Parameter] public string GridClass { get; set; } = "grid grid-cols-1 gap-4 sm:grid-cols-2
|
| 19 |
-
[Parameter] public string CardClass { get; set; } = "rounded-xl border border-slate-200 bg-white p-
|
| 20 |
}
|
|
|
|
| 15 |
|
| 16 |
@code {
|
| 17 |
[Parameter] public IReadOnlyList<DashboardMetric> Metrics { get; set; } = Array.Empty<DashboardMetric>();
|
| 18 |
+
[Parameter] public string GridClass { get; set; } = "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4";
|
| 19 |
+
[Parameter] public string CardClass { get; set; } = "rounded-xl border border-slate-200 bg-white p-4 text-slate-900 shadow-sm shadow-slate-200/50";
|
| 20 |
}
|
TaskTrackingSystem.WebApp/wwwroot/app.css
CHANGED
|
@@ -1,60 +1,60 @@
|
|
| 1 |
:root {
|
| 2 |
-
--brand-primary: #
|
| 3 |
-
--brand-primary-hover: #
|
| 4 |
-
--brand-accent: #
|
| 5 |
-
--app-bg: #
|
| 6 |
--surface: #FFFFFF;
|
| 7 |
-
--surface-muted: #
|
| 8 |
--surface-raised: #FFFFFF;
|
| 9 |
-
--border: #
|
| 10 |
-
--border-strong: #
|
| 11 |
-
--text-primary: #
|
| 12 |
-
--text-muted: #
|
| 13 |
-
--text-soft: #
|
| 14 |
-
--focus-ring: rgba(
|
| 15 |
-
--status-success-bg: #
|
| 16 |
--status-success-text: #0F766E;
|
| 17 |
-
--status-warning-bg: #
|
| 18 |
-
--status-warning-text: #
|
| 19 |
-
--status-danger-bg: #
|
| 20 |
-
--status-danger-text: #
|
| 21 |
-
--sidebar-bg: #
|
| 22 |
-
--sidebar-muted: #
|
| 23 |
-
--sidebar-active: rgba(
|
| 24 |
-
--sidebar-border: rgba(
|
| 25 |
--radius-sm: 0.375rem;
|
| 26 |
--radius-md: 0.5rem;
|
| 27 |
--radius-lg: 0.5rem;
|
| 28 |
-
--shadow-card: 0 1px 2px rgba(
|
| 29 |
-
--shadow-popover: 0 18px
|
| 30 |
}
|
| 31 |
|
| 32 |
html.dark {
|
| 33 |
-
--brand-primary: #
|
| 34 |
-
--brand-primary-hover: #
|
| 35 |
-
--brand-accent: #
|
| 36 |
-
--app-bg: #
|
| 37 |
-
--surface: #
|
| 38 |
-
--surface-muted: #
|
| 39 |
-
--surface-raised: #
|
| 40 |
-
--border: #
|
| 41 |
-
--border-strong: #
|
| 42 |
-
--text-primary: #
|
| 43 |
-
--text-muted: #
|
| 44 |
-
--text-soft: #
|
| 45 |
-
--focus-ring: rgba(
|
| 46 |
-
--status-success-bg: rgba(
|
| 47 |
-
--status-success-text: #
|
| 48 |
-
--status-warning-bg: rgba(
|
| 49 |
-
--status-warning-text: #
|
| 50 |
-
--status-danger-bg: rgba(
|
| 51 |
-
--status-danger-text: #
|
| 52 |
-
--sidebar-bg: #
|
| 53 |
-
--sidebar-muted: #
|
| 54 |
-
--sidebar-active: rgba(
|
| 55 |
-
--sidebar-border: rgba(
|
| 56 |
-
--shadow-card: 0 1px 2px rgba(0, 0, 0, 0.
|
| 57 |
-
--shadow-popover: 0 18px 50px rgba(0, 0, 0, 0.
|
| 58 |
color-scheme: dark;
|
| 59 |
}
|
| 60 |
|
|
@@ -620,7 +620,7 @@ html.dark .flatpickr-day.endRange {
|
|
| 620 |
padding: clamp(1rem, 2vw, 2rem);
|
| 621 |
}
|
| 622 |
|
| 623 |
-
@media (min-width:
|
| 624 |
.app-shell {
|
| 625 |
height: 100dvh;
|
| 626 |
min-height: 100dvh;
|
|
@@ -632,7 +632,8 @@ html.dark .flatpickr-day.endRange {
|
|
| 632 |
inset: 0 auto 0 0;
|
| 633 |
height: 100dvh;
|
| 634 |
min-height: 100dvh;
|
| 635 |
-
transform: translateX(0);
|
|
|
|
| 636 |
}
|
| 637 |
|
| 638 |
.app-main {
|
|
@@ -641,6 +642,71 @@ html.dark .flatpickr-day.endRange {
|
|
| 641 |
}
|
| 642 |
}
|
| 643 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 644 |
.mobile-sidebar-toggle,
|
| 645 |
.mobile-sidebar-close {
|
| 646 |
display: none;
|
|
@@ -835,24 +901,25 @@ html.dark .hover\:bg-indigo-100:hover {
|
|
| 835 |
color: #FFFFFF !important;
|
| 836 |
}
|
| 837 |
|
| 838 |
-
@media (max-width:
|
| 839 |
.app-shell {
|
| 840 |
display: block;
|
| 841 |
min-height: 100vh;
|
| 842 |
overflow: auto;
|
|
|
|
| 843 |
}
|
| 844 |
|
| 845 |
.app-sidebar {
|
| 846 |
position: fixed;
|
| 847 |
inset: 0 auto 0 0;
|
| 848 |
z-index: 60;
|
| 849 |
-
width: min(18rem, calc(100vw - 3rem));
|
| 850 |
transform: translateX(-100%);
|
| 851 |
transition: transform 0.22s ease;
|
| 852 |
}
|
| 853 |
|
| 854 |
body.tts-sidebar-open .app-sidebar {
|
| 855 |
-
transform: translateX(0);
|
| 856 |
}
|
| 857 |
|
| 858 |
.sidebar-scrim {
|
|
@@ -870,7 +937,7 @@ html.dark .hover\:bg-indigo-100:hover {
|
|
| 870 |
|
| 871 |
.mobile-sidebar-toggle,
|
| 872 |
.mobile-sidebar-close {
|
| 873 |
-
display: inline-flex;
|
| 874 |
}
|
| 875 |
|
| 876 |
.app-main {
|
|
@@ -878,12 +945,12 @@ html.dark .hover\:bg-indigo-100:hover {
|
|
| 878 |
}
|
| 879 |
|
| 880 |
.app-topbar {
|
| 881 |
-
min-height: 3.
|
| 882 |
padding: 0 1rem;
|
| 883 |
}
|
| 884 |
|
| 885 |
.app-content {
|
| 886 |
-
padding: 1rem;
|
| 887 |
}
|
| 888 |
|
| 889 |
.app-topbar-title p {
|
|
@@ -905,3 +972,494 @@ html.dark .hover\:bg-indigo-100:hover {
|
|
| 905 |
min-width: 760px;
|
| 906 |
}
|
| 907 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
:root {
|
| 2 |
+
--brand-primary: #0F766E;
|
| 3 |
+
--brand-primary-hover: #115E59;
|
| 4 |
+
--brand-accent: #B45309;
|
| 5 |
+
--app-bg: #F7F8F7;
|
| 6 |
--surface: #FFFFFF;
|
| 7 |
+
--surface-muted: #F1F5F4;
|
| 8 |
--surface-raised: #FFFFFF;
|
| 9 |
+
--border: #DDE5E2;
|
| 10 |
+
--border-strong: #B9C8C3;
|
| 11 |
+
--text-primary: #17211F;
|
| 12 |
+
--text-muted: #64706D;
|
| 13 |
+
--text-soft: #8B9894;
|
| 14 |
+
--focus-ring: rgba(15, 118, 110, 0.24);
|
| 15 |
+
--status-success-bg: #DFF6EE;
|
| 16 |
--status-success-text: #0F766E;
|
| 17 |
+
--status-warning-bg: #FEF3D2;
|
| 18 |
+
--status-warning-text: #9A5B00;
|
| 19 |
+
--status-danger-bg: #FCE4E1;
|
| 20 |
+
--status-danger-text: #B42318;
|
| 21 |
+
--sidebar-bg: #19211F;
|
| 22 |
+
--sidebar-muted: #A5B2AE;
|
| 23 |
+
--sidebar-active: rgba(15, 118, 110, 0.22);
|
| 24 |
+
--sidebar-border: rgba(221, 229, 226, 0.12);
|
| 25 |
--radius-sm: 0.375rem;
|
| 26 |
--radius-md: 0.5rem;
|
| 27 |
--radius-lg: 0.5rem;
|
| 28 |
+
--shadow-card: 0 1px 2px rgba(23, 33, 31, 0.06), 0 12px 28px rgba(23, 33, 31, 0.045);
|
| 29 |
+
--shadow-popover: 0 18px 44px rgba(23, 33, 31, 0.18);
|
| 30 |
}
|
| 31 |
|
| 32 |
html.dark {
|
| 33 |
+
--brand-primary: #5EEAD4;
|
| 34 |
+
--brand-primary-hover: #2DD4BF;
|
| 35 |
+
--brand-accent: #FCD34D;
|
| 36 |
+
--app-bg: #101614;
|
| 37 |
+
--surface: #18201E;
|
| 38 |
+
--surface-muted: #202A27;
|
| 39 |
+
--surface-raised: #1B2522;
|
| 40 |
+
--border: #2E3B37;
|
| 41 |
+
--border-strong: #43524D;
|
| 42 |
+
--text-primary: #F4F7F6;
|
| 43 |
+
--text-muted: #B4C0BC;
|
| 44 |
+
--text-soft: #889692;
|
| 45 |
+
--focus-ring: rgba(94, 234, 212, 0.28);
|
| 46 |
+
--status-success-bg: rgba(45, 212, 191, 0.16);
|
| 47 |
+
--status-success-text: #99F6E4;
|
| 48 |
+
--status-warning-bg: rgba(252, 211, 77, 0.16);
|
| 49 |
+
--status-warning-text: #FDE68A;
|
| 50 |
+
--status-danger-bg: rgba(248, 113, 113, 0.16);
|
| 51 |
+
--status-danger-text: #FCA5A5;
|
| 52 |
+
--sidebar-bg: #111816;
|
| 53 |
+
--sidebar-muted: #9DACA7;
|
| 54 |
+
--sidebar-active: rgba(94, 234, 212, 0.15);
|
| 55 |
+
--sidebar-border: rgba(221, 229, 226, 0.12);
|
| 56 |
+
--shadow-card: 0 1px 2px rgba(0, 0, 0, 0.34);
|
| 57 |
+
--shadow-popover: 0 18px 50px rgba(0, 0, 0, 0.42);
|
| 58 |
color-scheme: dark;
|
| 59 |
}
|
| 60 |
|
|
|
|
| 620 |
padding: clamp(1rem, 2vw, 2rem);
|
| 621 |
}
|
| 622 |
|
| 623 |
+
@media (min-width: 960px) {
|
| 624 |
.app-shell {
|
| 625 |
height: 100dvh;
|
| 626 |
min-height: 100dvh;
|
|
|
|
| 632 |
inset: 0 auto 0 0;
|
| 633 |
height: 100dvh;
|
| 634 |
min-height: 100dvh;
|
| 635 |
+
transform: translateX(0) !important;
|
| 636 |
+
width: var(--app-sidebar-width) !important;
|
| 637 |
}
|
| 638 |
|
| 639 |
.app-main {
|
|
|
|
| 642 |
}
|
| 643 |
}
|
| 644 |
|
| 645 |
+
/* Tiered responsive scaling for laptops & smaller screens (e.g. 13.3" HP EliteBook G6) */
|
| 646 |
+
@media (min-width: 1366px) and (max-width: 1536px) {
|
| 647 |
+
:root {
|
| 648 |
+
font-size: 13.75px;
|
| 649 |
+
}
|
| 650 |
+
.app-shell {
|
| 651 |
+
--app-sidebar-width: 15.75rem;
|
| 652 |
+
}
|
| 653 |
+
.app-content {
|
| 654 |
+
padding: 1.25rem !important;
|
| 655 |
+
}
|
| 656 |
+
}
|
| 657 |
+
|
| 658 |
+
@media (min-width: 1150px) and (max-width: 1365px) {
|
| 659 |
+
:root {
|
| 660 |
+
font-size: 13px;
|
| 661 |
+
}
|
| 662 |
+
.app-shell {
|
| 663 |
+
--app-sidebar-width: 14.75rem;
|
| 664 |
+
}
|
| 665 |
+
.app-content {
|
| 666 |
+
padding: 1rem !important;
|
| 667 |
+
}
|
| 668 |
+
.app-topbar {
|
| 669 |
+
min-height: 3.5rem !important;
|
| 670 |
+
padding: 0 1.25rem !important;
|
| 671 |
+
}
|
| 672 |
+
.app-sidebar-brand {
|
| 673 |
+
min-height: 4rem !important;
|
| 674 |
+
padding: 0.75rem 1rem !important;
|
| 675 |
+
}
|
| 676 |
+
}
|
| 677 |
+
|
| 678 |
+
/* Compact scaling for 13.3" displays with 150% scaling or 960px-1149px viewports */
|
| 679 |
+
@media (min-width: 960px) and (max-width: 1149px) {
|
| 680 |
+
:root {
|
| 681 |
+
font-size: 12.25px;
|
| 682 |
+
}
|
| 683 |
+
.app-shell {
|
| 684 |
+
--app-sidebar-width: 13.75rem;
|
| 685 |
+
}
|
| 686 |
+
.app-content {
|
| 687 |
+
padding: 0.85rem !important;
|
| 688 |
+
}
|
| 689 |
+
.app-topbar {
|
| 690 |
+
min-height: 3.25rem !important;
|
| 691 |
+
padding: 0 1rem !important;
|
| 692 |
+
}
|
| 693 |
+
.app-topbar-title h1 {
|
| 694 |
+
font-size: 0.95rem !important;
|
| 695 |
+
}
|
| 696 |
+
.app-sidebar-brand {
|
| 697 |
+
min-height: 3.75rem !important;
|
| 698 |
+
padding: 0.65rem 0.85rem !important;
|
| 699 |
+
}
|
| 700 |
+
.app-sidebar-logo {
|
| 701 |
+
height: 2rem !important;
|
| 702 |
+
width: 2rem !important;
|
| 703 |
+
}
|
| 704 |
+
main td, main th {
|
| 705 |
+
padding-top: 0.45rem !important;
|
| 706 |
+
padding-bottom: 0.45rem !important;
|
| 707 |
+
}
|
| 708 |
+
}
|
| 709 |
+
|
| 710 |
.mobile-sidebar-toggle,
|
| 711 |
.mobile-sidebar-close {
|
| 712 |
display: none;
|
|
|
|
| 901 |
color: #FFFFFF !important;
|
| 902 |
}
|
| 903 |
|
| 904 |
+
@media (max-width: 959px) {
|
| 905 |
.app-shell {
|
| 906 |
display: block;
|
| 907 |
min-height: 100vh;
|
| 908 |
overflow: auto;
|
| 909 |
+
padding-left: 0 !important;
|
| 910 |
}
|
| 911 |
|
| 912 |
.app-sidebar {
|
| 913 |
position: fixed;
|
| 914 |
inset: 0 auto 0 0;
|
| 915 |
z-index: 60;
|
| 916 |
+
width: min(18rem, calc(100vw - 3rem)) !important;
|
| 917 |
transform: translateX(-100%);
|
| 918 |
transition: transform 0.22s ease;
|
| 919 |
}
|
| 920 |
|
| 921 |
body.tts-sidebar-open .app-sidebar {
|
| 922 |
+
transform: translateX(0) !important;
|
| 923 |
}
|
| 924 |
|
| 925 |
.sidebar-scrim {
|
|
|
|
| 937 |
|
| 938 |
.mobile-sidebar-toggle,
|
| 939 |
.mobile-sidebar-close {
|
| 940 |
+
display: inline-flex !important;
|
| 941 |
}
|
| 942 |
|
| 943 |
.app-main {
|
|
|
|
| 945 |
}
|
| 946 |
|
| 947 |
.app-topbar {
|
| 948 |
+
min-height: 3.5rem;
|
| 949 |
padding: 0 1rem;
|
| 950 |
}
|
| 951 |
|
| 952 |
.app-content {
|
| 953 |
+
padding: 1rem !important;
|
| 954 |
}
|
| 955 |
|
| 956 |
.app-topbar-title p {
|
|
|
|
| 972 |
min-width: 760px;
|
| 973 |
}
|
| 974 |
}
|
| 975 |
+
|
| 976 |
+
/* ==========================================
|
| 977 |
+
UNIVERSAL DARK MODE OVERRIDES
|
| 978 |
+
========================================== */
|
| 979 |
+
html.dark,
|
| 980 |
+
html.dark body,
|
| 981 |
+
html.dark .app-shell,
|
| 982 |
+
html.dark .app-main,
|
| 983 |
+
html.dark .app-content {
|
| 984 |
+
background-color: #0B1120 !important;
|
| 985 |
+
color: #F8FAFC !important;
|
| 986 |
+
}
|
| 987 |
+
|
| 988 |
+
html.dark .bg-white,
|
| 989 |
+
html.dark .bg-card,
|
| 990 |
+
html.dark .bg-popover,
|
| 991 |
+
html.dark [class*="bg-white"] {
|
| 992 |
+
background-color: #111827 !important;
|
| 993 |
+
color: #F8FAFC !important;
|
| 994 |
+
}
|
| 995 |
+
|
| 996 |
+
html.dark .bg-slate-50,
|
| 997 |
+
html.dark .bg-slate-50\/40,
|
| 998 |
+
html.dark .bg-slate-50\/50,
|
| 999 |
+
html.dark .bg-slate-50\/60,
|
| 1000 |
+
html.dark .bg-slate-50\/70,
|
| 1001 |
+
html.dark .bg-slate-50\/95,
|
| 1002 |
+
html.dark .bg-slate-100,
|
| 1003 |
+
html.dark .bg-slate-100\/50,
|
| 1004 |
+
html.dark .bg-muted {
|
| 1005 |
+
background-color: #182235 !important;
|
| 1006 |
+
color: #F8FAFC !important;
|
| 1007 |
+
}
|
| 1008 |
+
|
| 1009 |
+
html.dark .bg-slate-200,
|
| 1010 |
+
html.dark .bg-slate-300 {
|
| 1011 |
+
background-color: #263449 !important;
|
| 1012 |
+
}
|
| 1013 |
+
|
| 1014 |
+
html.dark .text-slate-950,
|
| 1015 |
+
html.dark .text-slate-900,
|
| 1016 |
+
html.dark .text-slate-800,
|
| 1017 |
+
html.dark .text-slate-700,
|
| 1018 |
+
html.dark .text-foreground,
|
| 1019 |
+
html.dark .text-card-foreground,
|
| 1020 |
+
html.dark .text-popover-foreground {
|
| 1021 |
+
color: #F8FAFC !important;
|
| 1022 |
+
}
|
| 1023 |
+
|
| 1024 |
+
html.dark .text-slate-600,
|
| 1025 |
+
html.dark .text-slate-500,
|
| 1026 |
+
html.dark .text-muted,
|
| 1027 |
+
html.dark .text-muted-foreground {
|
| 1028 |
+
color: #CBD5E1 !important;
|
| 1029 |
+
}
|
| 1030 |
+
|
| 1031 |
+
html.dark .text-slate-400,
|
| 1032 |
+
html.dark .text-slate-300 {
|
| 1033 |
+
color: #94A3B8 !important;
|
| 1034 |
+
}
|
| 1035 |
+
|
| 1036 |
+
html.dark .border-slate-100,
|
| 1037 |
+
html.dark .border-slate-200,
|
| 1038 |
+
html.dark .border-slate-300,
|
| 1039 |
+
html.dark .border-border,
|
| 1040 |
+
html.dark .divide-slate-100,
|
| 1041 |
+
html.dark .divide-slate-200 {
|
| 1042 |
+
border-color: #263449 !important;
|
| 1043 |
+
}
|
| 1044 |
+
|
| 1045 |
+
html.dark .shadow-slate-200\/60,
|
| 1046 |
+
html.dark .shadow-slate-200\/50,
|
| 1047 |
+
html.dark .shadow-slate-200\/70,
|
| 1048 |
+
html.dark .shadow-sm,
|
| 1049 |
+
html.dark .shadow-md,
|
| 1050 |
+
html.dark .shadow-lg {
|
| 1051 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45) !important;
|
| 1052 |
+
}
|
| 1053 |
+
|
| 1054 |
+
html.dark svg line[stroke="#e2e8f0"],
|
| 1055 |
+
html.dark svg line[stroke="#E2E8F0"] {
|
| 1056 |
+
stroke: #263449 !important;
|
| 1057 |
+
}
|
| 1058 |
+
|
| 1059 |
+
html.dark input,
|
| 1060 |
+
html.dark select,
|
| 1061 |
+
html.dark textarea,
|
| 1062 |
+
html.dark .form-control,
|
| 1063 |
+
html.dark .form-select {
|
| 1064 |
+
background-color: #111827 !important;
|
| 1065 |
+
color: #F8FAFC !important;
|
| 1066 |
+
border-color: #263449 !important;
|
| 1067 |
+
}
|
| 1068 |
+
|
| 1069 |
+
/* ==========================================
|
| 1070 |
+
PROFESSIONAL UI REFRESH
|
| 1071 |
+
========================================== */
|
| 1072 |
+
body {
|
| 1073 |
+
background:
|
| 1074 |
+
linear-gradient(180deg, rgba(15, 118, 110, 0.035), transparent 22rem),
|
| 1075 |
+
var(--app-bg);
|
| 1076 |
+
}
|
| 1077 |
+
|
| 1078 |
+
::selection {
|
| 1079 |
+
background: rgba(15, 118, 110, 0.18);
|
| 1080 |
+
color: var(--text-primary);
|
| 1081 |
+
}
|
| 1082 |
+
|
| 1083 |
+
.app-shell {
|
| 1084 |
+
background:
|
| 1085 |
+
linear-gradient(180deg, rgba(15, 118, 110, 0.045), transparent 19rem),
|
| 1086 |
+
radial-gradient(circle at 100% 0, rgba(180, 83, 9, 0.05), transparent 18rem),
|
| 1087 |
+
var(--app-bg);
|
| 1088 |
+
}
|
| 1089 |
+
|
| 1090 |
+
.app-sidebar {
|
| 1091 |
+
background:
|
| 1092 |
+
linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent 36%),
|
| 1093 |
+
var(--sidebar-bg);
|
| 1094 |
+
}
|
| 1095 |
+
|
| 1096 |
+
.app-sidebar::before {
|
| 1097 |
+
background:
|
| 1098 |
+
linear-gradient(90deg, rgba(94, 234, 212, 0.14), transparent 0.45rem),
|
| 1099 |
+
radial-gradient(circle at top left, rgba(15, 118, 110, 0.20), transparent 17rem);
|
| 1100 |
+
}
|
| 1101 |
+
|
| 1102 |
+
.app-sidebar-logo {
|
| 1103 |
+
background: linear-gradient(135deg, #0F766E, #B45309);
|
| 1104 |
+
box-shadow: 0 12px 28px rgba(15, 118, 110, 0.24);
|
| 1105 |
+
}
|
| 1106 |
+
|
| 1107 |
+
.app-topbar {
|
| 1108 |
+
background: color-mix(in srgb, var(--surface) 94%, transparent);
|
| 1109 |
+
}
|
| 1110 |
+
|
| 1111 |
+
.app-content {
|
| 1112 |
+
background: transparent;
|
| 1113 |
+
}
|
| 1114 |
+
|
| 1115 |
+
.control-button,
|
| 1116 |
+
main button,
|
| 1117 |
+
main a[class*="inline-flex"],
|
| 1118 |
+
main .btn {
|
| 1119 |
+
border-radius: var(--radius-lg) !important;
|
| 1120 |
+
}
|
| 1121 |
+
|
| 1122 |
+
.control-button {
|
| 1123 |
+
background: color-mix(in srgb, var(--surface) 96%, var(--brand-primary) 4%);
|
| 1124 |
+
}
|
| 1125 |
+
|
| 1126 |
+
.btn-primary,
|
| 1127 |
+
main .bg-violet-500,
|
| 1128 |
+
main .bg-violet-600,
|
| 1129 |
+
main .bg-violet-700,
|
| 1130 |
+
main .bg-purple-500,
|
| 1131 |
+
main .bg-purple-600,
|
| 1132 |
+
main .bg-indigo-500,
|
| 1133 |
+
main .bg-indigo-600,
|
| 1134 |
+
main .bg-blue-600 {
|
| 1135 |
+
background-color: #0F766E !important;
|
| 1136 |
+
border-color: #0F766E !important;
|
| 1137 |
+
color: #FFFFFF !important;
|
| 1138 |
+
}
|
| 1139 |
+
|
| 1140 |
+
.btn-primary:hover,
|
| 1141 |
+
main .hover\:bg-violet-500:hover,
|
| 1142 |
+
main .hover\:bg-violet-600:hover,
|
| 1143 |
+
main .hover\:bg-violet-700:hover,
|
| 1144 |
+
main .hover\:bg-purple-700:hover,
|
| 1145 |
+
main .hover\:bg-blue-600:hover,
|
| 1146 |
+
main .hover\:bg-blue-700:hover {
|
| 1147 |
+
background-color: #115E59 !important;
|
| 1148 |
+
border-color: #115E59 !important;
|
| 1149 |
+
color: #FFFFFF !important;
|
| 1150 |
+
}
|
| 1151 |
+
|
| 1152 |
+
main .text-violet-500,
|
| 1153 |
+
main .text-violet-600,
|
| 1154 |
+
main .text-violet-700,
|
| 1155 |
+
main .text-purple-600,
|
| 1156 |
+
main .text-purple-700,
|
| 1157 |
+
main .text-indigo-600,
|
| 1158 |
+
main .text-indigo-700,
|
| 1159 |
+
main .text-blue-600,
|
| 1160 |
+
main .text-blue-700 {
|
| 1161 |
+
color: #0F766E !important;
|
| 1162 |
+
}
|
| 1163 |
+
|
| 1164 |
+
main .hover\:text-violet-500:hover,
|
| 1165 |
+
main .hover\:text-violet-600:hover,
|
| 1166 |
+
main .hover\:text-violet-700:hover,
|
| 1167 |
+
main .hover\:text-violet-800:hover,
|
| 1168 |
+
main .hover\:text-blue-600:hover,
|
| 1169 |
+
main .hover\:text-blue-700:hover {
|
| 1170 |
+
color: #115E59 !important;
|
| 1171 |
+
}
|
| 1172 |
+
|
| 1173 |
+
main .bg-violet-50,
|
| 1174 |
+
main .bg-violet-50\/10,
|
| 1175 |
+
main .bg-violet-50\/40,
|
| 1176 |
+
main .bg-violet-50\/60,
|
| 1177 |
+
main .bg-violet-50\/70,
|
| 1178 |
+
main .bg-violet-100,
|
| 1179 |
+
main .bg-purple-50,
|
| 1180 |
+
main .bg-purple-100,
|
| 1181 |
+
main .bg-indigo-50,
|
| 1182 |
+
main .bg-indigo-100,
|
| 1183 |
+
main .bg-blue-50,
|
| 1184 |
+
main .bg-blue-100 {
|
| 1185 |
+
background-color: #E6F4F1 !important;
|
| 1186 |
+
}
|
| 1187 |
+
|
| 1188 |
+
main .border-violet-100,
|
| 1189 |
+
main .border-violet-200,
|
| 1190 |
+
main .border-violet-300,
|
| 1191 |
+
main .border-indigo-100,
|
| 1192 |
+
main .border-indigo-200,
|
| 1193 |
+
main .border-blue-100,
|
| 1194 |
+
main .border-blue-200 {
|
| 1195 |
+
border-color: #B7DAD4 !important;
|
| 1196 |
+
}
|
| 1197 |
+
|
| 1198 |
+
main .focus\:ring-violet-100:focus,
|
| 1199 |
+
main .focus\:ring-violet-500:focus,
|
| 1200 |
+
main .focus\:ring-violet-600:focus,
|
| 1201 |
+
main .focus\:ring-slate-900:focus {
|
| 1202 |
+
--tw-ring-color: var(--focus-ring) !important;
|
| 1203 |
+
}
|
| 1204 |
+
|
| 1205 |
+
main .focus\:border-violet-400:focus,
|
| 1206 |
+
main .focus\:border-violet-600:focus {
|
| 1207 |
+
border-color: var(--brand-primary) !important;
|
| 1208 |
+
}
|
| 1209 |
+
|
| 1210 |
+
main .accent-violet-600,
|
| 1211 |
+
html.dark main .accent-violet-600 {
|
| 1212 |
+
accent-color: #0F766E !important;
|
| 1213 |
+
}
|
| 1214 |
+
|
| 1215 |
+
main .bg-white,
|
| 1216 |
+
main .bg-card,
|
| 1217 |
+
main .bg-popover {
|
| 1218 |
+
background-color: var(--surface) !important;
|
| 1219 |
+
color: var(--text-primary) !important;
|
| 1220 |
+
}
|
| 1221 |
+
|
| 1222 |
+
main .bg-slate-50,
|
| 1223 |
+
main .bg-slate-50\/40,
|
| 1224 |
+
main .bg-slate-50\/50,
|
| 1225 |
+
main .bg-slate-50\/60,
|
| 1226 |
+
main .bg-slate-50\/70,
|
| 1227 |
+
main .bg-slate-50\/95,
|
| 1228 |
+
main .bg-muted {
|
| 1229 |
+
background-color: var(--surface-muted) !important;
|
| 1230 |
+
}
|
| 1231 |
+
|
| 1232 |
+
main .border-slate-100,
|
| 1233 |
+
main .border-slate-200,
|
| 1234 |
+
main .border-slate-300,
|
| 1235 |
+
main .border-border,
|
| 1236 |
+
main .divide-slate-100,
|
| 1237 |
+
main .divide-slate-200 {
|
| 1238 |
+
border-color: var(--border) !important;
|
| 1239 |
+
}
|
| 1240 |
+
|
| 1241 |
+
main .text-slate-950,
|
| 1242 |
+
main .text-slate-900,
|
| 1243 |
+
main .text-slate-800,
|
| 1244 |
+
main .text-slate-700,
|
| 1245 |
+
main .text-foreground,
|
| 1246 |
+
main .text-card-foreground,
|
| 1247 |
+
main .text-popover-foreground {
|
| 1248 |
+
color: var(--text-primary) !important;
|
| 1249 |
+
}
|
| 1250 |
+
|
| 1251 |
+
main .text-slate-600,
|
| 1252 |
+
main .text-slate-500,
|
| 1253 |
+
main .text-muted,
|
| 1254 |
+
main .text-muted-foreground {
|
| 1255 |
+
color: var(--text-muted) !important;
|
| 1256 |
+
}
|
| 1257 |
+
|
| 1258 |
+
main .text-slate-400,
|
| 1259 |
+
main .text-slate-300 {
|
| 1260 |
+
color: var(--text-soft) !important;
|
| 1261 |
+
}
|
| 1262 |
+
|
| 1263 |
+
main .shadow-sm,
|
| 1264 |
+
main .shadow-md,
|
| 1265 |
+
main .shadow-lg,
|
| 1266 |
+
main .shadow-slate-200\/50,
|
| 1267 |
+
main .shadow-slate-200\/60,
|
| 1268 |
+
main .shadow-slate-200\/70 {
|
| 1269 |
+
box-shadow: var(--shadow-card) !important;
|
| 1270 |
+
}
|
| 1271 |
+
|
| 1272 |
+
main :is(.rounded-xl, .rounded-2xl, .rounded-3xl, .rounded-\[24px\], .rounded-\[28px\], .rounded-\[32px\]) {
|
| 1273 |
+
border-radius: var(--radius-lg) !important;
|
| 1274 |
+
}
|
| 1275 |
+
|
| 1276 |
+
main :is(table, .surface-panel),
|
| 1277 |
+
main :is(.border-slate-200.bg-white, .border-slate-100.bg-white) {
|
| 1278 |
+
box-shadow: var(--shadow-card);
|
| 1279 |
+
}
|
| 1280 |
+
|
| 1281 |
+
main thead tr {
|
| 1282 |
+
background: color-mix(in srgb, var(--surface-muted) 88%, var(--brand-primary) 12%) !important;
|
| 1283 |
+
}
|
| 1284 |
+
|
| 1285 |
+
main th {
|
| 1286 |
+
font-size: 0.72rem !important;
|
| 1287 |
+
letter-spacing: 0.06em !important;
|
| 1288 |
+
}
|
| 1289 |
+
|
| 1290 |
+
main tbody tr:hover {
|
| 1291 |
+
background: color-mix(in srgb, var(--surface-muted) 84%, var(--brand-primary) 16%) !important;
|
| 1292 |
+
}
|
| 1293 |
+
|
| 1294 |
+
main :is(input, select, textarea, .form-control, .form-select) {
|
| 1295 |
+
min-height: 2.45rem;
|
| 1296 |
+
}
|
| 1297 |
+
|
| 1298 |
+
main label {
|
| 1299 |
+
color: var(--text-muted) !important;
|
| 1300 |
+
font-weight: 650;
|
| 1301 |
+
}
|
| 1302 |
+
|
| 1303 |
+
main [class*="bg-emerald-100"],
|
| 1304 |
+
main [class*="bg-green-100"] {
|
| 1305 |
+
background-color: var(--status-success-bg) !important;
|
| 1306 |
+
color: var(--status-success-text) !important;
|
| 1307 |
+
}
|
| 1308 |
+
|
| 1309 |
+
main [class*="bg-amber-100"],
|
| 1310 |
+
main [class*="bg-yellow-100"],
|
| 1311 |
+
main [class*="bg-orange-100"] {
|
| 1312 |
+
background-color: var(--status-warning-bg) !important;
|
| 1313 |
+
color: var(--status-warning-text) !important;
|
| 1314 |
+
}
|
| 1315 |
+
|
| 1316 |
+
main [class*="bg-red-100"],
|
| 1317 |
+
main [class*="bg-rose-100"] {
|
| 1318 |
+
background-color: var(--status-danger-bg) !important;
|
| 1319 |
+
color: var(--status-danger-text) !important;
|
| 1320 |
+
}
|
| 1321 |
+
|
| 1322 |
+
main svg line[stroke="#e2e8f0"],
|
| 1323 |
+
main svg line[stroke="#E2E8F0"] {
|
| 1324 |
+
stroke: var(--border) !important;
|
| 1325 |
+
}
|
| 1326 |
+
|
| 1327 |
+
main svg path[stroke="#2563eb"],
|
| 1328 |
+
main svg path[stroke="#3b82f6"] {
|
| 1329 |
+
stroke: var(--brand-primary) !important;
|
| 1330 |
+
}
|
| 1331 |
+
|
| 1332 |
+
main svg circle[fill="#2563eb"],
|
| 1333 |
+
main svg circle[fill="#3b82f6"] {
|
| 1334 |
+
fill: var(--brand-primary) !important;
|
| 1335 |
+
}
|
| 1336 |
+
|
| 1337 |
+
html.dark,
|
| 1338 |
+
html.dark body,
|
| 1339 |
+
html.dark .app-shell,
|
| 1340 |
+
html.dark .app-main,
|
| 1341 |
+
html.dark .app-content {
|
| 1342 |
+
background-color: var(--app-bg) !important;
|
| 1343 |
+
color: var(--text-primary) !important;
|
| 1344 |
+
}
|
| 1345 |
+
|
| 1346 |
+
html.dark body {
|
| 1347 |
+
background:
|
| 1348 |
+
linear-gradient(180deg, rgba(94, 234, 212, 0.04), transparent 22rem),
|
| 1349 |
+
var(--app-bg);
|
| 1350 |
+
}
|
| 1351 |
+
|
| 1352 |
+
html.dark .app-shell {
|
| 1353 |
+
background:
|
| 1354 |
+
linear-gradient(180deg, rgba(94, 234, 212, 0.045), transparent 18rem),
|
| 1355 |
+
var(--app-bg);
|
| 1356 |
+
}
|
| 1357 |
+
|
| 1358 |
+
html.dark main .bg-white,
|
| 1359 |
+
html.dark main .bg-card,
|
| 1360 |
+
html.dark main .bg-popover,
|
| 1361 |
+
html.dark main [class*="bg-white"] {
|
| 1362 |
+
background-color: var(--surface) !important;
|
| 1363 |
+
color: var(--text-primary) !important;
|
| 1364 |
+
}
|
| 1365 |
+
|
| 1366 |
+
html.dark main .bg-slate-50,
|
| 1367 |
+
html.dark main .bg-slate-50\/40,
|
| 1368 |
+
html.dark main .bg-slate-50\/50,
|
| 1369 |
+
html.dark main .bg-slate-50\/60,
|
| 1370 |
+
html.dark main .bg-slate-50\/70,
|
| 1371 |
+
html.dark main .bg-slate-50\/95,
|
| 1372 |
+
html.dark main .bg-slate-100,
|
| 1373 |
+
html.dark main .bg-slate-100\/50,
|
| 1374 |
+
html.dark main .bg-muted {
|
| 1375 |
+
background-color: var(--surface-muted) !important;
|
| 1376 |
+
color: var(--text-primary) !important;
|
| 1377 |
+
}
|
| 1378 |
+
|
| 1379 |
+
html.dark main .bg-slate-200,
|
| 1380 |
+
html.dark main .bg-slate-300 {
|
| 1381 |
+
background-color: #2E3B37 !important;
|
| 1382 |
+
}
|
| 1383 |
+
|
| 1384 |
+
html.dark main .text-slate-950,
|
| 1385 |
+
html.dark main .text-slate-900,
|
| 1386 |
+
html.dark main .text-slate-800,
|
| 1387 |
+
html.dark main .text-slate-700,
|
| 1388 |
+
html.dark main .text-foreground,
|
| 1389 |
+
html.dark main .text-card-foreground,
|
| 1390 |
+
html.dark main .text-popover-foreground {
|
| 1391 |
+
color: var(--text-primary) !important;
|
| 1392 |
+
}
|
| 1393 |
+
|
| 1394 |
+
html.dark main .text-slate-600,
|
| 1395 |
+
html.dark main .text-slate-500,
|
| 1396 |
+
html.dark main .text-muted,
|
| 1397 |
+
html.dark main .text-muted-foreground {
|
| 1398 |
+
color: var(--text-muted) !important;
|
| 1399 |
+
}
|
| 1400 |
+
|
| 1401 |
+
html.dark main .text-slate-400,
|
| 1402 |
+
html.dark main .text-slate-300 {
|
| 1403 |
+
color: var(--text-soft) !important;
|
| 1404 |
+
}
|
| 1405 |
+
|
| 1406 |
+
html.dark main .border-slate-100,
|
| 1407 |
+
html.dark main .border-slate-200,
|
| 1408 |
+
html.dark main .border-slate-300,
|
| 1409 |
+
html.dark main .border-border,
|
| 1410 |
+
html.dark main .divide-slate-100,
|
| 1411 |
+
html.dark main .divide-slate-200 {
|
| 1412 |
+
border-color: var(--border) !important;
|
| 1413 |
+
}
|
| 1414 |
+
|
| 1415 |
+
html.dark main .bg-violet-50,
|
| 1416 |
+
html.dark main .bg-violet-50\/10,
|
| 1417 |
+
html.dark main .bg-violet-50\/40,
|
| 1418 |
+
html.dark main .bg-violet-50\/60,
|
| 1419 |
+
html.dark main .bg-violet-50\/70,
|
| 1420 |
+
html.dark main .bg-violet-100,
|
| 1421 |
+
html.dark main .bg-purple-50,
|
| 1422 |
+
html.dark main .bg-purple-100,
|
| 1423 |
+
html.dark main .bg-indigo-50,
|
| 1424 |
+
html.dark main .bg-indigo-100,
|
| 1425 |
+
html.dark main .bg-blue-50,
|
| 1426 |
+
html.dark main .bg-blue-100 {
|
| 1427 |
+
background-color: rgba(94, 234, 212, 0.13) !important;
|
| 1428 |
+
}
|
| 1429 |
+
|
| 1430 |
+
html.dark main .text-violet-500,
|
| 1431 |
+
html.dark main .text-violet-600,
|
| 1432 |
+
html.dark main .text-violet-700,
|
| 1433 |
+
html.dark main .text-purple-600,
|
| 1434 |
+
html.dark main .text-purple-700,
|
| 1435 |
+
html.dark main .text-indigo-600,
|
| 1436 |
+
html.dark main .text-indigo-700,
|
| 1437 |
+
html.dark main .text-blue-600,
|
| 1438 |
+
html.dark main .text-blue-700 {
|
| 1439 |
+
color: var(--brand-primary) !important;
|
| 1440 |
+
}
|
| 1441 |
+
|
| 1442 |
+
html.dark main .btn-primary,
|
| 1443 |
+
html.dark main .bg-primary,
|
| 1444 |
+
html.dark main .bg-violet-500,
|
| 1445 |
+
html.dark main .bg-violet-600,
|
| 1446 |
+
html.dark main .bg-violet-700,
|
| 1447 |
+
html.dark main .bg-purple-500,
|
| 1448 |
+
html.dark main .bg-purple-600,
|
| 1449 |
+
html.dark main .bg-indigo-500,
|
| 1450 |
+
html.dark main .bg-indigo-600,
|
| 1451 |
+
html.dark main .bg-blue-600 {
|
| 1452 |
+
background-color: #0F766E !important;
|
| 1453 |
+
border-color: #0F766E !important;
|
| 1454 |
+
color: #FFFFFF !important;
|
| 1455 |
+
}
|
| 1456 |
+
|
| 1457 |
+
html.dark input,
|
| 1458 |
+
html.dark select,
|
| 1459 |
+
html.dark textarea,
|
| 1460 |
+
html.dark .form-control,
|
| 1461 |
+
html.dark .form-select {
|
| 1462 |
+
background-color: var(--surface-raised) !important;
|
| 1463 |
+
color: var(--text-primary) !important;
|
| 1464 |
+
border-color: var(--border) !important;
|
| 1465 |
+
}
|