@godxjp/ui 29.0.0 → 30.0.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.
- package/agent/START-HERE.md +1 -1
- package/agent/index.json +2 -2
- package/agent/llms.txt +3 -3
- package/agent/tokens.json +135 -135
- package/dist/components/data-display/badge.js +1 -1
- package/dist/components/data-display/table.js +1 -1
- package/dist/components/general/button.js +2 -2
- package/dist/components/navigation/tabs.js +1 -1
- package/dist/contracts/measurement.json +1 -1
- package/dist/styles/alert-layout.css +5 -5
- package/dist/styles/badge-layout.css +1 -1
- package/dist/styles/card-layout.css +10 -8
- package/dist/styles/chart-layout.css +5 -2
- package/dist/styles/control.css +64 -48
- package/dist/styles/data-display-layout.css +49 -40
- package/dist/styles/data-entry-layout.css +12 -12
- package/dist/styles/dialog-layout.css +11 -11
- package/dist/styles/focus-ring.css +2 -2
- package/dist/styles/layout.css +11 -10
- package/dist/styles/logo-layout.css +2 -2
- package/dist/styles/motion.css +1 -1
- package/dist/styles/navigation-layout.css +27 -15
- package/dist/styles/shell-layout.css +30 -87
- package/dist/styles/table-layout.css +11 -8
- package/dist/styles/toggle.css +1 -1
- package/dist/tokens/components/banner.css +1 -1
- package/dist/tokens/components/card.css +4 -4
- package/dist/tokens/components/chart.css +1 -1
- package/dist/tokens/components/chat-bubble.css +1 -1
- package/dist/tokens/components/control.css +13 -12
- package/dist/tokens/components/data-display.css +11 -11
- package/dist/tokens/components/data-entry.css +1 -1
- package/dist/tokens/components/descriptions.css +1 -1
- package/dist/tokens/components/draggable-panel.css +1 -1
- package/dist/tokens/components/feedback.css +1 -1
- package/dist/tokens/components/legal-document.css +1 -1
- package/dist/tokens/components/logo.css +1 -1
- package/dist/tokens/components/mega-menu.css +1 -1
- package/dist/tokens/components/navigation.css +6 -6
- package/dist/tokens/components/segmented.css +3 -3
- package/dist/tokens/components/separator.css +1 -1
- package/dist/tokens/components/shell.css +5 -5
- package/dist/tokens/components/table.css +4 -4
- package/dist/tokens/components/thought-chain.css +1 -1
- package/dist/tokens/components/toggle.css +1 -1
- package/dist/tokens/components/upload.css +2 -2
- package/dist/tokens/foundation.css +2 -2
- package/docs/i18n/messages/en.json +4 -0
- package/docs/i18n/messages/ja.json +4 -0
- package/docs/i18n/messages/vi.json +4 -0
- package/docs/themes/index.ts +19 -0
- package/docs/themes/neubrutalism.css +475 -0
- package/package.json +2 -2
package/agent/tokens.json
CHANGED
|
@@ -558,10 +558,10 @@
|
|
|
558
558
|
"value": "1"
|
|
559
559
|
},
|
|
560
560
|
{
|
|
561
|
-
"description": "
|
|
561
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
562
562
|
"name": "--focus-outline-weight",
|
|
563
563
|
"tier": "foundation",
|
|
564
|
-
"value": "
|
|
564
|
+
"value": "initial"
|
|
565
565
|
},
|
|
566
566
|
{
|
|
567
567
|
"description": "default = var(--focus-ring-color, var(--ring)), resolved at the focused element — a `:root` binding froze on the root's --ring, so a nested tenant scope never re-tinted the outline (gh#687; docs/TOKENS.md, the freeze rule)",
|
|
@@ -591,7 +591,7 @@
|
|
|
591
591
|
"description": "The painted thickness, and the point every path passes through. `--focus-ring-weight` is the public knob a component or a service retunes; multiplying by the switch is what guarantees that a rebind cannot bring the mark back while the switch is off.",
|
|
592
592
|
"name": "--focus-ring-weight",
|
|
593
593
|
"tier": "foundation",
|
|
594
|
-
"value": "var(--focus-outline-weight)"
|
|
594
|
+
"value": "var(--focus-outline-weight, var(--stroke-hairline))"
|
|
595
595
|
},
|
|
596
596
|
{
|
|
597
597
|
"description": "Foundation tokens: color, typography, raw spacing, ratio, radius, shadow.",
|
|
@@ -2256,10 +2256,10 @@
|
|
|
2256
2256
|
"value": "0"
|
|
2257
2257
|
},
|
|
2258
2258
|
{
|
|
2259
|
-
"description": "The strip keeps a single hairline block-end rule (tone-coloured via the alert border rules); inline/block-start edges are open so it reads as part of the frame.",
|
|
2259
|
+
"description": "The strip keeps a single hairline block-end rule (tone-coloured via the alert border rules); inline/block-start edges are open so it reads as part of the frame. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
2260
2260
|
"name": "--banner-border-width",
|
|
2261
2261
|
"tier": "component",
|
|
2262
|
-
"value": "
|
|
2262
|
+
"value": "initial"
|
|
2263
2263
|
},
|
|
2264
2264
|
{
|
|
2265
2265
|
"description": "Strip inset. Block is denser than the inline Alert card; inline defaults to the page gutter so banner text aligns with page content under AppShell/PageContainer.",
|
|
@@ -2460,22 +2460,22 @@
|
|
|
2460
2460
|
"value": "initial"
|
|
2461
2461
|
},
|
|
2462
2462
|
{
|
|
2463
|
-
"description": "Accent edge — width of the semantic leading-edge stripe (data-accent). Tokenised (rule #44) so a service theme can re-tune it without forking CSS. The slot padding compensation in card-layout.css subtracts the same token, so content stays aligned on the shell whatever the rail width.",
|
|
2463
|
+
"description": "Accent edge — width of the semantic leading-edge stripe (data-accent). Tokenised (rule #44) so a service theme can re-tune it without forking CSS. The slot padding compensation in card-layout.css subtracts the same token, so content stays aligned on the shell whatever the rail width. default = var(--stroke-2xl), resolved at the call site (gh#906)",
|
|
2464
2464
|
"name": "--card-accent-rail-width",
|
|
2465
2465
|
"tier": "component",
|
|
2466
|
-
"value": "
|
|
2466
|
+
"value": "initial"
|
|
2467
2467
|
},
|
|
2468
2468
|
{
|
|
2469
|
-
"description": "Accent placement `perimeter` (gh#12) — the FULL attention border. Two knobs so a service can tune the edge weight and the outer ring independently; the defaults reproduce the optical weight of `variant=\"featured\"` (1px border + 1px ring) in the card's own semantic accent tone instead of --primary. Structural
|
|
2469
|
+
"description": "Accent placement `perimeter` (gh#12) — the FULL attention border. Two knobs so a service can tune the edge weight and the outer ring independently; the defaults reproduce the optical weight of `variant=\"featured\"` (1px border + 1px ring) in the card's own semantic accent tone instead of --primary. Structural strokes, like the base card hairline: both read the hairline step at their call sites since gh#906, so a theme restating the stroke scale moves them with everything else. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
2470
2470
|
"name": "--card-accent-perimeter-width",
|
|
2471
2471
|
"tier": "component",
|
|
2472
|
-
"value": "
|
|
2472
|
+
"value": "initial"
|
|
2473
2473
|
},
|
|
2474
2474
|
{
|
|
2475
|
-
"description": "
|
|
2475
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
2476
2476
|
"name": "--card-accent-perimeter-ring-width",
|
|
2477
2477
|
"tier": "component",
|
|
2478
|
-
"value": "
|
|
2478
|
+
"value": "initial"
|
|
2479
2479
|
},
|
|
2480
2480
|
{
|
|
2481
2481
|
"description": "`variant=\"featured\"` edge — role-mirror knob (docs/TOKENS.md). `initial` so the --primary default resolves at the CALL SITE and a scoped [data-tenant]/.dark override of --primary reaches it; a service points it anywhere (e.g. var(--attention)) to retint every featured card at once. Default = hsl(var(--primary)).",
|
|
@@ -2484,10 +2484,10 @@
|
|
|
2484
2484
|
"value": "initial"
|
|
2485
2485
|
},
|
|
2486
2486
|
{
|
|
2487
|
-
"description": "
|
|
2487
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
2488
2488
|
"name": "--card-featured-ring-width",
|
|
2489
2489
|
"tier": "component",
|
|
2490
|
-
"value": "
|
|
2490
|
+
"value": "initial"
|
|
2491
2491
|
},
|
|
2492
2492
|
{
|
|
2493
2493
|
"description": "Card component tokens: card chrome derives from semantic layout tokens.",
|
|
@@ -2712,10 +2712,10 @@
|
|
|
2712
2712
|
"value": "1.5rem"
|
|
2713
2713
|
},
|
|
2714
2714
|
{
|
|
2715
|
-
"description": "Floor so a zero/absent value still reads as a plotted category rather than a hole.",
|
|
2715
|
+
"description": "Floor so a zero/absent value still reads as a plotted category rather than a hole. default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
2716
2716
|
"name": "--chart-trend-bar-min-height",
|
|
2717
2717
|
"tier": "component",
|
|
2718
|
-
"value": "
|
|
2718
|
+
"value": "initial"
|
|
2719
2719
|
},
|
|
2720
2720
|
{
|
|
2721
2721
|
"description": "Muted mark fill — role-mirror knob, declared `initial` so the role default re-resolves at the CALL SITE under `.dark` / `[data-tenant]` (docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\"). Default = hsl(var(--muted-foreground) / 0.75), which clears the 3:1 non-text contrast floor (WCAG 1.4.11) against the card surface.",
|
|
@@ -2736,7 +2736,7 @@
|
|
|
2736
2736
|
"value": "initial"
|
|
2737
2737
|
},
|
|
2738
2738
|
{
|
|
2739
|
-
"description": "── Baseline + category ticks ──────────────────────────────────────────────────────── Chrome defaults QUIET (rule #44): no baseline rule at rest. A service opts in with `--chart-trend-baseline-border:
|
|
2739
|
+
"description": "── Baseline + category ticks ──────────────────────────────────────────────────────── Chrome defaults QUIET (rule #44): no baseline rule at rest. A service opts in with `--chart-trend-baseline-border: var(--stroke-hairline) solid hsl(var(--border));`.",
|
|
2740
2740
|
"name": "--chart-trend-baseline-border",
|
|
2741
2741
|
"tier": "component",
|
|
2742
2742
|
"value": "initial"
|
|
@@ -2862,10 +2862,10 @@
|
|
|
2862
2862
|
"value": "initial"
|
|
2863
2863
|
},
|
|
2864
2864
|
{
|
|
2865
|
-
"description": "
|
|
2865
|
+
"description": "default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
2866
2866
|
"name": "--chat-bubble-typing-caret-width",
|
|
2867
2867
|
"tier": "component",
|
|
2868
|
-
"value": "
|
|
2868
|
+
"value": "initial"
|
|
2869
2869
|
},
|
|
2870
2870
|
{
|
|
2871
2871
|
"description": "One line box tall, so the caret matches whatever type ramp the bubble is rendering at rather than a fixed pixel height a service theme could not move.",
|
|
@@ -3114,10 +3114,10 @@
|
|
|
3114
3114
|
"value": "var(--font-size-base)"
|
|
3115
3115
|
},
|
|
3116
3116
|
{
|
|
3117
|
-
"description": "
|
|
3117
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
3118
3118
|
"name": "--control-border-width",
|
|
3119
3119
|
"tier": "component",
|
|
3120
|
-
"value": "
|
|
3120
|
+
"value": "initial"
|
|
3121
3121
|
},
|
|
3122
3122
|
{
|
|
3123
3123
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -3186,10 +3186,10 @@
|
|
|
3186
3186
|
"value": "var(--font-size-sm, var(--font-size-base))"
|
|
3187
3187
|
},
|
|
3188
3188
|
{
|
|
3189
|
-
"description": "
|
|
3189
|
+
"description": "default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
3190
3190
|
"name": "--control-count-color",
|
|
3191
3191
|
"tier": "component",
|
|
3192
|
-
"value": "
|
|
3192
|
+
"value": "initial"
|
|
3193
3193
|
},
|
|
3194
3194
|
{
|
|
3195
3195
|
"description": "`initial`, not `var(--text-error)`: a binding here computes ONCE at `:root`, so a `[data-tenant]` re-theming the error ink would keep this counter on the root's answer (docs/TOKENS.md, the freeze rule). The default lives at the rule that paints it.",
|
|
@@ -3222,10 +3222,10 @@
|
|
|
3222
3222
|
"value": "var(--muted)"
|
|
3223
3223
|
},
|
|
3224
3224
|
{
|
|
3225
|
-
"description": "
|
|
3225
|
+
"description": "default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
3226
3226
|
"name": "--input-addon-color",
|
|
3227
3227
|
"tier": "component",
|
|
3228
|
-
"value": "
|
|
3228
|
+
"value": "initial"
|
|
3229
3229
|
},
|
|
3230
3230
|
{
|
|
3231
3231
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -3258,10 +3258,10 @@
|
|
|
3258
3258
|
"value": "var( --font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)) )"
|
|
3259
3259
|
},
|
|
3260
3260
|
{
|
|
3261
|
-
"description": "
|
|
3261
|
+
"description": "default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
3262
3262
|
"name": "--slider-mark-color",
|
|
3263
3263
|
"tier": "component",
|
|
3264
|
-
"value": "
|
|
3264
|
+
"value": "initial"
|
|
3265
3265
|
},
|
|
3266
3266
|
{
|
|
3267
3267
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -3336,10 +3336,10 @@
|
|
|
3336
3336
|
"value": "var(--background)"
|
|
3337
3337
|
},
|
|
3338
3338
|
{
|
|
3339
|
-
"description": "
|
|
3339
|
+
"description": "default = var(--foreground), resolved at the call site (gh#906)",
|
|
3340
3340
|
"name": "--choice-button-color",
|
|
3341
3341
|
"tier": "component",
|
|
3342
|
-
"value": "
|
|
3342
|
+
"value": "initial"
|
|
3343
3343
|
},
|
|
3344
3344
|
{
|
|
3345
3345
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -3378,10 +3378,10 @@
|
|
|
3378
3378
|
"value": "initial"
|
|
3379
3379
|
},
|
|
3380
3380
|
{
|
|
3381
|
-
"description": "Ring knobs for the two controls that historically wanted a softer mark than the global default — both are filled surfaces where the ring was felt to read as a second border. THE ALPHA IS 1, AND THAT IS THE CRITERION TALKING. WCAG 2.2 SC 1.4.11 asks for ≥3:1 between the focused and unfocused states of the pixels that mark focus, and colour is the whole of that bar. Measured against this palette, the focus hue at alpha 0.35 composites to 1.64:1 against the page (0.45 → ≈1.90); nothing in that band is a compliant indicator, so \"softer\" was buying taste at the cost of the criterion. The softening now comes from the HALO (`--focus-ring-glow-*`), which sits outside the opaque stop and is free to be as quiet as it likes because it is decoration rather than the indicator. The knobs stay — a service can still trade the criterion away deliberately — but the shipped default no longer makes that trade silently. Guarded by src/tokens/__tests__/focus-ring-contrast.test.ts.",
|
|
3381
|
+
"description": "Ring knobs for the two controls that historically wanted a softer mark than the global default — both are filled surfaces where the ring was felt to read as a second border. THE ALPHA IS 1, AND THAT IS THE CRITERION TALKING. WCAG 2.2 SC 1.4.11 asks for ≥3:1 between the focused and unfocused states of the pixels that mark focus, and colour is the whole of that bar. Measured against this palette, the focus hue at alpha 0.35 composites to 1.64:1 against the page (0.45 → ≈1.90); nothing in that band is a compliant indicator, so \"softer\" was buying taste at the cost of the criterion. The softening now comes from the HALO (`--focus-ring-glow-*`), which sits outside the opaque stop and is free to be as quiet as it likes because it is decoration rather than the indicator. The knobs stay — a service can still trade the criterion away deliberately — but the shipped default no longer makes that trade silently. Guarded by src/tokens/__tests__/focus-ring-contrast.test.ts. default = var(--stroke-lg), resolved at the call site (gh#906)",
|
|
3382
3382
|
"name": "--toggle-focus-ring-width",
|
|
3383
3383
|
"tier": "component",
|
|
3384
|
-
"value": "
|
|
3384
|
+
"value": "initial"
|
|
3385
3385
|
},
|
|
3386
3386
|
{
|
|
3387
3387
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -3390,10 +3390,10 @@
|
|
|
3390
3390
|
"value": "1"
|
|
3391
3391
|
},
|
|
3392
3392
|
{
|
|
3393
|
-
"description": "Mark width for a BORDERED FIELD. This knob exists because a field is the one control that already owns a boundary, so it is the one place the mark could plausibly be dropped and the recoloured border left to carry the state — which is the established treatment for a bordered field: a primary border plus a translucent halo, nothing in between. It ships at the same step as `--focus-outline-weight`, the hairline stroke, so a field and a button carry the same weight. A gate asserts the two stay equal, because this token cannot literally READ the global one without freezing at :root (docs/TOKENS.md, the freeze rule). It feeds `--focus-ring-weight`, never `--focus-ring-width`. The width is `weight × --focus-outline`, so a field's mark is still switched off with everything else — a knob that bypassed the switch would be a hole in it. If a service sets this, note the unit: the halo's spread is summed with a length in `calc()`, and CSS refuses to add a unitless number to a length — a bare `0` makes the whole box-shadow invalid at computed-value time and it resolves to NONE. Write `0px`.",
|
|
3393
|
+
"description": "Mark width for a BORDERED FIELD. This knob exists because a field is the one control that already owns a boundary, so it is the one place the mark could plausibly be dropped and the recoloured border left to carry the state — which is the established treatment for a bordered field: a primary border plus a translucent halo, nothing in between. It ships at the same step as `--focus-outline-weight`, the hairline stroke, so a field and a button carry the same weight. A gate asserts the two stay equal, because this token cannot literally READ the global one without freezing at :root (docs/TOKENS.md, the freeze rule). It feeds `--focus-ring-weight`, never `--focus-ring-width`. The width is `weight × --focus-outline`, so a field's mark is still switched off with everything else — a knob that bypassed the switch would be a hole in it. If a service sets this, note the unit: the halo's spread is summed with a length in `calc()`, and CSS refuses to add a unitless number to a length — a bare `0` makes the whole box-shadow invalid at computed-value time and it resolves to NONE. Write `0px`. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
3394
3394
|
"name": "--control-focus-ring-width",
|
|
3395
3395
|
"tier": "component",
|
|
3396
|
-
"value": "
|
|
3396
|
+
"value": "initial"
|
|
3397
3397
|
},
|
|
3398
3398
|
{
|
|
3399
3399
|
"description": "Outline-form gaps — marks where a radius-hugging ring would touch the glyph.",
|
|
@@ -3420,10 +3420,10 @@
|
|
|
3420
3420
|
"value": "0.45"
|
|
3421
3421
|
},
|
|
3422
3422
|
{
|
|
3423
|
-
"description": "
|
|
3423
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
3424
3424
|
"name": "--checkbox-border-width",
|
|
3425
3425
|
"tier": "component",
|
|
3426
|
-
"value": "
|
|
3426
|
+
"value": "initial"
|
|
3427
3427
|
},
|
|
3428
3428
|
{
|
|
3429
3429
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -3690,10 +3690,10 @@
|
|
|
3690
3690
|
"value": "0px"
|
|
3691
3691
|
},
|
|
3692
3692
|
{
|
|
3693
|
-
"description": "
|
|
3693
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
3694
3694
|
"name": "--command-item-divider-width",
|
|
3695
3695
|
"tier": "component",
|
|
3696
|
-
"value": "
|
|
3696
|
+
"value": "initial"
|
|
3697
3697
|
},
|
|
3698
3698
|
{
|
|
3699
3699
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -3909,7 +3909,7 @@
|
|
|
3909
3909
|
"description": "The non-text part of the box the row maths must add back: block padding + border, both edges. `.ui-textarea-autogrow--ghost` re-declares it without the border, because the ghost variant drops its own chrome.",
|
|
3910
3910
|
"name": "--textarea-autogrow-box-inset",
|
|
3911
3911
|
"tier": "component",
|
|
3912
|
-
"value": "calc( (var(--control-multiline-padding-block) + var(--control-border-width)) * 2 )"
|
|
3912
|
+
"value": "calc( (var(--control-multiline-padding-block) + var(--control-border-width, var(--stroke-hairline))) * 2 )"
|
|
3913
3913
|
},
|
|
3914
3914
|
{
|
|
3915
3915
|
"description": "COMPOSITE FIELD — the bordered box that wraps two inputs plus a separator (date/month range pickers) or one input plus affixes. Shared so the four range/picker fields cannot drift into four slightly different boxes.",
|
|
@@ -4380,10 +4380,10 @@
|
|
|
4380
4380
|
"value": "var(--space-2)"
|
|
4381
4381
|
},
|
|
4382
4382
|
{
|
|
4383
|
-
"description": "
|
|
4383
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
4384
4384
|
"name": "--calendar-footer-border-width",
|
|
4385
4385
|
"tier": "component",
|
|
4386
|
-
"value": "
|
|
4386
|
+
"value": "initial"
|
|
4387
4387
|
},
|
|
4388
4388
|
{
|
|
4389
4389
|
"description": "Block inset of a header cell once the grid is RULED. Unruled, the header row has no edge for its text to sit against, so it needs none; ruled, the line box started right at the 1px rule — measured 1px from the top border and 2.19px from the bottom, an inset below the smallest named step. The smallest step, not a literal, so a service retuning the spacing grid moves it too.",
|
|
@@ -4632,10 +4632,10 @@
|
|
|
4632
4632
|
"value": "1rem"
|
|
4633
4633
|
},
|
|
4634
4634
|
{
|
|
4635
|
-
"description": "
|
|
4635
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
4636
4636
|
"name": "--otp-caret-inline-size",
|
|
4637
4637
|
"tier": "component",
|
|
4638
|
-
"value": "
|
|
4638
|
+
"value": "initial"
|
|
4639
4639
|
},
|
|
4640
4640
|
{
|
|
4641
4641
|
"description": "Control primitive tokens: heights, horizontal padding, adjacent control sizes.",
|
|
@@ -5160,10 +5160,10 @@
|
|
|
5160
5160
|
"value": "var(--space-1)"
|
|
5161
5161
|
},
|
|
5162
5162
|
{
|
|
5163
|
-
"description": "
|
|
5163
|
+
"description": "default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
5164
5164
|
"name": "--prose-quote-border-width",
|
|
5165
5165
|
"tier": "component",
|
|
5166
|
-
"value": "
|
|
5166
|
+
"value": "initial"
|
|
5167
5167
|
},
|
|
5168
5168
|
{
|
|
5169
5169
|
"description": "Data-display component tokens — small-by-design text knobs (rule #45/#46).",
|
|
@@ -5358,16 +5358,16 @@
|
|
|
5358
5358
|
"value": "0"
|
|
5359
5359
|
},
|
|
5360
5360
|
{
|
|
5361
|
-
"description": "
|
|
5361
|
+
"description": "default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
5362
5362
|
"name": "--avatar-presence-ring-width",
|
|
5363
5363
|
"tier": "component",
|
|
5364
|
-
"value": "
|
|
5364
|
+
"value": "initial"
|
|
5365
5365
|
},
|
|
5366
5366
|
{
|
|
5367
|
-
"description": "
|
|
5367
|
+
"description": "default = var(--stroke-sm), resolved at the call site (gh#906)",
|
|
5368
5368
|
"name": "--avatar-presence-stroke-width",
|
|
5369
5369
|
"tier": "component",
|
|
5370
|
-
"value": "
|
|
5370
|
+
"value": "initial"
|
|
5371
5371
|
},
|
|
5372
5372
|
{
|
|
5373
5373
|
"description": "Data-display component tokens — small-by-design text knobs (rule #45/#46).",
|
|
@@ -5376,10 +5376,10 @@
|
|
|
5376
5376
|
"value": "56%"
|
|
5377
5377
|
},
|
|
5378
5378
|
{
|
|
5379
|
-
"description": "
|
|
5379
|
+
"description": "default = var(--stroke-sm), resolved at the call site (gh#906)",
|
|
5380
5380
|
"name": "--avatar-presence-bar-block-size",
|
|
5381
5381
|
"tier": "component",
|
|
5382
|
-
"value": "
|
|
5382
|
+
"value": "initial"
|
|
5383
5383
|
},
|
|
5384
5384
|
{
|
|
5385
5385
|
"description": "Data-display component tokens — small-by-design text knobs (rule #45/#46).",
|
|
@@ -5472,10 +5472,10 @@
|
|
|
5472
5472
|
"value": "2rem"
|
|
5473
5473
|
},
|
|
5474
5474
|
{
|
|
5475
|
-
"description": "
|
|
5475
|
+
"description": "default = var(--stroke-lg), resolved at the call site (gh#906)",
|
|
5476
5476
|
"name": "--progress-ring-border-width",
|
|
5477
5477
|
"tier": "component",
|
|
5478
|
-
"value": "
|
|
5478
|
+
"value": "initial"
|
|
5479
5479
|
},
|
|
5480
5480
|
{
|
|
5481
5481
|
"description": "A KNOB, with the derivation at the CALL SITE — and the first attempt got this wrong. It was `--font-size-xs`, one value for every diameter, so a 32px `sm` ring carried the same 12.47px label as the 44px default and \"18/42\" measured 32.6px — wider than the ring, painting over the arc. \"0/42\" fits, which is why the demo looked correct. The fix was `calc(var(--progress-ring-size) * 0.28)` HERE, and that does not work: a custom property substitutes its var() where it is DECLARED, so this reads the `:root` diameter and freezes. Measured after that change — both the 44px and the 32px ring rendered a 12.32px label, i.e. the sm ring was not scaled at all and only `max-inline-size` was saving it. The same freeze rule this repo documents for `--ring` and the primary family, walked into while fixing something else. So it is `initial`, and the formula lives at the element that PAINTS it, where `--progress-ring-size` is whatever `[data-size=\"sm\"]` last said. 0.28 reproduces the previous default (44 × 0.28 = 12.3px ≈ the 12.47 it replaces), so the md ring does not move.",
|
|
@@ -5532,10 +5532,10 @@
|
|
|
5532
5532
|
"value": "0.125rem"
|
|
5533
5533
|
},
|
|
5534
5534
|
{
|
|
5535
|
-
"description": "The hairline that keeps a white value visible on a white card. It is the resting border weight, not a decision of this component.",
|
|
5535
|
+
"description": "The hairline that keeps a white value visible on a white card. It is the resting border weight, not a decision of this component. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
5536
5536
|
"name": "--swatch-border-width",
|
|
5537
5537
|
"tier": "component",
|
|
5538
|
-
"value": "
|
|
5538
|
+
"value": "initial"
|
|
5539
5539
|
},
|
|
5540
5540
|
{
|
|
5541
5541
|
"description": "`initial` so the border role re-resolves at the call site under a scoped theme. Default = hsl(var(--border)).",
|
|
@@ -5598,10 +5598,10 @@
|
|
|
5598
5598
|
"value": "10rem"
|
|
5599
5599
|
},
|
|
5600
5600
|
{
|
|
5601
|
-
"description": "
|
|
5601
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
5602
5602
|
"name": "--thumbnail-border-width",
|
|
5603
5603
|
"tier": "component",
|
|
5604
|
-
"value": "
|
|
5604
|
+
"value": "initial"
|
|
5605
5605
|
},
|
|
5606
5606
|
{
|
|
5607
5607
|
"description": "gh#888 — φ tier freezes at :root; default = var(--radius)",
|
|
@@ -5634,10 +5634,10 @@
|
|
|
5634
5634
|
"value": "initial"
|
|
5635
5635
|
},
|
|
5636
5636
|
{
|
|
5637
|
-
"description": "The current dot's ring is the ONLY chromatic difference from a done dot, so it is `--steps-dot-process-ring-width` token-for-token — the same ring, meaning the same thing.",
|
|
5637
|
+
"description": "The current dot's ring is the ONLY chromatic difference from a done dot, so it is `--steps-dot-process-ring-width` token-for-token — the same ring, meaning the same thing. default = var(--stroke-xl), resolved at the call site (gh#906)",
|
|
5638
5638
|
"name": "--timeline-dot-current-ring-width",
|
|
5639
5639
|
"tier": "component",
|
|
5640
|
-
"value": "
|
|
5640
|
+
"value": "initial"
|
|
5641
5641
|
},
|
|
5642
5642
|
{
|
|
5643
5643
|
"description": "QR codes stay scanner-safe in light and dark application themes. Consumers may override these component tokens only when the resulting pair retains strong contrast.",
|
|
@@ -5736,16 +5736,16 @@
|
|
|
5736
5736
|
"value": "initial"
|
|
5737
5737
|
},
|
|
5738
5738
|
{
|
|
5739
|
-
"description": "
|
|
5739
|
+
"description": "default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
5740
5740
|
"name": "--timeline-grid-event-border-width",
|
|
5741
5741
|
"tier": "component",
|
|
5742
|
-
"value": "
|
|
5742
|
+
"value": "initial"
|
|
5743
5743
|
},
|
|
5744
5744
|
{
|
|
5745
|
-
"description": "
|
|
5745
|
+
"description": "default = var(--stroke-sm), resolved at the call site (gh#906)",
|
|
5746
5746
|
"name": "--timeline-grid-now-width",
|
|
5747
5747
|
"tier": "component",
|
|
5748
|
-
"value": "
|
|
5748
|
+
"value": "initial"
|
|
5749
5749
|
},
|
|
5750
5750
|
{
|
|
5751
5751
|
"description": "Role-mirror knobs (docs/TOKENS.md): `initial` so the defaults re-resolve at the CALL SITE and a scoped [data-tenant]/.dark override of the role still reaches them. Defaults = hsl(var(--border)) hour rules · hsl(var(--primary)) block accent · hsl(var(--destructive)) now marker · hsl(var(--primary)) current-column wash.",
|
|
@@ -5862,10 +5862,10 @@
|
|
|
5862
5862
|
"value": "initial"
|
|
5863
5863
|
},
|
|
5864
5864
|
{
|
|
5865
|
-
"description": "Weight of every grid rule, header column rules included, so header and body stay aligned.",
|
|
5865
|
+
"description": "Weight of every grid rule, header column rules included, so header and body stay aligned. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
5866
5866
|
"name": "--range-timeline-grid-width",
|
|
5867
5867
|
"tier": "component",
|
|
5868
|
-
"value": "
|
|
5868
|
+
"value": "initial"
|
|
5869
5869
|
},
|
|
5870
5870
|
{
|
|
5871
5871
|
"description": "Fill for `columns[].muted` (a non-working day), full body height. `initial`; call-site default `hsl(var(--muted))`, the header's own surface, so a muted column reads as part of the axis.",
|
|
@@ -5916,10 +5916,10 @@
|
|
|
5916
5916
|
"value": "1rem"
|
|
5917
5917
|
},
|
|
5918
5918
|
{
|
|
5919
|
-
"description": "The indent rule itself is CHROME (#44), so it is a knob: a service that wants the flat treatment sets it to 0 rather than forking the component. Default = today's `border-s-2`.",
|
|
5919
|
+
"description": "The indent rule itself is CHROME (#44), so it is a knob: a service that wants the flat treatment sets it to 0 rather than forking the component. Default = today's `border-s-2`. default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
5920
5920
|
"name": "--branch-scope-picker-subset-border-width",
|
|
5921
5921
|
"tier": "component",
|
|
5922
|
-
"value": "
|
|
5922
|
+
"value": "initial"
|
|
5923
5923
|
},
|
|
5924
5924
|
{
|
|
5925
5925
|
"description": "Bounded height of the scrollable branch list (was `max-h-64`). Flat by design: the box is a keyboard-reachable scroll region whose job is to cap the control's measure, so it must not grow with density and push the surrounding form off a 390px frame.",
|
|
@@ -5976,7 +5976,7 @@
|
|
|
5976
5976
|
"value": "var(--descriptions-value-line-height)"
|
|
5977
5977
|
},
|
|
5978
5978
|
{
|
|
5979
|
-
"description": "ROW CHROME (gh#414) — the ruled property panel. Both knobs are QUIET by default (rule #44), so an existing Descriptions is byte-identical: no rule, no band height. Same shape as --page-header-divider / --page-toolbar-divider / --page-footer-divider on PageContainer: a `border` shorthand a service opts into with ONE declaration (`--descriptions-row-border:
|
|
5979
|
+
"description": "ROW CHROME (gh#414) — the ruled property panel. Both knobs are QUIET by default (rule #44), so an existing Descriptions is byte-identical: no rule, no band height. Same shape as --page-header-divider / --page-toolbar-divider / --page-footer-divider on PageContainer: a `border` shorthand a service opts into with ONE declaration (`--descriptions-row-border: var(--stroke-hairline) solid hsl(var(--border))`), read at the call site. Bound at :root rather than `initial` because the default is a plain CSS keyword, not another role token — there is nothing for a scoped [data-tenant]/.dark override to re-resolve, and the keyword is worth reading here (the same reasoning --page-toolbar-background records). The rule is drawn only on an UNBORDERED grid: `bordered` already draws a rule between every cell, and a second block-end border would double every line it owns. --descriptions-row-min-height gives the ruled variant its band height — a ruled row whose value is one short line otherwise reads as a hairline sandwich. `auto` = today. A continuously ruled panel sets --descriptions-row-gap to `0` in the same declaration block: the row gap is the space BETWEEN rules, so leaving it at the default 12px draws a ladder of detached hairlines rather than a ruled list.",
|
|
5980
5980
|
"name": "--descriptions-row-border",
|
|
5981
5981
|
"tier": "component",
|
|
5982
5982
|
"value": "none"
|
|
@@ -5988,10 +5988,10 @@
|
|
|
5988
5988
|
"value": "auto"
|
|
5989
5989
|
},
|
|
5990
5990
|
{
|
|
5991
|
-
"description": "BORDERED grid (antd `bordered`). The rule between cells and the frame around them. Width is a stroke step so a service that thickens every hairline gets this one with it; colour is deliberately left to the global `border-color` role so a scoped [data-tenant] override still reaches it.",
|
|
5991
|
+
"description": "BORDERED grid (antd `bordered`). The rule between cells and the frame around them. Width is a stroke step so a service that thickens every hairline gets this one with it; colour is deliberately left to the global `border-color` role so a scoped [data-tenant] override still reaches it. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
5992
5992
|
"name": "--descriptions-border-width",
|
|
5993
5993
|
"tier": "component",
|
|
5994
|
-
"value": "
|
|
5994
|
+
"value": "initial"
|
|
5995
5995
|
},
|
|
5996
5996
|
{
|
|
5997
5997
|
"description": "gh#888 — φ tier freezes at :root; default = calc(var(--radius) / var(--radius-ratio))",
|
|
@@ -6096,10 +6096,10 @@
|
|
|
6096
6096
|
"value": "var(--shadow-lg)"
|
|
6097
6097
|
},
|
|
6098
6098
|
{
|
|
6099
|
-
"description": "
|
|
6099
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
6100
6100
|
"name": "--draggable-panel-border-width",
|
|
6101
6101
|
"tier": "component",
|
|
6102
|
-
"value": "
|
|
6102
|
+
"value": "initial"
|
|
6103
6103
|
},
|
|
6104
6104
|
{
|
|
6105
6105
|
"description": "DRAGGABLE PANEL — a floating, movable surface (gh#560). Geometry only. The two offset knobs are written by the component as UNITLESS numbers and multiplied by 1px in `styles/layout.css`, which is how a JS-computed position reaches CSS without a literal in the TSX (`check:no-inline-magic-numbers`).",
|
|
@@ -6402,7 +6402,7 @@
|
|
|
6402
6402
|
"value": "var(--space-2)"
|
|
6403
6403
|
},
|
|
6404
6404
|
{
|
|
6405
|
-
"description": "Chrome, default quiet (#44). A service opts in with `--error-surface-meta-border:
|
|
6405
|
+
"description": "Chrome, default quiet (#44). A service opts in with `--error-surface-meta-border: var(--stroke-hairline) solid hsl(var(--border));`.",
|
|
6406
6406
|
"name": "--error-surface-meta-border",
|
|
6407
6407
|
"tier": "component",
|
|
6408
6408
|
"value": "none"
|
|
@@ -6708,10 +6708,10 @@
|
|
|
6708
6708
|
"value": "0.3"
|
|
6709
6709
|
},
|
|
6710
6710
|
{
|
|
6711
|
-
"description": "BANNER — the page-level Alert treatment (gh#255). Every constant a service would want to match to its page grid is a knob (rule #45). --banner-radius and --banner-border-width are NOT declared here (gh#327). They used to be, and both copies were dead: components/banner.css declares the same two names at the same `:root`, base.css imports banner AFTER feedback, so banner won every time. Radius agreed at `0`, but border-width did not — this file said `0` and banner.css says `1px`, and `1px` is what alert-layout.css actually paints as the strip's block-end hairline. So anyone who read THIS file for the default was told the strip has no rule when it has one, and the MCP token catalog carried both entries with the two conflicting values. banner.css owns the strip geometry; these two live there and only there. The inline inset tracks the live page gutter, so a banner mounted above a PageContainer lines its text up with the page title instead of sitting at a second, unrelated margin.",
|
|
6711
|
+
"description": "BANNER — the page-level Alert treatment (gh#255). Every constant a service would want to match to its page grid is a knob (rule #45). --banner-radius and --banner-border-width are NOT declared here (gh#327). They used to be, and both copies were dead: components/banner.css declares the same two names at the same `:root`, base.css imports banner AFTER feedback, so banner won every time. Radius agreed at `0`, but border-width did not — this file said `0` and banner.css says `1px`, and `1px` is what alert-layout.css actually paints as the strip's block-end hairline. So anyone who read THIS file for the default was told the strip has no rule when it has one, and the MCP token catalog carried both entries with the two conflicting values. banner.css owns the strip geometry; these two live there and only there. The inline inset tracks the live page gutter, so a banner mounted above a PageContainer lines its text up with the page title instead of sitting at a second, unrelated margin. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
6712
6712
|
"name": "--banner-border-block-end-width",
|
|
6713
6713
|
"tier": "component",
|
|
6714
|
-
"value": "
|
|
6714
|
+
"value": "initial"
|
|
6715
6715
|
},
|
|
6716
6716
|
{
|
|
6717
6717
|
"description": "Feedback primitive tokens: dialog, alert, empty state.",
|
|
@@ -7386,13 +7386,13 @@
|
|
|
7386
7386
|
"value": "calc(100dvh - var(--space-12))"
|
|
7387
7387
|
},
|
|
7388
7388
|
{
|
|
7389
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7389
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7390
7390
|
"name": "--legal-document-toc-gap",
|
|
7391
7391
|
"tier": "component",
|
|
7392
7392
|
"value": "var(--space-1)"
|
|
7393
7393
|
},
|
|
7394
7394
|
{
|
|
7395
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7395
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7396
7396
|
"name": "--legal-document-toc-item-padding",
|
|
7397
7397
|
"tier": "component",
|
|
7398
7398
|
"value": "var(--space-1) var(--space-2)"
|
|
@@ -7404,22 +7404,22 @@
|
|
|
7404
7404
|
"value": "initial"
|
|
7405
7405
|
},
|
|
7406
7406
|
{
|
|
7407
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7407
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7408
7408
|
"name": "--legal-document-toc-title-font-size",
|
|
7409
7409
|
"tier": "component",
|
|
7410
7410
|
"value": "var( --font-size-2xs, calc(var(--font-size-base) / var(--font-size-ratio) / var(--font-size-ratio)) )"
|
|
7411
7411
|
},
|
|
7412
7412
|
{
|
|
7413
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7413
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7414
7414
|
"name": "--legal-document-toc-font-size",
|
|
7415
7415
|
"tier": "component",
|
|
7416
7416
|
"value": "var( --font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)) )"
|
|
7417
7417
|
},
|
|
7418
7418
|
{
|
|
7419
|
-
"description": "Leading marker on the active contents entry — a non-colour affordance so the active state is never colour-only (WCAG 1.4.1).",
|
|
7419
|
+
"description": "Leading marker on the active contents entry — a non-colour affordance so the active state is never colour-only (WCAG 1.4.1). default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
7420
7420
|
"name": "--legal-document-toc-marker-width",
|
|
7421
7421
|
"tier": "component",
|
|
7422
|
-
"value": "
|
|
7422
|
+
"value": "initial"
|
|
7423
7423
|
},
|
|
7424
7424
|
{
|
|
7425
7425
|
"description": "Gap between the `documentNavigation` slot and the contents list inside the rail.",
|
|
@@ -7428,31 +7428,31 @@
|
|
|
7428
7428
|
"value": "var(--space-4)"
|
|
7429
7429
|
},
|
|
7430
7430
|
{
|
|
7431
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7431
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7432
7432
|
"name": "--legal-document-header-gap",
|
|
7433
7433
|
"tier": "component",
|
|
7434
7434
|
"value": "var(--space-2)"
|
|
7435
7435
|
},
|
|
7436
7436
|
{
|
|
7437
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7437
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7438
7438
|
"name": "--legal-document-meta-gap",
|
|
7439
7439
|
"tier": "component",
|
|
7440
7440
|
"value": "var(--space-2)"
|
|
7441
7441
|
},
|
|
7442
7442
|
{
|
|
7443
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7443
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7444
7444
|
"name": "--legal-document-meta-font-size",
|
|
7445
7445
|
"tier": "component",
|
|
7446
7446
|
"value": "var( --font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)) )"
|
|
7447
7447
|
},
|
|
7448
7448
|
{
|
|
7449
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7449
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7450
7450
|
"name": "--legal-document-section-gap",
|
|
7451
7451
|
"tier": "component",
|
|
7452
7452
|
"value": "var(--space-10)"
|
|
7453
7453
|
},
|
|
7454
7454
|
{
|
|
7455
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7455
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7456
7456
|
"name": "--legal-document-section-title-gap",
|
|
7457
7457
|
"tier": "component",
|
|
7458
7458
|
"value": "var(--space-3)"
|
|
@@ -7470,7 +7470,7 @@
|
|
|
7470
7470
|
"value": "var(--space-6)"
|
|
7471
7471
|
},
|
|
7472
7472
|
{
|
|
7473
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7473
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7474
7474
|
"name": "--legal-document-footer-gap",
|
|
7475
7475
|
"tier": "component",
|
|
7476
7476
|
"value": "var(--space-4)"
|
|
@@ -7482,13 +7482,13 @@
|
|
|
7482
7482
|
"value": "none"
|
|
7483
7483
|
},
|
|
7484
7484
|
{
|
|
7485
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7485
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7486
7486
|
"name": "--legal-document-header-border",
|
|
7487
7487
|
"tier": "component",
|
|
7488
7488
|
"value": "none"
|
|
7489
7489
|
},
|
|
7490
7490
|
{
|
|
7491
|
-
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border:
|
|
7491
|
+
"description": "LegalDocumentShell component tokens — the long-form legal/policy document surface (terms of service, privacy policy, DPA, cookie policy, SLA, EULA) with a sticky table-of-contents rail. Rule #45 — every service-tunable constant is a knob: the readable measure, the rail width/offset, the section rhythm and the body leading are exactly the values a service theme wants to re-tune to match its design grid, so NONE of them are hard-coded in `src/styles/layout.css`. Rule #44 — chrome is a token, default QUIET: every divider (`*-border`) defaults to `none`. A service opts IN via theme, e.g. --legal-document-toc-border: var(--stroke-hairline) solid hsl(var(--border)); Colour knobs whose default is a ROLE token are declared `initial` here with the role default at the CALL SITE (`var(--knob, var(--role))`) — see docs/TOKENS.md · \"Role-mirror knobs MUST be `initial`\" — so a scoped `[data-tenant]` / `.dark` override of the role still reaches them.",
|
|
7492
7492
|
"name": "--legal-document-footer-border",
|
|
7493
7493
|
"tier": "component",
|
|
7494
7494
|
"value": "none"
|
|
@@ -7842,10 +7842,10 @@
|
|
|
7842
7842
|
"value": "initial"
|
|
7843
7843
|
},
|
|
7844
7844
|
{
|
|
7845
|
-
"description": "── The PRODUCT SUFFIX (`<Logo mark=\"godx-lockup\" productSuffix=\"ID\" />`, gh#649) ────────── \"GoDX | ID\" — the brand lockup followed by a rule and the name of ONE product. Later also \"GoDX | Console\", \"GoDX | Admin\", and each of those localized. WHY THE SUFFIX IS TYPESET AND NOT DRAWN. The kit hands over \"GoDX | ID\" as a single flattened lockup in its own coordinate space (`0 0 1234 242`, against this package's `30 30 871.29 182`), so shipping it would put a SECOND master next to the one above — different box, different gradients, its own `id=\"title\"`/`id=\"desc\"`, its own hardcoded `#0B0F3B` ink and `#C5C8D6` rule. That is four of the defects gh#649 was opened about, and it buys nothing that survives the next product: a drawn suffix means one more master, one more release and one more dark variant for every name that is ever added, and it cannot be localized at all. So the suffix is TEXT — the same decision, and the same tokens, the readable `wordmark` already uses. The brand's own construction (the G, the arrow, the \"GoDX\" logotype, the golden ratio between them) stays untouched inside the master; a PRODUCT NAME is not part of that construction. SIZE / FACE / TRACKING ARE THE WORDMARK'S, ON PURPOSE. The suffix sits on the same baseline, in the same lockup, at the same optical level as the wordmark, so it reads --logo-wordmark-font-size-* / --logo-wordmark-font-family / --logo-wordmark-letter-spacing rather than growing a parallel ramp a service would then have to keep in step. Only the two knobs whose ROLE differs get their own token: the suffix is not the brand logotype, so it is set in UI ink (--foreground) at a lighter weight, and \"GoDX\" stays the dominant word. THE RULE. --logo-divider-height is `1em` of the suffix's own type, so the tick is exactly as tall as the word it separates at every tier with no per-tier token: 12.5 / 14 / 14 / 17.6px against a 24 / 28 / 32 / 40px lockup box. ITS COLOUR IS THE LOGOTYPE'S INK AT 0.25 ALPHA, NOT A GREY AND NOT --border. Measured on the shipped tokens: light #0B0F3B at 0.25 over --background #fdfdfb → #c1c2cb, 1.74:1 the kit's hardcoded rule #c5c8d6 → 1.64:1 (ΔRGB ≤ 11, no dark counterpart) --border (the table-grid hairline) → 1.15:1 (its own note above records this) dark #F7FAF8 at 0.25 over --background #191815 → #515150, 2.30:1 So the rule lands on the kit's grey in the theme the kit drew it for, and — unlike the literal — it has a dark theme at all, because it is derived from --logo-godx-ink-color, which already flips. ALPHA rather than a mix with --background, so the rule is still correct on a coloured topbar. Nothing here is WCAG-load-bearing: SC 1.4.11 exempts a part of a logo or brand name. ROLE-MIRROR KNOBS — `initial` here, role default at the CALL SITE (docs/TOKENS.md). Documented defaults: --logo-divider-color = var(--logo-godx-ink-color) --logo-product-suffix-color = hsl(var(--foreground))",
|
|
7845
|
+
"description": "── The PRODUCT SUFFIX (`<Logo mark=\"godx-lockup\" productSuffix=\"ID\" />`, gh#649) ────────── \"GoDX | ID\" — the brand lockup followed by a rule and the name of ONE product. Later also \"GoDX | Console\", \"GoDX | Admin\", and each of those localized. WHY THE SUFFIX IS TYPESET AND NOT DRAWN. The kit hands over \"GoDX | ID\" as a single flattened lockup in its own coordinate space (`0 0 1234 242`, against this package's `30 30 871.29 182`), so shipping it would put a SECOND master next to the one above — different box, different gradients, its own `id=\"title\"`/`id=\"desc\"`, its own hardcoded `#0B0F3B` ink and `#C5C8D6` rule. That is four of the defects gh#649 was opened about, and it buys nothing that survives the next product: a drawn suffix means one more master, one more release and one more dark variant for every name that is ever added, and it cannot be localized at all. So the suffix is TEXT — the same decision, and the same tokens, the readable `wordmark` already uses. The brand's own construction (the G, the arrow, the \"GoDX\" logotype, the golden ratio between them) stays untouched inside the master; a PRODUCT NAME is not part of that construction. SIZE / FACE / TRACKING ARE THE WORDMARK'S, ON PURPOSE. The suffix sits on the same baseline, in the same lockup, at the same optical level as the wordmark, so it reads --logo-wordmark-font-size-* / --logo-wordmark-font-family / --logo-wordmark-letter-spacing rather than growing a parallel ramp a service would then have to keep in step. Only the two knobs whose ROLE differs get their own token: the suffix is not the brand logotype, so it is set in UI ink (--foreground) at a lighter weight, and \"GoDX\" stays the dominant word. THE RULE. --logo-divider-height is `1em` of the suffix's own type, so the tick is exactly as tall as the word it separates at every tier with no per-tier token: 12.5 / 14 / 14 / 17.6px against a 24 / 28 / 32 / 40px lockup box. ITS COLOUR IS THE LOGOTYPE'S INK AT 0.25 ALPHA, NOT A GREY AND NOT --border. Measured on the shipped tokens: light #0B0F3B at 0.25 over --background #fdfdfb → #c1c2cb, 1.74:1 the kit's hardcoded rule #c5c8d6 → 1.64:1 (ΔRGB ≤ 11, no dark counterpart) --border (the table-grid hairline) → 1.15:1 (its own note above records this) dark #F7FAF8 at 0.25 over --background #191815 → #515150, 2.30:1 So the rule lands on the kit's grey in the theme the kit drew it for, and — unlike the literal — it has a dark theme at all, because it is derived from --logo-godx-ink-color, which already flips. ALPHA rather than a mix with --background, so the rule is still correct on a coloured topbar. Nothing here is WCAG-load-bearing: SC 1.4.11 exempts a part of a logo or brand name. ROLE-MIRROR KNOBS — `initial` here, role default at the CALL SITE (docs/TOKENS.md). Documented defaults: --logo-divider-color = var(--logo-godx-ink-color) --logo-product-suffix-color = hsl(var(--foreground)) default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
7846
7846
|
"name": "--logo-divider-width",
|
|
7847
7847
|
"tier": "component",
|
|
7848
|
-
"value": "
|
|
7848
|
+
"value": "initial"
|
|
7849
7849
|
},
|
|
7850
7850
|
{
|
|
7851
7851
|
"description": "Logo component tokens — the product brand-mark box (a glyph on the primary fill), used in the app shell header, auth screens, and topbars. Size + radius + per-tier font-size are knobs so a service theme retunes the mark without forking CSS (rules #44/#45). Colours read the primary role tokens directly, so a re-themed --primary re-tints the mark automatically.",
|
|
@@ -8034,10 +8034,10 @@
|
|
|
8034
8034
|
"value": "hsl(var(--border))"
|
|
8035
8035
|
},
|
|
8036
8036
|
{
|
|
8037
|
-
"description": "
|
|
8037
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
8038
8038
|
"name": "--mega-menu-panel-border-width",
|
|
8039
8039
|
"tier": "component",
|
|
8040
|
-
"value": "
|
|
8040
|
+
"value": "initial"
|
|
8041
8041
|
},
|
|
8042
8042
|
{
|
|
8043
8043
|
"description": "gh#888 — φ tier freezes at :root; default = calc(var(--radius) / var(--radius-ratio))",
|
|
@@ -8580,10 +8580,10 @@
|
|
|
8580
8580
|
"value": "var(--radius-md, calc(var(--radius) / var(--radius-ratio)))"
|
|
8581
8581
|
},
|
|
8582
8582
|
{
|
|
8583
|
-
"description": "
|
|
8583
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
8584
8584
|
"name": "--tabs-card-rail-border-width",
|
|
8585
8585
|
"tier": "component",
|
|
8586
|
-
"value": "
|
|
8586
|
+
"value": "initial"
|
|
8587
8587
|
},
|
|
8588
8588
|
{
|
|
8589
8589
|
"description": "default = var(--muted) at the call site",
|
|
@@ -8613,7 +8613,7 @@
|
|
|
8613
8613
|
"description": "Navigation primitive tokens: pagination, filters, compact pickers.",
|
|
8614
8614
|
"name": "--tabs-panel-border-width",
|
|
8615
8615
|
"tier": "component",
|
|
8616
|
-
"value": "var(--tabs-card-rail-border-width)"
|
|
8616
|
+
"value": "var(--tabs-card-rail-border-width, var(--stroke-hairline))"
|
|
8617
8617
|
},
|
|
8618
8618
|
{
|
|
8619
8619
|
"description": "`initial`, not `var(--tabs-card-radius)` — a :root binding freezes (gh#888); default resolves at the call site. Default = var(--tabs-card-radius).",
|
|
@@ -8694,10 +8694,10 @@
|
|
|
8694
8694
|
"value": "initial"
|
|
8695
8695
|
},
|
|
8696
8696
|
{
|
|
8697
|
-
"description": "
|
|
8697
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
8698
8698
|
"name": "--tabs-count-forced-outline-width",
|
|
8699
8699
|
"tier": "component",
|
|
8700
|
-
"value": "
|
|
8700
|
+
"value": "initial"
|
|
8701
8701
|
},
|
|
8702
8702
|
{
|
|
8703
8703
|
"description": "TABS BAR ROW — the one inline run that holds the strip, the `editable-card` add button and the `extra` (antd `tabBarExtraContent`) slots.",
|
|
@@ -8976,16 +8976,16 @@
|
|
|
8976
8976
|
"value": "0.625rem"
|
|
8977
8977
|
},
|
|
8978
8978
|
{
|
|
8979
|
-
"description": "
|
|
8979
|
+
"description": "default = var(--stroke-xl), resolved at the call site (gh#906)",
|
|
8980
8980
|
"name": "--steps-dot-process-ring-width",
|
|
8981
8981
|
"tier": "component",
|
|
8982
|
-
"value": "
|
|
8982
|
+
"value": "initial"
|
|
8983
8983
|
},
|
|
8984
8984
|
{
|
|
8985
|
-
"description": "
|
|
8985
|
+
"description": "default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
8986
8986
|
"name": "--steps-marker-border-width",
|
|
8987
8987
|
"tier": "component",
|
|
8988
|
-
"value": "
|
|
8988
|
+
"value": "initial"
|
|
8989
8989
|
},
|
|
8990
8990
|
{
|
|
8991
8991
|
"description": "Navigation primitive tokens: pagination, filters, compact pickers.",
|
|
@@ -9096,10 +9096,10 @@
|
|
|
9096
9096
|
"value": "var(--control-icon-size-sm)"
|
|
9097
9097
|
},
|
|
9098
9098
|
{
|
|
9099
|
-
"description": "STEPS `percent` (Ant Design) — the determinate arc around the CURRENT marker. It is a ring drawn in a padding box AROUND the existing marker, so no status face changes geometry. `--steps-progress-track-color` is a role-mirror knob (docs/TOKENS.md): `initial`, so the --muted default re-resolves at the CALL SITE under a scoped [data-tenant]/.dark theme.",
|
|
9099
|
+
"description": "STEPS `percent` (Ant Design) — the determinate arc around the CURRENT marker. It is a ring drawn in a padding box AROUND the existing marker, so no status face changes geometry. `--steps-progress-track-color` is a role-mirror knob (docs/TOKENS.md): `initial`, so the --muted default re-resolves at the CALL SITE under a scoped [data-tenant]/.dark theme. default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
9100
9100
|
"name": "--steps-progress-ring-width",
|
|
9101
9101
|
"tier": "component",
|
|
9102
|
-
"value": "
|
|
9102
|
+
"value": "initial"
|
|
9103
9103
|
},
|
|
9104
9104
|
{
|
|
9105
9105
|
"description": "default = var(--muted) at the call site",
|
|
@@ -9288,22 +9288,22 @@
|
|
|
9288
9288
|
"value": "calc(var(--space-3) / 2)"
|
|
9289
9289
|
},
|
|
9290
9290
|
{
|
|
9291
|
-
"description": "item ink = the label ink · hover / selected ink = the body ink.",
|
|
9291
|
+
"description": "item ink = the label ink · hover / selected ink = the body ink. default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
9292
9292
|
"name": "--segmented-item-color",
|
|
9293
9293
|
"tier": "component",
|
|
9294
|
-
"value": "
|
|
9294
|
+
"value": "initial"
|
|
9295
9295
|
},
|
|
9296
9296
|
{
|
|
9297
|
-
"description": "
|
|
9297
|
+
"description": "default = var(--foreground), resolved at the call site (gh#906)",
|
|
9298
9298
|
"name": "--segmented-item-hover-color",
|
|
9299
9299
|
"tier": "component",
|
|
9300
|
-
"value": "
|
|
9300
|
+
"value": "initial"
|
|
9301
9301
|
},
|
|
9302
9302
|
{
|
|
9303
|
-
"description": "
|
|
9303
|
+
"description": "default = var(--foreground), resolved at the call site (gh#906)",
|
|
9304
9304
|
"name": "--segmented-item-selected-color",
|
|
9305
9305
|
"tier": "component",
|
|
9306
|
-
"value": "
|
|
9306
|
+
"value": "initial"
|
|
9307
9307
|
},
|
|
9308
9308
|
{
|
|
9309
9309
|
"description": "item hover fill = the lighter neutral · active fill = the heavier of the pair. default = var(--accent), resolved at the call site (the freeze rule)",
|
|
@@ -9402,10 +9402,10 @@
|
|
|
9402
9402
|
"value": "initial"
|
|
9403
9403
|
},
|
|
9404
9404
|
{
|
|
9405
|
-
"description": "Rule weight, both orientations and both halves of a labelled rule.",
|
|
9405
|
+
"description": "Rule weight, both orientations and both halves of a labelled rule. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
9406
9406
|
"name": "--separator-rule-size",
|
|
9407
9407
|
"tier": "component",
|
|
9408
|
-
"value": "
|
|
9408
|
+
"value": "initial"
|
|
9409
9409
|
},
|
|
9410
9410
|
{
|
|
9411
9411
|
"description": "Rule colour. Role-mirror knob → declared `initial` so the --border default re-resolves at the CALL SITE under a scoped [data-tenant] / .dark theme (docs/TOKENS.md — the :root freeze rule). Documented default = hsl(var(--border)).",
|
|
@@ -9624,10 +9624,10 @@
|
|
|
9624
9624
|
"value": "var( --font-size-2xs, calc(var(--font-size-base) / var(--font-size-ratio) / var(--font-size-ratio)) )"
|
|
9625
9625
|
},
|
|
9626
9626
|
{
|
|
9627
|
-
"description": "
|
|
9627
|
+
"description": "default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
9628
9628
|
"name": "--org-switcher-meta-foreground",
|
|
9629
9629
|
"tier": "component",
|
|
9630
|
-
"value": "
|
|
9630
|
+
"value": "initial"
|
|
9631
9631
|
},
|
|
9632
9632
|
{
|
|
9633
9633
|
"description": "Shell (sidebar / topbar / kbd) component tokens — small-by-design text knobs (rule #45/#46). A service re-tunes chrome text without moving the global scale.",
|
|
@@ -10038,10 +10038,10 @@
|
|
|
10038
10038
|
"value": "var(--radius-sharp)"
|
|
10039
10039
|
},
|
|
10040
10040
|
{
|
|
10041
|
-
"description": "
|
|
10041
|
+
"description": "default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
10042
10042
|
"name": "--topbar-item-color",
|
|
10043
10043
|
"tier": "component",
|
|
10044
|
-
"value": "
|
|
10044
|
+
"value": "initial"
|
|
10045
10045
|
},
|
|
10046
10046
|
{
|
|
10047
10047
|
"description": "The bar's own hover surface — the same pair `.tb-icon-btn` already uses for the shell's built-in bar chrome, so a consumer-supplied cell and the shell's own read identically. default = var(--accent), resolved at the call site (the freeze rule)",
|
|
@@ -10266,10 +10266,10 @@
|
|
|
10266
10266
|
"value": "initial"
|
|
10267
10267
|
},
|
|
10268
10268
|
{
|
|
10269
|
-
"description": "
|
|
10269
|
+
"description": "default = var(--foreground), resolved at the call site (gh#906)",
|
|
10270
10270
|
"name": "--app-launcher-tile-color",
|
|
10271
10271
|
"tier": "component",
|
|
10272
|
-
"value": "
|
|
10272
|
+
"value": "initial"
|
|
10273
10273
|
},
|
|
10274
10274
|
{
|
|
10275
10275
|
"description": "default = var(--accent), resolved at the call site (the freeze rule)",
|
|
@@ -10338,10 +10338,10 @@
|
|
|
10338
10338
|
"value": "var( --font-size-2xs, calc(var(--font-size-base) / var(--font-size-ratio) / var(--font-size-ratio)) )"
|
|
10339
10339
|
},
|
|
10340
10340
|
{
|
|
10341
|
-
"description": "
|
|
10341
|
+
"description": "default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
10342
10342
|
"name": "--app-launcher-group-label-color",
|
|
10343
10343
|
"tier": "component",
|
|
10344
|
-
"value": "
|
|
10344
|
+
"value": "initial"
|
|
10345
10345
|
},
|
|
10346
10346
|
{
|
|
10347
10347
|
"description": "Shell (sidebar / topbar / kbd) component tokens — small-by-design text knobs (rule #45/#46). A service re-tunes chrome text without moving the global scale.",
|
|
@@ -10836,10 +10836,10 @@
|
|
|
10836
10836
|
"value": "var(--border)"
|
|
10837
10837
|
},
|
|
10838
10838
|
{
|
|
10839
|
-
"description": "
|
|
10839
|
+
"description": "default = var(--muted-foreground), resolved at the call site (gh#906)",
|
|
10840
10840
|
"name": "--auth-shell-divider-label-color",
|
|
10841
10841
|
"tier": "component",
|
|
10842
|
-
"value": "
|
|
10842
|
+
"value": "initial"
|
|
10843
10843
|
},
|
|
10844
10844
|
{
|
|
10845
10845
|
"description": "Shell (sidebar / topbar / kbd) component tokens — small-by-design text knobs (rule #45/#46). A service re-tunes chrome text without moving the global scale.",
|
|
@@ -11370,10 +11370,10 @@
|
|
|
11370
11370
|
"value": "initial"
|
|
11371
11371
|
},
|
|
11372
11372
|
{
|
|
11373
|
-
"description": "
|
|
11373
|
+
"description": "default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
11374
11374
|
"name": "--table-summary-border-width",
|
|
11375
11375
|
"tier": "component",
|
|
11376
|
-
"value": "
|
|
11376
|
+
"value": "initial"
|
|
11377
11377
|
},
|
|
11378
11378
|
{
|
|
11379
11379
|
"description": "Wash behind an expanded detail row, so the panel reads as belonging to the row above it. Default = hsl(var(--muted) / 0.3), the same weight as the selected-row tint. It fades out as --table-row-striped-alpha comes in: on a striped table the stripe ties the panel to its row.",
|
|
@@ -11622,22 +11622,22 @@
|
|
|
11622
11622
|
"value": "calc(1.25 / 0.875)"
|
|
11623
11623
|
},
|
|
11624
11624
|
{
|
|
11625
|
-
"description": "Horizontal row rule (chrome, #44) — the divider between body rows AND under the header row. Owned here rather than as TableRow's `border-b` utility so the \"last row draws no rule\" rule in `@layer components` can actually zero it; a utility would outrank it by layer. Colour is deliberately NOT set: it inherits the global `* { border-color: hsl(var(--border)) }` so a scoped [data-tenant]/.dark override of --border still reaches every row.",
|
|
11625
|
+
"description": "Horizontal row rule (chrome, #44) — the divider between body rows AND under the header row. Owned here rather than as TableRow's `border-b` utility so the \"last row draws no rule\" rule in `@layer components` can actually zero it; a utility would outrank it by layer. Colour is deliberately NOT set: it inherits the global `* { border-color: hsl(var(--border)) }` so a scoped [data-tenant]/.dark override of --border still reaches every row. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
11626
11626
|
"name": "--table-row-border-width",
|
|
11627
11627
|
"tier": "component",
|
|
11628
|
-
"value": "
|
|
11628
|
+
"value": "initial"
|
|
11629
11629
|
},
|
|
11630
11630
|
{
|
|
11631
11631
|
"description": "Flush divider (chrome, #44/#45) — the ONE edge a full-bleed table keeps when it sits inside `<CardContent flush>`: the line between a plain CardHeader and the first row. The other three edges coincide with the card's own frame and are erased (gh#305); this one has nothing behind it, so without it the header band floats (gh#306). Scoped by construction to the case that needs it — a BANDED header, a CardBar or a headerless card already draw their own line there and never reach this token — so a service tunes only the plain-header divider: `0` for a borderless full-bleed table, heavier for a stronger band. Colour and style are NOT set here: only the width is restored, so the surface's own border declaration still owns them and a scoped [data-tenant]/.dark override of --border reaches it. Default = the same hairline the table's other rules draw.",
|
|
11632
11632
|
"name": "--table-flush-divider-width",
|
|
11633
11633
|
"tier": "component",
|
|
11634
|
-
"value": "var(--table-row-border-width)"
|
|
11634
|
+
"value": "var(--table-row-border-width, var(--stroke-hairline))"
|
|
11635
11635
|
},
|
|
11636
11636
|
{
|
|
11637
|
-
"description": "Row TONE (`rowTone`) — the leading-edge rail plus the wash behind a row in a named state. The rail measure is `--card-accent-rail-width`'s own step so a toned row and a toned Card read as the same mark at the same weight; it is spelled out rather than referenced because a service that thins its card rails should not silently thin its table rails too. The wash is deliberately weak: it must stay under the selected-row fill (which is a stronger statement about the same row) and must not carry meaning on its own — that is what the rail and the row's own status cell are for.",
|
|
11637
|
+
"description": "Row TONE (`rowTone`) — the leading-edge rail plus the wash behind a row in a named state. The rail measure is `--card-accent-rail-width`'s own step so a toned row and a toned Card read as the same mark at the same weight; it is spelled out rather than referenced because a service that thins its card rails should not silently thin its table rails too. The wash is deliberately weak: it must stay under the selected-row fill (which is a stronger statement about the same row) and must not carry meaning on its own — that is what the rail and the row's own status cell are for. default = var(--stroke-2xl), resolved at the call site (gh#906)",
|
|
11638
11638
|
"name": "--table-row-tone-rail-width",
|
|
11639
11639
|
"tier": "component",
|
|
11640
|
-
"value": "
|
|
11640
|
+
"value": "initial"
|
|
11641
11641
|
},
|
|
11642
11642
|
{
|
|
11643
11643
|
"description": "Table component tokens: row height, cell padding.",
|
|
@@ -11760,10 +11760,10 @@
|
|
|
11760
11760
|
"value": "initial"
|
|
11761
11761
|
},
|
|
11762
11762
|
{
|
|
11763
|
-
"description": "The connector. Its inline position tracks HALF the glyph column so it stays centred whatever the column's size becomes — never a literal offset.",
|
|
11763
|
+
"description": "The connector. Its inline position tracks HALF the glyph column so it stays centred whatever the column's size becomes — never a literal offset. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
11764
11764
|
"name": "--thought-chain-line-width",
|
|
11765
11765
|
"tier": "component",
|
|
11766
|
-
"value": "
|
|
11766
|
+
"value": "initial"
|
|
11767
11767
|
},
|
|
11768
11768
|
{
|
|
11769
11769
|
"description": "default = hsl(var(--border))",
|
|
@@ -11922,10 +11922,10 @@
|
|
|
11922
11922
|
"value": "initial"
|
|
11923
11923
|
},
|
|
11924
11924
|
{
|
|
11925
|
-
"description": "Under forced-colors every fill is flattened to a system colour, so neither inversion encodes anything any more. This outline is the state's structural fallback there — drawn on the PRESSED pill only, and as `outline` (not `border`) so it costs no layout.",
|
|
11925
|
+
"description": "Under forced-colors every fill is flattened to a system colour, so neither inversion encodes anything any more. This outline is the state's structural fallback there — drawn on the PRESSED pill only, and as `outline` (not `border`) so it costs no layout. default = var(--stroke-hairline), resolved at the call site (gh#906)",
|
|
11926
11926
|
"name": "--toggle-count-forced-outline-width",
|
|
11927
11927
|
"tier": "component",
|
|
11928
|
-
"value": "
|
|
11928
|
+
"value": "initial"
|
|
11929
11929
|
},
|
|
11930
11930
|
{
|
|
11931
11931
|
"description": "Row box height. MIRRORS THE `--control-height` TIER — the row is a control-sized hit target, and the tier is density-aware, so the height is never a literal and never an ad-hoc `calc(var(--control-height) ± …)` (that re-derives a tier and drifts out of step with the controls beside it). `size` picks a NAMED step (`--control-height-{xs,sm,lg}`) at the call site; the tier is re-scoped by the auth shells, hence `initial` here. Documented default: --tree-node-height = var(--control-height).",
|
|
@@ -12042,10 +12042,10 @@
|
|
|
12042
12042
|
"value": "initial"
|
|
12043
12043
|
},
|
|
12044
12044
|
{
|
|
12045
|
-
"description": "
|
|
12045
|
+
"description": "default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
12046
12046
|
"name": "--upload-dropzone-border-width",
|
|
12047
12047
|
"tier": "component",
|
|
12048
|
-
"value": "
|
|
12048
|
+
"value": "initial"
|
|
12049
12049
|
},
|
|
12050
12050
|
{
|
|
12051
12051
|
"description": "Upload primitive tokens — dropzone, picture tile, avatar, draft bar, file row. Upload carried 66 hard-coded geometry/chrome literals, the single worst file in the library (#319). It renders five variants (dropzone · button · picture · picture-card · avatar), and EVERY one of them baked its box straight onto the component: a service could not resize the avatar, retune the dropzone's generous 40px inset, or align the file row to its own grid without forking. That is precisely the gap cardinal rule #45 exists to close. Radius defaults mirror the utilities they replace, verified against the built CSS: rounded-lg = var(--radius) → --radius-lg rounded-md = calc(var(--radius) / var(--radius-ratio)) → --radius-md rounded-full → --radius-pill",
|
|
@@ -12240,10 +12240,10 @@
|
|
|
12240
12240
|
"value": "var(--icon-size-xl)"
|
|
12241
12241
|
},
|
|
12242
12242
|
{
|
|
12243
|
-
"description": "
|
|
12243
|
+
"description": "default = var(--stroke-md), resolved at the call site (gh#906)",
|
|
12244
12244
|
"name": "--upload-avatar-border-width",
|
|
12245
12245
|
"tier": "component",
|
|
12246
|
-
"value": "
|
|
12246
|
+
"value": "initial"
|
|
12247
12247
|
},
|
|
12248
12248
|
{
|
|
12249
12249
|
"description": "Upload primitive tokens — dropzone, picture tile, avatar, draft bar, file row. Upload carried 66 hard-coded geometry/chrome literals, the single worst file in the library (#319). It renders five variants (dropzone · button · picture · picture-card · avatar), and EVERY one of them baked its box straight onto the component: a service could not resize the avatar, retune the dropzone's generous 40px inset, or align the file row to its own grid without forking. That is precisely the gap cardinal rule #45 exists to close. Radius defaults mirror the utilities they replace, verified against the built CSS: rounded-lg = var(--radius) → --radius-lg rounded-md = calc(var(--radius) / var(--radius-ratio)) → --radius-md rounded-full → --radius-pill",
|