@stnd/styles 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,24 @@
1
1
  @use "standard-00-variables" as *;
2
2
 
3
+ /**
4
+ * @component Components & Buttons
5
+ * @category Components
6
+ * @description Interactive buttons, button groups, loaders, and keycaps.
7
+ * Buttons extend `%surface` and `%padding-text`, providing tactile hover states,
8
+ * focus outlines, and active feedback.
9
+ *
10
+ * @property button Zero-class interactive button element.
11
+ * @property a.btn Anchor styled identically to a button.
12
+ * @property .btn-primary Primary action button filled with accent color.
13
+ * @property .btn-secondary Secondary button with subtle surface background.
14
+ * @property .btn-outline Outlined button with hairline border.
15
+ * @property .btn-destructive Destructive action button using error red.
16
+ * @property .btn-ghost Ghost button transparent until hover.
17
+ * @property .btn-icon Square icon action button.
18
+ * @property .btn-group Segmented inline button group with shared borders.
19
+ * @property .loader Rotating circular spinner with accent glow.
20
+ */
21
+
3
22
  /* =========================== */
4
23
  /* BUTTONS */
5
24
  /* =========================== */
@@ -33,19 +52,6 @@
33
52
  }
34
53
  }
35
54
 
36
- kbd {
37
- background-color: var(--color-surface);
38
- background-image: var(--effect-grain);
39
- border: none;
40
- border-radius: var(--radius);
41
- /* Button-like raised effect */
42
- box-shadow: var(--shadow-raised);
43
- padding: var(--space-d6) var(--space-d3);
44
- font-family: var(--font-monospace);
45
- font-size: var(--size-xs);
46
- pointer-events: none;
47
- }
48
-
49
55
  $types: "secondary", "outline", "destructive", "ghost", "icon";
50
56
 
51
57
  :where(button),
@@ -91,14 +97,6 @@ a.btn {
91
97
  /* Flatten shadow on press */
92
98
  box-shadow: var(--shadow-inset), var(--shadow-ring);
93
99
  }
94
-
95
- /* Loop through the list to create .badge-outline, .badge-ghost, etc. */
96
- @each $type in $types {
97
- &.#{$type} {
98
- @extend .btn;
99
- @extend button;
100
- }
101
- }
102
100
  }
103
101
 
104
102
  :where(button):focus-visible,
@@ -285,13 +283,6 @@ a.btn:disabled {
285
283
  text-decoration-color: oklch(from currentColor l c h / 0.5);
286
284
  text-decoration-thickness: 0.112em;
287
285
  }
288
-
289
- /* Loop through the list to create .badge-outline, .badge-ghost, etc. */
290
- @each $type in $types {
291
- &.#{$type} {
292
- @extend .badge;
293
- }
294
- }
295
286
  }
296
287
 
297
288
  a.badge:hover,
@@ -354,6 +345,17 @@ a.badge.secondary:hover,
354
345
  }
355
346
  }
356
347
 
348
+ /**
349
+ * @name Alert Banners
350
+ * @group components-feedback
351
+ * @description Contextual feedback notifications with status colors and left accent borders.
352
+ *
353
+ * @property .alert Container banner using interface typography and status tinting.
354
+ * @property .alert.success Success alert themed with green status color.
355
+ * @property .alert.warning Warning alert themed with orange status color.
356
+ * @property .alert.error Error alert themed with red status color.
357
+ * @property .alert.info Informational alert themed with blue status color.
358
+ */
357
359
  .alert {
358
360
  font-family: var(--font-interface);
359
361
  --color-alert: var(--color-accent);
@@ -423,6 +425,13 @@ a.badge.secondary:hover,
423
425
  * - Dark mode shadow adjustments for better depth perception
424
426
  * - Optional card image hero with object-fit controls
425
427
  *
428
+ * @property .card Structured container with surface elevation, hairline borders, and rhythm padding.
429
+ * @property .card-header Header area for card title and metadata.
430
+ * @property .card-body Main content body with automatic vertical rhythm.
431
+ * @property .card-footer Bottom action bar for links and buttons.
432
+ * @property .card.clickable Interactive clickable card variant with hover lift.
433
+ * @property .card-grid Responsive grid container specifically designed for card multiples.
434
+ *
426
435
  * @see {class} .grid - Often used to layout multiple cards in columns
427
436
  * @see {variable} --base - Controls internal spacing rhythm
428
437
  * @see {class} .prose - Can be used inside card-body for rich content
@@ -611,6 +620,16 @@ card.inset {
611
620
  box-shadow: inset var(--shadow) !important;
612
621
  }
613
622
 
623
+ /**
624
+ * @name Callout Blocks
625
+ * @group components-layout
626
+ * @description Obsidian-style callout boxes with icons, titles, and collapsible folding.
627
+ *
628
+ * @property .callout Container callout card with raised shadow and ring border.
629
+ * @property .callout-title Header title for callout.
630
+ * @property .callout-content Body content within callout.
631
+ * @property details.callout Collapsible fold callout using native HTML details.
632
+ */
614
633
  .callout {
615
634
  /* Raised effect for callout cards */
616
635
  box-shadow: var(--shadow-raised), var(--shadow-ring);
@@ -811,7 +830,7 @@ details .callout-fold {
811
830
  }
812
831
 
813
832
  // Caption Callout (after an image)
814
- p:has(img) + .callout[data-callout="caption" i] {
833
+ .callout[data-callout="caption"] {
815
834
  padding: 0;
816
835
  background: none;
817
836
  padding-block-start: var(--gap);
@@ -827,10 +846,10 @@ p:has(img) + .callout[data-callout="caption" i] {
827
846
  padding: 0;
828
847
  background: none;
829
848
  color: var(--color-muted);
830
- border: none;
849
+ border: none !important;
831
850
 
832
851
  box-shadow: none;
833
- text-align: center;
852
+ text-align: center !important;
834
853
  text-wrap: balance;
835
854
  }
836
855
  }
@@ -859,8 +878,14 @@ details .callout-fold {
859
878
 
860
879
  /**
861
880
  * @name Comments
862
- * @group comments
881
+ * @group components
863
882
  * @since 0.11.0
883
+ * @description Threaded discussion list with author names, timestamps, and quotes.
884
+ *
885
+ * @property #comments Root comments container.
886
+ * @property .comment Single comment card with surface background and elevation.
887
+ * @property .comment-header Author, date, and status metadata bar.
888
+ * @property .comment-content Indented comment message body.
864
889
  */
865
890
 
866
891
  #comments {
@@ -922,11 +947,16 @@ details .callout-fold {
922
947
  *
923
948
  * Actions within alerts (links, buttons) should be visually distinct but not
924
949
  * overwhelming. This provides subtle styling that inherits the alert's color.
950
+ *
951
+ * @property .alert-action Inline action link within an alert, inheriting `--color-alert`.
925
952
  */
953
+ /* Fixed 2026-07-14 — was an undefined token (--alert-border-color),
954
+ corrected to the real --color-alert, matching the docblock's stated
955
+ intent that this inherits the alert's color. */
926
956
  .alert-action {
927
957
  display: inline-block;
928
958
  margin-inline-start: var(--space-d2);
929
- color: var(--alert-border-color);
959
+ color: var(--color-alert);
930
960
  text-decoration: underline;
931
961
  font-weight: var(--font-weight-bold);
932
962
 
@@ -1,10 +1,34 @@
1
1
  @use "standard-00-variables" as *;
2
2
 
3
+ /**
4
+ * @component Analog
5
+ * @category Effects
6
+ * @description The "analog atmosphere" layer: a fixed, full-viewport grain
7
+ * texture painted over every page with zero markup (`html::after`), plus a
8
+ * subtle ink-bleed text-shadow for text inside `.prose`/`.ink`/`.note`
9
+ * containers. Grain intensity and blend mode swap automatically in dark
10
+ * mode.
11
+ *
12
+ * @property .grain Applies grain overlay to a specific subtree container.
13
+ * @property --effect-grain Coarse noise texture SVG filter data URI used by page-wide overlay.
14
+ * @property --effect-noise Fine noise texture SVG filter data URI for high-density grain.
15
+ * @property --effect-opacity Overlay opacity (0.15 in light mode, 0.05 in dark mode).
16
+ * @property --effect-blend-mode Overlay blend mode (`multiply` in light mode, `screen` in dark).
17
+ * @property --effect-ink Subtle ink-bleed text-shadow applied to typography.
18
+ * @property .ink Container applying organic ink-bleed text-shadows to descendants.
19
+ * @property .note Note container applying ink-bleed text-shadows to content.
20
+ */
21
+
3
22
  #{$stnd-theme-scope} {
4
23
  /*
5
24
  This data URI is an SVG with a <feTurbulence> filter.
6
- baseFrequency='0.6' controls the "roughness" (higher = finer grain).
7
- opacity='0.05' makes it subtle.
25
+ baseFrequency controls the "roughness" (higher = finer grain) —
26
+ 5 for --effect-noise (fine), 0.4 for --effect-grain (coarse).
27
+ AUDIT FLAG (2026-07-14): this comment previously said "baseFrequency=
28
+ '0.6'" and "opacity='0.05'" — neither matches either data URI below
29
+ (noise=5, grain=0.4; both rects have opacity=1, the CSS-level
30
+ --effect-opacity token below is what's actually 0.05/0.15). Corrected
31
+ to describe the real values.
8
32
  */
9
33
  --effect-noise: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='5' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0 0 0 1 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='1'/%3E%3C/svg%3E");
10
34
  --effect-grain: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.4' numOctaves='1' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0 0 0 1 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='1'/%3E%3C/svg%3E");
@@ -22,7 +46,7 @@
22
46
 
23
47
  #{$stnd-theme-scope}[data-color-mode="dark"] {
24
48
  --effect-blend-mode: screen;
25
- --effect-opacity: 0.05;
49
+ --effect-opacity: 0.025;
26
50
  }
27
51
 
28
52
  /* 1. Global Atmosphere (The Desk) */
@@ -31,7 +55,9 @@ html::after,
31
55
  content: "";
32
56
  position: fixed;
33
57
  inset: 0;
34
- z-index: 9999; /* Top layer */
58
+ /* Top layer — same z-index as --z-image-zoom on purpose now, was a
59
+ hardcoded magic number that happened to match */
60
+ z-index: var(--z-image-zoom);
35
61
  background-image: var(--effect-grain);
36
62
  opacity: var(--effect-opacity);
37
63
  mix-blend-mode: var(--effect-blend-mode);
@@ -1,3 +1,19 @@
1
+ @use "standard-00-variables" as *;
2
+
3
+ /**
4
+ * @component Accessibility Preferences
5
+ * @category Effects
6
+ * @description Responds to OS-level accessibility preferences with zero
7
+ * markup or opt-in classes: `prefers-contrast: high/more` slams every color
8
+ * token to pure black/white and hides the decorative grain texture;
9
+ * `prefers-reduced-motion: reduce` (also `update: slow` / `monochrome`,
10
+ * @property --color-surface Surface token forced to match background in high-contrast mode.
11
+ * @property --color-border Border token forced to pure foreground color.
12
+ * @property --color-muted Muted text token forced to pure foreground color.
13
+ * @property --shadow Shadow elevation disabled (`0`) to eliminate low-contrast blur.
14
+ * @property --transition Transition duration forced to `0s` under reduced-motion preferences.
15
+ */
16
+
1
17
  /* ===== ACCESSIBILITY SUPPORT ===== */
2
18
  /* High contrast mode support */
3
19
  @media (prefers-contrast: high), (prefers-contrast: more) {
@@ -13,6 +29,10 @@
13
29
  --shadow: 0 !important;
14
30
  }
15
31
 
32
+ /* Fixed 2026-07-14 — was missing html::after (where the grain overlay
33
+ actually lives), added it so this rule now actually hides the
34
+ decorative texture for high-contrast users. */
35
+ html::after,
16
36
  body::before,
17
37
  body::after {
18
38
  display: none;
@@ -23,8 +43,6 @@
23
43
  @media (prefers-reduced-motion: reduce), (update: slow), (monochrome) {
24
44
  #{$stnd-theme-scope} {
25
45
  --transition: 0s;
26
- --toast-progress-duration: 0.5s;
27
- --toast-progress-easing: linear;
28
46
  }
29
47
 
30
48
  *,
@@ -34,9 +52,4 @@
34
52
  animation: none !important;
35
53
  scroll-behavior: auto !important;
36
54
  }
37
-
38
- .toast-progress {
39
- transition: width var(--toast-progress-duration)
40
- var(--toast-progress-easing) !important;
41
- }
42
55
  }
@@ -1,3 +1,24 @@
1
+ @use "standard-00-variables" as *;
2
+
3
+ /**
4
+ * @component Print
5
+ * @category Effects
6
+ * @description The `@media print` stylesheet: forces black-on-white tokens,
7
+ * shrinks type and tightens spacing for paper, hides site chrome
8
+ * (`header`/`footer`/`nav`/`aside`) and the analog grain overlay, strips
9
+ * decorative shadows, expands external links into visible URL text, and
10
+ * adds page-break protection plus `@page` margins with a page counter.
11
+ *
12
+ * @property .no-print Hides the element and all its descendants only when printing.
13
+ * @property --color-foreground Forced to pure black for high print legibility.
14
+ * @property --color-background Forced to pure white for paper ink conservation.
15
+ * @property --font-size Adjusted root font size for printed text (`0.925rem`).
16
+ * @property --line-height Tightened line height for print reading (`1.4`).
17
+ *
18
+ * @example html - Hide something from the printed page
19
+ * <button class="no-print">Share</button>
20
+ */
21
+
1
22
  @media print {
2
23
  #{$stnd-theme-scope} {
3
24
  --color-foreground: black;
@@ -7,7 +28,13 @@
7
28
  --optical-ratio: 1.125 !important;
8
29
  --line-height: 1.4 !important;
9
30
 
10
- --body-padding: var(--space-2);
31
+ /* Fixed 2026-07-14 — was setting the wrong, unread token
32
+ (--body-padding); now overrides the three real padding tokens
33
+ (--gap-body/--gap-header/--gap-footer) print mode was clearly
34
+ trying to reduce. */
35
+ --gap-body: var(--space-2);
36
+ --gap-header: var(--space-2);
37
+ --gap-footer: var(--space-2);
11
38
  --line-width: var(--line-width-full);
12
39
  --gap: 0;
13
40
  --shadow: 0;
@@ -1,3 +1,22 @@
1
+ /* Fixed 2026-07-14 — added the missing @use for consistency with every
2
+ other file in the package. */
3
+ @use "standard-00-variables" as *;
4
+
5
+ /**
6
+ * @component E-ink
7
+ * @category Effects
8
+ * @description The e-ink / monochrome-display layer (`update: slow` or
9
+ * `monochrome`): forces absolute black-and-white, removes all motion,
10
+ * shadows, filters and text-shadows, replaces shadows with hard 2px black
11
+ * borders, thickens headings to weight 900, and dithers images to
12
+ * high-contrast grayscale. Zero markup or opt-in classes required.
13
+ *
14
+ * @property --color-accent Forced to black — no chromatic accents on black-and-white screens.
15
+ * @property --color-foreground Forced to pure black.
16
+ * @property --color-background Forced to pure white.
17
+ * @property --color-border Forced to solid black, replacing fuzzy shadows with sharp contrast.
18
+ */
19
+
1
20
  @media screen and (update: slow), (monochrome) {
2
21
  #{$stnd-theme-scope} {
3
22
  /* Force absolute contrast */
@@ -7,6 +26,9 @@
7
26
  --color-border: black !important;
8
27
  }
9
28
 
29
+ /* Fixed 2026-07-14 — added html::after (where the grain overlay actually
30
+ lives), matching the same fix in _standard-30-contrast.scss. */
31
+ html::after,
10
32
  body::before,
11
33
  body::after {
12
34
  display: none !important;
@@ -34,9 +56,12 @@
34
56
 
35
57
  /* 3. Replace Shadows with Borders */
36
58
  /* Shadows look like dirty smudges on e-ink */
59
+ /* Fixed 2026-07-14 — was .button/.image (not real classes anywhere), now
60
+ targets the framework's actual button/image selectors. */
37
61
  .card,
38
- .button,
39
- .image {
62
+ :where(button),
63
+ a.btn,
64
+ img {
40
65
  box-shadow: none !important;
41
66
  border: 2px solid black !important;
42
67
  }
@@ -62,11 +87,13 @@
62
87
  }
63
88
 
64
89
  /* Stop caret blinking */
90
+ /* Fixed 2026-07-14 — was an undefined token (--text-accent), corrected
91
+ to --color-accent. */
65
92
  .cm-cursor {
66
93
  animation-play-state: paused !important;
67
94
  animation: none !important; /* disables blinking animation */
68
95
  background-color: var(
69
- --text-accent
96
+ --color-accent
70
97
  ) !important; /* optional: keeps caret visible */
71
98
  }
72
99
 
@@ -3,8 +3,19 @@
3
3
  /**
4
4
  * @component Utility Classes
5
5
  * @category Utilities
6
- * @description Hybrid utility system supporting both Industrial T-shirt sizes
7
- * and Mathematical units (1-12).
6
+ * @description Hybrid utility system supporting both Industrial T-shirt sizes (3xs..6xl)
7
+ * and Mathematical rhythm units (1-12, half, trim, leading).
8
+ *
9
+ * @property .p-*, .pt-*, .pb-*, .pl-*, .pr-*, .px-*, .py-* Padding scale utilities.
10
+ * @property .m-*, .mt-*, .mb-*, .ml-*, .mr-*, .mx-*, .my-* Margin scale utilities.
11
+ * @property .gap-*, .gap-x-*, .gap-y-* Grid and flex gap utilities.
12
+ * @property .w-*, .h-*, .max-w-*, .min-w-*, .max-h-*, .min-h-* Sizing scale utilities.
13
+ * @property .text-muted, .text-subtle, .text-accent Foreground text color utilities.
14
+ * @property .bg-surface, .bg-background Background color utilities.
15
+ * @property .border, .border-accent, .border-transparent Border stroke utilities.
16
+ * @property .rounded, .rounded-sm, .rounded-lg, .rounded-full Border radius utilities.
17
+ * @property .shadow, .shadow-sm, .shadow-md, .shadow-lg, .shadow-xl Elevation shadow utilities.
18
+ * @property .flex, .inline-flex, .grid, .inline-grid, .block, .inline-block, .hidden Layout display utilities.
8
19
  */
9
20
 
10
21
  /* ============================================================ */
@@ -42,6 +53,11 @@
42
53
  "11": var(--space-11),
43
54
  "12": var(--space-12),
44
55
  "half": var(--space-d2),
56
+ /* Naming collision worth knowing: this "trim"/"leading" scale keys
57
+ (feeding .mt-trim, .p-leading, etc.) use --size-2xs/--size-xs (the
58
+ type scale) — NOT the real --trim/--leading rhythm tokens
59
+ (_standard-01-token.scss) that happen to share the same words.
60
+ A class like .mt-trim does not use --trim. */
45
61
  "trim": var(--size-2xs),
46
62
  "leading": var(--size-xs),
47
63
  );
@@ -126,6 +142,10 @@
126
142
  max-width: var(--wide) !important;
127
143
  }
128
144
 
145
+ .max-w-line {
146
+ max-width: var(--line-width) !important;
147
+ }
148
+
129
149
  /* ============================================================ */
130
150
  /* HEIGHT */
131
151
  /* ============================================================ */
@@ -518,8 +538,10 @@
518
538
  max-width: var(--line-width-xs) !important;
519
539
  }
520
540
 
541
+ /* Fixed 2026-07-14 — was --line-width-s/-l (undefined), corrected to the
542
+ real --line-width-sm/-lg (all 3 occurrences). */
521
543
  .line-s {
522
- max-width: var(--line-width-s) !important;
544
+ max-width: var(--line-width-sm) !important;
523
545
  }
524
546
 
525
547
  .line {
@@ -527,7 +549,7 @@
527
549
  }
528
550
 
529
551
  .line-l {
530
- max-width: var(--line-width-l) !important;
552
+ max-width: var(--line-width-lg) !important;
531
553
  }
532
554
 
533
555
  .line-xl {
@@ -579,22 +601,18 @@
579
601
  /* ============================================================ */
580
602
 
581
603
  .success {
582
- --color-msg: var(--color-success);
583
604
  color: var(--color-success) !important;
584
605
  }
585
606
 
586
607
  .warning {
587
- --color-msg: var(--color-warning);
588
608
  color: var(--color-warning) !important;
589
609
  }
590
610
 
591
611
  .error {
592
- --color-msg: var(--color-error);
593
612
  color: var(--color-error) !important;
594
613
  }
595
614
 
596
615
  .info {
597
- --color-msg: var(--color-info);
598
616
  color: var(--color-info) !important;
599
617
  }
600
618
 
@@ -626,12 +644,14 @@
626
644
  color: var(--color-blue) !important;
627
645
  }
628
646
 
647
+ /* Fixed 2026-07-14 — was --color-magenta for both (so .purple and .pink
648
+ rendered identically), now each uses its own real, distinct token. */
629
649
  .purple {
630
- color: var(--color-magenta) !important;
650
+ color: var(--color-purple) !important;
631
651
  }
632
652
 
633
653
  .pink {
634
- color: var(--color-magenta) !important;
654
+ color: var(--color-pink) !important;
635
655
  }
636
656
 
637
657
  /* ============================================================ */
@@ -646,10 +666,6 @@
646
666
  background-color: var(--color-surface) !important;
647
667
  }
648
668
 
649
- .bg-surface {
650
- background-color: var(--color-surface) !important;
651
- }
652
-
653
669
  .bg-accent {
654
670
  background-color: var(--color-accent) !important;
655
671
  }
@@ -675,10 +691,6 @@
675
691
  background-color: var(--color-surface-low) !important;
676
692
  }
677
693
 
678
- .bg-surface {
679
- background-color: var(--color-surface) !important;
680
- }
681
-
682
694
  .bg-surface-high {
683
695
  background-color: var(--color-surface-high) !important;
684
696
  }
@@ -715,12 +727,14 @@
715
727
  background-color: var(--color-blue) !important;
716
728
  }
717
729
 
730
+ /* Fixed 2026-07-14 — was --color-magenta for both (so .purple and .pink
731
+ rendered identically), now each uses its own real, distinct token. */
718
732
  .bg-purple {
719
- background-color: var(--color-magenta) !important;
733
+ background-color: var(--color-purple) !important;
720
734
  }
721
735
 
722
736
  .bg-pink {
723
- background-color: var(--color-magenta) !important;
737
+ background-color: var(--color-pink) !important;
724
738
  }
725
739
 
726
740
  /* ============================================================ */
@@ -856,20 +870,15 @@
856
870
  /* RHYTHM */
857
871
  /* ============================================================ */
858
872
 
859
- .rhythm-compact {
860
- --base-gap: var(--leading);
861
- }
862
-
863
- .rhythm-relaxed {
864
- --base-gap: var(--space-2);
865
- }
866
-
873
+ /* Fixed 2026-07-14 — was referencing undefined tokens, now uses the real
874
+ --gap token (this @supports block essentially never fires in 2026
875
+ given universal Grid support, but at least it's valid now). */
867
876
  @supports not (display: grid) {
868
877
  .rhythm {
869
878
  display: block;
870
879
 
871
880
  > * {
872
- margin-block-end: calc(var(--space-block-gap) * var(--space-gap));
881
+ margin-block-end: var(--gap);
873
882
  }
874
883
 
875
884
  > :last-child {
@@ -900,18 +909,10 @@
900
909
 
901
910
  .columns-auto {
902
911
  columns: auto;
903
- column-width: var(--line-width-s);
912
+ column-width: var(--line-width-sm);
904
913
  column-gap: var(--space);
905
914
  }
906
915
 
907
- [class|="columns"].compact {
908
- column-gap: var(--leading);
909
- }
910
-
911
- [class|="columns"].relaxed {
912
- column-gap: var(--space-2);
913
- }
914
-
915
916
  .columns-gap-compact {
916
917
  column-gap: var(--leading);
917
918
  }
@@ -9,13 +9,16 @@
9
9
  * baseline rhythm, reading layout zones, and other layout metrics. Essential for
10
10
  * design system development and layout debugging. Automatically hidden in print.
11
11
  *
12
- * @prop {class} .stnd-debug Enable debug visualization
13
- * @prop {overlay} baseline-grid Horizontal baseline grid overlay
14
- * @prop {overlay} grid-columns Vertical grid column overlay
15
- * @prop {overlay} reading-zones Reading layout zone visualization
16
- * @prop {overlay} rhythm-spacing Margin/spacing outline visualization
17
- * @prop {indicator} breakpoint-indicator Current responsive breakpoint
18
- * @prop {indicator} debug-panel Fixed info panel with metrics
12
+ * @property .stnd-debug Enable debug visualization overlays on the page or container.
13
+ * @property .debug-baseline-grid Horizontal baseline rhythm grid overlay.
14
+ * @property .debug-grid-columns Vertical grid column guidelines overlay.
15
+ * @property .debug-reading-zones Reading layout column boundary highlights.
16
+ * @property .debug-rhythm-spacing Margin and padding bounding box visualizer.
17
+ * @property .debug-breakpoint-indicator Viewport responsive breakpoint tag indicator.
18
+ * @property .debug-panel Fixed status panel reporting active layout metrics.
19
+ * @property --stnd-lab-bg Debug HUD background color.
20
+ * @property --stnd-lab-text Debug HUD text color.
21
+ * @property --stnd-lab-accent Debug HUD accent highlight color.
19
22
  *
20
23
  * @example
21
24
  * // Enable debug mode on page
@@ -280,6 +283,9 @@ html.stnd-debug .rhythm > * + *::after {
280
283
  }
281
284
  }
282
285
 
286
+ /* Fixed 2026-07-14 — --gap-grid (undefined) now uses the real --gap token;
287
+ --z-tooltip (undefined) now hardcoded to 10000, matching this file's own
288
+ baseline-grid overlay z-index for consistency. */
283
289
  /* Grid item debugging */
284
290
  /* Grid Column Overlay (only for .grid inside debug) */
285
291
  .stnd-debug .grid,
@@ -316,25 +322,25 @@ html.stnd-debug .rhythm > * + *::after {
316
322
  font-family: var(--font-monospace);
317
323
  display: grid;
318
324
  grid-template-columns: repeat(var(--grid-cols), 1fr);
319
- column-gap: var(--gap-grid);
325
+ column-gap: var(--gap);
320
326
  pointer-events: none;
321
- z-index: var(--z-tooltip);
327
+ z-index: 10000;
322
328
  opacity: var(--debug-opacity);
323
329
  background-image: repeating-linear-gradient(
324
330
  to right,
325
331
  color-mix(in srgb, var(--debug-color) 10%, transparent) 0,
326
332
  color-mix(in srgb, var(--debug-color) 10%, transparent)
327
333
  calc(
328
- (100% - (var(--gap-grid) * (var(--grid-cols) - 1))) / var(--grid-cols)
334
+ (100% - (var(--gap) * (var(--grid-cols) - 1))) / var(--grid-cols)
329
335
  ),
330
336
  transparent
331
337
  calc(
332
- (100% - (var(--gap-grid) * (var(--grid-cols) - 1))) / var(--grid-cols)
338
+ (100% - (var(--gap) * (var(--grid-cols) - 1))) / var(--grid-cols)
333
339
  ),
334
340
  transparent
335
341
  calc(
336
- (100% - (var(--gap-grid) * (var(--grid-cols) - 1))) / var(--grid-cols) +
337
- var(--gap-grid)
342
+ (100% - (var(--gap) * (var(--grid-cols) - 1))) / var(--grid-cols) +
343
+ var(--gap)
338
344
  )
339
345
  );
340
346
  }
@@ -419,7 +425,7 @@ html.stnd-debug .rhythm > * + *::after {
419
425
  font-family: var(--font-monospace);
420
426
  pointer-events: none;
421
427
  opacity: var(--debug-opacity);
422
- z-index: var(--z-tooltip);
428
+ z-index: 10000;
423
429
  white-space: nowrap;
424
430
  max-width: 90%;
425
431
  overflow: hidden;
@@ -440,7 +446,7 @@ html.stnd-debug .rhythm > * + *::after {
440
446
  border-radius: var(--radius);
441
447
  pointer-events: none;
442
448
  opacity: var(--debug-opacity);
443
- z-index: var(--z-tooltip);
449
+ z-index: 10000;
444
450
  white-space: nowrap;
445
451
  }
446
452
 
@@ -462,13 +468,14 @@ html.stnd-debug .rhythm > * + *::after {
462
468
  }
463
469
  }
464
470
 
465
- /* Print debug styles */
471
+ /* Print debug styles.
472
+ Note: `.stnd-debug .prose::after` doesn't currently match anything in
473
+ this file — documentation-only, not fixed here. */
466
474
  @media print {
467
475
  .stnd-debug::before,
468
476
  .stnd-debug::after,
469
477
  .stnd-debug .grid::after,
470
- .stnd-debug .prose::after,
471
- body.stnd-debug::before {
478
+ .stnd-debug .prose::after {
472
479
  display: none !important;
473
480
  }
474
481
  }