User commited on
Commit
be17a46
·
1 Parent(s): 22f4a07

Deploy refreshed UI theme

Browse files
TaskTrackingSystem.WebApp/Components/App.razor CHANGED
@@ -71,40 +71,40 @@
71
  };
72
  </script>
73
  <script>
74
- const brandDark = "#172554";
75
- const brandDarkAlt = "#1E3A8A";
76
- const brandPrimary = "#2563EB";
77
- const brandPrimaryHover = "#1D4ED8";
78
- const brandAccent = "#0F766E";
79
- const brandLight = "#EFF6FF";
80
- const brandMuted = "#64748B";
81
 
82
- const semanticRedBg = "#FFE4E6";
83
- const semanticRedText = "#BE123C";
84
 
85
- const semanticGreenBg = "#CCFBF1";
86
  const semanticGreenText = "#0F766E";
87
 
88
- const semanticNeutralBg = "#F8FAFC";
89
- const semanticNeutralText = "#475569";
90
 
91
- const neutralBg = "#F6F8FB";
92
- const neutralBorder = "#E2E8F0";
93
- const neutralMuted = "#64748B";
94
- const neutralDark = "#0F172A";
95
 
96
  const customGray = {
97
  50: neutralBg,
98
- 100: "#F1F5F9",
99
  200: neutralBorder,
100
- 300: "#CBD5E1",
101
- 400: "#94A3B8",
102
  500: neutralMuted,
103
- 600: "#475569",
104
- 700: "#334155",
105
- 800: "#1E293B",
106
  900: neutralDark,
107
- 950: "#020617"
108
  };
109
 
110
  tailwind.config = {
@@ -207,12 +207,12 @@
207
  900: "#0C4A6E"
208
  },
209
  blue: {
210
- 50: "#EFF6FF",
211
- 100: "#DBEAFE",
212
- 200: "#BFDBFE",
213
- 300: "#93C5FD",
214
- 400: "#60A5FA",
215
- 500: "#3B82F6",
216
  600: brandPrimary,
217
  700: brandPrimaryHover,
218
  800: brandDarkAlt,
@@ -285,7 +285,7 @@
285
  chart: {
286
  purple: brandPrimary,
287
  teal: "#14B8A6",
288
- green: "#10B981",
289
  neutral: neutralBorder
290
  },
291
 
@@ -349,15 +349,15 @@
349
  text: null
350
  },
351
  tooltip: {
352
- backgroundColor: 'rgba(255, 255, 255, 0.95)',
353
  borderWidth: 1,
354
- borderColor: '#e2e8f0',
355
- borderRadius: 12,
356
  shadow: true,
357
  style: {
358
  fontFamily: 'Inter, sans-serif',
359
  fontSize: '13px',
360
- color: '#0f172a'
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.95)',
439
  borderWidth: 1,
440
- borderColor: '#e2e8f0',
441
- borderRadius: 12,
442
  shadow: true,
443
  style: {
444
  fontSize: '13px',
445
- color: '#0f172a'
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: '#f1f5f9',
462
- lineColor: '#e2e8f0',
463
- tickColor: '#e2e8f0',
464
  labels: {
465
  format: '{value:%b %Y}',
466
  style: {
467
- color: '#64748b',
468
  fontSize: '11px'
469
  }
470
  },
471
  currentDateIndicator: {
472
- color: '#2563eb',
473
  dashStyle: 'ShortDash',
474
  width: 2,
475
  label: {
476
  format: 'Today',
477
  style: {
478
- color: '#2563eb',
479
  fontWeight: 'bold'
480
  }
481
  }
@@ -483,10 +483,10 @@
483
  }],
484
  yAxis: {
485
  gridLineWidth: 1,
486
- gridLineColor: '#f1f5f9',
487
  labels: {
488
  style: {
489
- color: '#334155',
490
  fontSize: '12px',
491
  fontWeight: '600'
492
  }
@@ -528,7 +528,7 @@
528
  amount: item.completed,
529
  fill: item.color
530
  },
531
- color: '#e2e8f0'
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 lg:flex lg:overflow-hidden">
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 w-72 -translate-x-full flex-col overflow-hidden border-r border-slate-800 bg-slate-950 text-white transition-transform duration-200 lg:static lg:z-auto lg:min-h-screen lg:translate-x-0 lg:shrink-0">
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 bg-blue-600 text-white shadow-sm">
15
- <i data-lucide="flame" class="h-5 w-5 fill-current"></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 inline-flex 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 lg:hidden"
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 lg:min-h-screen">
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 lg:px-6">
63
  <div class="flex min-w-0 items-center gap-3">
64
  <button type="button"
65
- class="control-button mobile-sidebar-toggle inline-flex 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-blue-600 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-300 dark:hover:bg-slate-800 dark:hover:text-white lg:hidden"
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 p-4 lg:p-8">
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: #0F172A;
14
  }
15
 
16
  .top-row {
17
- background-color: #ffffff;
18
- border-bottom: 1px solid #E5E7EB;
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: #6B7280;
31
  }
32
 
33
  .top-row ::deep a:hover,
34
  .top-row ::deep .btn-link:hover {
35
  text-decoration: underline;
36
- color: #111827;
37
  }
38
 
39
  @media (min-width: 641px) {
@@ -50,8 +50,8 @@ main {
50
  }
51
 
52
  #blazor-error-ui {
53
- background: #FFE4E6;
54
- color: #991B1B;
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(255, 255, 255, 0.08);
28
- background-color: rgba(255, 255, 255, 0.07);
29
  color: #FFFFFF;
30
  }
31
 
32
  ::deep a.nav-link-item.active {
33
- border-color: rgba(96, 165, 250, 0.28) !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);
 
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="flame" class="h-6 w-6 fill-current"></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>
 
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="flame" class="h-6 w-6 fill-current"></i>
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="flame" class="h-6 w-6 fill-current"></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>
 
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 xl:grid-cols-4">
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-5 text-slate-900 shadow-sm shadow-slate-200/50" />
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 xl:grid-cols-5">
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 xl:grid-cols-4">
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 xl:grid-cols-[minmax(0,1.7fr)_minmax(340px,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">
 
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 xl:grid-cols-[minmax(0,1.7fr)_minmax(340px,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,7 +121,7 @@
121
  </ChartCard>
122
  </div>
123
 
124
- <div class="grid grid-cols-1 gap-5 xl:grid-cols-[minmax(0,1.25fr)_minmax(340px,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>
 
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 xl:grid-cols-[minmax(0,1.7fr)_minmax(340px,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,7 +79,7 @@
79
  </ChartCard>
80
  </div>
81
 
82
- <div class="grid grid-cols-1 gap-5 xl: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>
 
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 xl:grid-cols-4";
19
- [Parameter] public string CardClass { get; set; } = "rounded-xl border border-slate-200 bg-white p-5 text-slate-900 shadow-sm shadow-slate-200/50";
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: #2563EB;
3
- --brand-primary-hover: #1D4ED8;
4
- --brand-accent: #0F766E;
5
- --app-bg: #F6F8FB;
6
  --surface: #FFFFFF;
7
- --surface-muted: #F8FAFC;
8
  --surface-raised: #FFFFFF;
9
- --border: #E2E8F0;
10
- --border-strong: #CBD5E1;
11
- --text-primary: #0F172A;
12
- --text-muted: #64748B;
13
- --text-soft: #94A3B8;
14
- --focus-ring: rgba(37, 99, 235, 0.24);
15
- --status-success-bg: #CCFBF1;
16
  --status-success-text: #0F766E;
17
- --status-warning-bg: #FEF3C7;
18
- --status-warning-text: #B45309;
19
- --status-danger-bg: #FFE4E6;
20
- --status-danger-text: #BE123C;
21
- --sidebar-bg: #0B1220;
22
- --sidebar-muted: #9AA6B8;
23
- --sidebar-active: rgba(37, 99, 235, 0.18);
24
- --sidebar-border: rgba(148, 163, 184, 0.16);
25
  --radius-sm: 0.375rem;
26
  --radius-md: 0.5rem;
27
  --radius-lg: 0.5rem;
28
- --shadow-card: 0 1px 2px rgba(15, 23, 42, 0.06);
29
- --shadow-popover: 0 18px 40px rgba(15, 23, 42, 0.16);
30
  }
31
 
32
  html.dark {
33
- --brand-primary: #60A5FA;
34
- --brand-primary-hover: #93C5FD;
35
- --brand-accent: #2DD4BF;
36
- --app-bg: #0B1120;
37
- --surface: #111827;
38
- --surface-muted: #182235;
39
- --surface-raised: #0F172A;
40
- --border: #263449;
41
- --border-strong: #334155;
42
- --text-primary: #F8FAFC;
43
- --text-muted: #CBD5E1;
44
- --text-soft: #94A3B8;
45
- --focus-ring: rgba(96, 165, 250, 0.30);
46
- --status-success-bg: rgba(20, 184, 166, 0.18);
47
- --status-success-text: #5EEAD4;
48
- --status-warning-bg: rgba(245, 158, 11, 0.18);
49
- --status-warning-text: #FCD34D;
50
- --status-danger-bg: rgba(244, 63, 94, 0.18);
51
- --status-danger-text: #FDA4AF;
52
- --sidebar-bg: #060B16;
53
- --sidebar-muted: #94A3B8;
54
- --sidebar-active: rgba(96, 165, 250, 0.18);
55
- --sidebar-border: rgba(148, 163, 184, 0.18);
56
- --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.28);
57
- --shadow-popover: 0 18px 50px rgba(0, 0, 0, 0.35);
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: 1024px) {
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: 1023px) {
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.75rem;
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
+ }