unit.gl 0.1.13 → 0.3.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.
Files changed (51) hide show
  1. package/README.md +329 -1
  2. package/css/unit.gl.css +35819 -6
  3. package/css/unit.gl.docs.css +4156 -0
  4. package/css/unit.gl.docs.min.css +2 -0
  5. package/css/unit.gl.min.css +1 -1
  6. package/js/unit.gl.demo.js +708 -0
  7. package/js/unit.gl.demo.js.map +1 -0
  8. package/js/unit.gl.js +25 -0
  9. package/js/unit.gl.js.map +1 -1
  10. package/package.json +16 -3
  11. package/scss/classes/_docs.scss +4690 -0
  12. package/scss/classes/_index.scss +1 -0
  13. package/scss/classes/_utilities.scss +1488 -0
  14. package/scss/docs.scss +11 -0
  15. package/scss/formats.scss +27 -0
  16. package/scss/functions/_density.scss +311 -0
  17. package/scss/functions/_index.scss +3 -0
  18. package/scss/functions/_layer.scss +14 -1
  19. package/scss/functions/_ratio.scss +3 -2
  20. package/scss/functions/_scale.scss +220 -3
  21. package/scss/functions/_sequence.scss +6 -5
  22. package/scss/functions/math/_arithmetic.scss +15 -12
  23. package/scss/functions/unit/_unit_conversion.scss +59 -7
  24. package/scss/functions/unit/_unit_functions.scss +3 -3
  25. package/scss/guide.scss +22 -0
  26. package/scss/maps/_density.scss +141 -0
  27. package/scss/maps/_device.scss +13 -20
  28. package/scss/maps/_index.scss +6 -0
  29. package/scss/maps/_scale.scss +47 -4
  30. package/scss/mixins/_device.scss +1 -3
  31. package/scss/mixins/_display.scss +265 -2
  32. package/scss/mixins/_format.scss +75 -0
  33. package/scss/mixins/_guide.scss +73 -11
  34. package/scss/mixins/_index.scss +2 -1
  35. package/scss/mixins/_unit.scss +115 -6
  36. package/scss/mixins/_utilities.scss +303 -0
  37. package/scss/mixins/_view.scss +43 -12
  38. package/scss/tags/_global.scss +18 -3
  39. package/scss/tags/_unit.scss +1 -3
  40. package/scss/test.scss +17 -0
  41. package/scss/utilities.scss +20 -0
  42. package/scss/variables/_color.scss +9 -9
  43. package/scss/variables/_format.scss +80 -0
  44. package/scss/variables/_guide.scss +17 -0
  45. package/scss/variables/_index.scss +4 -0
  46. package/scss/variables/_scale.scss +434 -63
  47. package/scss/variables/_view.scss +222 -64
  48. package/ts/demo.ts +889 -0
  49. package/ts/index.d.ts +72 -0
  50. package/ts/index.ts +45 -0
  51. package/scss/mixins/_paper.scss +0 -51
@@ -0,0 +1,4690 @@
1
+ ////
2
+ ///
3
+ /// Docs / Demo Styles Module
4
+ /// ===========================================================================
5
+ ///
6
+ /// Complete styling for the documentation site using the Q unit system.
7
+ /// All sizes use the q() function for consistent, fluid sizing.
8
+ ///
9
+ /// 1Q = 0.0625rem = 1px at default browser settings.
10
+ ///
11
+ /// The fluid typography system works as follows:
12
+ /// - html font-size scales from 12px (320px viewport) to 24px (2560px viewport)
13
+ /// - All q() values and rem units scale proportionally with html font-size
14
+ /// - This means at small screens, q(16) = 12px, at large screens q(16) = 24px
15
+ ///
16
+ ////
17
+
18
+ // ============================================================================
19
+ // Use
20
+ // ============================================================================
21
+
22
+ @use "sass:map";
23
+ @use "../variables/unit" as *;
24
+ @use "../variables/scale" as *;
25
+ @use "../variables/view" as *;
26
+ @use "../mixins/unit" as *;
27
+
28
+ // ============================================================================
29
+ // CSS Custom Properties (Design Tokens)
30
+ // ============================================================================
31
+
32
+ :root {
33
+ // Colors - Light theme (default)
34
+ --swiss-black: #000000;
35
+ --swiss-white: #ffffff;
36
+ --swiss-red: #ff0000;
37
+ --swiss-gray-50: #fafafa;
38
+ --swiss-gray-100: #f5f5f5;
39
+ --swiss-gray-200: #e8e8e8;
40
+ --swiss-gray-300: #d4d4d4;
41
+ --swiss-gray-400: #a3a3a3;
42
+ --swiss-gray-500: #737373;
43
+ --swiss-gray-600: #525252;
44
+ --swiss-gray-700: #404040;
45
+ --swiss-gray-800: #262626;
46
+ --swiss-gray-900: #171717;
47
+
48
+ // Semantic colors (mapped for theming)
49
+ --color-bg: var(--swiss-white);
50
+ --color-bg-subtle: var(--swiss-gray-50);
51
+ --color-bg-muted: var(--swiss-gray-100);
52
+ --color-text: var(--swiss-black);
53
+ --color-text-muted: var(--swiss-gray-600);
54
+ --color-text-subtle: var(--swiss-gray-500);
55
+ --color-border: var(--swiss-gray-200);
56
+ --color-border-strong: var(--swiss-black);
57
+ --color-accent: var(--swiss-red);
58
+ --color-code-bg: var(--swiss-gray-900);
59
+ --color-code-text: var(--swiss-gray-300);
60
+ --color-code-comment: var(--swiss-gray-500);
61
+
62
+ // Typography
63
+ --font-sans:
64
+ "Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial,
65
+ sans-serif;
66
+ --font-mono:
67
+ "JetBrains Mono", "SF Mono", "Monaco", "Inconsolata", "Roboto Mono",
68
+ monospace;
69
+
70
+ // Grid - Using Q units (these scale with fluid html font-size)
71
+ --grid-unit: #{q(8)};
72
+ --max-width: #{q(1200)};
73
+
74
+ // Transitions
75
+ --transition-fast: 0.1s ease;
76
+ --transition-base: 0.2s ease;
77
+ --transition-slow: 0.3s ease;
78
+
79
+ // Shadows
80
+ --shadow-sm: 0 #{q(1)} #{q(2)} rgba(0, 0, 0, 0.05);
81
+ --shadow-md: 0 #{q(4)} #{q(12)} rgba(0, 0, 0, 0.1);
82
+ --shadow-lg: 0 #{q(8)} #{q(24)} rgba(0, 0, 0, 0.15);
83
+
84
+ // Density-aware properties
85
+ // These use JavaScript-injected --dpr and --dpr-inverse for runtime adjustment
86
+ // Default to 1 when JavaScript hasn't initialized
87
+ --dpr: 1;
88
+ --dpr-inverse: 1;
89
+
90
+ // Density-adjusted grid unit
91
+ // Maintains physical consistency across pixel densities
92
+ --grid-unit-density: calc(var(--grid-unit) * var(--dpr-inverse));
93
+
94
+ // Physical-to-digital multiplier (1mm = 4px at 96dpi)
95
+ --mm-to-px: 4;
96
+
97
+ // Q format breakpoint values (derived from paper sizes × 4)
98
+ --bp-us: #{map.get($breakpoints, us)}; // Q07 Portrait → 240px
99
+ --bp-ss: #{map.get($breakpoints, ss)}; // Q06 Portrait → 360px
100
+ --bp-xs: #{map.get($breakpoints, xs)}; // Q05 Portrait → 540px
101
+ --bp-sm: #{map.get($breakpoints, sm)}; // Q04 Portrait → 720px
102
+ --bp-md: #{map.get($breakpoints, md)}; // Q03 Landscape → 1440px
103
+ --bp-lg: #{map.get($breakpoints, lg)}; // Q02 Landscape → 2160px
104
+ --bp-xl: #{map.get($breakpoints, xl)}; // Q01 Landscape → 2880px
105
+ --bp-ul: #{map.get($breakpoints, ul)}; // Q00 Landscape → 4320px
106
+ }
107
+
108
+ // Dark theme
109
+ [data-theme="dark"] {
110
+ --color-bg: #0a0a0a;
111
+ --color-bg-subtle: #111111;
112
+ --color-bg-muted: #1a1a1a;
113
+ --color-text: #fafafa;
114
+ --color-text-muted: #a3a3a3;
115
+ --color-text-subtle: #737373;
116
+ --color-border: #2a2a2a;
117
+ --color-border-strong: #fafafa;
118
+ --color-accent: #ff3333;
119
+ --color-code-bg: #111111;
120
+ --color-code-text: #e5e5e5;
121
+ --color-code-comment: #6b7280;
122
+
123
+ // Invert shadows for dark mode
124
+ --shadow-sm: 0 #{q(1)} #{q(2)} rgba(0, 0, 0, 0.3);
125
+ --shadow-md: 0 #{q(4)} #{q(12)} rgba(0, 0, 0, 0.4);
126
+ --shadow-lg: 0 #{q(8)} #{q(24)} rgba(0, 0, 0, 0.5);
127
+ }
128
+
129
+ // ============================================================================
130
+ // Base Reset & Typography
131
+ // ============================================================================
132
+ // NOTE: We do NOT set html font-size here - it's set by unit.gl.css with
133
+ // fluid_type() which scales 12px → 24px across viewports. All rem/q() values
134
+ // will scale proportionally.
135
+
136
+ *,
137
+ *::before,
138
+ *::after {
139
+ box-sizing: border-box;
140
+ }
141
+
142
+ html {
143
+ // font-size is controlled by unit.gl.css fluid_type mixin
144
+ -webkit-font-smoothing: antialiased;
145
+ -moz-osx-font-smoothing: grayscale;
146
+ }
147
+
148
+ body {
149
+ font-family: var(--font-sans);
150
+ // Use Q units for font-size - this will scale with the fluid html font-size
151
+ font-size: q(16); // 1rem equivalent at base, scales with viewport
152
+ line-height: q(24); // 1.5 line-height ratio (24/16)
153
+ font-weight: 400;
154
+ color: var(--color-text);
155
+ background: var(--color-bg);
156
+ margin: 0;
157
+ padding: 0;
158
+ transition:
159
+ background-color var(--transition-base),
160
+ color var(--transition-base);
161
+
162
+ // Prevent scroll when mobile nav is open
163
+ &.nav-open {
164
+ overflow: hidden;
165
+
166
+ @media (min-width: #{q(768)}) {
167
+ overflow: auto;
168
+ }
169
+ }
170
+ }
171
+
172
+ // ============================================================================
173
+ // Accessibility Essentials
174
+ // ============================================================================
175
+
176
+ // Skip to main content link
177
+ .skip-link {
178
+ position: absolute;
179
+ top: #{q(-100)};
180
+ left: #{q(16)};
181
+ z-index: 10000;
182
+ padding: #{q(12)} #{q(24)};
183
+ background: var(--color-text);
184
+ color: var(--color-bg);
185
+ font-weight: 600;
186
+ font-size: #{q(14)};
187
+ text-decoration: none;
188
+ transition: top var(--transition-fast);
189
+
190
+ &:focus {
191
+ top: #{q(16)};
192
+ outline: #{q(2)} solid var(--color-accent);
193
+ outline-offset: #{q(2)};
194
+ }
195
+ }
196
+
197
+ // Noscript warning for JS-dependent features
198
+ .noscript-warning {
199
+ background: var(--color-accent);
200
+ color: var(--color-bg);
201
+ padding: #{q(16)} #{q(24)};
202
+ margin-bottom: #{q(24)};
203
+ font-size: #{q(14)};
204
+ line-height: #{q(20)};
205
+
206
+ strong {
207
+ font-weight: 600;
208
+ }
209
+ }
210
+
211
+ // Global focus-visible styles
212
+ *:focus-visible {
213
+ outline: #{q(2)} solid var(--color-accent);
214
+ outline-offset: #{q(2)};
215
+ }
216
+
217
+ // Remove default focus for mouse users
218
+ *:focus:not(:focus-visible) {
219
+ outline: none;
220
+ }
221
+
222
+ // Active nav item indicator
223
+ .is-active {
224
+ color: var(--color-accent) !important;
225
+ font-weight: 600;
226
+
227
+ &::before {
228
+ content: "";
229
+ position: absolute;
230
+ left: 0;
231
+ top: 50%;
232
+ transform: translateY(-50%);
233
+ width: #{q(3)};
234
+ height: #{q(16)};
235
+ background: var(--color-accent);
236
+ }
237
+ }
238
+
239
+ // ============================================================================
240
+ // Reduced Motion Support
241
+ // ============================================================================
242
+
243
+ @media (prefers-reduced-motion: reduce) {
244
+ *,
245
+ *::before,
246
+ *::after {
247
+ animation-duration: 0.01ms !important;
248
+ animation-iteration-count: 1 !important;
249
+ transition-duration: 0.01ms !important;
250
+ scroll-behavior: auto !important;
251
+ }
252
+ }
253
+
254
+ h1,
255
+ h2,
256
+ h3,
257
+ h4,
258
+ h5,
259
+ h6 {
260
+ font-weight: 600;
261
+ line-height: 1.2;
262
+ margin: 0 0 calc(var(--grid-unit) * 2);
263
+ letter-spacing: -0.02em;
264
+ color: var(--color-text);
265
+ }
266
+
267
+ h1 {
268
+ font-size: #{q(56)};
269
+ font-weight: 700;
270
+ letter-spacing: -0.03em;
271
+ margin-bottom: calc(var(--grid-unit) * 3);
272
+ }
273
+
274
+ h2 {
275
+ font-size: #{q(28)};
276
+ margin-top: calc(var(--grid-unit) * 6);
277
+ margin-bottom: calc(var(--grid-unit) * 3);
278
+ padding-bottom: calc(var(--grid-unit) * 2);
279
+ border-bottom: #{q(2)} solid var(--color-border-strong);
280
+ }
281
+
282
+ h3 {
283
+ font-size: #{q(18)};
284
+ font-weight: 500;
285
+ text-transform: uppercase;
286
+ letter-spacing: 0.05em;
287
+ color: var(--color-text-muted);
288
+ margin-top: calc(var(--grid-unit) * 4);
289
+ margin-bottom: calc(var(--grid-unit) * 2);
290
+ }
291
+
292
+ p {
293
+ margin: 0 0 calc(var(--grid-unit) * 2);
294
+ max-width: 65ch;
295
+ }
296
+
297
+ .lead {
298
+ font-size: #{q(20)};
299
+ font-weight: 300;
300
+ line-height: 1.5;
301
+ color: var(--color-text-muted);
302
+ max-width: 50ch;
303
+ }
304
+
305
+ .eyebrow {
306
+ font-size: #{q(12)};
307
+ font-weight: 600;
308
+ text-transform: uppercase;
309
+ letter-spacing: 0.1em;
310
+ color: var(--color-accent);
311
+ margin-bottom: calc(var(--grid-unit) * 1);
312
+ }
313
+
314
+ code {
315
+ font-family: var(--font-mono);
316
+ font-size: 0.875em;
317
+ background: var(--color-bg-muted);
318
+ padding: #{q(2)} #{q(6)};
319
+ }
320
+
321
+ // ============================================================================
322
+ // Layout
323
+ // ============================================================================
324
+
325
+ .container {
326
+ max-width: var(--max-width);
327
+ margin: 0 auto;
328
+ padding: 0 calc(var(--grid-unit) * 4);
329
+ }
330
+
331
+ .header {
332
+ padding: calc(var(--grid-unit) * 8) 0 calc(var(--grid-unit) * 6);
333
+ border-bottom: 1px solid var(--color-border-strong);
334
+ margin-bottom: calc(var(--grid-unit) * 6);
335
+ }
336
+
337
+ .header--hero {
338
+ padding: calc(var(--grid-unit) * 12) 0 calc(var(--grid-unit) * 8);
339
+ }
340
+
341
+ main {
342
+ padding-bottom: calc(var(--grid-unit) * 12);
343
+ }
344
+
345
+ section {
346
+ margin-bottom: calc(var(--grid-unit) * 10);
347
+ }
348
+
349
+ .layout {
350
+ display: grid;
351
+ grid-template-columns: 1fr;
352
+ gap: calc(var(--grid-unit) * 6);
353
+ }
354
+
355
+ @media (min-width: #{q(1024)}) {
356
+ .layout {
357
+ grid-template-columns: #{q(200)} 1fr;
358
+ }
359
+ }
360
+
361
+ // ============================================================================
362
+ // Links
363
+ // ============================================================================
364
+
365
+ a {
366
+ color: var(--color-text);
367
+ text-decoration: none;
368
+ border-bottom: 1px solid var(--color-border-strong);
369
+ transition:
370
+ border-color var(--transition-fast),
371
+ color var(--transition-fast);
372
+ }
373
+
374
+ a:hover {
375
+ color: var(--color-accent);
376
+ border-color: var(--color-accent);
377
+ }
378
+
379
+ // ============================================================================
380
+ // Tags & Labels
381
+ // ============================================================================
382
+
383
+ .tag {
384
+ display: inline-block;
385
+ font-size: #{q(10)};
386
+ font-weight: 600;
387
+ text-transform: uppercase;
388
+ letter-spacing: 0.08em;
389
+ background: var(--color-text);
390
+ color: var(--color-bg);
391
+ padding: #{q(4)} #{q(10)};
392
+ margin-left: calc(var(--grid-unit) * 1);
393
+ vertical-align: middle;
394
+ }
395
+
396
+ .tag--outline {
397
+ background: transparent;
398
+ color: var(--color-text);
399
+ border: 1px solid var(--color-border-strong);
400
+ }
401
+
402
+ .tag--red {
403
+ background: var(--color-accent);
404
+ }
405
+
406
+ // ============================================================================
407
+ // Buttons
408
+ // ============================================================================
409
+
410
+ button,
411
+ .btn {
412
+ display: inline-flex;
413
+ align-items: center;
414
+ justify-content: center;
415
+ gap: calc(var(--grid-unit) * 0.5);
416
+ font-family: var(--font-sans);
417
+ font-size: #{q(12)};
418
+ font-weight: 600;
419
+ text-transform: uppercase;
420
+ letter-spacing: 0.05em;
421
+ background: var(--color-bg);
422
+ color: var(--color-text);
423
+ border: 1px solid var(--color-border-strong);
424
+ padding: calc(var(--grid-unit) * 1.25) calc(var(--grid-unit) * 2.5);
425
+ cursor: pointer;
426
+ transition: all var(--transition-fast);
427
+ text-decoration: none;
428
+ box-shadow: var(--shadow-sm);
429
+ }
430
+
431
+ button:hover,
432
+ .btn:hover {
433
+ background: var(--color-text);
434
+ color: var(--color-bg);
435
+ border-color: var(--color-text);
436
+ box-shadow: var(--shadow-md);
437
+ transform: translateY(-1px);
438
+ }
439
+
440
+ button:active,
441
+ .btn:active {
442
+ transform: translateY(0);
443
+ box-shadow: var(--shadow-sm);
444
+ }
445
+
446
+ button.active,
447
+ .btn.active {
448
+ background: var(--color-text);
449
+ color: var(--color-bg);
450
+ }
451
+
452
+ .btn--primary {
453
+ background: var(--color-text);
454
+ color: var(--color-bg);
455
+ border-color: var(--color-text);
456
+ }
457
+
458
+ .btn--primary:hover {
459
+ background: var(--color-accent);
460
+ border-color: var(--color-accent);
461
+ color: var(--color-bg);
462
+ }
463
+
464
+ .btn--secondary {
465
+ background: transparent;
466
+ box-shadow: none;
467
+ }
468
+
469
+ .btn--secondary:hover {
470
+ background: var(--color-bg-subtle);
471
+ box-shadow: none;
472
+ transform: none;
473
+ }
474
+
475
+ .btn--ghost {
476
+ background: transparent;
477
+ border-color: transparent;
478
+ box-shadow: none;
479
+ }
480
+
481
+ .btn--ghost:hover {
482
+ background: var(--color-bg-subtle);
483
+ border-color: var(--color-border);
484
+ transform: none;
485
+ }
486
+
487
+ // ============================================================================
488
+ // Hero Actions
489
+ // ============================================================================
490
+
491
+ .hero-actions {
492
+ display: flex;
493
+ gap: calc(var(--grid-unit) * 2);
494
+ margin-top: calc(var(--grid-unit) * 4);
495
+ flex-wrap: wrap;
496
+ }
497
+
498
+ // ============================================================================
499
+ // Feature Grid & Cards
500
+ // ============================================================================
501
+
502
+ .feature-grid {
503
+ display: grid;
504
+ grid-template-columns: repeat(auto-fit, minmax(#{q(280)}, 1fr));
505
+ gap: calc(var(--grid-unit) * 3);
506
+ }
507
+
508
+ .feature-card {
509
+ background: var(--color-bg);
510
+ padding: calc(var(--grid-unit) * 3);
511
+ border: 1px solid var(--color-border);
512
+ transition: all var(--transition-base);
513
+ position: relative;
514
+ }
515
+
516
+ .feature-card:hover {
517
+ border-color: var(--color-border-strong);
518
+ box-shadow: var(--shadow-md);
519
+ transform: translateY(-2px);
520
+ }
521
+
522
+ .feature-card::before {
523
+ content: "";
524
+ position: absolute;
525
+ top: 0;
526
+ left: 0;
527
+ right: 0;
528
+ height: #{q(3)};
529
+ background: var(--color-accent);
530
+ opacity: 0;
531
+ transition: opacity var(--transition-base);
532
+ }
533
+
534
+ .feature-card:hover::before {
535
+ opacity: 1;
536
+ }
537
+
538
+ .feature-card__icon {
539
+ font-size: #{q(32)};
540
+ font-weight: 700;
541
+ margin-bottom: calc(var(--grid-unit) * 2);
542
+ color: var(--color-text);
543
+ display: flex;
544
+ align-items: center;
545
+ justify-content: center;
546
+ width: #{q(48)};
547
+ height: #{q(48)};
548
+ background: var(--color-bg-subtle);
549
+ }
550
+
551
+ .feature-card__title {
552
+ font-size: 1rem;
553
+ font-weight: 600;
554
+ margin: 0 0 calc(var(--grid-unit) * 1);
555
+ color: var(--color-text);
556
+ }
557
+
558
+ .feature-card__desc {
559
+ font-size: #{q(14)};
560
+ color: var(--color-text-muted);
561
+ margin: 0;
562
+ line-height: 1.6;
563
+ }
564
+
565
+ // ============================================================================
566
+ // Documentation Sections
567
+ // ============================================================================
568
+
569
+ .doc-sections {
570
+ display: grid;
571
+ grid-template-columns: repeat(auto-fit, minmax(#{q(200)}, 1fr));
572
+ gap: calc(var(--grid-unit) * 4);
573
+ }
574
+
575
+ .doc-section h3 {
576
+ font-size: #{q(12)};
577
+ font-weight: 600;
578
+ text-transform: uppercase;
579
+ letter-spacing: 0.1em;
580
+ color: var(--color-text-muted);
581
+ margin-bottom: calc(var(--grid-unit) * 2);
582
+ }
583
+
584
+ .doc-section ul {
585
+ display: flex;
586
+ flex-direction: column;
587
+ gap: calc(var(--grid-unit) * 1);
588
+ }
589
+
590
+ .doc-section li {
591
+ padding: 0;
592
+ border: none;
593
+ }
594
+
595
+ .doc-section a {
596
+ font-size: #{q(15)};
597
+ font-weight: 500;
598
+ color: var(--color-text);
599
+ border-bottom: none;
600
+ }
601
+
602
+ .doc-section a:hover {
603
+ color: var(--color-accent);
604
+ border-bottom: 1px solid var(--color-accent);
605
+ }
606
+
607
+ // ============================================================================
608
+ // Grid Toggle Controls
609
+ // ============================================================================
610
+
611
+ .grid-controls {
612
+ display: flex;
613
+ align-items: center;
614
+ gap: calc(var(--grid-unit) * 0.5);
615
+ background: transparent;
616
+ padding: 0;
617
+ border: none;
618
+ }
619
+
620
+ .grid-controls button {
621
+ font-size: #{q(11)};
622
+ font-weight: 500;
623
+ text-transform: uppercase;
624
+ letter-spacing: 0.05em;
625
+ color: var(--color-text-muted);
626
+ padding: calc(var(--grid-unit) * 0.5) calc(var(--grid-unit) * 1);
627
+ border: 1px solid var(--color-border);
628
+ background: var(--color-bg);
629
+ outline: none;
630
+ cursor: pointer;
631
+ transition: all var(--transition-fast);
632
+ }
633
+
634
+ .grid-controls button:hover,
635
+ .grid-controls button:focus {
636
+ color: var(--color-text);
637
+ border-color: var(--color-border-strong);
638
+ outline: none;
639
+ }
640
+
641
+ .grid-controls button.active {
642
+ color: var(--color-bg);
643
+ background: var(--color-text);
644
+ border-color: var(--color-text);
645
+ }
646
+
647
+ .grid-status {
648
+ display: none;
649
+ }
650
+ // ============================================================================
651
+ // Lists
652
+ // ============================================================================
653
+
654
+ ul {
655
+ list-style: none;
656
+ padding: 0;
657
+ margin: 0;
658
+ }
659
+
660
+ li {
661
+ padding: calc(var(--grid-unit) * 2) 0;
662
+ border-bottom: 1px solid var(--color-border);
663
+ }
664
+
665
+ li:last-child {
666
+ border-bottom: none;
667
+ }
668
+
669
+ .list-item {
670
+ display: flex;
671
+ align-items: center;
672
+ justify-content: space-between;
673
+ padding: calc(var(--grid-unit) * 1);
674
+ margin: calc(var(--grid-unit) * -1);
675
+ transition: background var(--transition-fast);
676
+ }
677
+
678
+ .list-item:hover {
679
+ background: var(--color-bg-subtle);
680
+ }
681
+
682
+ .list-item__title {
683
+ font-weight: 500;
684
+ color: var(--color-text);
685
+ }
686
+
687
+ .list-item__meta {
688
+ font-size: #{q(12)};
689
+ color: var(--color-text-muted);
690
+ }
691
+
692
+ .list-item__arrow {
693
+ font-family: var(--font-mono);
694
+ font-size: #{q(12)};
695
+ color: var(--color-text-subtle);
696
+ transition: transform var(--transition-fast);
697
+ }
698
+
699
+ .list-item:hover .list-item__arrow {
700
+ transform: translateX(#{q(4)});
701
+ color: var(--color-accent);
702
+ }
703
+
704
+ // ============================================================================
705
+ // Cards & Boxes
706
+ // ============================================================================
707
+
708
+ .card {
709
+ background: var(--color-bg);
710
+ border: 1px solid var(--color-border-strong);
711
+ padding: calc(var(--grid-unit) * 3);
712
+ transition:
713
+ box-shadow var(--transition-base),
714
+ transform var(--transition-base);
715
+ }
716
+
717
+ .card:hover {
718
+ box-shadow: var(--shadow-md);
719
+ transform: translateY(-1px);
720
+ }
721
+
722
+ .card--filled {
723
+ background: var(--color-bg-muted);
724
+ border: none;
725
+ }
726
+
727
+ // ============================================================================
728
+ // Demo Components
729
+ // ============================================================================
730
+
731
+ .demo-grid {
732
+ display: grid;
733
+ grid-template-columns: repeat(auto-fill, minmax(#{q(200)}, 1fr));
734
+ gap: calc(var(--grid-unit) * 3);
735
+ }
736
+
737
+ .demo-box {
738
+ position: relative;
739
+ aspect-ratio: 4/3;
740
+ background: var(--color-bg-muted);
741
+ border: 1px solid var(--color-border);
742
+ display: flex;
743
+ align-items: center;
744
+ justify-content: center;
745
+ overflow: hidden;
746
+ transition: border-color var(--transition-fast);
747
+ }
748
+
749
+ .demo-box:hover {
750
+ border-color: var(--color-border-strong);
751
+ }
752
+
753
+ .demo-box::after {
754
+ content: attr(data-label);
755
+ position: absolute;
756
+ bottom: calc(var(--grid-unit) * 1);
757
+ left: calc(var(--grid-unit) * 1);
758
+ font-size: #{q(10)};
759
+ font-weight: 600;
760
+ text-transform: uppercase;
761
+ letter-spacing: 0.05em;
762
+ color: var(--color-text-muted);
763
+ }
764
+
765
+ .demo-row {
766
+ display: flex;
767
+ flex-wrap: wrap;
768
+ gap: calc(var(--grid-unit) * 3);
769
+ align-items: flex-end;
770
+ margin-bottom: calc(var(--grid-unit) * 4);
771
+ }
772
+
773
+ .demo-item {
774
+ display: flex;
775
+ flex-direction: column;
776
+ align-items: center;
777
+ gap: calc(var(--grid-unit) * 1);
778
+ }
779
+
780
+ .demo-item__label {
781
+ font-family: var(--font-mono);
782
+ font-size: #{q(10)};
783
+ color: var(--color-text-muted);
784
+ }
785
+
786
+ // ============================================================================
787
+ // Code Blocks
788
+ // ============================================================================
789
+
790
+ .code-block {
791
+ background: var(--color-code-bg);
792
+ color: var(--color-code-text);
793
+ padding: calc(var(--grid-unit) * 3);
794
+ font-family: var(--font-mono);
795
+ font-size: #{q(13)};
796
+ line-height: 1.7;
797
+ overflow-x: auto;
798
+ margin: calc(var(--grid-unit) * 3) 0;
799
+ border: 1px solid var(--color-border);
800
+ position: relative;
801
+ white-space: pre;
802
+ tab-size: 4;
803
+ }
804
+
805
+ .code-block::before {
806
+ content: "";
807
+ position: absolute;
808
+ top: 0;
809
+ left: 0;
810
+ right: 0;
811
+ height: #{q(32)};
812
+ background: linear-gradient(
813
+ to right,
814
+ var(--color-accent) 20%,
815
+ transparent 20%
816
+ );
817
+ background-size: #{q(8)} #{q(8)};
818
+ opacity: 0.1;
819
+ }
820
+
821
+ .code-block pre {
822
+ margin: 0;
823
+ white-space: pre;
824
+ }
825
+
826
+ .code-block code {
827
+ font-family: var(--font-mono);
828
+ white-space: pre;
829
+ }
830
+
831
+ .code-block .keyword {
832
+ color: #c084fc;
833
+ }
834
+
835
+ .code-block .class {
836
+ color: #7dd3fc;
837
+ }
838
+
839
+ .code-block .value {
840
+ color: #fda4af;
841
+ }
842
+
843
+ .code-block .string {
844
+ color: #86efac;
845
+ }
846
+
847
+ .code-block .comment {
848
+ color: var(--color-code-comment);
849
+ font-style: italic;
850
+ }
851
+
852
+ .code-block .tag-hl {
853
+ color: #86efac;
854
+ }
855
+
856
+ .code-block .function {
857
+ color: #fbbf24;
858
+ }
859
+
860
+ // ============================================================================
861
+ // Scale Demo
862
+ // ============================================================================
863
+
864
+ .scale-demo {
865
+ display: flex;
866
+ flex-direction: column;
867
+ gap: calc(var(--grid-unit) * 1);
868
+ }
869
+
870
+ .scale-line {
871
+ display: flex;
872
+ align-items: center;
873
+ gap: calc(var(--grid-unit) * 2);
874
+ padding: calc(var(--grid-unit) * 1.5) 0;
875
+ border-bottom: 1px solid var(--color-border);
876
+ }
877
+
878
+ .scale-line__label {
879
+ font-family: var(--font-mono);
880
+ font-size: #{q(11)};
881
+ color: var(--color-text-muted);
882
+ min-width: #{q(80)};
883
+ }
884
+
885
+ .scale-line__value {
886
+ font-family: var(--font-mono);
887
+ font-size: #{q(11)};
888
+ color: var(--color-text-subtle);
889
+ min-width: #{q(60)};
890
+ }
891
+
892
+ .scale-line__bar {
893
+ height: q(8);
894
+ background: var(--color-text);
895
+ }
896
+
897
+ .scale-line__text {
898
+ flex: 1;
899
+ }
900
+
901
+ // ============================================================================
902
+ // Number Grid
903
+ // ============================================================================
904
+
905
+ .number-grid {
906
+ display: grid;
907
+ grid-template-columns: repeat(auto-fill, minmax(#{q(80)}, 1fr));
908
+ gap: 1px;
909
+ background: var(--color-border);
910
+ border: 1px solid var(--color-border);
911
+ overflow: hidden;
912
+ }
913
+
914
+ .number-cell {
915
+ background: var(--color-bg);
916
+ padding: calc(var(--grid-unit) * 2);
917
+ text-align: center;
918
+ transition: background var(--transition-fast);
919
+ }
920
+
921
+ .number-cell:hover {
922
+ background: var(--color-bg-subtle);
923
+ }
924
+
925
+ .number-cell__value {
926
+ font-size: #{q(24)};
927
+ font-weight: 600;
928
+ line-height: 1;
929
+ margin-bottom: calc(var(--grid-unit) * 0.5);
930
+ color: var(--color-text);
931
+ }
932
+
933
+ .number-cell__label {
934
+ font-family: var(--font-mono);
935
+ font-size: #{q(10)};
936
+ color: var(--color-text-muted);
937
+ }
938
+
939
+ // ============================================================================
940
+ // Navigation
941
+ // ============================================================================
942
+
943
+ .nav-wrapper {
944
+ position: sticky;
945
+ top: 0;
946
+ z-index: 100;
947
+ background: var(--color-bg);
948
+ backdrop-filter: blur(#{q(8)});
949
+ transition: background-color var(--transition-base);
950
+ }
951
+
952
+ .nav {
953
+ background: transparent;
954
+ border-bottom: 1px solid var(--color-border);
955
+ padding: calc(var(--grid-unit) * 1.5) calc(var(--grid-unit) * 4);
956
+ max-width: calc(var(--max-width) + var(--grid-unit) * 8);
957
+ margin: 0 auto;
958
+ }
959
+
960
+ .nav__inner {
961
+ max-width: var(--max-width);
962
+ margin: 0 auto;
963
+ display: flex;
964
+ align-items: center;
965
+ justify-content: space-between;
966
+ gap: calc(var(--grid-unit) * 3);
967
+ }
968
+
969
+ .nav__right {
970
+ display: flex;
971
+ align-items: center;
972
+ justify-content: flex-end;
973
+ gap: calc(var(--grid-unit) * 1.5);
974
+ flex-wrap: wrap;
975
+ }
976
+
977
+ .nav__logo {
978
+ display: flex;
979
+ align-items: center;
980
+ gap: calc(var(--grid-unit) * 1);
981
+ font-weight: 700;
982
+ font-size: 1rem;
983
+ letter-spacing: -0.02em;
984
+ color: var(--color-text);
985
+ border: none;
986
+ outline: none;
987
+ text-decoration: none;
988
+ }
989
+
990
+ .nav__logo-text {
991
+ transition: color var(--transition-fast);
992
+ }
993
+
994
+ .nav__version {
995
+ font-size: #{q(9)};
996
+ font-weight: 500;
997
+ padding: #{q(2)} #{q(6)};
998
+ background: var(--color-bg-muted);
999
+ color: var(--color-text-muted);
1000
+ }
1001
+
1002
+ .nav__logo:hover .nav__logo-text,
1003
+ .nav__logo:focus .nav__logo-text {
1004
+ color: var(--color-accent);
1005
+ }
1006
+
1007
+ .nav__logo:hover,
1008
+ .nav__logo:focus {
1009
+ border: none;
1010
+ outline: none;
1011
+ }
1012
+
1013
+ // GitHub link
1014
+ .nav__github {
1015
+ display: flex;
1016
+ align-items: center;
1017
+ justify-content: center;
1018
+ width: #{q(32)};
1019
+ height: #{q(32)};
1020
+ color: var(--color-text-muted);
1021
+ border: none;
1022
+ transition:
1023
+ color var(--transition-fast),
1024
+ background-color var(--transition-fast);
1025
+ }
1026
+
1027
+ .nav__github:hover {
1028
+ color: var(--color-text);
1029
+ background: var(--color-bg-muted);
1030
+ border: none;
1031
+ }
1032
+
1033
+ .nav__links {
1034
+ display: flex;
1035
+ gap: calc(var(--grid-unit) * 0.5);
1036
+ flex-wrap: wrap;
1037
+ }
1038
+
1039
+ .nav__link {
1040
+ font-size: #{q(11)};
1041
+ font-weight: 500;
1042
+ text-transform: uppercase;
1043
+ letter-spacing: 0.05em;
1044
+ color: var(--color-text-muted);
1045
+ padding: calc(var(--grid-unit) * 0.5) calc(var(--grid-unit) * 1);
1046
+ border: none;
1047
+ border-radius: 0;
1048
+ outline: none;
1049
+ transition: all var(--transition-fast);
1050
+ }
1051
+
1052
+ .nav__link:hover,
1053
+ .nav__link:focus {
1054
+ color: var(--color-text);
1055
+ border: none;
1056
+ outline: none;
1057
+ }
1058
+
1059
+ .nav__link--active {
1060
+ color: var(--color-bg);
1061
+ background: var(--color-text);
1062
+ }
1063
+
1064
+ .nav__link--active:hover {
1065
+ color: var(--color-bg);
1066
+ }
1067
+
1068
+ // Theme Toggle
1069
+ .theme-toggle {
1070
+ display: flex;
1071
+ align-items: center;
1072
+ justify-content: center;
1073
+ width: #{q(32)};
1074
+ height: #{q(32)};
1075
+ padding: 0;
1076
+ background: transparent;
1077
+ border: 1px solid var(--color-border);
1078
+ color: var(--color-text-muted);
1079
+ cursor: pointer;
1080
+ transition: all var(--transition-fast);
1081
+ }
1082
+
1083
+ .theme-toggle:hover {
1084
+ color: var(--color-text);
1085
+ border-color: var(--color-text-muted);
1086
+ background: var(--color-bg-muted);
1087
+ }
1088
+
1089
+ .theme-icon--dark {
1090
+ display: none;
1091
+ }
1092
+
1093
+ [data-theme="dark"] .theme-icon--light {
1094
+ display: none;
1095
+ }
1096
+
1097
+ [data-theme="dark"] .theme-icon--dark {
1098
+ display: block;
1099
+ }
1100
+
1101
+ // Dropdown Menu
1102
+ .nav__dropdown {
1103
+ position: relative;
1104
+ }
1105
+
1106
+ .nav__dropdown-toggle {
1107
+ display: flex;
1108
+ align-items: center;
1109
+ gap: calc(var(--grid-unit) * 0.75);
1110
+ font-size: #{q(11)};
1111
+ font-weight: 500;
1112
+ text-transform: uppercase;
1113
+ letter-spacing: 0.05em;
1114
+ color: var(--color-text-muted);
1115
+ padding: calc(var(--grid-unit) * 0.75) calc(var(--grid-unit) * 1.25);
1116
+ border: 1px solid var(--color-border);
1117
+ background: var(--color-bg);
1118
+ cursor: pointer;
1119
+ outline: none;
1120
+ transition: all var(--transition-fast);
1121
+ }
1122
+
1123
+ .nav__dropdown-toggle:hover,
1124
+ .nav__dropdown-toggle:focus {
1125
+ color: var(--color-text);
1126
+ border-color: var(--color-text-muted);
1127
+ outline: none;
1128
+ }
1129
+
1130
+ .nav__dropdown-toggle svg {
1131
+ transition: transform var(--transition-fast);
1132
+ }
1133
+
1134
+ .nav__dropdown.open .nav__dropdown-toggle svg {
1135
+ transform: rotate(180deg);
1136
+ }
1137
+
1138
+ .nav__dropdown-menu {
1139
+ position: absolute;
1140
+ top: 100%;
1141
+ right: 0;
1142
+ min-width: #{q(200)};
1143
+ background: var(--color-bg);
1144
+ border: 1px solid var(--color-border);
1145
+ box-shadow: var(--shadow-lg);
1146
+ opacity: 0;
1147
+ visibility: hidden;
1148
+ transform: translateY(#{q(-8)});
1149
+ transition: all var(--transition-base);
1150
+ z-index: 1000;
1151
+ padding: calc(var(--grid-unit) * 1) 0;
1152
+ }
1153
+
1154
+ .nav__dropdown.open .nav__dropdown-menu {
1155
+ opacity: 1;
1156
+ visibility: visible;
1157
+ transform: translateY(#{q(8)});
1158
+ }
1159
+
1160
+ .nav__dropdown-section {
1161
+ padding: calc(var(--grid-unit) * 1) 0;
1162
+
1163
+ &:not(:last-child) {
1164
+ border-bottom: 1px solid var(--color-border);
1165
+ }
1166
+ }
1167
+
1168
+ .nav__dropdown-label {
1169
+ display: block;
1170
+ font-size: #{q(10)};
1171
+ font-weight: 600;
1172
+ text-transform: uppercase;
1173
+ letter-spacing: 0.08em;
1174
+ color: var(--color-text-subtle);
1175
+ padding: calc(var(--grid-unit) * 0.5) calc(var(--grid-unit) * 2);
1176
+ margin-bottom: calc(var(--grid-unit) * 0.5);
1177
+ }
1178
+
1179
+ .nav__dropdown-menu a {
1180
+ display: block;
1181
+ font-size: #{q(13)};
1182
+ font-weight: 400;
1183
+ color: var(--color-text-muted);
1184
+ padding: calc(var(--grid-unit) * 0.75) calc(var(--grid-unit) * 2);
1185
+ border: none;
1186
+ outline: none;
1187
+ transition: all var(--transition-fast);
1188
+ }
1189
+
1190
+ .nav__dropdown-menu a:last-child {
1191
+ border-bottom: none;
1192
+ }
1193
+
1194
+ .nav__dropdown-menu a:hover,
1195
+ .nav__dropdown-menu a:focus {
1196
+ color: var(--color-text);
1197
+ background: var(--color-bg-muted);
1198
+ border: none;
1199
+ outline: none;
1200
+ }
1201
+
1202
+ // Active nav link styling
1203
+ .nav__dropdown-menu a.is-active {
1204
+ position: relative;
1205
+ color: var(--color-accent);
1206
+ font-weight: 500;
1207
+ }
1208
+
1209
+ // ============================================================================
1210
+ // Mobile Navigation
1211
+ // ============================================================================
1212
+
1213
+ // Hamburger menu toggle button
1214
+ .nav__mobile-toggle {
1215
+ display: flex;
1216
+ align-items: center;
1217
+ justify-content: center;
1218
+ width: #{q(40)};
1219
+ height: #{q(40)};
1220
+ padding: 0;
1221
+ background: transparent;
1222
+ border: 1px solid var(--color-border);
1223
+ color: var(--color-text);
1224
+ cursor: pointer;
1225
+ z-index: 1001;
1226
+
1227
+ .icon-close {
1228
+ display: none;
1229
+ }
1230
+
1231
+ &[aria-expanded="true"] {
1232
+ .icon-menu {
1233
+ display: none;
1234
+ }
1235
+ .icon-close {
1236
+ display: block;
1237
+ }
1238
+ }
1239
+
1240
+ // Hide on desktop
1241
+ @media (min-width: #{q(768)}) {
1242
+ display: none;
1243
+ }
1244
+ }
1245
+
1246
+ // Mobile nav menu
1247
+ .nav__right {
1248
+ display: flex;
1249
+ align-items: center;
1250
+ justify-content: flex-end;
1251
+ gap: calc(var(--grid-unit) * 1.5);
1252
+ flex-wrap: wrap;
1253
+
1254
+ // Mobile: full-screen overlay
1255
+ @media (max-width: #{q(767)}) {
1256
+ position: fixed;
1257
+ top: 0;
1258
+ left: 0;
1259
+ right: 0;
1260
+ bottom: 0;
1261
+ flex-direction: column;
1262
+ justify-content: flex-start;
1263
+ align-items: stretch;
1264
+ padding: #{q(80)} #{q(24)} #{q(24)};
1265
+ background: var(--color-bg);
1266
+ z-index: 1000;
1267
+ opacity: 0;
1268
+ visibility: hidden;
1269
+ transform: translateY(#{q(-16)});
1270
+ transition: all var(--transition-base);
1271
+ overflow-y: auto;
1272
+
1273
+ &.is-open {
1274
+ opacity: 1;
1275
+ visibility: visible;
1276
+ transform: translateY(0);
1277
+ }
1278
+
1279
+ // Stack items vertically on mobile
1280
+ .grid-controls {
1281
+ flex-direction: column;
1282
+ width: 100%;
1283
+ border-bottom: 1px solid var(--color-border);
1284
+ padding-bottom: #{q(16)};
1285
+ margin-bottom: #{q(16)};
1286
+
1287
+ button {
1288
+ width: 100%;
1289
+ justify-content: flex-start;
1290
+ padding: #{q(12)} #{q(16)};
1291
+ }
1292
+ }
1293
+
1294
+ .theme-toggle {
1295
+ width: 100%;
1296
+ justify-content: flex-start;
1297
+ padding: #{q(12)} #{q(16)};
1298
+ margin-bottom: #{q(16)};
1299
+ }
1300
+
1301
+ .nav__dropdown {
1302
+ width: 100%;
1303
+ }
1304
+
1305
+ .nav__dropdown-toggle {
1306
+ width: 100%;
1307
+ justify-content: space-between;
1308
+ }
1309
+
1310
+ .nav__dropdown-menu {
1311
+ position: static;
1312
+ opacity: 1;
1313
+ visibility: visible;
1314
+ transform: none;
1315
+ box-shadow: none;
1316
+ border: none;
1317
+ border-top: 1px solid var(--color-border);
1318
+ display: none;
1319
+ }
1320
+
1321
+ .nav__dropdown.open .nav__dropdown-menu {
1322
+ display: block;
1323
+ }
1324
+
1325
+ .nav__github {
1326
+ width: 100%;
1327
+ justify-content: flex-start;
1328
+ padding: #{q(12)} #{q(16)};
1329
+ margin-top: auto;
1330
+ border-top: 1px solid var(--color-border);
1331
+ padding-top: #{q(16)};
1332
+ }
1333
+ }
1334
+ }
1335
+
1336
+ // Nav wrapper mobile state
1337
+ .nav-wrapper.nav-open {
1338
+ @media (max-width: #{q(767)}) {
1339
+ position: fixed;
1340
+ top: 0;
1341
+ left: 0;
1342
+ right: 0;
1343
+ bottom: 0;
1344
+ z-index: 999;
1345
+ }
1346
+ }
1347
+
1348
+ // ============================================================================
1349
+ // Sidebar Layout
1350
+ // ============================================================================
1351
+
1352
+ .sidebar {
1353
+ position: sticky;
1354
+ top: calc(var(--grid-unit) * 8);
1355
+ align-self: start;
1356
+ }
1357
+
1358
+ .sidebar__section {
1359
+ margin-bottom: calc(var(--grid-unit) * 3);
1360
+ }
1361
+
1362
+ .sidebar__title {
1363
+ font-size: #{q(10)};
1364
+ font-weight: 600;
1365
+ text-transform: uppercase;
1366
+ letter-spacing: 0.1em;
1367
+ color: var(--color-text-subtle);
1368
+ margin-bottom: calc(var(--grid-unit) * 1);
1369
+ }
1370
+
1371
+ .sidebar__list {
1372
+ list-style: none;
1373
+ padding: 0;
1374
+ margin: 0;
1375
+ }
1376
+
1377
+ .sidebar__list li {
1378
+ padding: calc(var(--grid-unit) * 0.5) 0;
1379
+ border-bottom: none;
1380
+ }
1381
+
1382
+ .sidebar__link {
1383
+ font-size: #{q(13)};
1384
+ color: var(--color-text-muted);
1385
+ border: none;
1386
+ display: block;
1387
+ padding: calc(var(--grid-unit) * 0.5) 0;
1388
+ transition: color var(--transition-fast);
1389
+ }
1390
+
1391
+ .sidebar__link:hover {
1392
+ color: var(--color-text);
1393
+ border: none;
1394
+ }
1395
+
1396
+ .sidebar__link--active {
1397
+ color: var(--color-text);
1398
+ font-weight: 600;
1399
+ }
1400
+
1401
+ // ============================================================================
1402
+ // Tables
1403
+ // ============================================================================
1404
+
1405
+ // Table scroll wrapper for mobile responsiveness
1406
+ .table-scroll {
1407
+ width: 100%;
1408
+ overflow-x: auto;
1409
+ -webkit-overflow-scrolling: touch;
1410
+ margin: calc(var(--grid-unit) * 3) 0;
1411
+
1412
+ // Fade indicator for scrollable content
1413
+ &::after {
1414
+ content: "";
1415
+ position: absolute;
1416
+ right: 0;
1417
+ top: 0;
1418
+ bottom: 0;
1419
+ width: #{q(24)};
1420
+ background: linear-gradient(to right, transparent, var(--color-bg));
1421
+ pointer-events: none;
1422
+ opacity: 0;
1423
+ transition: opacity var(--transition-fast);
1424
+ }
1425
+
1426
+ @media (max-width: #{q(768)}) {
1427
+ position: relative;
1428
+
1429
+ &.is-scrollable::after {
1430
+ opacity: 1;
1431
+ }
1432
+ }
1433
+
1434
+ .table {
1435
+ margin: 0;
1436
+ }
1437
+ }
1438
+
1439
+ .table {
1440
+ width: 100%;
1441
+ border-collapse: collapse;
1442
+ margin: calc(var(--grid-unit) * 3) 0;
1443
+ font-size: #{q(14)};
1444
+ overflow: hidden;
1445
+ border: 1px solid var(--color-border);
1446
+ }
1447
+
1448
+ .table th,
1449
+ .table td {
1450
+ text-align: left;
1451
+ padding: calc(var(--grid-unit) * 1.5) calc(var(--grid-unit) * 2);
1452
+ border-bottom: 1px solid var(--color-border);
1453
+ white-space: nowrap;
1454
+
1455
+ @media (min-width: #{q(768)}) {
1456
+ white-space: normal;
1457
+ }
1458
+ }
1459
+
1460
+ .table th {
1461
+ font-size: #{q(11)};
1462
+ font-weight: 600;
1463
+ text-transform: uppercase;
1464
+ letter-spacing: 0.05em;
1465
+ color: var(--color-text-muted);
1466
+ background: var(--color-bg-muted);
1467
+ }
1468
+
1469
+ // Table caption for accessibility
1470
+ .table caption {
1471
+ font-size: #{q(12)};
1472
+ font-weight: 500;
1473
+ color: var(--color-text-muted);
1474
+ text-align: left;
1475
+ padding: #{q(8)} #{q(16)};
1476
+ background: var(--color-bg-subtle);
1477
+ border: 1px solid var(--color-border);
1478
+ border-bottom: none;
1479
+ caption-side: top;
1480
+ }
1481
+
1482
+ .table tr:last-child td {
1483
+ border-bottom: none;
1484
+ }
1485
+
1486
+ .table tr:hover td {
1487
+ background: var(--color-bg-subtle);
1488
+ }
1489
+
1490
+ .table td:first-child {
1491
+ font-weight: 500;
1492
+ }
1493
+
1494
+ .table code {
1495
+ font-size: #{q(12)};
1496
+ background: var(--color-bg-muted);
1497
+ padding: #{q(2)} #{q(6)};
1498
+ }
1499
+
1500
+ // ============================================================================
1501
+ // Alert Boxes
1502
+ // ============================================================================
1503
+
1504
+ .alert {
1505
+ padding: calc(var(--grid-unit) * 2) calc(var(--grid-unit) * 2.5);
1506
+ margin: calc(var(--grid-unit) * 3) 0;
1507
+ border-left: #{q(4)} solid var(--color-border-strong);
1508
+ background: var(--color-bg-muted);
1509
+ }
1510
+
1511
+ .alert--tip {
1512
+ border-left-color: #22c55e;
1513
+ background: rgba(34, 197, 94, 0.08);
1514
+ }
1515
+
1516
+ .alert--warning {
1517
+ border-left-color: #f59e0b;
1518
+ background: rgba(245, 158, 11, 0.08);
1519
+ }
1520
+
1521
+ .alert--danger {
1522
+ border-left-color: var(--color-accent);
1523
+ background: rgba(255, 0, 0, 0.08);
1524
+ }
1525
+
1526
+ .alert__title {
1527
+ font-size: #{q(12)};
1528
+ font-weight: 600;
1529
+ text-transform: uppercase;
1530
+ letter-spacing: 0.05em;
1531
+ margin-bottom: calc(var(--grid-unit) * 0.5);
1532
+ display: flex;
1533
+ align-items: center;
1534
+ gap: calc(var(--grid-unit) * 0.5);
1535
+ }
1536
+
1537
+ .alert p {
1538
+ margin: 0;
1539
+ font-size: #{q(14)};
1540
+ line-height: 1.6;
1541
+ }
1542
+
1543
+ // ============================================================================
1544
+ // API Signature
1545
+ // ============================================================================
1546
+
1547
+ .api-signature {
1548
+ background: var(--color-code-bg);
1549
+ color: #7dd3fc;
1550
+ padding: calc(var(--grid-unit) * 2);
1551
+ font-family: var(--font-mono);
1552
+ font-size: #{q(14)};
1553
+ margin: calc(var(--grid-unit) * 2) 0;
1554
+ }
1555
+
1556
+ .api-params {
1557
+ margin: calc(var(--grid-unit) * 2) 0;
1558
+ }
1559
+
1560
+ .api-param {
1561
+ display: grid;
1562
+ grid-template-columns: #{q(140)} #{q(100)} 1fr;
1563
+ gap: calc(var(--grid-unit) * 2);
1564
+ padding: calc(var(--grid-unit) * 1.5) 0;
1565
+ border-bottom: 1px solid var(--color-border);
1566
+ font-size: #{q(14)};
1567
+ }
1568
+
1569
+ .api-param__name {
1570
+ font-family: var(--font-mono);
1571
+ font-weight: 500;
1572
+ }
1573
+
1574
+ .api-param__type {
1575
+ font-family: var(--font-mono);
1576
+ font-size: #{q(12)};
1577
+ color: var(--color-text-muted);
1578
+ }
1579
+
1580
+ .api-param__desc {
1581
+ color: var(--color-text-muted);
1582
+ }
1583
+
1584
+ // ============================================================================
1585
+ // Footer
1586
+ // ============================================================================
1587
+
1588
+ .footer {
1589
+ border-top: 1px solid var(--color-border-strong);
1590
+ padding: calc(var(--grid-unit) * 5) 0;
1591
+ margin-top: calc(var(--grid-unit) * 10);
1592
+ background: var(--color-bg-subtle);
1593
+ }
1594
+
1595
+ .footer__content {
1596
+ display: flex;
1597
+ justify-content: space-between;
1598
+ align-items: flex-start;
1599
+ gap: calc(var(--grid-unit) * 4);
1600
+ flex-wrap: wrap;
1601
+ }
1602
+
1603
+ .footer__left {
1604
+ display: flex;
1605
+ flex-direction: column;
1606
+ gap: calc(var(--grid-unit) * 0.5);
1607
+ }
1608
+
1609
+ .footer__brand {
1610
+ font-size: #{q(16)};
1611
+ font-weight: 700;
1612
+ color: var(--color-text);
1613
+ letter-spacing: -0.02em;
1614
+ }
1615
+
1616
+ .footer__tagline {
1617
+ font-size: #{q(12)};
1618
+ color: var(--color-text-subtle);
1619
+ }
1620
+
1621
+ .footer__right {
1622
+ display: flex;
1623
+ flex-direction: column;
1624
+ align-items: flex-end;
1625
+ gap: calc(var(--grid-unit) * 1);
1626
+ }
1627
+
1628
+ .footer__links {
1629
+ display: flex;
1630
+ gap: calc(var(--grid-unit) * 2);
1631
+ }
1632
+
1633
+ .footer__link {
1634
+ font-size: #{q(12)};
1635
+ font-weight: 500;
1636
+ color: var(--color-text-muted);
1637
+ border: none;
1638
+ transition: color var(--transition-fast);
1639
+ }
1640
+
1641
+ .footer__link:hover {
1642
+ color: var(--color-accent);
1643
+ border: none;
1644
+ }
1645
+
1646
+ .footer__copyright {
1647
+ font-size: #{q(11)};
1648
+ color: var(--color-text-subtle);
1649
+ }
1650
+
1651
+ // ============================================================================
1652
+ // Responsive
1653
+ // ============================================================================
1654
+
1655
+ @media (max-width: #{q(768)}) {
1656
+ h1 {
1657
+ font-size: #{q(40)};
1658
+ }
1659
+
1660
+ h2 {
1661
+ font-size: #{q(24)};
1662
+ }
1663
+
1664
+ .header {
1665
+ padding: calc(var(--grid-unit) * 4) 0;
1666
+ }
1667
+
1668
+ .nav__links {
1669
+ display: none;
1670
+ }
1671
+
1672
+ .grid-controls span {
1673
+ display: none;
1674
+ }
1675
+
1676
+ .sidebar {
1677
+ display: none;
1678
+ }
1679
+
1680
+ .api-param {
1681
+ grid-template-columns: 1fr;
1682
+ gap: calc(var(--grid-unit) * 0.5);
1683
+ }
1684
+
1685
+ .footer__content {
1686
+ flex-direction: column;
1687
+ align-items: flex-start;
1688
+ }
1689
+
1690
+ .footer__right {
1691
+ align-items: flex-start;
1692
+ }
1693
+ }
1694
+
1695
+ // ============================================================================
1696
+ // Form Controls (Docs only)
1697
+ // ============================================================================
1698
+
1699
+ input[type="range"] {
1700
+ --slider-track-h: #{q(3)};
1701
+ --slider-thumb: #{q(14)};
1702
+
1703
+ width: 100%;
1704
+ background: transparent;
1705
+ appearance: none;
1706
+ -webkit-appearance: none;
1707
+ margin: 0;
1708
+ padding: 0;
1709
+ }
1710
+
1711
+ input[type="range"]:focus {
1712
+ outline: none;
1713
+ }
1714
+
1715
+ /* WebKit (Chromium/Safari) */
1716
+ input[type="range"]::-webkit-slider-runnable-track {
1717
+ height: var(--slider-track-h);
1718
+ background: var(--color-text);
1719
+ }
1720
+
1721
+ input[type="range"]::-webkit-slider-thumb {
1722
+ -webkit-appearance: none;
1723
+ appearance: none;
1724
+ width: var(--slider-thumb);
1725
+ height: var(--slider-thumb);
1726
+ background: var(--color-text);
1727
+ border: 1px solid var(--color-text);
1728
+ margin-top: calc((var(--slider-track-h) - var(--slider-thumb)) / 2);
1729
+ }
1730
+
1731
+ input[type="range"]:focus-visible::-webkit-slider-thumb {
1732
+ outline: q(2) solid var(--color-accent);
1733
+ outline-offset: q(2);
1734
+ }
1735
+
1736
+ /* Firefox */
1737
+ input[type="range"]::-moz-range-track {
1738
+ height: var(--slider-track-h);
1739
+ background: var(--color-text);
1740
+ }
1741
+
1742
+ input[type="range"]::-moz-range-thumb {
1743
+ width: var(--slider-thumb);
1744
+ height: var(--slider-thumb);
1745
+ background: var(--color-text);
1746
+ border: 1px solid var(--color-text);
1747
+ }
1748
+
1749
+ input[type="range"]:focus-visible::-moz-range-thumb {
1750
+ outline: q(2) solid var(--color-accent);
1751
+ outline-offset: q(2);
1752
+ }
1753
+
1754
+ /* ─────────────────────────────────────────────────────────────────
1755
+ Page Formats Demo
1756
+ ───────────────────────────────────────────────────────────────── */
1757
+
1758
+ .page--paper {
1759
+ .paper-muted {
1760
+ color: var(--color-text-muted);
1761
+ font-size: 0.9375rem;
1762
+ margin-top: calc(var(--grid-unit) * -1);
1763
+ }
1764
+
1765
+ .paper-controls {
1766
+ display: grid;
1767
+ grid-template-columns: 1fr;
1768
+ gap: calc(var(--grid-unit) * 2);
1769
+ margin: calc(var(--grid-unit) * 2) 0;
1770
+ padding: calc(var(--grid-unit) * 2);
1771
+ border: 1px solid var(--color-border);
1772
+ background: var(--color-bg-subtle);
1773
+ }
1774
+
1775
+ @media (min-width: 720px) {
1776
+ .paper-controls {
1777
+ grid-template-columns: 1fr auto;
1778
+ align-items: end;
1779
+ }
1780
+ }
1781
+
1782
+ .paper-field {
1783
+ display: grid;
1784
+ gap: calc(var(--grid-unit) * 1);
1785
+ }
1786
+
1787
+ .paper-field__label {
1788
+ font-size: 0.6875rem;
1789
+ font-weight: 600;
1790
+ text-transform: uppercase;
1791
+ letter-spacing: 0.05em;
1792
+ color: var(--color-text-muted);
1793
+ }
1794
+
1795
+ .paper-select {
1796
+ width: 100%;
1797
+ padding: calc(var(--grid-unit) * 1) calc(var(--grid-unit) * 1.5);
1798
+ border: 1px solid var(--color-border-strong);
1799
+ background: var(--color-bg);
1800
+ color: var(--color-text);
1801
+ font-family: var(--font-mono);
1802
+ font-size: 0.875rem;
1803
+ }
1804
+
1805
+ .paper-orient {
1806
+ display: inline-flex;
1807
+ gap: calc(var(--grid-unit) * 1);
1808
+ flex-wrap: wrap;
1809
+ justify-content: flex-start;
1810
+ }
1811
+
1812
+ .paper-orient__btn {
1813
+ padding: calc(var(--grid-unit) * 0.75) calc(var(--grid-unit) * 1.25);
1814
+ font-size: 0.625rem;
1815
+ outline: none;
1816
+ }
1817
+
1818
+ .paper-orient__btn:focus {
1819
+ outline: none;
1820
+ }
1821
+
1822
+ .paper-preview-wrap {
1823
+ display: flex;
1824
+ flex-direction: column;
1825
+ align-items: center;
1826
+ gap: calc(var(--grid-unit) * 2);
1827
+ padding: calc(var(--grid-unit) * 3);
1828
+ border: 1px solid var(--color-border);
1829
+ background: var(--color-bg-subtle);
1830
+ margin: calc(var(--grid-unit) * 2) 0;
1831
+ min-height: q(450);
1832
+ }
1833
+
1834
+ .paper-preview-container {
1835
+ display: grid;
1836
+ place-items: center;
1837
+ width: 100%;
1838
+ height: q(420);
1839
+ }
1840
+
1841
+ .paper-preview {
1842
+ border: 1px solid var(--color-border-strong);
1843
+ background:
1844
+ linear-gradient(90deg, rgba(0, 0, 0, 0.06) 1px, transparent 1px),
1845
+ linear-gradient(rgba(0, 0, 0, 0.06) 1px, transparent 1px);
1846
+ background-size: q(20) q(20);
1847
+ display: flex;
1848
+ flex-direction: column;
1849
+ justify-content: flex-end;
1850
+ transition:
1851
+ width 0.3s ease,
1852
+ height 0.3s ease;
1853
+ box-shadow: var(--shadow-lg);
1854
+ }
1855
+
1856
+ .paper-preview__meta {
1857
+ display: grid;
1858
+ gap: q(4);
1859
+ padding: calc(var(--grid-unit) * 1.5);
1860
+ background: rgba(255, 255, 255, 0.95);
1861
+ border-top: 1px solid var(--color-border);
1862
+ }
1863
+
1864
+ .paper-preview__title {
1865
+ font-weight: 700;
1866
+ letter-spacing: -0.02em;
1867
+ text-transform: uppercase;
1868
+ }
1869
+
1870
+ .paper-preview__dims {
1871
+ font-family: var(--font-mono);
1872
+ font-size: 0.8125rem;
1873
+ color: var(--color-text-muted);
1874
+ }
1875
+
1876
+ .paper-scale-indicator {
1877
+ font-family: var(--font-mono);
1878
+ font-size: 0.6875rem;
1879
+ color: var(--color-text-muted);
1880
+ text-transform: uppercase;
1881
+ letter-spacing: 0.05em;
1882
+ }
1883
+
1884
+ /* Comparison Grid */
1885
+ .comparison-grid {
1886
+ display: grid;
1887
+ grid-template-columns: repeat(3, 1fr);
1888
+ gap: calc(var(--grid-unit) * 3);
1889
+ margin: calc(var(--grid-unit) * 3) 0;
1890
+ }
1891
+
1892
+ @media (max-width: 900px) {
1893
+ .comparison-grid {
1894
+ grid-template-columns: 1fr;
1895
+ }
1896
+ }
1897
+
1898
+ .comparison-column {
1899
+ padding: calc(var(--grid-unit) * 2);
1900
+ border: 1px solid var(--color-border);
1901
+ background: var(--color-bg);
1902
+ }
1903
+
1904
+ .comparison-heading {
1905
+ font-size: 0.875rem;
1906
+ font-weight: 700;
1907
+ text-transform: uppercase;
1908
+ letter-spacing: 0.05em;
1909
+ margin: 0 0 calc(var(--grid-unit) * 0.5) 0;
1910
+ }
1911
+
1912
+ .comparison-desc {
1913
+ font-size: 0.75rem;
1914
+ color: var(--color-text-muted);
1915
+ margin: 0 0 calc(var(--grid-unit) * 2) 0;
1916
+ line-height: 1.5;
1917
+ }
1918
+
1919
+ .comparison-stack {
1920
+ position: relative;
1921
+ height: q(300);
1922
+ display: flex;
1923
+ align-items: flex-end;
1924
+ justify-content: center;
1925
+ padding: calc(var(--grid-unit) * 2);
1926
+ background: var(--color-bg-subtle);
1927
+ }
1928
+
1929
+ .comparison-sheet {
1930
+ position: absolute;
1931
+ bottom: calc(var(--grid-unit) * 2);
1932
+ left: 50%;
1933
+ transform: translateX(-50%);
1934
+ display: flex;
1935
+ align-items: flex-end;
1936
+ justify-content: center;
1937
+ padding: calc(var(--grid-unit) * 1);
1938
+ border: 1px solid;
1939
+ transition: all 0.2s ease;
1940
+ cursor: pointer;
1941
+ }
1942
+
1943
+ .comparison-sheet:hover {
1944
+ z-index: 10 !important;
1945
+ box-shadow: var(--shadow-md);
1946
+ }
1947
+
1948
+ .comparison-sheet--q {
1949
+ background: rgba(220, 38, 38, 0.08);
1950
+ border-color: var(--color-accent);
1951
+ }
1952
+
1953
+ .comparison-sheet--a {
1954
+ background: rgba(37, 99, 235, 0.08);
1955
+ border-color: #2563eb;
1956
+ }
1957
+ .comparison-sheet--us {
1958
+ background: rgba(22, 163, 74, 0.08);
1959
+ border-color: #16a34a;
1960
+ }
1961
+
1962
+ .comparison-sheet__label {
1963
+ font-family: var(--font-mono);
1964
+ font-size: 0.625rem;
1965
+ font-weight: 600;
1966
+ text-transform: uppercase;
1967
+ letter-spacing: 0.05em;
1968
+ white-space: nowrap;
1969
+ }
1970
+
1971
+ .comparison-sheet--q .comparison-sheet__label {
1972
+ color: var(--color-accent);
1973
+ }
1974
+
1975
+ .comparison-sheet--a .comparison-sheet__label {
1976
+ color: #2563eb;
1977
+ }
1978
+
1979
+ .comparison-sheet--us .comparison-sheet__label {
1980
+ color: #16a34a;
1981
+ }
1982
+
1983
+ .paper-table {
1984
+ width: 100%;
1985
+ border-collapse: collapse;
1986
+ margin-top: calc(var(--grid-unit) * 2);
1987
+ }
1988
+
1989
+ .paper-table th,
1990
+ .paper-table td {
1991
+ border-bottom: 1px solid var(--color-border);
1992
+ padding: calc(var(--grid-unit) * 1.5) calc(var(--grid-unit) * 1);
1993
+ text-align: left;
1994
+ font-size: 0.875rem;
1995
+ }
1996
+
1997
+ .paper-table th {
1998
+ font-size: 0.6875rem;
1999
+ text-transform: uppercase;
2000
+ letter-spacing: 0.08em;
2001
+ color: var(--color-text-muted);
2002
+ font-weight: 700;
2003
+ }
2004
+
2005
+ .paper-usage {
2006
+ color: var(--color-text-muted);
2007
+ font-family: var(--font-mono);
2008
+ font-size: 0.8125rem;
2009
+ }
2010
+ }
2011
+
2012
+ .guide--layer {
2013
+ display: none;
2014
+ position: fixed;
2015
+ inset: 0;
2016
+ width: 100%;
2017
+ height: 100%;
2018
+ min-height: 100vh;
2019
+ pointer-events: none;
2020
+ }
2021
+
2022
+ .guide--layer.active {
2023
+ display: block !important;
2024
+ }
2025
+
2026
+ /* Ensure baseline is always above graph */
2027
+ .guide--layer[data-grid="graph"] {
2028
+ z-index: 9998;
2029
+ }
2030
+
2031
+ .guide--layer[data-grid="baseline"] {
2032
+ z-index: 9999;
2033
+ }
2034
+
2035
+ /* Graph Grid */
2036
+ .guide--layer.guide--graph_centered {
2037
+ background-image:
2038
+ linear-gradient(to right, rgba(255, 0, 0, 0.1) 1px, transparent 1px),
2039
+ linear-gradient(to bottom, rgba(255, 0, 0, 0.1) 1px, transparent 1px);
2040
+ background-size: q(8) q(8);
2041
+ }
2042
+
2043
+ /* Baseline Grid */
2044
+ .guide--layer.guide--baseline {
2045
+ background-image: linear-gradient(
2046
+ to bottom,
2047
+ rgba(0, 150, 255, 0.15) 1px,
2048
+ transparent 1px
2049
+ );
2050
+ background-size: 100% q(8);
2051
+ }
2052
+
2053
+ /* ─────────────────────────────────────────────────────────────────
2054
+ Layering Demo Page
2055
+ ───────────────────────────────────────────────────────────────── */
2056
+
2057
+ .page--layers {
2058
+ .layer-controls {
2059
+ display: flex;
2060
+ flex-wrap: wrap;
2061
+ gap: calc(var(--grid-unit) * 1);
2062
+ margin: calc(var(--grid-unit) * 3) 0;
2063
+ }
2064
+
2065
+ .layer-btn {
2066
+ font-family: var(--font-sans);
2067
+ font-size: 0.6875rem;
2068
+ font-weight: 600;
2069
+ text-transform: uppercase;
2070
+ letter-spacing: 0.03em;
2071
+ padding: calc(var(--grid-unit) * 0.75) calc(var(--grid-unit) * 1.5);
2072
+ border: 1px solid var(--color-border-strong);
2073
+ background: var(--color-bg);
2074
+ color: var(--color-text);
2075
+ cursor: pointer;
2076
+ transition: all var(--transition-fast);
2077
+ }
2078
+
2079
+ .layer-btn:hover {
2080
+ background: var(--color-text);
2081
+ color: var(--color-bg);
2082
+ }
2083
+
2084
+ .layer-btn--active {
2085
+ background: var(--color-text);
2086
+ color: var(--color-bg);
2087
+ }
2088
+
2089
+ .layer-demo {
2090
+ position: relative;
2091
+ height: q(400);
2092
+ border: 1px solid var(--color-border);
2093
+ margin: calc(var(--grid-unit) * 3) 0;
2094
+ background:
2095
+ linear-gradient(90deg, var(--color-border) 1px, transparent 1px),
2096
+ linear-gradient(var(--color-border) 1px, transparent 1px);
2097
+ background-size: q(20) q(20);
2098
+ overflow: hidden;
2099
+ }
2100
+
2101
+ .layer-box {
2102
+ position: absolute;
2103
+ width: q(180);
2104
+ height: q(140);
2105
+ display: flex;
2106
+ flex-direction: column;
2107
+ align-items: center;
2108
+ justify-content: center;
2109
+ font-weight: 600;
2110
+ font-size: 0.875rem;
2111
+ cursor: pointer;
2112
+ transition:
2113
+ transform 0.3s ease,
2114
+ opacity 0.3s ease,
2115
+ box-shadow 0.3s ease;
2116
+ border: none;
2117
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2118
+ }
2119
+
2120
+ .layer-box:hover {
2121
+ transform: scale(1.05);
2122
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
2123
+ }
2124
+
2125
+ .layer-box__name {
2126
+ font-size: 1rem;
2127
+ font-weight: 700;
2128
+ margin-bottom: q(4);
2129
+ text-transform: uppercase;
2130
+ letter-spacing: 0.05em;
2131
+ }
2132
+
2133
+ .layer-box__value {
2134
+ font-family: var(--font-mono);
2135
+ font-size: 0.75rem;
2136
+ opacity: 0.9;
2137
+ }
2138
+
2139
+ .layer-box__zindex {
2140
+ font-family: var(--font-mono);
2141
+ font-size: 0.625rem;
2142
+ opacity: 0.7;
2143
+ margin-top: q(4);
2144
+ }
2145
+
2146
+ .layer-box--hidden {
2147
+ opacity: 0.08 !important;
2148
+ pointer-events: none;
2149
+ transform: scale(0.95);
2150
+ }
2151
+
2152
+ /* Layer colors and positions - cascading from back to front */
2153
+ .z-canvas {
2154
+ z-index: 1;
2155
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
2156
+ color: #fff;
2157
+ top: q(200);
2158
+ left: q(280);
2159
+ }
2160
+
2161
+ .z-content {
2162
+ z-index: 2;
2163
+ background: linear-gradient(135deg, #0077b6 0%, #00b4d8 100%);
2164
+ color: #fff;
2165
+ top: q(160);
2166
+ left: q(220);
2167
+ }
2168
+
2169
+ .z-interface {
2170
+ z-index: 3;
2171
+ background: linear-gradient(135deg, #2d6a4f 0%, #40916c 100%);
2172
+ color: #fff;
2173
+ top: q(120);
2174
+ left: q(160);
2175
+ }
2176
+
2177
+ .z-modal {
2178
+ z-index: 4;
2179
+ background: linear-gradient(135deg, #d00000 0%, #e85d04 100%);
2180
+ color: #fff;
2181
+ top: q(80);
2182
+ left: q(100);
2183
+ }
2184
+
2185
+ .z-guides {
2186
+ z-index: 5;
2187
+ background: linear-gradient(135deg, #7209b7 0%, #b5179e 100%);
2188
+ color: #fff;
2189
+ top: q(40);
2190
+ left: q(40);
2191
+ }
2192
+
2193
+ .layer-table {
2194
+ width: 100%;
2195
+ border-collapse: collapse;
2196
+ margin: calc(var(--grid-unit) * 3) 0;
2197
+ }
2198
+
2199
+ .layer-table th,
2200
+ .layer-table td {
2201
+ text-align: left;
2202
+ padding: calc(var(--grid-unit) * 1.5);
2203
+ border-bottom: 1px solid var(--color-border);
2204
+ }
2205
+
2206
+ .layer-table th {
2207
+ font-size: 0.6875rem;
2208
+ font-weight: 600;
2209
+ text-transform: uppercase;
2210
+ letter-spacing: 0.05em;
2211
+ color: var(--color-text-muted);
2212
+ }
2213
+
2214
+ .layer-table td {
2215
+ font-size: 0.875rem;
2216
+ }
2217
+
2218
+ .layer-table td:first-child {
2219
+ font-weight: 500;
2220
+ }
2221
+
2222
+ .layer-table code {
2223
+ font-family: var(--font-mono);
2224
+ font-size: 0.75rem;
2225
+ background: var(--color-bg-muted);
2226
+ padding: 0.2em 0.4em;
2227
+ }
2228
+
2229
+ .layer-swatch {
2230
+ display: inline-block;
2231
+ width: q(16);
2232
+ height: q(16);
2233
+ margin-right: q(8);
2234
+ vertical-align: middle;
2235
+ }
2236
+
2237
+ .stack-diagram {
2238
+ display: flex;
2239
+ flex-direction: column-reverse;
2240
+ gap: q(4);
2241
+ margin: calc(var(--grid-unit) * 3) 0;
2242
+ max-width: 500px;
2243
+ }
2244
+
2245
+ .stack-item {
2246
+ height: q(48);
2247
+ display: flex;
2248
+ align-items: center;
2249
+ justify-content: space-between;
2250
+ padding: 0 calc(var(--grid-unit) * 2);
2251
+ font-size: 0.8125rem;
2252
+ font-weight: 600;
2253
+ text-transform: uppercase;
2254
+ letter-spacing: 0.03em;
2255
+ }
2256
+
2257
+ .stack-item__z {
2258
+ font-family: var(--font-mono);
2259
+ font-size: 0.6875rem;
2260
+ font-weight: 400;
2261
+ opacity: 0.9;
2262
+ }
2263
+
2264
+ .stack-item--guides {
2265
+ background: linear-gradient(135deg, #7209b7 0%, #b5179e 100%);
2266
+ color: #fff;
2267
+ }
2268
+
2269
+ .stack-item--modal {
2270
+ background: linear-gradient(135deg, #d00000 0%, #e85d04 100%);
2271
+ color: #fff;
2272
+ }
2273
+
2274
+ .stack-item--interface {
2275
+ background: linear-gradient(135deg, #2d6a4f 0%, #40916c 100%);
2276
+ color: #fff;
2277
+ }
2278
+
2279
+ .stack-item--content {
2280
+ background: linear-gradient(135deg, #0077b6 0%, #00b4d8 100%);
2281
+ color: #fff;
2282
+ }
2283
+
2284
+ .stack-item--canvas {
2285
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
2286
+ color: #fff;
2287
+ }
2288
+
2289
+ .use-case-grid {
2290
+ display: grid;
2291
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2292
+ gap: calc(var(--grid-unit) * 2);
2293
+ margin: calc(var(--grid-unit) * 3) 0;
2294
+ }
2295
+
2296
+ .use-case {
2297
+ padding: calc(var(--grid-unit) * 2);
2298
+ background: var(--color-bg-muted);
2299
+ border: 1px solid var(--color-border);
2300
+ }
2301
+
2302
+ .use-case__layer {
2303
+ font-size: 0.6875rem;
2304
+ font-weight: 600;
2305
+ text-transform: uppercase;
2306
+ letter-spacing: 0.05em;
2307
+ margin-bottom: calc(var(--grid-unit) * 1);
2308
+ padding: q(4) q(8);
2309
+ display: inline-block;
2310
+ }
2311
+
2312
+ .use-case__layer--guides {
2313
+ background: #7209b7;
2314
+ color: #fff;
2315
+ }
2316
+
2317
+ .use-case__layer--modal {
2318
+ background: #d00000;
2319
+ color: #fff;
2320
+ }
2321
+
2322
+ .use-case__layer--interface {
2323
+ background: #2d6a4f;
2324
+ color: #fff;
2325
+ }
2326
+
2327
+ .use-case__layer--content {
2328
+ background: #0077b6;
2329
+ color: #fff;
2330
+ }
2331
+
2332
+ .use-case__layer--canvas {
2333
+ background: #1a1a2e;
2334
+ color: #fff;
2335
+ }
2336
+
2337
+ .use-case__title {
2338
+ font-weight: 600;
2339
+ font-size: 0.9375rem;
2340
+ margin-bottom: q(4);
2341
+ }
2342
+
2343
+ .use-case__examples {
2344
+ font-size: 0.8125rem;
2345
+ color: var(--color-text-muted);
2346
+ margin: 0;
2347
+ }
2348
+ }
2349
+
2350
+ /* ─────────────────────────────────────────────────────────────────
2351
+ Device Explorer Demo Page
2352
+ ───────────────────────────────────────────────────────────────── */
2353
+
2354
+ .page--device {
2355
+ .device-status {
2356
+ display: grid;
2357
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
2358
+ gap: calc(var(--grid-unit) * 2);
2359
+ margin: calc(var(--grid-unit) * 2) 0 calc(var(--grid-unit) * 3);
2360
+ }
2361
+
2362
+ .device-status__item {
2363
+ border: 1px solid var(--color-border);
2364
+ background: var(--color-bg);
2365
+ padding: calc(var(--grid-unit) * 2);
2366
+ }
2367
+
2368
+ .device-status__label {
2369
+ font-size: 0.6875rem;
2370
+ font-weight: 600;
2371
+ text-transform: uppercase;
2372
+ letter-spacing: 0.05em;
2373
+ color: var(--color-text-muted);
2374
+ margin-bottom: calc(var(--grid-unit) * 1);
2375
+ }
2376
+
2377
+ .device-status__value {
2378
+ font-family: var(--font-mono);
2379
+ font-size: 1rem;
2380
+ font-weight: 600;
2381
+ }
2382
+
2383
+ .device-features {
2384
+ display: grid;
2385
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
2386
+ gap: calc(var(--grid-unit) * 3);
2387
+ margin: calc(var(--grid-unit) * 2) 0;
2388
+ }
2389
+
2390
+ .device-feature-list {
2391
+ list-style: none;
2392
+ margin: 0;
2393
+ padding: 0;
2394
+ border-top: 1px solid var(--color-border);
2395
+ }
2396
+
2397
+ .device-feature-list li {
2398
+ display: flex;
2399
+ align-items: baseline;
2400
+ justify-content: space-between;
2401
+ gap: calc(var(--grid-unit) * 2);
2402
+ padding: calc(var(--grid-unit) * 1.5) 0;
2403
+ border-bottom: 1px solid var(--color-border);
2404
+ }
2405
+
2406
+ .device-feature-list__key {
2407
+ font-family: var(--font-mono);
2408
+ font-size: 0.75rem;
2409
+ color: var(--color-text-muted);
2410
+ }
2411
+
2412
+ .device-feature-list__value {
2413
+ font-family: var(--font-mono);
2414
+ font-size: 0.75rem;
2415
+ font-weight: 700;
2416
+ color: var(--color-text);
2417
+ }
2418
+
2419
+ .device-tip {
2420
+ margin-top: calc(var(--grid-unit) * 3);
2421
+ }
2422
+
2423
+ .device-muted {
2424
+ color: var(--color-text-muted);
2425
+ margin-top: calc(var(--grid-unit) * 1);
2426
+ }
2427
+
2428
+ .device-controls {
2429
+ display: flex;
2430
+ flex-wrap: wrap;
2431
+ align-items: flex-end;
2432
+ justify-content: space-between;
2433
+ gap: calc(var(--grid-unit) * 2);
2434
+ margin: calc(var(--grid-unit) * 2) 0;
2435
+ padding: calc(var(--grid-unit) * 2);
2436
+ border: 1px solid var(--color-border);
2437
+ background: var(--color-bg-subtle);
2438
+ }
2439
+
2440
+ .device-search {
2441
+ display: grid;
2442
+ gap: calc(var(--grid-unit) * 1);
2443
+ min-width: min(520px, 100%);
2444
+ }
2445
+
2446
+ .device-search__label {
2447
+ font-size: 0.6875rem;
2448
+ font-weight: 600;
2449
+ text-transform: uppercase;
2450
+ letter-spacing: 0.05em;
2451
+ color: var(--color-text-muted);
2452
+ }
2453
+
2454
+ .device-search__input {
2455
+ width: 100%;
2456
+ padding: calc(var(--grid-unit) * 1.25) calc(var(--grid-unit) * 1.5);
2457
+ border: 1px solid var(--color-border-strong);
2458
+ background: var(--color-bg);
2459
+ font-family: var(--font-mono);
2460
+ font-size: 0.8125rem;
2461
+ outline: none;
2462
+ transition: box-shadow var(--transition-fast);
2463
+ }
2464
+
2465
+ .device-search__input:focus {
2466
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.12);
2467
+ }
2468
+
2469
+ .device-match {
2470
+ min-width: 160px;
2471
+ text-align: right;
2472
+ }
2473
+
2474
+ .device-match__label {
2475
+ font-size: 0.6875rem;
2476
+ font-weight: 600;
2477
+ text-transform: uppercase;
2478
+ letter-spacing: 0.05em;
2479
+ color: var(--color-text-muted);
2480
+ margin-bottom: calc(var(--grid-unit) * 1);
2481
+ }
2482
+
2483
+ .device-match__value {
2484
+ font-family: var(--font-mono);
2485
+ font-size: 1rem;
2486
+ font-weight: 700;
2487
+ }
2488
+
2489
+ .device-table {
2490
+ width: 100%;
2491
+ border-collapse: collapse;
2492
+ margin: calc(var(--grid-unit) * 2) 0;
2493
+ }
2494
+
2495
+ .device-table th,
2496
+ .device-table td {
2497
+ text-align: left;
2498
+ padding: calc(var(--grid-unit) * 1.5);
2499
+ border-bottom: 1px solid var(--color-border);
2500
+ vertical-align: top;
2501
+ }
2502
+
2503
+ .device-table th {
2504
+ font-size: 0.6875rem;
2505
+ font-weight: 600;
2506
+ text-transform: uppercase;
2507
+ letter-spacing: 0.05em;
2508
+ color: var(--color-text-muted);
2509
+ }
2510
+
2511
+ .device-table code {
2512
+ font-family: var(--font-mono);
2513
+ font-size: 0.75rem;
2514
+ background: var(--color-bg-muted);
2515
+ padding: 0.2em 0.4em;
2516
+ white-space: nowrap;
2517
+ }
2518
+
2519
+ .device-row.is-filtered {
2520
+ display: none;
2521
+ }
2522
+
2523
+ .device-row.is-match {
2524
+ background: rgba(255, 0, 0, 0.06);
2525
+ }
2526
+
2527
+ .device-badge {
2528
+ display: inline-flex;
2529
+ align-items: center;
2530
+ justify-content: center;
2531
+ padding: 0.25em 0.5em;
2532
+ border: 1px solid var(--color-border-strong);
2533
+ font-family: var(--font-mono);
2534
+ font-size: 0.6875rem;
2535
+ background: var(--color-bg);
2536
+ white-space: nowrap;
2537
+ }
2538
+
2539
+ .code-block {
2540
+ border: 1px solid var(--color-border);
2541
+ background: var(--color-bg-subtle);
2542
+ padding: calc(var(--grid-unit) * 2);
2543
+ overflow: auto;
2544
+ margin: calc(var(--grid-unit) * 2) 0;
2545
+ white-space: pre;
2546
+ tab-size: 4;
2547
+ }
2548
+
2549
+ .code-block pre {
2550
+ margin: 0;
2551
+ font-family: var(--font-mono);
2552
+ font-size: 0.75rem;
2553
+ line-height: 1.5;
2554
+ white-space: pre;
2555
+ }
2556
+ }
2557
+
2558
+ /* ─────────────────────────────────────────────────────────────────
2559
+ Q Scale Explorer Demo Page
2560
+ ───────────────────────────────────────────────────────────────── */
2561
+
2562
+ .page--qscale {
2563
+ .qscale-metrics {
2564
+ display: grid;
2565
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2566
+ gap: calc(var(--grid-unit) * 2);
2567
+ margin: calc(var(--grid-unit) * 2) 0 calc(var(--grid-unit) * 3);
2568
+ }
2569
+
2570
+ .qscale-metrics__item {
2571
+ border: 1px solid var(--color-border);
2572
+ background: var(--color-bg);
2573
+ padding: calc(var(--grid-unit) * 2);
2574
+ }
2575
+
2576
+ .qscale-metrics__label {
2577
+ font-size: 0.6875rem;
2578
+ font-weight: 600;
2579
+ text-transform: uppercase;
2580
+ letter-spacing: 0.05em;
2581
+ color: var(--color-text-muted);
2582
+ margin-bottom: calc(var(--grid-unit) * 1);
2583
+ }
2584
+
2585
+ .qscale-metrics__value {
2586
+ font-family: var(--font-mono);
2587
+ font-size: 0.875rem;
2588
+ font-weight: 700;
2589
+ }
2590
+
2591
+ .qscale-controls {
2592
+ display: grid;
2593
+ gap: calc(var(--grid-unit) * 2);
2594
+ margin: calc(var(--grid-unit) * 2) 0;
2595
+ padding: calc(var(--grid-unit) * 2);
2596
+ border: 1px solid var(--color-border);
2597
+ background: var(--color-bg-subtle);
2598
+ }
2599
+
2600
+ .qscale-slider {
2601
+ display: grid;
2602
+ gap: calc(var(--grid-unit) * 1);
2603
+ }
2604
+
2605
+ .qscale-slider__label {
2606
+ font-size: 0.6875rem;
2607
+ font-weight: 600;
2608
+ text-transform: uppercase;
2609
+ letter-spacing: 0.05em;
2610
+ color: var(--color-text-muted);
2611
+ }
2612
+
2613
+ #qs-range {
2614
+ width: 100%;
2615
+ }
2616
+
2617
+ .qscale-chips {
2618
+ display: flex;
2619
+ flex-wrap: wrap;
2620
+ gap: calc(var(--grid-unit) * 1);
2621
+ }
2622
+
2623
+ .qscale-chip {
2624
+ appearance: none;
2625
+ border: 1px solid var(--color-border-strong);
2626
+ background: var(--color-bg);
2627
+ color: var(--color-text);
2628
+ font-family: var(--font-mono);
2629
+ font-size: 0.75rem;
2630
+ padding: 0.35em 0.6em;
2631
+ cursor: pointer;
2632
+ transition:
2633
+ background var(--transition-fast),
2634
+ color var(--transition-fast);
2635
+ }
2636
+
2637
+ .qscale-chip:hover,
2638
+ .qscale-chip.active {
2639
+ background: var(--color-text);
2640
+ color: var(--color-bg);
2641
+ }
2642
+
2643
+ .qscale-demo {
2644
+ display: grid;
2645
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
2646
+ gap: calc(var(--grid-unit) * 3);
2647
+ margin: calc(var(--grid-unit) * 3) 0;
2648
+ }
2649
+
2650
+ .qscale-demo__panel {
2651
+ border: 1px solid var(--color-border);
2652
+ background: var(--color-bg);
2653
+ padding: calc(var(--grid-unit) * 2);
2654
+ }
2655
+
2656
+ .qscale-demo__title {
2657
+ font-size: 0.6875rem;
2658
+ font-weight: 600;
2659
+ text-transform: uppercase;
2660
+ letter-spacing: 0.05em;
2661
+ color: var(--color-text-muted);
2662
+ margin-bottom: calc(var(--grid-unit) * 1.5);
2663
+ }
2664
+
2665
+ .qscale-demo__row {
2666
+ display: grid;
2667
+ grid-template-columns: 1fr 1fr;
2668
+ gap: calc(var(--grid-unit) * 2);
2669
+ align-items: center;
2670
+ }
2671
+
2672
+ .qscale-box {
2673
+ background:
2674
+ linear-gradient(90deg, rgba(255, 0, 0, 0.12) 1px, transparent 1px),
2675
+ linear-gradient(rgba(255, 0, 0, 0.12) 1px, transparent 1px);
2676
+ background-size: q(8) q(8);
2677
+ border: 1px solid var(--color-border-strong);
2678
+ box-sizing: border-box;
2679
+ min-width: q(8);
2680
+ min-height: q(8);
2681
+ }
2682
+
2683
+ .qscale-demo__meta {
2684
+ display: grid;
2685
+ gap: calc(var(--grid-unit) * 0.75);
2686
+ font-family: var(--font-mono);
2687
+ font-size: 0.75rem;
2688
+ }
2689
+
2690
+ .qscale-demo__line {
2691
+ display: flex;
2692
+ justify-content: space-between;
2693
+ gap: calc(var(--grid-unit) * 2);
2694
+ border-bottom: 1px solid var(--color-border);
2695
+ padding-bottom: calc(var(--grid-unit) * 0.5);
2696
+ }
2697
+
2698
+ .qscale-demo__line .k {
2699
+ color: var(--color-text-muted);
2700
+ }
2701
+
2702
+ .qscale-demo__line .v {
2703
+ font-weight: 700;
2704
+ color: var(--color-text);
2705
+ }
2706
+
2707
+ .qscale-muted {
2708
+ color: var(--color-text-muted);
2709
+ margin-top: calc(var(--grid-unit) * 1);
2710
+ }
2711
+
2712
+ .qscale-util-grid {
2713
+ display: grid;
2714
+ gap: calc(var(--grid-unit) * 1);
2715
+ margin-top: calc(var(--grid-unit) * 2);
2716
+ }
2717
+
2718
+ .qscale-util {
2719
+ display: flex;
2720
+ align-items: baseline;
2721
+ justify-content: space-between;
2722
+ gap: calc(var(--grid-unit) * 2);
2723
+ padding: calc(var(--grid-unit) * 1.25) calc(var(--grid-unit) * 1.5);
2724
+ border: 1px solid var(--color-border);
2725
+ background: var(--color-bg-subtle);
2726
+ }
2727
+
2728
+ .qscale-util .c {
2729
+ font-family: var(--font-mono);
2730
+ font-size: 0.75rem;
2731
+ font-weight: 700;
2732
+ }
2733
+
2734
+ .qscale-util .d {
2735
+ font-size: 0.75rem;
2736
+ color: var(--color-text-muted);
2737
+ }
2738
+
2739
+ .qscale-table {
2740
+ width: 100%;
2741
+ border-collapse: collapse;
2742
+ margin: calc(var(--grid-unit) * 2) 0;
2743
+ }
2744
+
2745
+ .qscale-table th,
2746
+ .qscale-table td {
2747
+ text-align: left;
2748
+ padding: calc(var(--grid-unit) * 1.5);
2749
+ border-bottom: 1px solid var(--color-border);
2750
+ vertical-align: top;
2751
+ }
2752
+
2753
+ .qscale-table th {
2754
+ font-size: 0.6875rem;
2755
+ font-weight: 600;
2756
+ text-transform: uppercase;
2757
+ letter-spacing: 0.05em;
2758
+ color: var(--color-text-muted);
2759
+ }
2760
+
2761
+ .qscale-table code {
2762
+ font-family: var(--font-mono);
2763
+ font-size: 0.75rem;
2764
+ background: var(--color-bg-muted);
2765
+ padding: 0.2em 0.4em;
2766
+ white-space: nowrap;
2767
+ }
2768
+
2769
+ .qscale-usage {
2770
+ color: var(--color-text-muted);
2771
+ }
2772
+
2773
+ // Use Cases Grid
2774
+ .qscale-use-cases {
2775
+ display: grid;
2776
+ grid-template-columns: repeat(2, 1fr);
2777
+ gap: q(24);
2778
+ margin: q(32) 0;
2779
+ }
2780
+
2781
+ .use-case {
2782
+ background: var(--color-bg-subtle);
2783
+ border: q(1) solid var(--color-border);
2784
+ padding: q(24);
2785
+
2786
+ h3 {
2787
+ font-size: q(16);
2788
+ font-weight: 600;
2789
+ margin-bottom: q(16);
2790
+ color: var(--color-text);
2791
+ }
2792
+
2793
+ ul {
2794
+ margin: 0;
2795
+ padding-left: q(20);
2796
+ }
2797
+
2798
+ li {
2799
+ font-size: q(14);
2800
+ line-height: q(24);
2801
+ color: var(--color-text-muted);
2802
+ }
2803
+
2804
+ &:first-child h3 {
2805
+ color: var(--color-success, #16a34a);
2806
+ }
2807
+
2808
+ &:last-child h3 {
2809
+ color: var(--color-error, #dc2626);
2810
+ }
2811
+ }
2812
+
2813
+ @media (max-width: 640px) {
2814
+ .qscale-demo__row {
2815
+ grid-template-columns: 1fr;
2816
+ }
2817
+
2818
+ .qscale-use-cases {
2819
+ grid-template-columns: 1fr;
2820
+ }
2821
+ }
2822
+ }
2823
+
2824
+ /* ─────────────────────────────────────────────────────────────────
2825
+ Breakpoints Demo Page
2826
+ ───────────────────────────────────────────────────────────────── */
2827
+
2828
+ .page--breakpoints {
2829
+ .bp-status {
2830
+ display: grid;
2831
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2832
+ gap: calc(var(--grid-unit) * 2);
2833
+ margin: calc(var(--grid-unit) * 3) 0;
2834
+ }
2835
+
2836
+ .bp-status__item {
2837
+ border: 1px solid var(--color-border);
2838
+ padding: calc(var(--grid-unit) * 2);
2839
+ background: var(--color-bg);
2840
+ }
2841
+
2842
+ .bp-status__label {
2843
+ font-size: 0.6875rem;
2844
+ font-weight: 600;
2845
+ text-transform: uppercase;
2846
+ letter-spacing: 0.05em;
2847
+ color: var(--color-text-muted);
2848
+ margin-bottom: q(6);
2849
+ }
2850
+
2851
+ .bp-status__value {
2852
+ font-family: var(--font-mono);
2853
+ font-size: 1.125rem;
2854
+ font-weight: 500;
2855
+ letter-spacing: -0.01em;
2856
+ }
2857
+
2858
+ .bp-table {
2859
+ width: 100%;
2860
+ border-collapse: collapse;
2861
+ margin: calc(var(--grid-unit) * 3) 0;
2862
+ }
2863
+
2864
+ .bp-table th,
2865
+ .bp-table td {
2866
+ text-align: left;
2867
+ padding: calc(var(--grid-unit) * 1.5);
2868
+ border-bottom: 1px solid var(--color-border);
2869
+ vertical-align: top;
2870
+ }
2871
+
2872
+ .bp-table th {
2873
+ font-size: 0.6875rem;
2874
+ font-weight: 600;
2875
+ text-transform: uppercase;
2876
+ letter-spacing: 0.05em;
2877
+ color: var(--color-text-muted);
2878
+ }
2879
+
2880
+ .bp-row.active {
2881
+ background: var(--color-bg-muted);
2882
+ outline: 2px solid var(--color-border-strong);
2883
+ outline-offset: -2px;
2884
+ }
2885
+
2886
+ .bp-mult {
2887
+ font-family: var(--font-mono);
2888
+ font-size: 0.75rem;
2889
+ color: var(--color-text-muted);
2890
+ }
2891
+
2892
+ .bp-demo-card {
2893
+ border: 1px solid var(--color-border-strong);
2894
+ background: var(--color-bg);
2895
+ margin-top: calc(var(--grid-unit) * 2);
2896
+ }
2897
+
2898
+ .bp-demo-card__title {
2899
+ font-weight: 700;
2900
+ letter-spacing: -0.02em;
2901
+ margin-bottom: q(6);
2902
+ }
2903
+
2904
+ .bp-demo-card__meta {
2905
+ color: var(--color-text-muted);
2906
+ font-size: 0.875rem;
2907
+ }
2908
+ }
2909
+
2910
+ /* ─────────────────────────────────────────────────────────────────
2911
+ Layers Documentation Page
2912
+ ───────────────────────────────────────────────────────────────── */
2913
+
2914
+ .layer-stack {
2915
+ display: flex;
2916
+ flex-direction: column;
2917
+ gap: q(2);
2918
+ margin: calc(var(--grid-unit) * 3) 0;
2919
+ }
2920
+
2921
+ .layer-stack__item {
2922
+ display: grid;
2923
+ grid-template-columns: 120px 120px 1fr;
2924
+ gap: calc(var(--grid-unit) * 2);
2925
+ align-items: center;
2926
+ padding: calc(var(--grid-unit) * 2);
2927
+ background: var(--color-bg-muted);
2928
+ border-left: 4px solid var(--color-border-strong);
2929
+ }
2930
+
2931
+ .layer-stack__item--guides {
2932
+ border-left-color: #7209b7;
2933
+ background: linear-gradient(90deg, rgba(114, 9, 183, 0.1), transparent);
2934
+ }
2935
+ .layer-stack__item--modal {
2936
+ border-left-color: #d00000;
2937
+ background: linear-gradient(90deg, rgba(208, 0, 0, 0.1), transparent);
2938
+ }
2939
+ .layer-stack__item--interface {
2940
+ border-left-color: #2d6a4f;
2941
+ background: linear-gradient(90deg, rgba(45, 106, 79, 0.1), transparent);
2942
+ }
2943
+ .layer-stack__item--content {
2944
+ border-left-color: #0077b6;
2945
+ background: linear-gradient(90deg, rgba(0, 119, 182, 0.1), transparent);
2946
+ }
2947
+ .layer-stack__item--canvas {
2948
+ border-left-color: #1a1a2e;
2949
+ background: linear-gradient(90deg, rgba(26, 26, 46, 0.15), transparent);
2950
+ }
2951
+
2952
+ .layer-stack__name {
2953
+ font-family: var(--font-mono);
2954
+ font-weight: 600;
2955
+ font-size: 0.9375rem;
2956
+ }
2957
+
2958
+ .layer-stack__value {
2959
+ font-family: var(--font-mono);
2960
+ font-size: 0.8125rem;
2961
+ color: var(--color-text-muted);
2962
+ }
2963
+
2964
+ .layer-stack__desc {
2965
+ font-size: 0.875rem;
2966
+ color: var(--color-text-muted);
2967
+ }
2968
+
2969
+ @media (max-width: 640px) {
2970
+ .layer-stack__item {
2971
+ grid-template-columns: 1fr;
2972
+ gap: calc(var(--grid-unit) * 0.5);
2973
+ }
2974
+
2975
+ .layer-stack__desc {
2976
+ margin-top: calc(var(--grid-unit) * 0.5);
2977
+ }
2978
+ }
2979
+
2980
+ .best-practices {
2981
+ display: grid;
2982
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
2983
+ gap: calc(var(--grid-unit) * 3);
2984
+ margin: calc(var(--grid-unit) * 3) 0;
2985
+ }
2986
+
2987
+ .best-practice {
2988
+ border: 1px solid var(--color-border);
2989
+ padding: calc(var(--grid-unit) * 2.5);
2990
+ }
2991
+
2992
+ .best-practice h4 {
2993
+ font-size: 0.9375rem;
2994
+ font-weight: 600;
2995
+ margin: 0 0 calc(var(--grid-unit) * 1);
2996
+ }
2997
+
2998
+ .best-practice p {
2999
+ font-size: 0.875rem;
3000
+ color: var(--color-text-muted);
3001
+ margin: 0;
3002
+ line-height: 1.5;
3003
+ }
3004
+
3005
+ /* ─────────────────────────────────────────────────────────────────
3006
+ Background Story Page
3007
+ ───────────────────────────────────────────────────────────────── */
3008
+
3009
+ .highlight-box {
3010
+ background: var(--color-bg-muted);
3011
+ padding: calc(var(--grid-unit) * 3);
3012
+ margin: calc(var(--grid-unit) * 3) 0;
3013
+ border-left: 4px solid var(--color-border-strong);
3014
+ }
3015
+
3016
+ .highlight-box h4 {
3017
+ font-size: 0.9375rem;
3018
+ font-weight: 600;
3019
+ margin: 0 0 calc(var(--grid-unit) * 1);
3020
+ }
3021
+ .highlight-box p {
3022
+ margin: 0;
3023
+ font-size: 0.9375rem;
3024
+ line-height: 1.6;
3025
+ }
3026
+
3027
+ .principles-grid {
3028
+ display: grid;
3029
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
3030
+ gap: calc(var(--grid-unit) * 3);
3031
+ margin: calc(var(--grid-unit) * 3) 0;
3032
+ }
3033
+
3034
+ .principle {
3035
+ border-top: 2px solid var(--color-border-strong);
3036
+ padding-top: calc(var(--grid-unit) * 2);
3037
+ }
3038
+
3039
+ .principle h4 {
3040
+ font-size: 0.9375rem;
3041
+ font-weight: 600;
3042
+ margin: 0 0 calc(var(--grid-unit) * 1);
3043
+ }
3044
+
3045
+ .principle p {
3046
+ font-size: 0.875rem;
3047
+ color: var(--color-text-muted);
3048
+ margin: 0;
3049
+ line-height: 1.5;
3050
+ }
3051
+
3052
+ .philosophy {
3053
+ display: flex;
3054
+ flex-direction: column;
3055
+ gap: calc(var(--grid-unit) * 3);
3056
+ margin: calc(var(--grid-unit) * 3) 0;
3057
+ }
3058
+
3059
+ .philosophy__item {
3060
+ border-left: 3px solid var(--color-border);
3061
+ padding-left: calc(var(--grid-unit) * 3);
3062
+ }
3063
+
3064
+ .philosophy__item h4 {
3065
+ font-size: 1rem;
3066
+ font-weight: 600;
3067
+ margin: 0 0 calc(var(--grid-unit) * 1);
3068
+ }
3069
+
3070
+ .philosophy__item p {
3071
+ font-size: 0.9375rem;
3072
+ color: var(--color-text-muted);
3073
+ margin: 0;
3074
+ line-height: 1.6;
3075
+ }
3076
+
3077
+ .quote {
3078
+ margin: calc(var(--grid-unit) * 4) 0;
3079
+ padding: calc(var(--grid-unit) * 3);
3080
+ background: var(--color-bg-muted);
3081
+ border-left: 4px solid var(--color-accent);
3082
+ }
3083
+
3084
+ .quote blockquote {
3085
+ font-size: 1.125rem;
3086
+ font-style: italic;
3087
+ line-height: 1.6;
3088
+ margin: 0 0 calc(var(--grid-unit) * 2);
3089
+ color: var(--color-text);
3090
+ }
3091
+
3092
+ .quote cite {
3093
+ font-size: 0.875rem;
3094
+ font-style: normal;
3095
+ color: var(--color-text-muted);
3096
+ }
3097
+
3098
+ .cta-links {
3099
+ display: flex;
3100
+ flex-wrap: wrap;
3101
+ gap: calc(var(--grid-unit) * 2);
3102
+ margin: calc(var(--grid-unit) * 3) 0;
3103
+ }
3104
+
3105
+ .button {
3106
+ display: inline-flex;
3107
+ align-items: center;
3108
+ padding: calc(var(--grid-unit) * 1.5) calc(var(--grid-unit) * 3);
3109
+ background: var(--color-text);
3110
+ color: var(--color-bg);
3111
+ text-decoration: none;
3112
+ font-size: 0.875rem;
3113
+ font-weight: 500;
3114
+ transition: background var(--transition-fast);
3115
+ }
3116
+
3117
+ .button:hover {
3118
+ background: var(--color-text-muted);
3119
+ }
3120
+
3121
+ .button--secondary {
3122
+ background: var(--color-bg);
3123
+ color: var(--color-text);
3124
+ border: 1px solid var(--color-border-strong);
3125
+ }
3126
+
3127
+ .button--secondary:hover {
3128
+ background: var(--color-bg-muted);
3129
+ }
3130
+
3131
+ /* ─────────────────────────────────────────────────────────────────
3132
+ Pixel Density Page
3133
+ ───────────────────────────────────────────────────────────────── */
3134
+
3135
+ .density-current {
3136
+ display: grid;
3137
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
3138
+ gap: calc(var(--grid-unit) * 2);
3139
+ margin: calc(var(--grid-unit) * 3) 0;
3140
+ }
3141
+
3142
+ .density-current__item {
3143
+ background: var(--color-bg-muted);
3144
+ padding: calc(var(--grid-unit) * 2.5);
3145
+ text-align: center;
3146
+ }
3147
+
3148
+ .density-current__label {
3149
+ display: block;
3150
+ font-size: 0.6875rem;
3151
+ font-weight: 600;
3152
+ text-transform: uppercase;
3153
+ letter-spacing: 0.05em;
3154
+ color: var(--color-text-muted);
3155
+ margin-bottom: calc(var(--grid-unit) * 1);
3156
+ }
3157
+
3158
+ .density-current__value {
3159
+ display: block;
3160
+ font-family: var(--font-mono);
3161
+ font-size: 1.5rem;
3162
+ font-weight: 600;
3163
+ color: var(--color-text);
3164
+ }
3165
+
3166
+ .density-visual {
3167
+ display: grid;
3168
+ grid-template-columns: repeat(3, 1fr);
3169
+ gap: calc(var(--grid-unit) * 3);
3170
+ margin: calc(var(--grid-unit) * 4) 0;
3171
+ }
3172
+
3173
+ @media (max-width: 640px) {
3174
+ .density-visual {
3175
+ grid-template-columns: 1fr;
3176
+ }
3177
+ }
3178
+
3179
+ .density-visual__box {
3180
+ text-align: center;
3181
+ }
3182
+
3183
+ .density-visual__grid {
3184
+ width: q(80);
3185
+ height: q(80);
3186
+ margin: 0 auto calc(var(--grid-unit) * 2);
3187
+ border: 2px solid var(--color-border-strong);
3188
+ position: relative;
3189
+ background: var(--color-bg);
3190
+ }
3191
+
3192
+ .density-visual__grid::before,
3193
+ .density-visual__grid::after {
3194
+ content: "";
3195
+ position: absolute;
3196
+ background: var(--color-border);
3197
+ }
3198
+
3199
+ .density-visual__grid--1x::before {
3200
+ width: 100%;
3201
+ height: 1px;
3202
+ top: 50%;
3203
+ left: 0;
3204
+ }
3205
+
3206
+ .density-visual__grid--1x::after {
3207
+ width: 1px;
3208
+ height: 100%;
3209
+ left: 50%;
3210
+ top: 0;
3211
+ }
3212
+
3213
+ .density-visual__grid--2x {
3214
+ background:
3215
+ linear-gradient(var(--color-border) 1px, transparent 1px),
3216
+ linear-gradient(90deg, var(--color-border) 1px, transparent 1px);
3217
+ background-size: 50% 50%;
3218
+ }
3219
+
3220
+ .density-visual__grid--3x {
3221
+ background:
3222
+ linear-gradient(var(--color-border) 1px, transparent 1px),
3223
+ linear-gradient(90deg, var(--color-border) 1px, transparent 1px);
3224
+ background-size: 33.333% 33.333%;
3225
+ }
3226
+
3227
+ .density-visual__label {
3228
+ display: block;
3229
+ font-weight: 600;
3230
+ font-size: 0.9375rem;
3231
+ margin-bottom: calc(var(--grid-unit) * 0.5);
3232
+ }
3233
+
3234
+ .density-visual__desc {
3235
+ display: block;
3236
+ font-size: 0.8125rem;
3237
+ color: var(--color-text-muted);
3238
+ }
3239
+
3240
+ .density-baseline {
3241
+ font-size: 0.6875rem;
3242
+ color: var(--color-text-muted);
3243
+ font-weight: normal;
3244
+ }
3245
+
3246
+ .density-row--highlight {
3247
+ background: var(--color-bg-muted);
3248
+ }
3249
+
3250
+ .density-calculator {
3251
+ background: var(--color-bg-muted);
3252
+ padding: calc(var(--grid-unit) * 3);
3253
+ margin: calc(var(--grid-unit) * 3) 0;
3254
+ }
3255
+
3256
+ .density-calc__input {
3257
+ margin-bottom: calc(var(--grid-unit) * 3);
3258
+ }
3259
+
3260
+ .density-calc__input label {
3261
+ display: block;
3262
+ font-size: 0.75rem;
3263
+ font-weight: 600;
3264
+ text-transform: uppercase;
3265
+ letter-spacing: 0.05em;
3266
+ color: var(--color-text-muted);
3267
+ margin-bottom: calc(var(--grid-unit) * 1);
3268
+ }
3269
+
3270
+ .density-calc__input input {
3271
+ width: 100%;
3272
+ max-width: 200px;
3273
+ padding: calc(var(--grid-unit) * 1.5);
3274
+ font-family: var(--font-mono);
3275
+ font-size: 1.5rem;
3276
+ border: 2px solid var(--color-border-strong);
3277
+ background: var(--color-bg);
3278
+ color: var(--color-text);
3279
+ transition: border-color var(--transition-fast);
3280
+ }
3281
+
3282
+ .density-calc__input input:focus {
3283
+ outline: none;
3284
+ border-color: var(--color-accent);
3285
+ }
3286
+
3287
+ .density-calc__results {
3288
+ display: grid;
3289
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
3290
+ gap: calc(var(--grid-unit) * 2);
3291
+ }
3292
+
3293
+ .density-calc__result {
3294
+ background: var(--color-bg);
3295
+ padding: calc(var(--grid-unit) * 2);
3296
+ border-left: 3px solid var(--color-border);
3297
+ }
3298
+
3299
+ .density-calc__label {
3300
+ display: block;
3301
+ font-size: 0.6875rem;
3302
+ font-weight: 600;
3303
+ text-transform: uppercase;
3304
+ letter-spacing: 0.05em;
3305
+ color: var(--color-text-muted);
3306
+ margin-bottom: calc(var(--grid-unit) * 0.5);
3307
+ }
3308
+
3309
+ .density-calc__value {
3310
+ font-family: var(--font-mono);
3311
+ font-size: 1rem;
3312
+ font-weight: 500;
3313
+ color: var(--color-text);
3314
+ }
3315
+
3316
+ // ============================================================================
3317
+ // Hybrid Scale Demo
3318
+ // ============================================================================
3319
+
3320
+ .scale-comparison {
3321
+ display: flex;
3322
+ flex-direction: column;
3323
+ gap: 0;
3324
+ border: 1px solid var(--color-border);
3325
+ font-family: var(--font-mono);
3326
+ font-size: 0.875rem;
3327
+ overflow: hidden;
3328
+ }
3329
+
3330
+ .scale-row {
3331
+ display: grid;
3332
+ grid-template-columns: repeat(5, 1fr);
3333
+ border-bottom: 1px solid var(--color-border);
3334
+
3335
+ &:last-child {
3336
+ border-bottom: none;
3337
+ }
3338
+
3339
+ &.scale-header {
3340
+ background: var(--color-bg-alt);
3341
+ font-weight: 600;
3342
+ font-size: 0.75rem;
3343
+ text-transform: uppercase;
3344
+ letter-spacing: 0.05em;
3345
+ }
3346
+
3347
+ &.scale-lcm {
3348
+ background: var(--color-bg-alt);
3349
+ font-weight: 600;
3350
+ }
3351
+ }
3352
+
3353
+ .scale-cell {
3354
+ padding: calc(var(--grid-unit) * 1.5) calc(var(--grid-unit) * 2);
3355
+ text-align: center;
3356
+ border-right: 1px solid var(--color-border);
3357
+
3358
+ &:last-child {
3359
+ border-right: none;
3360
+ }
3361
+
3362
+ &.highlight-type {
3363
+ background: rgba(59, 130, 246, 0.1);
3364
+ color: var(--color-accent);
3365
+ font-weight: 500;
3366
+ }
3367
+
3368
+ &.highlight-line {
3369
+ background: rgba(16, 185, 129, 0.1);
3370
+ color: #10b981;
3371
+ font-weight: 500;
3372
+ }
3373
+ }
3374
+
3375
+ [data-theme="dark"] {
3376
+ .scale-cell.highlight-type {
3377
+ background: rgba(59, 130, 246, 0.15);
3378
+ }
3379
+
3380
+ .scale-cell.highlight-line {
3381
+ background: rgba(16, 185, 129, 0.15);
3382
+ }
3383
+ }
3384
+
3385
+ // Grid Demo
3386
+ .grid-demo {
3387
+ display: flex;
3388
+ flex-direction: column;
3389
+ gap: calc(var(--grid-unit) * 4);
3390
+ }
3391
+
3392
+ .grid-container {
3393
+ position: relative;
3394
+
3395
+ &.combined {
3396
+ margin-top: calc(var(--grid-unit) * 2);
3397
+ }
3398
+ }
3399
+
3400
+ .grid-label {
3401
+ font-size: 0.75rem;
3402
+ font-weight: 600;
3403
+ text-transform: uppercase;
3404
+ letter-spacing: 0.05em;
3405
+ color: var(--color-text-muted);
3406
+ margin-bottom: calc(var(--grid-unit) * 1);
3407
+ }
3408
+
3409
+ .grid-type,
3410
+ .grid-line-scale,
3411
+ .grid-combined {
3412
+ position: relative;
3413
+ height: 60px;
3414
+ background: var(--color-bg-alt);
3415
+ border: 1px solid var(--color-border);
3416
+ }
3417
+
3418
+ .grid-type .grid-line,
3419
+ .grid-line-scale .grid-line,
3420
+ .grid-combined .grid-line {
3421
+ position: absolute;
3422
+ left: var(--offset);
3423
+ top: 0;
3424
+ height: 100%;
3425
+ width: 1px;
3426
+ background: var(--color-border-strong);
3427
+
3428
+ &.lcm {
3429
+ background: var(--color-accent);
3430
+ width: 2px;
3431
+ }
3432
+ }
3433
+
3434
+ .grid-type .grid-line {
3435
+ background: rgba(59, 130, 246, 0.4);
3436
+
3437
+ &.lcm {
3438
+ background: var(--color-accent);
3439
+ }
3440
+ }
3441
+
3442
+ .grid-line-scale .grid-line {
3443
+ background: rgba(16, 185, 129, 0.4);
3444
+
3445
+ &.lcm {
3446
+ background: #10b981;
3447
+ }
3448
+ }
3449
+
3450
+ .grid-combined .grid-line {
3451
+ &.type {
3452
+ background: rgba(59, 130, 246, 0.4);
3453
+ height: 50%;
3454
+ top: 0;
3455
+ }
3456
+
3457
+ &.line {
3458
+ background: rgba(16, 185, 129, 0.4);
3459
+ height: 50%;
3460
+ top: 50%;
3461
+ }
3462
+
3463
+ &.lcm {
3464
+ background: var(--color-accent);
3465
+ height: 100%;
3466
+ top: 0;
3467
+ width: 2px;
3468
+ }
3469
+
3470
+ span {
3471
+ position: absolute;
3472
+ bottom: -18px;
3473
+ left: 50%;
3474
+ transform: translateX(-50%);
3475
+ font-size: 0.625rem;
3476
+ font-family: var(--font-mono);
3477
+ color: var(--color-text-muted);
3478
+ white-space: nowrap;
3479
+ }
3480
+ }
3481
+
3482
+ // Info and Insight Boxes
3483
+ .info-box,
3484
+ .insight-box {
3485
+ background: var(--color-bg-alt);
3486
+ border: 1px solid var(--color-border);
3487
+ padding: calc(var(--grid-unit) * 3);
3488
+ margin-top: calc(var(--grid-unit) * 3);
3489
+
3490
+ h4 {
3491
+ font-size: 0.875rem;
3492
+ font-weight: 600;
3493
+ margin-bottom: calc(var(--grid-unit) * 1.5);
3494
+ color: var(--color-text);
3495
+ }
3496
+
3497
+ p {
3498
+ font-size: 0.875rem;
3499
+ margin-bottom: calc(var(--grid-unit) * 1);
3500
+
3501
+ &:last-child {
3502
+ margin-bottom: 0;
3503
+ }
3504
+ }
3505
+
3506
+ code {
3507
+ background: var(--color-bg);
3508
+ padding: 0.15em 0.4em;
3509
+ font-family: var(--font-mono);
3510
+ font-size: 0.875em;
3511
+ }
3512
+ }
3513
+
3514
+ .insight-box {
3515
+ border-left: 3px solid var(--color-accent);
3516
+
3517
+ h3 {
3518
+ font-size: 1.125rem;
3519
+ margin-bottom: calc(var(--grid-unit) * 2);
3520
+ }
3521
+
3522
+ ul {
3523
+ padding-left: calc(var(--grid-unit) * 3);
3524
+ margin-bottom: calc(var(--grid-unit) * 2);
3525
+ }
3526
+
3527
+ li {
3528
+ margin-bottom: calc(var(--grid-unit) * 1);
3529
+ font-size: 0.875rem;
3530
+ }
3531
+ }
3532
+
3533
+ // Highlight row for tables
3534
+ .highlight-row {
3535
+ background: var(--color-bg-alt);
3536
+ font-weight: 600;
3537
+ }
3538
+
3539
+ // Typography Demo
3540
+ .type-demo {
3541
+ display: flex;
3542
+ flex-direction: column;
3543
+ gap: calc(var(--grid-unit) * 3);
3544
+ margin-top: calc(var(--grid-unit) * 3);
3545
+ }
3546
+
3547
+ .type-sample {
3548
+ background: var(--color-bg-alt);
3549
+ border: 1px solid var(--color-border);
3550
+ padding: calc(var(--grid-unit) * 3);
3551
+ position: relative;
3552
+
3553
+ p {
3554
+ margin: 0;
3555
+ }
3556
+ }
3557
+
3558
+ .type-label {
3559
+ position: absolute;
3560
+ top: calc(var(--grid-unit) * 1);
3561
+ right: calc(var(--grid-unit) * 1.5);
3562
+ font-size: 0.625rem;
3563
+ font-family: var(--font-mono);
3564
+ color: var(--color-text-muted);
3565
+ text-transform: uppercase;
3566
+ letter-spacing: 0.05em;
3567
+ }
3568
+
3569
+ .body-sample p {
3570
+ font-size: 16px;
3571
+ line-height: 25px;
3572
+ }
3573
+
3574
+ .small-sample p {
3575
+ font-size: 12px;
3576
+ line-height: 20px;
3577
+ }
3578
+
3579
+ .heading-sample p {
3580
+ font-size: 24px;
3581
+ line-height: 30px;
3582
+ font-weight: 600;
3583
+ }
3584
+
3585
+ .display-sample p {
3586
+ font-size: 40px;
3587
+ line-height: 40px;
3588
+ font-weight: 700;
3589
+ }
3590
+
3591
+ // ============================================================================
3592
+ // Scale Explorer (Hybrid Scale Demo)
3593
+ // ============================================================================
3594
+
3595
+ .scale-explorer {
3596
+ background: var(--color-bg-subtle);
3597
+ border: q(1) solid var(--color-border);
3598
+ padding: q(30);
3599
+ margin: q(30) 0;
3600
+ }
3601
+
3602
+ .explorer-controls {
3603
+ display: flex;
3604
+ flex-direction: column;
3605
+ gap: q(20);
3606
+ margin-bottom: q(30);
3607
+ }
3608
+
3609
+ .explorer-slider {
3610
+ display: flex;
3611
+ align-items: center;
3612
+ gap: q(20);
3613
+
3614
+ label {
3615
+ font-weight: 500;
3616
+ min-width: q(100);
3617
+ }
3618
+
3619
+ input[type="range"] {
3620
+ flex: 1;
3621
+ height: q(8);
3622
+ -webkit-appearance: none;
3623
+ background: var(--color-border);
3624
+
3625
+ &::-webkit-slider-thumb {
3626
+ -webkit-appearance: none;
3627
+ width: q(20);
3628
+ height: q(20);
3629
+ background: var(--color-accent);
3630
+ cursor: pointer;
3631
+ }
3632
+ }
3633
+ }
3634
+
3635
+ .slider-value {
3636
+ font-family: var(--font-mono);
3637
+ font-weight: 600;
3638
+ font-size: q(20);
3639
+ line-height: q(25);
3640
+ min-width: q(40);
3641
+ text-align: center;
3642
+ }
3643
+
3644
+ .explorer-chips {
3645
+ display: flex;
3646
+ flex-wrap: wrap;
3647
+ align-items: center;
3648
+ gap: q(10);
3649
+ }
3650
+
3651
+ .chip-label {
3652
+ font-size: q(14);
3653
+ line-height: q(20);
3654
+ color: var(--color-text-muted);
3655
+ }
3656
+
3657
+ .chip {
3658
+ padding: q(5) q(15);
3659
+ border: q(1) solid var(--color-border);
3660
+ background: transparent;
3661
+ cursor: pointer;
3662
+ font-family: var(--font-mono);
3663
+ font-size: q(14);
3664
+ line-height: q(20);
3665
+ transition: all 0.15s ease;
3666
+
3667
+ &:hover {
3668
+ border-color: var(--color-accent);
3669
+ }
3670
+
3671
+ &.active {
3672
+ background: var(--color-accent);
3673
+ border-color: var(--color-accent);
3674
+ color: white;
3675
+ }
3676
+ }
3677
+
3678
+ .explorer-display {
3679
+ display: grid;
3680
+ grid-template-columns: 1fr auto;
3681
+ gap: q(30);
3682
+ align-items: start;
3683
+ }
3684
+
3685
+ .explorer-metrics {
3686
+ display: grid;
3687
+ grid-template-columns: repeat(3, 1fr);
3688
+ gap: q(20);
3689
+ }
3690
+
3691
+ .metric-card {
3692
+ background: var(--color-bg);
3693
+ border: q(1) solid var(--color-border);
3694
+ padding: q(20);
3695
+ text-align: center;
3696
+
3697
+ h4 {
3698
+ font-size: q(12);
3699
+ line-height: q(15);
3700
+ text-transform: uppercase;
3701
+ letter-spacing: 0.05em;
3702
+ color: var(--color-text-muted);
3703
+ margin: 0 0 q(10);
3704
+ }
3705
+ }
3706
+
3707
+ .metric-main {
3708
+ font-family: var(--font-mono);
3709
+ font-size: q(28);
3710
+ line-height: q(35);
3711
+ font-weight: 700;
3712
+ margin-bottom: q(10);
3713
+ }
3714
+
3715
+ .type-card .metric-main {
3716
+ color: #2563eb;
3717
+ }
3718
+
3719
+ .line-card .metric-main {
3720
+ color: #d946ef;
3721
+ }
3722
+
3723
+ .lcm-card .metric-main {
3724
+ color: #16a34a;
3725
+ }
3726
+
3727
+ .metric-details {
3728
+ display: flex;
3729
+ justify-content: center;
3730
+ gap: q(15);
3731
+ font-size: q(12);
3732
+ line-height: q(15);
3733
+ font-family: var(--font-mono);
3734
+ color: var(--color-text-muted);
3735
+
3736
+ .aligned {
3737
+ color: #16a34a;
3738
+ font-weight: 500;
3739
+ }
3740
+ }
3741
+
3742
+ .explorer-preview {
3743
+ display: flex;
3744
+ align-items: center;
3745
+ justify-content: center;
3746
+ }
3747
+
3748
+ .preview-box {
3749
+ width: q(120);
3750
+ height: q(120);
3751
+ background: linear-gradient(
3752
+ 135deg,
3753
+ rgba(37, 99, 235, 0.2),
3754
+ rgba(217, 70, 239, 0.2)
3755
+ );
3756
+ border: q(2) solid var(--color-accent);
3757
+ display: flex;
3758
+ align-items: center;
3759
+ justify-content: center;
3760
+ transition: all 0.3s ease;
3761
+ position: relative;
3762
+ }
3763
+
3764
+ .preview-label {
3765
+ position: absolute;
3766
+ bottom: q(-30);
3767
+ font-size: q(12);
3768
+ line-height: q(15);
3769
+ color: var(--color-text-muted);
3770
+ }
3771
+
3772
+ // Grid Comparison
3773
+ .grid-comparison-large {
3774
+ background: var(--color-bg-subtle);
3775
+ border: q(1) solid var(--color-border);
3776
+ padding: q(30);
3777
+ margin: q(30) 0;
3778
+ }
3779
+
3780
+ .grid-row {
3781
+ display: grid;
3782
+ grid-template-columns: q(140) 1fr;
3783
+ gap: q(20);
3784
+ margin-bottom: q(20);
3785
+ align-items: center;
3786
+
3787
+ &.combined {
3788
+ margin-top: q(30);
3789
+ padding-top: q(30);
3790
+ border-top: q(2) dashed var(--color-border);
3791
+ }
3792
+ }
3793
+
3794
+ .grid-label {
3795
+ display: flex;
3796
+ flex-direction: column;
3797
+ gap: q(5);
3798
+ }
3799
+
3800
+ .label-title {
3801
+ font-weight: 600;
3802
+ font-size: q(14);
3803
+ line-height: q(20);
3804
+ }
3805
+
3806
+ .label-value {
3807
+ font-family: var(--font-mono);
3808
+ font-size: q(12);
3809
+ line-height: q(15);
3810
+ color: var(--color-text-muted);
3811
+ }
3812
+
3813
+ .grid-canvas {
3814
+ height: q(80);
3815
+ background: var(--color-bg);
3816
+ border: q(1) solid var(--color-border);
3817
+ position: relative;
3818
+ overflow: hidden;
3819
+ }
3820
+
3821
+ .grid-line {
3822
+ position: absolute;
3823
+ top: 0;
3824
+ bottom: 0;
3825
+ width: q(1);
3826
+
3827
+ &.type {
3828
+ background: rgba(37, 99, 235, 0.6);
3829
+ }
3830
+
3831
+ &.line-scale {
3832
+ background: rgba(217, 70, 239, 0.6);
3833
+ }
3834
+
3835
+ &.lcm {
3836
+ background: rgba(22, 163, 74, 0.9);
3837
+ width: q(2);
3838
+ }
3839
+ }
3840
+
3841
+ .grid-legend {
3842
+ display: flex;
3843
+ justify-content: center;
3844
+ gap: q(40);
3845
+ margin-top: q(20);
3846
+ padding-top: q(20);
3847
+ border-top: q(1) solid var(--color-border);
3848
+ }
3849
+
3850
+ .legend-item {
3851
+ display: flex;
3852
+ align-items: center;
3853
+ gap: q(10);
3854
+ font-size: q(14);
3855
+ line-height: q(20);
3856
+
3857
+ &.type .legend-color {
3858
+ background: #2563eb;
3859
+ }
3860
+
3861
+ &.line .legend-color {
3862
+ background: #d946ef;
3863
+ }
3864
+
3865
+ &.lcm .legend-color {
3866
+ background: #16a34a;
3867
+ }
3868
+ }
3869
+
3870
+ .legend-color {
3871
+ width: q(20);
3872
+ height: q(4);
3873
+ }
3874
+
3875
+ // Math Foundation
3876
+ .math-foundation {
3877
+ display: grid;
3878
+ gap: q(30);
3879
+ margin: q(30) 0;
3880
+ }
3881
+
3882
+ .foundation-card {
3883
+ background: var(--color-bg-subtle);
3884
+ border: q(1) solid var(--color-border);
3885
+ padding: q(30);
3886
+
3887
+ h3 {
3888
+ margin: 0 0 q(20);
3889
+ font-size: q(20);
3890
+ line-height: q(25);
3891
+ }
3892
+ }
3893
+
3894
+ .math-formula {
3895
+ background: var(--color-bg);
3896
+ padding: q(20);
3897
+ margin-bottom: q(20);
3898
+ text-align: center;
3899
+
3900
+ code {
3901
+ font-size: q(20);
3902
+ line-height: q(25);
3903
+ font-weight: 600;
3904
+ }
3905
+ }
3906
+
3907
+ .math-example {
3908
+ display: flex;
3909
+ flex-direction: column;
3910
+ gap: q(5);
3911
+ font-family: var(--font-mono);
3912
+ font-size: q(14);
3913
+ line-height: q(20);
3914
+ color: var(--color-text-muted);
3915
+
3916
+ strong {
3917
+ color: #16a34a;
3918
+ }
3919
+ }
3920
+
3921
+ // HCN Grid
3922
+ .hcn-grid {
3923
+ display: grid;
3924
+ grid-template-columns: repeat(auto-fit, minmax(q(180), 1fr));
3925
+ gap: q(20);
3926
+ margin-top: q(20);
3927
+ }
3928
+
3929
+ .hcn-item {
3930
+ background: var(--color-bg);
3931
+ border: q(1) solid var(--color-border);
3932
+ padding: q(20);
3933
+ text-align: center;
3934
+
3935
+ &.highlight {
3936
+ border-color: #16a34a;
3937
+ background: rgba(22, 163, 74, 0.05);
3938
+ }
3939
+ }
3940
+
3941
+ .hcn-number {
3942
+ display: block;
3943
+ font-family: var(--font-mono);
3944
+ font-size: q(24);
3945
+ line-height: q(30);
3946
+ font-weight: 700;
3947
+ color: var(--color-accent);
3948
+ margin-bottom: q(10);
3949
+ }
3950
+
3951
+ .hcn-divisors {
3952
+ display: block;
3953
+ font-family: var(--font-mono);
3954
+ font-size: q(12);
3955
+ line-height: q(15);
3956
+ color: var(--color-text-muted);
3957
+ margin-bottom: q(5);
3958
+ word-break: break-all;
3959
+ }
3960
+
3961
+ .hcn-count {
3962
+ display: block;
3963
+ font-size: q(12);
3964
+ line-height: q(15);
3965
+ color: var(--color-text-muted);
3966
+ font-weight: 500;
3967
+ }
3968
+
3969
+ .hcn-badge {
3970
+ display: inline-block;
3971
+ background: rgba(22, 163, 74, 0.1);
3972
+ color: #16a34a;
3973
+ padding: q(5) q(10);
3974
+ font-family: var(--font-mono);
3975
+ font-size: q(12);
3976
+ line-height: q(15);
3977
+ font-weight: 500;
3978
+ }
3979
+
3980
+ // Scale Table
3981
+ .scale-table {
3982
+ .lcm-row {
3983
+ background: rgba(22, 163, 74, 0.05);
3984
+ }
3985
+
3986
+ .aligned {
3987
+ color: #16a34a;
3988
+ font-weight: 600;
3989
+ }
3990
+
3991
+ .not-aligned {
3992
+ color: var(--color-text-muted);
3993
+ }
3994
+ }
3995
+
3996
+ // Function Grid
3997
+ .function-grid {
3998
+ display: grid;
3999
+ grid-template-columns: repeat(auto-fit, minmax(q(280), 1fr));
4000
+ gap: q(20);
4001
+ margin: q(30) 0;
4002
+ }
4003
+
4004
+ .function-card {
4005
+ background: var(--color-bg-subtle);
4006
+ border: q(1) solid var(--color-border);
4007
+ padding: q(25);
4008
+
4009
+ h4 {
4010
+ margin: 0 0 q(10);
4011
+ font-family: var(--font-mono);
4012
+ }
4013
+
4014
+ p {
4015
+ margin: 0 0 q(20);
4016
+ font-size: q(14);
4017
+ line-height: q(20);
4018
+ color: var(--color-text-muted);
4019
+ }
4020
+
4021
+ pre {
4022
+ margin: 0;
4023
+ padding: q(15);
4024
+ background: var(--color-bg);
4025
+ font-size: q(12);
4026
+ line-height: q(20);
4027
+ overflow-x: auto;
4028
+ }
4029
+ }
4030
+
4031
+ // Typography Demo (hybrid scale)
4032
+ .typography-demo {
4033
+ margin: q(30) 0;
4034
+ }
4035
+
4036
+ .type-specimen {
4037
+ border-bottom: q(1) solid var(--color-border);
4038
+ padding: q(20) 0;
4039
+ position: relative;
4040
+
4041
+ &:last-child {
4042
+ border-bottom: none;
4043
+ }
4044
+
4045
+ p {
4046
+ font-size: var(--type-size);
4047
+ line-height: var(--line-height);
4048
+ margin: 0;
4049
+ }
4050
+ }
4051
+
4052
+ .specimen-label {
4053
+ display: block;
4054
+ font-family: var(--font-mono);
4055
+ font-size: q(12);
4056
+ line-height: q(15);
4057
+ color: var(--color-text-muted);
4058
+ margin-bottom: q(10);
4059
+ }
4060
+
4061
+ // Benefits Grid
4062
+ .benefits-grid {
4063
+ display: grid;
4064
+ grid-template-columns: repeat(auto-fit, minmax(q(220), 1fr));
4065
+ gap: q(20);
4066
+ margin: q(30) 0;
4067
+ }
4068
+
4069
+ .benefit-card {
4070
+ background: var(--color-bg-subtle);
4071
+ border: q(1) solid var(--color-border);
4072
+ padding: q(25);
4073
+ text-align: center;
4074
+
4075
+ h4 {
4076
+ margin: 0 0 q(10);
4077
+ font-size: q(16);
4078
+ line-height: q(20);
4079
+ }
4080
+
4081
+ p {
4082
+ margin: 0;
4083
+ font-size: q(14);
4084
+ line-height: q(20);
4085
+ color: var(--color-text-muted);
4086
+ }
4087
+ }
4088
+
4089
+ .benefit-icon {
4090
+ font-size: q(32);
4091
+ line-height: q(40);
4092
+ margin-bottom: q(15);
4093
+ }
4094
+
4095
+ // Responsive for Scale Explorer
4096
+ @media (max-width: 768px) {
4097
+ .explorer-display {
4098
+ grid-template-columns: 1fr;
4099
+ }
4100
+
4101
+ .explorer-metrics {
4102
+ grid-template-columns: 1fr;
4103
+ }
4104
+
4105
+ .explorer-preview {
4106
+ order: -1;
4107
+ }
4108
+
4109
+ .grid-row {
4110
+ grid-template-columns: 1fr;
4111
+ }
4112
+
4113
+ .grid-label {
4114
+ flex-direction: row;
4115
+ justify-content: space-between;
4116
+ align-items: center;
4117
+ }
4118
+ }
4119
+
4120
+ // ============================================================================
4121
+ // Ratio Demo Styles
4122
+ // ============================================================================
4123
+
4124
+ .ratio-grid {
4125
+ display: grid;
4126
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
4127
+ gap: calc(var(--grid-unit) * 3);
4128
+ margin: calc(var(--grid-unit) * 4) 0;
4129
+ }
4130
+
4131
+ .ratio-card {
4132
+ border: 1px solid var(--color-border);
4133
+
4134
+ &__preview {
4135
+ background: var(--color-text);
4136
+ display: flex;
4137
+ align-items: center;
4138
+ justify-content: center;
4139
+ }
4140
+
4141
+ &__inner {
4142
+ color: var(--color-bg);
4143
+ font-family: var(--font-mono);
4144
+ font-size: 0.75rem;
4145
+ opacity: 0.6;
4146
+ }
4147
+
4148
+ &__info {
4149
+ padding: calc(var(--grid-unit) * 1.5);
4150
+ background: var(--color-bg);
4151
+ }
4152
+
4153
+ &__name {
4154
+ font-weight: 600;
4155
+ font-size: 0.875rem;
4156
+ margin: 0 0 calc(var(--grid-unit) * 0.5);
4157
+ }
4158
+
4159
+ &__value {
4160
+ font-family: var(--font-mono);
4161
+ font-size: 0.6875rem;
4162
+ color: var(--color-text-muted);
4163
+ margin: 0;
4164
+ }
4165
+ }
4166
+
4167
+ .ratio-table {
4168
+ width: 100%;
4169
+ border-collapse: collapse;
4170
+ margin: calc(var(--grid-unit) * 3) 0;
4171
+
4172
+ th,
4173
+ td {
4174
+ text-align: left;
4175
+ padding: calc(var(--grid-unit) * 1.5);
4176
+ border-bottom: 1px solid var(--color-border);
4177
+ }
4178
+
4179
+ th {
4180
+ font-size: 0.6875rem;
4181
+ font-weight: 600;
4182
+ text-transform: uppercase;
4183
+ letter-spacing: 0.05em;
4184
+ color: var(--color-text-muted);
4185
+ }
4186
+
4187
+ td {
4188
+ font-size: 0.875rem;
4189
+
4190
+ &:first-child {
4191
+ font-weight: 500;
4192
+ }
4193
+ }
4194
+
4195
+ code {
4196
+ font-family: var(--font-mono);
4197
+ font-size: 0.75rem;
4198
+ background: var(--color-bg-muted);
4199
+ padding: 0.2em 0.4em;
4200
+ }
4201
+ }
4202
+
4203
+ .use-case-grid {
4204
+ display: grid;
4205
+ grid-template-columns: repeat(3, 1fr);
4206
+ gap: calc(var(--grid-unit) * 2);
4207
+ margin: calc(var(--grid-unit) * 3) 0;
4208
+
4209
+ @media (max-width: 640px) {
4210
+ grid-template-columns: 1fr 1fr;
4211
+ }
4212
+ }
4213
+
4214
+ .use-case {
4215
+ text-align: center;
4216
+
4217
+ &__box {
4218
+ background: var(--color-bg-muted);
4219
+ border: 1px solid var(--color-border);
4220
+ margin-bottom: calc(var(--grid-unit) * 1);
4221
+ }
4222
+
4223
+ &__label {
4224
+ font-size: 0.75rem;
4225
+ font-weight: 500;
4226
+ }
4227
+
4228
+ &__ratio {
4229
+ font-family: var(--font-mono);
4230
+ font-size: 0.625rem;
4231
+ color: var(--color-text-muted);
4232
+ }
4233
+ }
4234
+
4235
+ // ============================================================================
4236
+ // Lorem / Typography Demo Styles
4237
+ // ============================================================================
4238
+
4239
+ .prose {
4240
+ max-width: 65ch;
4241
+
4242
+ p {
4243
+ font-size: 1rem;
4244
+ line-height: 1.75;
4245
+ margin-bottom: 1.5em;
4246
+ color: var(--color-text-muted);
4247
+
4248
+ &:first-of-type {
4249
+ font-size: 1.125rem;
4250
+ color: var(--color-text);
4251
+
4252
+ &::first-letter {
4253
+ font-size: 3.5rem;
4254
+ font-weight: 600;
4255
+ float: left;
4256
+ line-height: 1;
4257
+ margin-right: 0.5rem;
4258
+ margin-top: 0.1em;
4259
+ }
4260
+ }
4261
+ }
4262
+ }
4263
+
4264
+ .text-sample {
4265
+ border-left: 4px solid var(--color-text);
4266
+ padding-left: calc(var(--grid-unit) * 3);
4267
+ margin: calc(var(--grid-unit) * 4) 0;
4268
+
4269
+ &--quote {
4270
+ border-left-color: var(--color-accent);
4271
+ }
4272
+
4273
+ blockquote {
4274
+ font-size: 1.25rem;
4275
+ font-style: italic;
4276
+ margin: 0 0 calc(var(--grid-unit) * 1);
4277
+ color: var(--color-text);
4278
+ }
4279
+
4280
+ cite {
4281
+ font-size: 0.875rem;
4282
+ font-style: normal;
4283
+ color: var(--color-text-muted);
4284
+ }
4285
+ }
4286
+
4287
+ .type-comparison {
4288
+ display: grid;
4289
+ grid-template-columns: 1fr 1fr;
4290
+ gap: calc(var(--grid-unit) * 4);
4291
+ margin: calc(var(--grid-unit) * 4) 0;
4292
+
4293
+ @media (max-width: 768px) {
4294
+ grid-template-columns: 1fr;
4295
+ }
4296
+ }
4297
+
4298
+ .type-column {
4299
+ h4 {
4300
+ font-size: 0.6875rem;
4301
+ font-weight: 600;
4302
+ text-transform: uppercase;
4303
+ letter-spacing: 0.05em;
4304
+ color: var(--color-text-muted);
4305
+ margin-bottom: calc(var(--grid-unit) * 2);
4306
+ }
4307
+
4308
+ p {
4309
+ margin: 0;
4310
+ }
4311
+ }
4312
+
4313
+ // ============================================================================
4314
+ // Scale Demo Styles
4315
+ // ============================================================================
4316
+
4317
+ .type-line {
4318
+ display: flex;
4319
+ align-items: baseline;
4320
+ padding: calc(var(--grid-unit) * 1.5) 0;
4321
+ border-bottom: 1px solid var(--color-border);
4322
+
4323
+ &__label {
4324
+ font-family: var(--font-mono);
4325
+ font-size: 0.625rem;
4326
+ color: var(--color-text-muted);
4327
+ min-width: 100px;
4328
+ flex-shrink: 0;
4329
+ }
4330
+
4331
+ &__size {
4332
+ font-family: var(--font-mono);
4333
+ font-size: 0.625rem;
4334
+ color: var(--color-text-subtle);
4335
+ min-width: 60px;
4336
+ flex-shrink: 0;
4337
+ }
4338
+
4339
+ &__text {
4340
+ color: var(--color-text);
4341
+ font-weight: 400;
4342
+ }
4343
+ }
4344
+
4345
+ .rhythm-row {
4346
+ display: flex;
4347
+ align-items: flex-end;
4348
+ gap: calc(var(--grid-unit) * 1);
4349
+ margin: calc(var(--grid-unit) * 3) 0;
4350
+ }
4351
+
4352
+ .rhythm-block {
4353
+ background: var(--color-text);
4354
+ width: 48px;
4355
+
4356
+ &__label {
4357
+ font-family: var(--font-mono);
4358
+ font-size: 0.5625rem;
4359
+ color: var(--color-text-muted);
4360
+ text-align: center;
4361
+ margin-top: calc(var(--grid-unit) * 0.5);
4362
+ }
4363
+ }
4364
+
4365
+ .width-specimen {
4366
+ margin: calc(var(--grid-unit) * 3) 0;
4367
+ }
4368
+
4369
+ .width-line {
4370
+ display: flex;
4371
+ align-items: center;
4372
+ gap: calc(var(--grid-unit) * 2);
4373
+ padding: calc(var(--grid-unit) * 1.5) 0;
4374
+ border-bottom: 1px solid var(--color-border);
4375
+ }
4376
+
4377
+ .width-bar {
4378
+ height: 6px;
4379
+ background: var(--color-text);
4380
+ }
4381
+
4382
+ .width-label {
4383
+ font-family: var(--font-mono);
4384
+ font-size: 0.625rem;
4385
+ color: var(--color-text-muted);
4386
+ min-width: 100px;
4387
+ flex-shrink: 0;
4388
+ }
4389
+
4390
+ .modular-scale {
4391
+ margin: calc(var(--grid-unit) * 3) 0;
4392
+ }
4393
+
4394
+ .modular-item {
4395
+ display: flex;
4396
+ align-items: center;
4397
+ gap: calc(var(--grid-unit) * 2);
4398
+ padding: calc(var(--grid-unit) * 1.5) 0;
4399
+ border-bottom: 1px solid var(--color-border);
4400
+
4401
+ &__ratio {
4402
+ font-family: var(--font-mono);
4403
+ font-size: 0.625rem;
4404
+ color: var(--color-accent);
4405
+ min-width: 120px;
4406
+ flex-shrink: 0;
4407
+ }
4408
+
4409
+ &__bar {
4410
+ height: 16px;
4411
+ background: var(--color-text);
4412
+ }
4413
+ }
4414
+
4415
+ .grid-unit-demo {
4416
+ display: grid;
4417
+ grid-template-columns: repeat(8, 1fr);
4418
+ gap: 1px;
4419
+ background: var(--color-border);
4420
+ border: 1px solid var(--color-border);
4421
+ margin: calc(var(--grid-unit) * 3) 0;
4422
+ max-width: 320px;
4423
+
4424
+ &__cell {
4425
+ aspect-ratio: 1;
4426
+ background: var(--color-bg-muted);
4427
+ display: flex;
4428
+ align-items: center;
4429
+ justify-content: center;
4430
+ font-family: var(--font-mono);
4431
+ font-size: 0.5rem;
4432
+ color: var(--color-text-muted);
4433
+
4434
+ &--filled {
4435
+ background: var(--color-text);
4436
+ color: var(--color-bg);
4437
+ }
4438
+ }
4439
+ }
4440
+
4441
+ // ============================================================================
4442
+ // Utility Demo Styles
4443
+ // ============================================================================
4444
+
4445
+ .utility-grid {
4446
+ display: grid;
4447
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
4448
+ gap: calc(var(--grid-unit) * 2);
4449
+ margin: calc(var(--grid-unit) * 3) 0;
4450
+ }
4451
+
4452
+ .utility-box {
4453
+ background: var(--color-text);
4454
+ color: var(--color-bg);
4455
+ display: flex;
4456
+ align-items: center;
4457
+ justify-content: center;
4458
+ font-family: var(--font-mono);
4459
+ font-size: 0.625rem;
4460
+ font-weight: 500;
4461
+ min-height: 48px;
4462
+ text-align: center;
4463
+ }
4464
+
4465
+ .padding-demo {
4466
+ background: var(--color-bg-muted);
4467
+ border: 1px solid var(--color-border);
4468
+ }
4469
+
4470
+ .padding-inner {
4471
+ background: var(--color-text);
4472
+ color: var(--color-bg);
4473
+ font-family: var(--font-mono);
4474
+ font-size: 0.5625rem;
4475
+ text-align: center;
4476
+ padding: calc(var(--grid-unit) * 1);
4477
+ }
4478
+
4479
+ .margin-demo {
4480
+ background: var(--color-bg-muted);
4481
+ border: 1px dashed var(--color-border);
4482
+ display: inline-block;
4483
+ }
4484
+
4485
+ .margin-inner {
4486
+ background: var(--color-text);
4487
+ color: var(--color-bg);
4488
+ font-family: var(--font-mono);
4489
+ font-size: 0.5625rem;
4490
+ text-align: center;
4491
+ width: 48px;
4492
+ height: 32px;
4493
+ display: flex;
4494
+ align-items: center;
4495
+ justify-content: center;
4496
+ }
4497
+
4498
+ .gap-demo {
4499
+ display: flex;
4500
+ background: var(--color-bg-muted);
4501
+ border: 1px solid var(--color-border);
4502
+ padding: calc(var(--grid-unit) * 1);
4503
+ }
4504
+
4505
+ .gap-item {
4506
+ width: 24px;
4507
+ height: 24px;
4508
+ background: var(--color-text);
4509
+ }
4510
+
4511
+ .size-box {
4512
+ background: var(--color-text);
4513
+ }
4514
+
4515
+ .border-demo {
4516
+ width: 48px;
4517
+ height: 32px;
4518
+ border-style: solid;
4519
+ border-color: var(--color-text);
4520
+ background: var(--color-bg-muted);
4521
+ }
4522
+
4523
+ .radius-demo {
4524
+ width: 48px;
4525
+ height: 48px;
4526
+ background: var(--color-text);
4527
+ }
4528
+
4529
+ .inset-demo {
4530
+ position: relative;
4531
+ width: 80px;
4532
+ height: 60px;
4533
+ background: var(--color-bg-muted);
4534
+ border: 1px solid var(--color-border);
4535
+ }
4536
+
4537
+ .inset-item {
4538
+ position: absolute;
4539
+ width: 16px;
4540
+ height: 16px;
4541
+ background: var(--color-accent);
4542
+ }
4543
+
4544
+ .responsive-demo {
4545
+ background: var(--color-text);
4546
+ color: var(--color-bg);
4547
+ text-align: center;
4548
+ font-weight: 500;
4549
+ transition: all 0.3s ease;
4550
+
4551
+ p {
4552
+ margin: 0;
4553
+ max-width: none;
4554
+ }
4555
+ }
4556
+
4557
+ .scale-bar {
4558
+ height: 6px;
4559
+ background: var(--color-text);
4560
+ }
4561
+
4562
+ .scale-reference {
4563
+ display: flex;
4564
+ align-items: center;
4565
+ gap: calc(var(--grid-unit) * 2);
4566
+ padding: calc(var(--grid-unit) * 1.5) 0;
4567
+ border-bottom: 1px solid var(--color-border);
4568
+
4569
+ &__label {
4570
+ font-family: var(--font-mono);
4571
+ font-size: 0.6875rem;
4572
+ color: var(--color-text-muted);
4573
+ min-width: 100px;
4574
+ }
4575
+ }
4576
+
4577
+ .card-demo {
4578
+ border: 1px solid var(--color-text);
4579
+ background: var(--color-bg);
4580
+ max-width: 320px;
4581
+
4582
+ h4 {
4583
+ font-size: 1rem;
4584
+ margin: 0 0 calc(var(--grid-unit) * 1);
4585
+ }
4586
+
4587
+ p {
4588
+ font-size: 0.875rem;
4589
+ color: var(--color-text-muted);
4590
+ margin: 0 0 calc(var(--grid-unit) * 2);
4591
+ }
4592
+ }
4593
+
4594
+ .btn-demo {
4595
+ font-family: var(--font-sans);
4596
+ font-size: 0.75rem;
4597
+ font-weight: 600;
4598
+ text-transform: uppercase;
4599
+ letter-spacing: 0.05em;
4600
+ border: none;
4601
+ cursor: pointer;
4602
+
4603
+ &--primary {
4604
+ background: var(--color-text);
4605
+ color: var(--color-bg);
4606
+ }
4607
+
4608
+ &--secondary {
4609
+ background: var(--color-bg);
4610
+ color: var(--color-text);
4611
+ border: 1px solid var(--color-text);
4612
+ }
4613
+ }
4614
+
4615
+ .breakpoint-tag {
4616
+ display: inline-block;
4617
+ font-family: var(--font-mono);
4618
+ font-size: 0.5625rem;
4619
+ font-weight: 600;
4620
+ text-transform: uppercase;
4621
+ letter-spacing: 0.05em;
4622
+ background: var(--color-bg-muted);
4623
+ color: var(--color-text-muted);
4624
+ padding: 0.25em 0.5em;
4625
+ margin-right: calc(var(--grid-unit) * 0.5);
4626
+ border: 1px solid var(--color-border);
4627
+ }
4628
+
4629
+ // ============================================================================
4630
+ // Baseline Grid Demo Styles
4631
+ // ============================================================================
4632
+
4633
+ .baseline-demo {
4634
+ position: relative;
4635
+ border: 1px solid var(--color-border);
4636
+ margin: calc(var(--grid-unit) * 3) 0;
4637
+ }
4638
+
4639
+ .baseline-content {
4640
+ position: relative;
4641
+ z-index: 1;
4642
+ padding: calc(var(--grid-unit) * 3);
4643
+
4644
+ h3 {
4645
+ margin-top: 0;
4646
+ }
4647
+
4648
+ p {
4649
+ max-width: 45ch;
4650
+ }
4651
+ }
4652
+
4653
+ .toggle-btn {
4654
+ position: fixed;
4655
+ bottom: calc(var(--grid-unit) * 3);
4656
+ right: calc(var(--grid-unit) * 3);
4657
+ z-index: 10000;
4658
+ font-family: var(--font-sans);
4659
+ font-size: 0.6875rem;
4660
+ font-weight: 600;
4661
+ text-transform: uppercase;
4662
+ letter-spacing: 0.05em;
4663
+ padding: calc(var(--grid-unit) * 1) calc(var(--grid-unit) * 2);
4664
+ background: var(--color-text);
4665
+ color: var(--color-bg);
4666
+ border: none;
4667
+ cursor: pointer;
4668
+ transition: opacity 0.2s;
4669
+
4670
+ &:hover {
4671
+ opacity: 0.8;
4672
+ }
4673
+ }
4674
+
4675
+ .rhythm-example {
4676
+ margin: calc(var(--grid-unit) * 3) 0;
4677
+ }
4678
+
4679
+ .rhythm-spec {
4680
+ display: flex;
4681
+ align-items: baseline;
4682
+ gap: calc(var(--grid-unit) * 4);
4683
+ margin-top: calc(var(--grid-unit) * 1);
4684
+
4685
+ &__item {
4686
+ font-family: var(--font-mono);
4687
+ font-size: 0.625rem;
4688
+ color: var(--color-text-muted);
4689
+ }
4690
+ }