@formant/aesthetics 0.0.10 → 0.1.0

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.
@@ -0,0 +1,1876 @@
1
+ /**
2
+ * Formant Aesthetics - Classless CSS
3
+ * Version: 2026.1-theme
4
+ *
5
+ * A single-file classless CSS framework that styles standard HTML elements
6
+ * according to the Formant Design System. Includes all design tokens,
7
+ * dark/light theme support, and semantic element styles.
8
+ *
9
+ * Design System Reference: ~/formant/aesthetics/DESIGN.md
10
+ *
11
+ * Usage:
12
+ * <link rel="stylesheet" href="formant-aesthetics.css">
13
+ *
14
+ * Light mode:
15
+ * <html data-theme="light">
16
+ */
17
+
18
+ /* ==========================================================================
19
+ 1. Font Imports
20
+ ========================================================================== */
21
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@300;400;500&display=swap');
22
+
23
+ /* ==========================================================================
24
+ 2. Design Tokens (CSS Custom Properties)
25
+ ========================================================================== */
26
+ :root {
27
+ /* -- THEME COLORS - Neutrals (0-3) ------------------------------------ */
28
+ --theme-neutrals-0: #0A0F11;
29
+ --theme-neutrals-0-rgb: 10, 15, 17;
30
+ --theme-neutrals-1: #202428;
31
+ --theme-neutrals-1-rgb: 32, 36, 40;
32
+ --theme-neutrals-2: #A3ABA9;
33
+ --theme-neutrals-2-rgb: 163, 171, 169;
34
+ --theme-neutrals-3: #F2F3F4;
35
+ --theme-neutrals-3-rgb: 242, 243, 244;
36
+
37
+ /* -- THEME COLORS - Atmospheric Accents (0-2) ------------------------- */
38
+ --theme-atmospheric-accents-0: #2C4142;
39
+ --theme-atmospheric-accents-0-rgb: 44, 65, 66;
40
+ --theme-atmospheric-accents-1: #4B5E53;
41
+ --theme-atmospheric-accents-1-rgb: 75, 94, 83;
42
+ --theme-atmospheric-accents-2: #ACC3B3;
43
+ --theme-atmospheric-accents-2-rgb: 172, 195, 179;
44
+
45
+ /* -- THEME COLORS - Functional Accents (0-1) -------------------------- */
46
+ --theme-functional-accents-0: #E8AB7F;
47
+ --theme-functional-accents-0-rgb: 232, 171, 127;
48
+ --theme-functional-accents-1: #8B8CF4;
49
+ --theme-functional-accents-1-rgb: 139, 140, 244;
50
+
51
+ /* -- SEMANTIC MAPPINGS - Backgrounds ---------------------------------- */
52
+ --formant-bg-primary: var(--theme-neutrals-0);
53
+ --formant-bg-secondary: var(--theme-neutrals-1);
54
+ --formant-bg-elevated: var(--theme-neutrals-1);
55
+ --formant-bg-interactive: rgba(var(--theme-atmospheric-accents-0-rgb), 0.2);
56
+
57
+ /* -- SEMANTIC MAPPINGS - Text ----------------------------------------- */
58
+ --formant-text-primary: var(--theme-neutrals-3);
59
+ --formant-text-secondary: var(--theme-neutrals-2);
60
+ --formant-text-muted: rgba(var(--theme-neutrals-2-rgb), 0.6);
61
+
62
+ /* -- SEMANTIC MAPPINGS - Interactive/Accent ---------------------------- */
63
+ --formant-accent-primary: var(--theme-atmospheric-accents-2);
64
+ --formant-accent-secondary: var(--theme-atmospheric-accents-0);
65
+ --formant-accent-warning: var(--theme-functional-accents-0);
66
+ --formant-accent-ai: var(--theme-functional-accents-1);
67
+
68
+ /* -- SEMANTIC MAPPINGS - Status --------------------------------------- */
69
+ --formant-status-success: var(--theme-atmospheric-accents-2);
70
+ --formant-status-warning: var(--theme-functional-accents-0);
71
+ --formant-status-error: var(--theme-functional-accents-0);
72
+ --formant-status-info: var(--theme-functional-accents-1);
73
+ --formant-status-ai-active: var(--theme-functional-accents-1);
74
+
75
+ /* -- BORDER SYSTEM ---------------------------------------------------- */
76
+ --formant-border-subtle: rgba(var(--theme-neutrals-2-rgb), 0.1);
77
+ --formant-border-default: rgba(var(--theme-neutrals-2-rgb), 0.2);
78
+ --formant-border-strong: rgba(var(--theme-neutrals-2-rgb), 0.4);
79
+ --formant-border-focus: var(--theme-atmospheric-accents-2);
80
+
81
+ /* -- TYPOGRAPHY - Font Families --------------------------------------- */
82
+ --font-display: 'Space Grotesk', sans-serif;
83
+ --font-body: 'Inter', sans-serif;
84
+ --font-monospace: 'JetBrains Mono', monospace;
85
+ --formant-font-heading: var(--font-display);
86
+ --formant-font-body: var(--font-body);
87
+ --formant-font-mono: var(--font-monospace);
88
+
89
+ /* -- TYPOGRAPHY - Weights --------------------------------------------- */
90
+ --formant-weight-light: 300;
91
+ --formant-weight-regular: 400;
92
+ --formant-weight-medium: 500;
93
+ --formant-weight-semibold: 600;
94
+ --formant-weight-bold: 700;
95
+
96
+ /* -- TYPOGRAPHY - Letter Spacing -------------------------------------- */
97
+ --formant-tracking-tight: -0.02em;
98
+ --formant-tracking-normal: 0;
99
+ --formant-tracking-wide: 0.02em;
100
+ --formant-tracking-wider: 0.08em;
101
+ --formant-tracking-mono: 0.1em;
102
+ --formant-tracking-eyebrow: 0.2em;
103
+
104
+ /* -- TYPOGRAPHY - Line Heights ---------------------------------------- */
105
+ --formant-leading-tight: 1.2;
106
+ --formant-leading-normal: 1.6;
107
+ --formant-leading-relaxed: 1.75;
108
+ --formant-leading-data: 2.2;
109
+
110
+ /* -- TYPOGRAPHY - Sizes ----------------------------------------------- */
111
+ --formant-text-xs: 0.625rem;
112
+ --formant-text-sm: 0.75rem;
113
+ --formant-text-base: 0.875rem;
114
+ --formant-text-md: 1rem;
115
+ --formant-text-lg: 1.0625rem;
116
+ --formant-text-xl: 1.25rem;
117
+ --formant-text-2xl: 1.5rem;
118
+ --formant-text-3xl: 2rem;
119
+ --formant-text-4xl: 3.25rem;
120
+ --formant-text-5xl: 6rem;
121
+
122
+ /* -- SPACING SCALE ---------------------------------------------------- */
123
+ --formant-space-0: 0;
124
+ --formant-space-1: 0.25rem;
125
+ --formant-space-2: 0.5rem;
126
+ --formant-space-3: 0.75rem;
127
+ --formant-space-4: 1rem;
128
+ --formant-space-5: 1.25rem;
129
+ --formant-space-6: 1.5rem;
130
+ --formant-space-8: 2rem;
131
+ --formant-space-10: 2.5rem;
132
+ --formant-space-12: 3rem;
133
+ --formant-space-16: 4rem;
134
+ --formant-space-20: 5rem;
135
+ --formant-space-24: 6rem;
136
+ --formant-space-32: 8rem;
137
+
138
+ /* -- BORDER RADIUS ---------------------------------------------------- */
139
+ --formant-radius-none: 0;
140
+ --formant-radius-sm: 2px;
141
+ --formant-radius-md: 4px;
142
+ --formant-radius-lg: 6px;
143
+ --formant-radius-xl: 8px;
144
+ --formant-radius-full: 9999px;
145
+
146
+ /* -- SHADOWS & ELEVATION ---------------------------------------------- */
147
+ --formant-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
148
+ --formant-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
149
+ --formant-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
150
+ --formant-shadow-glow: 0 0 20px rgba(var(--theme-atmospheric-accents-2-rgb), 0.15);
151
+ --formant-shadow-glow-strong: 0 0 30px rgba(var(--theme-atmospheric-accents-2-rgb), 0.25);
152
+
153
+ /* -- FOCUS & ACCESSIBILITY -------------------------------------------- */
154
+ --formant-focus-ring: 0 0 0 2px var(--theme-neutrals-0), 0 0 0 4px var(--theme-atmospheric-accents-2);
155
+ --formant-focus-ring-offset: 2px;
156
+
157
+ /* -- TRANSITIONS & ANIMATION ------------------------------------------ */
158
+ --formant-transition-fast: 150ms ease;
159
+ --formant-transition-base: 200ms ease;
160
+ --formant-transition-slow: 300ms ease;
161
+
162
+ /* -- Z-INDEX SCALE ---------------------------------------------------- */
163
+ --formant-z-base: 0;
164
+ --formant-z-dropdown: 100;
165
+ --formant-z-sticky: 200;
166
+ --formant-z-fixed: 300;
167
+ --formant-z-modal-backdrop: 400;
168
+ --formant-z-modal: 500;
169
+ --formant-z-popover: 600;
170
+ --formant-z-tooltip: 700;
171
+
172
+ /* -- LAYOUT ----------------------------------------------------------- */
173
+ --formant-container-max: 1200px;
174
+ --formant-container-padding: 2.5rem;
175
+ --formant-container-padding-mobile: 1.25rem;
176
+
177
+ /* -- SCROLLBAR -------------------------------------------------------- */
178
+ --formant-scrollbar-width: 8px;
179
+ --formant-scrollbar-track: var(--theme-neutrals-0);
180
+ --formant-scrollbar-thumb: var(--theme-atmospheric-accents-1);
181
+ --formant-scrollbar-thumb-hover: var(--theme-atmospheric-accents-2);
182
+
183
+ /* -- SELECTION -------------------------------------------------------- */
184
+ --formant-selection-bg: rgba(var(--theme-atmospheric-accents-2-rgb), 0.3);
185
+ --formant-selection-text: var(--theme-neutrals-3);
186
+ }
187
+
188
+ /* ==========================================================================
189
+ 3. Light Theme (color variable overrides only)
190
+ Apply with <html data-theme="light"> or <body data-theme="light">
191
+ ========================================================================== */
192
+ [data-theme="light"] {
193
+ --theme-neutrals-0: #FFFFFF;
194
+ --theme-neutrals-0-rgb: 255, 255, 255;
195
+ --theme-neutrals-1: #F2F3F4;
196
+ --theme-neutrals-1-rgb: 242, 243, 244;
197
+ --theme-neutrals-2: #6B7370;
198
+ --theme-neutrals-2-rgb: 107, 115, 112;
199
+ --theme-neutrals-3: #0A0F11;
200
+ --theme-neutrals-3-rgb: 10, 15, 17;
201
+
202
+ --theme-atmospheric-accents-0: #D6E5DC;
203
+ --theme-atmospheric-accents-0-rgb: 214, 229, 220;
204
+ --theme-atmospheric-accents-1: #8FA69A;
205
+ --theme-atmospheric-accents-1-rgb: 143, 166, 154;
206
+ --theme-atmospheric-accents-2: #3B6B52;
207
+ --theme-atmospheric-accents-2-rgb: 59, 107, 82;
208
+
209
+ --theme-functional-accents-0: #C07840;
210
+ --theme-functional-accents-0-rgb: 192, 120, 64;
211
+ --theme-functional-accents-1: #5B5CD4;
212
+ --theme-functional-accents-1-rgb: 91, 92, 212;
213
+
214
+ --formant-border-subtle: rgba(var(--theme-neutrals-3-rgb), 0.08);
215
+ --formant-border-default: rgba(var(--theme-neutrals-3-rgb), 0.15);
216
+ --formant-border-strong: rgba(var(--theme-neutrals-3-rgb), 0.3);
217
+ --formant-border-focus: var(--theme-atmospheric-accents-2);
218
+ --formant-text-muted: rgba(var(--theme-neutrals-3-rgb), 0.5);
219
+ --formant-selection-bg: rgba(59, 107, 82, 0.2);
220
+ --formant-selection-text: var(--theme-neutrals-3);
221
+ --formant-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
222
+ --formant-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04);
223
+ --formant-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -2px rgba(0, 0, 0, 0.03);
224
+ --formant-shadow-glow: 0 0 20px rgba(59, 107, 82, 0.12);
225
+ --formant-focus-ring: 0 0 0 2px var(--theme-neutrals-0), 0 0 0 4px var(--theme-atmospheric-accents-2);
226
+ }
227
+
228
+ /* ==========================================================================
229
+ 5. Base Reset & Document Styles
230
+ ========================================================================== */
231
+ *,
232
+ *::before,
233
+ *::after {
234
+ box-sizing: border-box;
235
+ margin: 0;
236
+ padding: 0;
237
+ }
238
+
239
+ html {
240
+ font-size: 16px;
241
+ -webkit-font-smoothing: antialiased;
242
+ -moz-osx-font-smoothing: grayscale;
243
+ scroll-behavior: smooth;
244
+ }
245
+
246
+ body {
247
+ font-family: var(--font-body);
248
+ font-weight: var(--formant-weight-regular);
249
+ font-size: 1rem;
250
+ line-height: var(--formant-leading-normal);
251
+ color: var(--formant-text-secondary);
252
+ background-color: var(--theme-neutrals-1);
253
+ min-height: 100vh;
254
+ accent-color: var(--theme-atmospheric-accents-2);
255
+ }
256
+
257
+ /* ==========================================================================
258
+ 6. Typography - Headings
259
+ ========================================================================== */
260
+ h1, h2, h3, h4, h5, h6 {
261
+ font-family: var(--font-display);
262
+ font-weight: var(--formant-weight-medium);
263
+ line-height: var(--formant-leading-tight);
264
+ letter-spacing: var(--formant-tracking-tight);
265
+ color: var(--formant-text-primary);
266
+ margin-bottom: var(--formant-space-4);
267
+ }
268
+
269
+ h1 {
270
+ font-size: clamp(2rem, 4vw, 3.25rem);
271
+ font-weight: var(--formant-weight-medium);
272
+ }
273
+
274
+ h2 {
275
+ font-size: clamp(1.5rem, 3vw, 2rem);
276
+ font-weight: var(--formant-weight-medium);
277
+ }
278
+
279
+ h3 {
280
+ font-size: 1.25rem;
281
+ font-weight: var(--formant-weight-semibold);
282
+ color: var(--theme-atmospheric-accents-2);
283
+ }
284
+
285
+ h4 {
286
+ font-size: 1.125rem;
287
+ font-weight: var(--formant-weight-semibold);
288
+ }
289
+
290
+ h5 {
291
+ font-size: 1rem;
292
+ font-weight: var(--formant-weight-semibold);
293
+ }
294
+
295
+ h6 {
296
+ font-size: 0.875rem;
297
+ font-weight: var(--formant-weight-semibold);
298
+ text-transform: uppercase;
299
+ letter-spacing: var(--formant-tracking-wide);
300
+ color: var(--formant-text-muted);
301
+ }
302
+
303
+ /* ==========================================================================
304
+ 7. Typography - Text Elements
305
+ ========================================================================== */
306
+ p {
307
+ margin-bottom: var(--formant-space-4);
308
+ max-width: 65ch;
309
+ }
310
+
311
+ p:last-child {
312
+ margin-bottom: 0;
313
+ }
314
+
315
+ strong, b {
316
+ font-weight: var(--formant-weight-semibold);
317
+ color: var(--formant-text-primary);
318
+ }
319
+
320
+ em, i {
321
+ font-style: italic;
322
+ }
323
+
324
+ small {
325
+ font-size: 0.875rem;
326
+ color: var(--formant-text-muted);
327
+ }
328
+
329
+ del {
330
+ text-decoration: line-through;
331
+ color: var(--formant-text-muted);
332
+ }
333
+
334
+ ins {
335
+ text-decoration: underline;
336
+ color: var(--theme-atmospheric-accents-2);
337
+ }
338
+
339
+ mark {
340
+ background-color: rgba(var(--theme-atmospheric-accents-2-rgb), 0.2);
341
+ color: var(--formant-text-primary);
342
+ padding: 0.125rem 0.25rem;
343
+ border-radius: var(--formant-radius-sm);
344
+ }
345
+
346
+ sub, sup {
347
+ font-size: 0.75rem;
348
+ line-height: 0;
349
+ position: relative;
350
+ vertical-align: baseline;
351
+ }
352
+
353
+ sub {
354
+ bottom: -0.25em;
355
+ }
356
+
357
+ sup {
358
+ top: -0.5em;
359
+ }
360
+
361
+ abbr[title] {
362
+ border-bottom: 1px dotted var(--formant-border-strong);
363
+ text-decoration: none;
364
+ cursor: help;
365
+ }
366
+
367
+ /* ==========================================================================
368
+ 5. Typography - Links
369
+ ========================================================================== */
370
+ a {
371
+ color: var(--theme-atmospheric-accents-2);
372
+ text-decoration: none;
373
+ transition: color var(--formant-transition-base), box-shadow var(--formant-transition-base);
374
+ }
375
+
376
+ a:hover {
377
+ color: var(--theme-neutrals-3);
378
+ text-decoration: underline;
379
+ }
380
+
381
+ a:focus-visible {
382
+ outline: none;
383
+ box-shadow: var(--formant-focus-ring);
384
+ border-radius: var(--formant-radius-sm);
385
+ }
386
+
387
+ a:active {
388
+ color: var(--theme-atmospheric-accents-2);
389
+ }
390
+
391
+ /* ==========================================================================
392
+ 6. Typography - Code & Preformatted
393
+ ========================================================================== */
394
+ code,
395
+ kbd,
396
+ samp {
397
+ font-family: var(--font-monospace);
398
+ font-size: 0.75rem;
399
+ background-color: var(--formant-bg-primary);
400
+ padding: 0.125rem 0.25rem;
401
+ border-radius: 2px;
402
+ color: var(--formant-text-primary);
403
+ }
404
+
405
+ kbd {
406
+ background-color: var(--formant-bg-primary);
407
+ border: 1px solid var(--formant-border-default);
408
+ box-shadow: 0 2px 0 var(--formant-border-strong);
409
+ font-size: 0.75rem;
410
+ }
411
+
412
+ pre {
413
+ font-family: var(--font-monospace);
414
+ font-size: 0.75rem;
415
+ line-height: var(--formant-leading-normal);
416
+ background-color: var(--formant-bg-primary);
417
+ border-radius: 3px;
418
+ padding: var(--formant-space-3);
419
+ margin-bottom: var(--formant-space-4);
420
+ overflow-x: auto;
421
+ color: var(--formant-text-primary);
422
+ }
423
+
424
+ pre code {
425
+ background-color: transparent;
426
+ padding: 0;
427
+ font-size: inherit;
428
+ }
429
+
430
+ /* ==========================================================================
431
+ 7. Typography - Quotes & Citations
432
+ ========================================================================== */
433
+ blockquote {
434
+ border-left: 3px solid var(--theme-atmospheric-accents-2);
435
+ padding-left: var(--formant-space-4);
436
+ margin: var(--formant-space-6) 0;
437
+ font-style: italic;
438
+ color: var(--formant-text-secondary);
439
+ }
440
+
441
+ blockquote p:last-child {
442
+ margin-bottom: 0;
443
+ }
444
+
445
+ cite {
446
+ font-style: normal;
447
+ font-family: var(--font-monospace);
448
+ font-size: 0.75rem;
449
+ text-transform: uppercase;
450
+ letter-spacing: var(--formant-tracking-mono);
451
+ color: var(--theme-atmospheric-accents-1);
452
+ display: block;
453
+ margin-top: var(--formant-space-2);
454
+ }
455
+
456
+ q {
457
+ quotes: '"' '"' "'" "'";
458
+ }
459
+
460
+ q::before {
461
+ content: open-quote;
462
+ color: var(--theme-atmospheric-accents-2);
463
+ }
464
+
465
+ q::after {
466
+ content: close-quote;
467
+ color: var(--theme-atmospheric-accents-2);
468
+ }
469
+
470
+ /* ==========================================================================
471
+ 8. Lists
472
+ ========================================================================== */
473
+ ul, ol {
474
+ margin-bottom: var(--formant-space-2);
475
+ padding-left: var(--formant-space-4);
476
+ }
477
+
478
+ li {
479
+ margin-bottom: var(--formant-space-1);
480
+ }
481
+
482
+ li:last-child {
483
+ margin-bottom: 0;
484
+ }
485
+
486
+ ul {
487
+ list-style-type: disc;
488
+ }
489
+
490
+ ul ul {
491
+ list-style-type: circle;
492
+ margin-top: var(--formant-space-2);
493
+ }
494
+
495
+ ol {
496
+ list-style-type: decimal;
497
+ }
498
+
499
+ ol ol {
500
+ list-style-type: lower-alpha;
501
+ margin-top: var(--formant-space-2);
502
+ }
503
+
504
+ dl {
505
+ margin-bottom: var(--formant-space-4);
506
+ }
507
+
508
+ dt {
509
+ font-family: var(--font-monospace);
510
+ font-size: 0.75rem;
511
+ text-transform: uppercase;
512
+ letter-spacing: var(--formant-tracking-mono);
513
+ color: var(--theme-atmospheric-accents-1);
514
+ margin-bottom: var(--formant-space-1);
515
+ }
516
+
517
+ dd {
518
+ margin-left: 0;
519
+ margin-bottom: var(--formant-space-3);
520
+ color: var(--formant-text-secondary);
521
+ }
522
+
523
+ dd:last-child {
524
+ margin-bottom: 0;
525
+ }
526
+
527
+ /* ==========================================================================
528
+ 9. Horizontal Rules
529
+ ========================================================================== */
530
+ hr {
531
+ border: none;
532
+ border-top: 1px solid var(--formant-border-default);
533
+ margin: var(--formant-space-8) 0;
534
+ }
535
+
536
+ hr[data-variant="gradient"] {
537
+ border-top: none;
538
+ height: 1px;
539
+ background: linear-gradient(90deg, transparent, var(--formant-border-default), transparent);
540
+ }
541
+
542
+ /* ==========================================================================
543
+ 10. Tables
544
+ ========================================================================== */
545
+ table {
546
+ width: 100%;
547
+ border-collapse: collapse;
548
+ margin-bottom: var(--formant-space-6);
549
+ font-size: 0.9375rem;
550
+ }
551
+
552
+ caption {
553
+ font-family: var(--font-monospace);
554
+ font-size: 0.625rem;
555
+ text-transform: uppercase;
556
+ letter-spacing: var(--formant-tracking-mono);
557
+ color: var(--formant-text-muted);
558
+ text-align: left;
559
+ margin-bottom: var(--formant-space-2);
560
+ }
561
+
562
+ th,
563
+ td {
564
+ padding: var(--formant-space-3) var(--formant-space-4);
565
+ text-align: left;
566
+ border-bottom: 1px solid var(--formant-border-subtle);
567
+ }
568
+
569
+ th {
570
+ font-family: var(--font-monospace);
571
+ font-size: 0.625rem;
572
+ font-weight: var(--formant-weight-regular);
573
+ text-transform: uppercase;
574
+ letter-spacing: var(--formant-tracking-mono);
575
+ color: var(--theme-neutrals-2);
576
+ background-color: transparent;
577
+ }
578
+
579
+ tbody tr:hover {
580
+ background-color: rgba(var(--theme-atmospheric-accents-0-rgb), 0.2);
581
+ }
582
+
583
+ tbody tr:last-child td {
584
+ border-bottom: none;
585
+ }
586
+
587
+ table[data-variant="data"] {
588
+ font-family: var(--font-monospace);
589
+ font-size: 0.8125rem;
590
+ line-height: var(--formant-leading-data);
591
+ }
592
+
593
+ table[data-variant="data"] th {
594
+ font-size: 0.625rem;
595
+ letter-spacing: var(--formant-tracking-mono);
596
+ }
597
+
598
+ table[data-variant="data"] td {
599
+ color: var(--formant-text-primary);
600
+ }
601
+
602
+ /* ==========================================================================
603
+ 11. Forms - Input Fields
604
+ ========================================================================== */
605
+ input[type="text"],
606
+ input[type="email"],
607
+ input[type="password"],
608
+ input[type="number"],
609
+ input[type="tel"],
610
+ input[type="url"],
611
+ input[type="search"],
612
+ input[type="date"],
613
+ input[type="datetime-local"],
614
+ input[type="month"],
615
+ input[type="week"],
616
+ input[type="time"],
617
+ textarea,
618
+ select {
619
+ font-family: var(--font-body);
620
+ font-size: 14px;
621
+ color: var(--theme-neutrals-3);
622
+ background-color: var(--theme-neutrals-0);
623
+ border: 1px solid rgba(var(--theme-neutrals-2-rgb), 0.2);
624
+ border-radius: 3px;
625
+ padding: 12px 16px;
626
+ width: 100%;
627
+ outline: none;
628
+ transition: border-color 0.2s, box-shadow 0.2s;
629
+ }
630
+
631
+ input::placeholder,
632
+ textarea::placeholder {
633
+ color: rgba(var(--theme-neutrals-2-rgb), 0.5);
634
+ }
635
+
636
+ input:focus,
637
+ textarea:focus,
638
+ select:focus {
639
+ outline: none;
640
+ border-color: var(--theme-atmospheric-accents-2);
641
+ }
642
+
643
+ input:focus-visible,
644
+ textarea:focus-visible,
645
+ select:focus-visible {
646
+ outline: none;
647
+ border-color: var(--theme-atmospheric-accents-2);
648
+ box-shadow: 0 0 0 1px var(--theme-atmospheric-accents-2);
649
+ }
650
+
651
+ input:disabled,
652
+ textarea:disabled,
653
+ select:disabled {
654
+ opacity: 0.5;
655
+ cursor: not-allowed;
656
+ background-color: var(--formant-bg-secondary);
657
+ }
658
+
659
+ input:read-only,
660
+ textarea:read-only {
661
+ background-color: var(--formant-bg-secondary);
662
+ }
663
+
664
+ /* Search input clear button */
665
+ input[type="search"]::-webkit-search-cancel-button {
666
+ -webkit-appearance: none;
667
+ appearance: none;
668
+ width: 16px;
669
+ height: 16px;
670
+ background-color: var(--theme-neutrals-2);
671
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E") no-repeat center;
672
+ mask-size: 10px;
673
+ cursor: pointer;
674
+ opacity: 0.7;
675
+ transition: opacity 0.2s;
676
+ }
677
+
678
+ input[type="search"]::-webkit-search-cancel-button:hover {
679
+ opacity: 1;
680
+ background-color: var(--theme-neutrals-3);
681
+ }
682
+
683
+ /* ==========================================================================
684
+ 12. Forms - Textarea
685
+ ========================================================================== */
686
+ textarea {
687
+ min-height: 120px;
688
+ resize: vertical;
689
+ line-height: var(--formant-leading-normal);
690
+ }
691
+
692
+ /* ==========================================================================
693
+ 13. Forms - Select
694
+ ========================================================================== */
695
+ select {
696
+ appearance: none;
697
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M2.5 4.5L6 8L9.5 4.5' stroke='%23A3ABA9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
698
+ background-repeat: no-repeat;
699
+ background-position: right var(--formant-space-4) center;
700
+ padding-right: var(--formant-space-10);
701
+ cursor: pointer;
702
+ }
703
+
704
+ select[multiple] {
705
+ background-image: none;
706
+ padding-right: var(--formant-space-4);
707
+ min-height: 120px;
708
+ }
709
+
710
+ /* ==========================================================================
711
+ 14. Forms - Checkboxes & Radios
712
+ ========================================================================== */
713
+ input[type="checkbox"],
714
+ input[type="radio"] {
715
+ appearance: none;
716
+ width: 1.125rem;
717
+ height: 1.125rem;
718
+ border: 1px solid var(--formant-border-default);
719
+ background-color: var(--formant-bg-primary);
720
+ cursor: pointer;
721
+ position: relative;
722
+ vertical-align: middle;
723
+ margin-right: var(--formant-space-2);
724
+ transition: border-color var(--formant-transition-base), background-color var(--formant-transition-base);
725
+ }
726
+
727
+ input[type="checkbox"] {
728
+ border-radius: var(--formant-radius-sm);
729
+ }
730
+
731
+ input[type="radio"] {
732
+ border-radius: var(--formant-radius-full);
733
+ }
734
+
735
+ input[type="checkbox"]:checked {
736
+ background-color: var(--theme-atmospheric-accents-2);
737
+ border-color: var(--theme-atmospheric-accents-2);
738
+ box-shadow: 0 0 8px rgba(var(--theme-atmospheric-accents-2-rgb), 0.4);
739
+ }
740
+
741
+ /* Industrial indicator - filled square centered in checkbox */
742
+ input[type="checkbox"]:checked::after {
743
+ content: '';
744
+ position: absolute;
745
+ left: 50%;
746
+ top: 50%;
747
+ transform: translate(-50%, -50%);
748
+ width: 10px;
749
+ height: 10px;
750
+ background-color: var(--theme-neutrals-0);
751
+ border-radius: 2px;
752
+ }
753
+
754
+ input[type="radio"]:checked {
755
+ border-color: var(--theme-atmospheric-accents-2);
756
+ background-color: var(--theme-atmospheric-accents-2);
757
+ box-shadow: 0 0 8px rgba(var(--theme-atmospheric-accents-2-rgb), 0.4), inset 0 0 0 3px var(--formant-bg-primary);
758
+ }
759
+
760
+ input[type="checkbox"]:focus-visible,
761
+ input[type="radio"]:focus-visible {
762
+ outline: none;
763
+ box-shadow: var(--formant-focus-ring);
764
+ }
765
+
766
+ input[type="checkbox"]:disabled,
767
+ input[type="radio"]:disabled {
768
+ opacity: 0.5;
769
+ cursor: not-allowed;
770
+ }
771
+
772
+ /* Checkbox/Radio labels - reset to body text style */
773
+ label:has(> input[type="checkbox"]),
774
+ label:has(> input[type="radio"]),
775
+ label:has(+ input[type="checkbox"]),
776
+ label:has(+ input[type="radio"]) {
777
+ display: inline-flex;
778
+ align-items: center;
779
+ gap: var(--formant-space-2);
780
+ cursor: pointer;
781
+ font-family: var(--font-body);
782
+ font-size: 0.875rem;
783
+ font-weight: var(--formant-weight-regular);
784
+ text-transform: none;
785
+ letter-spacing: normal;
786
+ color: var(--formant-text-secondary);
787
+ margin-bottom: 0;
788
+ margin-right: var(--formant-space-4);
789
+ }
790
+
791
+ /* ==========================================================================
792
+ 15. Forms - File Input
793
+ ========================================================================== */
794
+ input[type="file"] {
795
+ font-size: 0.875rem;
796
+ color: var(--formant-text-secondary);
797
+ padding: var(--formant-space-3) 0;
798
+ }
799
+
800
+ input[type="file"]::file-selector-button {
801
+ font-family: var(--font-body);
802
+ font-size: 0.8125rem;
803
+ font-weight: var(--formant-weight-medium);
804
+ text-transform: uppercase;
805
+ letter-spacing: 0.04em;
806
+ color: var(--theme-atmospheric-accents-2);
807
+ background-color: transparent;
808
+ border: 1px solid var(--theme-atmospheric-accents-2);
809
+ border-radius: var(--formant-radius-md);
810
+ padding: var(--formant-space-2) var(--formant-space-4);
811
+ margin-right: var(--formant-space-4);
812
+ cursor: pointer;
813
+ transition: background-color var(--formant-transition-base);
814
+ }
815
+
816
+ input[type="file"]::file-selector-button:hover {
817
+ background-color: rgba(var(--theme-atmospheric-accents-2-rgb), 0.1);
818
+ }
819
+
820
+ /* ==========================================================================
821
+ 16. Forms - Range Slider
822
+ ========================================================================== */
823
+ input[type="range"] {
824
+ appearance: none;
825
+ width: 100%;
826
+ height: 4px;
827
+ background-color: var(--theme-atmospheric-accents-1);
828
+ border-radius: var(--formant-radius-full);
829
+ outline: none;
830
+ padding: 0;
831
+ border: none;
832
+ }
833
+
834
+ input[type="range"]::-webkit-slider-thumb {
835
+ appearance: none;
836
+ width: 16px;
837
+ height: 16px;
838
+ background-color: var(--theme-atmospheric-accents-2);
839
+ border-radius: var(--formant-radius-full);
840
+ cursor: pointer;
841
+ transition: transform var(--formant-transition-base), box-shadow var(--formant-transition-base);
842
+ }
843
+
844
+ input[type="range"]::-webkit-slider-thumb:hover {
845
+ transform: scale(1.1);
846
+ box-shadow: 0 0 10px rgba(var(--theme-atmospheric-accents-2-rgb), 0.4);
847
+ }
848
+
849
+ input[type="range"]::-moz-range-thumb {
850
+ width: 16px;
851
+ height: 16px;
852
+ background-color: var(--theme-atmospheric-accents-2);
853
+ border-radius: var(--formant-radius-full);
854
+ cursor: pointer;
855
+ border: none;
856
+ }
857
+
858
+ /* ==========================================================================
859
+ 17. Forms - Color Picker
860
+ ========================================================================== */
861
+ input[type="color"] {
862
+ appearance: none;
863
+ width: 3rem;
864
+ height: 2.5rem;
865
+ padding: 2px;
866
+ border: 1px solid var(--formant-border-default);
867
+ border-radius: 3px;
868
+ background-color: var(--formant-bg-secondary);
869
+ cursor: pointer;
870
+ overflow: hidden;
871
+ }
872
+
873
+ input[type="color"]::-webkit-color-swatch-wrapper {
874
+ padding: 0;
875
+ }
876
+
877
+ input[type="color"]::-webkit-color-swatch {
878
+ border: none;
879
+ border-radius: 2px;
880
+ }
881
+
882
+ /* ==========================================================================
883
+ 18. Forms - Fieldset & Legend
884
+ ========================================================================== */
885
+ fieldset {
886
+ border: 1px solid var(--formant-border-subtle);
887
+ border-radius: var(--formant-radius-md);
888
+ padding: var(--formant-space-4);
889
+ margin-bottom: var(--formant-space-4);
890
+ }
891
+
892
+ fieldset + fieldset {
893
+ margin-top: var(--formant-space-4);
894
+ }
895
+
896
+ fieldset > div + div {
897
+ margin-top: var(--formant-space-4);
898
+ }
899
+
900
+ legend {
901
+ font-family: var(--font-monospace);
902
+ font-size: 0.625rem;
903
+ font-weight: var(--formant-weight-regular);
904
+ text-transform: uppercase;
905
+ letter-spacing: var(--formant-tracking-mono);
906
+ color: var(--theme-functional-accents-0);
907
+ padding: 0 var(--formant-space-2);
908
+ }
909
+
910
+ /* ==========================================================================
911
+ 19. Forms - Labels
912
+ ========================================================================== */
913
+ label {
914
+ display: block;
915
+ font-family: var(--font-monospace);
916
+ font-size: 0.625rem;
917
+ font-weight: var(--formant-weight-regular);
918
+ text-transform: uppercase;
919
+ letter-spacing: 0.15em;
920
+ color: var(--theme-neutrals-2);
921
+ margin-bottom: var(--formant-space-2);
922
+ }
923
+
924
+ label:has(+ [required])::after,
925
+ label:has(~ [required])::after {
926
+ content: ' *';
927
+ color: var(--theme-functional-accents-0);
928
+ }
929
+
930
+ /* ==========================================================================
931
+ 20. Forms - Progress & Meter
932
+ ========================================================================== */
933
+ progress {
934
+ appearance: none;
935
+ width: 100%;
936
+ height: 0.5rem;
937
+ border-radius: var(--formant-radius-full);
938
+ background-color: var(--formant-bg-secondary);
939
+ overflow: hidden;
940
+ }
941
+
942
+ progress::-webkit-progress-bar {
943
+ background-color: var(--formant-bg-secondary);
944
+ border-radius: var(--formant-radius-full);
945
+ }
946
+
947
+ progress::-webkit-progress-value {
948
+ background-color: var(--theme-atmospheric-accents-2);
949
+ border-radius: var(--formant-radius-full);
950
+ transition: width 0.3s ease;
951
+ }
952
+
953
+ progress::-moz-progress-bar {
954
+ background-color: var(--theme-atmospheric-accents-2);
955
+ border-radius: var(--formant-radius-full);
956
+ }
957
+
958
+ meter {
959
+ width: 100%;
960
+ height: 0.5rem;
961
+ border-radius: var(--formant-radius-full);
962
+ background-color: var(--formant-bg-secondary);
963
+ }
964
+
965
+ meter::-webkit-meter-bar {
966
+ background-color: var(--formant-bg-secondary);
967
+ border-radius: var(--formant-radius-full);
968
+ border: none;
969
+ }
970
+
971
+ meter::-webkit-meter-optimum-value {
972
+ background-color: var(--theme-atmospheric-accents-2);
973
+ border-radius: var(--formant-radius-full);
974
+ }
975
+
976
+ meter::-webkit-meter-suboptimum-value {
977
+ background-color: var(--theme-functional-accents-0);
978
+ border-radius: var(--formant-radius-full);
979
+ }
980
+
981
+ meter::-webkit-meter-even-less-good-value {
982
+ background-color: var(--theme-functional-accents-0);
983
+ border-radius: var(--formant-radius-full);
984
+ }
985
+
986
+ /* ==========================================================================
987
+ 21. Buttons
988
+ ========================================================================== */
989
+ button,
990
+ input[type="submit"],
991
+ input[type="button"],
992
+ input[type="reset"] {
993
+ font-family: var(--font-body);
994
+ font-size: 0.8125rem;
995
+ font-weight: var(--formant-weight-medium);
996
+ text-transform: uppercase;
997
+ letter-spacing: 0.04em;
998
+ padding: var(--formant-space-3) var(--formant-space-6);
999
+ border-radius: 3px;
1000
+ border: none;
1001
+ cursor: pointer;
1002
+ transition: all 0.2s;
1003
+ display: inline-flex;
1004
+ align-items: center;
1005
+ justify-content: center;
1006
+ gap: var(--formant-space-2);
1007
+ text-decoration: none;
1008
+ }
1009
+
1010
+ button:not([type]):not([class]),
1011
+ button[type="submit"],
1012
+ input[type="submit"] {
1013
+ background-color: var(--theme-atmospheric-accents-2);
1014
+ color: var(--theme-neutrals-0);
1015
+ }
1016
+
1017
+ button:not([type]):not([class]):hover,
1018
+ button[type="submit"]:hover,
1019
+ input[type="submit"]:hover {
1020
+ background-color: var(--theme-neutrals-3);
1021
+ box-shadow: var(--formant-shadow-glow);
1022
+ }
1023
+
1024
+ button[type="button"],
1025
+ input[type="button"] {
1026
+ background-color: transparent;
1027
+ color: var(--theme-atmospheric-accents-2);
1028
+ border: 1px solid rgba(var(--theme-atmospheric-accents-2-rgb), 0.4);
1029
+ }
1030
+
1031
+ button[type="button"]:hover,
1032
+ input[type="button"]:hover {
1033
+ background-color: rgba(var(--theme-atmospheric-accents-2-rgb), 0.08);
1034
+ border-color: var(--theme-atmospheric-accents-2);
1035
+ }
1036
+
1037
+ button[type="reset"],
1038
+ input[type="reset"] {
1039
+ background-color: transparent;
1040
+ color: var(--theme-neutrals-2);
1041
+ border: 1px solid rgba(var(--theme-neutrals-2-rgb), 0.2);
1042
+ }
1043
+
1044
+ button[type="reset"]:hover,
1045
+ input[type="reset"]:hover {
1046
+ color: var(--theme-neutrals-3);
1047
+ border-color: var(--theme-neutrals-2);
1048
+ }
1049
+
1050
+ button[data-variant="warning"] {
1051
+ background-color: var(--theme-functional-accents-0);
1052
+ color: var(--theme-neutrals-0);
1053
+ }
1054
+
1055
+ button[data-variant="warning"]:hover {
1056
+ background-color: rgba(var(--theme-functional-accents-0-rgb), 0.8);
1057
+ }
1058
+
1059
+ button:focus-visible,
1060
+ input[type="submit"]:focus-visible,
1061
+ input[type="button"]:focus-visible,
1062
+ input[type="reset"]:focus-visible {
1063
+ outline: none;
1064
+ box-shadow: var(--formant-focus-ring);
1065
+ }
1066
+
1067
+ button:active,
1068
+ input[type="submit"]:active,
1069
+ input[type="button"]:active,
1070
+ input[type="reset"]:active {
1071
+ transform: translateY(1px);
1072
+ }
1073
+
1074
+ button:disabled,
1075
+ input[type="submit"]:disabled,
1076
+ input[type="button"]:disabled,
1077
+ input[type="reset"]:disabled {
1078
+ opacity: 0.5;
1079
+ cursor: not-allowed;
1080
+ }
1081
+
1082
+ /* ==========================================================================
1083
+ 22. Media Elements
1084
+ ========================================================================== */
1085
+ img {
1086
+ max-width: 100%;
1087
+ height: auto;
1088
+ border-radius: var(--formant-radius-md);
1089
+ }
1090
+
1091
+ img[src$=".svg"] {
1092
+ border-radius: 0;
1093
+ }
1094
+
1095
+ figure {
1096
+ margin: var(--formant-space-6) 0;
1097
+ }
1098
+
1099
+ figure > img {
1100
+ width: 100%;
1101
+ max-height: 400px;
1102
+ object-fit: cover;
1103
+ }
1104
+
1105
+ figcaption {
1106
+ font-family: var(--font-monospace);
1107
+ font-size: 0.625rem;
1108
+ text-transform: uppercase;
1109
+ letter-spacing: var(--formant-tracking-mono);
1110
+ color: var(--formant-text-muted);
1111
+ text-align: center;
1112
+ margin-top: var(--formant-space-2);
1113
+ }
1114
+
1115
+ video {
1116
+ max-width: 100%;
1117
+ height: auto;
1118
+ border-radius: var(--formant-radius-md);
1119
+ background-color: var(--formant-bg-secondary);
1120
+ }
1121
+
1122
+ audio {
1123
+ width: 100%;
1124
+ border-radius: var(--formant-radius-full);
1125
+ }
1126
+
1127
+ /* ==========================================================================
1128
+ 23. Details & Summary (Accordion)
1129
+ ========================================================================== */
1130
+ details {
1131
+ background-color: var(--formant-bg-secondary);
1132
+ border: 1px solid var(--formant-border-subtle);
1133
+ border-radius: var(--formant-radius-md);
1134
+ margin-bottom: var(--formant-space-3);
1135
+ overflow: hidden;
1136
+ }
1137
+
1138
+ summary {
1139
+ font-family: var(--font-display);
1140
+ font-size: 1rem;
1141
+ font-weight: var(--formant-weight-medium);
1142
+ color: var(--formant-text-primary);
1143
+ padding: var(--formant-space-4);
1144
+ cursor: pointer;
1145
+ list-style: none;
1146
+ display: flex;
1147
+ align-items: center;
1148
+ justify-content: space-between;
1149
+ transition: background-color var(--formant-transition-base);
1150
+ }
1151
+
1152
+ summary::-webkit-details-marker {
1153
+ display: none;
1154
+ }
1155
+
1156
+ summary::after {
1157
+ content: '+';
1158
+ font-family: var(--font-monospace);
1159
+ font-size: 1.25rem;
1160
+ color: var(--theme-atmospheric-accents-2);
1161
+ transition: transform var(--formant-transition-base);
1162
+ }
1163
+
1164
+ details[open] summary::after {
1165
+ content: '−';
1166
+ }
1167
+
1168
+ summary:hover {
1169
+ background-color: rgba(var(--theme-atmospheric-accents-0-rgb), 0.2);
1170
+ }
1171
+
1172
+ details > *:not(summary) {
1173
+ padding: 0 var(--formant-space-4) var(--formant-space-4);
1174
+ }
1175
+
1176
+ /* ==========================================================================
1177
+ 24. Dialog & Popover
1178
+ ========================================================================== */
1179
+ dialog {
1180
+ background-color: var(--formant-bg-secondary);
1181
+ border: 1px solid var(--formant-border-default);
1182
+ border-radius: var(--formant-radius-lg);
1183
+ padding: var(--formant-space-6);
1184
+ color: var(--formant-text-secondary);
1185
+ max-width: min(90vw, 600px);
1186
+ box-shadow: var(--formant-shadow-lg);
1187
+ }
1188
+
1189
+ dialog::backdrop {
1190
+ background-color: rgba(var(--theme-neutrals-0-rgb), 0.8);
1191
+ backdrop-filter: blur(4px);
1192
+ }
1193
+
1194
+ dialog[open] {
1195
+ animation: dialogFadeIn 0.3s ease;
1196
+ }
1197
+
1198
+ @keyframes dialogFadeIn {
1199
+ from {
1200
+ opacity: 0;
1201
+ transform: scale(0.95);
1202
+ }
1203
+ to {
1204
+ opacity: 1;
1205
+ transform: scale(1);
1206
+ }
1207
+ }
1208
+
1209
+ /* ==========================================================================
1210
+ 25. Navigation
1211
+ ========================================================================== */
1212
+ nav {
1213
+ background-color: rgba(var(--theme-neutrals-0-rgb), 0.85);
1214
+ backdrop-filter: blur(16px);
1215
+ border-bottom: 1px solid var(--formant-border-subtle);
1216
+ }
1217
+
1218
+ nav ul {
1219
+ list-style: none;
1220
+ padding: 0;
1221
+ margin: 0;
1222
+ display: flex;
1223
+ gap: var(--formant-space-6);
1224
+ }
1225
+
1226
+ nav li {
1227
+ margin: 0;
1228
+ }
1229
+
1230
+ nav a {
1231
+ font-size: 0.875rem;
1232
+ font-weight: var(--formant-weight-medium);
1233
+ color: var(--theme-neutrals-2);
1234
+ text-decoration: none;
1235
+ padding: var(--formant-space-3) 0;
1236
+ display: block;
1237
+ transition: color var(--formant-transition-base);
1238
+ }
1239
+
1240
+ nav a:hover,
1241
+ nav a[aria-current="page"] {
1242
+ color: var(--theme-neutrals-3);
1243
+ text-decoration: none;
1244
+ }
1245
+
1246
+ /* ==========================================================================
1247
+ 26. Article, Section, Aside, Main, Header, Footer
1248
+ ========================================================================== */
1249
+ main {
1250
+ max-width: 1200px;
1251
+ margin: 0 auto;
1252
+ padding: var(--formant-space-8) var(--formant-space-6);
1253
+ }
1254
+
1255
+ header {
1256
+ margin-bottom: var(--formant-space-12);
1257
+ }
1258
+
1259
+ footer {
1260
+ background-color: var(--theme-neutrals-1);
1261
+ margin-top: var(--formant-space-12);
1262
+ padding-top: var(--formant-space-8);
1263
+ border-top: 1px solid var(--formant-border-subtle);
1264
+ font-size: 0.875rem;
1265
+ color: var(--formant-text-muted);
1266
+ }
1267
+
1268
+ article {
1269
+ margin-bottom: var(--formant-space-12);
1270
+ }
1271
+
1272
+ section {
1273
+ margin-bottom: var(--formant-space-10);
1274
+ }
1275
+
1276
+ aside {
1277
+ background-color: var(--formant-bg-secondary);
1278
+ border: 1px solid var(--formant-border-subtle);
1279
+ border-radius: var(--formant-radius-md);
1280
+ padding: var(--formant-space-4);
1281
+ margin-bottom: var(--formant-space-4);
1282
+ font-size: 0.9375rem;
1283
+ }
1284
+
1285
+ /* ==========================================================================
1286
+ 27. Address & Time
1287
+ ========================================================================== */
1288
+ address {
1289
+ font-style: normal;
1290
+ font-family: var(--font-monospace);
1291
+ font-size: 0.875rem;
1292
+ line-height: var(--formant-leading-normal);
1293
+ color: var(--formant-text-secondary);
1294
+ margin-bottom: var(--formant-space-4);
1295
+ }
1296
+
1297
+ time {
1298
+ font-family: var(--font-monospace);
1299
+ font-size: 0.875rem;
1300
+ color: var(--theme-atmospheric-accents-1);
1301
+ }
1302
+
1303
+ /* ==========================================================================
1304
+ 28. Definition & Variables (for technical content)
1305
+ ========================================================================== */
1306
+ var {
1307
+ font-family: var(--font-monospace);
1308
+ font-style: italic;
1309
+ color: var(--theme-functional-accents-1);
1310
+ }
1311
+
1312
+ dfn {
1313
+ font-style: italic;
1314
+ border-bottom: 1px dashed var(--formant-border-strong);
1315
+ cursor: help;
1316
+ }
1317
+
1318
+ /* ==========================================================================
1319
+ 29. Data Attributes for Eyebrow Pattern
1320
+ ========================================================================== */
1321
+ [data-eyebrow] {
1322
+ font-family: var(--font-monospace);
1323
+ font-size: 0.625rem;
1324
+ letter-spacing: 0.2em;
1325
+ text-transform: uppercase;
1326
+ color: var(--theme-functional-accents-0);
1327
+ display: flex;
1328
+ align-items: center;
1329
+ gap: var(--formant-space-3);
1330
+ margin-bottom: var(--formant-space-3);
1331
+ }
1332
+
1333
+ [data-eyebrow]::before {
1334
+ content: '';
1335
+ display: block;
1336
+ width: 24px;
1337
+ height: 1px;
1338
+ background-color: var(--theme-functional-accents-0);
1339
+ }
1340
+
1341
+ /* ==========================================================================
1342
+ 30. Status Tags via Data Attributes
1343
+ ========================================================================== */
1344
+ [data-tag] {
1345
+ font-family: var(--font-monospace);
1346
+ font-size: 0.6875rem;
1347
+ letter-spacing: var(--formant-tracking-mono);
1348
+ text-transform: uppercase;
1349
+ padding: var(--formant-space-1) var(--formant-space-3);
1350
+ border-radius: var(--formant-radius-sm);
1351
+ display: inline-flex;
1352
+ align-items: center;
1353
+ }
1354
+
1355
+ [data-tag="resolved"],
1356
+ [data-tag="verified"] {
1357
+ background-color: rgba(var(--theme-atmospheric-accents-1-rgb), 0.3);
1358
+ color: var(--theme-atmospheric-accents-2);
1359
+ border: 1px solid rgba(var(--theme-atmospheric-accents-1-rgb), 0.4);
1360
+ }
1361
+
1362
+ [data-tag="investigating"] {
1363
+ background-color: rgba(var(--theme-atmospheric-accents-0-rgb), 0.4);
1364
+ color: var(--theme-atmospheric-accents-2);
1365
+ }
1366
+
1367
+ [data-tag="warning"] {
1368
+ background-color: rgba(var(--theme-functional-accents-0-rgb), 0.1);
1369
+ color: var(--theme-functional-accents-0);
1370
+ }
1371
+
1372
+ [data-tag="ai-active"] {
1373
+ background-color: rgba(var(--theme-functional-accents-1-rgb), 0.1);
1374
+ color: var(--theme-functional-accents-1);
1375
+ }
1376
+
1377
+ /* ==========================================================================
1378
+ 31. Alert Boxes via Data Attributes
1379
+ ========================================================================== */
1380
+ [data-alert] {
1381
+ padding: var(--formant-space-4);
1382
+ border-radius: var(--formant-radius-md);
1383
+ margin-bottom: var(--formant-space-4);
1384
+ font-size: 0.9375rem;
1385
+ display: flex;
1386
+ align-items: flex-start;
1387
+ gap: var(--formant-space-3);
1388
+ }
1389
+
1390
+ [data-alert]::before {
1391
+ content: '';
1392
+ width: 6px;
1393
+ height: 6px;
1394
+ border-radius: var(--formant-radius-full);
1395
+ flex-shrink: 0;
1396
+ margin-top: 0.5em;
1397
+ }
1398
+
1399
+ [data-alert="info"] {
1400
+ background-color: rgba(var(--theme-atmospheric-accents-0-rgb), 0.3);
1401
+ color: var(--theme-atmospheric-accents-2);
1402
+ }
1403
+
1404
+ [data-alert="info"]::before {
1405
+ background-color: var(--theme-atmospheric-accents-2);
1406
+ }
1407
+
1408
+ [data-alert="warning"] {
1409
+ background-color: rgba(var(--theme-functional-accents-0-rgb), 0.08);
1410
+ color: var(--theme-functional-accents-0);
1411
+ }
1412
+
1413
+ [data-alert="warning"]::before {
1414
+ background-color: var(--theme-functional-accents-0);
1415
+ }
1416
+
1417
+ [data-alert="ai"] {
1418
+ background-color: rgba(var(--theme-functional-accents-1-rgb), 0.08);
1419
+ color: var(--theme-functional-accents-1);
1420
+ }
1421
+
1422
+ [data-alert="ai"]::before {
1423
+ background-color: var(--theme-functional-accents-1);
1424
+ }
1425
+
1426
+ /* ==========================================================================
1427
+ 32. Scrollbar Styling
1428
+ ========================================================================== */
1429
+ ::-webkit-scrollbar {
1430
+ width: 8px;
1431
+ height: 8px;
1432
+ }
1433
+
1434
+ ::-webkit-scrollbar-track {
1435
+ background: var(--theme-neutrals-0);
1436
+ }
1437
+
1438
+ ::-webkit-scrollbar-thumb {
1439
+ background: var(--theme-atmospheric-accents-1);
1440
+ border-radius: var(--formant-radius-md);
1441
+ }
1442
+
1443
+ ::-webkit-scrollbar-thumb:hover {
1444
+ background: var(--theme-atmospheric-accents-2);
1445
+ }
1446
+
1447
+ /* ==========================================================================
1448
+ 33. Selection Styling
1449
+ ========================================================================== */
1450
+ ::selection {
1451
+ background-color: rgba(var(--theme-atmospheric-accents-2-rgb), 0.3);
1452
+ color: var(--theme-neutrals-3);
1453
+ }
1454
+
1455
+ /* ==========================================================================
1456
+ 34. Focus Visible (Global)
1457
+ ========================================================================== */
1458
+ :focus-visible {
1459
+ outline: none;
1460
+ }
1461
+
1462
+ /* ==========================================================================
1463
+ 35. Section Variants - Hero
1464
+ ========================================================================== */
1465
+ section[data-variant="hero"] {
1466
+ position: relative;
1467
+ width: 100%;
1468
+ min-height: 80vh;
1469
+ display: flex;
1470
+ flex-direction: column;
1471
+ justify-content: center;
1472
+ align-items: center;
1473
+ text-align: center;
1474
+ overflow: hidden;
1475
+ /* Set --hero-bg-image: url('your-image.jpg') to add background */
1476
+ }
1477
+
1478
+ section[data-variant="hero"]::before {
1479
+ content: '';
1480
+ position: absolute;
1481
+ top: 0;
1482
+ left: 0;
1483
+ right: 0;
1484
+ bottom: 0;
1485
+ background-color: var(--theme-neutrals-0);
1486
+ background-size: cover;
1487
+ background-position: center;
1488
+ background-repeat: no-repeat;
1489
+ filter: blur(8px) brightness(0.6);
1490
+ transform: scale(1.1);
1491
+ z-index: 0;
1492
+ }
1493
+
1494
+ section[data-variant="hero"][style*="hero-bg-image"]::before {
1495
+ background-image: var(--hero-bg-image);
1496
+ }
1497
+
1498
+ section[data-variant="hero"]::after {
1499
+ content: '';
1500
+ position: absolute;
1501
+ left: 0;
1502
+ right: 0;
1503
+ bottom: 0;
1504
+ height: 40%;
1505
+ background: linear-gradient(to top, var(--theme-neutrals-1) 0%, transparent 100%);
1506
+ z-index: 1;
1507
+ pointer-events: none;
1508
+ }
1509
+
1510
+ section[data-variant="hero"] > * {
1511
+ position: relative;
1512
+ z-index: 2;
1513
+ }
1514
+
1515
+ section[data-variant="hero"] > div {
1516
+ max-width: 800px;
1517
+ padding: var(--formant-space-8);
1518
+ }
1519
+
1520
+ section[data-variant="hero"] h1 {
1521
+ font-weight: 300;
1522
+ line-height: 1.0;
1523
+ letter-spacing: -0.02em;
1524
+ color: var(--theme-neutrals-3);
1525
+ text-shadow: 0 2px 20px rgba(0, 0, 0, 0.5);
1526
+ margin-bottom: var(--formant-space-6);
1527
+ }
1528
+
1529
+ section[data-variant="hero"] h2 {
1530
+ font-weight: 500;
1531
+ line-height: 1.15;
1532
+ letter-spacing: -0.02em;
1533
+ color: var(--theme-neutrals-3);
1534
+ text-shadow: 0 2px 20px rgba(0, 0, 0, 0.5);
1535
+ margin-bottom: var(--formant-space-5);
1536
+ }
1537
+
1538
+ section[data-variant="hero"] p {
1539
+ max-width: 600px;
1540
+ margin-left: auto;
1541
+ margin-right: auto;
1542
+ color: var(--theme-neutrals-2);
1543
+ font-size: 1.0625rem;
1544
+ }
1545
+
1546
+ section[data-variant="hero"]::before {
1547
+ content: '';
1548
+ position: absolute;
1549
+ top: 0;
1550
+ left: 0;
1551
+ right: 0;
1552
+ bottom: 0;
1553
+ background-image: inherit;
1554
+ background-size: cover;
1555
+ background-position: center;
1556
+ background-repeat: no-repeat;
1557
+ filter: blur(8px) brightness(0.6);
1558
+ transform: scale(1.1);
1559
+ z-index: 0;
1560
+ }
1561
+
1562
+ section[data-variant="hero"]::after {
1563
+ content: '';
1564
+ position: absolute;
1565
+ left: 0;
1566
+ right: 0;
1567
+ bottom: 0;
1568
+ height: 40%;
1569
+ background: linear-gradient(to top, var(--theme-neutrals-1) 0%, transparent 100%);
1570
+ z-index: 1;
1571
+ pointer-events: none;
1572
+ }
1573
+
1574
+ section[data-variant="hero"] > * {
1575
+ position: relative;
1576
+ z-index: 2;
1577
+ }
1578
+
1579
+ /* ==========================================================================
1580
+ 36. Data Variant - Lead Paragraph
1581
+ ========================================================================== */
1582
+ p[data-variant="lead"] {
1583
+ font-size: 1.0625rem;
1584
+ line-height: 1.75;
1585
+ max-width: 600px;
1586
+ color: var(--formant-text-secondary);
1587
+ }
1588
+
1589
+ /* ==========================================================================
1590
+ 37. Data Variant - Icon Buttons (square, no text)
1591
+ ========================================================================== */
1592
+ button[data-variant="icon"] {
1593
+ width: 40px;
1594
+ height: 40px;
1595
+ padding: 0;
1596
+ flex-shrink: 0;
1597
+ vertical-align: middle;
1598
+ }
1599
+
1600
+ /* ==========================================================================
1601
+ 38. Section Variant - Chat Component
1602
+ ========================================================================== */
1603
+ section[data-variant="chat"] {
1604
+ border: 1px solid var(--formant-border-subtle);
1605
+ border-radius: 4px;
1606
+ overflow: hidden;
1607
+ background-color: var(--theme-neutrals-0);
1608
+ margin-top: var(--formant-space-8);
1609
+ }
1610
+
1611
+ section[data-variant="chat"] > header {
1612
+ display: flex;
1613
+ align-items: center;
1614
+ justify-content: space-between;
1615
+ padding: 0.75rem 1.5rem;
1616
+ background-color: var(--formant-bg-secondary);
1617
+ border-bottom: 1px solid var(--formant-border-subtle);
1618
+ margin-bottom: 0;
1619
+ }
1620
+
1621
+ section[data-variant="chat"] > header h3 {
1622
+ font-size: 0.875rem;
1623
+ font-weight: 500;
1624
+ color: var(--theme-neutrals-3);
1625
+ margin: 0;
1626
+ }
1627
+
1628
+ section[data-variant="chat"] > section {
1629
+ height: 300px;
1630
+ overflow-y: auto;
1631
+ padding: 1.5rem;
1632
+ background-color: var(--theme-neutrals-0);
1633
+ margin-bottom: 0;
1634
+ }
1635
+
1636
+ section[data-variant="chat"] > footer {
1637
+ border-top: 1px solid var(--formant-border-subtle);
1638
+ padding: 1rem 1.5rem;
1639
+ background-color: var(--formant-bg-secondary);
1640
+ margin-top: 0;
1641
+ }
1642
+
1643
+ section[data-variant="chat"] > footer form {
1644
+ display: flex;
1645
+ gap: 0.5rem;
1646
+ align-items: flex-end;
1647
+ }
1648
+
1649
+ section[data-variant="chat"] > footer p {
1650
+ font-family: var(--font-monospace);
1651
+ font-size: 0.625rem;
1652
+ letter-spacing: 0.1em;
1653
+ text-transform: uppercase;
1654
+ color: var(--theme-neutrals-2);
1655
+ text-align: center;
1656
+ margin-top: 0.75rem;
1657
+ margin-bottom: 0;
1658
+ width: 100%;
1659
+ }
1660
+
1661
+ /* Chat avatar */
1662
+ [data-variant="avatar"] {
1663
+ width: 32px;
1664
+ height: 32px;
1665
+ border-radius: 3px;
1666
+ display: flex;
1667
+ align-items: center;
1668
+ justify-content: center;
1669
+ flex-shrink: 0;
1670
+ }
1671
+
1672
+ [data-variant="avatar-lg"] {
1673
+ width: 64px;
1674
+ height: 64px;
1675
+ border-radius: 3px;
1676
+ display: flex;
1677
+ align-items: center;
1678
+ justify-content: center;
1679
+ }
1680
+
1681
+ /* ==========================================================================
1682
+ 39. Footer - Full Width with Inner Container
1683
+ ========================================================================== */
1684
+ body > footer {
1685
+ padding: 5rem 0;
1686
+ margin-top: 0;
1687
+ }
1688
+
1689
+ body > footer > div {
1690
+ max-width: 1200px;
1691
+ margin: 0 auto;
1692
+ padding: 0 2.5rem;
1693
+ display: flex;
1694
+ justify-content: space-between;
1695
+ align-items: flex-end;
1696
+ }
1697
+
1698
+ body > footer address {
1699
+ font-family: var(--font-monospace);
1700
+ font-size: 0.6875rem;
1701
+ color: var(--theme-neutrals-2);
1702
+ line-height: 2;
1703
+ text-align: right;
1704
+ font-style: normal;
1705
+ }
1706
+
1707
+ body > footer address p {
1708
+ margin: 0;
1709
+ }
1710
+
1711
+ /* ==========================================================================
1712
+ 40. Form Element Spacing (without fieldset)
1713
+ ========================================================================== */
1714
+ form > label {
1715
+ margin-top: var(--formant-space-4);
1716
+ }
1717
+
1718
+ form > label:first-child {
1719
+ margin-top: 0;
1720
+ }
1721
+
1722
+ form > label + input,
1723
+ form > label + textarea,
1724
+ form > label + select {
1725
+ margin-bottom: var(--formant-space-4);
1726
+ }
1727
+
1728
+ form > div + div {
1729
+ margin-top: var(--formant-space-4);
1730
+ }
1731
+
1732
+ form > button,
1733
+ form > div:last-child {
1734
+ margin-top: var(--formant-space-6);
1735
+ }
1736
+
1737
+ /* ==========================================================================
1738
+ 41. Date/Time Input Styling
1739
+ ========================================================================== */
1740
+ input[type="date"],
1741
+ input[type="datetime-local"],
1742
+ input[type="month"],
1743
+ input[type="week"],
1744
+ input[type="time"] {
1745
+ color-scheme: dark;
1746
+ }
1747
+
1748
+ [data-theme="light"] input[type="date"],
1749
+ [data-theme="light"] input[type="datetime-local"],
1750
+ [data-theme="light"] input[type="month"],
1751
+ [data-theme="light"] input[type="week"],
1752
+ [data-theme="light"] input[type="time"] {
1753
+ color-scheme: light;
1754
+ }
1755
+
1756
+ input[type="date"]::-webkit-calendar-picker-indicator,
1757
+ input[type="datetime-local"]::-webkit-calendar-picker-indicator,
1758
+ input[type="month"]::-webkit-calendar-picker-indicator,
1759
+ input[type="week"]::-webkit-calendar-picker-indicator,
1760
+ input[type="time"]::-webkit-calendar-picker-indicator {
1761
+ filter: invert(0.7);
1762
+ cursor: pointer;
1763
+ }
1764
+
1765
+ [data-theme="light"] input[type="date"]::-webkit-calendar-picker-indicator,
1766
+ [data-theme="light"] input[type="datetime-local"]::-webkit-calendar-picker-indicator,
1767
+ [data-theme="light"] input[type="month"]::-webkit-calendar-picker-indicator,
1768
+ [data-theme="light"] input[type="week"]::-webkit-calendar-picker-indicator,
1769
+ [data-theme="light"] input[type="time"]::-webkit-calendar-picker-indicator {
1770
+ filter: none;
1771
+ }
1772
+
1773
+ /* ==========================================================================
1774
+ 42. Responsive Breakpoints
1775
+ ========================================================================== */
1776
+ @media (max-width: 900px) {
1777
+ main {
1778
+ padding: var(--formant-space-6) var(--formant-space-5);
1779
+ }
1780
+
1781
+ nav ul {
1782
+ gap: var(--formant-space-4);
1783
+ }
1784
+
1785
+ table {
1786
+ font-size: 0.875rem;
1787
+ }
1788
+
1789
+ th, td {
1790
+ padding: var(--formant-space-2) var(--formant-space-3);
1791
+ }
1792
+
1793
+ section[data-variant="hero"] {
1794
+ min-height: 60vh;
1795
+ }
1796
+
1797
+ body > footer > div {
1798
+ padding: 0 var(--formant-space-5);
1799
+ }
1800
+ }
1801
+
1802
+ @media (max-width: 600px) {
1803
+ main {
1804
+ padding: var(--formant-space-4) var(--formant-space-4);
1805
+ }
1806
+
1807
+ h1 {
1808
+ font-size: 1.75rem;
1809
+ }
1810
+
1811
+ h2 {
1812
+ font-size: 1.25rem;
1813
+ }
1814
+
1815
+ nav ul {
1816
+ gap: var(--formant-space-3);
1817
+ flex-wrap: wrap;
1818
+ }
1819
+
1820
+ table {
1821
+ display: block;
1822
+ overflow-x: auto;
1823
+ }
1824
+
1825
+ section[data-variant="hero"] {
1826
+ min-height: 50vh;
1827
+ }
1828
+
1829
+ section[data-variant="hero"] > div {
1830
+ padding: var(--formant-space-4);
1831
+ }
1832
+
1833
+ body > footer > div {
1834
+ flex-direction: column;
1835
+ align-items: flex-start;
1836
+ gap: var(--formant-space-8);
1837
+ }
1838
+
1839
+ body > footer address {
1840
+ text-align: left;
1841
+ }
1842
+
1843
+ dialog {
1844
+ max-width: 95vw;
1845
+ padding: var(--formant-space-4);
1846
+ }
1847
+ }
1848
+
1849
+ /* ==========================================================================
1850
+ 43. Print Styles
1851
+ ========================================================================== */
1852
+ @media print {
1853
+ body {
1854
+ background-color: white;
1855
+ color: black;
1856
+ }
1857
+
1858
+ nav, aside, details, dialog {
1859
+ display: none;
1860
+ }
1861
+
1862
+ a {
1863
+ color: black;
1864
+ text-decoration: underline;
1865
+ }
1866
+
1867
+ a::after {
1868
+ content: ' (' attr(href) ')';
1869
+ font-size: 0.8em;
1870
+ }
1871
+
1872
+ pre, code {
1873
+ background-color: #f5f5f5;
1874
+ border: 1px solid #ddd;
1875
+ }
1876
+ }