@mkbabb/glass-ui 3.12.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-CefCj5mt.js → CommandShortcut-DdtWXxOK.js} +58 -53
- package/dist/{ContextMenuSubContent-Bhg4f5jX.js → ContextMenuSubContent-B0Vs6atR.js} +4 -4
- package/dist/{DataTable-CUHMukiQ.js → DataTable-C464Zbqd.js} +99 -97
- package/dist/DialogContent-DDE6pQBU.js +103 -0
- package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-8eZbdmPc.js} +2 -2
- package/dist/FadingScroll-DwNnvKMs.js +76 -0
- package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-Dpzwvc4t.js} +1 -1
- package/dist/IconChip-BDw1j5mu.js +54 -0
- package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-DSjasZIt.js} +1 -1
- package/dist/MetricBadge-BpC0R_Ec.js +79 -0
- package/dist/{Notification-DLMhblXR.js → Notification-DKjKsQq8.js} +10 -10
- package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-1VtwDSgf.js} +3 -3
- package/dist/PopoverContent-BTorlp--.js +127 -0
- package/dist/{Progress-iEuD9pxG.js → Progress-hAT4gqGH.js} +97 -77
- package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-CUVFTWk2.js} +2 -2
- package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-C1jb3b3K.js} +24 -8
- package/dist/{Switch-Ch-k3Rv-.js → Switch-Dr--uLGH.js} +2 -2
- package/dist/{Toaster-1rYWrmAm.js → Toaster-Bm_HQSpc.js} +55 -52
- package/dist/{ToggleGroupItem-COu_4IW4.js → ToggleGroupItem-Dzk9hWsF.js} +18 -22
- package/dist/animated-digit.js +3 -3
- package/dist/api/index.d.ts +10 -4
- package/dist/api.js +1 -1
- package/dist/aurora.js +113 -98
- package/dist/{badge-CaoFJzRb.js → badge-UILT_3pZ.js} +1 -1
- package/dist/badge.js +1 -1
- package/dist/{button-DN39cGqL.js → button-BNDWhAZb.js} +12 -12
- package/dist/button.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.d.ts +1 -1
- package/dist/carousel.js +101 -145
- package/dist/{check-BBKKKSTf.js → check-njhk-vfu.js} +1 -1
- package/dist/{chevron-down-BSkTP2aL.js → chevron-down-DKkxb4VV.js} +1 -1
- package/dist/{chevron-right-sDM0Yvrf.js → chevron-right-CPXbqQQz.js} +1 -1
- package/dist/{chevron-up-CCOD_FTz.js → chevron-up-n_24SqI-.js} +1 -1
- package/dist/coalesceMetric-5qIeZnTx.js +13 -0
- package/dist/collapsible.js +1 -1
- package/dist/{color-C5ls_QF7.js → color-DweYl7pE.js} +9 -7
- 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/animated-digit/AnimatedDigit.vue.d.ts +8 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +16 -45
- package/dist/components/custom/aurora/constants/renderMode.d.ts +2 -0
- 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/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/configurator/ConfiguratorRow.vue.d.ts +16 -0
- package/dist/components/custom/constellation/Constellation.vue.d.ts +23 -143
- package/dist/components/custom/constellation/composables/createConstellationField.d.ts +41 -0
- package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
- package/dist/components/custom/constellation/constants.d.ts +61 -0
- package/dist/components/custom/constellation/constellationDraw.d.ts +30 -0
- package/dist/components/custom/constellation/constellationField.d.ts +3 -403
- package/dist/components/custom/constellation/constellationInteraction.d.ts +132 -0
- package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
- package/dist/components/custom/constellation/index.d.ts +5 -2
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
- package/dist/components/custom/dock/DockRail.vue.d.ts +89 -0
- 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 -6
- package/dist/components/custom/dock/GlassDock.vue.d.ts +5 -118
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
- package/dist/components/custom/dock/composables/index.d.ts +1 -0
- package/dist/components/custom/dock/composables/useDockClickIntegrity.d.ts +23 -0
- package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
- package/dist/components/custom/dock/composables/useDockOrientationMorph.d.ts +44 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +165 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
- package/dist/components/custom/dock/constants.d.ts +83 -0
- package/dist/components/custom/dock/index.d.ts +5 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +15 -37
- 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 +34 -0
- package/dist/components/custom/fourier-field/presets.d.ts +54 -0
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +8 -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 +21 -8
- package/dist/components/custom/goo-blob/constants.d.ts +57 -0
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
- package/dist/components/custom/handmark/brush.d.ts +33 -6
- package/dist/components/custom/handmark/{useHandMark.d.ts → composables/useHandMark.d.ts} +6 -4
- package/dist/components/custom/handmark/constants.d.ts +39 -0
- package/dist/components/custom/handmark/geometry.d.ts +14 -12
- package/dist/components/custom/handmark/index.d.ts +8 -2
- package/dist/components/custom/handmark/types.d.ts +9 -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 +17 -4
- package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +37 -0
- package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +6 -0
- package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +6 -0
- package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +6 -0
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +11 -18
- package/dist/components/custom/metric-badge/index.d.ts +1 -0
- package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +15 -4
- package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +6 -4
- 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 +18 -0
- 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 +16 -4
- 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/Drawer.vue.d.ts +1 -0
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +5 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +6 -3
- 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/components/ui/slider/index.d.ts +22 -19
- package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +4 -1
- package/dist/components/ui/toast/use-toast.d.ts +2 -2
- package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
- package/dist/components/ui/toggle/index.d.ts +1 -1
- package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +1 -7
- package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +1 -3
- package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +0 -13
- package/dist/composables/color/index.d.ts +12 -0
- package/dist/composables/dark/useGlobalDark.d.ts +14 -12
- package/dist/composables/glass/index.d.ts +0 -1
- package/dist/composables/glass/useGlassBackdropLuminance.d.ts +59 -0
- package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
- package/dist/composables/motion/core/index.d.ts +1 -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/useLiquidFlex.d.ts +85 -0
- package/dist/composables/motion/useSpringMount.d.ts +1 -1
- package/dist/composables/motion/useViewTransition.d.ts +36 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +3 -3
- package/dist/constellation.js +373 -261
- package/dist/context-menu.js +2 -2
- 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 +901 -372
- package/dist/dockContext-Bu1Avy-a.js +17 -0
- package/dist/dom.js +5 -5
- package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-BJ7E9js_.js} +11 -8
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +44 -81
- package/dist/fading-scroll.d.ts +1 -0
- package/dist/fading-scroll.js +2 -0
- package/dist/forms.js +5 -5
- package/dist/fourier-field.js +140 -104
- package/dist/fourier-math.js +2 -2
- package/dist/glass-panel.js +90 -21
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +230 -236
- package/dist/goo-blob.js +264 -228
- package/dist/handmark.js +203 -159
- 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 +3 -5
- package/dist/instrument-chassis.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +28 -18
- package/dist/{math-DTpRVC0e.js → math-DeuJwLFx.js} +26 -2
- package/dist/{menuItemVariants-CCoBNkU5.js → menuItemVariants-DWRQXBxJ.js} +10 -4
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +29 -22
- package/dist/metric-stack.js +35 -34
- package/dist/{minimize-2-lcXOuc6V.js → minimize-2-BV31Ob_h.js} +1 -1
- package/dist/motion-core.js +32 -136
- 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/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/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-nbkvr2dC.js → search-BSGrf2Sk.js} +1 -1
- package/dist/search.js +10 -10
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/sheet-CquRYOAw.js +218 -0
- package/dist/sheet.js +1 -1
- package/dist/{slider-ClgpP7EB.js → slider-DQ95MET2.js} +8 -8
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/springPresets-WXaLbu8u.js +40 -0
- package/dist/stacked-icons.js +6 -6
- package/dist/styles/animations.css +25 -125
- package/dist/styles/cards.css +55 -0
- package/dist/styles/components.css +4 -1
- package/dist/styles/configurator.css +77 -0
- package/dist/styles/dock/density.css +19 -0
- package/dist/styles/dock/layer-group.css +83 -25
- package/dist/styles/dock/layers.css +23 -1
- package/dist/styles/dock/morph-bridge.css +123 -0
- package/dist/styles/dock/morph.css +175 -45
- package/dist/styles/dock/overflow.css +66 -1
- package/dist/styles/dock/rail-extend.css +397 -0
- package/dist/styles/dock/section.css +59 -0
- package/dist/styles/dock/shell.css +97 -110
- package/dist/styles/dock-controls/dark-mode-toggle.css +109 -0
- package/dist/styles/dock-controls/icon-button.css +143 -0
- package/dist/styles/dock-controls/tab-button.css +143 -0
- package/dist/styles/dock-controls/touch-floor.css +94 -0
- package/dist/styles/dock-controls/triggers.css +135 -0
- package/dist/styles/dock-controls.css +30 -595
- package/dist/styles/dock.css +8 -3
- package/dist/styles/drawer.css +48 -0
- package/dist/styles/feedback-tone.css +104 -0
- package/dist/styles/floating-panel.css +17 -0
- package/dist/styles/glass/a11y-fallback.css +245 -0
- package/dist/styles/glass/ladder.css +383 -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/surface-axis.css +113 -0
- package/dist/styles/glass/surfaces.css +382 -0
- package/dist/styles/glass-refract.css +2 -0
- package/dist/styles/glass.css +34 -1188
- package/dist/styles/hover-popover.css +2 -0
- package/dist/styles/icon-chip.css +149 -0
- package/dist/styles/index.css +94 -18
- package/dist/styles/instrument-chassis.css +46 -0
- package/dist/styles/menu.css +127 -0
- package/dist/styles/paper.css +2 -68
- package/dist/styles/segmented-tabs.css +346 -0
- package/dist/styles/select.css +50 -0
- package/dist/styles/theme/bridges.css +347 -0
- package/dist/styles/theme/dark.css +7 -0
- package/dist/styles/theme/literals.css +94 -0
- package/dist/styles/theme/radius.css +95 -0
- package/dist/styles/theme.css +26 -529
- package/dist/styles/tokens/color-radius.css +287 -0
- package/dist/styles/tokens/dark-arm.css +308 -0
- package/dist/styles/tokens/glass.css +500 -0
- package/dist/styles/tokens/light-dark.css +187 -0
- package/dist/styles/tokens/offsets-sizing.css +562 -0
- package/dist/styles/tokens/property-regs.css +162 -0
- package/dist/styles/tokens/scale-paper.css +409 -0
- package/dist/styles/tokens/scheme-motion.css +352 -0
- package/dist/styles/tokens/shadow.css +166 -0
- package/dist/styles/tokens.css +22 -2360
- 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 -453
- package/dist/styles/utilities/a11y-overrides.css +169 -0
- package/dist/styles/utilities/animate.css +26 -0
- package/dist/styles/utilities/base.css +541 -0
- package/dist/styles/utilities/btn.css +218 -0
- package/dist/styles/utilities/components.css +317 -0
- package/dist/styles/utilities.css +19 -1318
- package/dist/styles/view-transition.css +4 -52
- package/dist/switch.js +1 -1
- package/dist/tabs.js +161 -181
- 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/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAnimatedNumber-Bcpy5Etf.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
- package/dist/useConfiguratorState-kiIlun8I.js +303 -0
- package/dist/useLiquidFlex-C12hXwOZ.js +30 -0
- package/dist/useRAFLoop-CdwJ7284.js +109 -0
- package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-D7bYU2RK.js} +1 -1
- package/dist/useSpecularTracking-Bo5su68i.js +32 -0
- package/dist/useSpringMount-CvopqiFr.js +108 -0
- package/dist/useSurfaceAxis-CMnF2zHb.js +7 -0
- package/dist/{useTouchGate-WFyJYsth.js → useTouchGate-28Tk2-t2.js} +1 -1
- package/dist/useViewTransition-COsPjQVZ.js +47 -0
- package/dist/utils/coalesceMetric.d.ts +29 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/vReveal-D9k0jADx.js +10 -0
- package/dist/watercolor-dot.js +22 -13
- package/dist/{x-Dfsegz9Y.js → x-BUwTKe50.js} +1 -1
- package/package.json +134 -50
- package/src/styles/animations.css +25 -125
- package/src/styles/cards.css +53 -0
- package/src/styles/configurator.css +77 -0
- package/src/styles/dock/density.css +19 -0
- package/src/styles/dock/layer-group.css +83 -25
- package/src/styles/dock/layers.css +23 -1
- package/src/styles/dock/morph-bridge.css +123 -0
- package/src/styles/dock/morph.css +175 -45
- package/src/styles/dock/overflow.css +66 -1
- package/src/styles/dock/rail-extend.css +397 -0
- package/src/styles/dock/section.css +59 -0
- package/src/styles/dock/shell.css +97 -110
- package/src/styles/dock-controls/dark-mode-toggle.css +109 -0
- package/src/styles/dock-controls/icon-button.css +143 -0
- package/src/styles/dock-controls/tab-button.css +143 -0
- package/src/styles/dock-controls/touch-floor.css +94 -0
- package/src/styles/dock-controls/triggers.css +135 -0
- package/src/styles/dock-controls.css +30 -595
- package/src/styles/dock.css +8 -3
- package/src/styles/drawer.css +42 -0
- package/src/styles/feedback-tone.css +104 -0
- package/src/styles/floating-panel.css +15 -0
- package/src/styles/glass/a11y-fallback.css +245 -0
- package/src/styles/glass/ladder.css +383 -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/surface-axis.css +113 -0
- package/src/styles/glass/surfaces.css +382 -0
- package/src/styles/glass.css +34 -1188
- package/src/styles/icon-chip.css +149 -0
- package/src/styles/index.css +93 -17
- package/src/styles/instrument-chassis.css +42 -0
- package/src/styles/menu.css +127 -0
- package/src/styles/paper.css +2 -68
- package/src/styles/segmented-tabs.css +340 -0
- package/src/styles/select.css +50 -0
- package/src/styles/theme/bridges.css +347 -0
- package/src/styles/theme/dark.css +7 -0
- package/src/styles/theme/literals.css +94 -0
- package/src/styles/theme/radius.css +95 -0
- package/src/styles/theme.css +26 -529
- package/src/styles/tokens/color-radius.css +287 -0
- package/src/styles/tokens/dark-arm.css +308 -0
- package/src/styles/tokens/glass.css +500 -0
- package/src/styles/tokens/light-dark.css +187 -0
- package/src/styles/tokens/offsets-sizing.css +562 -0
- package/src/styles/tokens/property-regs.css +162 -0
- package/src/styles/tokens/scale-paper.css +409 -0
- package/src/styles/tokens/scheme-motion.css +352 -0
- package/src/styles/tokens/shadow.css +166 -0
- package/src/styles/tokens.css +22 -2360
- 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 -453
- package/src/styles/utilities/a11y-overrides.css +169 -0
- package/src/styles/utilities/animate.css +26 -0
- package/src/styles/utilities/base.css +541 -0
- package/src/styles/utilities/btn.css +218 -0
- package/src/styles/utilities/components.css +317 -0
- package/src/styles/utilities.css +19 -1318
- package/src/styles/view-transition.css +4 -52
- package/dist/CardAction-DuArVky-.js +0 -157
- package/dist/DeckProgress-Dmk4_AKN.js +0 -23
- package/dist/DialogContent-BRkT1cjP.js +0 -100
- package/dist/InstrumentRail-CUJ05YVG.js +0 -44
- package/dist/MetricBadge-BZVWIxNy.js +0 -80
- package/dist/PopoverContent-BId6ggf_.js +0 -121
- package/dist/TabsList-B8CVOQPC.js +0 -101
- 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/instrument-rail/InstrumentRail.vue.d.ts +0 -91
- package/dist/components/custom/instrument-rail/index.d.ts +0 -2
- package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
- 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/instrument-rail.d.ts +0 -1
- package/dist/instrument-rail.js +0 -2
- package/dist/sheet-VZEtNFvO.js +0 -214
- package/dist/styles/instrument-rail.css +0 -127
- package/dist/useConfiguratorState-DxAqksK6.js +0 -287
- 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/src/styles/instrument-rail.css +0 -127
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-C_s6fG7r.js} +0 -0
- /package/dist/{ContextMenuContent-DDa0v27s.js → ContextMenuContent-ON3x7cuk.js} +0 -0
- /package/dist/{HoverCardContent-B6CcQ8He.js → HoverCardContent-DkMaQzH5.js} +0 -0
- /package/dist/{Input-xuDwALQR.js → Input-DVG_J0ne.js} +0 -0
- /package/dist/{InstrumentChassis-C2f6cBaQ.js → InstrumentChassis-UUJX0-mW.js} +0 -0
- /package/dist/{Label-zRfbQdCn.js → Label-Ck9SWEKM.js} +0 -0
- /package/dist/{ModalOverlay-B1GkAjNb.js → ModalOverlay-CkPRRgl_.js} +0 -0
- /package/dist/{PaperBackdrop-CqwjnfLv.js → PaperBackdrop-nBKe0vkB.js} +0 -0
- /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
- /package/dist/{SelectSeparator-C4Ql0gzV.js → SelectSeparator-DK2y1Bun.js} +0 -0
- /package/dist/{Separator-D7sD7RKj.js → Separator-BArl4OaB.js} +0 -0
- /package/dist/{TooltipProvider-CmZzCuaG.js → TooltipProvider-B3MkB_8P.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-CBt_VvXa.js} +0 -0
- /package/dist/{compile-BOXjLUxu.js → compile-EXXzEr1q.js} +0 -0
- /package/dist/{constants-yKeKnE84.js → constants-BPOqYJAm.js} +0 -0
- /package/dist/{createContext-B44Sah_H.js → createContext-B2RaZ-b8.js} +0 -0
- /package/dist/{createLucideIcon-B6uNAU9G.js → createLucideIcon-DydS2qgk.js} +0 -0
- /package/dist/{presets-BP_ALM0m.js → presets-BW2b-fr1.js} +0 -0
- /package/dist/{prng-D27-B3tK.js → prng-Cg22zv8g.js} +0 -0
- /package/dist/{supportsCssTimeline-C5oe0lnD.js → supportsCssTimeline-BWenxvHU.js} +0 -0
- /package/dist/{useGlobalDark-CAhOXNLO.js → useGlobalDark-C28t0VWJ.js} +0 -0
- /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
- /package/dist/{useInterval-Dsmqwi03.js → useInterval-CNdua40W.js} +0 -0
- /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
- /package/dist/{useResizeObserver-CWCbk5Px.js → useResizeObserver-V6nq5gJb.js} +0 -0
- /package/dist/{useResolveTokenColor-r9pnNjqK.js → useResolveTokenColor-NUG2zYAW.js} +0 -0
- /package/dist/{useSortable-C8ReQ50P.js → useSortable-BVqlJRBR.js} +0 -0
- /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
- /package/dist/{useTimer-3xqf_54b.js → useTimer-B_PAasDL.js} +0 -0
- /package/dist/{useUserInvalidAria-DoJKMZ3s.js → useUserInvalidAria-CDfJuakL.js} +0 -0
- /package/dist/{useViewportReady-RIr5Wgkh.js → useViewportReady-CvBcCYDf.js} +0 -0
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/* glass/surface-axis.css — the ONE shared {glass·veil·opaque} surface-decoration
|
|
2
|
+
axis (BA.W-SURFACE-AXIS).
|
|
3
|
+
|
|
4
|
+
The house minted `--glass-level` (the opacity knob, AX.W54) and `--glass-tint-*`
|
|
5
|
+
(the legibility seam, AX.W55) as SHARED inheriting axes, but left the
|
|
6
|
+
{glass·veil·opaque} surface-DECORATION choice as a per-component one-off
|
|
7
|
+
(`<Card>` had the only true axis; `<Dialog>` a binary string; everyone else
|
|
8
|
+
none). This seam factors that choice ONCE — every enrolled surface composes a
|
|
9
|
+
base glass tier + the `[data-surface]` attribute, and these rules apply the
|
|
10
|
+
three-rung decoration UNIFORMLY:
|
|
11
|
+
|
|
12
|
+
glass — the resolved tier's plain glass rung (IDENTITY; no rule needed —
|
|
13
|
+
the bare tier paints).
|
|
14
|
+
veil — the borderless/rimless text-legibility plate: the `--glass-bg-quiet`
|
|
15
|
+
fill + blur with the box border AND rim STRIPPED (the boxed look
|
|
16
|
+
reads as a dividing line on a text plate). Reads `--glass-bg-quiet`
|
|
17
|
+
+ the W55 `--glass-tint-*` seam through the SAME `--glass-*` ladder,
|
|
18
|
+
so `--glass-level` / the bright-bucket darken retune it in lockstep
|
|
19
|
+
with every glass surface — NO veil-local recipe fork.
|
|
20
|
+
opaque — the `--glass-level:0` solid-card escape (the `.glass-opaque` rung):
|
|
21
|
+
solid `--card` + `blur(0)` through the ONE level knob, the tint axis
|
|
22
|
+
zeroed (a solid plate has no translucent backdrop to darken-over).
|
|
23
|
+
|
|
24
|
+
NO second axis: `cartoon` stays a Card-local decoration (it is NOT a
|
|
25
|
+
{glass·veil·opaque} member — the shared axis is the three-rung MATERIAL
|
|
26
|
+
decoration; cartoon rides Card's own `surface` superset). The `Surface` union +
|
|
27
|
+
the `surfaceClass(surface, tier)` resolver are the TS half
|
|
28
|
+
(`src/components/ui/_shared/useSurfaceAxis.ts`); this file is the CSS half.
|
|
29
|
+
|
|
30
|
+
Cascade: `@layer components`, @import-ed AFTER ladder.css so the attr rules
|
|
31
|
+
(specificity 0-1-0, equal to the `.glass-*` classes) win by source order over
|
|
32
|
+
the base rung's border/box-shadow. */
|
|
33
|
+
@layer components {
|
|
34
|
+
/* ── veil — the borderless text-legibility plate ──────────────────────────
|
|
35
|
+
Composes the SAME deltas as the `veil-surface` @utility (cards.css), keyed
|
|
36
|
+
off the SAME `--glass-bg-quiet` + `--glass-tint-*` tokens (no recipe fork).
|
|
37
|
+
Each delta is an overridable `--veil-*` rung so a consumer re-points the
|
|
38
|
+
plate to any other ladder rung. */
|
|
39
|
+
[data-surface="veil"] {
|
|
40
|
+
--veil-bg: color-mix(
|
|
41
|
+
in oklab,
|
|
42
|
+
var(--glass-bg-quiet),
|
|
43
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
44
|
+
);
|
|
45
|
+
--veil-blur: var(--glass-blur-quiet);
|
|
46
|
+
/* The three veil deltas over a bare rung — each overridable. */
|
|
47
|
+
--veil-border: none;
|
|
48
|
+
--veil-shadow: none;
|
|
49
|
+
--veil-feather: none;
|
|
50
|
+
|
|
51
|
+
background: var(--veil-bg);
|
|
52
|
+
backdrop-filter: var(--veil-blur);
|
|
53
|
+
-webkit-backdrop-filter: var(--veil-blur);
|
|
54
|
+
border: var(--veil-border);
|
|
55
|
+
box-shadow: var(--veil-shadow);
|
|
56
|
+
/* The optional radial feather — a `mask-image` only painted when
|
|
57
|
+
`--veil-feather` is set to a gradient (default `none` = no mask = a
|
|
58
|
+
clean rectangle). `mask-image: none` is the identity. */
|
|
59
|
+
mask-image: var(--veil-feather);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* ── opaque — the solid-card escape ───────────────────────────────────────
|
|
63
|
+
The level-0 endpoint of the SAME glass machinery — a solid `--card` plate
|
|
64
|
+
with `blur(0)`. A surface that ALSO carries a base tier keeps its glass
|
|
65
|
+
edge/rim/under-shadow (a solid plate with a glass edge, not a bare div).
|
|
66
|
+
|
|
67
|
+
THE SUBSTITUTION-VS-INHERITANCE TRAP (the recurring AX.W55 / dock-scale
|
|
68
|
+
class, live-found in the π readback): the `--glass-bg-*` tier tokens bake
|
|
69
|
+
`var(--glass-level)` at their `:root` DECLARATION (where level=1), so a
|
|
70
|
+
DESCENDANT element's `--glass-level: 0` does NOT re-resolve the `:root`-baked
|
|
71
|
+
`--glass-bg-floating` — the plate stayed translucent (α 0.8, NOT solid). The
|
|
72
|
+
`.glass-opaque` class works only when `--glass-level` is set at `:root` (the
|
|
73
|
+
cohesion fixture's pattern); a PER-ELEMENT opaque surface (the whole point of
|
|
74
|
+
`surface="opaque"`) needs the solid plate composed AT THE ELEMENT. So the
|
|
75
|
+
opaque rung sets the SOLID `--card` background + `blur(0)` DIRECTLY (the
|
|
76
|
+
level-0 endpoint resolved here, not via the baked token) — AND still flips the
|
|
77
|
+
`--glass-level: 0` / `--glass-tint-strength: 0%` knobs so a NESTED glass
|
|
78
|
+
descendant + any consumer reading the level scalar see the opaque register
|
|
79
|
+
coherently. The adaptive TINT axis is zeroed (a solid plate has no
|
|
80
|
+
translucent backdrop to darken-over — the bucket-INVARIANT contract). */
|
|
81
|
+
[data-surface="opaque"] {
|
|
82
|
+
--glass-level: 0;
|
|
83
|
+
--glass-tint-strength: 0%;
|
|
84
|
+
/* The SOLID --card plate composed at the element via the house color-mix
|
|
85
|
+
idiom (`--card` over transparent at 0% transparent = fully solid --card)
|
|
86
|
+
— functionally `var(--card)`, expressed as the cohesion-sanctioned mix
|
|
87
|
+
the token ladder already speaks. */
|
|
88
|
+
background: color-mix(in srgb, var(--card), transparent 0%);
|
|
89
|
+
backdrop-filter: none;
|
|
90
|
+
-webkit-backdrop-filter: none;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* ── .paper-ink-mark — the PAPER ink-hairline MARK register ────────────────
|
|
94
|
+
(BA.W-SURFACE-AXIS scope 8). The 2px `--foreground` ink mark on a paper
|
|
95
|
+
surface — NO plate, NO blur, NO glass. This is a MARK register, NOT a
|
|
96
|
+
`[data-surface]` plate rung: a `[data-surface]` value DECORATES a glass
|
|
97
|
+
plate (fill + edge + rim); `.paper-ink-mark` is the opposite — a bare ink
|
|
98
|
+
hairline drawn directly on paper, the math-paper section-rail / underline-
|
|
99
|
+
tab vocabulary. Recorded here (the surface-decoration seam) co-located with
|
|
100
|
+
the plate axis but DISTINCT from it — the canon note is in CLAUDE.md.
|
|
101
|
+
|
|
102
|
+
≥2 consumers at birth: (1) the math-paper section rail (the `border-l-[3px]`
|
|
103
|
+
family composes it for a VERTICAL left-edge ink rail); (2) W-TABS's re-cut
|
|
104
|
+
underline indicator (a HORIZONTAL 2px ink mark — W-TABS CONSUMES this seam,
|
|
105
|
+
a shape gap there triumvirates HERE per the DAG §5 seam rule). The register
|
|
106
|
+
exposes ONE knob (`--paper-ink-mark-weight`, default 2px) + the ink color;
|
|
107
|
+
the consumer applies the weight on whichever edge/axis it draws (a left
|
|
108
|
+
`border-inline-start-width` rail, a bottom `block-size` underline). */
|
|
109
|
+
.paper-ink-mark {
|
|
110
|
+
--paper-ink-mark-weight: 2px;
|
|
111
|
+
--paper-ink-mark-color: var(--foreground);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/* glass/surfaces.css
|
|
2
|
+
The convenience-shorthand surfaces — .glass-card / .glass-pill / .glass-btn + the glass pill-input + the chromatic edge-dispersion rim fringe.
|
|
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
|
+
/* ── Convenience shorthands (tier + shape) ── */
|
|
8
|
+
|
|
9
|
+
/* Static surface utility — no hover lift, no transition.
|
|
10
|
+
Interactive cards live in <Card> (which owns its own hover composition)
|
|
11
|
+
or in components that explicitly opt into a hover variant. */
|
|
12
|
+
.glass-card {
|
|
13
|
+
/* Focus-elevation rungs (AQ.W3 §W3.1a) — identity = at-rest paint; the
|
|
14
|
+
`:has(:focus-visible)` rule redefines them (one source, shared with
|
|
15
|
+
the fallback). */
|
|
16
|
+
--card-focus-shadow: var(--shadow-card);
|
|
17
|
+
--card-focus-border: var(--glass-border-quiet);
|
|
18
|
+
position: relative;
|
|
19
|
+
background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
|
|
20
|
+
backdrop-filter: var(--glass-blur-quiet);
|
|
21
|
+
border: 1px solid var(--card-focus-border);
|
|
22
|
+
border-radius: var(--radius-card);
|
|
23
|
+
box-shadow: var(--glass-material-rim), var(--card-focus-shadow);
|
|
24
|
+
/* AY.W-A11Y-PERF O-4 — upgrade `layout style` → include `paint` so the
|
|
25
|
+
maximal-glass nested backdrop-filter sample (a glass Button in this card)
|
|
26
|
+
does not escape the card box (the standard nested-backdrop-cost mitigation;
|
|
27
|
+
`contain: paint` clips DESCENDANTS only — the card's own rim/drop-shadow is
|
|
28
|
+
NOT clipped, device-verified). */
|
|
29
|
+
contain: layout style paint;
|
|
30
|
+
transition:
|
|
31
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
32
|
+
border-color var(--duration-fast) var(--ease-standard);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Elevate one rung on descendant KEYBOARD focus (`:focus-visible`, not
|
|
36
|
+
pointer). Scoped to `.glass-card`. `:has()` Baseline Widely; the
|
|
37
|
+
`@supports not selector(:has(*))` class fallback (below) ships anyway
|
|
38
|
+
(focus-elevation is UX-critical — child-state-styling MANDATORY clause). */
|
|
39
|
+
.glass-card:has(:focus-visible) {
|
|
40
|
+
--card-focus-shadow: var(--shadow-md);
|
|
41
|
+
--card-focus-border: var(--glass-border-floating);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* ── Glassmorphic circular icon button ── */
|
|
45
|
+
|
|
46
|
+
/* BA.W-DEMO-AFFORDANCES (IG-A4) — the two size registers below are
|
|
47
|
+
MUTUALLY EXCLUSIVE; never stack `.glass-btn` and `.btn-pill` on one
|
|
48
|
+
element. `.glass-btn` is the FIXED-square icon primitive (width/height:
|
|
49
|
+
var(--size-icon-btn) + contain:paint) — `.btn-pill` is the CONTENT-WIDTH
|
|
50
|
+
text pill. Stacked, the fixed square wins and contain:paint clips the
|
|
51
|
+
wrapped label into a ~40px blob (the R8-17 "play button" defect). A
|
|
52
|
+
text-bearing `.glass-btn` collapses the same way even without `.btn-pill`.
|
|
53
|
+
For a play/replay affordance reach for <StoryPlayButton> (demo) or a real
|
|
54
|
+
<Button> with a leading Lucide glyph, never an icon-button carrying text.
|
|
55
|
+
Machine-locked by proof:demo-affordances (W1 — no class co-occurrence,
|
|
56
|
+
no text-bearing icon button). */
|
|
57
|
+
.glass-btn {
|
|
58
|
+
@apply flex items-center justify-center cursor-pointer;
|
|
59
|
+
|
|
60
|
+
/* Individual-transform identity base (AQ.W3 §W3.2) — `scale: 1` at rest
|
|
61
|
+
mints the stacking context once so the hover/press scale below does
|
|
62
|
+
not flicker it into being (the z-index/anchor hazard). */
|
|
63
|
+
scale: 1;
|
|
64
|
+
width: var(--size-icon-btn);
|
|
65
|
+
height: var(--size-icon-btn);
|
|
66
|
+
border-radius: var(--radius-pill);
|
|
67
|
+
border: 1.5px solid var(--glass-border-wash);
|
|
68
|
+
background: var(--glass-bg-wash);
|
|
69
|
+
backdrop-filter: var(--glass-blur-wash);
|
|
70
|
+
/* AY.W-A11Y-PERF O-4 — paint containment so the glass button's own
|
|
71
|
+
backdrop-filter sample stays inside the box when it nests in a glass card /
|
|
72
|
+
dialog / dock (the nested-backdrop-cost mitigation; clips descendants only,
|
|
73
|
+
the button's own rim/shadow is unaffected — device-verified). */
|
|
74
|
+
contain: paint;
|
|
75
|
+
color: var(--muted-foreground);
|
|
76
|
+
/* AX.W52 §6 doctrine — the surface legs ride the bezier `--ease-standard`;
|
|
77
|
+
the `scale` leg is reconciled onto `--spring-smooth` (was `--spring-snappy`)
|
|
78
|
+
so the icon-button hover settles on the SAME ONE register as `.btn-pill` /
|
|
79
|
+
`.tap-squish` / `btn-interactive` (the gate asserts one scale register
|
|
80
|
+
across all four). The press still reads crisp — `--spring-smooth` ζ=0.86
|
|
81
|
+
settles fast without a visible bounce. */
|
|
82
|
+
transition:
|
|
83
|
+
background var(--duration-fast) var(--ease-standard),
|
|
84
|
+
border-color var(--duration-fast) var(--ease-standard),
|
|
85
|
+
color var(--duration-fast) var(--ease-standard),
|
|
86
|
+
scale var(--spring-smooth-duration) var(--spring-smooth);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.glass-btn:hover:not(:disabled) {
|
|
90
|
+
background: color-mix(in srgb, var(--background) 85%, transparent);
|
|
91
|
+
border-color: var(--surface-tint-22);
|
|
92
|
+
color: var(--foreground);
|
|
93
|
+
scale: var(--scale-hover);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.glass-btn:active:not(:disabled) {
|
|
97
|
+
scale: var(--scale-press);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.glass-btn:focus-visible {
|
|
101
|
+
outline: none;
|
|
102
|
+
box-shadow: var(--focus-ring-shadow);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.glass-btn:disabled {
|
|
106
|
+
opacity: 0.35;
|
|
107
|
+
cursor: not-allowed;
|
|
108
|
+
pointer-events: none;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.glass-btn.is-active,
|
|
112
|
+
.glass-btn[aria-pressed="true"] {
|
|
113
|
+
background: var(--surface-tint-10);
|
|
114
|
+
border-color: var(--surface-tint-25);
|
|
115
|
+
color: var(--foreground);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* ── Pill button base ─────────────────────────── */
|
|
119
|
+
.btn-pill {
|
|
120
|
+
@apply inline-flex items-center justify-center cursor-pointer font-medium border-none;
|
|
121
|
+
|
|
122
|
+
/* AX.W52 §6 identity base — `scale: 1` at rest so the hover/press scale
|
|
123
|
+
below animates the `scale` longhand (not `transform`) coherently and
|
|
124
|
+
does not flicker the stacking context into being (AQ.W3 §W3.2). */
|
|
125
|
+
scale: 1;
|
|
126
|
+
/* AX.W51 D18 — the pill GEOMETRY rides the ONE `--ui-scale` comfort axis.
|
|
127
|
+
gap / padding scale by the master scalar; the font reads the
|
|
128
|
+
`--control-text` register (`calc(--type-small * --ui-scale)`, the same
|
|
129
|
+
`text-sm` register the Button CVA paints), so a bare `.btn-pill` consumer
|
|
130
|
+
and a `<Button>` agree on the control font, and ONE `--ui-scale` override
|
|
131
|
+
grows the pill's height (via padding) + gap + font in lockstep. Desktop
|
|
132
|
+
default is the identity (scale 1 → the prior proportion). */
|
|
133
|
+
gap: calc(0.375rem * var(--ui-scale));
|
|
134
|
+
border-radius: var(--radius-pill);
|
|
135
|
+
padding: calc(0.5rem * var(--ui-scale)) calc(1rem * var(--ui-scale));
|
|
136
|
+
font-size: var(--control-text);
|
|
137
|
+
/* AX.W52 — the ONE coherent button transition (RED witness 5/6). The
|
|
138
|
+
SURFACE legs (bg/border/box-shadow/color/opacity) ride the bezier
|
|
139
|
+
`--ease-standard` (a colour cross-fade reads as a wobble on a spring);
|
|
140
|
+
the TRANSFORM leg (`scale`) rides `--spring-smooth` (the sub-perceptual
|
|
141
|
+
settle), so the hover lift + the surface cross-fade read as ONE glide.
|
|
142
|
+
The DEAD `transform` leg is retired — the variants animate the `scale`
|
|
143
|
+
longhand. CRITICAL: `.tap-squish` (composed alongside on the button
|
|
144
|
+
base, utilities.css) ALSO lists this full coherent set, so neither
|
|
145
|
+
class's `transition` shorthand can clobber the other down to a
|
|
146
|
+
scale-only animation — the cascade bug that left every button
|
|
147
|
+
transitioning ONLY `scale` (the live-readback RED, RED witness 5). The
|
|
148
|
+
doctrine: surface-props→bezier, transform→spring (tokens.css §2). */
|
|
149
|
+
transition:
|
|
150
|
+
background-color var(--duration-fast) var(--ease-standard),
|
|
151
|
+
border-color var(--duration-fast) var(--ease-standard),
|
|
152
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
153
|
+
color var(--duration-fast) var(--ease-standard),
|
|
154
|
+
opacity var(--duration-fast) var(--ease-standard),
|
|
155
|
+
scale var(--spring-smooth-duration) var(--spring-smooth);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.btn-pill > * {
|
|
159
|
+
@apply flex-shrink-0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
.btn-pill:disabled {
|
|
164
|
+
opacity: var(--opacity-disabled);
|
|
165
|
+
cursor: not-allowed;
|
|
166
|
+
pointer-events: none;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* ── Glass-button backdrop ─────────────────────────────────────────────
|
|
170
|
+
AX.W52 — the `glass`/`glass-wash` Button variants compose `.glass-wash`,
|
|
171
|
+
which resolves `--glass-blur-wash` = `blur(1px)` — a sub-perceptual
|
|
172
|
+
diffusion authored for a small detail TILE, not a button the user reads
|
|
173
|
+
as "glass" (the live readback found the glass variants at a negligible
|
|
174
|
+
1px). A hero control wants a real glass blur. `.btn-glass` re-points the
|
|
175
|
+
backdrop at `--glass-blur-btn` (the `quiet`-tier 10px radius + the gentle
|
|
176
|
+
`saturate(1.05) brightness(1.02)` light-concentration), so the glass
|
|
177
|
+
button variants actually read as liquid glass while the wash TILE tier
|
|
178
|
+
keeps its 1px untouched. Declares the UNPREFIXED `backdrop-filter` ONLY —
|
|
179
|
+
Lightning CSS emits the `-webkit-` companion per the single-source
|
|
180
|
+
authorship discipline above (hand-authoring both forms makes Lightning
|
|
181
|
+
dedup-and-keep-prefixed, which modern Chromium then drops). */
|
|
182
|
+
.btn-glass {
|
|
183
|
+
backdrop-filter: var(--glass-blur-btn);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* ── Pill input ───────────────────────────────── */
|
|
187
|
+
.input-pill {
|
|
188
|
+
@apply flex w-full;
|
|
189
|
+
|
|
190
|
+
/* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
|
|
191
|
+
height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
|
|
192
|
+
--control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
|
|
193
|
+
font reads `--control-text`, the inline padding scales — so ONE override
|
|
194
|
+
grows the field's height + padding + font in lockstep. Desktop default is
|
|
195
|
+
the identity. */
|
|
196
|
+
height: var(--control-h-md);
|
|
197
|
+
border-radius: var(--radius-pill);
|
|
198
|
+
/* AW.W13 — the resting field edge reads as an enclosed control at rest
|
|
199
|
+
(~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
|
|
200
|
+
`:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
|
|
201
|
+
destructive ring below still win by order + specificity.
|
|
202
|
+
AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
|
|
203
|
+
border seam so the pill is ONE glass model with the rest of the ladder.
|
|
204
|
+
BA.W-SURFACE-AXIS scope 7 — re-pointed onto the SHARED `--control-surface-*`
|
|
205
|
+
REST register so Input/Textarea/NumberField/Select/Combobox/TagsInput are
|
|
206
|
+
ONE material at rest (the input rung was the warmer of the two; Select rode
|
|
207
|
+
the `glass-wash` gray — the no-gray control-family seam). The register reads
|
|
208
|
+
the same `--glass-*` ladder, so `--glass-level`/the W55 bright bucket retune
|
|
209
|
+
the whole form family in lockstep (--control-surface-border defaults to the
|
|
210
|
+
`--glass-border-floating` 15%α rung, --control-surface-bg to `--glass-bg-quiet`,
|
|
211
|
+
--control-surface-blur to `--glass-blur-quiet`). */
|
|
212
|
+
border: 1.5px solid var(--control-surface-border);
|
|
213
|
+
background: var(--control-surface-bg);
|
|
214
|
+
/* The control's REAL glass blur — the shared register's quiet-tier radius
|
|
215
|
+
(the same `--control-surface-blur` pairs with `--control-surface-bg`); the
|
|
216
|
+
`--glass-level` knob clarifies it in lockstep with every surface. */
|
|
217
|
+
backdrop-filter: var(--control-surface-blur);
|
|
218
|
+
padding: 0 calc(1rem * var(--ui-scale));
|
|
219
|
+
font-size: var(--control-text);
|
|
220
|
+
color: var(--foreground);
|
|
221
|
+
transition:
|
|
222
|
+
background-color var(--duration-fast) var(--ease-standard),
|
|
223
|
+
border-color var(--duration-fast) var(--ease-standard),
|
|
224
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
225
|
+
color var(--duration-fast) var(--ease-standard),
|
|
226
|
+
opacity var(--duration-fast) var(--ease-standard);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.input-pill::placeholder {
|
|
230
|
+
color: var(--surface-tint-35);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* BA.W-SURFACE-AXIS scope 7 — the shared control REST surface class. The
|
|
234
|
+
NON-pill control families (the Select trigger, the TagsInput root) that do
|
|
235
|
+
NOT compose `.input-pill` but want the SAME resting material read this — so
|
|
236
|
+
the whole form band is ONE register at rest (the Select default rode the
|
|
237
|
+
lighter `glass-wash` gray before; this is the no-gray control-family seam).
|
|
238
|
+
It carries the bg/border/blur ONLY (each control owns its own height/radius/
|
|
239
|
+
padding/font), so a non-pill control composes `.control-surface` + its own
|
|
240
|
+
geometry. The hover lift brightens the fill one step toward the resting rung. */
|
|
241
|
+
.control-surface {
|
|
242
|
+
background: var(--control-surface-bg);
|
|
243
|
+
border: 1px solid var(--control-surface-border);
|
|
244
|
+
backdrop-filter: var(--control-surface-blur);
|
|
245
|
+
-webkit-backdrop-filter: var(--control-surface-blur);
|
|
246
|
+
}
|
|
247
|
+
.control-surface:hover:not(:disabled, [data-disabled]) {
|
|
248
|
+
background: var(--control-surface-bg-hover);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
|
|
252
|
+
accent ring on a mouse click); `:focus-visible` matches the
|
|
253
|
+
`.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
|
|
254
|
+
the `:user-invalid` rungs so an invalid focused field shows destructive,
|
|
255
|
+
not accent (the `:user-invalid:focus-visible` rule below wins by order +
|
|
256
|
+
specificity). `:focus-visible` Baseline Widely — no fallback. */
|
|
257
|
+
.input-pill:focus-visible {
|
|
258
|
+
outline: none;
|
|
259
|
+
border-color: var(--color-accent-opaque, var(--ring));
|
|
260
|
+
box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
|
|
264
|
+
The forgiving `:where(:user-invalid, .user-invalid-fallback,
|
|
265
|
+
[aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
|
|
266
|
+
native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
|
|
267
|
+
fallback class for engines without `:user-invalid` (css §3.2; NOT a
|
|
268
|
+
live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
|
|
269
|
+
imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
|
|
270
|
+
serves APP-DRIVEN validity — a custom key match, an async server check —
|
|
271
|
+
where there is no native constraint to trip `:user-invalid`, so the app
|
|
272
|
+
sets the ARIA attribute and the library's own ring paints with no
|
|
273
|
+
`:deep()` re-paint at the consumer. The destructive/success tints reuse
|
|
274
|
+
the semantic tokens via `color-mix` per the house pattern (W2). Non-color
|
|
275
|
+
reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
|
|
276
|
+
asterisk — the border/bg shift is the supplementary cue, never the sole
|
|
277
|
+
one. `:user-valid` is intentionally subtle (border only, no bg fill) so
|
|
278
|
+
a long valid form is not a wall of green. */
|
|
279
|
+
.input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
|
|
280
|
+
border-color: var(--destructive);
|
|
281
|
+
background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
|
|
282
|
+
}
|
|
283
|
+
.input-pill:where(:user-valid, .user-valid-fallback) {
|
|
284
|
+
border-color: var(--success);
|
|
285
|
+
}
|
|
286
|
+
/* Invalid + keyboard-focused → destructive ring (overrides the accent
|
|
287
|
+
`:focus-visible` ring above by order + the extra invalid compound). The
|
|
288
|
+
`[aria-invalid]` arm rides the same widened group so an app-driven
|
|
289
|
+
invalid field shows the destructive ring on focus too. */
|
|
290
|
+
.input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
|
|
291
|
+
border-color: var(--destructive);
|
|
292
|
+
box-shadow: 0 0 0 var(--focus-ring-width)
|
|
293
|
+
color-mix(in srgb, var(--destructive) 35%, transparent);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
|
|
297
|
+
`autosize` prop → `[data-autosize]`). The textarea grows vertically with
|
|
298
|
+
content between a 3-line floor and a token-driven ceiling, then scrolls.
|
|
299
|
+
`field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
|
|
300
|
+
engine the declaration is ignored and the element keeps the
|
|
301
|
+
`min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
|
|
302
|
+
no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
|
|
303
|
+
the unchanged no-op fallback. */
|
|
304
|
+
.input-pill[data-autosize] {
|
|
305
|
+
field-sizing: content;
|
|
306
|
+
width: 100%;
|
|
307
|
+
min-block-size: 3lh;
|
|
308
|
+
max-block-size: var(--textarea-autosize-max, 12lh);
|
|
309
|
+
resize: vertical;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.input-pill:disabled {
|
|
313
|
+
opacity: 0.5;
|
|
314
|
+
cursor: not-allowed;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
|
|
318
|
+
The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
|
|
319
|
+
surface; its 8%α `--glass-border-wash` field edge vanished on cream just
|
|
320
|
+
like the input pill, so the same `--surface-tint-15` lift makes the
|
|
321
|
+
trigger read as an enclosed control at rest. Scoped to the combobox role
|
|
322
|
+
so the lift reaches ONLY the Select trigger, not every `.glass-wash`
|
|
323
|
+
surface. */
|
|
324
|
+
.glass-wash[role="combobox"] {
|
|
325
|
+
border-color: var(--surface-tint-15);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* ── BA.W-PAGER — the glass pager pill chassis (.glass-pager-ring) ──────────
|
|
329
|
+
The ONE pager-CHASSIS ring register: a `--radius-pill` glass-floating pill
|
|
330
|
+
(the DockRail-chip recipe — `--glass-bg-floating` + `--glass-blur-floating`
|
|
331
|
+
+ `--glass-edge-light`/`--glass-specular` + the soft drop + the `.dark`
|
|
332
|
+
box-shadow arm). It encapsulates BOTH the `<PagerDots ring>` dot rail AND
|
|
333
|
+
the `<CarouselPager>` counter (the counter re-registers OFF the opaque
|
|
334
|
+
`bg-card` slab onto this — the R9/R10-5 dark-slab class dies in the same
|
|
335
|
+
edit). NEVER an opaque `bg-card` plate: this is the house "controls in a
|
|
336
|
+
glass pill" idiom, translucent (reads the substrate through it), already
|
|
337
|
+
dark/light-safe, already specular-rimmed (≥2-consumer-proven on the dock
|
|
338
|
+
rail-extend chips + the dock collapsed pill). The legibility floor over the
|
|
339
|
+
carousel's image content rides the SAME rebuilt registers
|
|
340
|
+
(W-DARK-MATERIAL/W-NO-GRAY) — no local opaque fallback. */
|
|
341
|
+
.glass-pager-ring {
|
|
342
|
+
display: inline-flex;
|
|
343
|
+
align-items: center;
|
|
344
|
+
gap: 0.375rem;
|
|
345
|
+
padding-inline: 0.625rem;
|
|
346
|
+
padding-block: 0.3125rem;
|
|
347
|
+
border-radius: var(--radius-pill);
|
|
348
|
+
background: var(--glass-bg-floating);
|
|
349
|
+
backdrop-filter: var(--glass-blur-floating);
|
|
350
|
+
-webkit-backdrop-filter: var(--glass-blur-floating);
|
|
351
|
+
box-shadow:
|
|
352
|
+
var(--glass-edge-light),
|
|
353
|
+
var(--glass-specular),
|
|
354
|
+
0 2px 6px -2px color-mix(in srgb, var(--shadow-color) 22%, transparent);
|
|
355
|
+
/* §6 EASING DOCTRINE — the surface channel cross-fades on the bezier
|
|
356
|
+
`--ease-standard` (NEVER a spring; a surface prop on a spring is the
|
|
357
|
+
violation). */
|
|
358
|
+
transition:
|
|
359
|
+
background-color var(--duration-fast) var(--ease-standard),
|
|
360
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
361
|
+
border-color var(--duration-fast) var(--ease-standard);
|
|
362
|
+
}
|
|
363
|
+
.dark .glass-pager-ring {
|
|
364
|
+
box-shadow:
|
|
365
|
+
var(--glass-edge-light-dark),
|
|
366
|
+
var(--glass-specular-dark),
|
|
367
|
+
0 2px 6px -2px color-mix(in srgb, var(--shadow-color) 30%, transparent);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/* ── AW.W23 — chromatic edge dispersion (the polished-glass rim fringe) ──
|
|
371
|
+
An opt-in `.glass-chromatic` composes the warm/cool oklab fringe OVER the
|
|
372
|
+
W22 uniform rim (it does NOT replace it — the rim still rides each rung's
|
|
373
|
+
box-shadow). The fringe is a transparency garnish, so it composes ONLY
|
|
374
|
+
under `prefers-reduced-transparency: no-preference` and drops under
|
|
375
|
+
`reduce` (handled by the bracket below). The fringe lands as a dedicated
|
|
376
|
+
inset box-shadow pair on the material surface so it adds onto the rim. */
|
|
377
|
+
@media (prefers-reduced-transparency: no-preference) {
|
|
378
|
+
.glass-chromatic {
|
|
379
|
+
box-shadow: var(--glass-edge-dispersion), var(--glass-material-rim);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|