@mkbabb/glass-ui 3.13.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/CardAction-CW7a0m8M.js +253 -0
- package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DvZNQ_HF.js} +58 -53
- package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
- package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-uWnVxDab.js} +1 -1
- package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
- package/dist/{DataTable-BCddn3T3.js → DataTable-CuKwF7wr.js} +99 -97
- package/dist/DialogContent-DcKK8k9i.js +103 -0
- package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-BZNX5aVr.js} +3 -3
- package/dist/FadingScroll-DI6hQhT9.js +76 -0
- package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-b2uaAMRR.js} +1 -1
- package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-CbqbNwgU.js} +2 -2
- package/dist/IconChip-BTD-nay5.js +55 -0
- package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-Bl8gFZ8d.js} +1 -1
- package/dist/{Input-DWQQIOC4.js → Input-h9v5LeXf.js} +1 -1
- package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-RHdBP72w.js} +1 -1
- package/dist/Notification-VUwexFUf.js +43 -0
- package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
- package/dist/PopoverContent-DL7E6vJP.js +127 -0
- package/dist/{Progress-DwlUKGbr.js → Progress-DctG61iZ.js} +98 -78
- package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-yOpBzFYq.js} +2 -2
- package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-CrA8F0iV.js} +35 -20
- package/dist/{Switch-CsIuYP_e.js → Switch-CwYNf8bo.js} +1 -1
- package/dist/Toaster-Bw4xR8xV.js +274 -0
- package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
- package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +16 -8
- package/dist/api/types-extra.d.ts +6 -0
- package/dist/api.js +2 -2
- package/dist/aurora.js +888 -230
- package/dist/badge.js +1 -1
- package/dist/border-progress.d.ts +1 -0
- package/dist/border-progress.js +106 -0
- package/dist/button-DYCUa-tH.js +126 -0
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -2
- package/dist/card.js +2 -2
- package/dist/carousel.d.ts +1 -1
- package/dist/carousel.js +90 -151
- 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/compile-CQEFRTmx.js +19 -0
- package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
- package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
- package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
- package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
- package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
- package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +30 -2
- package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -10
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
- package/dist/components/custom/aurora/index.d.ts +3 -2
- package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
- package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
- package/dist/components/custom/border-progress/constants.d.ts +59 -0
- package/dist/components/custom/border-progress/index.d.ts +4 -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/concentric/Concentric.vue.d.ts +39 -0
- package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
- package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
- package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
- package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
- package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
- package/dist/components/custom/concentric/constants.d.ts +43 -0
- package/dist/components/custom/concentric/index.d.ts +5 -0
- package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
- package/dist/components/custom/concentric/shaders/concentric.wgsl.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/DockIconButton.vue.d.ts +13 -4
- package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
- 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/composables/dockMorphMeasure.d.ts +75 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
- package/dist/components/custom/dock/constants.d.ts +35 -0
- package/dist/components/custom/dock/index.d.ts +2 -0
- package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
- package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
- package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
- package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
- package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
- package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
- package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
- package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
- package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
- package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
- package/dist/components/custom/easing/constants.d.ts +28 -0
- package/dist/components/custom/easing/index.d.ts +3 -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 +19 -2
- package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
- package/dist/components/custom/fourier-field/constants.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 +9 -1
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
- package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +29 -12
- package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
- package/dist/components/custom/goo-blob/constants.d.ts +6 -1
- package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
- 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 +82 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -2
- package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
- 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/spa-view/SpaView.vue.d.ts +50 -0
- package/dist/components/custom/spa-view/index.d.ts +2 -0
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +29 -24
- package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
- 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 +15 -1
- 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/badge/index.d.ts +1 -1
- package/dist/components/ui/button/Button.vue.d.ts +5 -2
- package/dist/components/ui/button/index.d.ts +2 -2
- package/dist/components/ui/card/Card.vue.d.ts +34 -4
- package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
- package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
- package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
- package/dist/components/ui/card/index.d.ts +2 -0
- package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
- package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
- package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
- package/dist/components/ui/carousel/index.d.ts +0 -1
- package/dist/components/ui/command/Command.vue.d.ts +4 -1
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
- package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -8
- package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
- package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
- package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
- package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
- package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
- package/dist/components/ui/drawer/constants.d.ts +45 -0
- package/dist/components/ui/drawer/index.d.ts +23 -15
- package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
- package/dist/components/ui/focus-scope/index.d.ts +2 -0
- package/dist/components/ui/index.d.ts +1 -1
- package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
- package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
- package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
- package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
- 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/sheet/index.d.ts +1 -1
- package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
- package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
- package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
- package/dist/components/ui/toast/use-toast.d.ts +14 -0
- package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
- package/dist/composables/dark/index.d.ts +1 -1
- package/dist/composables/dark/useGlobalDark.d.ts +23 -1
- package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
- package/dist/composables/glass/index.d.ts +5 -2
- package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
- package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
- package/dist/composables/glass/vSpecular.d.ts +2 -0
- package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
- package/dist/composables/glass/webgpu/index.d.ts +2 -0
- package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
- package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
- package/dist/composables/motion/core/index.d.ts +1 -0
- package/dist/composables/motion/index.d.ts +4 -0
- package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
- package/dist/composables/motion/useDragMorph.d.ts +77 -0
- package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
- package/dist/composables/motion/useLiquidPress.d.ts +71 -0
- package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
- package/dist/composables/motion/useNumericTransition.d.ts +3 -3
- package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
- package/dist/composables/motion/useViewTransition.d.ts +36 -1
- package/dist/concentric.d.ts +1 -0
- package/dist/concentric.js +562 -0
- package/dist/configurator.js +3 -2
- package/dist/confirm-dialog.js +22 -24
- package/dist/constellation.js +93 -95
- package/dist/context-menu.js +3 -3
- package/dist/controls.js +10 -4
- package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
- 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 +738 -442
- package/dist/{dockContext-BegmJVmx.js → dockContext-BNfyPLe9.js} +1 -1
- package/dist/dom.js +5 -5
- package/dist/dot-flow-field.d.ts +1 -0
- package/dist/dot-flow-field.js +604 -0
- package/dist/drawer.d.ts +1 -0
- package/dist/drawer.js +380 -0
- package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-CofSZuk8.js} +14 -15
- package/dist/dropdown-menu.js +1 -1
- package/dist/easing.d.ts +1 -0
- package/dist/easing.js +463 -0
- package/dist/expandable-container.js +45 -38
- package/dist/fading-scroll.d.ts +1 -0
- package/dist/fading-scroll.js +2 -0
- package/dist/focus-scope.d.ts +1 -0
- package/dist/focus-scope.js +23 -0
- package/dist/forms.js +7 -7
- package/dist/fourier-field.js +135 -122
- 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 +154 -362
- package/dist/goo-blob.js +838 -227
- 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 +3 -3
- package/dist/instrument-chassis.js +1 -1
- 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-BINYmg5z.js} +11 -3
- package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-D8VNHq22.js} +10 -4
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +25 -22
- package/dist/metric-stack.js +4 -8
- package/dist/motion-core.js +36 -35
- package/dist/motion-curves.js +1 -1
- package/dist/motion.js +157 -55
- 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/{compile-B7NGOBcP.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
- package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
- 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 +10 -12
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/sheet-tZMg0E0w.js +218 -0
- package/dist/sheet.js +1 -1
- package/dist/{slider-B-JP2JlI.js → slider-DVb4HXU-.js} +7 -7
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/spa-view.d.ts +1 -0
- package/dist/spa-view.js +46 -0
- package/dist/styles/animations.css +40 -31
- package/dist/styles/border-progress.css +109 -0
- package/dist/styles/cards.css +76 -0
- package/dist/styles/components.css +1 -1
- package/dist/styles/configurator.css +35 -0
- package/dist/styles/critical-partition.mjs +140 -0
- package/dist/styles/critical.css +12 -0
- package/dist/styles/deferred.css +31 -0
- package/dist/styles/dock/density.css +64 -0
- package/dist/styles/dock/layers.css +54 -30
- package/dist/styles/dock/morph.css +124 -7
- package/dist/styles/dock/overflow.css +31 -2
- package/dist/styles/dock/rail-extend.css +168 -71
- package/dist/styles/dock/section.css +59 -0
- package/dist/styles/dock/shell.css +83 -16
- 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 +38 -3
- package/dist/styles/drawer.css +127 -35
- package/dist/styles/feedback-tone.css +104 -0
- package/dist/styles/glass/deep.css +44 -0
- package/dist/styles/glass/ladder.css +154 -52
- package/dist/styles/glass/material.css +78 -15
- package/dist/styles/glass/reveal.css +136 -0
- package/dist/styles/glass/rim.css +100 -0
- package/dist/styles/glass/surface-axis.css +113 -0
- package/dist/styles/glass/surfaces.css +189 -15
- package/dist/styles/glass-refract.css +96 -44
- package/dist/styles/glass-specular-track.css +7 -0
- package/dist/styles/glass.css +8 -2
- package/dist/styles/hover-popover.css +7 -6
- package/dist/styles/icon-chip.css +211 -0
- package/dist/styles/index.css +78 -4
- package/dist/styles/instrument-chassis.css +107 -2
- package/dist/styles/menu.css +127 -0
- package/dist/styles/scroll-choreography.css +300 -0
- package/dist/styles/segmented-tabs.css +188 -86
- package/dist/styles/select.css +50 -0
- package/dist/styles/theme/bridges.css +22 -1
- package/dist/styles/theme/literals.css +11 -2
- package/dist/styles/theme/radius.css +6 -1
- package/dist/styles/tokens/color-radius.css +40 -13
- package/dist/styles/tokens/dark-arm.css +200 -20
- package/dist/styles/tokens/glass-deep.css +75 -0
- package/dist/styles/tokens/glass-fx.css +333 -0
- package/dist/styles/tokens/glass.css +95 -315
- package/dist/styles/tokens/light-dark.css +64 -22
- package/dist/styles/tokens/offsets.css +116 -0
- package/dist/styles/tokens/on-glass-fg.css +39 -0
- package/dist/styles/tokens/property-regs.css +130 -10
- package/dist/styles/tokens/scale-paper.css +155 -84
- package/dist/styles/tokens/scheme-motion.css +102 -46
- package/dist/styles/tokens/scroll-tokens.css +123 -0
- package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
- package/dist/styles/tokens.css +9 -3
- 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 +174 -0
- package/dist/styles/typography.css +23 -507
- package/dist/styles/utilities/a11y-overrides.css +33 -4
- package/dist/styles/utilities/animate.css +27 -24
- package/dist/styles/utilities/base-misc.css +255 -0
- package/dist/styles/utilities/base.css +100 -138
- package/dist/styles/utilities/btn.css +21 -202
- package/dist/styles/utilities/metal.css +189 -0
- package/dist/styles/utilities.css +14 -7
- package/dist/styles/view-transition.css +4 -1
- package/dist/switch.js +1 -1
- package/dist/tabs.js +275 -191
- 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-C5I3wWd8.js → useAnimatedNumber-BfUq2bUM.js} +1 -1
- package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
- package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
- package/dist/useDragMorph-DgxnsVJz.js +102 -0
- package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
- package/dist/useLiquidPress-kfb4KX79.js +39 -0
- package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
- package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-UYa4zoiN.js} +1 -1
- package/dist/useSpring-C0jyvEJB.js +40 -0
- package/dist/useSpringMount-q1amq1SJ.js +71 -0
- package/dist/useSpringPress-BsqPr7FJ.js +34 -0
- package/dist/useSurfaceAxis-g0NloYEF.js +7 -0
- package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-CBZTD4SD.js} +1 -1
- package/dist/vReveal-Czsb7zQC.js +10 -0
- package/dist/vSpecular-CQFmLNzA.js +68 -0
- package/dist/vendor-CKmzio-i.js +226 -0
- package/dist/watercolor-dot.js +12 -5
- package/package.json +193 -25
- package/src/styles/animations.css +40 -31
- package/src/styles/border-progress.css +109 -0
- package/src/styles/cards.css +76 -0
- package/src/styles/configurator.css +35 -0
- package/src/styles/critical-partition.mjs +140 -0
- package/src/styles/dock/density.css +64 -0
- package/src/styles/dock/layers.css +54 -30
- package/src/styles/dock/morph.css +124 -7
- package/src/styles/dock/overflow.css +31 -2
- package/src/styles/dock/rail-extend.css +168 -71
- package/src/styles/dock/section.css +59 -0
- package/src/styles/dock/shell.css +83 -16
- 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 +38 -3
- package/src/styles/drawer.css +123 -35
- package/src/styles/feedback-tone.css +104 -0
- package/src/styles/glass/deep.css +44 -0
- package/src/styles/glass/ladder.css +154 -52
- package/src/styles/glass/material.css +78 -15
- package/src/styles/glass/reveal.css +136 -0
- package/src/styles/glass/rim.css +100 -0
- package/src/styles/glass/surface-axis.css +113 -0
- package/src/styles/glass/surfaces.css +189 -15
- package/src/styles/glass-refract.css +96 -44
- package/src/styles/glass-specular-track.css +7 -0
- package/src/styles/glass.css +8 -2
- package/src/styles/hover-popover.css +7 -6
- package/src/styles/icon-chip.css +211 -0
- package/src/styles/index.css +78 -4
- package/src/styles/instrument-chassis.css +107 -2
- package/src/styles/menu.css +127 -0
- package/src/styles/scroll-choreography.css +300 -0
- package/src/styles/segmented-tabs.css +184 -84
- package/src/styles/select.css +50 -0
- package/src/styles/theme/bridges.css +22 -1
- package/src/styles/theme/literals.css +11 -2
- package/src/styles/theme/radius.css +6 -1
- package/src/styles/tokens/color-radius.css +40 -13
- package/src/styles/tokens/dark-arm.css +200 -20
- package/src/styles/tokens/glass-deep.css +75 -0
- package/src/styles/tokens/glass-fx.css +333 -0
- package/src/styles/tokens/glass.css +95 -315
- package/src/styles/tokens/light-dark.css +64 -22
- package/src/styles/tokens/offsets.css +116 -0
- package/src/styles/tokens/on-glass-fg.css +39 -0
- package/src/styles/tokens/property-regs.css +130 -10
- package/src/styles/tokens/scale-paper.css +155 -84
- package/src/styles/tokens/scheme-motion.css +102 -46
- package/src/styles/tokens/scroll-tokens.css +123 -0
- package/src/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
- package/src/styles/tokens.css +9 -3
- 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 +174 -0
- package/src/styles/typography.css +23 -507
- package/src/styles/utilities/a11y-overrides.css +33 -4
- package/src/styles/utilities/animate.css +27 -24
- package/src/styles/utilities/base-misc.css +255 -0
- package/src/styles/utilities/base.css +100 -138
- package/src/styles/utilities/btn.css +21 -202
- package/src/styles/utilities/metal.css +189 -0
- package/src/styles/utilities.css +14 -7
- package/src/styles/view-transition.css +4 -1
- package/dist/CardAction-Cj2eycQ2.js +0 -157
- package/dist/DialogContent-Dl9WkAoS.js +0 -100
- package/dist/Notification-DdwNxIrI.js +0 -100
- package/dist/NumberFieldContent-CqaN-SvN.js +0 -145
- package/dist/PopoverContent-BYwt2-4x.js +0 -121
- package/dist/TabsList-Dttss653.js +0 -105
- package/dist/Toaster-D6q4HtXu.js +0 -263
- package/dist/button-ChXMfsud.js +0 -81
- package/dist/check-njhk-vfu.js +0 -7
- package/dist/chevron-down-DKkxb4VV.js +0 -7
- package/dist/chevron-right-CPXbqQQz.js +0 -7
- package/dist/chevron-up-n_24SqI-.js +0 -7
- 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/createLucideIcon-DydS2qgk.js +0 -43
- package/dist/minimize-2-BV31Ob_h.js +0 -38
- package/dist/search-BSGrf2Sk.js +0 -12
- package/dist/sheet-1fChZjtw.js +0 -214
- package/dist/underline.d.ts +0 -1
- package/dist/underline.js +0 -85
- package/dist/useCanvas2D-ClrQuZtp.js +0 -96
- package/dist/useConfiguratorState-DAoeHVue.js +0 -287
- package/dist/useSpecularTracking-Bo5su68i.js +0 -32
- package/dist/useSpringMount-CI2jOstM.js +0 -108
- package/dist/vReveal-CqaCz_mC.js +0 -44
- package/dist/x-BUwTKe50.js +0 -10
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-68dEXIAl.js} +0 -0
- /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
- /package/dist/{Label-r3WzWrsj.js → Label-C2ejNWeC.js} +0 -0
- /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-D1VrWyoi.js} +0 -0
- /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
- /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-DwwjicPY.js} +0 -0
- /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DXswVdRz.js} +0 -0
- /package/dist/{Separator-0JE6LtNu.js → Separator-pKF0oA4M.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
- /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
- /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
- /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
- /package/dist/{createContext-BM46COQ-.js → createContext-CpBNTRMI.js} +0 -0
- /package/dist/{prng-D27-B3tK.js → prng-Za0Rmgag.js} +0 -0
- /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
- /package/dist/{springPresets--YdWTHtm.js → springPresets-CFQGQfdl.js} +0 -0
- /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
- /package/dist/{useInterval-iHludrxk.js → useInterval-CvK1mL92.js} +0 -0
- /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
- /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-mZPMiNXh.js} +0 -0
- /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-Bpoi7tRE.js} +0 -0
- /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
- /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
- /package/dist/{useSortable-muI29agz.js → useSortable-DHjtZSEd.js} +0 -0
- /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-CWEi25hf.js} +0 -0
- /package/dist/{useTimer-Dzarvzuk.js → useTimer-BHJOKr35.js} +0 -0
- /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-y5namzeE.js} +0 -0
- /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-anbac3m6.js} +0 -0
|
@@ -31,13 +31,21 @@
|
|
|
31
31
|
strength))`). With the default `--glass-tint-strength: 0%` the mix is a
|
|
32
32
|
no-op = byte-identical to the un-tinted rung; a consumer biases the surface
|
|
33
33
|
toward a sampled backdrop hue by setting `--glass-tint-source` + a
|
|
34
|
-
strength ≤30%. oklab is the mwg-preferred tint space
|
|
35
|
-
`oklch(from …)` lightness-shift
|
|
34
|
+
strength ≤30%. oklab is the mwg-preferred tint space for the TINT mix here
|
|
35
|
+
(NEVER an `oklch(from …)` lightness-shift in the GLASS-TINT mix). The
|
|
36
|
+
`oklch(from var(--foreground) …)` relative-color recipe DID land its first
|
|
37
|
+
live consumer at BB.W-DARK-INK-WARM — the dark `--surface-tint-*` arm
|
|
38
|
+
(`tokens/dark-arm.css`), where the tolerant α-mix absorbs the small high-L
|
|
39
|
+
chroma (the gamut-map caveat documented + pinned under the gamut edge there).
|
|
40
|
+
That is the INK derivation, separate from THIS glass-tint mix space. */
|
|
36
41
|
.glass-wash {
|
|
37
42
|
position: relative;
|
|
38
43
|
background: color-mix(in oklab, var(--glass-bg-wash), var(--glass-tint-source) var(--glass-tint-strength));
|
|
39
44
|
backdrop-filter: var(--glass-blur-wash);
|
|
40
|
-
border
|
|
45
|
+
/* BB.W-GLASS-ACCENT — the rung border ink feeds the accent-composed
|
|
46
|
+
`--glass-border-accent` (rim group above); byte-identical at 0%. */
|
|
47
|
+
--glass-border-rung: var(--glass-border-wash);
|
|
48
|
+
border: 1px solid var(--glass-border-accent);
|
|
41
49
|
box-shadow: var(--glass-material-rim), var(--glass-shadow-wash);
|
|
42
50
|
}
|
|
43
51
|
|
|
@@ -57,7 +65,8 @@
|
|
|
57
65
|
position: relative;
|
|
58
66
|
background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
|
|
59
67
|
backdrop-filter: var(--glass-blur-quiet);
|
|
60
|
-
border:
|
|
68
|
+
--glass-border-rung: var(--glass-border-quiet);
|
|
69
|
+
border: 1px solid var(--glass-border-accent);
|
|
61
70
|
box-shadow:
|
|
62
71
|
var(--glass-material-rim),
|
|
63
72
|
var(--glass-under-shadow-quiet),
|
|
@@ -68,7 +77,8 @@
|
|
|
68
77
|
position: relative;
|
|
69
78
|
background: color-mix(in oklab, var(--glass-bg-resting), var(--glass-tint-source) var(--glass-tint-strength));
|
|
70
79
|
backdrop-filter: var(--glass-blur-resting);
|
|
71
|
-
border:
|
|
80
|
+
--glass-border-rung: var(--glass-border-resting);
|
|
81
|
+
border: 1px solid var(--glass-border-accent);
|
|
72
82
|
box-shadow:
|
|
73
83
|
var(--glass-material-rim),
|
|
74
84
|
var(--glass-under-shadow-default),
|
|
@@ -94,7 +104,8 @@
|
|
|
94
104
|
position: relative;
|
|
95
105
|
background: color-mix(in oklab, var(--glass-bg-floating), var(--glass-tint-source) var(--glass-tint-strength));
|
|
96
106
|
backdrop-filter: var(--glass-blur-floating);
|
|
97
|
-
border:
|
|
107
|
+
--glass-border-rung: var(--glass-border-floating);
|
|
108
|
+
border: 1px solid var(--glass-border-accent);
|
|
98
109
|
box-shadow:
|
|
99
110
|
var(--glass-material-rim),
|
|
100
111
|
var(--glass-under-shadow-vivid),
|
|
@@ -108,7 +119,8 @@
|
|
|
108
119
|
position: relative;
|
|
109
120
|
background: color-mix(in oklab, var(--glass-bg-overlay), var(--glass-tint-source) var(--glass-tint-strength));
|
|
110
121
|
backdrop-filter: var(--glass-blur-overlay);
|
|
111
|
-
border:
|
|
122
|
+
--glass-border-rung: var(--glass-border-overlay);
|
|
123
|
+
border: 1px solid var(--glass-border-accent);
|
|
112
124
|
box-shadow: var(--glass-material-rim), var(--glass-shadow-overlay);
|
|
113
125
|
}
|
|
114
126
|
|
|
@@ -141,6 +153,13 @@
|
|
|
141
153
|
.glass-card {
|
|
142
154
|
--glass-tint-source: var(--glass-tint-ink);
|
|
143
155
|
--glass-tint-strength: var(--glass-tint-strength-aa);
|
|
156
|
+
/* BA.W-DARK-MATERIAL scope 7 — the --muted-foreground lift moves HERE, into the
|
|
157
|
+
declared/sampled BRIGHT condition. The muted L40 tier cannot clear 4.5:1 on a
|
|
158
|
+
translucent FULL-AA-darkened plate (darkening moves the plate toward muted's
|
|
159
|
+
own luminance), so it lifts to the full ink ONLY where the plate actually
|
|
160
|
+
darkens — NOT on the calm-light unconditional floor (where it stays the muted
|
|
161
|
+
register, the slides caption read). */
|
|
162
|
+
--muted-foreground: var(--foreground);
|
|
144
163
|
}
|
|
145
164
|
}
|
|
146
165
|
|
|
@@ -182,19 +201,62 @@
|
|
|
182
201
|
TOWARD muted's own luminance), so the low-contrast muted register resolves to
|
|
183
202
|
the legible dark ink (clears ~10:1) — a token re-point on the same inheriting
|
|
184
203
|
axis as the tint. */
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
204
|
+
/* The OVERLAY band (.glass-floating/.glass-overlay — Dialog/Sheet/Popover/DropdownMenu/
|
|
205
|
+
HoverCard/Command/Tooltip/Toast/Select-content) keeps the FULL unconditional AA darken
|
|
206
|
+
+ the muted lift: it floats over WHATEVER the consumer painted (frequently a light/
|
|
207
|
+
near-white app surface — the canonical G2 case), so darkening toward the warm-ink is
|
|
208
|
+
the correct DEFAULT over an UNKNOWN surface. Over a DARK page this becomes the
|
|
209
|
+
luminous-dark LIFT (the dark-arm re-tunes --glass-tint-strength-aa to 12% — the plate
|
|
210
|
+
lifts off the deep page). A dark-substrate consumer who wants the pristine plate sets
|
|
211
|
+
`--glass-tint-strength: 0%`. */
|
|
212
|
+
:where(.glass-floating, .glass-overlay) {
|
|
193
213
|
--glass-tint-source: var(--glass-tint-ink);
|
|
194
|
-
|
|
214
|
+
/* BC.W-AUDIT — the scope-7 completion: the overlay band JOINS the content-tier
|
|
215
|
+
sub-perceptual FLOOR by default (translucent warm glass), and the FULL AA
|
|
216
|
+
darken engages ONLY under the bright bucket (the @container --glass-backdrop:
|
|
217
|
+
light above). The prior unconditional AA (20% ink-ward) collapsed every
|
|
218
|
+
floating surface to grey over the common calm-light backdrop. The full glass
|
|
219
|
+
rebuild + the per-band muted/contrast reconciliation is BC. */
|
|
220
|
+
--glass-tint-strength: var(--glass-tint-strength-floor);
|
|
195
221
|
--muted-foreground: var(--foreground);
|
|
196
222
|
}
|
|
197
223
|
|
|
224
|
+
/* BA.W-DARK-MATERIAL scope 7 — the plain CONTENT tiers self-engage the SUB-PERCEPTUAL
|
|
225
|
+
FLOOR unconditionally, NOT the full AA darken (the R9-1 slides gray-slab fix). Over a
|
|
226
|
+
calm LIGHT page the floor (--glass-tint-strength-floor: 4%) is a silhouette whisper —
|
|
227
|
+
the translucent cream card stays warm (L ≈ 0.94), no gray slab. Over a DARK page the
|
|
228
|
+
floor re-resolves to the luminous-dark lift (12% in the dark arm — the plate lifts off
|
|
229
|
+
the deep page, the desired register). The FULL AA darken engages on these tiers ONLY
|
|
230
|
+
under the declared/sampled BRIGHT signal (the @container --glass-backdrop:light bucket
|
|
231
|
+
above — where the muted lift also lives now). NO unconditional --muted-foreground lift
|
|
232
|
+
here: on the calm-light floor the caption keeps the muted register (the slides read).
|
|
233
|
+
A consumer opts a light-page card out via `--glass-tint-strength: 0%` on an ancestor.
|
|
234
|
+
|
|
235
|
+
BB.W-ON-GLASS-FG (N13) — the THIRD-STATE on-glass FOREGROUND re-point lands HERE,
|
|
236
|
+
BESIDE the BA seam (the SAME cascade context, the SAME content-tier set, NOT a new
|
|
237
|
+
competing layer). The calm-light floor keeps the page-muted --neutral-5 at HEAD —
|
|
238
|
+
but the muted ink is calibrated against the CANVAS, and on a TRANSLUCENT content
|
|
239
|
+
plate (the glass-first common case) it composites toward the lifted backdrop and
|
|
240
|
+
its contrast COLLAPSES (1.15-3.29:1 measured in dark). The re-point targets the
|
|
241
|
+
muted register at the COMPOSITED glass fill: --muted-foreground → --on-glass-muted
|
|
242
|
+
(+ the -strong twin), a register BETWEEN the page-muted and the bright-bucket full
|
|
243
|
+
ink (legible-AND-subordinate; the caption stays quieter than body --foreground).
|
|
244
|
+
This is NOT a fork of --glass-tint-* — it READS the seam context and expresses the
|
|
245
|
+
third state; it NEVER re-declares --glass-tint-ink/-strength-* (W-DARK-MATERIAL's
|
|
246
|
+
frozen bound). The BA bright-bucket lift (@container --glass-backdrop:light above,
|
|
247
|
+
--muted-foreground → --foreground) STILL WINS where the plate darkens — the
|
|
248
|
+
@container conditional overrides this unconditional :where() when it engages, so a
|
|
249
|
+
darkened plate goes full ink; this calm re-point is the calm-plate case ONLY. The
|
|
250
|
+
overlay band (:where(.glass-floating, .glass-overlay) above) is a DISJOINT selector
|
|
251
|
+
set (it keeps the full-ink lift), so neither path collides. The values auto-flip per
|
|
252
|
+
mode (the on-glass rungs carry their own light/dark per-mode arms in tokens). */
|
|
253
|
+
:where(.glass-card, .glass-resting, .glass-quiet, .glass-wash) {
|
|
254
|
+
--glass-tint-source: var(--glass-tint-ink);
|
|
255
|
+
--glass-tint-strength: var(--glass-tint-strength-floor);
|
|
256
|
+
--muted-foreground: var(--on-glass-muted);
|
|
257
|
+
--muted-foreground-strong: var(--on-glass-muted-strong);
|
|
258
|
+
}
|
|
259
|
+
|
|
198
260
|
/* AX.W55 — the `contrast-color()` foreground-ink flip (Chrome 147+/Safari 26+).
|
|
199
261
|
A PROGRESSIVE-ENHANCEMENT layer, NEVER the load-bearing floor (Open-Q #5
|
|
200
262
|
ratified): the declarative bucket above already carries AA on ALL engines (it
|
|
@@ -207,6 +269,20 @@
|
|
|
207
269
|
white, illegible on the still-light translucent plate). The bucket is the floor;
|
|
208
270
|
this is the native refinement. Scoped to the bright bucket. */
|
|
209
271
|
@supports (color: contrast-color(white)) {
|
|
272
|
+
/* The bright-bucket ink flip — the content tiers + overlay band over a DECLARED/
|
|
273
|
+
sampled bright backdrop. BA.W-DARK-MATERIAL scope 6 — the SYSTEMIC contrast-color()
|
|
274
|
+
selection-inversion fix (approach A, lockstep-lift). At HEAD this block lifted only
|
|
275
|
+
--muted-foreground (and the surface `color`) to contrast-color(--card) (white over
|
|
276
|
+
a light plate, L100), but the ACTIVE control register (a SegmentedTabs active tab,
|
|
277
|
+
the curve-picker selected label) reads var(--foreground) DIRECTLY (L90, un-lifted) —
|
|
278
|
+
a control sets its OWN `color: var(--foreground)` which wins over the inherited
|
|
279
|
+
surface `color`, so the inactive (muted→white) read BRIGHTER than the active
|
|
280
|
+
(--foreground), inverting selection. The fix lifts --foreground ITSELF in lockstep
|
|
281
|
+
with --muted-foreground: now an active register reading --foreground resolves the
|
|
282
|
+
SAME anchored contrast-color ink as the lifted inactive, so selected ≥ unselected
|
|
283
|
+
everywhere (the inversion gone for ANY --muted-foreground/--foreground selection
|
|
284
|
+
pairing inside a glass card — the SYSTEMIC library-seam fix, not a curve-picker
|
|
285
|
+
one-off). Progressive enhancement only — the declarative darken is the AA floor. */
|
|
210
286
|
@container style(--glass-backdrop: light) {
|
|
211
287
|
.glass-material,
|
|
212
288
|
.glass-wash,
|
|
@@ -216,25 +292,26 @@
|
|
|
216
292
|
.glass-overlay,
|
|
217
293
|
.glass-card {
|
|
218
294
|
color: contrast-color(var(--card));
|
|
295
|
+
--foreground: contrast-color(var(--card));
|
|
296
|
+
--muted-foreground: contrast-color(var(--card));
|
|
219
297
|
}
|
|
220
298
|
}
|
|
221
|
-
/*
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
register flips to the same anchored dark ink. Progressive enhancement only
|
|
226
|
-
— the declarative darken above is the AA floor on all engines. */
|
|
227
|
-
:where(
|
|
228
|
-
.glass-floating,
|
|
229
|
-
.glass-overlay,
|
|
230
|
-
.glass-card,
|
|
231
|
-
.glass-resting,
|
|
232
|
-
.glass-quiet,
|
|
233
|
-
.glass-wash
|
|
234
|
-
) {
|
|
299
|
+
/* The OVERLAY band self-engages the darken UNCONDITIONALLY (it floats over an
|
|
300
|
+
UNKNOWN consumer surface), so its ink-flip companion mirrors that — UNCONDITIONAL.
|
|
301
|
+
--foreground lifts in lockstep with --muted-foreground (the scope-6 lockstep). */
|
|
302
|
+
:where(.glass-floating, .glass-overlay) {
|
|
235
303
|
color: contrast-color(var(--card));
|
|
304
|
+
--foreground: contrast-color(var(--card));
|
|
236
305
|
--muted-foreground: contrast-color(var(--card));
|
|
237
306
|
}
|
|
307
|
+
/* BA.W-DARK-MATERIAL scope 7 — the content-tier ink flip is GATED on the bright
|
|
308
|
+
signal (it moved INTO the @container bucket above), NOT unconditional. Over a calm
|
|
309
|
+
LIGHT page the content tiers only carry the 4% silhouette floor (still a warm cream
|
|
310
|
+
plate), so flipping the ink to the contrast-color DARK ink there is correct only
|
|
311
|
+
where the plate ACTUALLY darkens to the bright-bucket AA — the unconditional flip
|
|
312
|
+
would force a white-on-cream / dark-on-darkened mismatch on the calm card. The
|
|
313
|
+
content tiers therefore take NO unconditional contrast-color flip; their flip lives
|
|
314
|
+
in the @container bucket with the rest of the bright-condition darken. */
|
|
238
315
|
}
|
|
239
316
|
|
|
240
317
|
/* ── The opaque escape (AX.W54) ───────────────────
|
|
@@ -248,6 +325,14 @@
|
|
|
248
325
|
a consumer that wants a flat surface). */
|
|
249
326
|
.glass-opaque {
|
|
250
327
|
--glass-level: 0;
|
|
328
|
+
/* BA.W-DARK-MATERIAL scope 7 — the opaque escape suppresses the adaptive TINT axis
|
|
329
|
+
too (not just the opacity/blur level). A solid opaque plate has no translucent
|
|
330
|
+
backdrop to darken-over, so the self-engage tint is meaningless on it; zeroing the
|
|
331
|
+
strength keeps the opaque escape bucket-INVARIANT (the unset floor and the bright
|
|
332
|
+
bucket resolve the SAME solid plate — the byte-identity canary). Without this, the
|
|
333
|
+
scope-7 unconditional content-tier floor (4%) tinted even the solid plate, breaking
|
|
334
|
+
the opt-out's "flat surface" contract. */
|
|
335
|
+
--glass-tint-strength: 0%;
|
|
251
336
|
}
|
|
252
337
|
|
|
253
338
|
/* ── Content-aware under-shadow modifier (AV.W15 M4) ──────────────
|
|
@@ -286,7 +371,16 @@
|
|
|
286
371
|
var(--glass-shadow-floating);
|
|
287
372
|
}
|
|
288
373
|
|
|
289
|
-
/* Grain noise overlay — reuses paper texture SVG, no extra assets
|
|
374
|
+
/* Grain noise overlay — reuses paper texture SVG, no extra assets.
|
|
375
|
+
BB.W-LIQUIDHOVER — the disco-grain pop (T8-F6) killed at the COMPOSITION CLASS:
|
|
376
|
+
the `background-image` is ALWAYS PRESENT (decoded once at rest, NEVER toggled to
|
|
377
|
+
`none`), and any STATE-driven grain engagement cross-fades the `opacity` ONLY on
|
|
378
|
+
the thin `--glass-grain-engage-duration` (~120ms linear) clock. A `background-
|
|
379
|
+
image: none → var(--paper-clean-texture)` engage decodes-and-appears in one frame
|
|
380
|
+
(the pop); the opacity cross-fade is a compositor-cheap interpolation with the
|
|
381
|
+
image constant — the only sanctioned grain engage. The `transition` lives HERE so
|
|
382
|
+
a hover/active grain lift (wherever a glass surface raises grain on interaction)
|
|
383
|
+
reads as a smooth fade by construction, not a discrete swap. */
|
|
290
384
|
.glass-wash::after,
|
|
291
385
|
.glass-quiet::after,
|
|
292
386
|
.glass-resting::after,
|
|
@@ -296,36 +390,44 @@
|
|
|
296
390
|
position: absolute;
|
|
297
391
|
inset: 0;
|
|
298
392
|
border-radius: inherit;
|
|
299
|
-
background
|
|
393
|
+
/* The grain texture is the `background-image` longhand (NOT the `background`
|
|
394
|
+
shorthand) so the image stays a STABLE always-present layer the engage
|
|
395
|
+
never re-declares — the structural anti-pop: opacity is the only animated
|
|
396
|
+
channel, the image is never `none → image`. */
|
|
397
|
+
background-image: var(--paper-clean-texture);
|
|
300
398
|
background-repeat: repeat;
|
|
301
399
|
background-size: var(--paper-texture-size);
|
|
302
400
|
opacity: var(--glass-grain-opacity);
|
|
401
|
+
/* The opacity cross-fade engage — plain ~120ms linear direct-write (no spring,
|
|
402
|
+
no overshoot — instant-but-smooth per the ask). Under the PRM / reduced-
|
|
403
|
+
transparency brackets the clock collapses to 0ms (the a11y bracket below). */
|
|
404
|
+
transition: opacity var(--glass-grain-engage-duration, 120ms) linear;
|
|
303
405
|
pointer-events: none;
|
|
304
406
|
mix-blend-mode: overlay;
|
|
305
407
|
}
|
|
306
408
|
|
|
307
|
-
/*
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
.glass-floating,
|
|
322
|
-
.glass-overlay,
|
|
323
|
-
.glass-card,
|
|
324
|
-
.glass-specular-track,
|
|
325
|
-
.dock-icon-button {
|
|
326
|
-
--glass-material-rim: var(--glass-edge-light);
|
|
409
|
+
/* BB.W-LIQUIDHOVER — the grain engage collapses to INSTANT under reduced motion (a
|
|
410
|
+
grain that cross-fades on hover under reduce is still motion; accessibility is
|
|
411
|
+
absolute). The reduced-transparency / forced-colors brackets already zero
|
|
412
|
+
`--glass-grain-opacity` (a11y-fallback.css), so the grain is inert there; this
|
|
413
|
+
bracket covers the reduced-MOTION case where the grain still paints but must not
|
|
414
|
+
animate. */
|
|
415
|
+
@media (prefers-reduced-motion: reduce) {
|
|
416
|
+
.glass-wash::after,
|
|
417
|
+
.glass-quiet::after,
|
|
418
|
+
.glass-resting::after,
|
|
419
|
+
.glass-floating::after,
|
|
420
|
+
.glass-overlay::after {
|
|
421
|
+
transition: none;
|
|
422
|
+
}
|
|
327
423
|
}
|
|
328
424
|
|
|
425
|
+
/* The unified rim (AW.W22) + the BB.W-GLASS-ACCENT per-INSTANCE chromatic-RIM
|
|
426
|
+
tint group (the rim-ink + --glass-material-rim ring + the per-rung
|
|
427
|
+
--glass-border-accent border, light + dark arms) lives in glass/rim.css
|
|
428
|
+
(carved at BB.W-CARVE4 — the next adjacent @layer components block, the SOLE
|
|
429
|
+
writer of --glass-material-rim/--glass-border-accent). */
|
|
430
|
+
|
|
329
431
|
.dark .glass-wash::after,
|
|
330
432
|
.dark .glass-quiet::after,
|
|
331
433
|
.dark .glass-resting::after,
|
|
@@ -105,23 +105,72 @@
|
|
|
105
105
|
registered-`@property` var() nested in an hsl() alpha computes to 0 in
|
|
106
106
|
Chromium — the cross-engine-safe path); the per-stop alphas are literals so
|
|
107
107
|
even the lifted hover/active states read as a lens, not a flash. */
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
/* BB.W-LENSING (scope 3) — the motion-reactive EDGE glint UNIFIED with the
|
|
109
|
+
centered catch-light disc on ONE `::before`. TWO background layers compose:
|
|
110
|
+
(TOP) the angle-keyed EDGE-anchored conic sweep — a warm-cream arc that
|
|
111
|
+
brightens the RIM where the pointer's `--specular-angle` grazes (the
|
|
112
|
+
glass-THICKNESS read iOS-27 fuses with the catch-light); (BOTTOM) the
|
|
113
|
+
existing pointer-position centered disc. BOTH ride the SAME `--specular-
|
|
114
|
+
intensity` cohort (the `opacity` below) + `plus-lighter` blend + warm-cream
|
|
115
|
+
core `hsl(40 35% 92%)` — NEVER a second color/blend fork. The conic is masked
|
|
116
|
+
to the rim band only (the `--glass-edge-glint-band` radial mask, scope 3),
|
|
117
|
+
so the glint is a bounded RIM ring, NOT a whole-plate wash (the AX.W52 D19
|
|
118
|
+
bounded-gleam discipline). The `--specular-angle` floor `0deg` sits the glint
|
|
119
|
+
at the top edge when unwired (static rest — no ambient drift, no blowout). */
|
|
120
|
+
/* BB.W-GLASS-ACCENT — the catch-light CORE COLOR composes the per-instance
|
|
121
|
+
chromatic accent. The warm-cream `hsl(40 35% 92%)` core resolves through
|
|
122
|
+
the ONE `--glass-specular-core` var, OKLab-mixed toward `var(--glass-
|
|
123
|
+
accent)` at `var(--glass-accent-strength)`. This tints the CORE only — it
|
|
124
|
+
is the COLOR axis; W-LENSING owns the GEOMETRY (the conic angle-keyed
|
|
125
|
+
edge-glint + the radial disc + the masks + the `plus-lighter` blend, all
|
|
126
|
+
BELOW, untouched). Tinting the ONE core tints BOTH the centered disc AND
|
|
127
|
+
the rim glint (they share the core), so the data hue reads at the glint
|
|
128
|
+
where the pointer grazes — the data-keyed colored catch-light. At
|
|
129
|
+
`--glass-accent-strength: 0%` + `--glass-accent: transparent` (the
|
|
130
|
+
`@property` defaults) the mix === `hsl(40 35% 92%)` byte-identical (the W2
|
|
131
|
+
warm-cream floor). Each gradient stop reproduces its original alpha via
|
|
132
|
+
`color-mix(in srgb, <core> N%, transparent)` (=== the prior `<core> / 0.NN`),
|
|
133
|
+
so the geometry + falloff is byte-identical at rest. */
|
|
134
|
+
--glass-specular-core: color-mix(
|
|
135
|
+
in oklab,
|
|
136
|
+
hsl(40 35% 92%),
|
|
137
|
+
var(--glass-accent) var(--glass-accent-strength)
|
|
113
138
|
);
|
|
139
|
+
background:
|
|
140
|
+
conic-gradient(
|
|
141
|
+
from var(--specular-angle, 0deg) at 50% 50%,
|
|
142
|
+
transparent 0deg,
|
|
143
|
+
color-mix(in srgb, var(--glass-specular-core) 55%, transparent) 18deg,
|
|
144
|
+
transparent 60deg,
|
|
145
|
+
transparent 360deg
|
|
146
|
+
),
|
|
147
|
+
radial-gradient(
|
|
148
|
+
circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
|
|
149
|
+
color-mix(in srgb, var(--glass-specular-core) 50%, transparent) 0%,
|
|
150
|
+
transparent 70%,
|
|
151
|
+
transparent 100%
|
|
152
|
+
);
|
|
114
153
|
opacity: var(--specular-intensity, 0);
|
|
115
|
-
/*
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
154
|
+
/* Per-layer masks (the `,`-separated list pairs with the two backgrounds in
|
|
155
|
+
order): the EDGE conic is masked to the RIM BAND ONLY — transparent across
|
|
156
|
+
the interior, opaque in the outer `--glass-edge-glint-band` (default 22%) — so
|
|
157
|
+
the angle-keyed glint reads as a THICKNESS rim, not a center wash; the centered
|
|
158
|
+
disc keeps its own-radius clip (AX.W52 D19). `mask-image` Baseline 2023-12-07;
|
|
159
|
+
a non-supporting engine ignores it and the `inset: 0` + in-paint falloff still
|
|
160
|
+
bound the gleam. */
|
|
161
|
+
mask-image:
|
|
162
|
+
radial-gradient(
|
|
163
|
+
circle closest-side at 50% 50%,
|
|
164
|
+
transparent calc(100% - var(--glass-edge-glint-band, 22%)),
|
|
165
|
+
black calc(100% - calc(var(--glass-edge-glint-band, 22%) * 0.5)),
|
|
166
|
+
black 100%
|
|
167
|
+
),
|
|
168
|
+
radial-gradient(
|
|
169
|
+
circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
|
|
170
|
+
black 0%,
|
|
171
|
+
black 60%,
|
|
172
|
+
transparent 100%
|
|
173
|
+
);
|
|
125
174
|
/* AX.W52 D19 — `plus-lighter` (additive but HDR-clamped, Safari 16.4+) over
|
|
126
175
|
the prior `screen` (a non-linear lightener that lifted the whole tile
|
|
127
176
|
toward white — the muddy-card defect). A non-supporting engine degrades to
|
|
@@ -235,4 +284,18 @@
|
|
|
235
284
|
--specular-intensity: var(--glass-specular-intensity-active, 0.16);
|
|
236
285
|
}
|
|
237
286
|
|
|
287
|
+
/* BB.W-LENSING (scope 2) — the `:active` LENS-SWELL is RETIRED (DDR-LENS-BAKE,
|
|
288
|
+
glass-refract.css header). The swell drove the displacement `scale` by mutating
|
|
289
|
+
the `--glass-refract` axis on the `--glass-btn-press-t` press drive (28 rest → 44
|
|
290
|
+
pressed). That depended on the var()-spliced head/`scale`/tail filter — which never
|
|
291
|
+
PARSED as a `backdrop-filter` (three tokens: `url("…") <n> url("…")`), so the lens
|
|
292
|
+
rendered `none` and the swell animated a value that reached NO filter. A CSS url()
|
|
293
|
+
string token cannot carry a substituted `var()` (the engine does not re-tokenise
|
|
294
|
+
inside a string), so a dynamic per-instance `scale` is structurally impossible in a
|
|
295
|
+
single self-contained data-URI — and the single token is mandatory for both parse
|
|
296
|
+
validity and bundler url()-rewrite safety. The `scale` is now BAKED at the §10
|
|
297
|
+
default (28); the resting lens read is PRESERVED (and now actually renders), the
|
|
298
|
+
press-depth animation is the deliberate tradeoff. The press squish + gleam lift on
|
|
299
|
+
the SAME `--glass-btn-press-t` drive (material gleam, above) carry the press read. */
|
|
300
|
+
|
|
238
301
|
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/* glass/reveal.css
|
|
2
|
+
BB.W-LIQUID-REVEAL — the `.glass-reveal` LIQUID-ENTER recipe: the spring-clocked,
|
|
3
|
+
coupled-channel top-layer open that REPLACES `popover-animate`'s fixed-bezier
|
|
4
|
+
zoom-95 (clean break, no alias). The zero-JS floor the reka portaled overlays
|
|
5
|
+
compose (they are not native top-layer, so they cannot ride `@starting-style`;
|
|
6
|
+
`.glass-reveal` is the data-state form). The `useLiquidReveal` JS leaf is the
|
|
7
|
+
source-rect REFINEMENT (the dialog-from-button / dock-from-pill bloom); this CSS
|
|
8
|
+
recipe is the everywhere floor.
|
|
9
|
+
@import-ed by glass.css in cascade order, in its own @layer components
|
|
10
|
+
(isomorphic to the monolith). See docs/precepts/design-idioms.md §cohesion-aware
|
|
11
|
+
partials. */
|
|
12
|
+
|
|
13
|
+
/* ── THE LIQUID ENTER (the iOS-27 bloom-from-anchor) ──────────────────────────
|
|
14
|
+
*
|
|
15
|
+
* Three COUPLED channels, the SPATIAL/EFFECTS split (the Material-3 / §6 /
|
|
16
|
+
* W-MOTION-CANON doctrine):
|
|
17
|
+
*
|
|
18
|
+
* (a) SCALE (the bloom — SPATIAL) rides `--spring-snappy` + its OWN settle clock
|
|
19
|
+
* `--spring-snappy-duration` (the W-GLASS-CAL Unit 3 per-spring clock, NOT the
|
|
20
|
+
* generic `--duration-normal` that re-timed every spring to one wall clock).
|
|
21
|
+
* The overshoot interior of the spring `linear()` gives the canonical iOS
|
|
22
|
+
* arrival. `transform-origin` anchors at the popper edge (`--reka-popper-
|
|
23
|
+
* transform-origin`) so the surface blooms FROM its anchor, not center.
|
|
24
|
+
* (b) OPACITY (the fade — EFFECTS) rides `--ease-out` (NO overshoot — a fade must
|
|
25
|
+
* not bounce), coupled so scale+fade read as ONE continuous coalescing layer.
|
|
26
|
+
* (c) BLUR-SETTLE (the iOS "light-bending modulation" decongest — EFFECTS)
|
|
27
|
+
* `filter: blur(--glass-reveal-blur)` → `blur(0)`, on the SAME spring clock as
|
|
28
|
+
* the scale so the surface clarifies AS it blooms. The decongest rides the
|
|
29
|
+
* surface's OWN pixels (`filter`) NOT the backdrop (`backdrop-filter`), so it
|
|
30
|
+
* does NOT clobber the resting `glass-floating` tier plate blur the overlay
|
|
31
|
+
* carries at rest (a `backdrop-filter: blur(0)` open value would erase the
|
|
32
|
+
* glass). A `filter` radius interp is COMPOSITOR-safe (never a layout property
|
|
33
|
+
* — the proof:no-layout-animation floor).
|
|
34
|
+
*
|
|
35
|
+
* Uses the `scale:` / `translate:` LONGHANDS (not `transform:`), so it composes with
|
|
36
|
+
* any identity-base transform and mints no stacking context (the `.glass-top-layer`
|
|
37
|
+
* `scale:` discipline). NEVER animates a layout property (the zoom is `scale`, the
|
|
38
|
+
* side-slide is `translate` — the directional slide-in `popover-animate` +
|
|
39
|
+
* `slide-in-from-side` used to carry, now folded onto the compositor `translate` leg).
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
@layer components {
|
|
43
|
+
.glass-reveal {
|
|
44
|
+
/* The one public start knob (the decongest radius). The spatial/effects
|
|
45
|
+
clocks read the shared spring tokens (read-only — the W-GLASS-CAL fence). */
|
|
46
|
+
--glass-reveal-blur: 4px;
|
|
47
|
+
--glass-reveal-slide: 0.5rem;
|
|
48
|
+
transform-origin: var(--reka-popper-transform-origin, center);
|
|
49
|
+
/* The coupled transition list — the SPATIAL legs (scale/translate) on the
|
|
50
|
+
snappy spring's OWN settle clock, the EFFECTS legs (opacity/filter blur-
|
|
51
|
+
settle) on the no-overshoot ease-out. ONE coherent glide. The blur rides
|
|
52
|
+
`filter` (the surface's own pixels) NOT `backdrop-filter` (which would
|
|
53
|
+
clobber the resting glass-floating plate blur). */
|
|
54
|
+
transition-property: scale, translate, opacity, filter, display, overlay;
|
|
55
|
+
transition-duration: var(--spring-snappy-duration), var(--spring-snappy-duration),
|
|
56
|
+
var(--spring-snappy-duration), var(--spring-snappy-duration),
|
|
57
|
+
var(--spring-snappy-duration), var(--spring-snappy-duration);
|
|
58
|
+
transition-timing-function: var(--spring-snappy), var(--spring-snappy),
|
|
59
|
+
var(--ease-out), var(--ease-out), linear, linear;
|
|
60
|
+
transition-behavior: allow-discrete;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* OPEN — the settled, bloomed-in state (the spring-clocked scale/fade/blur-settle
|
|
64
|
+
interpolates FROM the closed values). `filter: blur(0)` clarifies the surface;
|
|
65
|
+
the resting `glass-floating` backdrop-filter is untouched. The `translate` leg
|
|
66
|
+
is set ONLY by the `data-side` variants below (a side-anchored popover slides
|
|
67
|
+
from its edge) — the BASE never writes `translate`, so a center-anchored Dialog
|
|
68
|
+
keeping its `-translate-x-1/2 -translate-y-1/2` centering is NEVER clobbered. */
|
|
69
|
+
.glass-reveal[data-state="open"] {
|
|
70
|
+
scale: 1;
|
|
71
|
+
opacity: 1;
|
|
72
|
+
filter: blur(0);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* CLOSED — both the resting CLOSED snapshot AND the EXIT leg. The exit reads
|
|
76
|
+
`--ease-out` (a bezier, NO overshoot — a closing surface must never overshoot
|
|
77
|
+
past gone, the §6/W-MOTION-CANON P2 doctrine); NO `--spring-*` token on the
|
|
78
|
+
exit. The exit is faster + un-sprung — the surface recedes cleanly. */
|
|
79
|
+
.glass-reveal[data-state="closed"] {
|
|
80
|
+
scale: var(--glass-reveal-enter-scale, 0.95);
|
|
81
|
+
opacity: 0;
|
|
82
|
+
filter: blur(var(--glass-reveal-blur));
|
|
83
|
+
transition-timing-function: var(--ease-out);
|
|
84
|
+
transition-duration: var(--duration-fast);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* The directional slide-in — the compositor `translate` leg keyed off the
|
|
88
|
+
popper's `data-side` (folds the retired `slide-in-from-side` `@utility`'s
|
|
89
|
+
directional entry onto the compositor channel; the panel enters from outside
|
|
90
|
+
the anchor's edge). On the SAME snappy spring + clock as the scale. ONLY a
|
|
91
|
+
side-anchored popover (with `data-side`) sets `translate`; the open settled
|
|
92
|
+
value is `0 0` (per side, so it slides home from the edge). A center-anchored
|
|
93
|
+
Dialog has no `data-side` and is never reached here. */
|
|
94
|
+
.glass-reveal[data-side="top"][data-state="open"],
|
|
95
|
+
.glass-reveal[data-side="bottom"][data-state="open"],
|
|
96
|
+
.glass-reveal[data-side="left"][data-state="open"],
|
|
97
|
+
.glass-reveal[data-side="right"][data-state="open"] {
|
|
98
|
+
translate: 0 0;
|
|
99
|
+
}
|
|
100
|
+
.glass-reveal[data-state="closed"][data-side="top"] {
|
|
101
|
+
translate: 0 var(--glass-reveal-slide);
|
|
102
|
+
}
|
|
103
|
+
.glass-reveal[data-state="closed"][data-side="bottom"] {
|
|
104
|
+
translate: 0 calc(-1 * var(--glass-reveal-slide));
|
|
105
|
+
}
|
|
106
|
+
.glass-reveal[data-state="closed"][data-side="left"] {
|
|
107
|
+
translate: var(--glass-reveal-slide) 0;
|
|
108
|
+
}
|
|
109
|
+
.glass-reveal[data-state="closed"][data-side="right"] {
|
|
110
|
+
translate: calc(-1 * var(--glass-reveal-slide)) 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* ── REDUCED-MOTION CARVE (the vestibular floor — WCAG 2.3.3) ──────────────────
|
|
115
|
+
* Under `prefers-reduced-motion: reduce` the reveal SNAPS the spatial channels to
|
|
116
|
+
* their endpoints (scale → none, translate → none) and the blur-settle to none —
|
|
117
|
+
* ZERO transform/blur frames. The OPACITY fade SURVIVES (opacity is not a vestibular
|
|
118
|
+
* trigger; the surface fades, never flies, never disappears). The fade rides the
|
|
119
|
+
* short `--duration-fast` clock (the `.glass-top-layer` PRM precedent). */
|
|
120
|
+
@media (prefers-reduced-motion: reduce) {
|
|
121
|
+
.glass-reveal {
|
|
122
|
+
scale: none;
|
|
123
|
+
translate: none;
|
|
124
|
+
/* The decongest snaps to clear (`filter: blur(0)`); the resting
|
|
125
|
+
`glass-floating` backdrop-filter plate blur is UNTOUCHED. */
|
|
126
|
+
filter: blur(0);
|
|
127
|
+
transition-property: opacity, display, overlay;
|
|
128
|
+
transition-duration: var(--duration-fast);
|
|
129
|
+
transition-timing-function: var(--ease-out);
|
|
130
|
+
}
|
|
131
|
+
.glass-reveal[data-state="closed"] {
|
|
132
|
+
scale: none;
|
|
133
|
+
translate: none;
|
|
134
|
+
filter: blur(0);
|
|
135
|
+
}
|
|
136
|
+
}
|