@mkbabb/glass-ui 3.10.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-BZVWIxNy.js → MetricBadge-idgrkqoP.js} +5 -7
- package/dist/{Notification-DLMhblXR.js → Notification-Cu0nN17_.js} +1 -1
- 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-Ch-k3Rv-.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 +3 -4
- package/dist/api.js +1 -1
- package/dist/aurora.js +66 -66
- package/dist/{badge-CaoFJzRb.js → badge-NdCQMvvB.js} +1 -1
- 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-C5ls_QF7.js → color-B65wWyQz.js} +9 -7
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
- package/dist/components/custom/constellation/Constellation.vue.d.ts +12 -0
- 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 +10 -151
- package/dist/components/custom/constellation/constellationInteraction.d.ts +102 -0
- package/dist/components/custom/constellation/index.d.ts +3 -1
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +3 -4
- 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/expandable-container/ExpandableContainer.vue.d.ts +0 -29
- package/dist/components/custom/fourier-field/index.d.ts +1 -1
- package/dist/components/custom/fourier-field/math.d.ts +17 -0
- package/dist/components/custom/fourier-field/presets.d.ts +54 -0
- 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 +11 -8
- package/dist/components/custom/goo-blob/constants.d.ts +52 -0
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +0 -8
- 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 +22 -19
- package/dist/components/ui/toast/use-toast.d.ts +2 -2
- package/dist/composables/color/index.d.ts +12 -0
- package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
- package/dist/composables/motion/core/index.d.ts +0 -1
- 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 +260 -225
- 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 +339 -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 +38 -61
- package/dist/forms.js +2 -2
- package/dist/fourier-field.js +137 -102
- package/dist/fourier-math.js +2 -2
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +287 -209
- package/dist/goo-blob.js +243 -212
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +5 -5
- package/dist/{math-DTpRVC0e.js → math-BUU9hHID.js} +18 -2
- package/dist/metric-badge.js +1 -1
- package/dist/metric-stack.js +1 -1
- package/dist/motion-core.js +69 -70
- 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-CyzcxBoh.js → slider-sfl8gFDD.js} +4 -4
- 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/animations.css +18 -74
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/layer-group.css +22 -0
- 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 +28 -31
- package/dist/styles/drawer.css +2 -0
- 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 -1188
- 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/paper.css +2 -68
- package/dist/styles/theme.css +13 -20
- 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 -2355
- 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 -1260
- package/dist/styles/view-transition.css +0 -51
- 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-Bcpy5Etf.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/vReveal-CqaCz_mC.js +44 -0
- package/dist/watercolor-dot.js +2 -2
- package/package.json +34 -52
- package/src/styles/animations.css +18 -74
- package/src/styles/dock/layer-group.css +22 -0
- 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 +28 -31
- 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 -1188
- package/src/styles/index.css +24 -6
- package/src/styles/paper.css +2 -68
- package/src/styles/theme.css +13 -20
- 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 -2355
- 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 -1260
- package/src/styles/view-transition.css +0 -51
- package/dist/DeckProgress-Dmk4_AKN.js +0 -23
- package/dist/InstrumentRail-CUJ05YVG.js +0 -44
- 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/handmark/HandMark.vue.d.ts +0 -29
- package/dist/components/custom/handmark/brush.d.ts +0 -219
- package/dist/components/custom/handmark/freehand.d.ts +0 -69
- package/dist/components/custom/handmark/geometry.d.ts +0 -32
- package/dist/components/custom/handmark/index.d.ts +0 -21
- package/dist/components/custom/handmark/ink.d.ts +0 -11
- package/dist/components/custom/handmark/texture.d.ts +0 -39
- package/dist/components/custom/handmark/types.d.ts +0 -53
- package/dist/components/custom/handmark/useHandMark.d.ts +0 -66
- 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/motion/useRouteTransition.d.ts +0 -42
- 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/handmark.d.ts +0 -1
- package/dist/handmark.js +0 -609
- 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-D7YGOYiM.js +0 -69
- package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
- package/dist/useSpringMount-BJSHcLl3.js +0 -113
- package/dist/useViewTransition-DaN5Zrox.js +0 -21
- package/dist/vReveal-zUIQk-rJ.js +0 -53
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-Drow5WkV.js} +0 -0
- /package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-DufLHi0y.js} +0 -0
- /package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-BrQ5p181.js} +0 -0
- /package/dist/{Input-xuDwALQR.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/{compile-BOXjLUxu.js → compile-Ce_V55zi.js} +0 -0
- /package/dist/{constants-yKeKnE84.js → constants-C8NMonuo.js} +0 -0
- /package/dist/{presets-Dkdv55Gt.js → presets-1OhFpaIC.js} +0 -0
- /package/dist/{prng-D27-B3tK.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-d6waty-X.js → useGlobalDark-D7R9OypB.js} +0 -0
- /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-DAdVPVp4.js} +0 -0
- /package/dist/{useInterval-Dsmqwi03.js → useInterval-D3USn0yc.js} +0 -0
- /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-i8tHd5WO.js} +0 -0
- /package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-CcgmgMQt.js} +0 -0
- /package/dist/{useSortable-C8ReQ50P.js → useSortable-DnyGXKKY.js} +0 -0
- /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-B3b10W6r.js} +0 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/* tokens/dark-arm.css
|
|
2
|
+
The .dark {} dark-mode re-resolution (foreground / shadow-color / section-palette / constellation dark arm). After light-dark.css (the non-light-dark() fallback 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
|
+
|
|
6
|
+
/* ═══════════════════════════════════════════════
|
|
7
|
+
DARK MODE — warm dark, section palette brightened ~20% L
|
|
8
|
+
|
|
9
|
+
FALLBACK FLOOR (AQ.W2 §2c): this class block is the SOLE non-light-dark()
|
|
10
|
+
dark path. On a `light-dark()`-supporting engine with `.dark` present,
|
|
11
|
+
`.dark { color-scheme: dark }` (§1) makes every §-1b token resolve to its
|
|
12
|
+
dark arm and these explicit dark values agree with it (kept as the floor
|
|
13
|
+
for non-supporting engines). The pure `var()`-alias re-declarations
|
|
14
|
+
(`--muted`/`--secondary`/`--accent`/`--border`/`--input`/… and the
|
|
15
|
+
`--background`/`*-foreground` aliases) are DELETED — they auto-track the
|
|
16
|
+
`--neutral-*` ladder + `--foreground` resolved above; only EXPLICIT-color
|
|
17
|
+
dark values (and the non-color overrides §2d) stay.
|
|
18
|
+
═══════════════════════════════════════════════ */
|
|
19
|
+
.dark {
|
|
20
|
+
/* §1 — hard-pin native chrome to dark regardless of OS preference. §4 —
|
|
21
|
+
re-specify the inherited `accent-color` so it re-resolves to the dark
|
|
22
|
+
arm (§2b: an inherited built-in <color> set at `:root` would freeze to
|
|
23
|
+
the light shade without this re-specification). */
|
|
24
|
+
color-scheme: dark;
|
|
25
|
+
accent-color: var(--accent-color);
|
|
26
|
+
|
|
27
|
+
/* Neutral scale mirrors light-mode pattern: step UP from the background's
|
|
28
|
+
low L toward foreground. Same perceptual deltas as light. FALLBACK
|
|
29
|
+
FLOOR — kept verbatim for non-light-dark() engines (§2c); on a
|
|
30
|
+
supporting engine `color-scheme: dark` (above) drives the §-1b
|
|
31
|
+
light-dark() arms and these agree. */
|
|
32
|
+
--neutral-0: hsl(24 8% 6%); /* L 6 — page surface (dark) */
|
|
33
|
+
--neutral-1: hsl(24 6% 11%); /* L 11 — soft field */
|
|
34
|
+
--neutral-2: hsl(24 5% 16%); /* L 16 — chip / tab-inactive */
|
|
35
|
+
--neutral-3: hsl(24 5% 22%); /* L 22 — hover / highlight */
|
|
36
|
+
--neutral-4: hsl(24 5% 34%); /* L 34 — subtle border */
|
|
37
|
+
--neutral-5: hsl(48 5% 62%); /* L 62 — muted text (WCAG AA: 7.39:1 vs L6 page / 6.58:1 vs L11 muted) */
|
|
38
|
+
/* W7-α' (AK-FD1) — strong-muted text. Same principled ladder step as
|
|
39
|
+
light, mirrored: 10 L LIGHTER than muted (62→72) toward --foreground
|
|
40
|
+
(L90), the 1/3 point of the L62→L90 muted→primary gap. By-colour; hue
|
|
41
|
+
48, sat nudged 5→6. WCAG AA: 9.86:1 vs L6 page / 8.78:1 vs L11 muted
|
|
42
|
+
(cf. neutral-5's 7.39:1). */
|
|
43
|
+
--neutral-6: hsl(48 6% 72%); /* L 72 — strong-muted text (secondary register) */
|
|
44
|
+
|
|
45
|
+
/* --background / --card-foreground / --popover-foreground / --muted /
|
|
46
|
+
--muted-foreground{,-strong} / --secondary{,-foreground} /
|
|
47
|
+
--accent{,-foreground} / --border / --input are pure var()-aliases —
|
|
48
|
+
DELETED here (AQ.W2 §2a): they auto-track the --neutral-* ladder +
|
|
49
|
+
--foreground above. Re-declaring them would be redundant. */
|
|
50
|
+
--foreground: hsl(48 10% 90%);
|
|
51
|
+
--card: hsl(24 8% 10%);
|
|
52
|
+
--popover: hsl(24 8% 10%);
|
|
53
|
+
|
|
54
|
+
/* R0G-5 (AO.W4) — dark mirror of the warm-neutral public-data panel.
|
|
55
|
+
--card's dark hsl(24 8% 10%) nudged one warmth step toward amber
|
|
56
|
+
(24→36) + +1 sat + +2 L so the dark dashboard panel lifts off the page. */
|
|
57
|
+
--surface-public-data-panel: hsl(36 9% 12%);
|
|
58
|
+
|
|
59
|
+
--primary: hsl(48 10% 90%);
|
|
60
|
+
--primary-foreground: hsl(24 10% 10%);
|
|
61
|
+
/* AX.W44 — the `.dark` class fallback floor, in LOCKSTEP with the light-dark()
|
|
62
|
+
enhancement arm above (§2c). Same lifted `hsl(0 80% 60%)` so a
|
|
63
|
+
@supports-split engine and a class-toggle engine paint the SAME dark red
|
|
64
|
+
(4.60:1 as ink over --card / 5.03:1 as a plate vs page). */
|
|
65
|
+
--destructive: hsl(0 80% 60%);
|
|
66
|
+
--destructive-foreground: hsl(48 10% 90%);
|
|
67
|
+
--ring: hsl(48 10% 70%);
|
|
68
|
+
--shadow: hsl(0 0% 5%);
|
|
69
|
+
|
|
70
|
+
/* Section palette — brightened for dark backgrounds (oklch; AV.W16 TW2 —
|
|
71
|
+
mirrors the light-dark() dark halves above; hue preserved) */
|
|
72
|
+
--section-color-0: oklch(0.721 0.145 354.0);
|
|
73
|
+
--section-color-1: oklch(0.733 0.113 308.2);
|
|
74
|
+
--section-color-2: oklch(0.718 0.107 268.4);
|
|
75
|
+
--section-color-3: oklch(0.767 0.091 219.9);
|
|
76
|
+
--section-color-4: oklch(0.776 0.105 172.6);
|
|
77
|
+
--section-color-5: oklch(0.813 0.109 78.2);
|
|
78
|
+
--section-color-6: oklch(0.693 0.151 28.1);
|
|
79
|
+
--section-color-7: oklch(0.739 0.134 318.1);
|
|
80
|
+
--section-color-8: oklch(0.709 0.142 2.3);
|
|
81
|
+
--section-color-9: oklch(0.763 0.032 239.0);
|
|
82
|
+
--section-color-10: oklch(0.794 0.116 127.9);
|
|
83
|
+
--section-color-11: oklch(0.805 0.095 206.7);
|
|
84
|
+
--section-color-12: oklch(0.719 0.115 295.6);
|
|
85
|
+
|
|
86
|
+
--accent-pink: oklch(0.683 0.131 354.7);
|
|
87
|
+
--section-heading: oklch(0.711 0.123 349.3);
|
|
88
|
+
--accent-red: oklch(0.644 0.165 22.9);
|
|
89
|
+
|
|
90
|
+
--viz-fourier: oklch(0.693 0.151 28.1);
|
|
91
|
+
--viz-chebyshev: oklch(0.718 0.107 268.4);
|
|
92
|
+
--viz-legendre: oklch(0.739 0.134 318.1);
|
|
93
|
+
/* --viz-amber / --viz-green / --meter-track-stroke are pure var()-aliases
|
|
94
|
+
(→ --section-color-5/-4 / --foreground) — DELETED (§2a); they auto-track
|
|
95
|
+
their sources, which convert via §-1b. */
|
|
96
|
+
|
|
97
|
+
/* O.W6 Lane D — WCAG companion labels lift to L≈0.85 against the
|
|
98
|
+
deep dark canvas; same two-token discipline as light mode (canvas
|
|
99
|
+
hue preserved at `--chart-*`; only the label register shifts). */
|
|
100
|
+
--chart-ping-label: oklch(0.85 0.12 230);
|
|
101
|
+
--chart-download-label: oklch(0.85 0.14 22);
|
|
102
|
+
--chart-upload-label: oklch(0.85 0.12 55);
|
|
103
|
+
--chart-jitter-label: oklch(0.85 0.14 305);
|
|
104
|
+
|
|
105
|
+
--tier-featured: oklch(0.867 0.165 88.7);
|
|
106
|
+
--tier-saved: oklch(0.748 0.135 250.1);
|
|
107
|
+
--like: oklch(0.690 0.162 22.2);
|
|
108
|
+
--success: oklch(0.805 0.186 151.6);
|
|
109
|
+
--warning: oklch(0.809 0.150 76.6);
|
|
110
|
+
--info: oklch(0.713 0.138 259.5);
|
|
111
|
+
--delete: oklch(0.644 0.170 23.1);
|
|
112
|
+
|
|
113
|
+
/* Semantic foregrounds — off-white over dark plates. Mirrors the
|
|
114
|
+
`--destructive-foreground` dark pattern (hsl 48 10% 90%). The warning
|
|
115
|
+
glyph stays dark-on-amber; the dark amber rung is luminous enough that
|
|
116
|
+
a darker glyph still reads (matches light-mode behaviour). */
|
|
117
|
+
--success-foreground: hsl(48 10% 96%);
|
|
118
|
+
--warning-foreground: hsl(24 10% 10%);
|
|
119
|
+
--info-foreground: hsl(48 10% 96%);
|
|
120
|
+
|
|
121
|
+
--shadow-cartoon: 3px 3px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent);
|
|
122
|
+
--shadow-cartoon-hover: 4px 4px 0px 0px color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
123
|
+
--shadow-soft: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
124
|
+
--shadow-elevated: 0 8px 24px rgba(0, 0, 0, 0.35);
|
|
125
|
+
--shadow-modal:
|
|
126
|
+
4px 4px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent),
|
|
127
|
+
0 24px 64px color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
128
|
+
|
|
129
|
+
--shadow-cartoon-color: rgb(255 255 255 / 0.07);
|
|
130
|
+
--shadow-cartoon-color-soft: rgb(255 255 255 / 0.03);
|
|
131
|
+
|
|
132
|
+
/* §5c CONSTELLATION — dark arm (AX.W17). The H.W4 dark-mode lift: the node
|
|
133
|
+
tones step UP off the ink ground (the light arm's mid-grey would vanish on
|
|
134
|
+
L6 black), the hairline goes warm off-white, the field carries a touch more
|
|
135
|
+
presence to read at all. PLAIN-hsl literals, NEVER light-dark()/var(). */
|
|
136
|
+
--constellation-node: hsl(42 9% 72%);
|
|
137
|
+
--constellation-node-dim: hsl(42 8% 56%);
|
|
138
|
+
--constellation-line: hsl(45 12% 86%);
|
|
139
|
+
/* Anomaly — brightened for the deep canvas (same neutral-default register;
|
|
140
|
+
the consumer still overrides to its brand). */
|
|
141
|
+
--constellation-accent: hsl(20 70% 60%);
|
|
142
|
+
/* The dark hairlines lift harder over the ink ground, so the edge multipliers
|
|
143
|
+
run a touch lower than light to keep the field recessive. */
|
|
144
|
+
--constellation-edge-alpha: 0.20;
|
|
145
|
+
--constellation-edge-focus-alpha: 0.32;
|
|
146
|
+
/* §7 — the ink ground needs MORE field presence than cream to read at all, so
|
|
147
|
+
the dark alpha is modestly HIGHER than the light arm — but still BELOW the
|
|
148
|
+
slides 1.0 max-legibility reference (the recessive midpoint, not 1.0). */
|
|
149
|
+
--constellation-alpha: 0.88;
|
|
150
|
+
|
|
151
|
+
/* Glass opacity + grain for dark — five-tier ladder, alpha-monotonic.
|
|
152
|
+
Each rung lifts ~0.08 from its light counterpart so the dark surfaces
|
|
153
|
+
carry comparable read-weight against the deeper canvas. */
|
|
154
|
+
--glass-opacity-wash: 0.38;
|
|
155
|
+
--glass-opacity-quiet: 0.58;
|
|
156
|
+
--glass-opacity-resting: 0.72;
|
|
157
|
+
--glass-opacity-floating: 0.88;
|
|
158
|
+
--glass-opacity-overlay: 0.96;
|
|
159
|
+
--glass-opacity-chassis: 0.36;
|
|
160
|
+
--glass-grain-opacity: 0.045;
|
|
161
|
+
--glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.08);
|
|
162
|
+
|
|
163
|
+
/* Hairline-accent dark mirror — see light counterpart at line ~404. */
|
|
164
|
+
--hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.05);
|
|
165
|
+
--hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.06);
|
|
166
|
+
|
|
167
|
+
/* Specular + curvature — softened for dark backdrops. Disco-grain stays
|
|
168
|
+
at the same opacity ceiling; the dark grain blend already lifts it. */
|
|
169
|
+
--glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
|
|
170
|
+
/* AV.W15 M3 — the full-perimeter rim remaps to its dark weight inside
|
|
171
|
+
`.dark` (mirroring the `--glass-specular` remap above). The lit token
|
|
172
|
+
resolves to the `-dark` alpha on the deeper canvas. */
|
|
173
|
+
--glass-edge-light: var(--glass-edge-light-dark);
|
|
174
|
+
|
|
175
|
+
/* AW.W23 — the chromatic-fringe + adaptive-tint dark arm. The fringe drops
|
|
176
|
+
to a lower-luminance warm/cool pair on the deep canvas; `--glass-tint-
|
|
177
|
+
source` auto-flips with `--card` (no override needed — the default already
|
|
178
|
+
resolves the dark card). */
|
|
179
|
+
--glass-fringe-warm: oklch(0.78 0.07 40 / 0.18);
|
|
180
|
+
--glass-fringe-cool: oklch(0.74 0.06 230 / 0.14);
|
|
181
|
+
/* AX.W52 D19 — the curvature sheen is genuinely SOFTER on the deep canvas (the
|
|
182
|
+
prior dark arm re-declared the overlay BYTE-IDENTICAL to light, so it read
|
|
183
|
+
HARDER over the dark substrate — an unsoftened-dark defect). The `:root`
|
|
184
|
+
`--glass-curvature-overlay` already reads `var(--glass-curvature-intensity)`,
|
|
185
|
+
so lowering just the intensity here re-resolves the SAME warm-cream recipe at
|
|
186
|
+
a softer alpha — no byte-identical re-declaration. */
|
|
187
|
+
--glass-curvature-intensity: 0.012;
|
|
188
|
+
|
|
189
|
+
/* Gold — boosted for dark (oklch; AV.W16 TW2) */
|
|
190
|
+
--gold: oklch(0.784 0.143 86.0);
|
|
191
|
+
--gold-light: oklch(0.898 0.182 97.4);
|
|
192
|
+
--gold-dark: oklch(0.678 0.150 63.8);
|
|
193
|
+
}
|
|
194
|
+
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/* tokens/glass.css
|
|
2
|
+
§8 glassmorphism — the five-tier surface ladder (bg/blur/border/shadow rungs + the glass-level + tint axes).
|
|
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
|
+
§8 GLASSMORPHISM — Five-tier surface ladder (v0.8.0)
|
|
8
|
+
|
|
9
|
+
Tier semantics, alpha-monotonic:
|
|
10
|
+
wash ~0.30α + light blur (was `subtle`)
|
|
11
|
+
quiet ~0.50α + medium blur (the formerly missing rung)
|
|
12
|
+
resting ~0.65α + canonical blur (was `default`; the speedtest plate)
|
|
13
|
+
floating ~0.80α + heavier blur (was `elevated`)
|
|
14
|
+
overlay ~0.95α + heaviest blur (NEW; modal-over-modal)
|
|
15
|
+
|
|
16
|
+
v0.8.0 retires the four-tier `subtle | default | medium | elevated`
|
|
17
|
+
ladder outright. No legacy aliases. Consumers migrate at the same
|
|
18
|
+
breaking change. R3-spec §A.
|
|
19
|
+
═══════════════════════════════════════════════ */
|
|
20
|
+
|
|
21
|
+
/* Opacity primitives */
|
|
22
|
+
--glass-opacity-wash: 0.30;
|
|
23
|
+
--glass-opacity-quiet: 0.50;
|
|
24
|
+
--glass-opacity-resting: 0.65;
|
|
25
|
+
--glass-opacity-floating: 0.80;
|
|
26
|
+
--glass-opacity-overlay: 0.95;
|
|
27
|
+
|
|
28
|
+
/* Blur primitives. The radii here feather the dock + meter card to a
|
|
29
|
+
barely-perceptible diffusion that lets the substrate behind it bleed
|
|
30
|
+
through cleanly while keeping hero typography crisp at meter scale.
|
|
31
|
+
The resting blur sits at 12px so a glass plate reads as a diffusion
|
|
32
|
+
without consumer-side override. */
|
|
33
|
+
--glass-blur-wash-radius: 1px;
|
|
34
|
+
--glass-blur-quiet-radius: 10px;
|
|
35
|
+
--glass-blur-resting-radius: 12px;
|
|
36
|
+
--glass-blur-floating-radius: 16px;
|
|
37
|
+
/* AV.W7 F2 — clamped from 24px into the 8–15px budget band. A blur radius
|
|
38
|
+
past ~20px is exponentially costlier (`backdrop-filter` is glass-ui's most
|
|
39
|
+
expensive idiom — the radius is the dominant cost). 15px is the band
|
|
40
|
+
ceiling; the lower rungs (wash/quiet/resting 1/10/12) sit in-band and the
|
|
41
|
+
floating 16px is the design ceiling at the band edge (left as-is). A
|
|
42
|
+
high-resolution display restores the richer 24px wash via the @media arm
|
|
43
|
+
below — the cost is amortised by the extra device pixels. */
|
|
44
|
+
--glass-blur-overlay-radius: 15px;
|
|
45
|
+
/* Dock blur radius — 11px, paired with the 0.42 opacity below: a crisp
|
|
46
|
+
glass pill (the iOS Control Center register), not a feathered wash.
|
|
47
|
+
The dock composes `blur()` only (no saturate); the
|
|
48
|
+
`prefers-reduced-transparency` bracket at glass.css maps it to the
|
|
49
|
+
opacity-only register. */
|
|
50
|
+
--glass-blur-dock-radius: 11px;
|
|
51
|
+
|
|
52
|
+
/* AX.W54 — each blur radius is scaled by the ONE `--glass-level` scalar (in
|
|
53
|
+
lockstep with the opacity seam above): level=1 byte-identical; level=0 →
|
|
54
|
+
blur(0) (the clean solid floor with the opacity); level>1 → more diffusion.
|
|
55
|
+
The per-rung `saturate()`/`brightness()` companions are UNTOUCHED (the level
|
|
56
|
+
scales the RADIUS, not the saturation — W52's calm light-concentration). */
|
|
57
|
+
--glass-blur-wash: blur(calc(var(--glass-blur-wash-radius) * var(--glass-level))) saturate(1.05);
|
|
58
|
+
/* AV.W15 M1 — the `quiet` rung gained `saturate(1.05) brightness(1.02)`
|
|
59
|
+
so the lower ladder reads with the same saturation life as `resting`+
|
|
60
|
+
(Apple: Liquid Glass concentrates light, it does not desaturate). The
|
|
61
|
+
`brightness(1.02)` is the small lift the spec names — it lands `quiet`
|
|
62
|
+
between bare `wash` and `resting` without over-brightening the rung.
|
|
63
|
+
The `prefers-reduced-transparency: reduce` bracket at glass.css maps
|
|
64
|
+
`--glass-blur-quiet: none`, so this whole chain drops with the blur. */
|
|
65
|
+
--glass-blur-quiet: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(1.05) brightness(1.02);
|
|
66
|
+
--glass-blur-resting: blur(calc(var(--glass-blur-resting-radius) * var(--glass-level))) saturate(1.05);
|
|
67
|
+
/* AX.W52 D19 — the floating/overlay backdrop saturate tamed from 1.4/1.5 to a
|
|
68
|
+
gentle ~1.18/1.2 (real liquid glass concentrates light ~1.1–1.2×; the prior
|
|
69
|
+
1.4–1.5× over-juiced the bleed-through into a garish smear over a colored
|
|
70
|
+
substrate). wash/quiet/resting already sit at 1.05 — untouched. */
|
|
71
|
+
--glass-blur-floating: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(1.18);
|
|
72
|
+
--glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(1.2);
|
|
73
|
+
/* Dock blur composes blur() only — no saturate. */
|
|
74
|
+
--glass-blur-dock: blur(calc(var(--glass-blur-dock-radius) * var(--glass-level)));
|
|
75
|
+
|
|
76
|
+
/* AX.W52 — the GLASS BUTTON blur. The `glass`/`glass-wash` button variants
|
|
77
|
+
compose the `.glass-wash` tier (`--glass-blur-wash` = blur(1px)) — a
|
|
78
|
+
sub-perceptual diffusion authored for a small detail TILE, not a button
|
|
79
|
+
the user reads as "glass." A button is a hero control: it wants a real
|
|
80
|
+
glass blur. `--glass-blur-btn` lifts the variant onto the `quiet`-tier
|
|
81
|
+
radius (10px — a genuine liquid-glass diffusion) with the same gentle
|
|
82
|
+
`saturate(1.05) brightness(1.02)` light-concentration the quiet rung
|
|
83
|
+
carries (NOT a colour-juice). The wash TILE tier (MetricCell et al.) keeps
|
|
84
|
+
its 1px — only the glass BUTTON variants reach for this. */
|
|
85
|
+
--glass-blur-btn: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(1.05) brightness(1.02);
|
|
86
|
+
|
|
87
|
+
/* Dock-specific opacity (0.42) — lighter than `resting` (0.65) so the dock
|
|
88
|
+
reads as a translucent overlay rather than a panel, backdrop bleed
|
|
89
|
+
visible through it. Consumed by `.glass-dock` via `--glass-bg-dock`. The
|
|
90
|
+
value holds the surface register against the tightened 11px blur so the
|
|
91
|
+
dock reads as painted chrome, not a frosted ghost. */
|
|
92
|
+
--glass-opacity-dock: 0.42;
|
|
93
|
+
|
|
94
|
+
/* Dock foreground over an animated backdrop. A dock floating over an
|
|
95
|
+
aurora/animated surface (`value.js` dock-over-aurora, a slides routed
|
|
96
|
+
control, bbnf) sits on a mid-luminance, shifting field where the muted
|
|
97
|
+
default fg can drop below contrast. This token is the dock control's
|
|
98
|
+
foreground base — a complete `hsl()` color consumed via `var()`; for the
|
|
99
|
+
muted icon weight the control mixes it down with `--opacity-icon-muted`.
|
|
100
|
+
Defaults to `var(--foreground)` so the dock paints byte-identically to
|
|
101
|
+
today; a consumer overrides it per-backdrop (e.g. a near-white over a
|
|
102
|
+
dark aurora) without touching library source.
|
|
103
|
+
|
|
104
|
+
AX.W55 — this is the FOREGROUND half of the adaptive story, now reconciled
|
|
105
|
+
INTO the `--glass-backdrop` probe (not a third fork): under the bright bucket
|
|
106
|
+
(`@container style(--glass-backdrop: light)` in dock.css) it re-points toward
|
|
107
|
+
the contrast-clearing ink, and an `@supports (color: contrast-color(…))`
|
|
108
|
+
block flips it natively on supporting engines. The `var(--foreground)`
|
|
109
|
+
default keeps the zero-delta rest state. */
|
|
110
|
+
--dock-fg-on-aurora: var(--foreground);
|
|
111
|
+
|
|
112
|
+
/* Chassis-specific opacity. Looser than `default` (0.50) so the
|
|
113
|
+
<InstrumentChassis> surface reads as glass-over-aurora at its
|
|
114
|
+
64rem-wide footprint; the default tier stays calibrated for cards.
|
|
115
|
+
Mirrors the dock-tier pattern (own opacity primitive + composed bg).
|
|
116
|
+
Light 0.28 sits in the gap between dock (0.32) and a hypothetical
|
|
117
|
+
wash tier; dark 0.36 mirrors the +0.08 step the dock takes from
|
|
118
|
+
`glass-bg-medium` (0.65) down to its own 0.32. */
|
|
119
|
+
--glass-opacity-chassis: 0.28;
|
|
120
|
+
|
|
121
|
+
/* Composed backgrounds — AX.W54: the opacity is threaded through the ONE
|
|
122
|
+
`--glass-level` clarity scalar. Each rung's effective alpha is
|
|
123
|
+
`1 - (1 - <rung-opacity>) * --glass-level`: at level=1 it collapses to the
|
|
124
|
+
hand-tuned `<rung-opacity>` (byte-identical); at level=0 it resolves `1`
|
|
125
|
+
(solid `--card` — the opaque escape); at level>1 it goes clearer. ONE
|
|
126
|
+
expression, the same seven rungs. */
|
|
127
|
+
--glass-bg-wash: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-wash)) * var(--glass-level)) * 100%), transparent);
|
|
128
|
+
--glass-bg-quiet: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-quiet)) * var(--glass-level)) * 100%), transparent);
|
|
129
|
+
--glass-bg-resting: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-resting)) * var(--glass-level)) * 100%), transparent);
|
|
130
|
+
--glass-bg-floating: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-floating)) * var(--glass-level)) * 100%), transparent);
|
|
131
|
+
--glass-bg-overlay: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-overlay)) * var(--glass-level)) * 100%), transparent);
|
|
132
|
+
/* The dock bg ALSO rides the oklab tint seam (AX.W54 amendment): the same
|
|
133
|
+
`color-mix(in oklab, …, --glass-tint-source --glass-tint-strength)` wrapper
|
|
134
|
+
the rungs reach for, ZERO-delta at `--glass-tint-strength: 0%` — so W55's
|
|
135
|
+
adaptive darken can reach the dock (the G2 over-light surface) without a
|
|
136
|
+
second hand-rolled recipe. */
|
|
137
|
+
--glass-bg-dock: color-mix(in oklab, color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-dock)) * var(--glass-level)) * 100%), transparent), var(--glass-tint-source) var(--glass-tint-strength));
|
|
138
|
+
--glass-bg-chassis: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-chassis)) * var(--glass-level)) * 100%), transparent);
|
|
139
|
+
|
|
140
|
+
/* Composed borders — foreground-tinted */
|
|
141
|
+
--glass-border-wash: color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
142
|
+
--glass-border-quiet: color-mix(in srgb, var(--foreground) 10%, transparent);
|
|
143
|
+
--glass-border-resting: color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
144
|
+
--glass-border-floating: color-mix(in srgb, var(--foreground) 15%, transparent);
|
|
145
|
+
--glass-border-overlay: color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
146
|
+
--glass-border-dock: color-mix(in srgb, var(--foreground) 11%, transparent);
|
|
147
|
+
--glass-border: var(--glass-border-quiet);
|
|
148
|
+
--glass-border-strong: var(--glass-border-floating);
|
|
149
|
+
|
|
150
|
+
/* Shared decorative. Light grain dropped 0.035 → 0.025 in P.W1.B —
|
|
151
|
+
at the chassis scale the original alpha read as crawl over the new
|
|
152
|
+
lower-alpha chassis bg; the grain's role is texture, not reading,
|
|
153
|
+
so it sits at the perceptual floor. Dark companion drops 0.06 →
|
|
154
|
+
0.045 below to keep the soft-light blend alive without stippling. */
|
|
155
|
+
--glass-grain-opacity: 0.025;
|
|
156
|
+
--glass-grain-opacity-disco: 0.08;
|
|
157
|
+
--glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.25);
|
|
158
|
+
|
|
159
|
+
/* Hairline-accent — 0.5px catch-light + under-shadow pair.
|
|
160
|
+
Single token composes the canonical 2-stop hairline used by dock,
|
|
161
|
+
instrument-chassis. The `.hairline-accent` utility
|
|
162
|
+
(utilities.css §hairline) adopts these via `box-shadow:`. */
|
|
163
|
+
--hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.06);
|
|
164
|
+
--hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.04);
|
|
165
|
+
--border-hairline: var(--hairline-catch-light), var(--hairline-under-shadow);
|
|
166
|
+
|
|
167
|
+
/* Specular catch-light — 1.5px-tall top-edge highlight that swaps in for
|
|
168
|
+
--glass-highlight on interactive moments (e.g. primary-action hover).
|
|
169
|
+
Reads as a real catch-light on a curved surface. The `-dark` companion
|
|
170
|
+
is overridden inside `.dark`; the named token here is the explicit
|
|
171
|
+
handle consumers can reference to compose dark-aware layers. */
|
|
172
|
+
--glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.45);
|
|
173
|
+
--glass-specular-dark: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
|
|
174
|
+
|
|
175
|
+
/* AV.W15 M3 — Full-perimeter rim light (the "rim that defines the
|
|
176
|
+
silhouette", WWDC25 sess. 219). Distinct from the top-only
|
|
177
|
+
`--glass-highlight` (a 0.5px top-edge catch-light): this is a 0.75px
|
|
178
|
+
inset ring around the WHOLE silhouette, four edges, reading as the
|
|
179
|
+
catch-light that wraps the glass plate the way iOS-26 Liquid Glass
|
|
180
|
+
carries a rim, not just a top highlight. Composed as a SECOND inset
|
|
181
|
+
box-shadow layer alongside `--glass-highlight` on the floating/dock
|
|
182
|
+
tiers (glass.css wires it). The alpha is deliberately low (0.18 light
|
|
183
|
+
/ 0.10 dark) — the rim is decoration and must not eat AA legibility
|
|
184
|
+
over a busy backdrop; it sits below the perceptual reading threshold
|
|
185
|
+
on text. The `-dark` companion is overridden inside `.dark` mirroring
|
|
186
|
+
the `--glass-specular-dark` precedent. */
|
|
187
|
+
--glass-edge-light: inset 0 0 0 0.75px hsl(0 0% 100% / 0.18);
|
|
188
|
+
--glass-edge-light-dark: inset 0 0 0 0.75px hsl(0 0% 100% / 0.10);
|
|
189
|
+
|
|
190
|
+
/* AW.W23 — content-aware adaptive tint (the Baseline-2025 "tint informed by
|
|
191
|
+
surrounding content" axis, WWDC25 sess. 219). A surface can tint toward a
|
|
192
|
+
consumer-provided dominant backdrop color via a `color-mix(in oklab, …)`
|
|
193
|
+
recipe (oklab is the mwg-preferred space for tint generation; NEVER a
|
|
194
|
+
lightness-shift in `oklch(from …)` — browsers don't gamut-map yet).
|
|
195
|
+
|
|
196
|
+
DEFAULT is zero delta: `--glass-tint-source` is the warm-white card itself
|
|
197
|
+
and `--glass-tint-strength` is 0%, so the rung background mixes 0% toward
|
|
198
|
+
the source = byte-identical to today. A consumer sets `--glass-tint-source`
|
|
199
|
+
to a sampled aurora hue + a strength ≤30% to bias the surface. Alpha-safe:
|
|
200
|
+
the mix is bounded ≤30% and never re-points the card's own alpha.
|
|
201
|
+
|
|
202
|
+
AX.W55 — the DEFAULTS stay `var(--card)`/`0%` (the zero-delta rest state).
|
|
203
|
+
The backdrop-luminance probe (`--glass-backdrop`, below) is what OVERRIDES
|
|
204
|
+
them under a bright backdrop; the `:root` defaults are NEVER touched — the
|
|
205
|
+
bucket blocks (glass.css / dock.css `@container style(--glass-backdrop:
|
|
206
|
+
light)`) do the lift, so a surface over today's rich/dark background reads
|
|
207
|
+
byte-identical. */
|
|
208
|
+
--glass-tint-source: var(--card);
|
|
209
|
+
--glass-tint-strength: 0%;
|
|
210
|
+
|
|
211
|
+
/* AX.W55 — adaptive glass legibility (the iOS-26/27 "locally darken the glass
|
|
212
|
+
over light content" move; G2). There is NO web API that reads the pixels
|
|
213
|
+
painted BEHIND a `backdrop-filter` element, so the backdrop-luminance signal
|
|
214
|
+
is a DECLARATIVE BUCKET a consumer sets where it KNOWS the backdrop is bright
|
|
215
|
+
(a near-white card surface, a pale aurora bleed, a bright data grid). It is
|
|
216
|
+
read by the `@container style(--glass-backdrop: light)` blocks on every glass
|
|
217
|
+
family (the shipped density-cascade mechanism — utilities.css §density) which
|
|
218
|
+
lift `--glass-tint-strength` toward the AA floor + re-point `--glass-tint-
|
|
219
|
+
source` to the warm-ink below, mixing the rung TOWARD ink via the EXISTING
|
|
220
|
+
`color-mix(in oklab)` seam — ZERO new compositing seam.
|
|
221
|
+
|
|
222
|
+
--glass-backdrop: the bucket. `dark` (or unset) = today's zero-delta;
|
|
223
|
+
`light` engages the bright-bucket darken. An
|
|
224
|
+
INHERITING ident set on any ancestor reaches every
|
|
225
|
+
descendant glass surface (the @container read).
|
|
226
|
+
--glass-backdrop-luma: the numeric escape hatch — a sampled backdrop
|
|
227
|
+
relative-luminance (0..1) a heavier JS observer sets
|
|
228
|
+
when the declarative bucket is too coarse. The TOKEN
|
|
229
|
+
is minted (the cascade reads it if set); the OBSERVER
|
|
230
|
+
that sets it stays demo-private until a 2nd consumer
|
|
231
|
+
arrives (the no-overfitting bar — the DEFAULT path is
|
|
232
|
+
the declarative bucket, not a speculative sampler).
|
|
233
|
+
--glass-tint-ink: the LOW-LUMINANCE warm-ink the bright bucket re-points
|
|
234
|
+
`--glass-tint-source` to — the warm dark `--foreground`
|
|
235
|
+
family (NOT white; a lightener over light content is
|
|
236
|
+
exactly the W52-fixed wrong direction). It auto-flips
|
|
237
|
+
with `--foreground` (dark-mode it resolves the light
|
|
238
|
+
warm ink — but the bright-backdrop case is a light-mode
|
|
239
|
+
concern). Overridable like every magnitude here.
|
|
240
|
+
|
|
241
|
+
The bright-bucket `--glass-tint-strength` is clamped to a BOUNDED AA-clearing
|
|
242
|
+
floor — `--glass-tint-strength-aa` (≤24%, the iOS clamp; the lowest value that
|
|
243
|
+
clears 4.5:1 over synthetic white, capped LOW so the surface STAYS translucent,
|
|
244
|
+
"let as much content through as possible"). Recorded here as the ceiling the
|
|
245
|
+
bucket blocks drive to; the live 4.5:1 readback (proof:adaptive-glass π arm)
|
|
246
|
+
ratifies the exact value. */
|
|
247
|
+
--glass-backdrop: dark;
|
|
248
|
+
--glass-backdrop-luma: ;
|
|
249
|
+
--glass-tint-ink: var(--foreground);
|
|
250
|
+
--glass-tint-strength-aa: 18%;
|
|
251
|
+
|
|
252
|
+
/* AW.W23 — chromatic edge dispersion (the "polished glass" rim fringe Apple
|
|
253
|
+
shows). A warm fringe on one edge + a cool fringe on the other, low-alpha,
|
|
254
|
+
biased warm-cream/NCSU-red (NOT iOS-blue). Composed OVER the W22 uniform
|
|
255
|
+
rim under `prefers-reduced-transparency: no-preference`; dropped under
|
|
256
|
+
`reduce` (it is a transparency garnish). The two directional inset rings
|
|
257
|
+
read as light refracting through the glass edge. */
|
|
258
|
+
--glass-fringe-warm: oklch(0.92 0.06 40 / 0.22);
|
|
259
|
+
--glass-fringe-cool: oklch(0.90 0.05 230 / 0.16);
|
|
260
|
+
--glass-edge-dispersion:
|
|
261
|
+
inset 0.75px 0 0 0 var(--glass-fringe-warm),
|
|
262
|
+
inset -0.75px 0 0 0 var(--glass-fringe-cool);
|
|
263
|
+
|
|
264
|
+
/* AX.W52 D19 — the moving-specular gleam radius (glass.css `.glass-material::
|
|
265
|
+
before`). The ONE knob that BOUNDS the gleam geometry as a percentage of the
|
|
266
|
+
plate so it can NEVER again become a whole-surface disc (the prior implicit
|
|
267
|
+
`circle at …` ran its stops to 55–75% of the half-diagonal — a wash on a
|
|
268
|
+
small tile). 36% reads as a tracked edge glint. Override on `:root` to retune
|
|
269
|
+
library-wide; a per-surface override clips the gleam tighter/wider. */
|
|
270
|
+
--glass-specular-size: 36%;
|
|
271
|
+
|
|
272
|
+
/* Chassis curvature illusion — a subtle radial gradient at the chassis
|
|
273
|
+
top centre that lifts the surface without committing to literal 3D.
|
|
274
|
+
Composed into <InstrumentChassis>'s background stack. AX.W52 D19 — the
|
|
275
|
+
prior pure-white `hsl(0 0% 100% / 0.06)` reaching `transparent 60%` was a
|
|
276
|
+
broad top-centre WASH (the #1 fixed-anchor rest-bloom culprit). Re-derived
|
|
277
|
+
onto the warm-cream house identity (`hsl(40 30% 96%)`, L < 100% so the warm
|
|
278
|
+
hue survives — mirroring the moving gleam), the alpha routed through the
|
|
279
|
+
SINGLE overridable `--glass-curvature-intensity` knob (0.02 default, a third
|
|
280
|
+
of the old 0.06), and the ellipse tightened to `transparent 38%` so it reads
|
|
281
|
+
as a thin top-edge sheen, not a central wash. */
|
|
282
|
+
--glass-curvature-intensity: 0.02;
|
|
283
|
+
--glass-curvature-overlay: radial-gradient(
|
|
284
|
+
ellipse at 50% -20%,
|
|
285
|
+
hsl(40 30% 96% / var(--glass-curvature-intensity)),
|
|
286
|
+
transparent 38%
|
|
287
|
+
);
|
|
288
|
+
/* The light-arm dark alias kept on the same warm-cream + token recipe so a
|
|
289
|
+
non-`.dark` consumer reading `…-overlay-dark` still resolves a softened
|
|
290
|
+
sheen; the `.dark` block below lowers `--glass-curvature-intensity` so the
|
|
291
|
+
deep-canvas arm is genuinely softer (the prior byte-identical dark arm read
|
|
292
|
+
HARDER over the dark canvas). */
|
|
293
|
+
--glass-curvature-overlay-dark: var(--glass-curvature-overlay);
|
|
294
|
+
|
|
295
|
+
/* Chart palette aliases — speedtest et al. read these for phase tinting.
|
|
296
|
+
Defaults map to viz-basis hues; consumers can override per app. */
|
|
297
|
+
--chart-ping: var(--viz-chebyshev);
|
|
298
|
+
--chart-download: var(--viz-fourier);
|
|
299
|
+
--chart-upload: var(--viz-amber);
|
|
300
|
+
--chart-jitter: var(--viz-legendre);
|
|
301
|
+
|
|
302
|
+
/* O.W6 Lane D — WCAG companion `--chart-{phase}-label` tokens
|
|
303
|
+
(speedtest AC.W6c.T2 — F1.V-04 closure).
|
|
304
|
+
|
|
305
|
+
The canvas-side hues above preserve their saturated brand register
|
|
306
|
+
(correct against the meter dial); the COMPANION tokens darken to
|
|
307
|
+
L≈0.40 so phase-label text on `--background` clears the WCAG 2.1
|
|
308
|
+
AA-body 4.5:1 contrast floor. Mirrors the two-token discipline
|
|
309
|
+
already established by `--meter-{background-color,track-stroke}`:
|
|
310
|
+
one token feeds the canvas/visual, the second feeds the label
|
|
311
|
+
text.
|
|
312
|
+
|
|
313
|
+
Light-mode L≈0.40 in OKLCH preserves the hue rotation while
|
|
314
|
+
dropping luminance enough for body contrast; dark-mode flips to
|
|
315
|
+
L≈0.85 against the dark canvas. Consumers reach these via
|
|
316
|
+
`color: var(--chart-ping-label)` (etc.) on label elements ONLY —
|
|
317
|
+
chart strokes/fills continue to read `--chart-ping`. */
|
|
318
|
+
--chart-ping-label: oklch(0.40 0.18 230);
|
|
319
|
+
--chart-download-label: oklch(0.40 0.20 22);
|
|
320
|
+
--chart-upload-label: oklch(0.40 0.16 55);
|
|
321
|
+
--chart-jitter-label: oklch(0.40 0.20 305);
|
|
322
|
+
|
|
323
|
+
/* O.W6 Lane D — Meter track stroke (speedtest AC.W6c.T3 — F1.V-02
|
|
324
|
+
closure). Promoted from speedtest's consumer-side declaration so
|
|
325
|
+
glass-ui owns the canonical light + dark values. The light-mode
|
|
326
|
+
value reads opaque foreground (composes through canvas
|
|
327
|
+
`globalAlpha` in consumer renderers; e.g., speedtest's `rings.ts`
|
|
328
|
+
`globalAlpha = 0.22` lands the phantom-track at the perceptual
|
|
329
|
+
sweet-spot). The dark-mode companion lives under `.dark` below
|
|
330
|
+
and ALSO reads `var(--foreground)` — the prior speedtest value
|
|
331
|
+
`var(--background)` rendered bg-on-bg invisible at dark mode. */
|
|
332
|
+
--meter-track-stroke: var(--foreground);
|
|
333
|
+
|
|
334
|
+
/* Shadow per tier — complete box-shadow lists for glass surface classes */
|
|
335
|
+
--glass-shadow-wash: var(--shadow-sm), var(--glass-highlight);
|
|
336
|
+
--glass-shadow-quiet: var(--shadow-md), var(--glass-highlight);
|
|
337
|
+
--glass-shadow-resting: var(--shadow-lg), var(--glass-highlight);
|
|
338
|
+
--glass-shadow-floating: var(--shadow-xl),
|
|
339
|
+
0 0 0 0.5px color-mix(in srgb, var(--shadow-color) 5%, transparent),
|
|
340
|
+
var(--glass-highlight);
|
|
341
|
+
--glass-shadow-overlay: var(--shadow-2xl),
|
|
342
|
+
0 0 0 0.5px color-mix(in srgb, var(--shadow-color) 8%, transparent),
|
|
343
|
+
var(--glass-highlight);
|
|
344
|
+
--glass-shadow: var(--glass-shadow-quiet);
|
|
345
|
+
--glass-shadow-lg: var(--glass-shadow-floating);
|
|
346
|
+
|
|
347
|
+
/* ─────────────────────────────────────────────────────────────
|
|
348
|
+
AL-W1-α augmented — SPINE 8th tier (HOUSING register)
|
|
349
|
+
|
|
350
|
+
Closes the AK W2 chassis-spine architectural underclaim per
|
|
351
|
+
AL-X5 §4.1. The spine register is a polished SLEEVE, not glass:
|
|
352
|
+
NO backdrop-filter, NO plate opacity, hairline outer stroke,
|
|
353
|
+
interior radial vignette that subtly carries the phase-color
|
|
354
|
+
cascade. Consumed exclusively by `<InstrumentChassis variant="spine">`
|
|
355
|
+
at App-level mount paths (quiet-content routes).
|
|
356
|
+
|
|
357
|
+
The 4 tokens here cover the minimum viable substrate the SLIM
|
|
358
|
+
Y4/Y6/Y7 retention set ratified. The 35 rejected axes (saturate
|
|
359
|
+
band, edge-light per tier, depth-shadow per tier, tier-up macro)
|
|
360
|
+
stay rejected per the conservative-creation mandate.
|
|
361
|
+
───────────────────────────────────────────────────────────── */
|
|
362
|
+
--glass-spine-opacity: 0;
|
|
363
|
+
--glass-spine-blur: 0px;
|
|
364
|
+
--glass-spine-border: var(--surface-tint-8);
|
|
365
|
+
--glass-spine-vignette: radial-gradient(
|
|
366
|
+
ellipse at 50% 0%,
|
|
367
|
+
color-mix(in oklab, var(--phase-color, var(--surface-tint-8)) 8%, transparent),
|
|
368
|
+
transparent 60%
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
/* ─────────────────────────────────────────────────────────────
|
|
372
|
+
AL-W10 SLIM — UNDER-SHADOW recipe rungs
|
|
373
|
+
|
|
374
|
+
Per AL-X5 §4 + Y7 §3. iOS Liquid Glass surfaces carry a 0.5px
|
|
375
|
+
dark hairline along the bottom edge (reads as under-shadow /
|
|
376
|
+
glass thickness). The substrate `--hairline-under-shadow`
|
|
377
|
+
already publishes one quiet rung; the four-rung ladder here
|
|
378
|
+
names the SLIM retention set (Y4 §3.2 / Y6 §4.3) — `quiet`,
|
|
379
|
+
`default`, `vivid`, `spine` cover the consumer landings without
|
|
380
|
+
multiplying tokens per tier. The 3 hand-rolled literals at
|
|
381
|
+
`instrument-chassis.css:52`, `dock.css:279`, `dock.css:952`
|
|
382
|
+
retire to these.
|
|
383
|
+
|
|
384
|
+
Composes as a NON-INSET box-shadow layer alongside the existing
|
|
385
|
+
`--glass-shadow-*` recipe (the inset under-shadow stays at the
|
|
386
|
+
hand-rolled literal where it's load-bearing on chassis-internal
|
|
387
|
+
surfaces).
|
|
388
|
+
───────────────────────────────────────────────────────────── */
|
|
389
|
+
--glass-under-shadow-quiet: 0 2px 8px -1px oklch(0 0 0 / 0.04);
|
|
390
|
+
--glass-under-shadow-default: 0 4px 16px -2px oklch(0 0 0 / 0.08);
|
|
391
|
+
--glass-under-shadow-vivid: 0 8px 32px -4px oklch(0 0 0 / 0.12);
|
|
392
|
+
--glass-under-shadow-spine: 0 1px 0 0 oklch(0 0 0 / 0.06);
|
|
393
|
+
|
|
394
|
+
/* Overlay scrim rungs — substrate-aware modal/dialog backdrop tints.
|
|
395
|
+
Three weights cover the deployed range: dialog-scroll (subtle),
|
|
396
|
+
canonical modal (default), drawer/full-cover (strong).
|
|
397
|
+
|
|
398
|
+
AY.W-PRIM-POLISH D3 — the scrim is its OWN identity token, NOT derived
|
|
399
|
+
from `--shadow-color`. A scrim's role is to RECEDE: it must pin to INK in
|
|
400
|
+
BOTH modes. The cartoon-shadow family rides `--shadow-color: var(--foreground)`
|
|
401
|
+
(correct — a shadow re-tints under `.dark` by construction), but a scrim
|
|
402
|
+
that does the same FLOODS the dark room with a cream fog (the old dark
|
|
403
|
+
overlay painted `srgb(0.91… / 0.5)`, a near-white wash that BRIGHTENED the
|
|
404
|
+
page at the modal moment). `--overlay-scrim-ink` is a fixed warm near-black
|
|
405
|
+
(the light-mode `--foreground` value), re-resolved verbatim in `.dark` so
|
|
406
|
+
the scrim recedes in both modes. Clean break, no alias (no-backwards-compat).
|
|
407
|
+
The `--shadow-color` / `--shadow-cartoon-*` family is UNTOUCHED. */
|
|
408
|
+
--overlay-scrim-ink: hsl(24 10% 10%);
|
|
409
|
+
--overlay-scrim: color-mix(in srgb, var(--overlay-scrim-ink) 50%, transparent);
|
|
410
|
+
--overlay-scrim-strong: color-mix(in srgb, var(--overlay-scrim-ink) 80%, transparent);
|
|
411
|
+
--overlay-scrim-subtle: color-mix(in srgb, var(--overlay-scrim-ink) 40%, transparent);
|
|
412
|
+
|
|
413
|
+
}
|