@mkbabb/glass-ui 3.13.0 → 4.0.0
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-XH4YBVEK.js +158 -0
- package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DdtWXxOK.js} +57 -52
- package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-B0Vs6atR.js} +1 -1
- package/dist/{DataTable-BCddn3T3.js → DataTable-C464Zbqd.js} +99 -97
- package/dist/DialogContent-DDE6pQBU.js +103 -0
- package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-8eZbdmPc.js} +1 -1
- package/dist/FadingScroll-DwNnvKMs.js +76 -0
- package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-Dpzwvc4t.js} +1 -1
- package/dist/IconChip-BDw1j5mu.js +54 -0
- package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-BpC0R_Ec.js} +1 -1
- package/dist/{Notification-DdwNxIrI.js → Notification-DKjKsQq8.js} +8 -8
- package/dist/{NumberFieldContent-CqaN-SvN.js → NumberFieldContent-1VtwDSgf.js} +1 -1
- package/dist/PopoverContent-BTorlp--.js +127 -0
- package/dist/{Progress-DwlUKGbr.js → Progress-hAT4gqGH.js} +97 -77
- package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-CUVFTWk2.js} +2 -2
- package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-C1jb3b3K.js} +22 -6
- package/dist/{Switch-CsIuYP_e.js → Switch-Dr--uLGH.js} +1 -1
- package/dist/{Toaster-D6q4HtXu.js → Toaster-Bm_HQSpc.js} +6 -6
- package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-Dzk9hWsF.js} +1 -1
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +8 -5
- package/dist/api.js +2 -2
- package/dist/aurora.js +132 -117
- package/dist/{button-ChXMfsud.js → button-BNDWhAZb.js} +2 -2
- package/dist/button.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.d.ts +1 -1
- package/dist/carousel.js +97 -141
- package/dist/collapsible.js +1 -1
- package/dist/color-swatch.d.ts +1 -0
- package/dist/color-swatch.js +47 -0
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/aurora/constants/presets.d.ts +28 -0
- package/dist/components/custom/aurora/constants/renderMode.d.ts +2 -0
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
- package/dist/components/custom/color-swatch/index.d.ts +1 -0
- package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
- package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
- package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
- package/dist/components/custom/constellation/constellationField.d.ts +2 -369
- package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
- package/dist/components/custom/constellation/index.d.ts +1 -1
- package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
- package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
- package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
- package/dist/components/custom/dock/constants.d.ts +35 -0
- package/dist/components/custom/dock/index.d.ts +2 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
- package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
- package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
- package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
- package/dist/components/custom/fading-scroll/index.d.ts +2 -0
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +7 -0
- 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/glass-panel/GlassPanel.vue.d.ts +8 -0
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +11 -1
- package/dist/components/custom/goo-blob/constants.d.ts +6 -1
- package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
- package/dist/components/custom/handmark/brush.d.ts +269 -0
- package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
- package/dist/components/custom/handmark/constants.d.ts +39 -0
- package/dist/components/custom/handmark/freehand.d.ts +69 -0
- package/dist/components/custom/handmark/geometry.d.ts +52 -0
- package/dist/components/custom/handmark/index.d.ts +27 -0
- package/dist/components/custom/handmark/ink.d.ts +11 -0
- package/dist/components/custom/handmark/texture.d.ts +39 -0
- package/dist/components/custom/handmark/types.d.ts +62 -0
- package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
- package/dist/components/custom/icon-chip/index.d.ts +2 -0
- package/dist/components/custom/icon-chip/types.d.ts +72 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +15 -2
- package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
- package/dist/components/custom/pager-dots/index.d.ts +2 -0
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +20 -25
- package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
- package/dist/components/custom/tabs/constants.d.ts +9 -3
- package/dist/components/custom/tabs/index.d.ts +1 -1
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +14 -0
- package/dist/components/ui/_shared/index.d.ts +2 -0
- package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
- package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
- package/dist/components/ui/card/Card.vue.d.ts +1 -1
- package/dist/components/ui/carousel/index.d.ts +0 -1
- package/dist/components/ui/command/Command.vue.d.ts +3 -0
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +5 -0
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
- package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
- package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
- package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
- package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
- package/dist/composables/dark/index.d.ts +1 -1
- package/dist/composables/dark/useGlobalDark.d.ts +23 -1
- package/dist/composables/motion/useViewTransition.d.ts +36 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +2 -2
- package/dist/constellation.js +92 -94
- package/dist/context-menu.js +2 -2
- package/dist/controls.js +10 -4
- package/dist/dark.d.ts +1 -1
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +510 -321
- package/dist/{dockContext-BegmJVmx.js → dockContext-Bu1Avy-a.js} +1 -1
- package/dist/dom.js +5 -5
- package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-BJ7E9js_.js} +2 -2
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +42 -38
- package/dist/fading-scroll.d.ts +1 -0
- package/dist/fading-scroll.js +2 -0
- package/dist/forms.js +3 -3
- package/dist/fourier-field.js +38 -37
- package/dist/fourier-math.js +2 -2
- package/dist/glass-panel.js +39 -36
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +129 -145
- package/dist/goo-blob.js +86 -81
- package/dist/handmark.d.ts +1 -0
- package/dist/handmark.js +707 -0
- package/dist/header-ribbon.js +1 -1
- package/dist/hover-card.js +1 -1
- package/dist/hover-popover.js +1 -1
- package/dist/icon-chip.d.ts +1 -0
- package/dist/icon-chip.js +2 -0
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/keyboard.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +6 -6
- package/dist/{math-U6-RrLmV.js → math-DeuJwLFx.js} +11 -3
- package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-DWRQXBxJ.js} +10 -4
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +25 -22
- package/dist/metric-stack.js +1 -1
- package/dist/motion-core.js +33 -32
- package/dist/motion-curves.js +1 -1
- package/dist/motion.js +4 -4
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/pager-dots.d.ts +1 -0
- package/dist/pager-dots.js +91 -0
- package/dist/paper-backdrop.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +2 -2
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +5 -5
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/{sheet-1fChZjtw.js → sheet-CquRYOAw.js} +59 -55
- package/dist/sheet.js +1 -1
- package/dist/{slider-B-JP2JlI.js → slider-DQ95MET2.js} +7 -7
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/styles/animations.css +11 -26
- package/dist/styles/components.css +1 -1
- package/dist/styles/configurator.css +35 -0
- package/dist/styles/dock/density.css +19 -0
- package/dist/styles/dock/overflow.css +15 -0
- package/dist/styles/dock/rail-extend.css +168 -71
- package/dist/styles/dock/section.css +59 -0
- package/dist/styles/dock/shell.css +34 -5
- package/dist/styles/dock-controls/icon-button.css +11 -1
- package/dist/styles/dock-controls/tab-button.css +24 -83
- package/dist/styles/dock-controls/triggers.css +7 -0
- package/dist/styles/dock.css +6 -3
- package/dist/styles/drawer.css +46 -0
- package/dist/styles/feedback-tone.css +104 -0
- package/dist/styles/glass/ladder.css +68 -22
- package/dist/styles/glass/surface-axis.css +113 -0
- package/dist/styles/glass/surfaces.css +88 -12
- package/dist/styles/glass.css +5 -2
- package/dist/styles/icon-chip.css +149 -0
- package/dist/styles/index.css +67 -5
- package/dist/styles/instrument-chassis.css +42 -0
- package/dist/styles/menu.css +127 -0
- package/dist/styles/segmented-tabs.css +160 -89
- package/dist/styles/select.css +50 -0
- package/dist/styles/theme/bridges.css +11 -1
- package/dist/styles/tokens/color-radius.css +40 -13
- package/dist/styles/tokens/dark-arm.css +124 -16
- package/dist/styles/tokens/glass.css +83 -23
- package/dist/styles/tokens/light-dark.css +48 -19
- package/dist/styles/tokens/offsets-sizing.css +62 -0
- package/dist/styles/tokens/property-regs.css +3 -10
- package/dist/styles/tokens/scale-paper.css +45 -2
- package/dist/styles/tokens/scheme-motion.css +32 -14
- package/dist/styles/transitions.css +7 -7
- package/dist/styles/typography/scale.css +153 -0
- package/dist/styles/typography/semantic.css +220 -0
- package/dist/styles/typography/utilities.css +159 -0
- package/dist/styles/typography.css +23 -507
- package/dist/styles/utilities/a11y-overrides.css +33 -4
- package/dist/styles/utilities/base.css +177 -1
- package/dist/styles/utilities/btn.css +18 -201
- package/dist/styles/view-transition.css +4 -1
- package/dist/switch.js +1 -1
- package/dist/tabs.js +154 -183
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-chip.js +3 -1
- package/dist/toggle-group.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
- package/dist/useConfiguratorState-kiIlun8I.js +303 -0
- package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
- package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-CdwJ7284.js} +1 -1
- package/dist/{useSpringMount-CI2jOstM.js → useSpringMount-CvopqiFr.js} +1 -1
- package/dist/useSurfaceAxis-CMnF2zHb.js +7 -0
- package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-28Tk2-t2.js} +1 -1
- package/dist/{vReveal-CqaCz_mC.js → useViewTransition-COsPjQVZ.js} +15 -12
- package/dist/vReveal-D9k0jADx.js +10 -0
- package/dist/watercolor-dot.js +12 -5
- package/package.json +71 -7
- package/src/styles/animations.css +11 -26
- package/src/styles/configurator.css +35 -0
- package/src/styles/dock/density.css +19 -0
- package/src/styles/dock/overflow.css +15 -0
- package/src/styles/dock/rail-extend.css +168 -71
- package/src/styles/dock/section.css +59 -0
- package/src/styles/dock/shell.css +34 -5
- package/src/styles/dock-controls/icon-button.css +11 -1
- package/src/styles/dock-controls/tab-button.css +24 -83
- package/src/styles/dock-controls/triggers.css +7 -0
- package/src/styles/dock.css +6 -3
- package/src/styles/drawer.css +42 -0
- package/src/styles/feedback-tone.css +104 -0
- package/src/styles/glass/ladder.css +68 -22
- package/src/styles/glass/surface-axis.css +113 -0
- package/src/styles/glass/surfaces.css +88 -12
- package/src/styles/glass.css +5 -2
- package/src/styles/icon-chip.css +149 -0
- package/src/styles/index.css +66 -4
- package/src/styles/instrument-chassis.css +42 -0
- package/src/styles/menu.css +127 -0
- package/src/styles/segmented-tabs.css +156 -87
- package/src/styles/select.css +50 -0
- package/src/styles/theme/bridges.css +11 -1
- package/src/styles/tokens/color-radius.css +40 -13
- package/src/styles/tokens/dark-arm.css +124 -16
- package/src/styles/tokens/glass.css +83 -23
- package/src/styles/tokens/light-dark.css +48 -19
- package/src/styles/tokens/offsets-sizing.css +62 -0
- package/src/styles/tokens/property-regs.css +3 -10
- package/src/styles/tokens/scale-paper.css +45 -2
- package/src/styles/tokens/scheme-motion.css +32 -14
- package/src/styles/transitions.css +7 -7
- package/src/styles/typography/scale.css +153 -0
- package/src/styles/typography/semantic.css +220 -0
- package/src/styles/typography/utilities.css +159 -0
- package/src/styles/typography.css +23 -507
- package/src/styles/utilities/a11y-overrides.css +33 -4
- package/src/styles/utilities/base.css +177 -1
- package/src/styles/utilities/btn.css +18 -201
- package/src/styles/view-transition.css +4 -1
- package/dist/CardAction-Cj2eycQ2.js +0 -157
- package/dist/DialogContent-Dl9WkAoS.js +0 -100
- package/dist/PopoverContent-BYwt2-4x.js +0 -121
- package/dist/TabsList-Dttss653.js +0 -105
- package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
- package/dist/components/custom/underline/index.d.ts +0 -2
- package/dist/components/custom/underline/types.d.ts +0 -56
- package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
- package/dist/underline.d.ts +0 -1
- package/dist/underline.js +0 -85
- package/dist/useConfiguratorState-DAoeHVue.js +0 -287
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-C_s6fG7r.js} +0 -0
- /package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-ON3x7cuk.js} +0 -0
- /package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-DkMaQzH5.js} +0 -0
- /package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-DSjasZIt.js} +0 -0
- /package/dist/{Input-DWQQIOC4.js → Input-DVG_J0ne.js} +0 -0
- /package/dist/{Label-r3WzWrsj.js → Label-Ck9SWEKM.js} +0 -0
- /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-CkPRRgl_.js} +0 -0
- /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-nBKe0vkB.js} +0 -0
- /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-Dcczq44n.js} +0 -0
- /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DK2y1Bun.js} +0 -0
- /package/dist/{Separator-0JE6LtNu.js → Separator-BArl4OaB.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-CBt_VvXa.js} +0 -0
- /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
- /package/dist/{compile-B7NGOBcP.js → compile-EXXzEr1q.js} +0 -0
- /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
- /package/dist/{createContext-BM46COQ-.js → createContext-B2RaZ-b8.js} +0 -0
- /package/dist/{prng-D27-B3tK.js → prng-Cg22zv8g.js} +0 -0
- /package/dist/{springPresets--YdWTHtm.js → springPresets-WXaLbu8u.js} +0 -0
- /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
- /package/dist/{useInterval-iHludrxk.js → useInterval-CNdua40W.js} +0 -0
- /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
- /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-C12hXwOZ.js} +0 -0
- /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-V6nq5gJb.js} +0 -0
- /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-NUG2zYAW.js} +0 -0
- /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
- /package/dist/{useSortable-muI29agz.js → useSortable-BVqlJRBR.js} +0 -0
- /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-NmBM5V_4.js} +0 -0
- /package/dist/{useTimer-Dzarvzuk.js → useTimer-B_PAasDL.js} +0 -0
- /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-CDfJuakL.js} +0 -0
- /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-CvBcCYDf.js} +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/* icon-chip.css — BA.W-ICON-CHIP: the <IconChip> section-color pop primitive.
|
|
2
|
+
*
|
|
3
|
+
* The library's SINGLE section-color icon-chip recipe — the brand's ONE color
|
|
4
|
+
* event per surface (the one-color-event rule, AZ.W-SUFFUSE / proof:suffuse):
|
|
5
|
+
* a `color-mix(… 25%, transparent)` backplate under a full-chroma glyph, walked
|
|
6
|
+
* over the 13-stop `--section-color-N` ramp (or a complete `tone` token). It
|
|
7
|
+
* OWNS the recipe the four inline `:style` pastes (icons.vue / empty-states.vue
|
|
8
|
+
* / auth-shell.vue / the MetricCell glyph-tint) collapsed onto, so the recipe
|
|
9
|
+
* lives ONCE and proof:suffuse asserts against one component, not N pastes.
|
|
10
|
+
*
|
|
11
|
+
* THE INTERPOLATION SPACE — `in srgb` (DELIBERATE, recorded). The backplate is
|
|
12
|
+
* a foreground-over-transparent overlay at a hand-tuned fixed 25% α stop — the
|
|
13
|
+
* SAME shape as the `--surface-tint-*` brand family, which CLAUDE.md fixes at
|
|
14
|
+
* `in srgb` (the brand-calibrated mix; switching the space shifts the resting
|
|
15
|
+
* α off its hand-set value). The chip is byte-faithful to the reference paste
|
|
16
|
+
* register (the binding W7 π target: stop-0 bg `color(srgb 0.915 0.484 0.671 /
|
|
17
|
+
* 0.25)`), so it preserves `in srgb` — the same brand-overlay path, NOT the
|
|
18
|
+
* glass-tint `in oklab` perceptual-mix path. (The spec text says `in oklab`;
|
|
19
|
+
* the resolution preserves the reference-faithful `in srgb` so the pop register
|
|
20
|
+
* does not shift — recorded in PROGRESS / the DELTA.)
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
:root {
|
|
24
|
+
/* The chip≤glyph proportion (d2, structural). The diameter floors at
|
|
25
|
+
`glyph × ratio` so the plate can NEVER paint under the glyph — a
|
|
26
|
+
consumer's tiny `size` is clamped. The default reproduces the reference
|
|
27
|
+
48/22 ≈ 2.18 register. Token-first: a consumer retunes without a
|
|
28
|
+
component edit. */
|
|
29
|
+
--icon-chip-glyph-ratio: 2.18;
|
|
30
|
+
/* The duotone fill α — a low-alpha fill of the same hue UNDER the
|
|
31
|
+
full-chroma stroke (the iOS/Material filled-tonal move). Mono-hue. */
|
|
32
|
+
--icon-chip-duotone-fill: 18%;
|
|
33
|
+
/* The hover-bloom backplate lift (25% → ~35%) + the glow-ring spread. */
|
|
34
|
+
--icon-chip-bloom-mix: 35%;
|
|
35
|
+
--icon-chip-bloom-glow: 28%;
|
|
36
|
+
/* The reveal stagger step (consumed by the vReveal `--d` index). */
|
|
37
|
+
--icon-chip-reveal-step: 60ms;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.icon-chip {
|
|
41
|
+
/* The diameter FLOORS at glyph × ratio — the d2 proportion enforced in the
|
|
42
|
+
component, not a per-consumer hope. */
|
|
43
|
+
--_icon-chip-floor: calc(
|
|
44
|
+
var(--icon-chip-glyph-size, 22px) * var(--icon-chip-glyph-ratio)
|
|
45
|
+
);
|
|
46
|
+
inline-size: max(var(--icon-chip-size, 48px), var(--_icon-chip-floor));
|
|
47
|
+
block-size: max(var(--icon-chip-size, 48px), var(--_icon-chip-floor));
|
|
48
|
+
display: inline-flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
justify-content: center;
|
|
51
|
+
border-radius: var(--radius-pill, 9999px);
|
|
52
|
+
/* The backplate — the reference recipe (`in srgb`, 25% α stop). */
|
|
53
|
+
background-color: color-mix(
|
|
54
|
+
in srgb,
|
|
55
|
+
var(--icon-chip-plate-color, var(--muted)) 25%,
|
|
56
|
+
transparent
|
|
57
|
+
);
|
|
58
|
+
color: var(--icon-chip-event-color, var(--muted-foreground));
|
|
59
|
+
/* The §6 easing doctrine — surface props (bg/box-shadow) on the bezier
|
|
60
|
+
standard ease; the bloom is the smooth-glass register, NOT a sparkle. */
|
|
61
|
+
transition:
|
|
62
|
+
background-color var(--duration-fast, 150ms) var(--ease-standard),
|
|
63
|
+
box-shadow var(--duration-fast, 150ms) var(--ease-standard);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.icon-chip__glyph {
|
|
67
|
+
display: block;
|
|
68
|
+
flex-shrink: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* ── The bare register (the MetricCell leading-glyph tint — no backplate) ──── */
|
|
72
|
+
.icon-chip--bare {
|
|
73
|
+
inline-size: auto;
|
|
74
|
+
block-size: auto;
|
|
75
|
+
background-color: transparent;
|
|
76
|
+
border-radius: 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* ── The duotone axis — a low-alpha fill of the same hue UNDER the stroke ──── */
|
|
80
|
+
/* Lucide glyphs bake `fill: none` on the SVG root; CSS wins over the
|
|
81
|
+
presentation attribute, so the `[data-duotone] svg` rule reaches the inner
|
|
82
|
+
paths (they inherit `fill` from the root). Mono-hue, proportion-safe. */
|
|
83
|
+
.icon-chip--duotone[data-duotone] svg,
|
|
84
|
+
.icon-chip[data-duotone] .icon-chip__glyph {
|
|
85
|
+
fill: color-mix(
|
|
86
|
+
in srgb,
|
|
87
|
+
var(--icon-chip-event-color, var(--muted-foreground))
|
|
88
|
+
var(--icon-chip-duotone-fill),
|
|
89
|
+
transparent
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* ── The hover-bloom axis — the SMOOTH GLASS register (NO disco) ───────────── */
|
|
94
|
+
/* The backplate mix lifts, a soft same-hue glow ring appears, the glyph stroke
|
|
95
|
+
firms. DISCO FENCE: composes NO sparkle-sweep / btn-audacious / disco-grain —
|
|
96
|
+
the W-GLASS-CAL-retired-disco's calm replacement register only. */
|
|
97
|
+
@media (hover: hover) {
|
|
98
|
+
.icon-chip--bloom:hover {
|
|
99
|
+
background-color: color-mix(
|
|
100
|
+
in srgb,
|
|
101
|
+
var(--icon-chip-plate-color, var(--muted)) var(--icon-chip-bloom-mix),
|
|
102
|
+
transparent
|
|
103
|
+
);
|
|
104
|
+
box-shadow: 0 0 0 0.25rem
|
|
105
|
+
color-mix(
|
|
106
|
+
in srgb,
|
|
107
|
+
var(--icon-chip-event-color, var(--muted-foreground))
|
|
108
|
+
var(--icon-chip-bloom-glow),
|
|
109
|
+
transparent
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
/* The glyph stroke firms on the chip's own hover. */
|
|
113
|
+
.icon-chip--bloom:hover .icon-chip__glyph {
|
|
114
|
+
stroke-width: 2;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* ── The entrance-reveal axis — composes the shipped vReveal directive ─────── */
|
|
119
|
+
/* The directive writes `[data-reveal]` + `--d` (the stagger index); this rule
|
|
120
|
+
reacts ONLY on an opted-in chip (`.icon-chip--reveal`) so a non-reveal chip's
|
|
121
|
+
inert `[data-reveal]` hook never animates. PRM-gated. */
|
|
122
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
123
|
+
.icon-chip--reveal[data-reveal] {
|
|
124
|
+
animation: icon-chip-reveal var(--duration-medium, 320ms)
|
|
125
|
+
var(--ease-standard) both;
|
|
126
|
+
animation-delay: calc(var(--d, 0) * var(--icon-chip-reveal-step));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@keyframes icon-chip-reveal {
|
|
131
|
+
from {
|
|
132
|
+
opacity: 0;
|
|
133
|
+
transform: scale(0.85) translateY(0.25rem);
|
|
134
|
+
}
|
|
135
|
+
to {
|
|
136
|
+
opacity: 1;
|
|
137
|
+
transform: none;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* ── The deform axes collapse under reduced motion (the PRM guard) ─────────── */
|
|
142
|
+
@media (prefers-reduced-motion: reduce) {
|
|
143
|
+
.icon-chip--bloom:hover .icon-chip__glyph {
|
|
144
|
+
stroke-width: inherit;
|
|
145
|
+
}
|
|
146
|
+
.icon-chip--reveal[data-reveal] {
|
|
147
|
+
animation: none;
|
|
148
|
+
}
|
|
149
|
+
}
|
package/src/styles/index.css
CHANGED
|
@@ -94,6 +94,15 @@
|
|
|
94
94
|
* cascades into these control rules.
|
|
95
95
|
* 7. cards.css — .cartoon-surface, .paper-texture.
|
|
96
96
|
* Component utility layer.
|
|
97
|
+
* 7a. feedback-tone.css — the ONE shared tinted-glass tone register
|
|
98
|
+
* (BA.W-FEEDBACK-TONE): `.feedback-tone` +
|
|
99
|
+
* `.feedback-tone-{success,warning,info,destructive}`
|
|
100
|
+
* tint a glass rung a bounded % toward a house tone
|
|
101
|
+
* token on the EXISTING color-mix(in oklab, …) seam.
|
|
102
|
+
* Toast / Notification / Alert consume it (the three
|
|
103
|
+
* tone maps collapse). Loads after cards.css (it reads
|
|
104
|
+
* the same `--glass-bg-*` rung tokens cards.css/the
|
|
105
|
+
* ladder mint) and before floating-panel.css.
|
|
97
106
|
* 8. floating-panel.css — .floating-panel + .floating-panel-item.
|
|
98
107
|
* Component utility layer.
|
|
99
108
|
* 9. transitions.css — Vue <Transition> classes (fade, fade-slide,
|
|
@@ -114,14 +123,26 @@
|
|
|
114
123
|
* K W6 + Q.W3 Lane E), rainbow-vivid +
|
|
115
124
|
* rainbow-pastel. Consumes earlier animations +
|
|
116
125
|
* tokens.
|
|
126
|
+
* 11a. menu.css — BA.W-MENU-GLASS the glass MENU-ROW + MENU-SECTION
|
|
127
|
+
* register. AFTER utilities.css so `.glass-menu-row`'s
|
|
128
|
+
* `@layer components` hover/highlight rules source-
|
|
129
|
+
* order-win over `.interactive-item:hover` (same layer
|
|
130
|
+
* + specificity) — the cascade-trap-safe placement.
|
|
117
131
|
* 12. instrument-chassis.css — P-tranche component CSS (chassis bezel +
|
|
118
132
|
* groove dividers). Loaded after utilities so
|
|
119
133
|
* component-local recipes can override.
|
|
120
134
|
* 13. hover-popover.css — V.W3 popover-animation grammar.
|
|
121
135
|
* 14. drawer.css — AN.W3 detented bottom-sheet grammar (glass
|
|
122
136
|
* sheet surface + peek handle + snap-stop rules).
|
|
137
|
+
* 15. segmented-tabs.css — AX.W53 SegmentedTabs overflow/indicator grammar.
|
|
138
|
+
* 16. select.css — BA.W-EMISSION the PRECOMPILED Select content
|
|
139
|
+
* collision-bound (the `[data-slot="select-content"]`
|
|
140
|
+
* max-height rule) — moved off the dead arbitrary-
|
|
141
|
+
* bracket CVA class so the bound SHIPS in dist/glass-ui.css
|
|
142
|
+
* regardless of consumer JIT reach. A structural utility
|
|
143
|
+
* never depends on a content-scan; locked by proof:emission.
|
|
123
144
|
*
|
|
124
|
-
* Per-package component CSS lives at (12)-(
|
|
145
|
+
* Per-package component CSS lives at (12)-(16) (loaded after utilities so
|
|
125
146
|
* component-local recipes can override). New per-package CSS files append
|
|
126
147
|
* to that tail.
|
|
127
148
|
*/
|
|
@@ -135,18 +156,59 @@
|
|
|
135
156
|
@import "./dock.css";
|
|
136
157
|
@import "./dock-controls.css";
|
|
137
158
|
@import "./cards.css";
|
|
159
|
+
@import "./feedback-tone.css";
|
|
138
160
|
@import "./floating-panel.css";
|
|
139
161
|
@import "./transitions.css";
|
|
140
162
|
@import "./animations.css";
|
|
141
163
|
@import "./scroll-driven.css";
|
|
142
164
|
@import "./view-transition.css";
|
|
143
165
|
@import "./utilities.css";
|
|
166
|
+
/* BA.W-MENU-GLASS — the glass menu-row + menu-section register. @import-ed AFTER
|
|
167
|
+
utilities.css (NOT the floating/transitions band the spec hinted) so the
|
|
168
|
+
`.glass-menu-row` `@layer components` hover/highlight rules source-order-WIN
|
|
169
|
+
over `.interactive-item:hover` (utilities/base.css, same layer + specificity) —
|
|
170
|
+
the cascade-trap-safe placement, mirroring glass/surface-axis.css's "import
|
|
171
|
+
AFTER ladder.css" discipline. */
|
|
172
|
+
@import "./menu.css";
|
|
144
173
|
@import "./configurator.css";
|
|
145
174
|
@import "./instrument-chassis.css";
|
|
146
175
|
@import "./hover-popover.css";
|
|
147
176
|
@import "./drawer.css";
|
|
148
177
|
@import "./segmented-tabs.css";
|
|
178
|
+
@import "./select.css";
|
|
179
|
+
/* BA.W-ICON-CHIP — the <IconChip> section-color pop recipe + the three axes
|
|
180
|
+
(duotone/bloom/reveal). A component partial; the token arms (--section-color-N
|
|
181
|
+
/ --muted) auto-flip under .dark so the chip is mode-robust by construction. */
|
|
182
|
+
@import "./icon-chip.css";
|
|
149
183
|
|
|
150
|
-
/* Ensure
|
|
151
|
-
(
|
|
152
|
-
|
|
184
|
+
/* Ensure Tailwind scans glass-ui's compiled component templates for the utility
|
|
185
|
+
classes they emit (CVA variant classes like text-destructive-foreground,
|
|
186
|
+
layout utilities like h-full/shrink-0).
|
|
187
|
+
|
|
188
|
+
BA.W-EMISSION — re-pointed from the DEAD components-mirror glob (the prior
|
|
189
|
+
`../components` target). That glob resolved correctly in glass-ui's OWN build
|
|
190
|
+
(`src/styles/index.css` → `src/components` carries the real `.vue` source), but the
|
|
191
|
+
SHIPPED dist copy of this file (`dist/styles/index.css`) resolved `../components` to
|
|
192
|
+
`dist/components/` — a
|
|
193
|
+
directory that carries ONLY `.d.ts` mirror files (zero `.js`, zero `.vue`). The
|
|
194
|
+
compiled render-functions live FLAT at `dist/*.js`. So in every consumer that
|
|
195
|
+
re-imported this `@source` line, Tailwind scanned an empty dir and glass-ui's own
|
|
196
|
+
arbitrary utilities silently died (the P9 / valuejs-fold register-B class).
|
|
197
|
+
|
|
198
|
+
`../*.js` reaches the compiled render-functions PRECISELY in the SHIPPED context:
|
|
199
|
+
in dist it is `dist/*.js` (the 150+ flat compiled chunks that carry glass-ui's
|
|
200
|
+
utility class strings — the surface the dead `../components` mirror NEVER held).
|
|
201
|
+
In glass-ui's OWN source build it is `src/*.js` (empty — glass-ui's own components
|
|
202
|
+
compile their CSS through vite, not this `@source`), so the directive is a no-op
|
|
203
|
+
in the own-build and never scans the `src/` shader/`.ts` tree (a bare `../` glob
|
|
204
|
+
tripped Tailwind's dev candidate-extractor on the shader template strings —
|
|
205
|
+
`Missing opening (`). This directive is a BACKSTOP for a consumer that imports
|
|
206
|
+
this exact cascade file — the PRIMARY self-emission path is
|
|
207
|
+
`vite.style-assets.ts emitComponentUtilities` (P9), which ships glass-ui's
|
|
208
|
+
component-utility RULES build-independently into `dist/styles/components.css`.
|
|
209
|
+
Fully-arbitrary BRACKET utilities (`[max-height:…]`, `[--slider-track-height:…]`)
|
|
210
|
+
are rejected by that path's `classish` token filter AND are not reliably reachable
|
|
211
|
+
by a JIT scan, so every STRUCTURAL bracket utility (geometry/bounds/sizing) is
|
|
212
|
+
pre-compiled into shipped CSS instead — never load-bearing on any consumer's
|
|
213
|
+
content-scan reach. Locked by proof:emission. */
|
|
214
|
+
@source "../*.js";
|
|
@@ -146,6 +146,48 @@
|
|
|
146
146
|
display: none;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
/* ─────────────────────────────────────────────────────────────
|
|
150
|
+
BA.W-ATLAS-RECONCILE C-3 — structure variant (SILVER MILLED-METAL register)
|
|
151
|
+
|
|
152
|
+
The cool polished-steel housing read: the engraved-bezel `::before` stroke
|
|
153
|
+
AND the structural twin-line grooves re-point from the warm-cream
|
|
154
|
+
`--surface-tint-*` default onto the `--silver` quad (gold's cool mirror).
|
|
155
|
+
The chassis reads as an INDUSTRIAL precision-instrument panel — the
|
|
156
|
+
cool-metal twin of the warm-gold "complete"-phase affirmation.
|
|
157
|
+
|
|
158
|
+
The phase cascade (`[data-phase="…"]`) stays ORTHOGONAL — a `structure`
|
|
159
|
+
chassis still retints its phase fills on `data-phase`; only the
|
|
160
|
+
structure-metal recipe (bezel + grooves) forks here. Consumer #2 of the
|
|
161
|
+
silver quad (the atlas's structure surface is consumer #1).
|
|
162
|
+
|
|
163
|
+
The silver is the W-NO-GRAY NAMED cool-neutral exception (a brand METAL
|
|
164
|
+
identity, not a neutral — its very-low chroma reads as milled steel, the
|
|
165
|
+
cool hue distinguishes it from the warm glass plate).
|
|
166
|
+
───────────────────────────────────────────────────────────── */
|
|
167
|
+
.instrument-chassis[data-variant="structure"] {
|
|
168
|
+
/* The milled-panel edge: the chassis border lifts off the resting glass
|
|
169
|
+
edge onto a hairline silver structure stroke. */
|
|
170
|
+
border-color: color-mix(in oklab, var(--color-silver-dark) 55%, transparent);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* The engraved bezel re-tints to the cool silver catch (the polished sleeve
|
|
174
|
+
reads as steel, not warm-cream). */
|
|
175
|
+
.instrument-chassis[data-variant="structure"]::before {
|
|
176
|
+
border-color: color-mix(in oklab, var(--color-silver-light) 60%, transparent);
|
|
177
|
+
}
|
|
178
|
+
.dark .instrument-chassis[data-variant="structure"]::before {
|
|
179
|
+
border-color: color-mix(in oklab, var(--color-silver) 40%, transparent);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* The structural grooves re-point to the silver twin-line: the catch reads
|
|
183
|
+
the light silver, the under-shadow the dark silver — a milled seam, not the
|
|
184
|
+
default warm twin-line. ONE re-point at the variant root; every
|
|
185
|
+
`<ChassisDivider>` inside a structure chassis inherits it. */
|
|
186
|
+
.instrument-chassis[data-variant="structure"] {
|
|
187
|
+
--twin-line-catch: color-mix(in oklab, var(--color-silver-light) 50%, transparent);
|
|
188
|
+
--twin-line-shadow: color-mix(in oklab, var(--color-silver-dark) 40%, transparent);
|
|
189
|
+
}
|
|
190
|
+
|
|
149
191
|
/* Phase-color cascade — single property, full chassis-wide retint.
|
|
150
192
|
`--phase-color-label` mirrors the cascade through the WCAG companion
|
|
151
193
|
tokens (AC.W6c F1.V-04). The label register falls back to the canvas
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* menu.css — the glass MENU-ROW + MENU-SECTION register (BA.W-MENU-GLASS).
|
|
2
|
+
|
|
3
|
+
The shared `menuItemVariants` CVA's `surface=glass` arm (the DEFAULT, glass-
|
|
4
|
+
first canon AX.W54) composes `.glass-menu-row`; all 13 menu/picker-family SFCs
|
|
5
|
+
inherit the glassy hover-lift register in ONE edit (no per-SFC menu-row CSS).
|
|
6
|
+
|
|
7
|
+
── The cascade-trap pre-empt (the AZ dock-rail `@layer`-loses-to-utility trap) ──
|
|
8
|
+
`.interactive-item:hover` (utilities/base.css, `@layer components`) paints a flat
|
|
9
|
+
`color-mix(--accent 50%)` hover background. An UNLAYERED Tailwind `hover:bg-accent`
|
|
10
|
+
utility would win over BOTH (the trap). The CVA's glass arm therefore DROPS the
|
|
11
|
+
flat-accent utilities entirely — so the only background-painters on a glass row are
|
|
12
|
+
the `@layer components` `.interactive-item:hover` rule and these `.glass-menu-row`
|
|
13
|
+
rules. This file is `@import`-ed AFTER `utilities.css` in `index.css`, so at equal
|
|
14
|
+
specificity (0-1-1 for the `:hover`/`[data-highlighted]` selectors) and equal layer
|
|
15
|
+
(`components`) the recipe wins by SOURCE ORDER over `.interactive-item:hover` —
|
|
16
|
+
exactly the discipline `glass/surface-axis.css` uses ("@import-ed AFTER ladder.css
|
|
17
|
+
so the attr rules win by source order"). NEVER re-add an unlayered flat-accent
|
|
18
|
+
utility to the glass arm — it would re-introduce the trap.
|
|
19
|
+
|
|
20
|
+
── The element-level tint discipline (substitution-vs-inheritance) ──
|
|
21
|
+
The row reads the ELEMENT-LEVEL glass-quiet oklab tint
|
|
22
|
+
`color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength))`
|
|
23
|
+
— the SAME seam `glass/ladder.css:58` / `glass/surfaces.css:19` compose — NOT the
|
|
24
|
+
pre-baked `--glass-bg-quiet` raw token. So the row darkens-over-light (W55 bright
|
|
25
|
+
bucket / `--glass-tint-strength` lift) AND lifts-over-dark per W-DARK-MATERIAL's
|
|
26
|
+
tint arm, in lockstep with every other glass surface. */
|
|
27
|
+
@layer components {
|
|
28
|
+
/* ── .glass-menu-row — the glassy hover-lift menu/picker item ──────────────
|
|
29
|
+
Every visual axis reads a `--menu-row-*` knob so a consumer retunes via a
|
|
30
|
+
`:root` override. The REST state is transparent (the row sits on the
|
|
31
|
+
container's own `glass-floating` plate — DropdownMenuContent /
|
|
32
|
+
ContextMenuContent are already `glass-floating rounded-panel`); the glass
|
|
33
|
+
PLATE materializes on hover/focus/highlight. */
|
|
34
|
+
.glass-menu-row {
|
|
35
|
+
/* The glass-quiet plate the row paints AT THE ELEMENT on hover/highlight
|
|
36
|
+
(the element-level oklab tint — see header). Overridable. */
|
|
37
|
+
--menu-row-bg: color-mix(
|
|
38
|
+
in oklab,
|
|
39
|
+
var(--glass-bg-quiet),
|
|
40
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
41
|
+
);
|
|
42
|
+
/* The PRM-gated hover-lift travel (zeroed under reduce, below). */
|
|
43
|
+
--menu-row-lift: -1px;
|
|
44
|
+
/* The 44px WCAG-2.5.5 touch floor (the row never reflows below it). The
|
|
45
|
+
base is the CVA's own py rhythm; the clamp guarantees the floor. Reads
|
|
46
|
+
`--touch-target` (the 44px token declared UNCONDITIONALLY at :root —
|
|
47
|
+
offsets-sizing.css), NOT `--control-floor` (which is declared ONLY inside
|
|
48
|
+
the `@media (pointer: coarse)` block, so on a FINE pointer `var(--control-
|
|
49
|
+
floor)` resolves to the guaranteed-invalid initial value → 0px in the
|
|
50
|
+
max(), and the floor silently vanished — the live π caught the 36px row).
|
|
51
|
+
The `2.75rem` literal fallback covers a consumer who unsets the token. */
|
|
52
|
+
min-block-size: max(2rem, var(--touch-target, 2.75rem));
|
|
53
|
+
|
|
54
|
+
/* The lift transform rides the §6 spring register (`--spring-smooth`); the
|
|
55
|
+
surface props (background) ride the bezier `--ease-standard` via the
|
|
56
|
+
`.interactive-item` base transition (already declared there). The
|
|
57
|
+
explicit transform leg here pairs the spring with the lift. */
|
|
58
|
+
transition: translate var(--duration-fast) var(--spring-smooth);
|
|
59
|
+
translate: 0 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Hover / keyboard-focus / reka internal-highlight / sub-trigger-open all
|
|
63
|
+
reach the SAME glass register (Combobox/Command/Select parity — the CVA
|
|
64
|
+
routes all three input modes through `data-[highlighted]`). */
|
|
65
|
+
.glass-menu-row:hover:not([data-disabled]),
|
|
66
|
+
.glass-menu-row:focus:not([data-disabled]),
|
|
67
|
+
.glass-menu-row[data-highlighted]:not([data-disabled]),
|
|
68
|
+
.glass-menu-row[data-state="open"]:not([data-disabled]) {
|
|
69
|
+
background: var(--menu-row-bg);
|
|
70
|
+
color: var(--accent-foreground);
|
|
71
|
+
translate: 0 var(--menu-row-lift);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* ── .glass-menu-section — the mono section-label + hairline row-group ──────
|
|
75
|
+
The "section caption + hairline over a row group" recipe (the slides gear
|
|
76
|
+
hand-built ~120 lines of). Folds onto `typography.css` `.section-label` (the
|
|
77
|
+
mono / √φ-caption / small-caps register) for the caption and `--border-
|
|
78
|
+
hairline` for the divider. Tokenized on `--menu-section-*` so a consumer
|
|
79
|
+
retunes via a `:root` override. ≥2 consumers: the library menu defaults
|
|
80
|
+
(the section caption a DropdownMenuLabel composes) + the in-repo demo menu
|
|
81
|
+
story (Unit 2 adoption); the slides DeckSettings is the named foreign
|
|
82
|
+
downstream consumer. */
|
|
83
|
+
.glass-menu-section {
|
|
84
|
+
/* The caption register (mono / small-caps / quiet ink) — the same
|
|
85
|
+
vocabulary `.section-label` carries, exposed as overridable knobs. */
|
|
86
|
+
--menu-section-font: var(--font-mono);
|
|
87
|
+
--menu-section-size: var(--type-caption);
|
|
88
|
+
--menu-section-color: var(--muted-foreground);
|
|
89
|
+
--menu-section-tracking: var(--type-tracking-caps);
|
|
90
|
+
/* The hairline divider over the group (the catch-light + under-shadow
|
|
91
|
+
pair). Default-off feather; the rule below paints it. */
|
|
92
|
+
--menu-section-hairline: var(--border-hairline);
|
|
93
|
+
/* The block rhythm above the group (a section is a deliberate break). */
|
|
94
|
+
--menu-section-gap: 0.375rem;
|
|
95
|
+
|
|
96
|
+
display: block;
|
|
97
|
+
margin-block-start: var(--menu-section-gap);
|
|
98
|
+
padding-block-start: var(--menu-section-gap);
|
|
99
|
+
/* The hairline reads as a top divider over the group via box-shadow (the
|
|
100
|
+
house hairline pattern — a whisper, not a hard 1px rule). */
|
|
101
|
+
box-shadow: var(--menu-section-hairline);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* The section CAPTION — a mono small-caps label. Composes onto the label
|
|
105
|
+
element the section recipe wraps (or a nested `.glass-menu-section-label`);
|
|
106
|
+
the demo + library menu labels read this caption register. */
|
|
107
|
+
.glass-menu-section-label,
|
|
108
|
+
.glass-menu-section > [data-menu-section-label] {
|
|
109
|
+
font-family: var(--menu-section-font);
|
|
110
|
+
font-size: var(--menu-section-size);
|
|
111
|
+
color: var(--menu-section-color);
|
|
112
|
+
text-transform: uppercase;
|
|
113
|
+
letter-spacing: var(--menu-section-tracking);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* ── PRM gate — no deform/lift under reduce ───────────────────────────────────
|
|
118
|
+
The hover-lift `translate` is the only motion the row introduces; under
|
|
119
|
+
`prefers-reduced-motion: reduce` it collapses to the identity (0) and the
|
|
120
|
+
transition is removed (the surface bg cross-fade is not motion). The glass
|
|
121
|
+
plate still materializes on hover — only the geometric lift is suppressed. */
|
|
122
|
+
@media (prefers-reduced-motion: reduce) {
|
|
123
|
+
.glass-menu-row {
|
|
124
|
+
--menu-row-lift: 0px;
|
|
125
|
+
transition: none;
|
|
126
|
+
}
|
|
127
|
+
}
|