@formant/aesthetics 0.0.10 → 0.1.1

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,1956 @@
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
+ /* Site header - fixed navigation bar (direct child of body) */
1256
+ body > header {
1257
+ position: fixed;
1258
+ top: 0;
1259
+ left: 0;
1260
+ right: 0;
1261
+ height: 64px;
1262
+ background-color: rgba(var(--theme-neutrals-0-rgb), 0.85);
1263
+ backdrop-filter: blur(16px);
1264
+ border-bottom: 1px solid var(--formant-border-subtle);
1265
+ display: flex;
1266
+ align-items: center;
1267
+ justify-content: space-between;
1268
+ padding: 0 2rem;
1269
+ z-index: 1000;
1270
+ }
1271
+
1272
+ body > header a:first-child {
1273
+ display: flex;
1274
+ align-items: center;
1275
+ gap: 0.75rem;
1276
+ font-family: var(--font-display);
1277
+ font-size: 1.25rem;
1278
+ font-weight: 600;
1279
+ color: var(--theme-neutrals-3);
1280
+ text-decoration: none;
1281
+ letter-spacing: -0.02em;
1282
+ flex-shrink: 0;
1283
+ }
1284
+
1285
+ body > header a:first-child img {
1286
+ height: 32px;
1287
+ width: auto;
1288
+ display: block;
1289
+ }
1290
+
1291
+ body > header nav {
1292
+ flex: 1;
1293
+ margin: 0 2rem;
1294
+ border-bottom: none;
1295
+ background-color: transparent;
1296
+ backdrop-filter: none;
1297
+ }
1298
+
1299
+ body > header nav ul {
1300
+ justify-content: center;
1301
+ }
1302
+
1303
+ body > header nav a {
1304
+ font-size: 13px;
1305
+ letter-spacing: 0.06em;
1306
+ text-transform: uppercase;
1307
+ }
1308
+
1309
+ body > header input[type="search"] {
1310
+ width: 200px;
1311
+ }
1312
+
1313
+ /* Content headers - inside main, article, section (boxed styling) */
1314
+ main > header,
1315
+ article > header,
1316
+ section > header {
1317
+ background-color: var(--theme-neutrals-1);
1318
+ border: 1px solid var(--formant-border-subtle);
1319
+ padding: var(--formant-space-6) var(--formant-space-8);
1320
+ margin-bottom: var(--formant-space-12);
1321
+ border-bottom-left-radius: var(--formant-radius-md);
1322
+ border-bottom-right-radius: var(--formant-radius-md);
1323
+ }
1324
+
1325
+ /* Site footer (direct child of body) */
1326
+ body > footer {
1327
+ margin-top: var(--formant-space-12);
1328
+ padding-top: var(--formant-space-8);
1329
+ border-top: 1px solid var(--formant-border-subtle);
1330
+ font-size: 0.875rem;
1331
+ color: var(--formant-text-muted);
1332
+ }
1333
+
1334
+ /* Content footers - inside main, article, section (boxed styling) */
1335
+ main > footer,
1336
+ article > footer,
1337
+ section > footer {
1338
+ background-color: var(--theme-neutrals-1);
1339
+ border: 1px solid var(--formant-border-subtle);
1340
+ padding: var(--formant-space-6) var(--formant-space-8);
1341
+ margin-top: var(--formant-space-12);
1342
+ border-top-left-radius: var(--formant-radius-md);
1343
+ border-top-right-radius: var(--formant-radius-md);
1344
+ font-size: 0.875rem;
1345
+ color: var(--formant-text-muted);
1346
+ }
1347
+
1348
+ article {
1349
+ margin-bottom: var(--formant-space-12);
1350
+ }
1351
+
1352
+ section {
1353
+ margin-bottom: var(--formant-space-10);
1354
+ }
1355
+
1356
+ aside {
1357
+ background-color: var(--formant-bg-secondary);
1358
+ border: 1px solid var(--formant-border-subtle);
1359
+ border-radius: var(--formant-radius-md);
1360
+ padding: var(--formant-space-4);
1361
+ margin-bottom: var(--formant-space-4);
1362
+ font-size: 0.9375rem;
1363
+ }
1364
+
1365
+ /* ==========================================================================
1366
+ 27. Address & Time
1367
+ ========================================================================== */
1368
+ address {
1369
+ font-style: normal;
1370
+ font-family: var(--font-monospace);
1371
+ font-size: 0.875rem;
1372
+ line-height: var(--formant-leading-normal);
1373
+ color: var(--formant-text-secondary);
1374
+ margin-bottom: var(--formant-space-4);
1375
+ }
1376
+
1377
+ time {
1378
+ font-family: var(--font-monospace);
1379
+ font-size: 0.875rem;
1380
+ color: var(--theme-atmospheric-accents-1);
1381
+ }
1382
+
1383
+ /* ==========================================================================
1384
+ 28. Definition & Variables (for technical content)
1385
+ ========================================================================== */
1386
+ var {
1387
+ font-family: var(--font-monospace);
1388
+ font-style: italic;
1389
+ color: var(--theme-functional-accents-1);
1390
+ }
1391
+
1392
+ dfn {
1393
+ font-style: italic;
1394
+ border-bottom: 1px dashed var(--formant-border-strong);
1395
+ cursor: help;
1396
+ }
1397
+
1398
+ /* ==========================================================================
1399
+ 29. Data Attributes for Eyebrow Pattern
1400
+ ========================================================================== */
1401
+ [data-eyebrow] {
1402
+ font-family: var(--font-monospace);
1403
+ font-size: 0.625rem;
1404
+ letter-spacing: 0.2em;
1405
+ text-transform: uppercase;
1406
+ color: var(--theme-functional-accents-0);
1407
+ display: flex;
1408
+ align-items: center;
1409
+ gap: var(--formant-space-3);
1410
+ margin-bottom: var(--formant-space-3);
1411
+ }
1412
+
1413
+ [data-eyebrow]::before {
1414
+ content: '';
1415
+ display: block;
1416
+ width: 24px;
1417
+ height: 1px;
1418
+ background-color: var(--theme-functional-accents-0);
1419
+ }
1420
+
1421
+ /* ==========================================================================
1422
+ 30. Status Tags via Data Attributes
1423
+ ========================================================================== */
1424
+ [data-tag] {
1425
+ font-family: var(--font-monospace);
1426
+ font-size: 0.6875rem;
1427
+ letter-spacing: var(--formant-tracking-mono);
1428
+ text-transform: uppercase;
1429
+ padding: var(--formant-space-1) var(--formant-space-3);
1430
+ border-radius: var(--formant-radius-sm);
1431
+ display: inline-flex;
1432
+ align-items: center;
1433
+ }
1434
+
1435
+ [data-tag="resolved"],
1436
+ [data-tag="verified"] {
1437
+ background-color: rgba(var(--theme-atmospheric-accents-1-rgb), 0.3);
1438
+ color: var(--theme-atmospheric-accents-2);
1439
+ border: 1px solid rgba(var(--theme-atmospheric-accents-1-rgb), 0.4);
1440
+ }
1441
+
1442
+ [data-tag="investigating"] {
1443
+ background-color: rgba(var(--theme-atmospheric-accents-0-rgb), 0.4);
1444
+ color: var(--theme-atmospheric-accents-2);
1445
+ }
1446
+
1447
+ [data-tag="warning"] {
1448
+ background-color: rgba(var(--theme-functional-accents-0-rgb), 0.1);
1449
+ color: var(--theme-functional-accents-0);
1450
+ }
1451
+
1452
+ [data-tag="ai-active"] {
1453
+ background-color: rgba(var(--theme-functional-accents-1-rgb), 0.1);
1454
+ color: var(--theme-functional-accents-1);
1455
+ }
1456
+
1457
+ /* ==========================================================================
1458
+ 31. Alert Boxes via Data Attributes
1459
+ ========================================================================== */
1460
+ [data-alert] {
1461
+ padding: var(--formant-space-4);
1462
+ border-radius: var(--formant-radius-md);
1463
+ margin-bottom: var(--formant-space-4);
1464
+ font-size: 0.9375rem;
1465
+ display: flex;
1466
+ align-items: flex-start;
1467
+ gap: var(--formant-space-3);
1468
+ }
1469
+
1470
+ [data-alert]::before {
1471
+ content: '';
1472
+ width: 6px;
1473
+ height: 6px;
1474
+ border-radius: var(--formant-radius-full);
1475
+ flex-shrink: 0;
1476
+ margin-top: 0.5em;
1477
+ }
1478
+
1479
+ [data-alert="info"] {
1480
+ background-color: rgba(var(--theme-atmospheric-accents-0-rgb), 0.3);
1481
+ color: var(--theme-atmospheric-accents-2);
1482
+ }
1483
+
1484
+ [data-alert="info"]::before {
1485
+ background-color: var(--theme-atmospheric-accents-2);
1486
+ }
1487
+
1488
+ [data-alert="warning"] {
1489
+ background-color: rgba(var(--theme-functional-accents-0-rgb), 0.08);
1490
+ color: var(--theme-functional-accents-0);
1491
+ }
1492
+
1493
+ [data-alert="warning"]::before {
1494
+ background-color: var(--theme-functional-accents-0);
1495
+ }
1496
+
1497
+ [data-alert="ai"] {
1498
+ background-color: rgba(var(--theme-functional-accents-1-rgb), 0.08);
1499
+ color: var(--theme-functional-accents-1);
1500
+ }
1501
+
1502
+ [data-alert="ai"]::before {
1503
+ background-color: var(--theme-functional-accents-1);
1504
+ }
1505
+
1506
+ /* ==========================================================================
1507
+ 32. Scrollbar Styling
1508
+ ========================================================================== */
1509
+ ::-webkit-scrollbar {
1510
+ width: 8px;
1511
+ height: 8px;
1512
+ }
1513
+
1514
+ ::-webkit-scrollbar-track {
1515
+ background: var(--theme-neutrals-0);
1516
+ }
1517
+
1518
+ ::-webkit-scrollbar-thumb {
1519
+ background: var(--theme-atmospheric-accents-1);
1520
+ border-radius: var(--formant-radius-md);
1521
+ }
1522
+
1523
+ ::-webkit-scrollbar-thumb:hover {
1524
+ background: var(--theme-atmospheric-accents-2);
1525
+ }
1526
+
1527
+ /* ==========================================================================
1528
+ 33. Selection Styling
1529
+ ========================================================================== */
1530
+ ::selection {
1531
+ background-color: rgba(var(--theme-atmospheric-accents-2-rgb), 0.3);
1532
+ color: var(--theme-neutrals-3);
1533
+ }
1534
+
1535
+ /* ==========================================================================
1536
+ 34. Focus Visible (Global)
1537
+ ========================================================================== */
1538
+ :focus-visible {
1539
+ outline: none;
1540
+ }
1541
+
1542
+ /* ==========================================================================
1543
+ 35. Section Variants - Hero
1544
+ ========================================================================== */
1545
+ section[data-variant="hero"] {
1546
+ position: relative;
1547
+ width: 100%;
1548
+ min-height: 80vh;
1549
+ display: flex;
1550
+ flex-direction: column;
1551
+ justify-content: center;
1552
+ align-items: center;
1553
+ text-align: center;
1554
+ overflow: hidden;
1555
+ /* Set --hero-bg-image: url('your-image.jpg') to add background */
1556
+ }
1557
+
1558
+ section[data-variant="hero"]::before {
1559
+ content: '';
1560
+ position: absolute;
1561
+ top: 0;
1562
+ left: 0;
1563
+ right: 0;
1564
+ bottom: 0;
1565
+ background-color: var(--theme-neutrals-0);
1566
+ background-size: cover;
1567
+ background-position: center;
1568
+ background-repeat: no-repeat;
1569
+ filter: blur(8px) brightness(0.6);
1570
+ transform: scale(1.1);
1571
+ z-index: 0;
1572
+ }
1573
+
1574
+ section[data-variant="hero"][style*="hero-bg-image"]::before {
1575
+ background-image: var(--hero-bg-image);
1576
+ }
1577
+
1578
+ section[data-variant="hero"]::after {
1579
+ content: '';
1580
+ position: absolute;
1581
+ left: 0;
1582
+ right: 0;
1583
+ bottom: 0;
1584
+ height: 40%;
1585
+ background: linear-gradient(to top, var(--theme-neutrals-1) 0%, transparent 100%);
1586
+ z-index: 1;
1587
+ pointer-events: none;
1588
+ }
1589
+
1590
+ section[data-variant="hero"] > * {
1591
+ position: relative;
1592
+ z-index: 2;
1593
+ }
1594
+
1595
+ section[data-variant="hero"] > div {
1596
+ max-width: 800px;
1597
+ padding: var(--formant-space-8);
1598
+ }
1599
+
1600
+ section[data-variant="hero"] h1 {
1601
+ font-weight: 300;
1602
+ line-height: 1.0;
1603
+ letter-spacing: -0.02em;
1604
+ color: var(--theme-neutrals-3);
1605
+ text-shadow: 0 2px 20px rgba(0, 0, 0, 0.5);
1606
+ margin-bottom: var(--formant-space-6);
1607
+ }
1608
+
1609
+ section[data-variant="hero"] h2 {
1610
+ font-weight: 500;
1611
+ line-height: 1.15;
1612
+ letter-spacing: -0.02em;
1613
+ color: var(--theme-neutrals-3);
1614
+ text-shadow: 0 2px 20px rgba(0, 0, 0, 0.5);
1615
+ margin-bottom: var(--formant-space-5);
1616
+ }
1617
+
1618
+ section[data-variant="hero"] p {
1619
+ max-width: 600px;
1620
+ margin-left: auto;
1621
+ margin-right: auto;
1622
+ color: var(--theme-neutrals-2);
1623
+ font-size: 1.0625rem;
1624
+ }
1625
+
1626
+ section[data-variant="hero"]::before {
1627
+ content: '';
1628
+ position: absolute;
1629
+ top: 0;
1630
+ left: 0;
1631
+ right: 0;
1632
+ bottom: 0;
1633
+ background-image: inherit;
1634
+ background-size: cover;
1635
+ background-position: center;
1636
+ background-repeat: no-repeat;
1637
+ filter: blur(8px) brightness(0.6);
1638
+ transform: scale(1.1);
1639
+ z-index: 0;
1640
+ }
1641
+
1642
+ section[data-variant="hero"]::after {
1643
+ content: '';
1644
+ position: absolute;
1645
+ left: 0;
1646
+ right: 0;
1647
+ bottom: 0;
1648
+ height: 40%;
1649
+ background: linear-gradient(to top, var(--theme-neutrals-1) 0%, transparent 100%);
1650
+ z-index: 1;
1651
+ pointer-events: none;
1652
+ }
1653
+
1654
+ section[data-variant="hero"] > * {
1655
+ position: relative;
1656
+ z-index: 2;
1657
+ }
1658
+
1659
+ /* ==========================================================================
1660
+ 36. Data Variant - Lead Paragraph
1661
+ ========================================================================== */
1662
+ p[data-variant="lead"] {
1663
+ font-size: 1.0625rem;
1664
+ line-height: 1.75;
1665
+ max-width: 600px;
1666
+ color: var(--formant-text-secondary);
1667
+ }
1668
+
1669
+ /* ==========================================================================
1670
+ 37. Data Variant - Icon Buttons (square, no text)
1671
+ ========================================================================== */
1672
+ button[data-variant="icon"] {
1673
+ width: 40px;
1674
+ height: 40px;
1675
+ padding: 0;
1676
+ flex-shrink: 0;
1677
+ vertical-align: middle;
1678
+ }
1679
+
1680
+ /* ==========================================================================
1681
+ 38. Section Variant - Chat Component
1682
+ ========================================================================== */
1683
+ section[data-variant="chat"] {
1684
+ border: 1px solid var(--formant-border-subtle);
1685
+ border-radius: 4px;
1686
+ overflow: hidden;
1687
+ background-color: var(--theme-neutrals-0);
1688
+ margin-top: var(--formant-space-8);
1689
+ }
1690
+
1691
+ section[data-variant="chat"] > header {
1692
+ display: flex;
1693
+ align-items: center;
1694
+ justify-content: space-between;
1695
+ padding: 0.75rem 1.5rem;
1696
+ background-color: var(--formant-bg-secondary);
1697
+ border-bottom: 1px solid var(--formant-border-subtle);
1698
+ margin-bottom: 0;
1699
+ }
1700
+
1701
+ section[data-variant="chat"] > header h3 {
1702
+ font-size: 0.875rem;
1703
+ font-weight: 500;
1704
+ color: var(--theme-neutrals-3);
1705
+ margin: 0;
1706
+ }
1707
+
1708
+ section[data-variant="chat"] > section {
1709
+ height: 300px;
1710
+ overflow-y: auto;
1711
+ padding: 1.5rem;
1712
+ background-color: var(--theme-neutrals-0);
1713
+ margin-bottom: 0;
1714
+ }
1715
+
1716
+ section[data-variant="chat"] > footer {
1717
+ border-top: 1px solid var(--formant-border-subtle);
1718
+ padding: 1rem 1.5rem;
1719
+ background-color: var(--formant-bg-secondary);
1720
+ margin-top: 0;
1721
+ }
1722
+
1723
+ section[data-variant="chat"] > footer form {
1724
+ display: flex;
1725
+ gap: 0.5rem;
1726
+ align-items: flex-end;
1727
+ }
1728
+
1729
+ section[data-variant="chat"] > footer p {
1730
+ font-family: var(--font-monospace);
1731
+ font-size: 0.625rem;
1732
+ letter-spacing: 0.1em;
1733
+ text-transform: uppercase;
1734
+ color: var(--theme-neutrals-2);
1735
+ text-align: center;
1736
+ margin-top: 0.75rem;
1737
+ margin-bottom: 0;
1738
+ width: 100%;
1739
+ }
1740
+
1741
+ /* Chat avatar */
1742
+ [data-variant="avatar"] {
1743
+ width: 32px;
1744
+ height: 32px;
1745
+ border-radius: 3px;
1746
+ display: flex;
1747
+ align-items: center;
1748
+ justify-content: center;
1749
+ flex-shrink: 0;
1750
+ }
1751
+
1752
+ [data-variant="avatar-lg"] {
1753
+ width: 64px;
1754
+ height: 64px;
1755
+ border-radius: 3px;
1756
+ display: flex;
1757
+ align-items: center;
1758
+ justify-content: center;
1759
+ }
1760
+
1761
+ /* ==========================================================================
1762
+ 39. Footer - Full Width with Inner Container
1763
+ ========================================================================== */
1764
+ body > footer {
1765
+ padding: 5rem 0;
1766
+ margin-top: 0;
1767
+ }
1768
+
1769
+ body > footer > div {
1770
+ max-width: 1200px;
1771
+ margin: 0 auto;
1772
+ padding: 0 2.5rem;
1773
+ display: flex;
1774
+ justify-content: space-between;
1775
+ align-items: flex-end;
1776
+ }
1777
+
1778
+ body > footer address {
1779
+ font-family: var(--font-monospace);
1780
+ font-size: 0.6875rem;
1781
+ color: var(--theme-neutrals-2);
1782
+ line-height: 2;
1783
+ text-align: right;
1784
+ font-style: normal;
1785
+ }
1786
+
1787
+ body > footer address p {
1788
+ margin: 0;
1789
+ }
1790
+
1791
+ /* ==========================================================================
1792
+ 40. Form Element Spacing (without fieldset)
1793
+ ========================================================================== */
1794
+ form > label {
1795
+ margin-top: var(--formant-space-4);
1796
+ }
1797
+
1798
+ form > label:first-child {
1799
+ margin-top: 0;
1800
+ }
1801
+
1802
+ form > label + input,
1803
+ form > label + textarea,
1804
+ form > label + select {
1805
+ margin-bottom: var(--formant-space-4);
1806
+ }
1807
+
1808
+ form > div + div {
1809
+ margin-top: var(--formant-space-4);
1810
+ }
1811
+
1812
+ form > button,
1813
+ form > div:last-child {
1814
+ margin-top: var(--formant-space-6);
1815
+ }
1816
+
1817
+ /* ==========================================================================
1818
+ 41. Date/Time Input Styling
1819
+ ========================================================================== */
1820
+ input[type="date"],
1821
+ input[type="datetime-local"],
1822
+ input[type="month"],
1823
+ input[type="week"],
1824
+ input[type="time"] {
1825
+ color-scheme: dark;
1826
+ }
1827
+
1828
+ [data-theme="light"] input[type="date"],
1829
+ [data-theme="light"] input[type="datetime-local"],
1830
+ [data-theme="light"] input[type="month"],
1831
+ [data-theme="light"] input[type="week"],
1832
+ [data-theme="light"] input[type="time"] {
1833
+ color-scheme: light;
1834
+ }
1835
+
1836
+ input[type="date"]::-webkit-calendar-picker-indicator,
1837
+ input[type="datetime-local"]::-webkit-calendar-picker-indicator,
1838
+ input[type="month"]::-webkit-calendar-picker-indicator,
1839
+ input[type="week"]::-webkit-calendar-picker-indicator,
1840
+ input[type="time"]::-webkit-calendar-picker-indicator {
1841
+ filter: invert(0.7);
1842
+ cursor: pointer;
1843
+ }
1844
+
1845
+ [data-theme="light"] input[type="date"]::-webkit-calendar-picker-indicator,
1846
+ [data-theme="light"] input[type="datetime-local"]::-webkit-calendar-picker-indicator,
1847
+ [data-theme="light"] input[type="month"]::-webkit-calendar-picker-indicator,
1848
+ [data-theme="light"] input[type="week"]::-webkit-calendar-picker-indicator,
1849
+ [data-theme="light"] input[type="time"]::-webkit-calendar-picker-indicator {
1850
+ filter: none;
1851
+ }
1852
+
1853
+ /* ==========================================================================
1854
+ 42. Responsive Breakpoints
1855
+ ========================================================================== */
1856
+ @media (max-width: 900px) {
1857
+ main {
1858
+ padding: var(--formant-space-6) var(--formant-space-5);
1859
+ }
1860
+
1861
+ nav ul {
1862
+ gap: var(--formant-space-4);
1863
+ }
1864
+
1865
+ table {
1866
+ font-size: 0.875rem;
1867
+ }
1868
+
1869
+ th, td {
1870
+ padding: var(--formant-space-2) var(--formant-space-3);
1871
+ }
1872
+
1873
+ section[data-variant="hero"] {
1874
+ min-height: 60vh;
1875
+ }
1876
+
1877
+ body > footer > div {
1878
+ padding: 0 var(--formant-space-5);
1879
+ }
1880
+ }
1881
+
1882
+ @media (max-width: 600px) {
1883
+ main {
1884
+ padding: var(--formant-space-4) var(--formant-space-4);
1885
+ }
1886
+
1887
+ h1 {
1888
+ font-size: 1.75rem;
1889
+ }
1890
+
1891
+ h2 {
1892
+ font-size: 1.25rem;
1893
+ }
1894
+
1895
+ nav ul {
1896
+ gap: var(--formant-space-3);
1897
+ flex-wrap: wrap;
1898
+ }
1899
+
1900
+ table {
1901
+ display: block;
1902
+ overflow-x: auto;
1903
+ }
1904
+
1905
+ section[data-variant="hero"] {
1906
+ min-height: 50vh;
1907
+ }
1908
+
1909
+ section[data-variant="hero"] > div {
1910
+ padding: var(--formant-space-4);
1911
+ }
1912
+
1913
+ body > footer > div {
1914
+ flex-direction: column;
1915
+ align-items: flex-start;
1916
+ gap: var(--formant-space-8);
1917
+ }
1918
+
1919
+ body > footer address {
1920
+ text-align: left;
1921
+ }
1922
+
1923
+ dialog {
1924
+ max-width: 95vw;
1925
+ padding: var(--formant-space-4);
1926
+ }
1927
+ }
1928
+
1929
+ /* ==========================================================================
1930
+ 43. Print Styles
1931
+ ========================================================================== */
1932
+ @media print {
1933
+ body {
1934
+ background-color: white;
1935
+ color: black;
1936
+ }
1937
+
1938
+ nav, aside, details, dialog {
1939
+ display: none;
1940
+ }
1941
+
1942
+ a {
1943
+ color: black;
1944
+ text-decoration: underline;
1945
+ }
1946
+
1947
+ a::after {
1948
+ content: ' (' attr(href) ')';
1949
+ font-size: 0.8em;
1950
+ }
1951
+
1952
+ pre, code {
1953
+ background-color: #f5f5f5;
1954
+ border: 1px solid #ddd;
1955
+ }
1956
+ }