roadmap-kit 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,20 +2,192 @@
2
2
  @tailwind components;
3
3
  @tailwind utilities;
4
4
 
5
+ /* ============================================
6
+ THEME: GLASS (Default)
7
+ Modern, clean interface inspired by CBC-WEB
8
+ ============================================ */
5
9
  @layer base {
6
- :root {
7
- --matrix: #00ff88;
8
- --signal: #ff9500;
9
- --cyber: #00d4ff;
10
- --alert: #ff3366;
10
+ :root,
11
+ [data-theme="glass"] {
12
+ /* Colors */
13
+ --bg-primary: #f8fafc;
14
+ --bg-secondary: #f1f5f9;
15
+ --bg-card: rgba(255, 255, 255, 0.7);
16
+ --bg-card-hover: rgba(255, 255, 255, 0.9);
17
+ --bg-input: #ffffff;
18
+ --bg-sidebar: rgba(255, 255, 255, 0.5);
19
+
20
+ --text-primary: #1e293b;
21
+ --text-secondary: #475569;
22
+ --text-muted: #94a3b8;
23
+ --text-inverse: #ffffff;
24
+
25
+ --accent-primary: #10b981;
26
+ --accent-secondary: #f59e0b;
27
+ --accent-tertiary: #3b82f6;
28
+ --accent-danger: #ef4444;
29
+
30
+ --border-color: rgba(0, 0, 0, 0.08);
31
+ --border-color-strong: rgba(0, 0, 0, 0.15);
32
+
33
+ /* Effects */
34
+ --radius-sm: 0.5rem;
35
+ --radius-md: 0.75rem;
36
+ --radius-lg: 1rem;
37
+ --radius-xl: 1.5rem;
38
+
39
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
40
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
41
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
42
+ --shadow-glow: none;
43
+
44
+ --backdrop-blur: blur(12px);
45
+ --transition: all 0.2s ease;
46
+
47
+ /* Typography */
48
+ --font-heading: 'Inter', system-ui, -apple-system, sans-serif;
49
+ --font-body: 'Inter', system-ui, -apple-system, sans-serif;
50
+ --font-mono: 'Fira Code', 'Consolas', monospace;
51
+
52
+ /* Status colors */
53
+ --status-completed: #10b981;
54
+ --status-in-progress: #f59e0b;
55
+ --status-pending: #94a3b8;
56
+
57
+ /* Special */
58
+ --scanlines: none;
59
+ --grid-bg: none;
60
+ --nav-indicator: var(--accent-primary);
61
+ --card-border-glow: none;
62
+ }
63
+
64
+ /* Glass theme dark mode */
65
+ [data-theme="glass"].dark,
66
+ .dark[data-theme="glass"] {
67
+ --bg-primary: #0f172a;
68
+ --bg-secondary: #1e293b;
69
+ --bg-card: rgba(30, 41, 59, 0.7);
70
+ --bg-card-hover: rgba(30, 41, 59, 0.9);
71
+ --bg-input: #1e293b;
72
+ --bg-sidebar: rgba(15, 23, 42, 0.8);
73
+
74
+ --text-primary: #f1f5f9;
75
+ --text-secondary: #cbd5e1;
76
+ --text-muted: #64748b;
77
+
78
+ --border-color: rgba(255, 255, 255, 0.08);
79
+ --border-color-strong: rgba(255, 255, 255, 0.15);
80
+ }
81
+ }
82
+
83
+ /* ============================================
84
+ THEME: MATRIX
85
+ Cyberpunk terminal aesthetic
86
+ ============================================ */
87
+ @layer base {
88
+ [data-theme="matrix"] {
89
+ /* Colors */
90
+ --bg-primary: #000000;
91
+ --bg-secondary: #0a0a0a;
92
+ --bg-card: #0d0d0d;
93
+ --bg-card-hover: #111111;
94
+ --bg-input: #0a0a0a;
95
+ --bg-sidebar: #050505;
96
+
97
+ --text-primary: #e0e0e0;
98
+ --text-secondary: #999999;
99
+ --text-muted: #555555;
100
+ --text-inverse: #000000;
101
+
102
+ --accent-primary: #00ff88;
103
+ --accent-secondary: #ff9500;
104
+ --accent-tertiary: #00d4ff;
105
+ --accent-danger: #ff3366;
106
+
107
+ --border-color: rgba(0, 255, 136, 0.15);
108
+ --border-color-strong: rgba(0, 255, 136, 0.3);
109
+
110
+ /* Effects */
111
+ --radius-sm: 0;
112
+ --radius-md: 0;
113
+ --radius-lg: 0;
114
+ --radius-xl: 0;
115
+
116
+ --shadow-sm: none;
117
+ --shadow-md: none;
118
+ --shadow-lg: 0 0 30px rgba(0, 255, 136, 0.2);
119
+ --shadow-glow: 0 0 20px rgba(0, 255, 136, 0.3);
120
+
121
+ --backdrop-blur: none;
122
+ --transition: all 0.2s ease;
123
+
124
+ /* Typography */
125
+ --font-heading: 'Orbitron', 'IBM Plex Mono', monospace;
126
+ --font-body: 'IBM Plex Mono', monospace;
127
+ --font-mono: 'IBM Plex Mono', monospace;
128
+
129
+ /* Status colors */
130
+ --status-completed: #00ff88;
131
+ --status-in-progress: #ff9500;
132
+ --status-pending: #555555;
133
+
134
+ /* Special Matrix effects */
135
+ --scanlines: repeating-linear-gradient(
136
+ 0deg,
137
+ transparent,
138
+ transparent 2px,
139
+ rgba(0, 0, 0, 0.1) 2px,
140
+ rgba(0, 0, 0, 0.1) 4px
141
+ );
142
+ --grid-bg:
143
+ linear-gradient(rgba(0, 255, 136, 0.03) 1px, transparent 1px),
144
+ linear-gradient(90deg, rgba(0, 255, 136, 0.03) 1px, transparent 1px);
145
+ --nav-indicator: var(--accent-primary);
146
+ --card-border-glow: 0 0 10px rgba(0, 255, 136, 0.3);
147
+ }
148
+
149
+ /* Matrix theme light mode - cyberpunk with lighter background */
150
+ [data-theme="matrix"].light,
151
+ .light[data-theme="matrix"] {
152
+ --bg-primary: #1a1a2e;
153
+ --bg-secondary: #16213e;
154
+ --bg-card: rgba(26, 26, 46, 0.9);
155
+ --bg-card-hover: rgba(30, 30, 60, 0.95);
156
+ --bg-input: #16213e;
157
+ --bg-sidebar: #0f0f1a;
158
+
159
+ --text-primary: #eaeaea;
160
+ --text-secondary: #b8b8b8;
161
+ --text-muted: #666666;
162
+
163
+ --border-color: rgba(0, 255, 136, 0.2);
164
+ --border-color-strong: rgba(0, 255, 136, 0.4);
165
+ }
166
+ }
167
+
168
+ /* ============================================
169
+ BASE STYLES (Theme-agnostic)
170
+ ============================================ */
171
+ @layer base {
172
+ * {
173
+ box-sizing: border-box;
11
174
  }
12
175
 
13
176
  ::selection {
14
- background-color: rgba(0, 255, 136, 0.3);
15
- color: white;
177
+ background-color: rgba(var(--accent-primary), 0.3);
178
+ background-color: color-mix(in srgb, var(--accent-primary) 30%, transparent);
179
+ color: var(--text-primary);
16
180
  }
17
181
 
18
- /* Custom scrollbar */
182
+ body {
183
+ background: var(--bg-primary);
184
+ color: var(--text-primary);
185
+ font-family: var(--font-body);
186
+ transition: var(--transition);
187
+ min-height: 100vh;
188
+ }
189
+
190
+ /* Scrollbar */
19
191
  ::-webkit-scrollbar {
20
192
  width: 6px;
21
193
  height: 6px;
@@ -26,32 +198,12 @@
26
198
  }
27
199
 
28
200
  ::-webkit-scrollbar-thumb {
29
- background: rgba(0, 255, 136, 0.2);
30
- border-radius: 3px;
201
+ background: var(--border-color-strong);
202
+ border-radius: var(--radius-sm);
31
203
  }
32
204
 
33
205
  ::-webkit-scrollbar-thumb:hover {
34
- background: rgba(0, 255, 136, 0.4);
35
- }
36
-
37
- /* Select styling */
38
- select {
39
- background-color: #0a0a0a;
40
- color: #00ff88;
41
- border: 1px solid rgba(0, 255, 136, 0.2);
42
- }
43
-
44
- select option {
45
- background-color: #0a0a0a;
46
- color: #e0e0e0;
47
- padding: 12px;
48
- }
49
-
50
- select option:hover,
51
- select option:focus,
52
- select option:checked {
53
- background-color: rgba(0, 255, 136, 0.1);
54
- color: #00ff88;
206
+ background: var(--accent-primary);
55
207
  }
56
208
 
57
209
  /* Focus styles */
@@ -59,382 +211,750 @@
59
211
  textarea:focus,
60
212
  select:focus {
61
213
  outline: none;
62
- border-color: var(--matrix);
63
- box-shadow: 0 0 0 1px var(--matrix), 0 0 20px rgba(0, 255, 136, 0.2);
214
+ border-color: var(--accent-primary);
215
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-primary) 20%, transparent);
64
216
  }
65
217
  }
66
218
 
219
+ /* ============================================
220
+ COMPONENT STYLES
221
+ ============================================ */
67
222
  @layer components {
68
- /* Terminal card */
69
- .terminal-card {
70
- background: linear-gradient(180deg, #0d0d0d 0%, #0a0a0a 100%);
71
- border: 1px solid rgba(0, 255, 136, 0.15);
72
- position: relative;
73
- overflow: hidden;
223
+ /* Card Dark - Base component for dark cards */
224
+ .card-dark {
225
+ background: var(--bg-card);
226
+ border: 1px solid var(--border-color);
227
+ transition: var(--transition);
74
228
  }
75
229
 
76
- .terminal-card::before {
77
- content: '';
78
- position: absolute;
79
- top: 0;
80
- left: 0;
81
- right: 0;
82
- height: 1px;
83
- background: linear-gradient(90deg, transparent, var(--matrix), transparent);
84
- opacity: 0.5;
230
+ .card-dark:hover {
231
+ background: var(--bg-card-hover);
232
+ border-color: var(--border-color-strong);
85
233
  }
86
234
 
87
- /* Sidebar style */
88
- .sidebar-terminal {
89
- background: linear-gradient(180deg, #050505 0%, #0a0a0a 50%, #050505 100%);
90
- border-right: 1px solid rgba(0, 255, 136, 0.1);
91
- position: relative;
235
+ /* Card */
236
+ .theme-card {
237
+ background: var(--bg-card);
238
+ border: 1px solid var(--border-color);
239
+ border-radius: var(--radius-lg);
240
+ backdrop-filter: var(--backdrop-blur);
241
+ box-shadow: var(--shadow-md);
242
+ transition: var(--transition);
92
243
  }
93
244
 
94
- .sidebar-terminal::after {
95
- content: '';
96
- position: absolute;
97
- top: 0;
98
- right: 0;
99
- bottom: 0;
100
- width: 1px;
101
- background: linear-gradient(180deg, transparent, var(--matrix), transparent);
102
- opacity: 0.3;
245
+ .theme-card:hover {
246
+ background: var(--bg-card-hover);
247
+ border-color: var(--border-color-strong);
248
+ box-shadow: var(--shadow-lg), var(--card-border-glow);
103
249
  }
104
250
 
105
- /* Glowing border */
106
- .glow-border {
107
- position: relative;
251
+ /* Sidebar */
252
+ .theme-sidebar {
253
+ background: var(--bg-sidebar);
254
+ border-right: 1px solid var(--border-color);
255
+ backdrop-filter: var(--backdrop-blur);
108
256
  }
109
257
 
110
- .glow-border::before {
111
- content: '';
112
- position: absolute;
113
- inset: -1px;
114
- border-radius: inherit;
115
- padding: 1px;
116
- background: linear-gradient(135deg, var(--matrix), var(--cyber));
117
- -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
118
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
119
- -webkit-mask-composite: xor;
120
- mask-composite: exclude;
121
- opacity: 0.5;
258
+ /* Nav item */
259
+ .theme-nav-item {
260
+ font-family: var(--font-body);
261
+ color: var(--text-muted);
262
+ border-radius: var(--radius-md);
263
+ transition: var(--transition);
122
264
  }
123
265
 
124
- /* LED indicator */
125
- .led {
126
- width: 8px;
127
- height: 8px;
128
- border-radius: 50%;
129
- position: relative;
266
+ .theme-nav-item:hover {
267
+ color: var(--text-primary);
268
+ background: color-mix(in srgb, var(--accent-primary) 10%, transparent);
130
269
  }
131
270
 
132
- .led::after {
133
- content: '';
134
- position: absolute;
135
- inset: -3px;
136
- border-radius: 50%;
137
- background: inherit;
138
- filter: blur(4px);
139
- opacity: 0.6;
271
+ .theme-nav-item.active {
272
+ color: var(--accent-primary);
273
+ background: color-mix(in srgb, var(--accent-primary) 15%, transparent);
140
274
  }
141
275
 
142
- .led-green {
143
- background: var(--matrix);
276
+ /* Button primary */
277
+ .theme-btn-primary {
278
+ background: var(--accent-primary);
279
+ color: var(--text-inverse);
280
+ font-family: var(--font-body);
281
+ font-weight: 500;
282
+ border-radius: var(--radius-md);
283
+ padding: 0.625rem 1.25rem;
284
+ transition: var(--transition);
285
+ border: none;
144
286
  }
145
287
 
146
- .led-amber {
147
- background: var(--signal);
288
+ .theme-btn-primary:hover {
289
+ filter: brightness(1.1);
290
+ box-shadow: var(--shadow-glow);
148
291
  }
149
292
 
150
- .led-red {
151
- background: var(--alert);
293
+ /* Button secondary */
294
+ .theme-btn-secondary {
295
+ background: transparent;
296
+ color: var(--text-primary);
297
+ font-family: var(--font-body);
298
+ border: 1px solid var(--border-color-strong);
299
+ border-radius: var(--radius-md);
300
+ padding: 0.625rem 1.25rem;
301
+ transition: var(--transition);
152
302
  }
153
303
 
154
- .led-gray {
155
- background: #444;
304
+ .theme-btn-secondary:hover {
305
+ background: var(--bg-card);
306
+ border-color: var(--accent-primary);
156
307
  }
157
308
 
158
- .led-gray::after {
159
- opacity: 0;
309
+ /* Input */
310
+ .theme-input {
311
+ background: var(--bg-input);
312
+ border: 1px solid var(--border-color);
313
+ border-radius: var(--radius-md);
314
+ color: var(--text-primary);
315
+ font-family: var(--font-body);
316
+ padding: 0.625rem 0.875rem;
317
+ transition: var(--transition);
160
318
  }
161
319
 
162
- /* Progress bar brutalist */
163
- .progress-brutal {
320
+ .theme-input::placeholder {
321
+ color: var(--text-muted);
322
+ }
323
+
324
+ /* Progress bar */
325
+ .theme-progress {
164
326
  height: 6px;
165
- background: #1a1a1a;
166
- border: 1px solid #333;
167
- position: relative;
327
+ background: var(--bg-secondary);
328
+ border-radius: var(--radius-sm);
329
+ overflow: hidden;
168
330
  }
169
331
 
170
- .progress-brutal-fill {
332
+ .theme-progress-fill {
171
333
  height: 100%;
172
- background: linear-gradient(90deg, var(--matrix), var(--cyber));
173
- box-shadow: 0 0 10px var(--matrix);
334
+ background: var(--accent-primary);
335
+ border-radius: var(--radius-sm);
174
336
  transition: width 0.5s ease-out;
175
337
  }
176
338
 
177
- /* Nav item terminal style */
178
- .nav-terminal {
179
- position: relative;
180
- font-family: 'IBM Plex Mono', monospace;
339
+ /* Badge / Status */
340
+ .theme-badge {
341
+ font-family: var(--font-mono);
342
+ font-size: 0.625rem;
181
343
  letter-spacing: 0.05em;
182
- transition: all 0.2s ease;
344
+ text-transform: uppercase;
345
+ padding: 0.25rem 0.5rem;
346
+ border-radius: var(--radius-sm);
183
347
  }
184
348
 
185
- .nav-terminal::before {
186
- content: '>';
187
- position: absolute;
188
- left: 12px;
189
- opacity: 0;
190
- color: var(--matrix);
191
- transition: all 0.2s ease;
192
- transform: translateX(-5px);
349
+ .theme-badge-success {
350
+ background: color-mix(in srgb, var(--status-completed) 20%, transparent);
351
+ color: var(--status-completed);
193
352
  }
194
353
 
195
- .nav-terminal:hover::before,
196
- .nav-terminal.active::before {
197
- opacity: 1;
198
- transform: translateX(0);
354
+ .theme-badge-warning {
355
+ background: color-mix(in srgb, var(--status-in-progress) 20%, transparent);
356
+ color: var(--status-in-progress);
199
357
  }
200
358
 
201
- .nav-terminal.active {
202
- background: rgba(0, 255, 136, 0.05);
203
- color: var(--matrix);
204
- border-left: 2px solid var(--matrix);
359
+ .theme-badge-muted {
360
+ background: color-mix(in srgb, var(--status-pending) 20%, transparent);
361
+ color: var(--status-pending);
205
362
  }
206
363
 
207
- /* ASCII box decorations */
208
- .ascii-box {
364
+ /* Grid background (Matrix only) */
365
+ .theme-grid-bg {
366
+ background-image: var(--grid-bg);
367
+ background-size: 40px 40px;
368
+ }
369
+
370
+ /* Headings */
371
+ .theme-heading {
372
+ font-family: var(--font-heading);
373
+ color: var(--text-primary);
374
+ letter-spacing: -0.01em;
375
+ }
376
+
377
+ /* Text styles */
378
+ .theme-text-primary { color: var(--text-primary); }
379
+ .theme-text-secondary { color: var(--text-secondary); }
380
+ .theme-text-muted { color: var(--text-muted); }
381
+ .theme-text-accent { color: var(--accent-primary); }
382
+
383
+ /* Accent colors */
384
+ .theme-accent-bg {
385
+ background: color-mix(in srgb, var(--accent-primary) 15%, transparent);
386
+ }
387
+ }
388
+
389
+ /* ============================================
390
+ MATRIX-SPECIFIC COMPONENTS
391
+ (Only apply when data-theme="matrix")
392
+ ============================================ */
393
+ [data-theme="matrix"] {
394
+ /* Terminal card style */
395
+ .theme-card {
209
396
  position: relative;
210
397
  }
211
398
 
212
- .ascii-box::before {
213
- content: '┌──';
399
+ .theme-card::before {
400
+ content: '';
214
401
  position: absolute;
215
- top: -8px;
402
+ top: 0;
216
403
  left: 0;
217
- font-family: 'IBM Plex Mono', monospace;
218
- font-size: 10px;
219
- color: rgba(0, 255, 136, 0.3);
404
+ right: 0;
405
+ height: 1px;
406
+ background: linear-gradient(90deg, transparent, var(--accent-primary), transparent);
407
+ opacity: 0.5;
408
+ }
409
+
410
+ /* LED indicator */
411
+ .theme-led {
412
+ width: 8px;
413
+ height: 8px;
414
+ border-radius: 50%;
415
+ position: relative;
220
416
  }
221
417
 
222
- .ascii-box::after {
223
- content: '──┘';
418
+ .theme-led::after {
419
+ content: '';
224
420
  position: absolute;
225
- bottom: -8px;
226
- right: 0;
227
- font-family: 'IBM Plex Mono', monospace;
228
- font-size: 10px;
229
- color: rgba(0, 255, 136, 0.3);
421
+ inset: -3px;
422
+ border-radius: 50%;
423
+ background: inherit;
424
+ filter: blur(4px);
425
+ opacity: 0.6;
230
426
  }
231
427
 
232
- /* Scanline overlay */
233
- .scanlines {
234
- pointer-events: none;
235
- position: fixed;
236
- inset: 0;
237
- background: repeating-linear-gradient(
238
- 0deg,
239
- transparent,
240
- transparent 2px,
241
- rgba(0, 0, 0, 0.05) 2px,
242
- rgba(0, 0, 0, 0.05) 4px
243
- );
244
- z-index: 9999;
428
+ .theme-led-success { background: var(--status-completed); }
429
+ .theme-led-warning { background: var(--status-in-progress); }
430
+ .theme-led-danger { background: var(--accent-danger); }
431
+
432
+ /* Nav item terminal style */
433
+ .theme-nav-item {
434
+ font-family: var(--font-mono);
435
+ letter-spacing: 0.05em;
436
+ position: relative;
245
437
  }
246
438
 
247
- /* CRT glow effect */
248
- .crt-glow {
439
+ .theme-nav-item::before {
440
+ content: '>';
441
+ position: absolute;
442
+ left: 8px;
443
+ opacity: 0;
444
+ color: var(--accent-primary);
445
+ transition: all 0.2s ease;
446
+ transform: translateX(-5px);
447
+ }
448
+
449
+ .theme-nav-item:hover::before,
450
+ .theme-nav-item.active::before {
451
+ opacity: 1;
452
+ transform: translateX(0);
453
+ }
454
+
455
+ .theme-nav-item.active {
456
+ border-left: 2px solid var(--accent-primary);
457
+ border-radius: 0;
458
+ }
459
+
460
+ /* Glow text effect */
461
+ .theme-text-glow {
249
462
  text-shadow: 0 0 5px currentColor, 0 0 10px currentColor;
250
463
  }
251
464
 
252
- /* Button terminal */
253
- .btn-terminal {
254
- font-family: 'IBM Plex Mono', monospace;
255
- font-size: 12px;
465
+ /* Button terminal style */
466
+ .theme-btn-primary {
467
+ font-family: var(--font-mono);
256
468
  letter-spacing: 0.1em;
257
469
  text-transform: uppercase;
258
- background: transparent;
259
- border: 1px solid var(--matrix);
260
- color: var(--matrix);
261
- padding: 10px 20px;
262
470
  position: relative;
263
471
  overflow: hidden;
264
- transition: all 0.3s ease;
265
472
  }
266
473
 
267
- .btn-terminal::before {
474
+ .theme-btn-primary::before {
268
475
  content: '';
269
476
  position: absolute;
270
477
  inset: 0;
271
- background: var(--matrix);
478
+ background: var(--accent-primary);
272
479
  transform: translateX(-100%);
273
480
  transition: transform 0.3s ease;
274
481
  z-index: -1;
275
482
  }
276
483
 
277
- .btn-terminal:hover {
278
- color: black;
279
- box-shadow: 0 0 20px rgba(0, 255, 136, 0.4);
484
+ .theme-btn-primary:hover::before {
485
+ transform: translateX(0);
280
486
  }
281
487
 
282
- .btn-terminal:hover::before {
283
- transform: translateX(0);
488
+ /* Scanlines overlay */
489
+ .theme-scanlines::after {
490
+ content: '';
491
+ pointer-events: none;
492
+ position: fixed;
493
+ inset: 0;
494
+ background: var(--scanlines);
495
+ z-index: 9999;
284
496
  }
497
+ }
285
498
 
286
- /* Status badge */
287
- .status-badge {
288
- font-family: 'IBM Plex Mono', monospace;
289
- font-size: 10px;
290
- letter-spacing: 0.1em;
291
- text-transform: uppercase;
292
- padding: 4px 8px;
293
- border: 1px solid currentColor;
499
+ /* ============================================
500
+ GLASS-SPECIFIC COMPONENTS
501
+ (Only apply when data-theme="glass")
502
+ ============================================ */
503
+ [data-theme="glass"] {
504
+ /* Softer card shadows */
505
+ .theme-card {
506
+ box-shadow:
507
+ 0 1px 3px rgba(0, 0, 0, 0.08),
508
+ 0 1px 2px rgba(0, 0, 0, 0.04);
294
509
  }
295
510
 
296
- /* Grid background */
297
- .grid-bg {
298
- background-image:
299
- linear-gradient(rgba(0, 255, 136, 0.02) 1px, transparent 1px),
300
- linear-gradient(90deg, rgba(0, 255, 136, 0.02) 1px, transparent 1px);
301
- background-size: 40px 40px;
511
+ .theme-card:hover {
512
+ box-shadow:
513
+ 0 4px 12px rgba(0, 0, 0, 0.1),
514
+ 0 2px 4px rgba(0, 0, 0, 0.05);
302
515
  }
303
516
 
304
- /* Typing cursor */
305
- .typing-cursor::after {
306
- content: '█';
307
- animation: blink 1s step-end infinite;
308
- color: var(--matrix);
517
+ /* Rounded nav items */
518
+ .theme-nav-item.active {
519
+ background: var(--accent-primary);
520
+ color: white;
521
+ box-shadow: 0 2px 8px color-mix(in srgb, var(--accent-primary) 40%, transparent);
309
522
  }
310
523
 
311
- /* Metric display */
312
- .metric-display {
313
- font-family: 'Orbitron', monospace;
314
- font-variant-numeric: tabular-nums;
524
+ /* Progress with rounded ends */
525
+ .theme-progress,
526
+ .theme-progress-fill {
527
+ border-radius: 9999px;
315
528
  }
316
529
 
317
- /* Feature card */
318
- .feature-card {
319
- background: #0d0d0d;
320
- border: 1px solid #00ff88;
321
- transition: all 0.3s ease;
530
+ /* ========== GLASS CARD OVERRIDES ========== */
531
+ .card-dark {
532
+ background: var(--bg-card) !important;
533
+ backdrop-filter: var(--backdrop-blur);
534
+ box-shadow: var(--shadow-sm);
322
535
  }
323
536
 
324
- .feature-card:hover {
325
- border-color: #00ff88;
326
- box-shadow: 0 0 30px rgba(0, 255, 136, 0.2);
537
+ .card-dark:hover {
538
+ box-shadow: var(--shadow-md);
327
539
  }
328
540
 
329
- /* Task row */
330
- .task-row {
331
- background: #0d0d0d;
332
- border: 1px solid #1a1a1a;
333
- transition: all 0.2s ease;
541
+ /* ========== GLASS TYPOGRAPHY OVERRIDES ========== */
542
+ /* Use clean sans-serif for most UI elements instead of monospace */
543
+ /* This creates a modern, clean aesthetic while preserving code blocks */
544
+
545
+ /* MASTER OVERRIDE: All font-mono elements use body font (except code) */
546
+ .font-mono {
547
+ font-family: var(--font-body) !important;
548
+ letter-spacing: -0.01em !important;
334
549
  }
335
550
 
336
- .task-row:hover {
337
- background: #111;
338
- border-color: #333;
551
+ /* PRESERVE: Keep monospace ONLY for actual code elements */
552
+ code,
553
+ pre,
554
+ pre *,
555
+ code *,
556
+ .code-block,
557
+ .code-block *,
558
+ [data-code],
559
+ [data-code] *,
560
+ kbd,
561
+ .theme-input code,
562
+ textarea.font-mono,
563
+ pre.font-mono,
564
+ code.font-mono {
565
+ font-family: var(--font-mono) !important;
566
+ letter-spacing: 0 !important;
339
567
  }
340
568
 
341
- /* Input terminal style */
342
- .input-terminal {
343
- background: #0a0a0a;
344
- border: 1px solid #333;
345
- color: #e0e0e0;
346
- font-family: 'IBM Plex Mono', monospace;
347
- transition: all 0.2s ease;
569
+ /* Override font-display to use heading font with semi-bold weight */
570
+ .font-display {
571
+ font-family: var(--font-heading) !important;
572
+ font-weight: 600 !important;
573
+ letter-spacing: -0.02em !important;
348
574
  }
349
575
 
350
- .input-terminal::placeholder {
351
- color: #555;
576
+ /* Remove terminal-style wide tracking (creates cleaner look) */
577
+ .tracking-wider,
578
+ .tracking-widest {
579
+ letter-spacing: 0.01em !important;
352
580
  }
353
581
 
354
- .input-terminal:focus {
355
- border-color: var(--matrix);
356
- box-shadow: 0 0 0 1px var(--matrix), 0 0 20px rgba(0, 255, 136, 0.1);
582
+ /* Uppercase labels - refined appearance */
583
+ .uppercase {
584
+ font-weight: 600 !important;
585
+ letter-spacing: 0.03em !important;
357
586
  }
358
587
 
359
- /* Modal overlay */
360
- .modal-overlay {
361
- background: rgba(0, 0, 0, 0.9);
362
- backdrop-filter: blur(4px);
588
+ /* Headings and titles - use heading font */
589
+ h1, h2, h3, h4, h5, h6 {
590
+ font-family: var(--font-heading) !important;
591
+ font-weight: 600 !important;
592
+ letter-spacing: -0.02em !important;
363
593
  }
364
594
 
365
- /* Animated gradient text */
366
- .text-matrix {
367
- color: var(--matrix);
595
+ /* Large text classes - heading font */
596
+ .text-xl,
597
+ .text-2xl,
598
+ .text-3xl,
599
+ .text-4xl,
600
+ .text-lg {
601
+ font-family: var(--font-heading) !important;
602
+ letter-spacing: -0.02em !important;
368
603
  }
369
604
 
370
- .text-signal {
371
- color: var(--signal);
605
+ /* Stats and numbers - use tabular figures for alignment */
606
+ .font-display.text-lg,
607
+ .font-display.text-xl,
608
+ .font-display.text-2xl,
609
+ .font-display.text-3xl,
610
+ .font-display.text-4xl {
611
+ font-variant-numeric: tabular-nums !important;
612
+ font-weight: 700 !important;
613
+ }
614
+
615
+ /* Buttons - clean modern style with medium weight */
616
+ button,
617
+ .btn,
618
+ [role="button"] {
619
+ font-family: var(--font-body) !important;
620
+ font-weight: 500 !important;
621
+ letter-spacing: 0 !important;
622
+ }
623
+
624
+ /* Small text classes - body font with medium weight */
625
+ .text-xs,
626
+ .text-sm {
627
+ font-family: var(--font-body) !important;
628
+ font-weight: 500 !important;
629
+ }
630
+
631
+ /* Tiny text - slightly lighter */
632
+ .text-\[10px\],
633
+ .text-\[11px\],
634
+ .text-\[9px\] {
635
+ font-family: var(--font-body) !important;
636
+ font-weight: 500 !important;
637
+ }
638
+
639
+ /* Section headers with # prefix - treat like titles */
640
+ h3.font-mono,
641
+ h4.font-mono {
642
+ font-family: var(--font-heading) !important;
643
+ font-weight: 600 !important;
644
+ }
645
+
646
+ /* Table text - cleaner look */
647
+ table,
648
+ th,
649
+ td {
650
+ font-family: var(--font-body) !important;
651
+ }
652
+
653
+ /* Select and input elements */
654
+ select,
655
+ input,
656
+ textarea {
657
+ font-family: var(--font-body) !important;
658
+ }
659
+
660
+ /* Labels in forms */
661
+ label {
662
+ font-family: var(--font-body) !important;
663
+ font-weight: 500 !important;
664
+ }
665
+
666
+ /* Badges and pills - consistent styling */
667
+ .px-2.py-1,
668
+ .px-2\.5.py-1,
669
+ .px-2.py-0\.5,
670
+ .px-3.py-1,
671
+ .px-3.py-1\.5 {
672
+ font-family: var(--font-body) !important;
673
+ font-weight: 600 !important;
674
+ letter-spacing: 0.01em !important;
675
+ }
676
+
677
+ /* Keyboard shortcuts - keep monospace */
678
+ kbd {
679
+ font-family: var(--font-mono) !important;
680
+ font-size: 0.75em !important;
681
+ background: var(--bg-secondary);
682
+ padding: 2px 6px;
683
+ border-radius: 4px;
684
+ }
685
+
686
+ /* Modal and dialog headings */
687
+ [role="dialog"] h2,
688
+ [role="dialog"] h3,
689
+ [role="alertdialog"] h2,
690
+ [role="alertdialog"] h3 {
691
+ font-family: var(--font-heading) !important;
692
+ font-weight: 600 !important;
693
+ letter-spacing: -0.02em !important;
694
+ }
695
+
696
+ /* Remove Matrix-style effects */
697
+ .crt-glow,
698
+ .text-glow,
699
+ .glow-matrix {
700
+ text-shadow: none !important;
701
+ box-shadow: none !important;
702
+ }
703
+
704
+ /* Replace glow with subtle shadow */
705
+ .glow-matrix {
706
+ box-shadow: var(--shadow-md) !important;
707
+ }
708
+
709
+ /* Softer colors for gray text - use theme variables */
710
+ .text-gray-600 {
711
+ color: var(--text-muted) !important;
712
+ }
713
+
714
+ .text-gray-500 {
715
+ color: var(--text-secondary) !important;
716
+ }
717
+
718
+ .text-gray-400 {
719
+ color: var(--text-secondary) !important;
720
+ }
721
+
722
+ .text-gray-700,
723
+ .text-gray-800 {
724
+ color: var(--text-muted) !important;
725
+ }
726
+
727
+ /* Status text colors - use CSS variables for consistency */
728
+ .text-matrix {
729
+ color: var(--accent-primary) !important;
372
730
  }
373
731
 
374
732
  .text-cyber {
375
- color: var(--cyber);
733
+ color: var(--accent-tertiary) !important;
734
+ }
735
+
736
+ .text-signal {
737
+ color: var(--accent-secondary) !important;
376
738
  }
377
739
 
378
740
  .text-alert {
379
- color: var(--alert);
741
+ color: var(--accent-danger) !important;
380
742
  }
381
- }
382
743
 
383
- @layer utilities {
384
- /* Stagger animations - elements always visible, animation is just enhancement */
385
- .stagger > * {
386
- opacity: 1 !important;
387
- animation: slide-up 0.4s ease-out forwards;
388
- }
389
- .stagger > *:nth-child(1) { animation-delay: 0ms; }
390
- .stagger > *:nth-child(2) { animation-delay: 50ms; }
391
- .stagger > *:nth-child(3) { animation-delay: 100ms; }
392
- .stagger > *:nth-child(4) { animation-delay: 150ms; }
393
- .stagger > *:nth-child(5) { animation-delay: 200ms; }
394
- .stagger > *:nth-child(6) { animation-delay: 250ms; }
395
- .stagger > *:nth-child(7) { animation-delay: 300ms; }
396
- .stagger > *:nth-child(8) { animation-delay: 350ms; }
397
-
398
- /* Glow utilities */
399
- .glow-matrix {
400
- box-shadow: 0 0 20px rgba(0, 255, 136, 0.3);
744
+ /* Border colors - softer in Glass theme */
745
+ .border-matrix\/30,
746
+ .border-matrix\/20,
747
+ .border-matrix\/50 {
748
+ border-color: color-mix(in srgb, var(--accent-primary) 20%, var(--border-color)) !important;
401
749
  }
402
750
 
403
- .glow-signal {
404
- box-shadow: 0 0 20px rgba(255, 149, 0, 0.3);
751
+ .border-cyber\/30,
752
+ .border-cyber\/20 {
753
+ border-color: color-mix(in srgb, var(--accent-tertiary) 20%, var(--border-color)) !important;
405
754
  }
406
755
 
407
- .glow-cyber {
408
- box-shadow: 0 0 20px rgba(0, 212, 255, 0.3);
756
+ .border-signal\/30,
757
+ .border-signal\/20 {
758
+ border-color: color-mix(in srgb, var(--accent-secondary) 20%, var(--border-color)) !important;
409
759
  }
410
760
 
411
- .glow-alert {
412
- box-shadow: 0 0 20px rgba(255, 51, 102, 0.3);
761
+ /* Background tints - very subtle */
762
+ .bg-matrix\/5,
763
+ .bg-matrix\/10 {
764
+ background: color-mix(in srgb, var(--accent-primary) 5%, var(--bg-card)) !important;
413
765
  }
766
+
767
+ .bg-cyber\/5,
768
+ .bg-cyber\/10 {
769
+ background: color-mix(in srgb, var(--accent-tertiary) 5%, var(--bg-card)) !important;
770
+ }
771
+
772
+ .bg-signal\/5,
773
+ .bg-signal\/10 {
774
+ background: color-mix(in srgb, var(--accent-secondary) 5%, var(--bg-card)) !important;
775
+ }
776
+
777
+ /* void backgrounds - use theme card color */
778
+ .bg-void-100 {
779
+ background: var(--bg-secondary) !important;
780
+ }
781
+
782
+ /* White text - use theme primary */
783
+ .text-white {
784
+ color: var(--text-primary) !important;
785
+ }
786
+ }
787
+
788
+ /* ============================================
789
+ UTILITIES
790
+ ============================================ */
791
+ @layer utilities {
792
+ .font-heading { font-family: var(--font-heading); }
793
+ .font-body { font-family: var(--font-body); }
794
+ .font-mono { font-family: var(--font-mono); }
795
+
796
+ .bg-primary { background: var(--bg-primary); }
797
+ .bg-secondary { background: var(--bg-secondary); }
798
+ .bg-card { background: var(--bg-card); }
799
+
800
+ .text-theme-primary { color: var(--text-primary); }
801
+ .text-theme-secondary { color: var(--text-secondary); }
802
+ .text-theme-muted { color: var(--text-muted); }
803
+ .text-theme-accent { color: var(--accent-primary); }
804
+
805
+ .border-theme { border-color: var(--border-color); }
806
+ .border-theme-strong { border-color: var(--border-color-strong); }
807
+
808
+ .rounded-theme-sm { border-radius: var(--radius-sm); }
809
+ .rounded-theme-md { border-radius: var(--radius-md); }
810
+ .rounded-theme-lg { border-radius: var(--radius-lg); }
811
+ .rounded-theme-xl { border-radius: var(--radius-xl); }
414
812
  }
415
813
 
416
- /* Keyframes */
417
- @keyframes blink {
418
- 0%, 100% { opacity: 1; }
419
- 50% { opacity: 0; }
814
+ /* ============================================
815
+ ANIMATIONS
816
+ ============================================ */
817
+ @keyframes fade-in {
818
+ from { opacity: 0; }
819
+ to { opacity: 1; }
420
820
  }
421
821
 
422
822
  @keyframes slide-up {
423
- 0% {
823
+ from {
424
824
  opacity: 0;
425
- transform: translateY(20px);
825
+ transform: translateY(10px);
426
826
  }
427
- 100% {
827
+ to {
428
828
  opacity: 1;
429
829
  transform: translateY(0);
430
830
  }
431
831
  }
432
832
 
433
- @keyframes fade-in {
434
- from { opacity: 0; }
435
- to { opacity: 1; }
833
+ @keyframes pulse-glow {
834
+ 0%, 100% { box-shadow: var(--shadow-glow); }
835
+ 50% { box-shadow: 0 0 30px color-mix(in srgb, var(--accent-primary) 50%, transparent); }
836
+ }
837
+
838
+ .animate-fade-in { animation: fade-in 0.3s ease-out; }
839
+ .animate-slide-up { animation: slide-up 0.4s ease-out; }
840
+ .animate-pulse-glow { animation: pulse-glow 2s ease-in-out infinite; }
841
+
842
+ /* ============================================
843
+ COMPATIBILITY LAYER
844
+ Maps old Matrix-specific classes to theme vars
845
+ ============================================ */
846
+
847
+ /* Text colors - map to theme variables */
848
+ .text-matrix { color: var(--accent-primary) !important; }
849
+ .text-cyber { color: var(--accent-tertiary) !important; }
850
+ .text-signal { color: var(--accent-secondary) !important; }
851
+ .text-alert { color: var(--accent-danger) !important; }
852
+ .text-white { color: var(--text-primary) !important; }
853
+
854
+ /* Background colors */
855
+ .bg-black { background: var(--bg-primary) !important; }
856
+ .bg-black\/80 { background: color-mix(in srgb, var(--bg-primary) 90%, transparent) !important; }
857
+ .bg-black\/95 { background: color-mix(in srgb, var(--bg-primary) 98%, transparent) !important; }
858
+ .bg-black\/50 { background: color-mix(in srgb, var(--bg-primary) 70%, transparent) !important; }
859
+ .bg-black\/30 { background: color-mix(in srgb, var(--bg-primary) 50%, transparent) !important; }
860
+ .bg-void { background: var(--bg-primary) !important; }
861
+ .bg-void-50 { background: var(--bg-secondary) !important; }
862
+ .bg-void-100 { background: var(--bg-card) !important; }
863
+ .bg-void-200 { background: var(--bg-card) !important; }
864
+
865
+ /* Border colors */
866
+ .border-matrix { border-color: var(--accent-primary) !important; }
867
+ .border-cyber { border-color: var(--accent-tertiary) !important; }
868
+ .border-signal { border-color: var(--accent-secondary) !important; }
869
+ .border-alert { border-color: var(--accent-danger) !important; }
870
+
871
+ /* Opacity variants using color-mix */
872
+ .text-matrix\/50 { color: color-mix(in srgb, var(--accent-primary) 50%, transparent) !important; }
873
+ .text-matrix\/30 { color: color-mix(in srgb, var(--accent-primary) 30%, transparent) !important; }
874
+ .bg-matrix\/10 { background: color-mix(in srgb, var(--accent-primary) 10%, transparent) !important; }
875
+ .bg-matrix\/20 { background: color-mix(in srgb, var(--accent-primary) 20%, transparent) !important; }
876
+ .bg-matrix\/5 { background: color-mix(in srgb, var(--accent-primary) 5%, transparent) !important; }
877
+ .border-matrix\/50 { border-color: color-mix(in srgb, var(--accent-primary) 50%, transparent) !important; }
878
+ .border-matrix\/30 { border-color: color-mix(in srgb, var(--accent-primary) 30%, transparent) !important; }
879
+ .border-matrix\/20 { border-color: color-mix(in srgb, var(--accent-primary) 20%, transparent) !important; }
880
+ .border-matrix\/15 { border-color: color-mix(in srgb, var(--accent-primary) 15%, transparent) !important; }
881
+ .border-matrix\/10 { border-color: color-mix(in srgb, var(--accent-primary) 10%, transparent) !important; }
882
+
883
+ .bg-cyber\/10 { background: color-mix(in srgb, var(--accent-tertiary) 10%, transparent) !important; }
884
+ .bg-cyber\/20 { background: color-mix(in srgb, var(--accent-tertiary) 20%, transparent) !important; }
885
+ .border-cyber\/50 { border-color: color-mix(in srgb, var(--accent-tertiary) 50%, transparent) !important; }
886
+ .border-cyber\/30 { border-color: color-mix(in srgb, var(--accent-tertiary) 30%, transparent) !important; }
887
+
888
+ .bg-signal\/10 { background: color-mix(in srgb, var(--accent-secondary) 10%, transparent) !important; }
889
+ .bg-signal\/20 { background: color-mix(in srgb, var(--accent-secondary) 20%, transparent) !important; }
890
+ .border-signal\/50 { border-color: color-mix(in srgb, var(--accent-secondary) 50%, transparent) !important; }
891
+
892
+ .bg-alert\/10 { background: color-mix(in srgb, var(--accent-danger) 10%, transparent) !important; }
893
+ .bg-alert\/20 { background: color-mix(in srgb, var(--accent-danger) 20%, transparent) !important; }
894
+ .border-alert\/50 { border-color: color-mix(in srgb, var(--accent-danger) 50%, transparent) !important; }
895
+
896
+ /* White opacity variants */
897
+ .border-white\/10 { border-color: color-mix(in srgb, var(--text-primary) 10%, transparent) !important; }
898
+ .border-white\/5 { border-color: color-mix(in srgb, var(--text-primary) 5%, transparent) !important; }
899
+ .border-white\/20 { border-color: color-mix(in srgb, var(--text-primary) 20%, transparent) !important; }
900
+ .bg-white\/5 { background: color-mix(in srgb, var(--text-primary) 5%, transparent) !important; }
901
+ .bg-white\/10 { background: color-mix(in srgb, var(--text-primary) 10%, transparent) !important; }
902
+ .hover\:bg-white\/5:hover { background: color-mix(in srgb, var(--text-primary) 5%, transparent) !important; }
903
+ .hover\:bg-white\/\[0\.02\]:hover { background: color-mix(in srgb, var(--text-primary) 2%, transparent) !important; }
904
+ .hover\:bg-white\/\[0\.01\]:hover { background: color-mix(in srgb, var(--text-primary) 1%, transparent) !important; }
905
+
906
+ /* Gray text compatibility */
907
+ .text-gray-100 { color: var(--text-primary) !important; }
908
+ .text-gray-200 { color: var(--text-primary) !important; }
909
+ .text-gray-300 { color: var(--text-secondary) !important; }
910
+ .text-gray-400 { color: var(--text-secondary) !important; }
911
+ .text-gray-500 { color: var(--text-muted) !important; }
912
+ .text-gray-600 { color: var(--text-muted) !important; }
913
+ .text-gray-700 { color: color-mix(in srgb, var(--text-muted) 70%, transparent) !important; }
914
+ .text-slate-100 { color: var(--text-primary) !important; }
915
+
916
+ /* Hover states */
917
+ .hover\:text-matrix:hover { color: var(--accent-primary) !important; }
918
+ .hover\:text-white:hover { color: var(--text-primary) !important; }
919
+ .hover\:text-gray-300:hover { color: var(--text-secondary) !important; }
920
+ .hover\:border-matrix:hover { border-color: var(--accent-primary) !important; }
921
+
922
+ /* Focus states */
923
+ .focus\:border-matrix:focus { border-color: var(--accent-primary) !important; }
924
+ .focus\:ring-matrix:focus { --tw-ring-color: var(--accent-primary) !important; }
925
+
926
+ /* LED compatibility */
927
+ .led {
928
+ width: 8px;
929
+ height: 8px;
930
+ border-radius: 50%;
931
+ position: relative;
436
932
  }
437
933
 
438
- .animate-fade-in {
439
- animation: fade-in 0.3s ease-out forwards;
934
+ .led::after {
935
+ content: '';
936
+ position: absolute;
937
+ inset: -3px;
938
+ border-radius: 50%;
939
+ background: inherit;
940
+ filter: blur(4px);
941
+ opacity: 0.6;
440
942
  }
943
+
944
+ .led-gray {
945
+ background: var(--text-muted);
946
+ }
947
+
948
+ .led-gray::after {
949
+ opacity: 0;
950
+ }
951
+
952
+ /* Glow utilities */
953
+ .glow-matrix { box-shadow: 0 0 20px color-mix(in srgb, var(--accent-primary) 30%, transparent); }
954
+ .glow-signal { box-shadow: 0 0 20px color-mix(in srgb, var(--accent-secondary) 30%, transparent); }
955
+ .glow-cyber { box-shadow: 0 0 20px color-mix(in srgb, var(--accent-tertiary) 30%, transparent); }
956
+ .glow-alert { box-shadow: 0 0 20px color-mix(in srgb, var(--accent-danger) 30%, transparent); }
957
+
958
+ /* Font compatibility */
959
+ .font-mono { font-family: var(--font-mono) !important; }
960
+ .font-display { font-family: var(--font-heading) !important; }