@mkbabb/glass-ui 4.0.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-DdtWXxOK.js → CommandShortcut-DvZNQ_HF.js} +4 -4
- package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
- package/dist/{ContextMenuContent-ON3x7cuk.js → ContextMenuContent-uWnVxDab.js} +1 -1
- package/dist/{ContextMenuSubContent-B0Vs6atR.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
- package/dist/{DataTable-C464Zbqd.js → DataTable-CuKwF7wr.js} +4 -4
- package/dist/{DialogContent-DDE6pQBU.js → DialogContent-DcKK8k9i.js} +5 -5
- package/dist/{DialogFooter-8eZbdmPc.js → DialogFooter-BZNX5aVr.js} +3 -3
- package/dist/{FadingScroll-DwNnvKMs.js → FadingScroll-DI6hQhT9.js} +1 -1
- package/dist/{HoverCardContent-DkMaQzH5.js → HoverCardContent-b2uaAMRR.js} +1 -1
- package/dist/{HoverPopover-Dpzwvc4t.js → HoverPopover-CbqbNwgU.js} +2 -2
- package/dist/{IconChip-BDw1j5mu.js → IconChip-BTD-nay5.js} +3 -2
- package/dist/{IconTooltip-DSjasZIt.js → IconTooltip-Bl8gFZ8d.js} +1 -1
- package/dist/{Input-DVG_J0ne.js → Input-h9v5LeXf.js} +1 -1
- package/dist/{MetricBadge-BpC0R_Ec.js → MetricBadge-RHdBP72w.js} +1 -1
- package/dist/Notification-VUwexFUf.js +43 -0
- package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
- package/dist/{PopoverContent-BTorlp--.js → PopoverContent-DL7E6vJP.js} +4 -4
- package/dist/{Progress-hAT4gqGH.js → Progress-DctG61iZ.js} +4 -4
- package/dist/{ScrollingText-CUVFTWk2.js → ScrollingText-yOpBzFYq.js} +2 -2
- package/dist/{SelectScrollDownButton-C1jb3b3K.js → SelectScrollDownButton-CrA8F0iV.js} +18 -19
- package/dist/Toaster-Bw4xR8xV.js +274 -0
- package/dist/{ToggleGroupItem-Dzk9hWsF.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 +8 -3
- package/dist/api/types-extra.d.ts +6 -0
- package/dist/aurora.js +885 -242
- package/dist/badge.js +1 -1
- package/dist/border-progress.d.ts +1 -0
- package/dist/border-progress.js +106 -0
- package/dist/{button-BNDWhAZb.js → button-DYCUa-tH.js} +71 -26
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -2
- package/dist/card.js +2 -2
- package/dist/carousel.js +93 -110
- package/dist/collapsible.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 +2 -2
- package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -12
- 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 +2 -1
- 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/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/dock/DockIconButton.vue.d.ts +13 -4
- package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
- 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/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/fourier-field/FourierField.vue.d.ts +12 -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/glass-panel/GlassPanel.vue.d.ts +1 -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 +18 -11
- package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
- package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
- package/dist/components/custom/handmark/HandMark.vue.d.ts +1 -1
- package/dist/components/custom/icon-chip/types.d.ts +11 -1
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +3 -1
- package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
- 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 +10 -0
- package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +1 -1
- package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
- 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/command/Command.vue.d.ts +1 -1
- package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +7 -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 -0
- package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
- package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
- package/dist/components/ui/sheet/index.d.ts +1 -1
- 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/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/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 +11 -11
- package/dist/context-menu.js +3 -3
- package/dist/controls.js +1 -1
- package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +564 -457
- package/dist/{dockContext-Bu1Avy-a.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-BJ7E9js_.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 +7 -4
- package/dist/fading-scroll.js +1 -1
- 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 +128 -116
- package/dist/fourier-math.js +1 -1
- package/dist/glass-panel.js +2 -2
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +149 -341
- package/dist/goo-blob.js +830 -224
- package/dist/handmark.js +2 -2
- 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.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/instrument-chassis.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +6 -6
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +1 -1
- package/dist/metric-stack.js +4 -8
- package/dist/motion-core.js +36 -36
- 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.js +1 -1
- package/dist/paper-backdrop.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/{compile-EXXzEr1q.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 +9 -11
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/{sheet-CquRYOAw.js → sheet-tZMg0E0w.js} +5 -5
- package/dist/sheet.js +1 -1
- package/dist/{slider-DQ95MET2.js → slider-DVb4HXU-.js} +3 -3
- 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 +33 -9
- 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/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 +45 -0
- package/dist/styles/dock/layers.css +54 -30
- package/dist/styles/dock/morph.css +124 -7
- package/dist/styles/dock/overflow.css +16 -2
- package/dist/styles/dock/shell.css +54 -16
- package/dist/styles/dock.css +32 -0
- package/dist/styles/drawer.css +81 -35
- package/dist/styles/glass/deep.css +44 -0
- package/dist/styles/glass/ladder.css +87 -31
- 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/surfaces.css +101 -3
- package/dist/styles/glass-refract.css +96 -44
- package/dist/styles/glass-specular-track.css +7 -0
- package/dist/styles/glass.css +3 -0
- package/dist/styles/hover-popover.css +7 -6
- package/dist/styles/icon-chip.css +77 -15
- package/dist/styles/index.css +21 -9
- package/dist/styles/instrument-chassis.css +66 -3
- package/dist/styles/scroll-choreography.css +300 -0
- package/dist/styles/segmented-tabs.css +31 -0
- package/dist/styles/theme/bridges.css +11 -0
- package/dist/styles/theme/literals.css +11 -2
- package/dist/styles/theme/radius.css +6 -1
- package/dist/styles/tokens/dark-arm.css +98 -26
- package/dist/styles/tokens/glass-deep.css +75 -0
- package/dist/styles/tokens/glass-fx.css +333 -0
- package/dist/styles/tokens/glass.css +39 -319
- package/dist/styles/tokens/light-dark.css +15 -2
- 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 +127 -0
- package/dist/styles/tokens/scale-paper.css +117 -89
- package/dist/styles/tokens/scheme-motion.css +70 -32
- package/dist/styles/tokens/scroll-tokens.css +123 -0
- package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
- package/dist/styles/tokens.css +9 -3
- package/dist/styles/typography/semantic.css +8 -8
- package/dist/styles/typography/utilities.css +22 -7
- package/dist/styles/utilities/animate.css +27 -24
- package/dist/styles/utilities/base-misc.css +255 -0
- package/dist/styles/utilities/base.css +47 -261
- package/dist/styles/utilities/btn.css +3 -1
- package/dist/styles/utilities/metal.css +189 -0
- package/dist/styles/utilities.css +14 -7
- package/dist/switch.js +1 -1
- package/dist/tabs.js +220 -107
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.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/useLiquidPress-kfb4KX79.js +39 -0
- package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
- package/dist/useSpring-C0jyvEJB.js +40 -0
- package/dist/useSpringMount-q1amq1SJ.js +71 -0
- package/dist/useSpringPress-BsqPr7FJ.js +34 -0
- package/dist/{useTouchGate-28Tk2-t2.js → useTouchGate-CBZTD4SD.js} +1 -1
- package/dist/vSpecular-CQFmLNzA.js +68 -0
- package/dist/vendor-CKmzio-i.js +226 -0
- package/dist/watercolor-dot.js +2 -2
- package/package.json +126 -22
- package/src/styles/animations.css +33 -9
- package/src/styles/border-progress.css +109 -0
- package/src/styles/cards.css +76 -0
- package/src/styles/critical-partition.mjs +140 -0
- package/src/styles/dock/density.css +45 -0
- package/src/styles/dock/layers.css +54 -30
- package/src/styles/dock/morph.css +124 -7
- package/src/styles/dock/overflow.css +16 -2
- package/src/styles/dock/shell.css +54 -16
- package/src/styles/dock.css +32 -0
- package/src/styles/drawer.css +81 -35
- package/src/styles/glass/deep.css +44 -0
- package/src/styles/glass/ladder.css +87 -31
- 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/surfaces.css +101 -3
- package/src/styles/glass-refract.css +96 -44
- package/src/styles/glass-specular-track.css +7 -0
- package/src/styles/glass.css +3 -0
- package/src/styles/hover-popover.css +7 -6
- package/src/styles/icon-chip.css +77 -15
- package/src/styles/index.css +12 -0
- package/src/styles/instrument-chassis.css +66 -3
- package/src/styles/scroll-choreography.css +300 -0
- package/src/styles/segmented-tabs.css +31 -0
- package/src/styles/theme/bridges.css +11 -0
- package/src/styles/theme/literals.css +11 -2
- package/src/styles/theme/radius.css +6 -1
- package/src/styles/tokens/dark-arm.css +98 -26
- package/src/styles/tokens/glass-deep.css +75 -0
- package/src/styles/tokens/glass-fx.css +333 -0
- package/src/styles/tokens/glass.css +39 -319
- package/src/styles/tokens/light-dark.css +15 -2
- 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 +127 -0
- package/src/styles/tokens/scale-paper.css +117 -89
- package/src/styles/tokens/scheme-motion.css +70 -32
- package/src/styles/tokens/scroll-tokens.css +123 -0
- package/src/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
- package/src/styles/tokens.css +9 -3
- package/src/styles/typography/semantic.css +8 -8
- package/src/styles/typography/utilities.css +22 -7
- package/src/styles/utilities/animate.css +27 -24
- package/src/styles/utilities/base-misc.css +255 -0
- package/src/styles/utilities/base.css +47 -261
- package/src/styles/utilities/btn.css +3 -1
- package/src/styles/utilities/metal.css +189 -0
- package/src/styles/utilities.css +14 -7
- package/dist/CardAction-XH4YBVEK.js +0 -158
- package/dist/Notification-DKjKsQq8.js +0 -100
- package/dist/NumberFieldContent-1VtwDSgf.js +0 -145
- package/dist/Toaster-Bm_HQSpc.js +0 -263
- 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/createLucideIcon-DydS2qgk.js +0 -43
- package/dist/minimize-2-BV31Ob_h.js +0 -38
- package/dist/search-BSGrf2Sk.js +0 -12
- package/dist/useCanvas2D-ClrQuZtp.js +0 -96
- package/dist/useConfiguratorState-kiIlun8I.js +0 -303
- package/dist/useSpecularTracking-Bo5su68i.js +0 -32
- package/dist/useSpringMount-CvopqiFr.js +0 -108
- package/dist/useViewTransition-COsPjQVZ.js +0 -47
- package/dist/x-BUwTKe50.js +0 -10
- /package/dist/{CollapsibleContent-C_s6fG7r.js → CollapsibleContent-68dEXIAl.js} +0 -0
- /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
- /package/dist/{Label-Ck9SWEKM.js → Label-C2ejNWeC.js} +0 -0
- /package/dist/{ModalOverlay-CkPRRgl_.js → ModalOverlay-D1VrWyoi.js} +0 -0
- /package/dist/{PaperBackdrop-nBKe0vkB.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
- /package/dist/{SelectGroup-Dcczq44n.js → SelectGroup-DwwjicPY.js} +0 -0
- /package/dist/{SelectSeparator-DK2y1Bun.js → SelectSeparator-DXswVdRz.js} +0 -0
- /package/dist/{Separator-BArl4OaB.js → Separator-pKF0oA4M.js} +0 -0
- /package/dist/{Switch-Dr--uLGH.js → Switch-CwYNf8bo.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-CBt_VvXa.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
- /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
- /package/dist/{createContext-B2RaZ-b8.js → createContext-CpBNTRMI.js} +0 -0
- /package/dist/{math-DeuJwLFx.js → math-BINYmg5z.js} +0 -0
- /package/dist/{menuItemVariants-DWRQXBxJ.js → menuItemVariants-D8VNHq22.js} +0 -0
- /package/dist/{prng-Cg22zv8g.js → prng-Za0Rmgag.js} +0 -0
- /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
- /package/dist/{springPresets-WXaLbu8u.js → springPresets-CFQGQfdl.js} +0 -0
- /package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-BfUq2bUM.js} +0 -0
- /package/dist/{useInterval-CNdua40W.js → useInterval-CvK1mL92.js} +0 -0
- /package/dist/{useLiquidFlex-C12hXwOZ.js → useLiquidFlex-mZPMiNXh.js} +0 -0
- /package/dist/{useRAFLoop-CdwJ7284.js → useRAFLoop-UYa4zoiN.js} +0 -0
- /package/dist/{useResizeObserver-V6nq5gJb.js → useResizeObserver-Bpoi7tRE.js} +0 -0
- /package/dist/{useResolveTokenColor-NUG2zYAW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
- /package/dist/{useSortable-BVqlJRBR.js → useSortable-DHjtZSEd.js} +0 -0
- /package/dist/{useSurfaceAxis-CMnF2zHb.js → useSurfaceAxis-g0NloYEF.js} +0 -0
- /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-CWEi25hf.js} +0 -0
- /package/dist/{useTimer-B_PAasDL.js → useTimer-BHJOKr35.js} +0 -0
- /package/dist/{useUserInvalidAria-CDfJuakL.js → useUserInvalidAria-y5namzeE.js} +0 -0
- /package/dist/{useViewportReady-CvBcCYDf.js → useViewportReady-anbac3m6.js} +0 -0
- /package/dist/{vReveal-D9k0jADx.js → vReveal-Czsb7zQC.js} +0 -0
|
@@ -18,7 +18,12 @@
|
|
|
18
18
|
position: relative;
|
|
19
19
|
background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
|
|
20
20
|
backdrop-filter: var(--glass-blur-quiet);
|
|
21
|
-
border
|
|
21
|
+
/* BB.W-GLASS-ACCENT — the card border feeds its focus-elevation ink into the
|
|
22
|
+
accent-composed `--glass-border-accent` (ladder.css rim group); byte-
|
|
23
|
+
identical at 0% strength. The focus rung still re-points `--card-focus-
|
|
24
|
+
border`, which flows through `--glass-border-rung`. */
|
|
25
|
+
--glass-border-rung: var(--card-focus-border);
|
|
26
|
+
border: 1px solid var(--glass-border-accent);
|
|
22
27
|
border-radius: var(--radius-card);
|
|
23
28
|
box-shadow: var(--glass-material-rim), var(--card-focus-shadow);
|
|
24
29
|
/* AY.W-A11Y-PERF O-4 — upgrade `layout style` → include `paint` so the
|
|
@@ -181,6 +186,96 @@
|
|
|
181
186
|
dedup-and-keep-prefixed, which modern Chromium then drops). */
|
|
182
187
|
.btn-glass {
|
|
183
188
|
backdrop-filter: var(--glass-blur-btn);
|
|
189
|
+
|
|
190
|
+
/* BB.W-BUTTON-GLASS (d) — the button-scoped DEPTH stack + the hover-specular
|
|
191
|
+
bump. The glass button was the flattest wash rung (a bare backdrop-filter,
|
|
192
|
+
no rim, no under-shadow) — it read as a tinted rectangle, not a lifted
|
|
193
|
+
glass lozenge. The `--glass-btn-*` knobs compose ALREADY-MINTED tokens (the
|
|
194
|
+
`--glass-edge-light` rim + the `quiet`/`resting`-tier `--glass-under-shadow-*`
|
|
195
|
+
drop) so a consumer retints the whole button depth from ONE override; NO new
|
|
196
|
+
compositing axis. The rim+under-shadow lifts the lozenge; the box-shadow is
|
|
197
|
+
additive over the variant's own focus/press shadow legs (the `.btn-pill`
|
|
198
|
+
transition carries box-shadow on the §6 bezier, so the depth cross-fades
|
|
199
|
+
coherently). */
|
|
200
|
+
--glass-btn-rim: var(--glass-edge-light);
|
|
201
|
+
--glass-btn-under-shadow: var(--glass-under-shadow-quiet);
|
|
202
|
+
--glass-btn-under-shadow-hover: var(--glass-under-shadow-default);
|
|
203
|
+
box-shadow: var(--glass-btn-rim), var(--glass-btn-under-shadow);
|
|
204
|
+
/* The button-scoped hover gleam bump (0.10 → ~0.14): a hovered glass button
|
|
205
|
+
reads a notch brighter at the grazing edge than the global hover whisper.
|
|
206
|
+
Token-scoped to `.btn-glass` (NOT the global `:root` cohort property-regs.css
|
|
207
|
+
owns) so only the button lifts. The active/rest rungs ride the global cohort
|
|
208
|
+
(the press whisper + the dormant rest). */
|
|
209
|
+
--glass-specular-intensity-hover: var(--glass-specular-btn-hover);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* The depth deepens one rung on hover (the lifted-lozenge read) — additive over
|
|
213
|
+
the variant's own hover surface legs. The variants paint the bg/border on
|
|
214
|
+
hover; this adds the deeper drop. */
|
|
215
|
+
.btn-glass:hover:not(:disabled, [data-disabled]) {
|
|
216
|
+
box-shadow: var(--glass-btn-rim), var(--glass-btn-under-shadow-hover);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* BB.W-BUTTON-GLASS (a) — the ELEMENT-LEVEL oklab-tinted hover/active fill pair
|
|
220
|
+
(the substitution-vs-inheritance trap fixed on the button register). The glass
|
|
221
|
+
button variants painted `hover:bg-(--glass-bg-resting) active:bg-(--glass-bg-
|
|
222
|
+
floating)` — the RAW `:root` rung tokens, which carry NO `color-mix(in oklab, …,
|
|
223
|
+
--glass-tint-source --glass-tint-strength)` wrapper. So the W55 adaptive darken
|
|
224
|
+
+ the `contrast-color()` ink flip + the content-tier floor (all of which the REST
|
|
225
|
+
bg `.glass-wash` composes via the element-level oklab seam) DROPPED the moment the
|
|
226
|
+
pointer landed — "more glass would cost legibility" exactly inverted from the
|
|
227
|
+
iOS-27 ask. These two tokens wrap the raw rungs in the SAME element-level oklab
|
|
228
|
+
seam `ladder.css` composes for the rest bg + `--glass-bg-dock` for the dock — ZERO
|
|
229
|
+
new compositing axis, the literal darken-over-light recipe reached at the lit
|
|
230
|
+
fill. ZERO-delta at the `--glass-tint-strength: 0%`/floor default (the mix toward
|
|
231
|
+
the source is 0%); under the declared/sampled bright bucket the lit fill darkens
|
|
232
|
+
to AA in lockstep with the rest bg. The `:root` raw `--glass-bg-*` tokens are
|
|
233
|
+
UNTOUCHED (other surfaces compose them at the element correctly — the raw token +
|
|
234
|
+
the element-level oklab wrapper is the correct ladder shape). */
|
|
235
|
+
.btn-glass {
|
|
236
|
+
--glass-bg-resting-tinted: color-mix(
|
|
237
|
+
in oklab,
|
|
238
|
+
var(--glass-bg-resting),
|
|
239
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
240
|
+
);
|
|
241
|
+
--glass-bg-floating-tinted: color-mix(
|
|
242
|
+
in oklab,
|
|
243
|
+
var(--glass-bg-floating),
|
|
244
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* BB.W-BUTTON-GLASS (e) — the optional refraction-edge opt-in. CONSUMES the
|
|
249
|
+
EXISTING refraction axis (glass-refract.css, the `#glass-refract` SVG-filter
|
|
250
|
+
lens, `@supports (backdrop-filter: url(#…))`-gated with the un-gated blur base
|
|
251
|
+
as the off-Chromium floor) — NEVER a button-local lens fork. BB.W-LENSING landed
|
|
252
|
+
the squircle bevel-profile + the typed `--glass-refract` axis + the `.glass-lens`
|
|
253
|
+
opt-in class (renamed off `.glass-refract`, clean break); the button COMPOSES
|
|
254
|
+
`.glass-lens`.
|
|
255
|
+
|
|
256
|
+
A `<Button :liquid>` adds `.glass-lens` to the host; on a supporting engine the
|
|
257
|
+
button reads the edge-bend over its blur base. The base recipe (the
|
|
258
|
+
`@supports`-gated `.glass-lens` rule in glass-refract.css) already paints the
|
|
259
|
+
displacement filter over `--glass-blur-resting`; this block adds NOTHING to the
|
|
260
|
+
filter graph (it would fork the axis) — the button merely COMPOSES `.glass-lens`.
|
|
261
|
+
|
|
262
|
+
The `:active` LENS-SWELL is the CHEAP coupled read, NOT a per-frame displacement-
|
|
263
|
+
map re-rasterize (the §Triumvirate / R2 budget: `feDisplacementMap` is resize-
|
|
264
|
+
expensive — only the `scale` attr animates without rebuilding the map, and even
|
|
265
|
+
that re-rasterizes; the one-refractive-element-per-route budget forbids the per-
|
|
266
|
+
frame cost). The swell is the press SQUISH (Button.vue, the `useLiquidFlex`
|
|
267
|
+
reciprocal X/Y deform) + the coupled `--glass-specular-intensity-active` gleam
|
|
268
|
+
lift on the SAME `--glass-btn-press-t` drive — the glass reads as DEFORMING under
|
|
269
|
+
the press without re-rasterizing the lens map. Off-Chromium the whole arm degrades
|
|
270
|
+
to the un-gated `.btn-glass` blur+tint base (the no-workaround floor). The
|
|
271
|
+
`--glass-btn-press-t` typed drive (property-regs.css) is the ONE press scalar the
|
|
272
|
+
squish + the gleam coupling both read. */
|
|
273
|
+
.btn-glass.glass-lens {
|
|
274
|
+
/* The press drive scalar (0 rest → 1 pressed) Button.vue writes off the spring;
|
|
275
|
+
the resting default is 0 so an unwired refraction button is the static lens.
|
|
276
|
+
The `:active` LENS-SWELL on this drive lives in material.css's `.glass-lens`
|
|
277
|
+
block (`--glass-refract` bumps on press); this block only floors the drive. */
|
|
278
|
+
--glass-btn-press-t: 0;
|
|
184
279
|
}
|
|
185
280
|
|
|
186
281
|
/* ── Pill input ───────────────────────────────── */
|
|
@@ -289,8 +384,11 @@
|
|
|
289
384
|
invalid field shows the destructive ring on focus too. */
|
|
290
385
|
.input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
|
|
291
386
|
border-color: var(--destructive);
|
|
292
|
-
|
|
293
|
-
|
|
387
|
+
/* BB.W-INVALID-RING — the shared destructive ring register (the
|
|
388
|
+
--focus-ring-shadow sibling). The byte-identical recipe is now ONE
|
|
389
|
+
token; the `8%` at-rest bg arm above stays `.input-pill`-local (a
|
|
390
|
+
glass-tint substrate the bare-ring surfaces do not carry). */
|
|
391
|
+
box-shadow: var(--invalid-ring);
|
|
294
392
|
}
|
|
295
393
|
|
|
296
394
|
/* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
|
|
@@ -1,59 +1,111 @@
|
|
|
1
|
-
/*
|
|
2
|
-
*
|
|
3
|
-
*
|
|
1
|
+
/* BB.W-LENSING — the #glass-refract edge-lensing SVG filter, EVOLVED off the
|
|
2
|
+
* AW.W23 crude-radial garnish onto the real squircle bevel-profile + the typed
|
|
3
|
+
* `--glass-refract` axis driving the animatable displacement `scale` (the press
|
|
4
|
+
* lens-swell). Shipped as a library asset so `.glass-lens` works OUT OF THE BOX
|
|
5
|
+
* (no consumer hand-mounts a filter node).
|
|
4
6
|
*
|
|
5
|
-
* The refraction recipe is the canonical 3-primitive graph (kube.io /
|
|
7
|
+
* The refraction recipe is the canonical 3-primitive graph (kube.io / ekino /
|
|
6
8
|
* LogRocket, 2025):
|
|
7
9
|
*
|
|
8
|
-
* feImage —
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* feImage — the displacement map computed from the convex-squircle
|
|
11
|
+
* surface profile f(x) = ⁴√(1 − (1 − x)⁴) (Apple's preferred
|
|
12
|
+
* corner curve) via Snell's law (n₁ = 1 air, n₂ = 1.5 glass).
|
|
13
|
+
* The map's R channel carries the x-shift and G the y-shift
|
|
14
|
+
* (neutral 128 = no shift). The squircle slope is near-flat past
|
|
15
|
+
* the outer ~14% band and STEEP at the rim, so the bend
|
|
16
|
+
* CONCENTRATES at the edge (thin interior) — the iOS edge-lensing
|
|
17
|
+
* read, NOT a uniform radial bulge (the retired AW.W23 placeholder).
|
|
18
|
+
* Encoding: TWO crossed linear gradients — a HORIZONTAL gradient
|
|
19
|
+
* drives the R channel (255 @0% → 128 across the flat interior →
|
|
20
|
+
* 0 @100%, the squircle ramp held in the bevel band) and a VERTICAL
|
|
21
|
+
* gradient drives the G channel the same way — SCREEN-composited
|
|
22
|
+
* over a black base so each channel carries its own axis EXACTLY
|
|
23
|
+
* (`screen(C, 0) = C`; the displacement map reads only R/G, B unused).
|
|
24
|
+
* The map carries ZERO color (the warm-cream identity HOLDS —
|
|
25
|
+
* refraction is DEPTH not hue). The asset is baked ONCE (the
|
|
26
|
+
* squircle CURVE is fixed, the Apple-preferred profile); only the
|
|
27
|
+
* `scale` param animates the magnitude (scope 2 — no map re-bake).
|
|
16
28
|
* feDisplacementMap— displaces the backdrop by the baked map (R = x-shift,
|
|
17
|
-
* G = y-shift, `scale` = max px
|
|
18
|
-
* feImage specular — a soft top-left specular highlight
|
|
19
|
-
*
|
|
20
|
-
*
|
|
29
|
+
* G = y-shift, `scale` = max px the `--glass-refract` axis drives).
|
|
30
|
+
* feImage specular — a soft warm top-left specular highlight (PRESERVED from HEAD —
|
|
31
|
+
* the polished-glass catch).
|
|
32
|
+
* feBlend screen — blended `screen` over the displaced backdrop.
|
|
21
33
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
34
|
+
* DDR-LENS-BAKE — the displacement `scale` is a BAKED LITERAL (`scale='28'`, the §10
|
|
35
|
+
* default depth), NOT a var()-driven axis. WHY (the reversal of BB.W-LENSING scope 2):
|
|
36
|
+
* the scope-2 design split the filter across `var(--…head) var(--glass-refract) var(--…tail)`
|
|
37
|
+
* to splice the typed `@property --glass-refract` value between a head ending `…scale='`
|
|
38
|
+
* and a tail beginning `'…`. That construction is doubly broken, proven on the real edge
|
|
39
|
+
* (Chromium, playwright):
|
|
40
|
+
* (1) PARSE — head/tail each carry a COMPLETE `url(…)`, so the composite is the three
|
|
41
|
+
* tokens `url("…") 28 url("…")`, which a `backdrop-filter` REJECTS. The lens
|
|
42
|
+
* computed-`backdrop-filter: none` — it never rendered. (A var() inside a single
|
|
43
|
+
* url() STRING token is not re-tokenised by the engine either — tested — so there
|
|
44
|
+
* is no CSS-legal path to a dynamic `scale` inside one self-contained data-URI.)
|
|
45
|
+
* (2) BUNDLER — the tail `url("'…")` starts with a bare quote, so a consumer's CSS
|
|
46
|
+
* url()-rewriter (vite/postcss) reads it as a relative asset path and fails
|
|
47
|
+
* `ENOENT: open ''`, breaking EVERY bundler-based consumer.
|
|
48
|
+
* The fix: ONE complete, valid `url("data:…scale='28'…")` token. A `data:` URI is the
|
|
49
|
+
* single form that both PARSES as a filter value AND is skipped by the url()-rewriter
|
|
50
|
+
* (the rewriter only resolves non-data/non-#/non-http content as a file). RE-LITIGATE-IF
|
|
51
|
+
* the platform ships a way to substitute a value into a url() string token (then the
|
|
52
|
+
* press-swell `scale` animation could return). TRADEOFF: the per-instance `:active`
|
|
53
|
+
* lens-swell (28→44 `scale` on press) is dropped — but it was already inert (it animated
|
|
54
|
+
* a value that reached no rendering filter), so the lived read is UNCHANGED (and the lens
|
|
55
|
+
* now actually renders). The `@property --glass-refract` reg + `--glass-refract-swell`
|
|
56
|
+
* knob are retired with it. The bevel-band width is the `--glass-refract-bevel` knob
|
|
57
|
+
* (default 14% — the iOS edge band); the baked stops fix the squircle CURVE, the knob
|
|
58
|
+
* documents the rim concentration the map encodes.
|
|
27
59
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
60
|
+
* The filter ships INLINE as a data-URI in the `backdrop-filter` declaration, so the
|
|
61
|
+
* consumer gets it with zero markup. `backdrop-filter: url(#…)` is Chromium-only (WebKit
|
|
62
|
+
* bug 245510 open, Firefox not shipping), so the whole decl sits behind
|
|
63
|
+
* `@supports (backdrop-filter: url(#…))`; a non-supporting engine paints the un-gated blur
|
|
64
|
+
* base alone (no broken `url()` reference — the no-workaround degrade floor, PRESERVED).
|
|
65
|
+
*
|
|
66
|
+
* CLASS RENAME (BB.W-LENSING scope 5 — clean break, no alias, BB inv-7). The AW.W23
|
|
67
|
+
* `.glass-refract` opt-in class is RENAMED to `.glass-lens` (the §2 vocabulary); the
|
|
68
|
+
* `--glass-refract*` AXIS/token names are KEPT (the lens magnitude is the refraction
|
|
69
|
+
* axis). Consumers (`<Button :liquid>`, the demo witness) compose `.glass-lens`. The
|
|
70
|
+
* rename is the only public-surface delta (MIGRATION.md row). The garnish stays PE-only
|
|
71
|
+
* over the blur base; it is NEVER promoted to the card/primitive substrate
|
|
72
|
+
* (feDisplacementMap is resize-expensive — only the `scale` param animates without
|
|
73
|
+
* rebuilding the map).
|
|
37
74
|
*/
|
|
38
75
|
|
|
39
76
|
@layer components {
|
|
40
|
-
/* The shipped filter graph as
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
77
|
+
/* The shipped filter graph as ONE self-contained data-URI SVG (`scale='28'` baked,
|
|
78
|
+
DDR-LENS-BAKE). A single `url("data:…")` token is the only form that PARSES as a
|
|
79
|
+
`backdrop-filter` value AND survives a consumer bundler's url()-rewrite (a `data:`
|
|
80
|
+
URI is skipped; any other `url("…")` content is mis-resolved as a file). The
|
|
81
|
+
`#glass-refract` id is resolvable in-document (the data-URI is self-contained). */
|
|
82
|
+
.glass-lens {
|
|
83
|
+
/* The bevel-band width the squircle map encodes (the iOS edge concentration).
|
|
84
|
+
Documents the rim thickness the baked stops fix; a consumer reads it to tune
|
|
85
|
+
the perceived rim band on a successor re-bake. */
|
|
86
|
+
--glass-refract-bevel: 14%;
|
|
87
|
+
|
|
88
|
+
/* The shipped filter — ONE complete, valid `url("data:…")` token carrying the
|
|
89
|
+
whole 3-primitive graph with the `scale='28'` baked in (the §10 default depth,
|
|
90
|
+
DDR-LENS-BAKE). A single self-contained `data:` URI is (a) the ONLY form that
|
|
91
|
+
PARSES as a `backdrop-filter` value — the prior var()-spliced head/tail emitted
|
|
92
|
+
`url("…") <n> url("…")`, three tokens a `backdrop-filter` rejects, so the lens
|
|
93
|
+
silently rendered `none`; and (b) bundler-SAFE — a consumer's CSS url()-rewriter
|
|
94
|
+
skips a `data:` URI but mis-resolves any `url("…")` whose content starts with a
|
|
95
|
+
bare char (the old tail began `'…` → ENOENT, breaking every bundler consumer).
|
|
96
|
+
See the DDR-LENS-BAKE note in the header for the lost-tunability tradeoff. */
|
|
97
|
+
--glass-refract-filter: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cfilter id=%27glass-refract%27 x=%270%27 y=%270%27 width=%27100%25%27 height=%27100%25%27%3E%3CfeImage href=%27data:image/svg+xml,%253Csvg xmlns=%2522http://www.w3.org/2000/svg%2522 width=%2522100%2522 height=%2522100%2522%253E%253ClinearGradient id=%2522hx%2522 x1=%25220%2522 y1=%25220%2522 x2=%2522100%2525%2522 y2=%25220%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgb(255,0,0)%2522/%253E%253Cstop offset=%252214%2525%2522 stop-color=%2522rgb(128,0,0)%2522/%253E%253Cstop offset=%252286%2525%2522 stop-color=%2522rgb(128,0,0)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgb(0,0,0)%2522/%253E%253C/linearGradient%253E%253ClinearGradient id=%2522vy%2522 x1=%25220%2522 y1=%25220%2522 x2=%25220%2522 y2=%2522100%2525%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgb(0,255,0)%2522/%253E%253Cstop offset=%252214%2525%2522 stop-color=%2522rgb(0,128,0)%2522/%253E%253Cstop offset=%252286%2525%2522 stop-color=%2522rgb(0,128,0)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgb(0,0,0)%2522/%253E%253C/linearGradient%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522black%2522/%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523hx)%2522/%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523vy)%2522 style=%2522mix-blend-mode:screen%2522/%253E%253C/svg%253E%27 result=%27map%27/%3E%3CfeDisplacementMap in=%27SourceGraphic%27 in2=%27map%27 scale=%2728%27 xChannelSelector=%27R%27 yChannelSelector=%27G%27 result=%27disp%27/%3E%3CfeImage href=%27data:image/svg+xml,%253Csvg xmlns=%2522http://www.w3.org/2000/svg%2522 width=%2522100%2522 height=%2522100%2522%253E%253CradialGradient id=%2522s%2522 cx=%252230%2525%2522 cy=%252225%2525%2522 r=%252260%2525%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgba(255,255,255,0.5)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgba(255,255,255,0)%2522/%253E%253C/radialGradient%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523s)%2522/%253E%253C/svg%253E%27 result=%27spec%27/%3E%3CfeBlend in=%27disp%27 in2=%27spec%27 mode=%27screen%27/%3E%3C/filter%3E%3C/svg%3E%23glass-refract");
|
|
47
98
|
}
|
|
48
99
|
|
|
49
|
-
/* The gated consuming selector
|
|
50
|
-
|
|
51
|
-
refraction composes the shipped `#glass-refract` filter OVER the host's
|
|
52
|
-
|
|
53
|
-
|
|
100
|
+
/* The gated consuming selector. The squircle map + the baked `scale='28'` ride
|
|
101
|
+
INSIDE the `@supports (backdrop-filter: url(#…))` block;
|
|
102
|
+
the refraction composes the shipped `#glass-refract` filter OVER the host's existing
|
|
103
|
+
blur — additive (the blur already painted, this bends + concentrates the refraction
|
|
104
|
+
at the rim where the engine supports it). A non-supporting engine never reaches this
|
|
105
|
+
block and paints the un-gated `--glass-blur-*` + `--glass-tint-*` base ALONE. */
|
|
54
106
|
@supports (backdrop-filter: url("#glass-refract")) {
|
|
55
|
-
.glass-material.glass-
|
|
56
|
-
.glass-
|
|
107
|
+
.glass-material.glass-lens,
|
|
108
|
+
.glass-lens {
|
|
57
109
|
backdrop-filter: var(--glass-blur-resting) var(--glass-refract-filter);
|
|
58
110
|
}
|
|
59
111
|
}
|
|
@@ -43,6 +43,13 @@
|
|
|
43
43
|
.glass-specular-track::before {
|
|
44
44
|
--specular-x: 50%;
|
|
45
45
|
--specular-y: 50%;
|
|
46
|
+
/* BB.W-LENSING — pin the EDGE-glint angle static too (the conic seats at its
|
|
47
|
+
`0deg` top-edge rest). The `useSpecularPointer` leaf already skips the angle
|
|
48
|
+
write under PRM; this is the CSS belt-and-braces pin so the rim glint never
|
|
49
|
+
drifts under reduce. The lens-swell drive also snaps (Button.vue / .tap-squish
|
|
50
|
+
PRM carve), so the whole motion-reactive lens reaches rest with no in-between
|
|
51
|
+
frames — the gesture functions, the physics off. */
|
|
52
|
+
--specular-angle: 0deg;
|
|
46
53
|
transition: none;
|
|
47
54
|
}
|
|
48
55
|
}
|
package/src/styles/glass.css
CHANGED
|
@@ -46,8 +46,11 @@
|
|
|
46
46
|
squircle + a11y @supports overrides, which must stay last): */
|
|
47
47
|
@import "./glass/material.css";
|
|
48
48
|
@import "./glass/ladder.css";
|
|
49
|
+
@import "./glass/rim.css";
|
|
49
50
|
@import "./glass/surfaces.css";
|
|
50
51
|
@import "./glass/surface-axis.css";
|
|
52
|
+
@import "./glass/reveal.css";
|
|
53
|
+
@import "./glass/deep.css";
|
|
51
54
|
@import "./glass/progress-rail.css";
|
|
52
55
|
@import "./glass/squircle.css";
|
|
53
56
|
@import "./glass/a11y-fallback.css";
|
|
@@ -35,10 +35,11 @@
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
/* The data-state animation grammar canonicalises onto `.
|
|
39
|
-
(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
/* The data-state animation grammar canonicalises onto `.glass-reveal`
|
|
39
|
+
(BB.W-LIQUID-REVEAL — off the retired `popover-animate` bezier zoom-95, clean
|
|
40
|
+
break). Authors compose `class="hover-popover-panel glass-reveal"` on the panel
|
|
41
|
+
root so the spring-clocked LIQUID-ENTER grammar (the coupled scale+fade+filter
|
|
42
|
+
blur-settle, glass/reveal.css) replaces the bespoke `hover-popover-in/out`
|
|
43
|
+
keyframes that lived here. The `prefers-reduced-motion` carve is handled at the
|
|
44
|
+
canonical site (`glass/reveal.css`'s reduced-motion block) so it cascades to all
|
|
44
45
|
popover-animation consumers automatically. */
|
package/src/styles/icon-chip.css
CHANGED
|
@@ -9,15 +9,22 @@
|
|
|
9
9
|
* lives ONCE and proof:suffuse asserts against one component, not N pastes.
|
|
10
10
|
*
|
|
11
11
|
* THE INTERPOLATION SPACE — `in srgb` (DELIBERATE, recorded). The backplate is
|
|
12
|
-
* a foreground-over-transparent overlay at a hand-tuned
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
12
|
+
* a foreground-over-transparent overlay at a hand-tuned α stop — the SAME shape
|
|
13
|
+
* as the `--surface-tint-*` brand family, which CLAUDE.md fixes at `in srgb`
|
|
14
|
+
* (the brand-calibrated mix; switching the space shifts the resting α off its
|
|
15
|
+
* hand-set value). The chip is byte-faithful to the reference paste register
|
|
16
|
+
* (the binding W7 π target: stop-0 bg `color(srgb 0.915 0.484 0.671 / 0.25)`),
|
|
17
|
+
* so it preserves `in srgb` — the same brand-overlay path, NOT the glass-tint
|
|
18
|
+
* `in oklab` perceptual-mix path. (The spec text says `in oklab`; the resolution
|
|
19
|
+
* preserves the reference-faithful `in srgb` so the pop register does not shift
|
|
20
|
+
* — recorded in PROGRESS / the DELTA.)
|
|
21
|
+
*
|
|
22
|
+
* THE α STOP IS A TOKEN (BB.W-SUFFUSE3 c3). The hardcoded `25%` lifted onto
|
|
23
|
+
* `--icon-chip-plate-strength` (default `25%`, BYTE-IDENTICAL); the `:saturated`
|
|
24
|
+
* axis re-points it to ~40% for a louder focal pop — the STRENGTH varies, the
|
|
25
|
+
* `in srgb` space + the chip≤glyph ratio do NOT. The pop is ALIVE too: the
|
|
26
|
+
* reveal entrance + the hover-bloom GROW ride the per-spring CLOCK (the
|
|
27
|
+
* --spring-snappy/--spring-smooth registers), no longer the fixed bezier.
|
|
21
28
|
*/
|
|
22
29
|
|
|
23
30
|
:root {
|
|
@@ -30,6 +37,16 @@
|
|
|
30
37
|
/* The duotone fill α — a low-alpha fill of the same hue UNDER the
|
|
31
38
|
full-chroma stroke (the iOS/Material filled-tonal move). Mono-hue. */
|
|
32
39
|
--icon-chip-duotone-fill: 18%;
|
|
40
|
+
/* The backplate vibrancy stop (BB.W-SUFFUSE3 c3). The default reproduces
|
|
41
|
+
the reference 25% register BYTE-IDENTICALLY — the plate `color-mix`
|
|
42
|
+
reads this token instead of the hardcoded `25%`. The `:saturated` axis
|
|
43
|
+
re-points it to a louder focal stop (~40%); the STRENGTH changes, the
|
|
44
|
+
`in srgb` space + the chip≤glyph ratio do NOT (the recorded keep). Still
|
|
45
|
+
ONE color event per surface — a saturated chip is the same event,
|
|
46
|
+
louder, never a license for a second (proof:suffuse d3 counts the event
|
|
47
|
+
FAMILY, not the saturation). Token-first: a consumer retunes without a
|
|
48
|
+
component edit. */
|
|
49
|
+
--icon-chip-plate-strength: 25%;
|
|
33
50
|
/* The hover-bloom backplate lift (25% → ~35%) + the glow-ring spread. */
|
|
34
51
|
--icon-chip-bloom-mix: 35%;
|
|
35
52
|
--icon-chip-bloom-glow: 28%;
|
|
@@ -49,18 +66,25 @@
|
|
|
49
66
|
align-items: center;
|
|
50
67
|
justify-content: center;
|
|
51
68
|
border-radius: var(--radius-pill, 9999px);
|
|
52
|
-
/* The backplate — the reference recipe (`in srgb`,
|
|
69
|
+
/* The backplate — the reference recipe (`in srgb`, the --icon-chip-plate-
|
|
70
|
+
strength α stop, default 25% — BB.W-SUFFUSE3 c3 lifts the hardcoded `25%`
|
|
71
|
+
onto the token, BYTE-IDENTICAL at default). */
|
|
53
72
|
background-color: color-mix(
|
|
54
73
|
in srgb,
|
|
55
|
-
var(--icon-chip-plate-color, var(--muted))
|
|
74
|
+
var(--icon-chip-plate-color, var(--muted))
|
|
75
|
+
var(--icon-chip-plate-strength),
|
|
56
76
|
transparent
|
|
57
77
|
);
|
|
58
78
|
color: var(--icon-chip-event-color, var(--muted-foreground));
|
|
59
79
|
/* The §6 easing doctrine — surface props (bg/box-shadow) on the bezier
|
|
60
|
-
standard ease
|
|
80
|
+
standard ease. The transform leg at REST (the leave direction, reverting
|
|
81
|
+
to base) is the NO-OVERSHOOT bezier (a bloom must never overshoot past
|
|
82
|
+
gone — §6 exit law, BB.W-SUFFUSE3 c2); the hover ENTER direction lifts
|
|
83
|
+
onto --spring-smooth on the .icon-chip--bloom:hover rule below. */
|
|
61
84
|
transition:
|
|
62
85
|
background-color var(--duration-fast, 150ms) var(--ease-standard),
|
|
63
|
-
box-shadow var(--duration-fast, 150ms) var(--ease-standard)
|
|
86
|
+
box-shadow var(--duration-fast, 150ms) var(--ease-standard),
|
|
87
|
+
transform var(--duration-fast, 150ms) var(--ease-out);
|
|
64
88
|
}
|
|
65
89
|
|
|
66
90
|
.icon-chip__glyph {
|
|
@@ -76,6 +100,16 @@
|
|
|
76
100
|
border-radius: 0;
|
|
77
101
|
}
|
|
78
102
|
|
|
103
|
+
/* ── The :saturated vibrancy axis (BB.W-SUFFUSE3 c3) ───────────────────────── */
|
|
104
|
+
/* A louder, more-chromatic backplate for a genuine focal pop — the plate
|
|
105
|
+
`color-mix` re-points off the 25% reference stop to ~40%. STILL the ONE color
|
|
106
|
+
event (the same event, louder — proof:suffuse d3 counts the event FAMILY, not
|
|
107
|
+
the saturation). The interpolation STAYS `in srgb` (the recorded reference-
|
|
108
|
+
register keep) and the chip≤glyph ratio is untouched. */
|
|
109
|
+
.icon-chip--saturated {
|
|
110
|
+
--icon-chip-plate-strength: 40%;
|
|
111
|
+
}
|
|
112
|
+
|
|
79
113
|
/* ── The duotone axis — a low-alpha fill of the same hue UNDER the stroke ──── */
|
|
80
114
|
/* Lucide glyphs bake `fill: none` on the SVG root; CSS wins over the
|
|
81
115
|
presentation attribute, so the `[data-duotone] svg` rule reaches the inner
|
|
@@ -108,6 +142,16 @@
|
|
|
108
142
|
var(--icon-chip-bloom-glow),
|
|
109
143
|
transparent
|
|
110
144
|
);
|
|
145
|
+
/* The bloom GROW (BB.W-SUFFUSE3 c2) — the plate lifts a hair on the
|
|
146
|
+
§6 --spring-smooth transform register (enter smooth). The transition
|
|
147
|
+
is re-declared on :hover so the ENTER direction rides the spring; the
|
|
148
|
+
base rule's --ease-out transform leg governs the leave (no overshoot
|
|
149
|
+
past gone). The color legs stay on the bezier (base rule). */
|
|
150
|
+
transform: scale(var(--icon-chip-bloom-scale, 1.06));
|
|
151
|
+
transition:
|
|
152
|
+
background-color var(--duration-fast, 150ms) var(--ease-standard),
|
|
153
|
+
box-shadow var(--duration-fast, 150ms) var(--ease-standard),
|
|
154
|
+
transform var(--spring-smooth-duration) var(--spring-smooth);
|
|
111
155
|
}
|
|
112
156
|
/* The glyph stroke firms on the chip's own hover. */
|
|
113
157
|
.icon-chip--bloom:hover .icon-chip__glyph {
|
|
@@ -120,9 +164,19 @@
|
|
|
120
164
|
reacts ONLY on an opted-in chip (`.icon-chip--reveal`) so a non-reveal chip's
|
|
121
165
|
inert `[data-reveal]` hook never animates. PRM-gated. */
|
|
122
166
|
@media (prefers-reduced-motion: no-preference) {
|
|
167
|
+
/* BB.W-SUFFUSE3 c1 — the pop-ENTRANCE rides the per-spring CLOCK, NOT the
|
|
168
|
+
fixed --duration-medium bezier. The animation-timing-function is the
|
|
169
|
+
--spring-snappy linear() string (peaks ~1.068) and the duration is
|
|
170
|
+
--spring-snappy-duration (0.34s, the W-GLASS-CAL per-spring clock), so the
|
|
171
|
+
`scale(0.85)→1` keyframe carries the snappy spring's ~+7% overshoot then
|
|
172
|
+
settles (the springy pop, not a flat fade-up). The opacity 0→1 is COUPLED
|
|
173
|
+
on the SAME clock (the W-MOTION-CANON P3 coupled-fade — plate + glyph
|
|
174
|
+
bloom as ONE continuous layer). Compositor-only: transform/opacity only
|
|
175
|
+
(the proof:motion-compositor floor holds). The per-spring clock is the
|
|
176
|
+
W-GLASS-CAL/W-MOTION-CANON fence — CONSUMED here, never re-generated. */
|
|
123
177
|
.icon-chip--reveal[data-reveal] {
|
|
124
|
-
animation: icon-chip-reveal var(--duration
|
|
125
|
-
var(--
|
|
178
|
+
animation: icon-chip-reveal var(--spring-snappy-duration)
|
|
179
|
+
var(--spring-snappy) both;
|
|
126
180
|
animation-delay: calc(var(--d, 0) * var(--icon-chip-reveal-step));
|
|
127
181
|
}
|
|
128
182
|
}
|
|
@@ -139,7 +193,15 @@
|
|
|
139
193
|
}
|
|
140
194
|
|
|
141
195
|
/* ── The deform axes collapse under reduced motion (the PRM guard) ─────────── */
|
|
196
|
+
/* BB.W-SUFFUSE3 c1/c2 — the spring deform drops under reduce: the bloom GROW
|
|
197
|
+
scale collapses to 1 (the color cross-fade may stay — the legibility cue is
|
|
198
|
+
not motion), and the reveal pop SNAPS to its endpoint (scale 1, opacity 1,
|
|
199
|
+
zero in-between frames) via `animation: none` (the chip still APPEARS — only
|
|
200
|
+
the spring/overshoot is off; the W-MOTION-CANON P6 keep-fade/drop-transform). */
|
|
142
201
|
@media (prefers-reduced-motion: reduce) {
|
|
202
|
+
.icon-chip--bloom:hover {
|
|
203
|
+
transform: none;
|
|
204
|
+
}
|
|
143
205
|
.icon-chip--bloom:hover .icon-chip__glyph {
|
|
144
206
|
stroke-width: inherit;
|
|
145
207
|
}
|
package/src/styles/index.css
CHANGED
|
@@ -114,6 +114,12 @@
|
|
|
114
114
|
* 10a. scroll-driven.css — native scroll-driven recipes (.scroll-progress
|
|
115
115
|
* + [data-scroll-reveal]); the `@supports`-gated
|
|
116
116
|
* primary over the JS-composable fallback (AQ.W5).
|
|
117
|
+
* 10a'. scroll-choreography.css — the SOTA scroll-CHOREOGRAPHY register
|
|
118
|
+
* (.scroll-build page-build / .scroll-cascade
|
|
119
|
+
* section-cascade / .scroll-pin scroll-pinned + the
|
|
120
|
+
* native .smooth-scroll opt-in) on the native
|
|
121
|
+
* scroll()/view()/timeline-scope substrate; NO
|
|
122
|
+
* Lenis/GSAP dep (BB.W-SCROLL-MOTION).
|
|
117
123
|
* 10b. view-transition.css — the `.gl-list-item` View-Transitions group
|
|
118
124
|
* recipe + `--vt-*` axes (AQ.W5; the
|
|
119
125
|
* `useViewTransition` substrate's CSS half).
|
|
@@ -161,6 +167,7 @@
|
|
|
161
167
|
@import "./transitions.css";
|
|
162
168
|
@import "./animations.css";
|
|
163
169
|
@import "./scroll-driven.css";
|
|
170
|
+
@import "./scroll-choreography.css";
|
|
164
171
|
@import "./view-transition.css";
|
|
165
172
|
@import "./utilities.css";
|
|
166
173
|
/* BA.W-MENU-GLASS — the glass menu-row + menu-section register. @import-ed AFTER
|
|
@@ -180,6 +187,11 @@
|
|
|
180
187
|
(duotone/bloom/reveal). A component partial; the token arms (--section-color-N
|
|
181
188
|
/ --muted) auto-flip under .dark so the chip is mode-robust by construction. */
|
|
182
189
|
@import "./icon-chip.css";
|
|
190
|
+
/* BB.W-BORDER-PROGRESS — progress IS the element's border: the masked-conic ring
|
|
191
|
+
consumption (the @property reg lives in tokens/property-regs.css §18). A
|
|
192
|
+
component partial; the conic + the radius-following mask-composite + the coverage
|
|
193
|
+
masks + the PRM milestone-pulse bracket. */
|
|
194
|
+
@import "./border-progress.css";
|
|
183
195
|
|
|
184
196
|
/* Ensure Tailwind scans glass-ui's compiled component templates for the utility
|
|
185
197
|
classes they emit (CVA variant classes like text-destructive-foreground,
|
|
@@ -72,6 +72,28 @@
|
|
|
72
72
|
--phase-color: var(--muted-foreground);
|
|
73
73
|
--phase-color-label: var(--muted-foreground);
|
|
74
74
|
|
|
75
|
+
/* BB.W-PHASE-PALETTE (N18) — the `complete` phase ink is a CONSUMER
|
|
76
|
+
token, not a hardcoded brand metal. The four active phases
|
|
77
|
+
(ping/download/upload/jitter) already read a consumer-registerable
|
|
78
|
+
`--chart-{phase}` with a library `--viz-*` fallback (the bus carries
|
|
79
|
+
phase IDENTITY); `complete` was the one arm that pinned the gold
|
|
80
|
+
directly, so every completion gilded itself the moment the phase
|
|
81
|
+
flipped. `--phase-complete-color` (+ its WCAG-twin
|
|
82
|
+
`--phase-complete-color-label`) DEFAULT to the same gold the arm
|
|
83
|
+
hardcoded — an un-overriding consumer paints byte-identical gold (the
|
|
84
|
+
back-compat floor) — but a consumer (or any ancestor) overrides EITHER
|
|
85
|
+
on its host/preset to re-ink completion (its phase spectrum, an aurora
|
|
86
|
+
register, …), so gold is EARNED (the dock CTA + personal-best
|
|
87
|
+
garnish), never the chassis default leaking onto every completion.
|
|
88
|
+
The default lives at the chassis root (NOT :root/tokens.css) because
|
|
89
|
+
it is a chassis-phase register, scoped to the surface owning the bus —
|
|
90
|
+
the same home `--phase-color`'s idle default occupies above. It reads
|
|
91
|
+
`var(--color-gold)` / `var(--color-gold-dark)` (the existing mode-
|
|
92
|
+
resolved tokens, unedited), so it inherits the SAME .dark / light-dark
|
|
93
|
+
resolution the hardcoded form did. */
|
|
94
|
+
--phase-complete-color: var(--color-gold);
|
|
95
|
+
--phase-complete-color-label: var(--color-gold-dark, var(--color-gold));
|
|
96
|
+
|
|
75
97
|
/* AV.W16 TW3 — inline-size container named `chassis` so the dial reflow
|
|
76
98
|
below reads the chassis's OWN box, not the viewport (portable into a
|
|
77
99
|
narrow host). */
|
|
@@ -153,7 +175,10 @@
|
|
|
153
175
|
AND the structural twin-line grooves re-point from the warm-cream
|
|
154
176
|
`--surface-tint-*` default onto the `--silver` quad (gold's cool mirror).
|
|
155
177
|
The chassis reads as an INDUSTRIAL precision-instrument panel — the
|
|
156
|
-
cool-metal twin of the warm-gold "complete"-phase affirmation
|
|
178
|
+
cool-metal twin of the warm-gold "complete"-phase affirmation the chassis
|
|
179
|
+
ships BY DEFAULT (the `--phase-complete-color` consumer token's gold
|
|
180
|
+
default; BB.W-PHASE-PALETTE — a consumer may re-ink completion, but the
|
|
181
|
+
silver register's narration is of the warm-gold completion default).
|
|
157
182
|
|
|
158
183
|
The phase cascade (`[data-phase="…"]`) stays ORTHOGONAL — a `structure`
|
|
159
184
|
chassis still retints its phase fills on `data-phase`; only the
|
|
@@ -220,8 +245,15 @@
|
|
|
220
245
|
--phase-tint-amount: var(--phase-tint-peak);
|
|
221
246
|
}
|
|
222
247
|
.instrument-chassis[data-phase="complete"] {
|
|
223
|
-
|
|
224
|
-
|
|
248
|
+
/* BB.W-PHASE-PALETTE — demoted onto the `--phase-complete-color`
|
|
249
|
+
consumer seam (the exact `var(--chart-{phase}, …)` idiom the four
|
|
250
|
+
active arms above run). The arm reads ONLY the consumer token; the
|
|
251
|
+
gold lives in the token's DEFAULT at the chassis root, not as a
|
|
252
|
+
hardcoded ink here (a clean break with a back-compat default, NOT a
|
|
253
|
+
back-compat alias — no `--color-gold` dual-read survives). The warmth
|
|
254
|
+
ramp stays: `--phase-tint-amount` is orthogonal to the ink choice. */
|
|
255
|
+
--phase-color: var(--phase-complete-color);
|
|
256
|
+
--phase-color-label: var(--phase-complete-color-label);
|
|
225
257
|
--phase-tint-amount: var(--phase-tint-peak);
|
|
226
258
|
}
|
|
227
259
|
|
|
@@ -383,4 +415,35 @@
|
|
|
383
415
|
height: 1px;
|
|
384
416
|
}
|
|
385
417
|
}
|
|
418
|
+
|
|
419
|
+
/* BB.W-DESKTOP-RESERVE (B3) — the WIDE-AXIS (desktop) dial reserve, the
|
|
420
|
+
EXACT DISJOINT COMPLEMENT of the mobile `@container chassis (max-width:
|
|
421
|
+
44.9375rem)` reserve above: 44.9375rem ≈ 719px is the mobile ceiling, so
|
|
422
|
+
the desktop floor is 45rem ≈ 720px — the two container-query ranges share
|
|
423
|
+
no width, so a dial cell is reserved by exactly ONE branch at every box
|
|
424
|
+
width (no overlap, no gap, no competing `min-block-size`).
|
|
425
|
+
|
|
426
|
+
The mobile reflow reserves the dial box from frame 0; the wide box axis
|
|
427
|
+
had NO library reserve, so a `1fr` meter row collapsed to its pre-
|
|
428
|
+
hydration `<canvas>` intrinsic and grew on hydration, pushing the results
|
|
429
|
+
card + dock down (the desktop CLS the speedtest App.vue interim authored
|
|
430
|
+
a local `min-block-size: var(--chassis-max-block-size)` to cure — the
|
|
431
|
+
consumer interim this rung SUPERSEDES). The reserve is a STATIC
|
|
432
|
+
`min-block-size` — a frame-0 box reservation, NOT an animated height (no
|
|
433
|
+
per-frame layout, compositor-safe, `proof:no-layout-animation` holds: a
|
|
434
|
+
`min-block-size` reserve is never a `@keyframes`/`transition` target).
|
|
435
|
+
|
|
436
|
+
Token-first: `--instrument-dial-min-block-size-desktop` is the DESKTOP
|
|
437
|
+
DIAL a consumer overrides (default `var(--chassis-max-block-size)`, the
|
|
438
|
+
library's dock-adjusted dynamic-viewport guardrail, resolved at first
|
|
439
|
+
paint with no JS). The inline `var(--chassis-max-block-size)` fallback
|
|
440
|
+
carries the contract if the canonical token is unset. */
|
|
441
|
+
@container chassis (min-width: 45rem) {
|
|
442
|
+
.instrument-chassis .instrument-dial {
|
|
443
|
+
min-block-size: var(
|
|
444
|
+
--instrument-dial-min-block-size-desktop,
|
|
445
|
+
var(--chassis-max-block-size)
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
386
449
|
}
|