@mkbabb/glass-ui 3.9.0 → 3.10.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/dist/{CardAction-DuArVky-.js → CardAction-DrAcAV4d.js} +2 -2
- package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-mV2e1aG6.js} +2 -2
- package/dist/{DataTable-CUHMukiQ.js → DataTable-C3E6jZ5B.js} +2 -2
- package/dist/{DialogContent-BRkT1cjP.js → DialogContent-BxaaafFi.js} +1 -1
- package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-CDA_SaCe.js} +1 -1
- package/dist/{MetricBadge-lTc002u2.js → MetricBadge-idgrkqoP.js} +1 -1
- package/dist/{Notification-BxK8LZMw.js → Notification-Cu0nN17_.js} +3 -3
- package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-CHEWghnY.js} +2 -2
- package/dist/{PopoverContent-BId6ggf_.js → PopoverContent-DpUvdYY-.js} +1 -1
- package/dist/{Progress-iEuD9pxG.js → Progress-BW-StFw2.js} +1 -1
- package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-DruYCni_.js} +1 -1
- package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-pirzjm--.js} +3 -3
- package/dist/{Switch-LDKLmmgx.js → Switch-DeAqg6pi.js} +1 -1
- package/dist/{TabsList-B8CVOQPC.js → TabsList-BAVzOZpg.js} +2 -2
- package/dist/{Toaster-1rYWrmAm.js → Toaster-CvuuW_y9.js} +49 -46
- package/dist/{ToggleGroupItem-Cev4pOVK.js → ToggleGroupItem-DtD37b4G.js} +4 -4
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +4 -4
- package/dist/api.js +1 -1
- package/dist/aurora.js +238 -547
- package/dist/{badge-BvwvT50i.js → badge-NdCQMvvB.js} +2 -2
- package/dist/badge.js +1 -1
- package/dist/{button-DN39cGqL.js → button-DyiWFAOE.js} +12 -12
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.js +5 -5
- package/dist/collapsible.js +1 -1
- package/dist/{color-8jBjWiJ6.js → color-B65wWyQz.js} +9 -7
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/{compile-DAjIoEy2.js → compile-Ce_V55zi.js} +23 -23
- package/dist/components/custom/aurora/composables/atoms.d.ts +21 -4
- package/dist/components/custom/aurora/composables/runtime.d.ts +0 -9
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +0 -11
- package/dist/components/custom/aurora/constants/renderMode.d.ts +0 -32
- package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
- package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/constellation/Constellation.vue.d.ts +85 -1
- package/dist/components/custom/constellation/composables/createConstellationField.d.ts +35 -0
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
- package/dist/components/custom/constellation/constants.d.ts +36 -0
- package/dist/components/custom/constellation/constellationDraw.d.ts +18 -0
- package/dist/components/custom/constellation/constellationField.d.ts +174 -63
- package/dist/components/custom/constellation/constellationInteraction.d.ts +102 -0
- package/dist/components/custom/constellation/index.d.ts +4 -2
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +2 -110
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
- package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +131 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
- package/dist/components/custom/dock/constants.d.ts +23 -0
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +6 -0
- package/dist/components/custom/fourier-field/index.d.ts +25 -1
- package/dist/components/custom/fourier-field/math.d.ts +20 -8
- package/dist/components/custom/fourier-field/presets.d.ts +54 -0
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +8 -10
- package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
- package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +16 -21
- package/dist/components/custom/goo-blob/constants.d.ts +52 -0
- package/dist/components/custom/goo-blob/index.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/types.d.ts +59 -25
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
- package/dist/components/custom/tabs/constants.d.ts +12 -0
- package/dist/components/custom/underline/GlassUnderline.vue.d.ts +84 -0
- package/dist/components/custom/underline/index.d.ts +2 -0
- package/dist/components/custom/underline/types.d.ts +56 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
- package/dist/components/ui/slider/index.d.ts +25 -18
- package/dist/components/ui/toast/use-toast.d.ts +2 -2
- package/dist/composables/color/index.d.ts +24 -7
- package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
- package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +1 -6
- package/dist/composables/motion/curves.d.ts +48 -0
- package/dist/composables/motion/index.d.ts +2 -0
- package/dist/composables/motion/springPresets.d.ts +33 -0
- package/dist/composables/motion/suite.d.ts +2 -0
- package/dist/composables/motion/useSpringMount.d.ts +1 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +2 -2
- package/dist/constellation.js +322 -147
- package/dist/controls.js +48 -14
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +340 -327
- package/dist/dockContext-bho8B1A4.js +17 -0
- package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-DVnQcA0E.js} +7 -4
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +1 -1
- package/dist/forms.js +2 -2
- package/dist/fourier-field.js +147 -120
- package/dist/fourier-math.d.ts +1 -0
- package/dist/fourier-math.js +2 -0
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +286 -207
- package/dist/goo-blob.js +368 -322
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +5 -5
- package/dist/math-BUU9hHID.js +43 -0
- package/dist/metric-badge.js +1 -1
- package/dist/metric-stack.js +2 -2
- package/dist/motion-core.js +4 -4
- package/dist/motion-curves.d.ts +1 -0
- package/dist/motion-curves.js +130 -0
- package/dist/motion.js +38 -37
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +1 -1
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +6 -6
- package/dist/select.js +1 -1
- package/dist/{sheet-VZEtNFvO.js → sheet-ChSXcJpU.js} +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-DC2mwuoe.js → slider-sfl8gFDD.js} +8 -8
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +2 -2
- package/dist/springPresets-aRSm-4_k.js +40 -0
- package/dist/stacked-icons.js +6 -6
- package/dist/styles/cards.css +2 -2
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/layer-group.css +38 -4
- package/dist/styles/dock/layers.css +11 -1
- package/dist/styles/dock/morph.css +95 -19
- package/dist/styles/dock/shell.css +12 -0
- package/dist/styles/dock-controls.css +25 -12
- package/dist/styles/drawer.css +14 -4
- package/dist/styles/floating-panel.css +2 -0
- package/dist/styles/glass/a11y-fallback.css +245 -0
- package/dist/styles/glass/ladder.css +304 -0
- package/dist/styles/glass/material.css +238 -0
- package/dist/styles/glass/progress-rail.css +78 -0
- package/dist/styles/glass/squircle.css +66 -0
- package/dist/styles/glass/surfaces.css +306 -0
- package/dist/styles/glass-refract.css +2 -0
- package/dist/styles/glass.css +31 -1052
- package/dist/styles/hover-popover.css +2 -0
- package/dist/styles/index.css +24 -6
- package/dist/styles/instrument-chassis.css +4 -0
- package/dist/styles/theme.css +14 -14
- package/dist/styles/tokens/color-radius.css +250 -0
- package/dist/styles/tokens/dark-arm.css +194 -0
- package/dist/styles/tokens/glass.css +413 -0
- package/dist/styles/tokens/light-dark.css +158 -0
- package/dist/styles/tokens/offsets-sizing.css +406 -0
- package/dist/styles/tokens/property-regs.css +169 -0
- package/dist/styles/tokens/scale-paper.css +361 -0
- package/dist/styles/tokens/scheme-motion.css +334 -0
- package/dist/styles/tokens/shadow.css +132 -0
- package/dist/styles/tokens.css +22 -2269
- package/dist/styles/transitions.css +20 -2
- package/dist/styles/typography.css +18 -6
- package/dist/styles/utilities/a11y-overrides.css +140 -0
- package/dist/styles/utilities/animate.css +26 -0
- package/dist/styles/utilities/base.css +365 -0
- package/dist/styles/utilities/btn.css +399 -0
- package/dist/styles/utilities/components.css +317 -0
- package/dist/styles/utilities.css +19 -1170
- package/dist/switch.js +1 -1
- package/dist/tabs.js +98 -98
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/underline.d.ts +1 -0
- package/dist/underline.js +85 -0
- package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-DfVgP4te.js} +1 -1
- package/dist/{useConfiguratorState-DxAqksK6.js → useConfiguratorState-BdQXh9ie.js} +1 -1
- package/dist/useSpecularTracking-DFK_fhpG.js +32 -0
- package/dist/useSpringMount-DXUzxBjV.js +108 -0
- package/dist/watercolor-dot.js +2 -2
- package/package.json +62 -38
- package/src/styles/cards.css +2 -2
- package/src/styles/dock/layer-group.css +38 -4
- package/src/styles/dock/layers.css +11 -1
- package/src/styles/dock/morph.css +95 -19
- package/src/styles/dock/shell.css +12 -0
- package/src/styles/dock-controls.css +25 -12
- package/src/styles/drawer.css +12 -4
- package/src/styles/glass/a11y-fallback.css +245 -0
- package/src/styles/glass/ladder.css +304 -0
- package/src/styles/glass/material.css +238 -0
- package/src/styles/glass/progress-rail.css +78 -0
- package/src/styles/glass/squircle.css +66 -0
- package/src/styles/glass/surfaces.css +306 -0
- package/src/styles/glass.css +31 -1052
- package/src/styles/index.css +24 -6
- package/src/styles/theme.css +14 -14
- package/src/styles/tokens/color-radius.css +250 -0
- package/src/styles/tokens/dark-arm.css +194 -0
- package/src/styles/tokens/glass.css +413 -0
- package/src/styles/tokens/light-dark.css +158 -0
- package/src/styles/tokens/offsets-sizing.css +406 -0
- package/src/styles/tokens/property-regs.css +169 -0
- package/src/styles/tokens/scale-paper.css +361 -0
- package/src/styles/tokens/scheme-motion.css +334 -0
- package/src/styles/tokens/shadow.css +132 -0
- package/src/styles/tokens.css +22 -2269
- package/src/styles/transitions.css +20 -2
- package/src/styles/typography.css +18 -6
- package/src/styles/utilities/a11y-overrides.css +140 -0
- package/src/styles/utilities/animate.css +26 -0
- package/src/styles/utilities/base.css +365 -0
- package/src/styles/utilities/btn.css +399 -0
- package/src/styles/utilities/components.css +317 -0
- package/src/styles/utilities.css +19 -1170
- package/dist/DeckProgress-Dmk4_AKN.js +0 -23
- package/dist/InstrumentRail-CUJ05YVG.js +0 -44
- package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +0 -16
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +0 -7
- package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
- package/dist/components/custom/deck-progress/index.d.ts +0 -2
- package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
- package/dist/components/custom/dialog-native/index.d.ts +0 -1
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +0 -41
- package/dist/components/custom/glass-panel/index.d.ts +0 -2
- package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +0 -31
- package/dist/components/custom/header-ribbon/index.d.ts +0 -2
- package/dist/components/custom/header-ribbon/types.d.ts +0 -7
- package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
- package/dist/components/custom/instrument-rail/index.d.ts +0 -2
- package/dist/composables/glass/createGPUCanvas.d.ts +0 -40
- package/dist/deck-progress.d.ts +0 -1
- package/dist/deck-progress.js +0 -2
- package/dist/dockContext-BKeIMmNk.js +0 -9
- package/dist/glass-panel.d.ts +0 -1
- package/dist/glass-panel.js +0 -44
- package/dist/header-ribbon.d.ts +0 -1
- package/dist/header-ribbon.js +0 -63
- package/dist/instrument-rail.d.ts +0 -1
- package/dist/instrument-rail.js +0 -2
- package/dist/useGlassRenderer-5I0YkI4t.js +0 -69
- package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
- package/dist/useSpringMount-BJSHcLl3.js +0 -113
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-Drow5WkV.js} +0 -0
- /package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-DufLHi0y.js} +0 -0
- /package/dist/{IconTooltip-yefK7cJc.js → IconTooltip-BrQ5p181.js} +0 -0
- /package/dist/{Input-DWQQIOC4.js → Input-B-F818RU.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-DWghtRt7.js} +0 -0
- /package/dist/{constants-CS75AWHG.js → constants-C8NMonuo.js} +0 -0
- /package/dist/{presets-BKVyQfbt.js → presets-1OhFpaIC.js} +0 -0
- /package/dist/{prng-wHuHlNHE.js → prng-CjVgzjQT.js} +0 -0
- /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CRvVzOvP.js} +0 -0
- /package/dist/{useCanvas2D-ClrQuZtp.js → useCanvas2D-CSeH8h16.js} +0 -0
- /package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-D7R9OypB.js} +0 -0
- /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-DAdVPVp4.js} +0 -0
- /package/dist/{useInterval-Dsmqwi03.js → useInterval-D3USn0yc.js} +0 -0
- /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-i8tHd5WO.js} +0 -0
- /package/dist/{useScrollProgress-CAH8Ofwt.js → useScrollProgress-CcgmgMQt.js} +0 -0
- /package/dist/{useSortable-C8ReQ50P.js → useSortable-DnyGXKKY.js} +0 -0
- /package/dist/{useTextHighlight-DON84L8w.js → useTextHighlight-B3b10W6r.js} +0 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/* tokens/offsets-sizing.css
|
|
2
|
+
§9 animation offsets · §10 sizing (control heights, dropdown, carousel, stack-overlap, touch-target floor).
|
|
3
|
+
Carved from the tokens.css cascade root; @import-ed by tokens.css in
|
|
4
|
+
cascade order. Same :root cascade context as its siblings. */
|
|
5
|
+
:root {
|
|
6
|
+
/* ═══════════════════════════════════════════════
|
|
7
|
+
§9 ANIMATION OFFSETS
|
|
8
|
+
═══════════════════════════════════════════════ */
|
|
9
|
+
/* Hover lift offsets */
|
|
10
|
+
--lift-sm: -1px;
|
|
11
|
+
--lift-md: -2px;
|
|
12
|
+
--lift-lg: -4px;
|
|
13
|
+
|
|
14
|
+
/* Layout tokens */
|
|
15
|
+
--mask-fade-width: 1rem;
|
|
16
|
+
/* J.W3.C — dock content overflow caps. When dock content exceeds
|
|
17
|
+
these dimensions, the inner `.dock-layers` (horizontal) /
|
|
18
|
+
`.glass-dock.vertical` (rail) container scrolls with a
|
|
19
|
+
`.scroll-fade-{x,y}` mask-fade so the boundary feathers rather
|
|
20
|
+
than cliffs. Defaults clamp to 80vw / 80vh capped at sensible
|
|
21
|
+
desktop widths; consumers override per-dock by setting either
|
|
22
|
+
token directly on a `.glass-dock` instance. User findings 1 + 5a. */
|
|
23
|
+
/* AX.W04 — `--dock-max-inline-size` is the canonical inline cap EVERY overflow
|
|
24
|
+
strategy reads: `overflow="scroll"` scrolls past it, and `overflow="wrap"`
|
|
25
|
+
wraps to N rows on the over-cap crossing (the dock shrink-wraps to content,
|
|
26
|
+
`max-inline-size` caps that intrinsic width at this token). The prior
|
|
27
|
+
`--dock-overflow-bp: 640px` viewport-breakpoint token (the magic-640
|
|
28
|
+
snap-back) is DELETED — the wrap is content-driven, not viewport-coupled, so
|
|
29
|
+
there is no breakpoint threshold to name. */
|
|
30
|
+
--dock-max-inline-size: min(80vw, 64rem);
|
|
31
|
+
--dock-max-block-size: min(80vh, 48rem);
|
|
32
|
+
|
|
33
|
+
/* AB.W1.T1 — chassis max-block-size guardrail.
|
|
34
|
+
Maximum block size a centred consumer-app card may consume while
|
|
35
|
+
preserving the inline dock footprint. The recipe subtracts the
|
|
36
|
+
consumer-owned `--dock-footer-space` (dock height + dock inset +
|
|
37
|
+
card-edge inset) and `--page-padding-top` from the dynamic viewport,
|
|
38
|
+
then takes one further rem of breathing room so the card never
|
|
39
|
+
butts the dock — the user mandate is `≥ 1rem visible gap above
|
|
40
|
+
dock`. Both consumer tokens carry safe fallbacks for callers that
|
|
41
|
+
have not declared them.
|
|
42
|
+
|
|
43
|
+
Consumers should shrink internal regions (meter, readout, timeline)
|
|
44
|
+
before falling back to scroll. This token is a guardrail against
|
|
45
|
+
chassis overflow, NOT a license to make the card scroll as the
|
|
46
|
+
default solution; clamp-first / no-scroll-first is the canon.
|
|
47
|
+
See DESIGN.md `## Chassis sizing — dock-adjusted viewport`. */
|
|
48
|
+
--chassis-max-block-size: calc(
|
|
49
|
+
100dvh
|
|
50
|
+
- var(--dock-footer-space, 5.75rem)
|
|
51
|
+
- var(--page-padding-top, 0rem)
|
|
52
|
+
- 1rem
|
|
53
|
+
);
|
|
54
|
+
/* R0G-2 (AO.W3/W4) — chassis mobile dial-reserve canon. instrument-
|
|
55
|
+
chassis.css's mobile breakpoint reserves the dial's final box from
|
|
56
|
+
frame 0 via these vars (with the same values as inline fallbacks, the
|
|
57
|
+
safety net). Token-first home so the vars resolve canonically. */
|
|
58
|
+
--instrument-dial-min-height-mobile: 24rem;
|
|
59
|
+
--instrument-dial-meter-reserve-mobile: minmax(0, 1fr);
|
|
60
|
+
|
|
61
|
+
--max-width-input: 24rem;
|
|
62
|
+
--input-min-width-sm: 5rem;
|
|
63
|
+
--min-width-input-sm: var(--input-min-width-sm);
|
|
64
|
+
/* AU.W8b.4 — canonical popover width (Combobox list + anchor). Lifts the
|
|
65
|
+
`w-[200px]` arbitrary-value wrap to the `w-popover` @theme utility. */
|
|
66
|
+
--popover-width: 200px;
|
|
67
|
+
--chart-height-compact: 15rem;
|
|
68
|
+
--chart-height-default: 22.5rem;
|
|
69
|
+
--chart-height-large: 25rem;
|
|
70
|
+
--chart-margin: 1.25rem;
|
|
71
|
+
--paper-texture-size: 200px 200px;
|
|
72
|
+
|
|
73
|
+
/* Border opacity scale */
|
|
74
|
+
--border-opacity-light: 0.15;
|
|
75
|
+
--border-opacity-medium: 0.25;
|
|
76
|
+
--border-opacity-strong: 0.6;
|
|
77
|
+
|
|
78
|
+
/* ═══════════════════════════════════════════════
|
|
79
|
+
§10 SIZING
|
|
80
|
+
═══════════════════════════════════════════════ */
|
|
81
|
+
/* ── The ONE comfortable-sizing scale doctrine (AX.W51 D18) ──────────────
|
|
82
|
+
`--ui-scale` is the MASTER comfortable-sizing scalar — ONE unitless knob
|
|
83
|
+
(registered @property <number>, inherits:true, default the identity 1)
|
|
84
|
+
every interactive-control magnitude derives through `calc(<base> *
|
|
85
|
+
var(--ui-scale))`, so a single override grows control HEIGHT + PADDING +
|
|
86
|
+
GAP + FONT-SIZE + GLYPH in LOCKSTEP, proportion preserved, no per-component
|
|
87
|
+
hack. The cohorts below (`--control-h-*` heights, `--control-text*` control
|
|
88
|
+
fonts, `--ui-glyph*` glyphs) are its reading surfaces; the CVA bases + the
|
|
89
|
+
`.btn-pill`/`.input-pill` pills consume them.
|
|
90
|
+
|
|
91
|
+
ONE scale system, not three. The dock (`--dock-scale`) and the dropdown
|
|
92
|
+
family (`--dropdown-text`, W50) are SPECIALIZATIONS that read this axis:
|
|
93
|
+
`--dock-scale: calc(var(--ui-scale) * var(--dock-local-scale, 1))` — the
|
|
94
|
+
dock multiplies ON TOP of the global comfort axis (its existing geometry
|
|
95
|
+
`calc` cascade inherits the global axis for free, zero edit). A consumer
|
|
96
|
+
re-tints the whole library's comfort from ONE `:root { --ui-scale: … }`
|
|
97
|
+
override (or a scoped region — a dense data-table sets it lower) — the
|
|
98
|
+
token-first axis.
|
|
99
|
+
|
|
100
|
+
EXCLUDED — the φ-DISPLAY ladder (`--type-display-*` / `--type-title` /
|
|
101
|
+
`--type-heading` / `--type-subheading`): a hero/title is a TYPOGRAPHIC
|
|
102
|
+
identity, NOT a touch target, so it does NOT grow on the comfort/coarse
|
|
103
|
+
axis. Only interactive-CONTROL text rides `--ui-scale`. Containers (card /
|
|
104
|
+
panel radii + paddings) are separate `--radius-*` / `--space-*` axes.
|
|
105
|
+
|
|
106
|
+
The desktop default is the IDENTITY (1) — byte-exact preservation, no
|
|
107
|
+
reflow of shipped consumers. The comfort GROWTH lives at the coarse-pointer
|
|
108
|
+
default (`--ui-coarse-scale`, §below) + the consumer override. The
|
|
109
|
+
WCAG-2.5.5 44px touch floor survives as a `max(…, --control-floor)` clamp
|
|
110
|
+
inside the scaled control-size (the coarse block lifts `--control-floor` to
|
|
111
|
+
`--touch-target`, so a sub-1 scale cannot drop a control under the target).
|
|
112
|
+
Coordinates with W54's `--glass-level` + W55's `--glass-tint-*` — SEPARATE
|
|
113
|
+
axes (size vs material vs legibility); a control is comfortably-sized AND
|
|
114
|
+
glass AND legible, three orthogonal knobs. */
|
|
115
|
+
--ui-scale: 1;
|
|
116
|
+
/* The global coarse-pointer comfort default — the WHOLE library grows ~1.5×
|
|
117
|
+
on touch from ONE place (the @media (pointer: coarse) block at §below lifts
|
|
118
|
+
:root --ui-scale to this). The dock's prior parallel 1.5× becomes the global
|
|
119
|
+
default it now shares. Public library-default identity — a consumer sets
|
|
120
|
+
1.3 / 1.75 on :root or a scope. */
|
|
121
|
+
--ui-coarse-scale: 1.5;
|
|
122
|
+
/* The control-height cohort — the h-7/h-9/h-10/h-11 register (28/36/40/44px)
|
|
123
|
+
the CVA size rungs encode, each scaled by the master axis. The CVA rungs
|
|
124
|
+
read these via `h-[var(--control-h-*)]` instead of the raw `h-N` literal.
|
|
125
|
+
`--control-floor` is the WCAG-2.5.5 clamp seam (0 at desktop, lifted to
|
|
126
|
+
--touch-target under coarse-pointer); each height is `max(scaled, floor)`. */
|
|
127
|
+
--control-floor: 0px;
|
|
128
|
+
--control-h-xs: max(calc(1.75rem * var(--ui-scale)), var(--control-floor));
|
|
129
|
+
--control-h-sm: max(calc(2.25rem * var(--ui-scale)), var(--control-floor));
|
|
130
|
+
--control-h-md: max(calc(2.5rem * var(--ui-scale)), var(--control-floor));
|
|
131
|
+
--control-h-lg: max(calc(2.75rem * var(--ui-scale)), var(--control-floor));
|
|
132
|
+
/* The control-FONT register (RED 3 — the user's "font too small"). A comfort
|
|
133
|
+
multiplier BETWEEN the static φ-ladder rung and the painted control font,
|
|
134
|
+
so interactive-control text grows on the comfort axis while the φ-DISPLAY
|
|
135
|
+
ladder stays a pure typographic scale (display headings do NOT grow on
|
|
136
|
+
touch). `--control-text` is the workhorse (the `text-sm` register the
|
|
137
|
+
buttons/inputs/triggers carried); `--control-text-sm` is the quieter rung
|
|
138
|
+
(the `text-xs` badge/caption register). W50's `--dropdown-text` IS the
|
|
139
|
+
picker-family specialization of this register.
|
|
140
|
+
|
|
141
|
+
AY.W-SCALE1 — the no-double-vw reconcile: the desktop-fluid viewport base
|
|
142
|
+
lives ONCE in `--type-small` / `--type-caption` (typography.css §scale — a
|
|
143
|
+
gentle `clamp(…vw…)` so the control font grows on a wide display); the
|
|
144
|
+
`--ui-scale` comfort scalar multiplies that FLUID base exactly ONCE HERE. The
|
|
145
|
+
vw term is applied once (in the rung), the comfort factor once (here) — under
|
|
146
|
+
the coarse 1.5× the font grows by the comfort factor ONCE, NOT vw×1.5
|
|
147
|
+
over-scaled. Do NOT inline a second clamp() here, and do NOT multiply the rung
|
|
148
|
+
by --ui-scale at the rung. */
|
|
149
|
+
--control-text: calc(var(--type-small) * var(--ui-scale));
|
|
150
|
+
--control-text-sm: calc(var(--type-caption) * var(--ui-scale));
|
|
151
|
+
/* The control-GLYPH cohort (RED 4 — the glyph grows WITH the box). The
|
|
152
|
+
1rem/0.875rem control-glyph register the `size-4`/`size-3.5` literals
|
|
153
|
+
encode; the un-sized-<svg> CVA rule reads these via
|
|
154
|
+
`size-[var(--ui-glyph)]`, KEEPING the `:not([class*=size-])` host-sized-icon
|
|
155
|
+
escape intact (an explicit `size-9` still wins). */
|
|
156
|
+
--ui-glyph: calc(1rem * var(--ui-scale));
|
|
157
|
+
--ui-glyph-sm: calc(0.875rem * var(--ui-scale));
|
|
158
|
+
|
|
159
|
+
/* ── The picker-family type-scale (AX.W50 D17) ───────────────────────────
|
|
160
|
+
ONE governed two-rung scale the WHOLE shadcn picker family (Select /
|
|
161
|
+
DropdownMenu / Combobox / ContextMenu / Command / MultiSelect) reads, so the
|
|
162
|
+
family paints at ONE uniform scale instead of the scattered raw
|
|
163
|
+
`text-sm`/`text-xs` Tailwind-literal lottery (item rows at `text-sm`,
|
|
164
|
+
headings/shortcuts at `text-xs`, the two filter inputs at mismatched heights).
|
|
165
|
+
A consumer re-tints the whole family from ONE override.
|
|
166
|
+
|
|
167
|
+
It is a SPECIALIZATION of W51's control-font register (one scale system, not
|
|
168
|
+
three): `--dropdown-text` reads `--control-text` (the comfort-scaled `text-sm`)
|
|
169
|
+
and `--dropdown-text-secondary` reads `--control-text-sm` (the comfort-scaled
|
|
170
|
+
`text-xs`), so the picker family rides the SAME `--ui-scale` comfort axis as
|
|
171
|
+
every other control — a `--ui-scale` bump grows the dropdowns too. A consumer
|
|
172
|
+
wanting the family LARGER than the rest overrides `--dropdown-text` directly
|
|
173
|
+
(e.g. `var(--type-body)`); the override re-resolves every family surface.
|
|
174
|
+
|
|
175
|
+
Scale-contract (which surface reads which rung):
|
|
176
|
+
• PRIMARY (`--dropdown-text`) → item rows, triggers, filter inputs, empties.
|
|
177
|
+
• SECONDARY (`--dropdown-text-secondary`) → section labels, group-headings,
|
|
178
|
+
keyboard shortcuts (the quieter-than-item caption register; resolves the
|
|
179
|
+
witness-2 contradiction — the Select/DropdownMenu/ContextMenu labels
|
|
180
|
+
collapse DOWN to the secondary rung to match the Combobox/Command headings,
|
|
181
|
+
ONE rung for the section-label role family-wide).
|
|
182
|
+
`--dropdown-input-height` unifies the two filter-input heights (Combobox was
|
|
183
|
+
h-10, Command was h-11) onto ONE register — a specialization of W51's
|
|
184
|
+
`--control-h-md` so the picker input scales on the comfort axis with the font. */
|
|
185
|
+
--dropdown-text: var(--control-text);
|
|
186
|
+
--dropdown-text-secondary: var(--control-text-sm);
|
|
187
|
+
--dropdown-input-height: var(--control-h-md);
|
|
188
|
+
|
|
189
|
+
--size-icon-btn: 2.5rem;
|
|
190
|
+
--icon-xs: 0.75rem;
|
|
191
|
+
--icon-sm: 0.875rem;
|
|
192
|
+
--icon-md: 1rem;
|
|
193
|
+
--icon-lg: 1.25rem;
|
|
194
|
+
--icon-xl: 1.5rem;
|
|
195
|
+
/* V.W2 T9 — 32px rung; spinner glyphs (Loader2) + dense table-row buttons.
|
|
196
|
+
Naming follows the radius ladder + Tailwind convention (2xl > xl > xxl) —
|
|
197
|
+
see B6 §2.4 for the naming rationale. */
|
|
198
|
+
--icon-2xl: 2rem;
|
|
199
|
+
/* V.W2 T10 — 40px rung; empty-state hero glyph (DashboardMap MapIcon).
|
|
200
|
+
AI.W5-ζ — rebound from `2.5rem` literal to `var(--size-icon-btn)` so
|
|
201
|
+
the alignment is contractual single-source-of-truth rather than the
|
|
202
|
+
coincidental numerical match noted prior. */
|
|
203
|
+
--icon-3xl: var(--size-icon-btn);
|
|
204
|
+
/* V.W2 T11 — 56px rung; FlowSelector school/home survey-flow picker.
|
|
205
|
+
Largest rung in the icon ladder; reserved for hero-class glyphs. */
|
|
206
|
+
--icon-hero: 3.5rem;
|
|
207
|
+
|
|
208
|
+
/* Golden-ratio spacing rungs — φ² and φ³. Preemptive substrate; W4 hero
|
|
209
|
+
chassis + W5 StoryChassis migration land the consumers. R3 §A row 1.
|
|
210
|
+
The 0..4 rungs are not currently named (consumers reach via
|
|
211
|
+
Tailwind's spacing scale); 5/6 land here because their values fall
|
|
212
|
+
outside the default ladder and the audacious chassis pattern wants
|
|
213
|
+
a named handle. */
|
|
214
|
+
--space-phi-5: 2.618rem; /* φ² */
|
|
215
|
+
--space-phi-6: 4.236rem; /* φ³ */
|
|
216
|
+
|
|
217
|
+
/* Dock geometry — consumers may override locally */
|
|
218
|
+
--dock-h: calc(var(--size-icon-btn) + 0.75rem + 3px);
|
|
219
|
+
--dock-margin: 0.5rem;
|
|
220
|
+
--dock-menubar-reserve: 4rem;
|
|
221
|
+
|
|
222
|
+
/* AX.W45 — the dock geometry multiplier. `--dock-scale` threads the WHOLE
|
|
223
|
+
`.glass-dock[data-density]` geometry cascade (box, padding, gap, tab,
|
|
224
|
+
tile-min, glyph) via `calc(<base> * --dock-scale)`, so a single knob grows
|
|
225
|
+
every dock axis in lockstep. The WCAG 2.5.5 44px floor survives as a `max(…,
|
|
226
|
+
44px)` clamp INSIDE the scaled control-size.
|
|
227
|
+
|
|
228
|
+
AX.W51 RECONCILE (D18) — `--dock-scale` is RE-HOMED as a SPECIALIZATION of
|
|
229
|
+
the global `--ui-scale` comfort axis: `calc(var(--ui-scale) *
|
|
230
|
+
var(--dock-local-scale, 1))`. The dock now MULTIPLIES on top of the global
|
|
231
|
+
comfort scalar — its whole existing geometry `calc` chain inherits the global
|
|
232
|
+
axis for FREE (zero edit to the density cascade; the reconcile is at this ONE
|
|
233
|
+
definition line). At the desktop identity (`--ui-scale: 1`,
|
|
234
|
+
`--dock-local-scale: 1`) the dock is byte-identical to HEAD. On coarse-pointer
|
|
235
|
+
the GLOBAL `:root { --ui-scale: var(--ui-coarse-scale, 1.5) }` block grows the
|
|
236
|
+
dock WITH the rest of the library — ONE consistent touch scale, not a parallel
|
|
237
|
+
dock-only 1.5×. `--dock-local-scale` is the dock-local EXTRA multiplier
|
|
238
|
+
(default 1): a consumer who wants the dock LARGER than the global comfort sets
|
|
239
|
+
it, and the coarse block lifts it to `--dock-mobile-scale` (default 1, the
|
|
240
|
+
stack-extra) so the dock can grow an extra notch ON TOP of the global coarse
|
|
241
|
+
default. `--dock-mobile-scale` is the public library-default identity
|
|
242
|
+
(presets-in-consumers: a consumer sets 1.3/1.75 on `:root` or a dock scope). */
|
|
243
|
+
--dock-scale: calc(var(--ui-scale) * var(--dock-local-scale, 1));
|
|
244
|
+
--dock-local-scale: 1;
|
|
245
|
+
--dock-mobile-scale: 1;
|
|
246
|
+
/* Library glyph ownership — `.dock-icon-button > svg` reads this so the dock
|
|
247
|
+
icon glyph scales WITH the box (mirroring `.dark-mode-toggle-button > svg`).
|
|
248
|
+
A consumer-passed explicit lucide size class still WINS (utility layer >
|
|
249
|
+
component layer); this is a DEFAULT, not a ceiling. */
|
|
250
|
+
--dock-icon-glyph: calc(1.25rem * var(--dock-scale));
|
|
251
|
+
|
|
252
|
+
/* AX.W45-TUNE Q1 — the COLLAPSED-pill floor tokens. The collapsed summary
|
|
253
|
+
used to fall to `--dock-layer-height` (the FULL control height, ~2.5rem) for
|
|
254
|
+
its `min-width` with NO block floor, so the shrunken pill read as an
|
|
255
|
+
un-collapsed control row, not a tight proportioned squircle. These two floor
|
|
256
|
+
tokens (referenced by dock.css's `.collapsed .dock-layer--summary` min-size +
|
|
257
|
+
the `--dock-pad-collapsed` morph floor) mint a TIGHT proportioned pill: the
|
|
258
|
+
summary min-size is ≈70% of the full control height (a proportioned dot, not a
|
|
259
|
+
full-row stub — the ratified default), and the collapsed padding is a step
|
|
260
|
+
BELOW the expanded `--dock-padding-block` so the collapsed chrome hugs the
|
|
261
|
+
glyph. The summary carries a SYMMETRIC `min-block-size` (dock.css) keyed to the
|
|
262
|
+
same token so the pill floors on BOTH axes — a squircle, not a stub. Consumers
|
|
263
|
+
retune the pill geometry per-instance via these two handles. */
|
|
264
|
+
/* AY.W-DOCK-NAV B4 — the collapsed pill is a PERFECT CIRCLE (the user's
|
|
265
|
+
"circle, not oval" bar). The diameter is the collapsed-summary min-size on
|
|
266
|
+
BOTH axes; the morph.css `.collapsed .dock-layer--summary` rule LIFTS the
|
|
267
|
+
`.dock-layer` height-lock (`height: var(--dock-layer-height)`) for the
|
|
268
|
+
collapsed summary so the pane is square at this token (the prior oval —
|
|
269
|
+
38×50, aspect 0.76 — was the locked 40px height against a 28px min-width).
|
|
270
|
+
The 0.85× value is a TIGHT proportioned circle a step below the full control
|
|
271
|
+
(so the collapsed dot reads smaller than an expanded control row) while
|
|
272
|
+
staying large enough that the centred glyph is not cramped. A consumer
|
|
273
|
+
retunes the circle diameter via this one handle. */
|
|
274
|
+
--dock-collapsed-summary-min-size: calc(var(--dock-layer-height, 2.5rem) * 0.85);
|
|
275
|
+
/* AX.W61 — the collapsed padding now threads the ONE `--dock-scale` coarse-pointer
|
|
276
|
+
multiplier DIRECTLY (at HEAD it was a flat 0.25rem off the scale, so the
|
|
277
|
+
collapsed pad alone stayed desktop-sized at the 1.5x mobile scale while the
|
|
278
|
+
box/glyph/min-size grew — a desync the morph then interpolated FROM). The
|
|
279
|
+
summary min-size already threads `--dock-scale` transitively through
|
|
280
|
+
`--dock-layer-height` (itself `calc(* --dock-scale)` at every density rung); this
|
|
281
|
+
lands the collapsed pad on the same thread so the whole collapsed pill scales
|
|
282
|
+
coherently on touch. The 0.25rem base stays the ratified tight floor. */
|
|
283
|
+
--dock-collapsed-padding: calc(0.25rem * var(--dock-scale));
|
|
284
|
+
|
|
285
|
+
/* AX.W45-TUNE Q3/C3 + C5 — the dock-control family reads a real GLASS register
|
|
286
|
+
on hover/active, NOT a same-hue `--card` mix at an alpha adjacent to the dock's
|
|
287
|
+
own `--glass-bg-dock` substrate (a sub-1%-ΔL no-op — the loud Q3 tell: "nothing
|
|
288
|
+
on hover, something on click"). Both legs now point at NAMED glass tiers a
|
|
289
|
+
measurable step ABOVE the dock's 42%-opacity substrate:
|
|
290
|
+
• hover → `--glass-bg-resting` (the 65% glass plate) — the control surface
|
|
291
|
+
WAKES as a brighter glass tier on hover, reading the blurred dock
|
|
292
|
+
substrate through it. The +ΔL above `--glass-bg-dock` is perceptible
|
|
293
|
+
BEFORE click; the specular gleam + scale ride alongside (one register).
|
|
294
|
+
• active → `--glass-bg-floating` (the 80% glass plate) — a tier ABOVE hover,
|
|
295
|
+
the keyframes-dock "selected element reads as glass" model the user
|
|
296
|
+
named (`pass-3:13`): the selected tile is a glass tier that shows the
|
|
297
|
+
substrate through it, NOT the flat `--surface-tint-12` ink wash. The
|
|
298
|
+
active ≠ hover register is the glass-tier step, not an alpha nudge.
|
|
299
|
+
This is a REGISTER change (substrate→glass-tier), not a magnitude knob. The
|
|
300
|
+
per-control `--dock-icon-hover-bg` override still wins if a consumer set it. */
|
|
301
|
+
--dock-control-hover-bg: var(--glass-bg-resting);
|
|
302
|
+
--dock-control-active-bg: var(--glass-bg-floating);
|
|
303
|
+
|
|
304
|
+
/* AX.W45-TUNE C4/C5 — the small-tile specular override. The 40px dock-control
|
|
305
|
+
tile is a fraction of a card's plate, so the global `--glass-specular-size`
|
|
306
|
+
(36% of the plate) blooms a disproportionate disc on a hover/active dock tile
|
|
307
|
+
(the I.W6 finding). The dock controls scope a TIGHTER radius (22%) so the gleam
|
|
308
|
+
wakes as a restrained EDGE-catch on the small tile, not a tile-filling bloom —
|
|
309
|
+
the right resolution of I.W6 (sized-down on the small surface), not turning the
|
|
310
|
+
specular off everywhere. Read by the dock-control `::before` recipe (glass.css)
|
|
311
|
+
via the family-scoped override below; the global card/panel size is untouched. */
|
|
312
|
+
--dock-control-specular-size: 22%;
|
|
313
|
+
|
|
314
|
+
/* AX.W45 DK8 — the layer-switcher rail surface ladder. The rail
|
|
315
|
+
(`.dock-layer-rail` inside a `<DockLayerGroup>`) gets its own quiet plate +
|
|
316
|
+
a tunable hover/active affordance, replacing the raw `--primary 15%` /
|
|
317
|
+
`--accent 40%` mixes the indicator/tab used against an absent plate. */
|
|
318
|
+
--dock-layer-rail-bg: var(--surface-tint-8);
|
|
319
|
+
--dock-layer-rail-hover: color-mix(in srgb, var(--accent) 40%, transparent);
|
|
320
|
+
--dock-layer-rail-active: color-mix(in srgb, var(--primary) 15%, transparent);
|
|
321
|
+
/* AY.W-DOCK-NAV B6 — the switcher-rail TAB is a COMPACT square, distinct from
|
|
322
|
+
the 40px dock CONTROL. The prior fallback chain (`var(--dock-control-size,
|
|
323
|
+
1.75rem)`) resolved to the full 40px control, so a 3-tab column rail stood
|
|
324
|
+
~140px tall — a giant pill of dead space. A dedicated tighter tab size
|
|
325
|
+
(1.75rem = 28px, density-scaled) keeps the rail a compact icon column the
|
|
326
|
+
indicator travels cleanly, and the dock grows only as tall as the rail needs.
|
|
327
|
+
Consumers retune the rail-tab size via this one handle. */
|
|
328
|
+
--dock-layer-tab-size: calc(1.75rem * var(--dock-scale));
|
|
329
|
+
|
|
330
|
+
/* Dock active-state ladder (O.W6 Lane B)
|
|
331
|
+
Token-overridable active paint for `.dock-icon-button`. Promoted
|
|
332
|
+
from hardcoded `background: var(--muted); color: var(--foreground)`
|
|
333
|
+
per bbnf-buddy O11/c R1: 7 `:deep()` escapes at `ToolsLayer.vue`
|
|
334
|
+
redefine bg/color/scale/border/shadow on the active variant; the
|
|
335
|
+
ladder absorbs ~3 of 7 at a stroke. Defaults preserve the prior
|
|
336
|
+
visual contract (no transform, no border, no shadow) — overrides
|
|
337
|
+
take effect per-instance via `:root` or a parent scope, e.g.
|
|
338
|
+
`.tools-layer { --dock-active-scale: 1.2; --dock-active-bg: …; }`.
|
|
339
|
+
≥ 2-consumer coverage: bbnf-buddy ToolsLayer (override consumer) +
|
|
340
|
+
speedtest dock (default consumer).
|
|
341
|
+
|
|
342
|
+
AX.W45 DK2 — re-pointed off the opaque `--muted` plate onto the glass-
|
|
343
|
+
correct `--dock-control-active-bg` (a translucent tint a ladder step above
|
|
344
|
+
hover), so the icon-button active no longer stamps a solid cream rectangle
|
|
345
|
+
over the dock glass. The O.W6 active-ladder override consumers still retint
|
|
346
|
+
per-instance; only the DEFAULT moved to glass-correct. */
|
|
347
|
+
--dock-active-bg: var(--dock-control-active-bg);
|
|
348
|
+
--dock-active-color: var(--foreground);
|
|
349
|
+
--dock-active-scale: 1;
|
|
350
|
+
--dock-active-border: none;
|
|
351
|
+
--dock-active-shadow: none;
|
|
352
|
+
|
|
353
|
+
/* Q.W3 Lane G (Q-cos-13) — the O.W6 Lane D `--icon-tooltip-hit-area`
|
|
354
|
+
token retired here. IconTooltip no longer owns a wrap-span; the
|
|
355
|
+
slotted child carries its own WCAG 2.5.5 hit-area (interactive
|
|
356
|
+
children via their four-state contract, bare glyphs via a
|
|
357
|
+
`min-h-11 min-w-11` host). No orphaned token left behind. */
|
|
358
|
+
|
|
359
|
+
/* O.W6 Lane D — Dock touch-target floor. Mirrors the IconTooltip
|
|
360
|
+
hit-area but for the dock-control surface. The base value tracks
|
|
361
|
+
the desktop default (`--size-icon-btn`); the
|
|
362
|
+
`@media (pointer: coarse)` block at `dock.css` lifts it to the
|
|
363
|
+
WCAG 2.5.5 floor on touch devices. */
|
|
364
|
+
--dock-touch-target: 2.75rem; /* 44px */
|
|
365
|
+
|
|
366
|
+
/* AQ.W3 §7 — canonical WCAG 2.5.5 (44px) touch-target floor for the
|
|
367
|
+
NON-dock coarse-pointer surfaces (`Button size="icon"`,
|
|
368
|
+
ExpandableContainer triggers, SegmentedTabs responsive mobile trigger). One
|
|
369
|
+
named rung the `@media (pointer: coarse)` block in utilities.css reads,
|
|
370
|
+
retiring the per-consumer one-liner `min-h-[44px]` patches. Equals
|
|
371
|
+
`--dock-touch-target` numerically; kept as a distinct token so the
|
|
372
|
+
dock floor and the general floor can be retuned independently. */
|
|
373
|
+
--touch-target: 2.75rem; /* 44px */
|
|
374
|
+
|
|
375
|
+
/* MetricBadge — stacked variant geometry. The 2-row stacked layout
|
|
376
|
+
(label / value+unit) wants a taller floor than the inline pill so the
|
|
377
|
+
label has breathing room above the baseline pair. T.W2.T2 +
|
|
378
|
+
audit B-spec §3.2 vertical-rhythm table land 42px (2.625rem) as the
|
|
379
|
+
min-height with 6px (0.375rem) block padding. The inline ladder
|
|
380
|
+
keeps its tight defaults via `--metric-badge-min-height` /
|
|
381
|
+
`--metric-badge-padding-block` (declared inline at the
|
|
382
|
+
`.metric-badge` selector). */
|
|
383
|
+
--metric-badge-min-height-stacked: 2.625rem;
|
|
384
|
+
--metric-badge-padding-block-stacked: 0.375rem;
|
|
385
|
+
|
|
386
|
+
/* Configurator — N.W2 Lane A density axis (4 rungs).
|
|
387
|
+
The `comfortable` rung restates the pre-N.W2 baked recipe exactly
|
|
388
|
+
(`gap-1.5 py-2` = 0.375rem / 0.5rem) so unparameterised consumers
|
|
389
|
+
see no visual change. `mobile` halves the vertical breathing room
|
|
390
|
+
for narrow-viewport studios; `spacious` doubles it for settings-
|
|
391
|
+
page hosts. See `<ConfiguratorRow>` scoped CSS for the attribute-
|
|
392
|
+
selector binding. */
|
|
393
|
+
--configurator-row-gap-mobile: 0.25rem; /* 4px — tight */
|
|
394
|
+
--configurator-row-gap-compact: 0.3125rem; /* 5px — slightly tighter */
|
|
395
|
+
--configurator-row-gap-comfortable: 0.375rem; /* 6px — pre-N.W2 default */
|
|
396
|
+
--configurator-row-gap-spacious: 0.75rem; /* 12px — generous */
|
|
397
|
+
|
|
398
|
+
--configurator-row-py-mobile: 0.25rem; /* 4px — tight */
|
|
399
|
+
--configurator-row-py-compact: 0.375rem; /* 6px — slightly tighter */
|
|
400
|
+
--configurator-row-py-comfortable: 0.5rem; /* 8px — pre-N.W2 default */
|
|
401
|
+
--configurator-row-py-spacious: 0.875rem; /* 14px — generous */
|
|
402
|
+
|
|
403
|
+
/* Component font override (consumers override locally) */
|
|
404
|
+
--select-font: inherit;
|
|
405
|
+
|
|
406
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/* tokens/property-regs.css
|
|
2
|
+
§18 Houdini @property registrations (progress/phase/ripple/specular/glass-level/ui-scale) + §11b the pointer-anchored moving-specular :root/.dark magnitude cohort. LAST — registrations + the magnitude cohort that reads them.
|
|
3
|
+
Carved from the tokens.css cascade root; @import-ed by tokens.css in
|
|
4
|
+
cascade order. Same :root cascade context as its siblings. */
|
|
5
|
+
/* ═══════════════════════════════════════════════
|
|
6
|
+
§18 TYPED CSS PROPERTIES — Houdini @property registrations
|
|
7
|
+
(AI.W4 grammar — adjacent to §2.C tokens above)
|
|
8
|
+
|
|
9
|
+
Three typed custom properties register with the CSS Houdini @property
|
|
10
|
+
API so transitions interpolate VALUES (percentage / length) rather
|
|
11
|
+
than the textual representation. Unregistered fallback is safe — the
|
|
12
|
+
`initial-value` provides a sensible default for any consumer that
|
|
13
|
+
imports this stylesheet on a browser that doesn't yet support the
|
|
14
|
+
typed @property registration (the cross-fade collapses to the
|
|
15
|
+
initial value, then re-paints at the new state).
|
|
16
|
+
|
|
17
|
+
Browser support: Chromium 85+, Safari 16.4+, Firefox 128+. The
|
|
18
|
+
speedtest deployment target sits well within the floor.
|
|
19
|
+
|
|
20
|
+
• --progress-crescendo (percentage) — the leading-edge brightness
|
|
21
|
+
ramp on `<Progress variant="gradient">` past 85% modelValue.
|
|
22
|
+
`inherits: false` because the value is consumed at one
|
|
23
|
+
declaration only (the gradient stop calculation); inheriting
|
|
24
|
+
would let an unrelated ancestor accidentally drive a sibling
|
|
25
|
+
progress bar.
|
|
26
|
+
|
|
27
|
+
• --phase-tint-amount (percentage) — the chassis depth-of-tint
|
|
28
|
+
companion to `--phase-color`. `inherits: true` because the
|
|
29
|
+
value cascades from the chassis root through every region
|
|
30
|
+
wrapper that reads it for a sympathetic tint (matches the
|
|
31
|
+
`--phase-color` inheritance pattern).
|
|
32
|
+
|
|
33
|
+
• --ripple-radius (length) — the `btn-audacious` press ripple
|
|
34
|
+
radial. `inherits: false` because each button owns its own
|
|
35
|
+
ripple state (a hovered parent must not push a ripple-radius
|
|
36
|
+
onto a non-pressed child).
|
|
37
|
+
═══════════════════════════════════════════════ */
|
|
38
|
+
|
|
39
|
+
@property --progress-crescendo {
|
|
40
|
+
syntax: "<percentage>";
|
|
41
|
+
inherits: false;
|
|
42
|
+
initial-value: 0%;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@property --phase-tint-amount {
|
|
46
|
+
syntax: "<percentage>";
|
|
47
|
+
inherits: true;
|
|
48
|
+
initial-value: 0%;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@property --ripple-radius {
|
|
52
|
+
syntax: "<length>";
|
|
53
|
+
inherits: false;
|
|
54
|
+
initial-value: 0px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* ═══════════════════════════════════════════════
|
|
58
|
+
§11b POINTER-ANCHORED MOVING SPECULAR (AV.W15)
|
|
59
|
+
|
|
60
|
+
The iOS-26 Liquid Glass "light travels around the material /
|
|
61
|
+
illuminate under your fingertip" behaviour. A masked radial-gradient
|
|
62
|
+
catch-light rides the surface at (--specular-x, --specular-y), driven
|
|
63
|
+
by the consumer's pointer-tracked --mouse-x/--mouse-y write. Registered
|
|
64
|
+
as typed custom properties so the position INTERPOLATES smoothly between
|
|
65
|
+
pointer samples (a bare unregistered var() snaps; the @property reg lets
|
|
66
|
+
the engine animate the percentage stop).
|
|
67
|
+
|
|
68
|
+
• --specular-x / --specular-y (percentage) — the catch-light centre.
|
|
69
|
+
`inherits: false` because each glass surface owns its own pointer
|
|
70
|
+
position (a hovered parent must not push its specular onto a child —
|
|
71
|
+
the no-glass-on-glass discipline made mechanical).
|
|
72
|
+
|
|
73
|
+
• --specular-intensity (number) — the catch-light alpha multiplier.
|
|
74
|
+
`inherits: false` for the same per-surface-ownership reason; rises on
|
|
75
|
+
hover/active, settles to its rest floor on leave.
|
|
76
|
+
|
|
77
|
+
@property crosses Baseline 2024-07-09. The consumption (the masked
|
|
78
|
+
radial + the reduced-motion static bracket + the var() fallback) lives
|
|
79
|
+
in glass-specular-track.css; the registrations live here alongside the
|
|
80
|
+
other three regs so the typed-property tier has one home.
|
|
81
|
+
═══════════════════════════════════════════════ */
|
|
82
|
+
|
|
83
|
+
@property --specular-x {
|
|
84
|
+
syntax: "<percentage>";
|
|
85
|
+
inherits: false;
|
|
86
|
+
initial-value: 50%;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@property --specular-y {
|
|
90
|
+
syntax: "<percentage>";
|
|
91
|
+
inherits: false;
|
|
92
|
+
initial-value: 50%;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@property --specular-intensity {
|
|
96
|
+
syntax: "<number>";
|
|
97
|
+
inherits: false;
|
|
98
|
+
initial-value: 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* AX.W54 — the GLASS-FIRST single knob. `--glass-level` is the ONE clarity
|
|
102
|
+
scalar threaded through BOTH glass ladders at their single sites (the
|
|
103
|
+
`--glass-bg-*` opacity recipe + the `--glass-blur-*` radii). It is a typed,
|
|
104
|
+
INHERITING <number> so a host setting it on any ancestor retunes every
|
|
105
|
+
descendant glass surface (the @container-free cascade path) — and so it
|
|
106
|
+
animates smoothly rather than snapping. The level acts as a clarity multiplier
|
|
107
|
+
that PRESERVES level=1 (byte-identical to the hand-tuned ladder):
|
|
108
|
+
• level 1 — the calibrated glass (today's surfaces, unchanged).
|
|
109
|
+
• level 0 — the OPAQUE escape: solid `--card` + `blur(0)` through the SAME
|
|
110
|
+
machinery (the `.glass-opaque` rung + the a11y brackets ride it).
|
|
111
|
+
• level >1 — clearer (more transparent + more diffuse) in lockstep.
|
|
112
|
+
Glass is the DEFAULT surface register for EVERY band (USER-DECIDED MAXIMAL);
|
|
113
|
+
the opaque level-0 rung is the explicit opt-out. W55 carries the over-light
|
|
114
|
+
legibility on the SEPARATE `--glass-tint-*` axis (the `--glass-backdrop` probe
|
|
115
|
+
lifts the tint toward ink — level = opacity+blur, tint = darken-over-light, the
|
|
116
|
+
two axes coordinate but never collapse: the a11y Clear↔Tinted escape rides
|
|
117
|
+
level-up here AND tint-toward-ink under `prefers-contrast: more`). */
|
|
118
|
+
@property --glass-level {
|
|
119
|
+
syntax: "<number>";
|
|
120
|
+
inherits: true;
|
|
121
|
+
initial-value: 1;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* AX.W51 D18 — the master comfortable-sizing scalar registered typed. The
|
|
125
|
+
`<number>` syntax guarantees `calc(<base> * var(--ui-scale))` is always valid (a
|
|
126
|
+
malformed override CLAMPS to the initial value 1, not an invalidated calc — the
|
|
127
|
+
fail-safe); `inherits: true` (unlike the per-element specular @property cohort)
|
|
128
|
+
so a SCOPED override (a dense data-table region) cascades to every descendant
|
|
129
|
+
control without a per-element set; the type makes it animatable (a density
|
|
130
|
+
toggle COULD spring it). Mirrors the `--glass-level` registration above (the
|
|
131
|
+
cascading-scalar idiom), distinct from the per-element specular @property cohort
|
|
132
|
+
(those are `inherits: false`). */
|
|
133
|
+
@property --ui-scale {
|
|
134
|
+
syntax: "<number>";
|
|
135
|
+
inherits: true;
|
|
136
|
+
initial-value: 1;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* ── The specular-intensity magnitude cohort (AX.W09) ──────────────────────
|
|
140
|
+
The catch-light alpha multiplier at each interaction state, as a SINGLE
|
|
141
|
+
overridable token cohort (was three buried literals across glass.css —
|
|
142
|
+
`0.35` rest floor / `0.6` hover / `0.85` active — and the `.dark` arm's
|
|
143
|
+
`0.22`). `glass.css`'s `.glass-material::before` rest/hover/active rules READ
|
|
144
|
+
these, so the subtle-vs-extreme magnitude is a knob a consumer (or the dark
|
|
145
|
+
arm) retunes ON THE CASCADE — never a re-buried literal. Override on `:root`
|
|
146
|
+
to retune library-wide; the cartoon-shadow override contract is the precedent.
|
|
147
|
+
|
|
148
|
+
Re-baselined AGAIN at AX.W52 D19 — with the central screen-disc replaced by a
|
|
149
|
+
BOUNDED plus-lighter edge gleam (glass.css), the gleam is a whisper at every
|
|
150
|
+
rung, so the cohort drops further (the W09 0.22/0.32 ceiling still lifted the
|
|
151
|
+
whole-tile disc on hover):
|
|
152
|
+
• rest 0 — static, unwired surfaces are CLEAN; the gleam wakes only on
|
|
153
|
+
hover/active or on a pointer-wired surface. Aligns the painted
|
|
154
|
+
rest with the @property `--specular-intensity { initial-value:
|
|
155
|
+
0 }` dormancy.
|
|
156
|
+
• hover 0.10 — a whisper edge gleam, not a bloom.
|
|
157
|
+
• active 0.16 — the press whisper. */
|
|
158
|
+
:root {
|
|
159
|
+
--glass-specular-intensity-rest: 0;
|
|
160
|
+
--glass-specular-intensity-hover: 0.1;
|
|
161
|
+
--glass-specular-intensity-active: 0.16;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Over the deep canvas `plus-lighter` still lifts, so the dark arm runs a touch
|
|
165
|
+
softer on the interaction rungs (rest already 0). */
|
|
166
|
+
.dark {
|
|
167
|
+
--glass-specular-intensity-hover: 0.08;
|
|
168
|
+
--glass-specular-intensity-active: 0.12;
|
|
169
|
+
}
|