@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,238 @@
|
|
|
1
|
+
/* glass/material.css
|
|
2
|
+
The unified .glass-material atom (AW.W22) + the shared ::before grain/specular wiring across the glass family — ONE source for the three material atoms.
|
|
3
|
+
Carved from the glass.css cascade root; @import-ed by glass.css in cascade
|
|
4
|
+
order, each in its own @layer components (isomorphic to the monolith).
|
|
5
|
+
See docs/precepts/design-idioms.md §cohesion-aware partials. */
|
|
6
|
+
@layer components {
|
|
7
|
+
/* ── The unified glass material (AW.W22) ──────────────────────────────
|
|
8
|
+
ONE source for the three material atoms that AV.W15 scattered onto
|
|
9
|
+
opt-in classes + single tiers:
|
|
10
|
+
(a) the moving-specular `::before` catch-light (folded here from
|
|
11
|
+
glass-specular-track.css — that file now keeps only the thin
|
|
12
|
+
`.glass-specular-track` ALIAS + the brackets that point HERE),
|
|
13
|
+
(b) the `--glass-edge-light` full-perimeter rim (moved off the
|
|
14
|
+
floating-only block so EVERY rung carries it),
|
|
15
|
+
(c) the pointer interaction-light hooks (the `--specular-*`
|
|
16
|
+
`@property` channel mapped from the consumer's --mouse-x/--mouse-y
|
|
17
|
+
write).
|
|
18
|
+
The five ladder rungs + `.glass-card` + the `.dock-icon-button` CONTROL
|
|
19
|
+
compose `.glass-material`, so a Switch thumb, a glass Button, a Dialog,
|
|
20
|
+
and a Sheet all read as the SAME material without per-component wiring.
|
|
21
|
+
|
|
22
|
+
The `.glass-dock` SHELL is OUT of this group BY DESIGN — it hand-rolls a
|
|
23
|
+
parallel surface (its own `--glass-*-dock` family + a local rim + an
|
|
24
|
+
instrument-strip `::before`) the dock arm owns. The COHESION CONSEQUENCE is
|
|
25
|
+
DELIBERATE: the dock shell carries NO shared edge-gleam / moving-specular
|
|
26
|
+
`::before` (its only `::before` is the `variant-instrument-strip` engraved
|
|
27
|
+
bezel, dock/shell.css — a different effect). The dock's catch-light lives on
|
|
28
|
+
its CONTROLS (`.dock-icon-button` et al., listed below + in the opt-in
|
|
29
|
+
transition block), which ARE in the material group — NOT on the shell plate.
|
|
30
|
+
Adding a shell gleam would re-introduce glass-on-glass over the controls, so
|
|
31
|
+
the shell-without-gleam is a NAMED EXEMPTION, gated as `dock-shell-exempt` in
|
|
32
|
+
proof:glass-cohesion (the only exemption beside the legibility allowlist).
|
|
33
|
+
|
|
34
|
+
The selector GROUP is the single source. Adding a surface to the band
|
|
35
|
+
material is one comma-entry here, not a new opt-in class string. */
|
|
36
|
+
.glass-material,
|
|
37
|
+
.glass-wash,
|
|
38
|
+
.glass-quiet,
|
|
39
|
+
.glass-resting,
|
|
40
|
+
.glass-floating,
|
|
41
|
+
.glass-overlay,
|
|
42
|
+
.glass-card,
|
|
43
|
+
.glass-specular-track,
|
|
44
|
+
.dock-icon-button,
|
|
45
|
+
.dock-tab-button,
|
|
46
|
+
.dock-select-trigger,
|
|
47
|
+
.dock-dropdown-trigger {
|
|
48
|
+
position: relative;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* (b) The rim — UNIFORM across all rungs (ONE `--glass-edge-light` token,
|
|
52
|
+
not a per-rung family). The floating/overlay tiers previously wired it
|
|
53
|
+
into their box-shadow stack; it now rides the material group as a
|
|
54
|
+
dedicated `::after` inset ring so it composes alongside (not inside) each
|
|
55
|
+
tier's own shadow recipe. The `::after` grain overlay already claims the
|
|
56
|
+
five rungs' `::after`; the rim is folded INTO that same overlay's
|
|
57
|
+
box-shadow below (the grain `::after` gets the rim inset ring) so no
|
|
58
|
+
pseudo-element collides. */
|
|
59
|
+
|
|
60
|
+
/* (a)+(c) The moving-specular `::before` catch-light — the iOS-26
|
|
61
|
+
illuminate-from-within behaviour. A masked radial-gradient glow rides the
|
|
62
|
+
surface at the pointer position (--mouse-x/--mouse-y → the typed
|
|
63
|
+
--specular-* channel). Folded VERBATIM from glass-specular-track.css so
|
|
64
|
+
there is exactly ONE specular source. */
|
|
65
|
+
.glass-material::before,
|
|
66
|
+
.glass-wash::before,
|
|
67
|
+
.glass-quiet::before,
|
|
68
|
+
.glass-resting::before,
|
|
69
|
+
.glass-floating::before,
|
|
70
|
+
.glass-overlay::before,
|
|
71
|
+
.glass-card::before,
|
|
72
|
+
.glass-specular-track::before,
|
|
73
|
+
.dock-icon-button::before,
|
|
74
|
+
.dock-tab-button::before,
|
|
75
|
+
.dock-select-trigger::before,
|
|
76
|
+
.dock-dropdown-trigger::before {
|
|
77
|
+
content: "";
|
|
78
|
+
position: absolute;
|
|
79
|
+
inset: 0;
|
|
80
|
+
border-radius: inherit;
|
|
81
|
+
pointer-events: none;
|
|
82
|
+
z-index: 1;
|
|
83
|
+
/* Map the consumer's pointer write onto the typed properties, ON THE
|
|
84
|
+
PSEUDO. The `--mouse-x/--mouse-y` write lands on the HOST (inline
|
|
85
|
+
style) as UNREGISTERED props that inherit down to this `::before`;
|
|
86
|
+
the registered `--specular-*` props are `inherits: false`, so the
|
|
87
|
+
mapping is declared HERE where the pseudo owns its typed value. The
|
|
88
|
+
`var(--mouse-x, 50%)` floor is the centred fallback. */
|
|
89
|
+
--specular-x: var(--mouse-x, 50%);
|
|
90
|
+
--specular-y: var(--mouse-y, 50%);
|
|
91
|
+
/* The catch-light intensity at REST — reads the token cohort
|
|
92
|
+
(tokens.css §specular-intensity), default 0 so a static, unwired
|
|
93
|
+
surface is CLEAN and the @property `initial-value: 0` dormancy is no
|
|
94
|
+
longer defeated by a floor. Hover/active lift it through the same
|
|
95
|
+
cohort (the interaction-light state machine below). */
|
|
96
|
+
--specular-intensity: var(--glass-specular-intensity-rest, 0);
|
|
97
|
+
/* AX.W52 D19 — a thin, BOUNDED, pointer-anchored EDGE gleam (not the prior
|
|
98
|
+
full-plate central disc that washed small tiles muddy). The geometry is an
|
|
99
|
+
EXPLICIT-radius circle bounded by `--glass-specular-size` (36% of the
|
|
100
|
+
plate) whose falloff reaches `/0` well INSIDE the plate (70%) — a tracked
|
|
101
|
+
catch-light reading the surface near the lit edge, NEVER a whole-surface
|
|
102
|
+
wash. The core is genuinely WARM-CREAM (L < 100% so the warm hue survives;
|
|
103
|
+
the prior `hsl(40 30% 100%)` blew out to white). The `--specular-intensity`
|
|
104
|
+
multiplier drives the layer `opacity`, NOT a per-stop alpha (a
|
|
105
|
+
registered-`@property` var() nested in an hsl() alpha computes to 0 in
|
|
106
|
+
Chromium — the cross-engine-safe path); the per-stop alphas are literals so
|
|
107
|
+
even the lifted hover/active states read as a lens, not a flash. */
|
|
108
|
+
background: radial-gradient(
|
|
109
|
+
circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
|
|
110
|
+
hsl(40 35% 92% / 0.5) 0%,
|
|
111
|
+
hsl(40 35% 92% / 0) 70%,
|
|
112
|
+
transparent 100%
|
|
113
|
+
);
|
|
114
|
+
opacity: var(--specular-intensity, 0);
|
|
115
|
+
/* Clip the gleam to ITS OWN radius (not the whole plate) so it stays a
|
|
116
|
+
bounded glint. `mask-image` Baseline 2023-12-07; a non-supporting engine
|
|
117
|
+
ignores it and the `inset: 0` + radius-inherit + the in-paint falloff
|
|
118
|
+
already bound the gleam to the surface. */
|
|
119
|
+
mask-image: radial-gradient(
|
|
120
|
+
circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
|
|
121
|
+
black 0%,
|
|
122
|
+
black 60%,
|
|
123
|
+
transparent 100%
|
|
124
|
+
);
|
|
125
|
+
/* AX.W52 D19 — `plus-lighter` (additive but HDR-clamped, Safari 16.4+) over
|
|
126
|
+
the prior `screen` (a non-linear lightener that lifted the whole tile
|
|
127
|
+
toward white — the muddy-card defect). A non-supporting engine degrades to
|
|
128
|
+
a plain low-alpha warm overlay (the gleam composes normally — no blend, no
|
|
129
|
+
blowout), the no-workaround floor; NOT a `screen` fallback. */
|
|
130
|
+
mix-blend-mode: plus-lighter;
|
|
131
|
+
/* The moving-specular TRANSITION is NOT declared here. An idle/unwired
|
|
132
|
+
`::before` is STATIC (no interpolation track), so a bare glass rung / an
|
|
133
|
+
un-armed Card / a glass Button at rest attaches ZERO animation tracks (the
|
|
134
|
+
keyframes.js runtime counts 0 idle tracks, not 19). The transition rides
|
|
135
|
+
ONLY the WIRED + interactive surfaces — the opt-in scoped block below. */
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* AY.W-GLASS — the moving-specular transition is OPT-IN (the Card wire-or-omit
|
|
139
|
+
pattern, generalized). It attaches ONLY to a WIRED surface
|
|
140
|
+
(`.glass-specular-track` — Card emits it conditionally, the dock controls + the
|
|
141
|
+
Slider thumb compose it) OR to any glass surface under `:hover`/`:active` (the
|
|
142
|
+
pointer is present, so the interpolation is legitimately live). An idle/unwired
|
|
143
|
+
`.glass-floating` / `.glass-wash` / bare-rung `::before` carries NO transition
|
|
144
|
+
and thus NO keyframes.js track. The §6 register is PRESERVED (still
|
|
145
|
+
`--ease-standard` on the position-tracked + surface-opacity legs — H-motion §6
|
|
146
|
+
"position-tracked → --ease-standard"; only the SELECTOR scope changes). The dock
|
|
147
|
+
controls keep the always-on transition (they are interactive controls; their rest
|
|
148
|
+
intensity is 0 so they paint nothing at rest, but a control legitimately carries
|
|
149
|
+
the transition). */
|
|
150
|
+
.glass-specular-track::before,
|
|
151
|
+
.glass-material:hover::before, .glass-material:active::before,
|
|
152
|
+
.glass-wash:hover::before, .glass-wash:active::before,
|
|
153
|
+
.glass-quiet:hover::before, .glass-quiet:active::before,
|
|
154
|
+
.glass-resting:hover::before, .glass-resting:active::before,
|
|
155
|
+
.glass-floating:hover::before, .glass-floating:active::before,
|
|
156
|
+
.glass-overlay:hover::before, .glass-overlay:active::before,
|
|
157
|
+
.glass-card:hover::before, .glass-card:active::before,
|
|
158
|
+
.dock-icon-button::before,
|
|
159
|
+
.dock-tab-button::before,
|
|
160
|
+
.dock-select-trigger::before,
|
|
161
|
+
.dock-dropdown-trigger::before {
|
|
162
|
+
/* Smooth the position + intensity between pointer samples (the typed
|
|
163
|
+
@property regs make the percentage stops interpolable). */
|
|
164
|
+
transition:
|
|
165
|
+
--specular-x var(--duration-fast, 150ms) var(--ease-standard, ease-out),
|
|
166
|
+
--specular-y var(--duration-fast, 150ms) var(--ease-standard, ease-out),
|
|
167
|
+
opacity var(--duration-normal, 240ms) var(--ease-standard, ease-out);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.dark .glass-material::before,
|
|
171
|
+
.dark .glass-wash::before,
|
|
172
|
+
.dark .glass-quiet::before,
|
|
173
|
+
.dark .glass-resting::before,
|
|
174
|
+
.dark .glass-floating::before,
|
|
175
|
+
.dark .glass-overlay::before,
|
|
176
|
+
.dark .glass-card::before,
|
|
177
|
+
.dark .glass-specular-track::before,
|
|
178
|
+
.dark .dock-icon-button::before,
|
|
179
|
+
.dark .dock-tab-button::before,
|
|
180
|
+
.dark .dock-select-trigger::before,
|
|
181
|
+
.dark .dock-dropdown-trigger::before {
|
|
182
|
+
/* Softer over the deep canvas — `plus-lighter` still lifts on dark, so the
|
|
183
|
+
`.dark` cohort runs a lower hover/active rung (tokens.css §specular-
|
|
184
|
+
intensity `.dark` arm); the rest rung is already 0 so the dark arm only
|
|
185
|
+
softens hover/active via the cohort. The rest rung re-reads the (dark)
|
|
186
|
+
token here so a dark `:root` override resolves. */
|
|
187
|
+
--specular-intensity: var(--glass-specular-intensity-rest, 0);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* (c) Interaction-light lockstep — hover/active lift the intensity in the
|
|
191
|
+
SAME rungs the scale-press squish keys off, so material-light fires in
|
|
192
|
+
lockstep with the press across every glass surface. Settles back on leave
|
|
193
|
+
via the opacity transition above. */
|
|
194
|
+
.glass-material:hover::before,
|
|
195
|
+
.glass-wash:hover::before,
|
|
196
|
+
.glass-quiet:hover::before,
|
|
197
|
+
.glass-resting:hover::before,
|
|
198
|
+
.glass-floating:hover::before,
|
|
199
|
+
.glass-overlay:hover::before,
|
|
200
|
+
.glass-card:hover::before,
|
|
201
|
+
.glass-specular-track:hover::before,
|
|
202
|
+
.dock-icon-button:hover::before,
|
|
203
|
+
.dock-tab-button:hover::before,
|
|
204
|
+
.dock-select-trigger:hover::before,
|
|
205
|
+
.dock-dropdown-trigger:hover::before {
|
|
206
|
+
--specular-intensity: var(--glass-specular-intensity-hover, 0.1);
|
|
207
|
+
}
|
|
208
|
+
.glass-material:active::before,
|
|
209
|
+
.glass-wash:active::before,
|
|
210
|
+
.glass-quiet:active::before,
|
|
211
|
+
.glass-resting:active::before,
|
|
212
|
+
.glass-floating:active::before,
|
|
213
|
+
.glass-overlay:active::before,
|
|
214
|
+
.glass-card:active::before,
|
|
215
|
+
.glass-specular-track:active::before,
|
|
216
|
+
.dock-icon-button:active::before,
|
|
217
|
+
.dock-tab-button:active::before,
|
|
218
|
+
.dock-select-trigger:active::before,
|
|
219
|
+
.dock-dropdown-trigger:active::before {
|
|
220
|
+
--specular-intensity: var(--glass-specular-intensity-active, 0.16);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* AX.W45-TUNE C5 — the SELECTED dock control reads as the keyframes-dock glass
|
|
224
|
+
register: a glass-tier active fill (`--dock-control-active-bg` → the floating
|
|
225
|
+
plate, tokens.css) WITH the specular gleam waking over it, not a flat ink
|
|
226
|
+
stamp. The CSS `:active` pseudo above only fires on press-down; a SELECTED tile
|
|
227
|
+
(`.is-active` / `[aria-pressed]` / `[aria-expanded]` / `[aria-current]`) holds
|
|
228
|
+
the gleam lit so the selected element reads as a lit glass tier the substrate
|
|
229
|
+
shows through (the model the user named, `pass-3:13`). Family-scoped addition
|
|
230
|
+
on the dock-control `::before`, line-disjoint from the shared recipe above. */
|
|
231
|
+
.dock-icon-button:is(.is-active, .active, [aria-pressed="true"], [aria-expanded="true"], [aria-current="page"])::before,
|
|
232
|
+
.dock-tab-button:is(.is-active, .active, [aria-pressed="true"], [aria-expanded="true"], [aria-current="page"])::before,
|
|
233
|
+
.dock-select-trigger:is(.is-active, .active, [aria-pressed="true"], [aria-expanded="true"], [aria-current="page"])::before,
|
|
234
|
+
.dock-dropdown-trigger:is(.is-active, .active, [aria-pressed="true"], [aria-expanded="true"], [aria-current="page"])::before {
|
|
235
|
+
--specular-intensity: var(--glass-specular-intensity-active, 0.16);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/* glass/progress-rail.css
|
|
2
|
+
The @utility glass-progress-rail — restyles <Progress variant=default> into the deck-position rail. A @utility (not @layer components) so it outranks the variant's baked h-4/rounded-pill utilities.
|
|
3
|
+
Carved from the glass.css cascade root; @import-ed by glass.css in cascade
|
|
4
|
+
order, each in its own @layer components (isomorphic to the monolith).
|
|
5
|
+
See docs/precepts/design-idioms.md §cohesion-aware partials. */
|
|
6
|
+
/* ── Deck-position rail (AW.W16 · AX.W24) ───────────────────────────────────
|
|
7
|
+
A Tailwind `@utility` that RESTYLES the shipped `<Progress variant="default">`
|
|
8
|
+
(the reka-ui ProgressRoot track + its indicator child) into the thin
|
|
9
|
+
bottom-of-deck position rail. It composes the EXISTING fill — it does NOT
|
|
10
|
+
re-author a second track/range mechanic. Every visual axis is a
|
|
11
|
+
`--progress-rail-*` token, so a consumer/dark-flip re-tints with zero library
|
|
12
|
+
edit (`:root { --progress-rail-fill: … }`). The viewport-pinned chrome
|
|
13
|
+
(`position: fixed`, `env(safe-area-inset-bottom)`, the z-index) is CONSUMER-
|
|
14
|
+
supplied — this recipe owns only the LOOK.
|
|
15
|
+
|
|
16
|
+
AX.W24 — WHY `@utility`, not `@layer components`. The rail RESTYLES the default
|
|
17
|
+
Progress: it must override the `h-4` height + `rounded-pill` radius utilities the
|
|
18
|
+
variant bakes. Those utilities live in `@layer utilities`, which ALWAYS outranks
|
|
19
|
+
`@layer components` regardless of source order, so the prior `@layer components`
|
|
20
|
+
recipe's `height: 3px` was a silent no-op (the rail painted as a 16px bar). An
|
|
21
|
+
`@utility` lands the recipe IN `@layer utilities` alongside `h-4`, where a single-
|
|
22
|
+
class selector wins the geometry by source order — the idiomatic Tailwind-v4 way
|
|
23
|
+
to author a restyle-class that out-ranks base utilities (the `btn-audacious` /
|
|
24
|
+
`cartoon-surface` pattern).
|
|
25
|
+
|
|
26
|
+
The COLOUR fix is the SEPARATE token-read-at-source path (NOT a layer-juggle):
|
|
27
|
+
`ProgressDefault` reads `--progress-fill`/`--progress-track` and dropped its
|
|
28
|
+
`bg-secondary`/`bg-primary` utilities, so this recipe FEEDS those tokens rather
|
|
29
|
+
than fighting a utility colour. The `--progress-fill` set on the rail root cascades
|
|
30
|
+
to the indicator child (a CSS custom property inherits), so the indicator reads the
|
|
31
|
+
override hue. */
|
|
32
|
+
@utility glass-progress-rail {
|
|
33
|
+
/* The track hairline + zero radius — the rail reads as a thin square sliver, not
|
|
34
|
+
the variant's 16px `rounded-pill` bar. A single-class @utility ties `h-4`/
|
|
35
|
+
`rounded-pill` on SPECIFICITY (both 0,1,0) and Tailwind's utility sort can emit
|
|
36
|
+
`h-4` later, so the bare tie loses. The doubled-class self-reference (`&&` →
|
|
37
|
+
`.glass-progress-rail.glass-progress-rail`, specificity 0,2,0) wins the geometry
|
|
38
|
+
DETERMINISTICALLY over the base utilities regardless of emit order — the precise,
|
|
39
|
+
contained way to out-rank a base utility without `!important`. */
|
|
40
|
+
&& {
|
|
41
|
+
height: var(--progress-rail-h, 3px);
|
|
42
|
+
border-radius: 0;
|
|
43
|
+
}
|
|
44
|
+
/* Feed the token-read default variant — these route the consumer's
|
|
45
|
+
`--progress-rail-*` axes into the `--progress-fill`/`--progress-track` tokens
|
|
46
|
+
the variant reads at source (the cascade-correct colour path). */
|
|
47
|
+
--progress-track: var(
|
|
48
|
+
--progress-rail-track,
|
|
49
|
+
color-mix(in srgb, var(--foreground) 8%, transparent)
|
|
50
|
+
);
|
|
51
|
+
--progress-fill: var(--progress-rail-fill, var(--primary));
|
|
52
|
+
|
|
53
|
+
/* The fill — the shipped ProgressIndicator child. The indicator paints the
|
|
54
|
+
inherited `--progress-fill`; the leading-edge glow is re-authored (AX.W24 F2)
|
|
55
|
+
as a TRAILING right-edge INSET box-shadow that lives INSIDE the indicator's
|
|
56
|
+
own box. The prior `4px 0 8px` OUTSET rightward shadow extended PAST the fill
|
|
57
|
+
boundary into the ProgressRoot's load-bearing `overflow-hidden` clip and was
|
|
58
|
+
eaten — invisible at every value. An `inset` shadow offset leftward
|
|
59
|
+
(`inset -Npx 0 …`) brightens just inside the indicator's right (leading) edge
|
|
60
|
+
— the moving position head — and never crosses the fill boundary, so the clip
|
|
61
|
+
cannot eat it (the clip is never lifted; that would re-break the default
|
|
62
|
+
Progress look for every other consumer). `box-shadow` is a separate property
|
|
63
|
+
from `background`, so it composes cleanly over the token-read fill. */
|
|
64
|
+
&& > * {
|
|
65
|
+
border-radius: 0;
|
|
66
|
+
box-shadow:
|
|
67
|
+
inset
|
|
68
|
+
calc(-1 * var(--progress-rail-glow-x, 4px))
|
|
69
|
+
0
|
|
70
|
+
var(--progress-rail-glow-blur, 8px)
|
|
71
|
+
calc(-1 * var(--progress-rail-glow-spread, 2px))
|
|
72
|
+
color-mix(
|
|
73
|
+
in srgb,
|
|
74
|
+
hsl(0 0% 100%) var(--progress-rail-glow-strength, 55%),
|
|
75
|
+
transparent
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* glass/squircle.css
|
|
2
|
+
The AX.W56 rounded-vs-squircle policy + the @supports (corner-shape: superellipse(2)) squircle coupling onto the overlay-band glass. After the base ladder (overrides it).
|
|
3
|
+
Carved from the glass.css cascade root; @import-ed by glass.css in cascade
|
|
4
|
+
order, each in its own @layer components (isomorphic to the monolith).
|
|
5
|
+
See docs/precepts/design-idioms.md §cohesion-aware partials. */
|
|
6
|
+
/* ── AX.W56 — the rounded-vs-squircle POLICY (re-homes AW.W23's squircle) ─────
|
|
7
|
+
Cards, glass buttons, and pills stay ROUND. The earlier AW.W23 block applied
|
|
8
|
+
`corner-shape: squircle` to `.glass-card`/`.glass-btn`/`.btn-pill`, which
|
|
9
|
+
inverted the design intent — the superellipse is imperceptible at a 16px card
|
|
10
|
+
radius or a stadium pill, so the squircle on those surfaces was visual cost
|
|
11
|
+
without read. The squircle is RE-HOMED onto the one surface where it reads: the
|
|
12
|
+
big-dock card shell (`dock.css` → `var(--corner-shape-bigdock)` under
|
|
13
|
+
`@supports (corner-shape: superellipse(2))`). This is a clean break — no alias,
|
|
14
|
+
no `--corner-shape-card` decl here (it resolves `round`, the default, so a
|
|
15
|
+
`corner-shape` rule would be a no-op). The `--corner-shape-*` token axis lives
|
|
16
|
+
in `theme.css`; a consumer who WANTS a squircle card opts in by re-pointing
|
|
17
|
+
`--corner-shape-card` at `superellipse(var(--corner-k-squircle))`. Do NOT
|
|
18
|
+
re-add a squircle rule to the card/button/pill surfaces — they are round by
|
|
19
|
+
policy. */
|
|
20
|
+
|
|
21
|
+
/* ── AX.W56(R1) + W56b — squircle coupling onto the large-radius glass FAMILY ───
|
|
22
|
+
W54 makes GLASS the default for the overlay-band surfaces; W56(R1)+W56b couple
|
|
23
|
+
the SQUIRCLE onto the whole LARGE-RADIUS glass family — Dialog + Sheet content
|
|
24
|
+
(`.glass-floating.{rounded-dialog,sheet-animate}`), the Configurator/floating
|
|
25
|
+
PANEL (`.configurator`, `.floating-panel`), and the glass HERO overlay
|
|
26
|
+
(`.glass-hero`, the thin opt-in utility the page-redesign hero reads). Every one
|
|
27
|
+
sits AT or ABOVE the ~--radius-xl threshold where the superellipse READS — the
|
|
28
|
+
same iOS-26 idiom the big-dock card shell carries (the backdrop-filter blur halo
|
|
29
|
+
+ the cartoon under-shadow follow the shape). Each surface reads its OWN
|
|
30
|
+
tokenized `var(--corner-shape-<surface>)` (theme.css) so it is independently
|
|
31
|
+
overridable — never a blanket `.glass-floating` rule (data cards + pills stay
|
|
32
|
+
round by policy; the compound selectors scope to the named surface only). Mirrors
|
|
33
|
+
the big-dock idiom EXACTLY: an `@supports`-gated ENHANCEMENT (Chrome 139+, no
|
|
34
|
+
FF/Safari 2026) over the `border-radius` round CONTRACT — the squircle is the
|
|
35
|
+
better tier, NOT a degraded fallback. The `@supports` condition tests the LITERAL
|
|
36
|
+
`superellipse(2)` (a `var()` is not evaluable in an `@supports` query) — the same
|
|
37
|
+
Chrome-139 feature the token resolves to. */
|
|
38
|
+
@layer components {
|
|
39
|
+
@supports (corner-shape: superellipse(2)) {
|
|
40
|
+
.glass-floating.rounded-dialog {
|
|
41
|
+
corner-shape: var(--corner-shape-dialog);
|
|
42
|
+
}
|
|
43
|
+
.glass-floating.sheet-animate {
|
|
44
|
+
corner-shape: var(--corner-shape-sheet);
|
|
45
|
+
}
|
|
46
|
+
.configurator,
|
|
47
|
+
.floating-panel {
|
|
48
|
+
corner-shape: var(--corner-shape-panel);
|
|
49
|
+
}
|
|
50
|
+
.glass-hero {
|
|
51
|
+
corner-shape: var(--corner-shape-hero);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ── The glass HERO opt-in utility (W56b fold 7) ────────────────────────────────
|
|
57
|
+
A thin large-radius editorial glass OVERLAY — distinct from a data Card (which
|
|
58
|
+
stays round by policy). It is the surface the page-redesign hero (W60) reads;
|
|
59
|
+
minting it here (with its consumer) keeps the squircle off every `.glass-card`.
|
|
60
|
+
The corner-shape squircle rides the `@supports` block above; the un-gated
|
|
61
|
+
`border-radius` here is the cross-engine round CONTRACT. */
|
|
62
|
+
@layer components {
|
|
63
|
+
.glass-hero {
|
|
64
|
+
border-radius: var(--radius-2xl);
|
|
65
|
+
}
|
|
66
|
+
}
|