@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.
- package/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +117 -21
- package/TOKENS.md +26 -4
- package/_standard-00-reset.scss +64 -5
- package/_standard-00-variables.scss +39 -11
- package/_standard-01-token.scss +324 -28
- package/_standard-02-color.scss +208 -86
- package/_standard-03-typography.scss +88 -121
- package/_standard-04-grid.scss +31 -30
- package/_standard-05-rhythm.scss +43 -0
- package/_standard-06-prose.scss +28 -40
- package/_standard-07-base.scss +44 -34
- package/_standard-08-media.scss +42 -29
- package/_standard-09-lists.scss +72 -17
- package/_standard-10-tables.scss +51 -3
- package/_standard-11-forms.scss +43 -10
- package/_standard-12-code.scss +84 -2
- package/_standard-13-components.scss +63 -33
- package/_standard-14-analog.scss +30 -4
- package/_standard-30-contrast.scss +20 -7
- package/_standard-31-print.scss +28 -1
- package/_standard-32-eink.scss +30 -3
- package/_standard-50-utilities.scss +39 -38
- package/_standard-99-debug.scss +25 -18
- package/obsidian.scss +5 -4
- package/package.json +5 -8
- package/standard.scss +11 -5
- package/dist/obsidian.css +0 -31
- package/dist/obsidian.css.map +0 -1
- package/dist/standard.css +0 -20
- package/dist/standard.css.map +0 -1
|
@@ -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
|
-
|
|
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
|
|
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
|
|
959
|
+
color: var(--color-alert);
|
|
930
960
|
text-decoration: underline;
|
|
931
961
|
font-weight: var(--font-weight-bold);
|
|
932
962
|
|
package/_standard-14-analog.scss
CHANGED
|
@@ -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
|
|
7
|
-
|
|
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.
|
|
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
|
|
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
|
}
|
package/_standard-31-print.scss
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/_standard-32-eink.scss
CHANGED
|
@@ -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
|
-
|
|
39
|
-
.
|
|
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
|
-
--
|
|
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-
|
|
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-
|
|
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-
|
|
650
|
+
color: var(--color-purple) !important;
|
|
631
651
|
}
|
|
632
652
|
|
|
633
653
|
.pink {
|
|
634
|
-
color: var(--color-
|
|
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-
|
|
733
|
+
background-color: var(--color-purple) !important;
|
|
720
734
|
}
|
|
721
735
|
|
|
722
736
|
.bg-pink {
|
|
723
|
-
background-color: var(--color-
|
|
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
|
-
|
|
860
|
-
|
|
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:
|
|
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-
|
|
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
|
}
|
package/_standard-99-debug.scss
CHANGED
|
@@ -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
|
-
* @
|
|
13
|
-
* @
|
|
14
|
-
* @
|
|
15
|
-
* @
|
|
16
|
-
* @
|
|
17
|
-
* @
|
|
18
|
-
* @
|
|
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
|
|
325
|
+
column-gap: var(--gap);
|
|
320
326
|
pointer-events: none;
|
|
321
|
-
z-index:
|
|
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
|
|
334
|
+
(100% - (var(--gap) * (var(--grid-cols) - 1))) / var(--grid-cols)
|
|
329
335
|
),
|
|
330
336
|
transparent
|
|
331
337
|
calc(
|
|
332
|
-
(100% - (var(--gap
|
|
338
|
+
(100% - (var(--gap) * (var(--grid-cols) - 1))) / var(--grid-cols)
|
|
333
339
|
),
|
|
334
340
|
transparent
|
|
335
341
|
calc(
|
|
336
|
-
(100% - (var(--gap
|
|
337
|
-
var(--gap
|
|
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:
|
|
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:
|
|
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
|
}
|