@stnd/styles 0.10.3 → 0.10.4
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 +6 -0
- package/README.md +2 -2
- package/TOKENS.md +51 -72
- package/_standard-00-variables.scss +3 -3
- package/_standard-01-token.scss +44 -124
- package/_standard-02-color.scss +34 -64
- package/_standard-03-typography.scss +17 -17
- package/_standard-04-grid.scss +1 -1
- package/_standard-05-rhythm.scss +8 -8
- package/_standard-06-prose.scss +41 -68
- package/_standard-07-base.scss +16 -42
- package/_standard-08-media.scss +1 -1
- package/_standard-09-lists.scss +3 -3
- package/_standard-10-tables.scss +2 -2
- package/_standard-11-forms.scss +13 -13
- package/_standard-12-code.scss +2 -2
- package/_standard-13-components.scss +78 -74
- package/_standard-31-print.scss +3 -9
- package/_standard-50-utilities.scss +114 -158
- package/_standard-99-debug.scss +5 -5
- package/app.scss +1 -5
- package/package.json +1 -1
package/_standard-02-color.scss
CHANGED
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
--color-light-border: oklch(from var(--color-light-foreground) l c h / 0.1);
|
|
330
330
|
--color-light-surface: color-mix(
|
|
331
331
|
in srgb,
|
|
332
|
-
|
|
332
|
+
white 4%,
|
|
333
333
|
var(--color-light-background)
|
|
334
334
|
);
|
|
335
335
|
--color-light-on-accent: var(--color-light-background);
|
|
@@ -343,7 +343,7 @@
|
|
|
343
343
|
);
|
|
344
344
|
--color-dark-surface: color-mix(
|
|
345
345
|
in srgb,
|
|
346
|
-
|
|
346
|
+
white 4%,
|
|
347
347
|
var(--color-dark-background)
|
|
348
348
|
);
|
|
349
349
|
|
|
@@ -456,59 +456,46 @@
|
|
|
456
456
|
*
|
|
457
457
|
* @property --color-shadow Active base shadow color.
|
|
458
458
|
* @property --color-highlight Active specular highlight color.
|
|
459
|
-
* @property --color-surface
|
|
460
|
-
* @property --color-surface-
|
|
461
|
-
* @property --color-surface-
|
|
462
|
-
* @property --color-surface
|
|
463
|
-
* @property --color-surface-
|
|
464
|
-
* @property --color-surface-
|
|
459
|
+
* @property --color-surface Base surface color (defaults to surface-light-1).
|
|
460
|
+
* @property --color-surface-light-1 Subtle elevated surface step (cards, containers).
|
|
461
|
+
* @property --color-surface-light-2 Elevated surface step (popovers, menus, dialogs).
|
|
462
|
+
* @property --color-surface-light-3 High elevated surface step (active highlights, modals).
|
|
463
|
+
* @property --color-surface-dark-1 Recessed surface step (inputs, wells, code blocks).
|
|
464
|
+
* @property --color-surface-dark-2 Deep recessed surface step (switch tracks, sunken wells).
|
|
465
|
+
* @property --color-surface-dark-3 Deepest recessed surface step.
|
|
465
466
|
*/
|
|
466
467
|
|
|
467
468
|
/* Semantic Shadow Seeds */
|
|
468
469
|
--color-shadow: var(--color-light-shadow-base);
|
|
469
470
|
--color-highlight: var(--color-light-highlight);
|
|
470
471
|
|
|
471
|
-
/*
|
|
472
|
-
--color-surface-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
);
|
|
477
|
-
--color-surface-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
);
|
|
482
|
-
--color-surface-lower: color-mix(
|
|
483
|
-
in srgb,
|
|
484
|
-
var(--color-foreground) 3%,
|
|
485
|
-
transparent
|
|
486
|
-
);
|
|
472
|
+
/* Directional surface scale (lighter & darker than background) */
|
|
473
|
+
--color-surface-light-1: color-mix(in srgb, white 4%, var(--color-background));
|
|
474
|
+
--color-surface-light-2: color-mix(in srgb, white 9%, var(--color-background));
|
|
475
|
+
--color-surface-light-3: color-mix(in srgb, white 16%, var(--color-background));
|
|
476
|
+
|
|
477
|
+
--color-surface-dark-1: color-mix(in srgb, black 4%, var(--color-background));
|
|
478
|
+
--color-surface-dark-2: color-mix(in srgb, black 9%, var(--color-background));
|
|
479
|
+
--color-surface-dark-3: color-mix(in srgb, black 16%, var(--color-background));
|
|
480
|
+
|
|
481
|
+
/* Canonical base surface */
|
|
482
|
+
--color-surface: var(--color-surface-light-1);
|
|
487
483
|
|
|
488
|
-
--color-surface-high: color-mix(in srgb, white 50%, var(--color-surface));
|
|
489
|
-
--color-surface-highest: color-mix(
|
|
490
|
-
in srgb,
|
|
491
|
-
white 50%,
|
|
492
|
-
var(--color-surface-high)
|
|
493
|
-
);
|
|
494
|
-
--color-surface-higher: color-mix(in srgb, white 50%, transparent);
|
|
495
484
|
/**
|
|
496
485
|
* @component Border Shorthands
|
|
497
486
|
* @category Foundation
|
|
498
487
|
* @description Pre-composed border shorthand tokens for clean layout boundaries.
|
|
499
488
|
*
|
|
500
489
|
* @property --border Standard border shorthand (`var(--stroke-width) solid var(--color-border)`).
|
|
490
|
+
* @property --border-hover Hover border shorthand (`var(--stroke-width) solid var(--color-foreground)`).
|
|
501
491
|
* @property --border-accent Tinted accent border shorthand (`var(--stroke-width) solid oklch(...)`).
|
|
502
492
|
* @property --border-transparent Transparent layout placeholder border.
|
|
503
493
|
*/
|
|
504
494
|
--border-transparent: var(--stroke-width) solid transparent;
|
|
505
495
|
--border-accent: var(--stroke-width) solid
|
|
506
496
|
oklch(from var(--color-accent) l c h / 0.07);
|
|
507
|
-
/* Regressed to `0 solid transparent` at some point, then a prior audit
|
|
508
|
-
correctly flagged it as dead code but "fixed" it to `none` instead of
|
|
509
|
-
restoring the real value. Git history confirms the intended value —
|
|
510
|
-
unchanged across many commits before the regression — was this. */
|
|
511
497
|
--border: var(--stroke-width) solid var(--color-border);
|
|
498
|
+
--border-hover: var(--stroke-width) solid var(--color-foreground);
|
|
512
499
|
}
|
|
513
500
|
|
|
514
501
|
/* =====================================================================
|
|
@@ -550,40 +537,23 @@
|
|
|
550
537
|
|
|
551
538
|
/* Adjusted opacity for dark backgrounds */
|
|
552
539
|
--color-subtle: var(--color-dark-subtle);
|
|
553
|
-
--color-muted: var(--color-dark-muted);
|
|
554
540
|
--color-border: var(--color-dark-border);
|
|
555
|
-
--color-surface: var(--color-dark-surface);
|
|
556
541
|
|
|
557
542
|
--color-shadow: var(--color-dark-shadow-base);
|
|
558
543
|
--color-highlight: var(--color-dark-highlight);
|
|
559
544
|
|
|
560
545
|
--shadow-xl: var(--shadow-glow);
|
|
561
546
|
|
|
562
|
-
/*
|
|
563
|
-
|
|
564
|
-
--color-surface-
|
|
565
|
-
--color-surface-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
);
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
--color-surface-high: color-mix(
|
|
573
|
-
in srgb,
|
|
574
|
-
var(--color-dark-foreground) 3%,
|
|
575
|
-
var(--color-surface)
|
|
576
|
-
);
|
|
577
|
-
--color-surface-highest: color-mix(
|
|
578
|
-
in srgb,
|
|
579
|
-
var(--color-dark-foreground) 3%,
|
|
580
|
-
var(--color-surface-high)
|
|
581
|
-
);
|
|
582
|
-
--color-surface-higher: color-mix(
|
|
583
|
-
in srgb,
|
|
584
|
-
var(--color-dark-foreground) 3%,
|
|
585
|
-
transparent
|
|
586
|
-
);
|
|
547
|
+
/* Directional surface scale in dark mode */
|
|
548
|
+
--color-surface-light-1: color-mix(in srgb, white 4%, var(--color-background));
|
|
549
|
+
--color-surface-light-2: color-mix(in srgb, white 9%, var(--color-background));
|
|
550
|
+
--color-surface-light-3: color-mix(in srgb, white 16%, var(--color-background));
|
|
551
|
+
|
|
552
|
+
--color-surface-dark-1: color-mix(in srgb, black 4%, var(--color-background));
|
|
553
|
+
--color-surface-dark-2: color-mix(in srgb, black 9%, var(--color-background));
|
|
554
|
+
--color-surface-dark-3: color-mix(in srgb, black 16%, var(--color-background));
|
|
555
|
+
|
|
556
|
+
--color-surface: var(--color-surface-light-1);
|
|
587
557
|
}
|
|
588
558
|
}
|
|
589
559
|
|
|
@@ -608,7 +578,7 @@
|
|
|
608
578
|
--color-muted: var(--color-light-muted);
|
|
609
579
|
--color-subtle: var(--color-light-subtle);
|
|
610
580
|
--color-border: var(--color-light-border);
|
|
611
|
-
--color-surface: var(--color-light-
|
|
581
|
+
--color-surface: var(--color-surface-light-1);
|
|
612
582
|
--color-shadow: var(--color-light-shadow-base);
|
|
613
583
|
--color-highlight: var(--color-light-highlight);
|
|
614
584
|
--color-light: var(--color-light-background);
|
|
@@ -623,7 +593,7 @@
|
|
|
623
593
|
--color-muted: var(--color-dark-muted);
|
|
624
594
|
--color-subtle: var(--color-dark-subtle);
|
|
625
595
|
--color-border: var(--color-dark-border);
|
|
626
|
-
--color-surface: var(--color-
|
|
596
|
+
--color-surface: var(--color-surface-light-1);
|
|
627
597
|
--color-shadow: var(--color-dark-shadow-base);
|
|
628
598
|
--color-highlight: var(--color-dark-highlight);
|
|
629
599
|
--color-light: var(--color-dark-foreground);
|
|
@@ -137,37 +137,37 @@ h6 {
|
|
|
137
137
|
controls heading line-height now. */
|
|
138
138
|
h1 {
|
|
139
139
|
font-weight: var(--font-weight-h1);
|
|
140
|
-
font-size: clamp(var(--
|
|
140
|
+
font-size: clamp(var(--scale-3), 5.5vw, var(--scale-4));
|
|
141
141
|
line-height: var(--font-header-line-height, 1);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
h2 {
|
|
145
145
|
font-weight: var(--font-weight-h2);
|
|
146
|
-
font-size: clamp(var(--
|
|
146
|
+
font-size: clamp(var(--scale-2), 4vw, var(--scale-3));
|
|
147
147
|
line-height: var(--font-header-line-height, 1);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
h3 {
|
|
151
151
|
font-weight: var(--font-weight-h3);
|
|
152
|
-
font-size: clamp(var(--
|
|
152
|
+
font-size: clamp(var(--scale), 3vw, var(--scale-2));
|
|
153
153
|
line-height: var(--font-header-line-height, 1);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
h4 {
|
|
157
157
|
font-weight: var(--font-weight);
|
|
158
|
-
font-size: var(--
|
|
158
|
+
font-size: var(--scale);
|
|
159
159
|
line-height: var(--line-height);
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
h5 {
|
|
163
163
|
font-weight: var(--font-weight);
|
|
164
|
-
font-size: var(--
|
|
164
|
+
font-size: var(--scale-d2);
|
|
165
165
|
line-height: var(--line-height);
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
h6 {
|
|
169
169
|
font-weight: var(--font-weight);
|
|
170
|
-
font-size: var(--
|
|
170
|
+
font-size: var(--scale-d3);
|
|
171
171
|
line-height: var(--line-height);
|
|
172
172
|
}
|
|
173
173
|
|
|
@@ -191,7 +191,7 @@ h6 {
|
|
|
191
191
|
.overline {
|
|
192
192
|
font-variant-caps: small-caps;
|
|
193
193
|
letter-spacing: 0.04em;
|
|
194
|
-
font-size: var(--
|
|
194
|
+
font-size: var(--scale-d2);
|
|
195
195
|
border-top: var(--stroke-width) solid var(--color-border);
|
|
196
196
|
padding-block-start: var(--space-d2);
|
|
197
197
|
margin-block-end: var(--space);
|
|
@@ -202,7 +202,7 @@ a {
|
|
|
202
202
|
color: var(--color-link);
|
|
203
203
|
text-decoration: none;
|
|
204
204
|
text-decoration-thickness: var(--stroke-width);
|
|
205
|
-
text-underline-offset:
|
|
205
|
+
text-underline-offset: var(--trim);
|
|
206
206
|
text-decoration-color: transparent;
|
|
207
207
|
box-shadow: none;
|
|
208
208
|
transition:
|
|
@@ -221,7 +221,7 @@ a:hover {
|
|
|
221
221
|
a[target="_blank"]:not(.internal-link)::after {
|
|
222
222
|
content: "↗";
|
|
223
223
|
display: inline-block;
|
|
224
|
-
font-size: var(--
|
|
224
|
+
font-size: var(--scale-d3);
|
|
225
225
|
color: var(--color-subtle);
|
|
226
226
|
margin-inline-start: 0.2em;
|
|
227
227
|
transition: all var(--transition-fast);
|
|
@@ -236,7 +236,7 @@ a[target="_blank"]:not(.internal-link):hover::after {
|
|
|
236
236
|
transition: all var(--transition-fast);
|
|
237
237
|
&::after {
|
|
238
238
|
content: "⊗";
|
|
239
|
-
font-size: var(--
|
|
239
|
+
font-size: var(--scale-d3);
|
|
240
240
|
color: var(--color-error);
|
|
241
241
|
margin-inline-start: 0.2em;
|
|
242
242
|
}
|
|
@@ -261,7 +261,7 @@ a[target="_blank"]:not(.internal-link):hover::after {
|
|
|
261
261
|
font-variation-settings: var(--font-interface-variation);
|
|
262
262
|
font-feature-settings: var(--font-interface-feature);
|
|
263
263
|
font-weight: var(--font-interface-weight, var(--font-weight));
|
|
264
|
-
font-size: var(--
|
|
264
|
+
font-size: var(--scale-d3);
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
code,
|
|
@@ -287,12 +287,12 @@ blockquote {
|
|
|
287
287
|
|
|
288
288
|
/* Utilities & Inline Elements */
|
|
289
289
|
small {
|
|
290
|
-
font-size: var(--
|
|
290
|
+
font-size: var(--scale-d2);
|
|
291
291
|
}
|
|
292
292
|
|
|
293
293
|
sub,
|
|
294
294
|
sup {
|
|
295
|
-
font-size: var(--
|
|
295
|
+
font-size: var(--scale-d3);
|
|
296
296
|
line-height: 0;
|
|
297
297
|
}
|
|
298
298
|
|
|
@@ -321,14 +321,14 @@ mark {
|
|
|
321
321
|
|
|
322
322
|
/* Keycaps */
|
|
323
323
|
kbd {
|
|
324
|
-
background-color: var(--color-surface);
|
|
324
|
+
background-color: var(--color-surface-light-2);
|
|
325
325
|
background-image: var(--effect-grain);
|
|
326
326
|
border: none;
|
|
327
|
-
border-radius: var(--radius);
|
|
327
|
+
border-radius: var(--radius-sm);
|
|
328
328
|
box-shadow: var(--shadow);
|
|
329
|
-
padding: var(--
|
|
329
|
+
padding: calc(var(--trim) / 2) var(--trim);
|
|
330
330
|
font-family: var(--font-monospace);
|
|
331
|
-
font-size: var(--
|
|
331
|
+
font-size: var(--scale-d3);
|
|
332
332
|
pointer-events: none;
|
|
333
333
|
}
|
|
334
334
|
|
package/_standard-04-grid.scss
CHANGED
|
@@ -102,7 +102,7 @@ $grid-selectors: ".grid, .grid-row";
|
|
|
102
102
|
/* Gap variants aligned to rhythm — this is the LIVE definition (sets --gap,
|
|
103
103
|
the property actually consumed by column-gap/row-gap above). */
|
|
104
104
|
:is(.grid, [class^="grid-"]).compact {
|
|
105
|
-
--gap: var(--
|
|
105
|
+
--gap: var(--gap-compact);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
:is(.grid, [class^="grid-"]).relaxed {
|
package/_standard-05-rhythm.scss
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @property .rhythm The container class. Sets `display: flow-root` so child margins cannot collapse out of it.
|
|
14
14
|
* @property .no-rhythm Zeroes `margin-block-start` on every descendant — a subtree-wide rhythm opt-out.
|
|
15
|
-
* @property --
|
|
15
|
+
* @property --rhythm-block-scale Rhythm multiplier factor for block-level spacing and heading exceptions.
|
|
16
16
|
* @property .flex > * Zeroes `margin-block-start` for flex children so margins do not stack with flex gap.
|
|
17
17
|
*
|
|
18
18
|
* @example html - Turn any container into a rhythm block
|
|
@@ -50,38 +50,38 @@
|
|
|
50
50
|
top-level document flow only) — flagging since the asymmetry itself
|
|
51
51
|
isn't declared anywhere, just falls out of one missing `>`. */
|
|
52
52
|
:where(:is(#{$rhythm-tags})) + :where(:is(#{$rhythm-tags})) {
|
|
53
|
-
margin-block-start:
|
|
53
|
+
margin-block-start: var(--space);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
> :where(:is(#{$rhythm-double-tags})) + :where(:is(#{$rhythm-simple-tags})),
|
|
57
57
|
> :where(:is(#{$rhythm-simple-tags})) + :where(:is(#{$rhythm-double-tags})) {
|
|
58
|
-
margin-block-start: calc(var(--
|
|
58
|
+
margin-block-start: calc(var(--space) * var(--rhythm-block-scale, 2));
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// EXCEPTIONS
|
|
62
62
|
//*
|
|
63
63
|
> :where(:is(#{$rhythm-tags})) ~ :where(:is(h1, h2)) {
|
|
64
64
|
margin-block-start: calc(
|
|
65
|
-
var(--
|
|
65
|
+
var(--space) * calc(var(--rhythm-block-scale, 2) + 2)
|
|
66
66
|
);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
> :where(:is(#{$rhythm-tags})) ~ :where(:is(h3, h4, h5, h6)) {
|
|
70
70
|
margin-block-start: calc(
|
|
71
|
-
var(--
|
|
71
|
+
var(--space) * calc(var(--rhythm-block-scale, 2) + 1)
|
|
72
72
|
);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
> :where(:is(h1, h2, h3, h4)) + :where(:is(h2, h3, h4, h5, h6)) {
|
|
76
|
-
margin-block-start: calc(var(--
|
|
76
|
+
margin-block-start: calc(var(--space) * var(--rhythm-block-scale, 2));
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
> :where(:is(h1, h2, h3)) + * {
|
|
80
|
-
margin-block-start: calc(var(--
|
|
80
|
+
margin-block-start: calc(var(--space) * var(--rhythm-block-scale, 2));
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
> :where(:is(h4, h5, h6)) + * {
|
|
84
|
-
margin-block-start:
|
|
84
|
+
margin-block-start: var(--space);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
//*/
|
package/_standard-06-prose.scss
CHANGED
|
@@ -10,18 +10,12 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @property .prose Main article/content grid container for readable prose with named tracks.
|
|
12
12
|
* @property .prose.left Left-aligned prose variant hugging the left edge.
|
|
13
|
-
* @property .
|
|
14
|
-
* @property .
|
|
15
|
-
* @property .
|
|
16
|
-
* @property .
|
|
17
|
-
* @property
|
|
18
|
-
* @property --
|
|
19
|
-
* @property --line-width-xs Extra small reading measure (24rem / 384px).
|
|
20
|
-
* @property --line-width-sm Small reading measure (32rem / 512px).
|
|
21
|
-
* @property --line-width-md Medium reading measure (42rem / 672px) - default.
|
|
22
|
-
* @property --line-width-lg Large reading measure (50rem / 800px).
|
|
23
|
-
* @property --line-width-xl Extra large reading measure (60rem / 960px).
|
|
24
|
-
* @property --body-max-width Overall page max-width constraint (900px).
|
|
13
|
+
* @property .narrow Inset element narrower than prose reading column (`var(--prose-inset)`).
|
|
14
|
+
* @property .wide Breakout column extending past prose reading column (`var(--prose-breakout)`).
|
|
15
|
+
* @property .full Full container width breakout track spanning to `--page-max-width`.
|
|
16
|
+
* @property .full-bleed Full viewport width breakout track (`100vw`).
|
|
17
|
+
* @property --prose-width Active reading column measure.
|
|
18
|
+
* @property --page-max-width Overall page max-width constraint (1400px).
|
|
25
19
|
*
|
|
26
20
|
* @example
|
|
27
21
|
* // Standard article with proper reading width
|
|
@@ -57,35 +51,26 @@
|
|
|
57
51
|
&.left {
|
|
58
52
|
margin-inline: 0;
|
|
59
53
|
grid-template-columns:
|
|
60
|
-
[
|
|
61
|
-
|
|
62
|
-
)
|
|
63
|
-
[content-end editorial-end feature-end] 1fr [hero-end];
|
|
54
|
+
[full-start wide-start content-start] min(100%, var(--prose-width))
|
|
55
|
+
[content-end wide-end] 1fr [full-end];
|
|
64
56
|
}
|
|
65
57
|
|
|
66
58
|
grid-template-columns:
|
|
67
|
-
[
|
|
68
|
-
[
|
|
69
|
-
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
--content-width-editorial
|
|
73
|
-
)
|
|
74
|
-
[editorial-end] var(--content-width-feature) [feature-end] var(
|
|
75
|
-
--content-width-hero
|
|
76
|
-
)
|
|
77
|
-
[hero-end];
|
|
59
|
+
[full-start] var(--prose-track-full, minmax(0, 1fr))
|
|
60
|
+
[wide-start] var(--prose-breakout, minmax(0, var(--space-4)))
|
|
61
|
+
[content-start] min(100%, var(--prose-width)) [content-end]
|
|
62
|
+
var(--prose-breakout, minmax(0, var(--space-4))) [wide-end]
|
|
63
|
+
var(--prose-track-full, minmax(0, 1fr)) [full-end];
|
|
78
64
|
|
|
79
65
|
transition: grid-template-columns var(--transition);
|
|
80
66
|
|
|
81
67
|
position: relative;
|
|
82
68
|
width: 100%;
|
|
83
|
-
max-width: var(--
|
|
69
|
+
max-width: var(--page-max-width);
|
|
84
70
|
margin-inline: auto;
|
|
85
|
-
padding-inline: var(--
|
|
86
|
-
/*z-index: var(--z-base);*/
|
|
87
|
-
/* Default content positioning */
|
|
71
|
+
padding-inline: var(--page-padding);
|
|
88
72
|
|
|
73
|
+
/* Default content positioning */
|
|
89
74
|
> * {
|
|
90
75
|
grid-column: content;
|
|
91
76
|
min-width: 0;
|
|
@@ -102,52 +87,40 @@
|
|
|
102
87
|
min-width: 0;
|
|
103
88
|
}
|
|
104
89
|
|
|
105
|
-
|
|
106
|
-
> .
|
|
90
|
+
/* Narrow: inset elements (callouts, blockquotes, code blocks, or .narrow) */
|
|
91
|
+
> .narrow,
|
|
92
|
+
> .container-narrow,
|
|
107
93
|
> .callout,
|
|
108
94
|
> blockquote,
|
|
109
95
|
> pre,
|
|
110
|
-
> figure:not(.full-bleed):not(.
|
|
111
|
-
> p:has(img:not(.full-bleed):not(.
|
|
96
|
+
> figure:not(.full-bleed):not(.wide):not(.full),
|
|
97
|
+
> p:has(img:not(.full-bleed):not(.wide):not(.full)),
|
|
112
98
|
> .stnd-code-block {
|
|
113
99
|
grid-column: content;
|
|
114
|
-
margin-inline: var(--
|
|
100
|
+
margin-inline: var(--prose-inset);
|
|
115
101
|
}
|
|
116
102
|
|
|
103
|
+
/* Wide: breakout elements (tables, or .wide / .container-wide) */
|
|
117
104
|
table,
|
|
118
105
|
.scroll:has(table),
|
|
119
|
-
.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
.feature {
|
|
126
|
-
grid-column: feature;
|
|
106
|
+
.wide,
|
|
107
|
+
.container-wide,
|
|
108
|
+
p:has(> img.wide),
|
|
109
|
+
p:has(> video.wide) {
|
|
110
|
+
grid-column: wide;
|
|
127
111
|
margin-inline: 0;
|
|
128
112
|
max-width: none;
|
|
129
113
|
}
|
|
130
114
|
|
|
131
|
-
|
|
132
|
-
p:has(> img.breakout),
|
|
133
|
-
p:has(> video.breakout),
|
|
134
|
-
figure.breakout {
|
|
135
|
-
grid-column: 1 / -1;
|
|
136
|
-
width: min(100%, 72rem);
|
|
137
|
-
max-width: 72rem;
|
|
138
|
-
margin-inline: auto !important;
|
|
139
|
-
}
|
|
140
|
-
|
|
115
|
+
/* Full: spans to page shell (--page-max-width) */
|
|
141
116
|
.full,
|
|
142
|
-
.
|
|
143
|
-
p:has(> img.hero),
|
|
117
|
+
.container-full,
|
|
144
118
|
p:has(> img.full),
|
|
145
|
-
p:has(> video.hero),
|
|
146
119
|
p:has(> video.full) {
|
|
147
|
-
grid-column:
|
|
148
|
-
width: calc(100% + var(--
|
|
149
|
-
max-width: calc(100% + var(--
|
|
150
|
-
margin-inline: calc(var(--
|
|
120
|
+
grid-column: full;
|
|
121
|
+
width: calc(100% + var(--page-padding) * 2);
|
|
122
|
+
max-width: calc(100% + var(--page-padding) * 2);
|
|
123
|
+
margin-inline: calc(var(--page-padding) * -1);
|
|
151
124
|
border-radius: 0 !important;
|
|
152
125
|
|
|
153
126
|
> * {
|
|
@@ -185,7 +158,7 @@
|
|
|
185
158
|
margin-inline: auto;
|
|
186
159
|
width: min(100%, 18rem);
|
|
187
160
|
position: relative;
|
|
188
|
-
scroll-margin-top:
|
|
161
|
+
scroll-margin-top: var(--space-6);
|
|
189
162
|
|
|
190
163
|
&.screen-full {
|
|
191
164
|
width: 100%;
|
|
@@ -209,7 +182,7 @@
|
|
|
209
182
|
grid-column: 1 / -1;
|
|
210
183
|
width: 100%;
|
|
211
184
|
margin-block: var(--gap-section, 4rem);
|
|
212
|
-
scroll-margin-top:
|
|
185
|
+
scroll-margin-top: var(--space-6);
|
|
213
186
|
|
|
214
187
|
&.screen-full {
|
|
215
188
|
min-height: 85vh;
|
|
@@ -290,7 +263,8 @@
|
|
|
290
263
|
}
|
|
291
264
|
|
|
292
265
|
@media (max-width: #{$mobile}) {
|
|
293
|
-
.
|
|
266
|
+
.narrow,
|
|
267
|
+
.container-narrow,
|
|
294
268
|
.callout,
|
|
295
269
|
blockquote,
|
|
296
270
|
pre,
|
|
@@ -303,8 +277,7 @@
|
|
|
303
277
|
|
|
304
278
|
@media (max-width: #{$small}) {
|
|
305
279
|
.card.accent,
|
|
306
|
-
.card.
|
|
307
|
-
.card.editorial,
|
|
280
|
+
.card.wide,
|
|
308
281
|
.card.full {
|
|
309
282
|
margin-inline: calc(var(--space) * -1);
|
|
310
283
|
border-radius: 0;
|
|
@@ -327,7 +300,7 @@
|
|
|
327
300
|
}
|
|
328
301
|
|
|
329
302
|
/* Fixed 2026-07-14 — swapped undefined tokens for their real equivalents
|
|
330
|
-
(--color-muted, --color-accent, --color-surface-
|
|
303
|
+
(--color-muted, --color-accent, --color-surface-light-2). */
|
|
331
304
|
.mycelial-link,
|
|
332
305
|
.mycelial-graft {
|
|
333
306
|
text-decoration: none;
|
|
@@ -339,7 +312,7 @@
|
|
|
339
312
|
&:hover {
|
|
340
313
|
color: var(--color-accent);
|
|
341
314
|
border-bottom: 1px solid var(--color-accent);
|
|
342
|
-
background-color: var(--color-surface-
|
|
315
|
+
background-color: var(--color-surface-light-2);
|
|
343
316
|
}
|
|
344
317
|
}
|
|
345
318
|
}
|
package/_standard-07-base.scss
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* inside `.prose`), theme-transition rules, and selection/mark highlights.
|
|
10
10
|
*
|
|
11
11
|
* @property html Root element establishing background color, foreground text color, font smoothing, and smooth scrolling.
|
|
12
|
-
* @property body Document container centered at `--
|
|
12
|
+
* @property body Document container centered at `--page-max-width` with responsive padding and scroll margins.
|
|
13
13
|
* @property .no-body-margin Full-bleed helper applied to `<header>` or `<footer>` to extend edge-to-edge past body padding.
|
|
14
14
|
* @property .container-hero Hero section container with vertical padding and hairline borders.
|
|
15
15
|
* @property ::selection Custom highlight selection using subtle yellow background tint and accent text color.
|
|
@@ -33,7 +33,7 @@ html {
|
|
|
33
33
|
-webkit-overflow-scrolling: touch;
|
|
34
34
|
|
|
35
35
|
font-family: var(--font-text), system-ui, sans-serif;
|
|
36
|
-
font-size: var(--
|
|
36
|
+
font-size: var(--scale);
|
|
37
37
|
font-weight: var(--font-weight);
|
|
38
38
|
letter-spacing: var(--font-letter-spacing);
|
|
39
39
|
|
|
@@ -85,8 +85,6 @@ body {
|
|
|
85
85
|
body {
|
|
86
86
|
margin: 0;
|
|
87
87
|
padding: 0;
|
|
88
|
-
padding-top: var(--gap-header);
|
|
89
|
-
padding-bottom: var(--gap-footer);
|
|
90
88
|
width: 100%;
|
|
91
89
|
min-height: 100vh;
|
|
92
90
|
|
|
@@ -99,15 +97,15 @@ body {
|
|
|
99
97
|
|
|
100
98
|
[id] {
|
|
101
99
|
/* Keeps anchor-linked headings from landing under the sticky header. */
|
|
102
|
-
scroll-margin-top: calc(var(--space-2) +
|
|
100
|
+
scroll-margin-top: calc(var(--space-2) + 4rem);
|
|
103
101
|
}
|
|
104
102
|
}
|
|
105
103
|
|
|
106
104
|
.container {
|
|
107
105
|
width: 100%;
|
|
108
|
-
max-width: var(--
|
|
106
|
+
max-width: var(--page-max-width);
|
|
109
107
|
margin-inline: auto;
|
|
110
|
-
padding-inline: var(--
|
|
108
|
+
padding-inline: var(--page-padding);
|
|
111
109
|
}
|
|
112
110
|
|
|
113
111
|
main {
|
|
@@ -142,7 +140,7 @@ h6,
|
|
|
142
140
|
li,
|
|
143
141
|
div.callout,
|
|
144
142
|
summary {
|
|
145
|
-
max-width: var(--
|
|
143
|
+
max-width: var(--prose-width);
|
|
146
144
|
}
|
|
147
145
|
p:has(img),
|
|
148
146
|
blockquote p {
|
|
@@ -168,7 +166,7 @@ section.container-hero {
|
|
|
168
166
|
box-shadow: var(--shadow);
|
|
169
167
|
|
|
170
168
|
p {
|
|
171
|
-
max-width: var(--
|
|
169
|
+
max-width: var(--prose-width);
|
|
172
170
|
margin-inline: auto !important;
|
|
173
171
|
}
|
|
174
172
|
}
|
|
@@ -202,37 +200,13 @@ dt {
|
|
|
202
200
|
valid enough HTML that it would have rendered live on the docs page,
|
|
203
201
|
not shown as a code sample. */
|
|
204
202
|
|
|
205
|
-
/*
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
body >
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
margin-inline: calc(var(--gap-body-mobile) * -1);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/* Negate bottom body padding (extra 1.5× multiplier) — removes the
|
|
219
|
-
generous bottom padding applied to body elements, for a footer that
|
|
220
|
-
should sit flush at the bottom. */
|
|
221
|
-
body > footer.no-body-margin:last-of-type {
|
|
222
|
-
margin-block-end: calc(var(--gap-body) * -1.5);
|
|
223
|
-
|
|
224
|
-
@media (max-width: #{$small}) {
|
|
225
|
-
margin-block-end: calc(var(--gap-body-mobile) * -1.5);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/* Fixed 2026-07-14 — was margin-block-end (wrong property, copy-paste
|
|
230
|
-
typo), now correctly overrides margin-block-start to match the footer's
|
|
231
|
-
symmetric pattern. */
|
|
232
|
-
body > header.no-body-margin:first-of-type {
|
|
233
|
-
margin-block-start: calc(var(--gap-body) * -1);
|
|
234
|
-
|
|
235
|
-
@media (max-width: #{$small}) {
|
|
236
|
-
margin-block-start: calc(var(--gap-body-mobile) * -1);
|
|
237
|
-
}
|
|
203
|
+
/* Safe default containment for direct body children:
|
|
204
|
+
every element placed directly in body is centered and padded
|
|
205
|
+
unless explicitly marked full-bleed, a header, or a footer. */
|
|
206
|
+
body > :not(.full-bleed, .stnd-header, .stnd-footer, [data-full-bleed], script, style, template, astro-island) {
|
|
207
|
+
width: 100%;
|
|
208
|
+
max-width: var(--page-max-width);
|
|
209
|
+
margin-inline: auto;
|
|
210
|
+
padding-inline: var(--page-padding);
|
|
211
|
+
box-sizing: border-box;
|
|
238
212
|
}
|