@mkbabb/glass-ui 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{CardAction-8whJrLWt.js → CardAction-DlVP2evz.js} +58 -54
- package/dist/{CommandShortcut-D3yxgHNn.js → CommandShortcut-By-VQcLO.js} +3 -3
- package/dist/{ConfiguratorRow-CaP7U3ZA.js → ConfiguratorRow-YMXdINHx.js} +3 -3
- package/dist/{ContextMenuContent-B3ZsheLV.js → ContextMenuContent-CMWn6huB.js} +1 -1
- package/dist/{ContextMenuSubContent-DDRID3qC.js → ContextMenuSubContent-DvwWCUc0.js} +1 -1
- package/dist/{DataTable-Bc9kUtu_.js → DataTable-C4tG3eIJ.js} +4 -4
- package/dist/DialogContent-D8U9ZfWS.js +121 -0
- package/dist/{DialogScrollContent-TTuovQst.js → DialogScrollContent-BMekN7gq.js} +1 -1
- package/dist/{FadingScroll-DLRbH5Xr.js → FadingScroll-P8B30rAD.js} +1 -1
- package/dist/{HoverCardContent-Bel1gdLZ.js → HoverCardContent-DAmGYglo.js} +1 -1
- package/dist/{HoverPopover-BcIxvyqZ.js → HoverPopover-DYpBOzzF.js} +1 -1
- package/dist/{IconChip-DhbdGdFQ.js → IconChip-CQa7XZYc.js} +7 -5
- package/dist/{IconTooltip-B0zimd2H.js → IconTooltip-_df8M3xm.js} +1 -1
- package/dist/{Input-Cg9DF62r.js → Input-CyU4_hIC.js} +2 -2
- package/dist/{MetricBadge-RHdBP72w.js → MetricBadge-DQt_dGah.js} +1 -1
- package/dist/{Notification-CphK7AAm.js → Notification-BlSPJhtZ.js} +1 -1
- package/dist/{NumberFieldContent-D8cXeyO4.js → NumberFieldContent-Z3VxGu_6.js} +3 -3
- package/dist/PagerDots-CYlqVFd4.js +196 -0
- package/dist/PaperBackdrop-DYWgrnh8.js +42 -0
- package/dist/{PopoverContent-DL7E6vJP.js → PopoverContent-BuKyHZSz.js} +2 -2
- package/dist/{Progress-CnqB7gLm.js → Progress-C9SsdwIZ.js} +1 -1
- package/dist/{ScrollingText-CTZbA_cG.js → ScrollingText-DY3W1Jfh.js} +2 -2
- package/dist/{SelectScrollDownButton-DAKCBEdW.js → SelectScrollDownButton-3mFHX_R-.js} +15 -12
- package/dist/{Switch-B8RscmRu.js → Switch-uf-UKPA2.js} +1 -1
- package/dist/{Toaster-D9qIHjBI.js → Toaster-ozrsR4mP.js} +1 -1
- package/dist/{ToggleGroupItem-BLtr3TJq.js → ToggleGroupItem-BpzaVzNm.js} +4 -4
- package/dist/{TooltipProvider-BJ_Y5EGX.js → TooltipProvider-QQVM_80r.js} +1 -1
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +1 -0
- package/dist/api/types-extra.d.ts +3 -1
- package/dist/api.js +2 -2
- package/dist/aurora.js +163 -131
- package/dist/badge-Bt14yURi.js +72 -0
- package/dist/badge.js +1 -1
- package/dist/border-progress.js +1 -1
- package/dist/button-D1W9PrzI.js +130 -0
- package/dist/button.js +1 -1
- package/dist/canvas.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.js +227 -98
- package/dist/chipVariants-BJQ0I2kB.js +18 -0
- package/dist/collapsible.js +1 -1
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
- package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +1 -1
- package/dist/components/custom/aurora/constants/presets.d.ts +29 -0
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/concentric/Concentric.vue.d.ts +15 -12
- package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +8 -3
- package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +8 -4
- package/dist/components/custom/concentric/composables/levelField.d.ts +50 -0
- package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +7 -4
- package/dist/components/custom/concentric/composables/useConcentric.d.ts +3 -3
- package/dist/components/custom/concentric/constants.d.ts +62 -41
- package/dist/components/custom/concentric/index.d.ts +2 -2
- package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
- package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
- package/dist/components/custom/configurator/Configurator.vue.d.ts +23 -2
- package/dist/components/custom/configurator/index.d.ts +1 -1
- package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +4 -3
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +10 -0
- package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +19 -0
- package/dist/components/custom/dock/DockStack.vue.d.ts +35 -22
- package/dist/components/custom/dock/GlassDock.vue.d.ts +19 -3
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +18 -32
- package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +76 -145
- package/dist/components/custom/dock/composables/index.d.ts +1 -0
- package/dist/components/custom/dock/composables/railProjection.d.ts +45 -0
- package/dist/components/custom/dock/composables/useDockContextSilhouette.d.ts +192 -0
- package/dist/components/custom/dock/composables/useDockFission.d.ts +158 -0
- package/dist/components/custom/dock/composables/useDockItemDrag.d.ts +18 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +38 -0
- package/dist/components/custom/dock/constants.d.ts +14 -3
- package/dist/components/custom/dock/index.d.ts +3 -0
- package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +21 -0
- package/dist/components/custom/dot-flow-field/composables/flowGLProgram.d.ts +8 -0
- package/dist/components/custom/dot-flow-field/composables/flowSetupGL.d.ts +9 -0
- package/dist/components/custom/dot-flow-field/composables/flowSetupGLFlow.d.ts +12 -0
- package/dist/components/custom/dot-flow-field/composables/flowSetupWGPU.d.ts +7 -0
- package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +28 -2
- package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -17
- package/dist/components/custom/dot-flow-field/constants.d.ts +51 -0
- package/dist/components/custom/dot-flow-field/index.d.ts +1 -1
- package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
- package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +29 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +2 -1
- package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +10 -1
- package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +7 -0
- package/dist/components/custom/dot-matrix/constants.d.ts +14 -0
- package/dist/components/custom/dot-matrix/index.d.ts +1 -1
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +2 -2
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -1
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +4 -0
- package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +9 -0
- package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +11 -0
- package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +16 -1
- package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +22 -1
- package/dist/components/custom/fourier-field/constants.d.ts +53 -0
- package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +1 -1
- package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -1
- package/dist/components/custom/goo-blob/composables/easing.d.ts +1 -0
- package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +1 -0
- package/dist/components/custom/goo-blob/constants.d.ts +26 -1
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
- package/dist/components/custom/goo-blob/types.d.ts +50 -1
- package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +32 -3
- package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +14 -4
- package/dist/components/custom/goo-dot-matrix/constants.d.ts +55 -16
- package/dist/components/custom/goo-dot-matrix/index.d.ts +1 -1
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +2 -0
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +1 -0
- package/dist/components/custom/goo-filter/GooFilter.vue.d.ts +22 -0
- package/dist/components/custom/goo-filter/index.d.ts +1 -0
- package/dist/components/custom/handmark/brush.d.ts +17 -17
- package/dist/components/custom/handmark/constants.d.ts +28 -8
- package/dist/components/custom/handmark/geometry.d.ts +34 -1
- package/dist/components/custom/handmark/index.d.ts +1 -1
- package/dist/components/custom/icon-chip/types.d.ts +10 -0
- package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +18 -0
- package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +44 -29
- package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +2 -0
- package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +3 -1
- package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +2 -2
- package/dist/components/custom/paper-grid/constants.d.ts +44 -6
- package/dist/components/custom/paper-grid/index.d.ts +2 -2
- package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +1 -1
- package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -1
- package/dist/components/custom/selectable-chip/chipVariants.d.ts +39 -0
- package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +12 -20
- package/dist/components/custom/tabs/constants.d.ts +16 -8
- package/dist/components/custom/timeline/ScrubberTimeline.vue.d.ts +16 -0
- package/dist/components/custom/timeline/geometry.d.ts +0 -8
- package/dist/components/custom/toggle-chip/index.d.ts +15 -4
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +12 -10
- package/dist/components/ui/_shared/useSurfaceAxis.d.ts +17 -3
- package/dist/components/ui/badge/Badge.vue.d.ts +14 -0
- package/dist/components/ui/badge/index.d.ts +1 -0
- package/dist/components/ui/button/Button.vue.d.ts +1 -0
- package/dist/components/ui/card/Card.vue.d.ts +1 -1
- package/dist/components/ui/card/ScrollCard.vue.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselContent.vue.d.ts +2 -4
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +9 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +33 -14
- package/dist/components/ui/drawer/constants.d.ts +8 -6
- package/dist/components/ui/drawer/index.d.ts +12 -2
- package/dist/components/ui/select/SelectContent.vue.d.ts +9 -0
- package/dist/components/ui/slider/Slider.vue.d.ts +9 -0
- package/dist/composables/dom/index.d.ts +1 -0
- package/dist/composables/dom/useDragVelocity.d.ts +46 -0
- package/dist/composables/glass/wave/index.d.ts +4 -0
- package/dist/composables/glass/wave/waveField.d.ts +115 -0
- package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -0
- package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -0
- package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +95 -2
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +40 -2
- package/dist/composables/glass/webgpu/index.d.ts +1 -0
- package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +37 -0
- package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +49 -2
- package/dist/composables/glass/webgpu/webgpuDevice.d.ts +1 -1
- package/dist/composables/motion/core/index.d.ts +4 -0
- package/dist/composables/motion/core/useHaptic.d.ts +48 -0
- package/dist/composables/motion/core/writeVelocityWeight.d.ts +31 -0
- package/dist/composables/motion/index.d.ts +2 -0
- package/dist/composables/motion/springPresets.d.ts +16 -17
- package/dist/composables/motion/suite.d.ts +2 -2
- package/dist/composables/motion/useBloomUp.d.ts +97 -0
- package/dist/composables/motion/useCelebrationBurst.d.ts +50 -0
- package/dist/composables/motion/useDockCtaReceive.d.ts +10 -28
- package/dist/composables/motion/useGooMorph.d.ts +72 -0
- package/dist/composables/motion/useLiquidFlex.d.ts +18 -0
- package/dist/composables/motion/useLiquidMorph.d.ts +108 -0
- package/dist/composables/motion/useLiquidPress.d.ts +12 -0
- package/dist/composables/motion/useLiquidReveal.d.ts +7 -4
- package/dist/composables/motion/useMorphField.d.ts +157 -0
- package/dist/composables/motion/useScrollPin.d.ts +49 -0
- package/dist/composables/motion/useScrollScene.d.ts +67 -0
- package/dist/concentric.js +532 -563
- package/dist/configurator.js +2 -2
- package/dist/confirm-dialog.js +3 -3
- package/dist/constellation.js +4 -4
- package/dist/context-menu.js +2 -2
- package/dist/controls.js +2 -2
- package/dist/createCanvasLifecycle-CuCrGRfq.js +173 -0
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deck.js +1 -1
- package/dist/dialog.js +3 -3
- package/dist/dock.js +1163 -618
- package/dist/dockContext-gFVS2gMg.js +18 -0
- package/dist/dom.js +7 -6
- package/dist/dot-flow-field.js +1114 -523
- package/dist/dot-matrix.js +348 -204
- package/dist/drawer.js +106 -96
- package/dist/{dropdown-menu-aJmV5SqE.js → dropdown-menu-CCfcCQ68.js} +3 -3
- package/dist/dropdown-menu.js +1 -1
- package/dist/easing.js +3 -3
- package/dist/expandable-container.js +2 -2
- package/dist/fading-scroll.js +1 -1
- package/dist/forms.js +6 -6
- package/dist/fourier-field.js +441 -197
- 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 +139 -135
- package/dist/goo-blob.js +11 -9
- package/dist/goo-dot-matrix.js +418 -198
- package/dist/handmark.js +137 -94
- 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 +3 -0
- package/dist/instrument-chassis.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +7 -7
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +1 -1
- package/dist/metric-stack.js +1 -1
- package/dist/motion-core.js +42 -39
- package/dist/motion-curves.js +20 -14
- package/dist/motion.js +226 -26
- 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/paper-grid.js +315 -342
- package/dist/paperGrid-CXCSMbZ1.js +191 -0
- package/dist/popover.js +1 -1
- package/dist/{presets-CvOUqtdY.js → presets-QvYgnFIZ.js} +13 -12
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +2 -2
- package/dist/{resolveCanvasColor-yPyIpJt9.js → resolveCanvasColor-DsSJk06I.js} +5 -5
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +7 -7
- package/dist/select.js +3 -3
- package/dist/selectable-chip.js +18 -35
- package/dist/separator.js +1 -1
- package/dist/{sheet-B2flBfLH.js → sheet-DUCIoOe0.js} +3 -3
- package/dist/sheet.js +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/slider-CcICPe3u.js +149 -0
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/{spectrum-walk-BVzA7Biz.js → spectrum-walk-cBNSx_zm.js} +1 -1
- package/dist/springPresets-DfoQ6XRY.js +64 -0
- package/dist/stacked-icons.js +54 -39
- package/dist/styles/cards.css +202 -2
- package/dist/styles/components.css +1 -3
- package/dist/styles/configurator.css +172 -7
- package/dist/styles/critical-partition.mjs +35 -2
- package/dist/styles/deferred.css +2 -0
- package/dist/styles/dock/adaptive-legibility.css +119 -0
- package/dist/styles/dock/density.css +18 -10
- package/dist/styles/dock/fission-bridge.css +552 -0
- package/dist/styles/dock/layers.css +88 -124
- package/dist/styles/dock/morph-bridge.css +15 -2
- package/dist/styles/dock/morph.css +45 -114
- package/dist/styles/dock/shape.css +137 -11
- package/dist/styles/dock/shell.css +1 -3
- package/dist/styles/dock/stack-rail.css +95 -7
- package/dist/styles/dock-controls/icon-button.css +34 -2
- package/dist/styles/dock-controls/triggers.css +23 -1
- package/dist/styles/dock-controls.css +18 -0
- package/dist/styles/dock.css +16 -1
- package/dist/styles/drawer.css +166 -0
- package/dist/styles/glass/glass-atom.css +244 -0
- package/dist/styles/glass/glass-capsule.css +143 -0
- package/dist/styles/glass/glass-chip.css +215 -0
- package/dist/styles/glass/liquid-enter.css +252 -0
- package/dist/styles/glass/liquid-morph.css +850 -0
- package/dist/styles/glass/material.css +70 -1
- package/dist/styles/glass/reveal.css +22 -2
- package/dist/styles/glass/rim.css +13 -1
- package/dist/styles/glass/surfaces.css +18 -8
- package/dist/styles/glass.css +11 -0
- package/dist/styles/icon-chip.css +45 -0
- package/dist/styles/index.css +11 -0
- package/dist/styles/jubilance.css +65 -0
- package/dist/styles/motion/morph-field.css +229 -0
- package/dist/styles/paper.css +230 -14
- package/dist/styles/scroll-choreography.css +135 -78
- package/dist/styles/segmented-tabs.css +85 -51
- package/dist/styles/select.css +151 -0
- package/dist/styles/tokens/color-radius.css +1 -1
- package/dist/styles/tokens/dark-arm.css +57 -8
- package/dist/styles/tokens/glass-deep.css +8 -4
- package/dist/styles/tokens/glass-fx.css +80 -2
- package/dist/styles/tokens/glass.css +140 -8
- package/dist/styles/tokens/light-dark.css +2 -2
- package/dist/styles/tokens/property-regs.css +144 -0
- package/dist/styles/tokens/scale-paper.css +20 -8
- package/dist/styles/tokens/scheme-motion.css +92 -157
- package/dist/styles/tokens/scheme-spring.css +239 -0
- package/dist/styles/tokens/scroll-tokens.css +15 -15
- package/dist/styles/tokens/shadow.css +73 -13
- package/dist/styles/tokens.css +9 -2
- package/dist/styles/utilities/btn.css +70 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +198 -181
- package/dist/timeline.js +241 -206
- package/dist/toast.js +1 -1
- package/dist/toggle-chip.js +14 -41
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{uniformBridgeWGPU-CtAKl45L.js → uniformBridgeWGPU-BCse1SHU.js} +191 -127
- package/dist/{useAnimatedNumber-CLrxicG9.js → useAnimatedNumber-BntskVdQ.js} +1 -1
- package/dist/{useConfiguratorState-4xblKfwd.js → useConfiguratorState-22BcULzF.js} +37 -35
- package/dist/useDockCtaReceive-DX7RDb6_.js +88 -0
- package/dist/{useDragMorph-BUgAC-zK.js → useDragMorph-DGLSewwB.js} +2 -2
- package/dist/useDragVelocity-CjcfX3dA.js +57 -0
- package/dist/useGooMorph-Cs13NgYL.js +104 -0
- package/dist/useGpuSubstrate-Ceet70xq.js +347 -0
- package/dist/{useViewTransition-CUI1nAgn.js → useHaptic-CPz5BT9I.js} +40 -1
- package/dist/{useLiquidFlex-UmA6LMZu.js → useLiquidFlex-Cc6PjVJD.js} +8 -3
- package/dist/useLiquidPress-CtOQ8Z0_.js +43 -0
- package/dist/useMorphField-ogBM7ubT.js +141 -0
- package/dist/{useScrollChrome-D66AVP7C.js → useScrollChrome-JuImi1DM.js} +2 -2
- package/dist/{useSpringMount-BWDnKIwh.js → useSpringMount-DFxtzmkR.js} +1 -1
- package/dist/{useSpringPress-B1-Czp-V.js → useSpringPress-VM9RgVq3.js} +1 -1
- package/dist/{useSurfaceAxis-g0NloYEF.js → useSurfaceAxis-Ci7Dnaw2.js} +1 -1
- package/dist/{useTouchGate-CBZTD4SD.js → useTouchGate-B1Lf9XqN.js} +1 -1
- package/dist/virtual.js +1 -1
- package/dist/watercolor-dot.js +16 -26
- package/dist/writeVelocityWeight-Bh83xZfs.js +19 -0
- package/package.json +14 -3
- package/src/styles/cards.css +202 -2
- package/src/styles/configurator.css +172 -7
- package/src/styles/critical-partition.mjs +35 -2
- package/src/styles/dock/adaptive-legibility.css +119 -0
- package/src/styles/dock/density.css +18 -10
- package/src/styles/dock/fission-bridge.css +552 -0
- package/src/styles/dock/layers.css +88 -124
- package/src/styles/dock/morph-bridge.css +15 -2
- package/src/styles/dock/morph.css +45 -114
- package/src/styles/dock/shape.css +137 -11
- package/src/styles/dock/shell.css +1 -3
- package/src/styles/dock/stack-rail.css +95 -7
- package/src/styles/dock-controls/icon-button.css +34 -2
- package/src/styles/dock-controls/triggers.css +23 -1
- package/src/styles/dock-controls.css +18 -0
- package/src/styles/dock.css +16 -1
- package/src/styles/drawer.css +164 -0
- package/src/styles/glass/glass-atom.css +244 -0
- package/src/styles/glass/glass-capsule.css +143 -0
- package/src/styles/glass/glass-chip.css +215 -0
- package/src/styles/glass/liquid-enter.css +252 -0
- package/src/styles/glass/liquid-morph.css +850 -0
- package/src/styles/glass/material.css +70 -1
- package/src/styles/glass/reveal.css +22 -2
- package/src/styles/glass/rim.css +13 -1
- package/src/styles/glass/surfaces.css +18 -8
- package/src/styles/glass.css +11 -0
- package/src/styles/icon-chip.css +45 -0
- package/src/styles/index.css +11 -0
- package/src/styles/jubilance.css +65 -0
- package/src/styles/motion/morph-field.css +229 -0
- package/src/styles/paper.css +230 -14
- package/src/styles/scroll-choreography.css +135 -78
- package/src/styles/segmented-tabs.css +85 -47
- package/src/styles/select.css +151 -0
- package/src/styles/tokens/color-radius.css +1 -1
- package/src/styles/tokens/dark-arm.css +57 -8
- package/src/styles/tokens/glass-deep.css +8 -4
- package/src/styles/tokens/glass-fx.css +80 -2
- package/src/styles/tokens/glass.css +140 -8
- package/src/styles/tokens/light-dark.css +2 -2
- package/src/styles/tokens/property-regs.css +144 -0
- package/src/styles/tokens/scale-paper.css +20 -8
- package/src/styles/tokens/scheme-motion.css +92 -157
- package/src/styles/tokens/scheme-spring.css +239 -0
- package/src/styles/tokens/scroll-tokens.css +15 -15
- package/src/styles/tokens/shadow.css +73 -13
- package/src/styles/tokens.css +9 -2
- package/src/styles/utilities/btn.css +70 -0
- package/dist/DialogContent-6JtTB5x2.js +0 -106
- package/dist/PagerDots-Cjx96la-.js +0 -98
- package/dist/PaperBackdrop-CqwjnfLv.js +0 -31
- package/dist/badge-D9XWW4GT.js +0 -53
- package/dist/button-5dY1Dvhd.js +0 -125
- package/dist/components/custom/concentric/composables/ringField.d.ts +0 -85
- package/dist/createCanvasLifecycle-Gh45Ce-p.js +0 -93
- package/dist/dockContext-BNfyPLe9.js +0 -17
- package/dist/slider-2A0rPn79.js +0 -142
- package/dist/springPresets-Ce7OYCm9.js +0 -46
- package/dist/useDockCtaReceive-DfFkmgL1.js +0 -82
- package/dist/useGpuSubstrate-4pTcp6mX.js +0 -294
- package/dist/useLiquidPress-BooG97RY.js +0 -39
- /package/dist/{CollapsibleContent-68dEXIAl.js → CollapsibleContent-D7UNsXQr.js} +0 -0
- /package/dist/{DialogFooter-9phqcRIS.js → DialogFooter-DoLy0ewI.js} +0 -0
- /package/dist/{InstrumentChassis-CxsHSyMj.js → InstrumentChassis-UUJX0-mW.js} +0 -0
- /package/dist/{Label-C2ejNWeC.js → Label-B_HPqi_q.js} +0 -0
- /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-DfAf7o15.js} +0 -0
- /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
- /package/dist/{SelectSeparator-C2UGOkXF.js → SelectSeparator-CNRGG7Ew.js} +0 -0
- /package/dist/{Separator-DQcwC2TR.js → Separator-Cf9-JFgi.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
- /package/dist/{color-Cs0-oxYL.js → color-B9jZdhJX.js} +0 -0
- /package/dist/{compile-nZ1xVYTp.js → compile-INR_tPk_.js} +0 -0
- /package/dist/{constants--C2DkLW8.js → constants-BWj7DkMn.js} +0 -0
- /package/dist/{createContext-CpBNTRMI.js → createContext-Cd23P9j0.js} +0 -0
- /package/dist/{dotMatrixField-D_x9_1qq.js → dotMatrixField-CRO0ZFk4.js} +0 -0
- /package/dist/{flow.glsl-B2P7e0MT.js → flow.glsl-DqEGRpl4.js} +0 -0
- /package/dist/{math-Eb0w3LqU.js → math-5RcIgCB4.js} +0 -0
- /package/dist/{menuItemVariants-D8VNHq22.js → menuItemVariants-DAXquKja.js} +0 -0
- /package/dist/{prng-B-d9eYX8.js → prng-B5tIXTtj.js} +0 -0
- /package/dist/{procedural-color.wgsl-m7Zgv35j.js → procedural-color.wgsl-C1Y5PkM6.js} +0 -0
- /package/dist/{scrollReader-DI1NWxUw.js → scrollReader-rc3Ns_NM.js} +0 -0
- /package/dist/{useControlSize-SH1UmJCi.js → useControlSize-DAZ062x7.js} +0 -0
- /package/dist/{useFuzzySearch-DIhcYtcw.js → useFuzzySearch-0fTYOhS4.js} +0 -0
- /package/dist/{useGlobalDark-CmjB9E32.js → useGlobalDark-B4HO9LXG.js} +0 -0
- /package/dist/{useIntersectionPause-Dbozzjgm.js → useIntersectionPause-DO8Vl4gs.js} +0 -0
- /package/dist/{useInterval-CNdua40W.js → useInterval-BVUI-sez.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BPRp33Im.js → useKeyboardShortcuts-BEut54Tk.js} +0 -0
- /package/dist/{usePointerVelocityField-QLsy3_kv.js → usePointerVelocityField-BrkqZFhj.js} +0 -0
- /package/dist/{useResizeObserver-Bpoi7tRE.js → useResizeObserver-DdEn3v2f.js} +0 -0
- /package/dist/{useResolveTokenColor-vAylyR0x.js → useResolveTokenColor-ChOnCckA.js} +0 -0
- /package/dist/{useScrollProgress-c3yxmH6a.js → useScrollProgress-A0M6qRl7.js} +0 -0
- /package/dist/{useSortable-BVqlJRBR.js → useSortable-DQV_UNDw.js} +0 -0
- /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-Bma3UlKA.js} +0 -0
- /package/dist/{useTimer-BHJOKr35.js → useTimer-BBLGPXR8.js} +0 -0
- /package/dist/{useUserInvalidAria-y5namzeE.js → useUserInvalidAria-EmmwWPOl.js} +0 -0
- /package/dist/{useViewportReady-anbac3m6.js → useViewportReady-C9pYnn7K.js} +0 -0
- /package/dist/{vReveal-D9k0jADx.js → vReveal-CT1KtwZA.js} +0 -0
|
@@ -55,7 +55,22 @@
|
|
|
55
55
|
tier's own shadow recipe. The `::after` grain overlay already claims the
|
|
56
56
|
five rungs' `::after`; the rim is folded INTO that same overlay's
|
|
57
57
|
box-shadow below (the grain `::after` gets the rim inset ring) so no
|
|
58
|
-
pseudo-element collides.
|
|
58
|
+
pseudo-element collides.
|
|
59
|
+
|
|
60
|
+
── BE.W5 — `--glass-edge-light` IS A WHOLE BOX-SHADOW LAYER, NEVER A COLOR ──
|
|
61
|
+
`--glass-edge-light` resolves to a COMPLETE box-shadow layer (the token is
|
|
62
|
+
`inset 0 0 0 0.75px hsl(0 0% 100% / 0.18)` — geometry + color, glass-fx.css:70;
|
|
63
|
+
the `.dark` arm re-points it to `--glass-edge-light-dark`). It is consumed as a
|
|
64
|
+
WHOLE LAYER inside a `box-shadow:` list — `box-shadow: var(--glass-edge-light),
|
|
65
|
+
<other layers>` (surfaces.css:203/371, stack-rail.css:176). The MISUSE is
|
|
66
|
+
NESTING it as a COLOR inside another shadow — `inset 0 0 0 1px
|
|
67
|
+
var(--glass-edge-light)` — which expands to `inset 0 0 0 1px inset 0 0 0 0.75px
|
|
68
|
+
hsl(…)`: an INVALID shadow value → the WHOLE `box-shadow` declaration DROPS →
|
|
69
|
+
NO rim, NO drop-shadow (worst in dark, where the rim is the silhouette device).
|
|
70
|
+
THE RULE: read `--glass-edge-light` as a whole `box-shadow` layer, NEVER nested
|
|
71
|
+
inside another shadow's geometry. To compose the rim's COLOR (e.g. accent-tint
|
|
72
|
+
it) use `--glass-rim-ink`/`--glass-material-rim` (rim.css — the COLOR seam),
|
|
73
|
+
NOT `--glass-edge-light` (the LAYER token). */
|
|
59
74
|
|
|
60
75
|
/* (a)+(c) The moving-specular `::before` catch-light — the iOS-26
|
|
61
76
|
illuminate-from-within behaviour. A masked radial-gradient glow rides the
|
|
@@ -298,4 +313,58 @@
|
|
|
298
313
|
press-depth animation is the deliberate tradeoff. The press squish + gleam lift on
|
|
299
314
|
the SAME `--glass-btn-press-t` drive (material gleam, above) carry the press read. */
|
|
300
315
|
|
|
316
|
+
/* ── BE.W-CLEAR-VARIANT — the Apple-Clear `surface="clear"` decoration + the
|
|
317
|
+
MANDATORY legibility scrim ──────────────────────────────────────────────────
|
|
318
|
+
The 4th surface-axis member (`useSurfaceAxis.ts` maps `clear → glass-clear`).
|
|
319
|
+
A `surface="clear"` surface paints the maximally-translucent `--glass-bg-clear`
|
|
320
|
+
(0.58 — the clearest rung the library ships, the album grid bleeds through) AND
|
|
321
|
+
a MANDATORY legibility scrim IN THE SAME SEAM — a `.glass-clear` cannot exist
|
|
322
|
+
without it (the Apple Clear contract: near-transparent → the text needs a scrim
|
|
323
|
+
floor). The scrim DIMS THE BACKDROP (`color-mix(in srgb, var(--background) N%,
|
|
324
|
+
transparent)` — the A5-1 modal-scrim idiom, painted BEHIND the translucent fill
|
|
325
|
+
within the box, see the two-layer-background note below), DISTINCT from the W55
|
|
326
|
+
`--glass-tint-*` PLATE-darken axis (the two legibility axes stay disjoint: the
|
|
327
|
+
scrim dims the backdrop, the W55 tint darkens the plate). The scrim strength
|
|
328
|
+
DERIVES from the sampled
|
|
329
|
+
`--glass-backdrop-luma` (useGlassBackdropLuminance's existing write) so it dims
|
|
330
|
+
MORE over a bright album grid (luma→1) and relaxes over a dark one (luma→0) —
|
|
331
|
+
the dynamic legibility that betters Apple's fixed scrim. The `0.5` fallback is
|
|
332
|
+
the safe mid-scrim when no observer is wired. The plate fill rides the SAME
|
|
333
|
+
oklab-tint seam so the W55 darken reaches it; the see-through frost is the
|
|
334
|
+
cross-engine FLOOR (pure opacity + backdrop-filter, no `url()` — Safari paints
|
|
335
|
+
it via the build-time -webkit- prefix pass). The scrim is a STATIC paint (no
|
|
336
|
+
layout, no animation — `proof:no-layout-animation` GREEN by construction).
|
|
337
|
+
|
|
338
|
+
THE SCRIM IS A SECOND BACKGROUND LAYER, NOT A PSEUDO. The glass family already
|
|
339
|
+
claims BOTH pseudos on every base rung — `::before` (the moving specular core)
|
|
340
|
+
AND `::after` (the grain overlay, ladder.css). `surface="clear"` composes ON a
|
|
341
|
+
base tier (`glass-floating glass-clear`), so its `::before`/`::after` are taken;
|
|
342
|
+
a scrim pseudo would CLOBBER the specular or grain. The mandatory scrim is
|
|
343
|
+
therefore the FIRST of two comma-separated `background` LAYERS — painted FRONT
|
|
344
|
+
(the translucent glass fill) over BACK (the `--background` dim) within the box,
|
|
345
|
+
so the dim sits between the backdrop-filtered backdrop and the content (a child
|
|
346
|
+
paints above both). The fill stays translucent so the backdrop still reads
|
|
347
|
+
THROUGH the dim — see-through AND legible, one element, no pseudo collision. */
|
|
348
|
+
[data-surface="clear"],
|
|
349
|
+
.glass-clear {
|
|
350
|
+
/* The dynamic scrim strength — DERIVED from the sampled backdrop luma
|
|
351
|
+
(dims MORE over a bright grid). `0.5` is the safe mid-scrim fallback. */
|
|
352
|
+
--glass-clear-scrim-strength: calc(
|
|
353
|
+
var(--glass-backdrop-luma, 0.5) * 40%
|
|
354
|
+
);
|
|
355
|
+
background:
|
|
356
|
+
color-mix(
|
|
357
|
+
in oklab,
|
|
358
|
+
var(--glass-bg-clear),
|
|
359
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
360
|
+
),
|
|
361
|
+
color-mix(
|
|
362
|
+
in srgb,
|
|
363
|
+
var(--background) var(--glass-clear-scrim-strength),
|
|
364
|
+
transparent
|
|
365
|
+
);
|
|
366
|
+
backdrop-filter: var(--glass-blur-floating);
|
|
367
|
+
position: relative;
|
|
368
|
+
}
|
|
369
|
+
|
|
301
370
|
}
|
|
@@ -45,6 +45,19 @@
|
|
|
45
45
|
clocks read the shared spring tokens (read-only — the W-GLASS-CAL fence). */
|
|
46
46
|
--glass-reveal-blur: 4px;
|
|
47
47
|
--glass-reveal-slide: 0.5rem;
|
|
48
|
+
/* The materialize squish — the surface blooms FROM 0.88 (a clear squish-grow,
|
|
49
|
+
the Control-Center round-toggle reference), not the near-no-op 0.95. The
|
|
50
|
+
authority lives here; the closed/exit leg reads it with a 0.88 fallback.
|
|
51
|
+
BD.W-ANIM-IOS27-TUNE */
|
|
52
|
+
--glass-reveal-enter-scale: 0.88;
|
|
53
|
+
/* The SQUISH channel — the same volume-preserving born-wide+flat squish the
|
|
54
|
+
universal `.liquid-enter` mount recipe speaks (ONE grammar, no fork). The
|
|
55
|
+
closed leg rides it on the `scale:` LONGHAND (vol-preserving sx·sy ≈ 1),
|
|
56
|
+
settling to `1 1` at open; the bloom-from-small grace is the coupled
|
|
57
|
+
scale-down (--glass-reveal-enter-scale) × this squish, never a separate
|
|
58
|
+
transform: shorthand (which would clobber a centering transform). */
|
|
59
|
+
--lq-stretch-x: 1.06;
|
|
60
|
+
--lq-stretch-y: 0.945;
|
|
48
61
|
transform-origin: var(--reka-popper-transform-origin, center);
|
|
49
62
|
/* The coupled transition list — the SPATIAL legs (scale/translate) on the
|
|
50
63
|
snappy spring's OWN settle clock, the EFFECTS legs (opacity/filter blur-
|
|
@@ -67,7 +80,7 @@
|
|
|
67
80
|
from its edge) — the BASE never writes `translate`, so a center-anchored Dialog
|
|
68
81
|
keeping its `-translate-x-1/2 -translate-y-1/2` centering is NEVER clobbered. */
|
|
69
82
|
.glass-reveal[data-state="open"] {
|
|
70
|
-
scale: 1;
|
|
83
|
+
scale: 1 1;
|
|
71
84
|
opacity: 1;
|
|
72
85
|
filter: blur(0);
|
|
73
86
|
}
|
|
@@ -77,7 +90,14 @@
|
|
|
77
90
|
past gone, the §6/W-MOTION-CANON P2 doctrine); NO `--spring-*` token on the
|
|
78
91
|
exit. The exit is faster + un-sprung — the surface recedes cleanly. */
|
|
79
92
|
.glass-reveal[data-state="closed"] {
|
|
80
|
-
|
|
93
|
+
/* Born wide+flat AND bloom-from-small: the SQUISH (--lq-stretch-x/-y,
|
|
94
|
+
vol-preserving) couples with the bloom-from-0.88 on the SAME `scale:`
|
|
95
|
+
LONGHAND (two factors, ONE longhand — never a second transform: shorthand
|
|
96
|
+
that would clobber a Dialog's centering translate). The deform stays
|
|
97
|
+
anisotropic (the long axis swells AS it blooms, the short pinches);
|
|
98
|
+
it settles to `1 1` at open. */
|
|
99
|
+
scale: calc(var(--glass-reveal-enter-scale, 0.88) * var(--lq-stretch-x, 1.06))
|
|
100
|
+
calc(var(--glass-reveal-enter-scale, 0.88) * var(--lq-stretch-y, 0.945));
|
|
81
101
|
opacity: 0;
|
|
82
102
|
filter: blur(var(--glass-reveal-blur));
|
|
83
103
|
transition-timing-function: var(--ease-out);
|
|
@@ -77,9 +77,21 @@
|
|
|
77
77
|
`--glass-rim-top`. `--glass-rim-ink` is the resolved top-ink stop (kept as
|
|
78
78
|
the accent-compose seam — the `.dark` arm below re-points it). */
|
|
79
79
|
--glass-rim-ink: hsl(0 0% 100% / 0.30);
|
|
80
|
+
/* BD.W-GLASS-KEY-EDGE — the LIT catch is now KEY-DRIVEN: the accent-mixed
|
|
81
|
+
catch-light rides the key-facing edges (`--glass-key-lit-y` top +
|
|
82
|
+
`--glass-key-lit-x` side, the upper-right cel key) so the accent reads on
|
|
83
|
+
the LIT edge that agrees with the cartoon cast's light source — not a flat
|
|
84
|
+
top-only halo. The side stop carries the same accent-mixed ink at the rim's
|
|
85
|
+
own 0.18-class weight (via `--glass-rim-ink`-derived mix). The SHADE half is
|
|
86
|
+
the key-driven `--glass-rim-bottom` two-stop under-shadow. At 0% accent
|
|
87
|
+
strength the mix resolves byte-compatible to the bare key-driven rim (the W2
|
|
88
|
+
no-op floor). The moving-specular `::before` catch-light + the grain
|
|
89
|
+
`::after` are UNTOUCHED (both occupied). */
|
|
80
90
|
--glass-material-rim:
|
|
81
|
-
inset 0
|
|
91
|
+
inset 0 var(--glass-key-lit-y) 0
|
|
82
92
|
color-mix(in oklab, var(--glass-rim-ink), var(--glass-accent) var(--glass-accent-strength)),
|
|
93
|
+
inset var(--glass-key-lit-x) 0 0
|
|
94
|
+
color-mix(in oklab, hsl(0 0% 100% / 0.18), var(--glass-accent) var(--glass-accent-strength)),
|
|
83
95
|
var(--glass-rim-bottom);
|
|
84
96
|
/* the per-rung border ink, accent-composed. `--glass-border-rung` is set by
|
|
85
97
|
each rung at its own declaration (it reads the rung's `--glass-border-*`
|
|
@@ -279,7 +279,7 @@
|
|
|
279
279
|
seam — over a bright field the pill darkens-to-legible, over a calm field it
|
|
280
280
|
stays warm-cream/near-white (the iOS adaptive register reaching the pill).
|
|
281
281
|
ZERO-delta at the `--glass-tint-strength: 0%`/floor default. */
|
|
282
|
-
:where(.btn-glass, .segmented-indicator) {
|
|
282
|
+
:where(.btn-glass, .segmented-indicator, .glass-capsule) {
|
|
283
283
|
--glass-bg-floating-tinted: color-mix(
|
|
284
284
|
in oklab,
|
|
285
285
|
var(--glass-bg-floating),
|
|
@@ -292,18 +292,13 @@
|
|
|
292
292
|
QUIETER glass register, prominence-by-tint) reaches the W55 darken on its lit
|
|
293
293
|
fill too — ZERO new compositing axis, the SAME seam the resting/floating pair
|
|
294
294
|
composes. The floating rung is minted on the shared `:where()` seam ABOVE
|
|
295
|
-
(the tab pill reads it too); quiet
|
|
295
|
+
(the tab pill reads it too); the quiet rung stays button-scoped (the
|
|
296
296
|
hover/active fill register the segmented pill does not engage). */
|
|
297
297
|
--glass-bg-quiet-tinted: color-mix(
|
|
298
298
|
in oklab,
|
|
299
299
|
var(--glass-bg-quiet),
|
|
300
300
|
var(--glass-tint-source) var(--glass-tint-strength)
|
|
301
301
|
);
|
|
302
|
-
--glass-bg-resting-tinted: color-mix(
|
|
303
|
-
in oklab,
|
|
304
|
-
var(--glass-bg-resting),
|
|
305
|
-
var(--glass-tint-source) var(--glass-tint-strength)
|
|
306
|
-
);
|
|
307
302
|
}
|
|
308
303
|
|
|
309
304
|
/* BB.W-BUTTON-GLASS (e) — the optional refraction-edge opt-in. CONSUMES the
|
|
@@ -364,7 +359,22 @@
|
|
|
364
359
|
padding-inline: 0.625rem;
|
|
365
360
|
padding-block: 0.3125rem;
|
|
366
361
|
border-radius: var(--radius-pill);
|
|
367
|
-
|
|
362
|
+
/* BD.W-GOO-CAROUSEL-DECK — the element-level oklab TINT seam (NOT the raw
|
|
363
|
+
pre-substituted `--glass-bg-floating` :root token — the gray-hole
|
|
364
|
+
substitution-trap). At the `--glass-tint-strength: 0%` default this is the
|
|
365
|
+
no-op floor (`color-mix(in oklab, X, src 0%) ≡ X` — byte-identical pager pixels
|
|
366
|
+
over a flat page); over a declared/sampled BRIGHT carousel image
|
|
367
|
+
(`@container style(--glass-backdrop: light)`) the pill darkens-toward-ink for a
|
|
368
|
+
real silhouette (the W55 ≤24% clamp keeps it translucent); under `.dark` the
|
|
369
|
+
W-DARK-MATERIAL tint arm LIFTS it toward luminous warm-dark, never a charcoal
|
|
370
|
+
slab. `in oklab` is the glass-tint perceptual family (the in-srgb
|
|
371
|
+
`--surface-tint-*` brand fence is untouched). The dock `--glass-bg-dock`
|
|
372
|
+
self-re-point precedent applied to the pager chassis. */
|
|
373
|
+
background: color-mix(
|
|
374
|
+
in oklab,
|
|
375
|
+
var(--glass-bg-floating),
|
|
376
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
377
|
+
);
|
|
368
378
|
backdrop-filter: var(--glass-blur-floating);
|
|
369
379
|
-webkit-backdrop-filter: var(--glass-blur-floating);
|
|
370
380
|
box-shadow:
|
package/dist/styles/glass.css
CHANGED
|
@@ -58,8 +58,19 @@
|
|
|
58
58
|
AFTER surfaces.css and BEFORE surface-axis.css (same @layer components, same
|
|
59
59
|
source order — the dist is byte-isomorphic). */
|
|
60
60
|
@import "./glass/control-surfaces.css";
|
|
61
|
+
/* BD.W-TAB-IOS-CAPSULE — the ONE shared glassy register (`.glass-capsule` +
|
|
62
|
+
`.glass-capsule-track` + `.glass-capsule-hover`) the tabs/dock-tab/buttons/chips/
|
|
63
|
+
cards consumers compose. @import-ed AFTER surfaces.css (so the `--glass-bg-floating-
|
|
64
|
+
tinted` seam + the `--glass-rim-*`/`--glass-shadow-floating` tokens resolve) and
|
|
65
|
+
BEFORE the consuming recipes (segmented-tabs.css et al, imported by index.css). */
|
|
66
|
+
@import "./glass/glass-capsule.css";
|
|
61
67
|
@import "./glass/surface-axis.css";
|
|
62
68
|
@import "./glass/reveal.css";
|
|
69
|
+
/* BD.W-LIQUID-ENTRANCE-GENERAL — the UNIVERSAL `.liquid-enter` mount recipe
|
|
70
|
+
(the four coupled channels as @keyframes-on-mount + the `.is-cel` cel-slam + the
|
|
71
|
+
lagging cartoon cast). @import-ed AFTER reveal.css (it extends the same
|
|
72
|
+
`--lq-enter-*` channel substrate the `.glass-reveal` TRANSITION floor speaks). */
|
|
73
|
+
@import "./glass/liquid-enter.css";
|
|
63
74
|
@import "./glass/deep.css";
|
|
64
75
|
@import "./glass/progress-rail.css";
|
|
65
76
|
@import "./glass/squircle.css";
|
|
@@ -27,6 +27,22 @@
|
|
|
27
27
|
* --spring-snappy/--spring-smooth registers), no longer the fixed bezier.
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
+
/* BD.W-GLASS-ATOM-REGISTER — the shared `.glass-atom` warm-glass register the
|
|
31
|
+
small atoms (Badge-glass / metric-badge / slider fill / the `+N` chip) consume.
|
|
32
|
+
@import-ed HERE (icon-chip.css loads in index.css AFTER glass.css, so
|
|
33
|
+
`.glass-capsule` + the `--glass-*` axes are defined) — a consume-only recipe,
|
|
34
|
+
not a second material. CSS `@import` must precede every rule, so it leads the
|
|
35
|
+
file (the comment above is not a rule). */
|
|
36
|
+
@import "./glass/glass-atom.css";
|
|
37
|
+
/* BD.W-CHIP-CONGRUENT-GLASS — the chip family's warm-glass toggle register
|
|
38
|
+
(.glass-chip: the stadium-pill lens + the de-frauded colour-flood punch the
|
|
39
|
+
ToggleChip/SelectableChip/toggle-group children compose). @import-ed HERE
|
|
40
|
+
alongside glass-atom.css (icon-chip.css loads in index.css AFTER glass.css, so
|
|
41
|
+
`.glass-capsule` + `.accent-tone` + the `--glass-*` axes resolve) — a consume-
|
|
42
|
+
only recipe, not a second material. CSS `@import` must precede every rule, so it
|
|
43
|
+
leads with the atom import. */
|
|
44
|
+
@import "./glass/glass-chip.css";
|
|
45
|
+
|
|
30
46
|
:root {
|
|
31
47
|
/* The chip≤glyph proportion (d2, structural). The diameter floors at
|
|
32
48
|
`glyph × ratio` so the plate can NEVER paint under the glyph — a
|
|
@@ -110,6 +126,35 @@
|
|
|
110
126
|
--icon-chip-plate-strength: 40%;
|
|
111
127
|
}
|
|
112
128
|
|
|
129
|
+
/* ── The QUIET GLASS register (BD.W-GLASS-ATOM-REGISTER cross-link) ─────────────
|
|
130
|
+
The chip's SECOND register: the transmissive `.glass-atom` warm-glass capsule
|
|
131
|
+
tinted toward the event hue via `--glass-fill-tint`, NOT the loud `in srgb`
|
|
132
|
+
brand plate (the default, kept — AW.W26 fence). The component applies
|
|
133
|
+
`.glass-capsule .glass-atom` alongside `.icon-chip--glass`, so the body (warm
|
|
134
|
+
floor + `--glass-blur-quiet` backdrop + the keyed rim) comes from the SHARED
|
|
135
|
+
register — this rule only RETIRES the chip's own `in srgb` plate-color fill so
|
|
136
|
+
the two backgrounds don't double-paint (the capsule's translucent fill +
|
|
137
|
+
`.glass-atom`'s tinted `background-image` are the body). The glyph event color
|
|
138
|
+
is untouched (the one color event still reads). A flat capsule lens — the
|
|
139
|
+
backdrop-filter rides the shared `--glass-blur-quiet` (Safari-native, no
|
|
140
|
+
`backdrop-filter:url`, Fence 8). */
|
|
141
|
+
.icon-chip--glass {
|
|
142
|
+
/* Retire the brand plate fill — the `.glass-capsule` body + the `.glass-atom`
|
|
143
|
+
tinted `background-image` paint the surface (no double-fill). The capsule's
|
|
144
|
+
`background:` shorthand + the atom's later `background-image` layer win the
|
|
145
|
+
cascade over this `background-color: transparent` reset by source order. */
|
|
146
|
+
background-color: transparent;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* The glass chip's hover-bloom (when BOTH `--glass` + `--bloom`) routes the glow
|
|
150
|
+
ring through the SAME event color, over the glass body — the bloom GROW (the
|
|
151
|
+
base `.icon-chip--bloom:hover` transform/spring) is inherited unchanged. */
|
|
152
|
+
@media (hover: hover) {
|
|
153
|
+
.icon-chip--glass.icon-chip--bloom:hover {
|
|
154
|
+
background-color: transparent;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
113
158
|
/* ── The duotone axis — a low-alpha fill of the same hue UNDER the stroke ──── */
|
|
114
159
|
/* Lucide glyphs bake `fill: none` on the SVG root; CSS wins over the
|
|
115
160
|
presentation attribute, so the `[data-duotone] svg` rule reaches the inner
|
package/dist/styles/index.css
CHANGED
|
@@ -172,6 +172,17 @@
|
|
|
172
172
|
@import "./floating-panel.css";
|
|
173
173
|
@import "./transitions.css";
|
|
174
174
|
@import "./animations.css";
|
|
175
|
+
/* BD.W-MORPH-FIELD-WELD — the ONE morph-field recipe (the body/neck/waist silhouette + the
|
|
176
|
+
dedicated @property --morph-squish channel + the welling concave waist clip-path + the
|
|
177
|
+
1940s ink-cast). The `useMorphField` weld writes the drive-derived channels once/frame;
|
|
178
|
+
this sheet paints them. The cross-engine clip-path waist FLOOR + the [data-morphing] goo
|
|
179
|
+
gate live here. */
|
|
180
|
+
@import "./motion/morph-field.css";
|
|
181
|
+
/* BE.W-CELEBRATE-BURST — the earned glass-petal radial-bloom recipe (the
|
|
182
|
+
.glass-celebration-petal warm-cream frosted-glass material + the overlay anchor).
|
|
183
|
+
@import-ed after animations.css per the wave spec (the petal motion is the JS rAF
|
|
184
|
+
step's compositor writes; this recipe is the static frosted material the petals wear). */
|
|
185
|
+
@import "./jubilance.css";
|
|
175
186
|
@import "./scroll-driven.css";
|
|
176
187
|
@import "./scroll-choreography.css";
|
|
177
188
|
@import "./scroll-chrome.css";
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/* jubilance.css — BE.W-CELEBRATE-BURST — the earned glass-petal radial-bloom recipe.
|
|
2
|
+
*
|
|
3
|
+
* THE PETAL IS THE SURFACE'S OWN GLASS (CB4 / warm-cream identity). `.glass-celebration-
|
|
4
|
+
* petal` paints the warm-cream frosted glass material via the EXACT element-level oklab
|
|
5
|
+
* tint seam `glass/ladder.css` composes — `color-mix(in oklab, var(--glass-bg-floating),
|
|
6
|
+
* var(--glass-tint-source) var(--glass-tint-strength))` — so the petal reads as the
|
|
7
|
+
* surface's OWN glass, NOT a saturated confetti color. There is NO disco-grain, NO `✦`
|
|
8
|
+
* glyph, NO sparkle-sweep (the §6 calm register, the disco-fenced floor).
|
|
9
|
+
*
|
|
10
|
+
* THE :tone OPT-IN (the hue-keyed burst). `useCelebrationBurst({ tone })` writes
|
|
11
|
+
* `--glass-accent` onto each petal (the W-GLASS-ACCENT rim-tint seam); the catch-light
|
|
12
|
+
* core reads `--glass-specular-core` which ALREADY OKLab-mixes toward `--glass-accent ×
|
|
13
|
+
* --glass-accent-strength` (material.css) — so a download-complete petal blooms
|
|
14
|
+
* `--viz-download` through the SHARED specular cohort, never a second fork. At the default
|
|
15
|
+
* (no tone) `--glass-accent` is transparent → the warm-cream identity (the no-op floor).
|
|
16
|
+
*
|
|
17
|
+
* COMPOSITOR-ONLY (CB3 / proof:no-layout-animation). The recipe paints a static frosted
|
|
18
|
+
* pill; the per-frame motion (translate/scale/opacity/filter) is the JS rAF step's inline
|
|
19
|
+
* writes (compositor channels ONLY — never a layout property). The recipe carries NO
|
|
20
|
+
* layout-animating transition.
|
|
21
|
+
*
|
|
22
|
+
* PRM-STATIC (the vestibular floor). Under reduce the JS `burst()` spawns NO drifting
|
|
23
|
+
* petals (the prefersReducedMotion() branch fires only the destination chip-bloom-in
|
|
24
|
+
* cascade) — so there are no petals to carve here; the destination cascade is PRM-carved
|
|
25
|
+
* by the EXISTING icon-chip-reveal `animation: none` rule (icon-chip.css), re-used not
|
|
26
|
+
* re-authored. */
|
|
27
|
+
|
|
28
|
+
@layer components {
|
|
29
|
+
/* The short-lived overlay container the JS appends to the origin's offsetParent (one
|
|
30
|
+
DOM write, removed on settle). It is a zero-size anchor at the origin center; the
|
|
31
|
+
petals position-absolute off it. */
|
|
32
|
+
.glass-celebration-overlay {
|
|
33
|
+
position: absolute;
|
|
34
|
+
pointer-events: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* The earned glass petal — the surface's OWN warm-cream frosted glass material. */
|
|
38
|
+
.glass-celebration-petal {
|
|
39
|
+
/* The petal footprint — a small pill, tokenized for the one-knob retune. */
|
|
40
|
+
--celebration-petal-size: 10px;
|
|
41
|
+
position: absolute;
|
|
42
|
+
inline-size: var(--celebration-petal-size);
|
|
43
|
+
block-size: var(--celebration-petal-size);
|
|
44
|
+
border-radius: var(--radius-pill, 9999px);
|
|
45
|
+
pointer-events: none;
|
|
46
|
+
/* THE WARM-CREAM GLASS (CB4) — the EXACT element-level oklab tint seam ladder.css
|
|
47
|
+
composes for every glass rung. NOT a saturated bg-<hue>/raw-Tailwind confetti
|
|
48
|
+
color: the petal reads as the surface's own frosted glass. */
|
|
49
|
+
background: color-mix(
|
|
50
|
+
in oklab,
|
|
51
|
+
var(--glass-bg-floating, color-mix(in oklab, var(--card), white 8%)),
|
|
52
|
+
var(--glass-tint-source, transparent) var(--glass-tint-strength, 0%)
|
|
53
|
+
);
|
|
54
|
+
/* A sub-perceptual warm-cream catch-light — reads the SHARED --glass-specular-core
|
|
55
|
+
(which carries the --glass-accent :tone opt-in via material.css's oklab mix), a
|
|
56
|
+
soft inner gleam so the petal reads as lit glass, never a flat slab. NO second
|
|
57
|
+
specular fork, NO disco. */
|
|
58
|
+
box-shadow:
|
|
59
|
+
inset 0 0 0 0.5px
|
|
60
|
+
color-mix(in oklab, var(--glass-specular-core, hsl(40 35% 92%)) 40%, transparent),
|
|
61
|
+
0 1px 3px color-mix(in oklab, var(--foreground), transparent 86%);
|
|
62
|
+
/* will-change promotes ONLY the compositor channels the JS step writes. */
|
|
63
|
+
will-change: transform, opacity, filter;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/* motion/morph-field.css — BD.W-MORPH-FIELD-WELD — the ONE morph-field RECIPE.
|
|
2
|
+
*
|
|
3
|
+
* The body / neck / waist recipe + the DEDICATED squish channel every `useMorphField`
|
|
4
|
+
* consumer paints over. The weld JS (useMorphField.ts) writes the drive-derived custom
|
|
5
|
+
* properties once per frame (`--morph-squish`, `--morph-neck-girth`, `--morph-neck-gap`,
|
|
6
|
+
* `--morph-k`, `--morph-waist`, `--morph-specular-angle`); this sheet projects them onto
|
|
7
|
+
* the body + neck silhouettes. The MORPH_SIGNATURES rows live in the JS (motion-named
|
|
8
|
+
* DATA); this sheet is signature-agnostic — it paints whatever the masses carry.
|
|
9
|
+
*
|
|
10
|
+
* THE DEDICATED SQUISH CHANNEL (the dock-core hardening fence). The volume-preserving
|
|
11
|
+
* squish writes `--morph-squish`, NEVER `--stretch` (the 6-JS-owner + the
|
|
12
|
+
* `--dock-morph-max-stretch:1.14` clobber). A morph that ALSO rides --stretch (the dock
|
|
13
|
+
* collapse) keeps its own channel; the weld owns this one. Registered @property so a bare
|
|
14
|
+
* var() INTERPOLATES the ramp (the --dock-morph-t precedent).
|
|
15
|
+
*
|
|
16
|
+
* DETERMINISM (motion-canon P5 / the M5 scalar-binding). Every axis below is
|
|
17
|
+
* `f(var(--morph-*))` (the weld's drive-derived writes) — NEVER a CSS animation/transition
|
|
18
|
+
* with its own clock. A frame at a given drive value is byte-reproducible. Compositor-only
|
|
19
|
+
* (transform / scale / clip-path / opacity / --* — ZERO animated layout property).
|
|
20
|
+
*
|
|
21
|
+
* THE CARTOON PUNCH (welded IN, gated on the SHIPPED Band-0 tokens). The body squash rides
|
|
22
|
+
* `--morph-squish × --motion-weight`; the ink cast rides the `--shadow-cartoon-*` rung
|
|
23
|
+
* (never a hex literal, never an animated box-shadow); the neck specular-sweep lags the
|
|
24
|
+
* geometry (follow-through). `--motion-weight` and `--ease-cartoon-punch` are SHIPPED (P1,
|
|
25
|
+
* scheme-motion.css), so the punch is LIVE (not skipped); PRM zeroes --motion-weight → the
|
|
26
|
+
* squash/arc/cast collapse in ONE assignment.
|
|
27
|
+
*
|
|
28
|
+
* CROSS-ENGINE (§L7). The goo `<filter>` is the ONE `<GooFilter>` mount's REGULAR
|
|
29
|
+
* `filter:url(#…)` (NEVER backdrop-filter — bug 245510), applied on a SIBLING goo LAYER,
|
|
30
|
+
* never an ANCESTOR of glass (an ancestor filter kills backdrop-filter on descendants in
|
|
31
|
+
* both engines). The clip-path hourglass waist is the Tier-C cross-engine FLOOR under the
|
|
32
|
+
* filter — a concave waist on BOTH engines before any blur fuses it. The filter is gated to
|
|
33
|
+
* `[data-morphing]` (never a steady-state re-blur — the Safari budget fence). */
|
|
34
|
+
|
|
35
|
+
/* The dedicated squish channel + the neck-drive channels — typed INHERITING @property so a
|
|
36
|
+
bare var() INTERPOLATES (the --dock-morph-t/--neck-t precedent). The weld writes them on
|
|
37
|
+
the host; descendant bodies + neck read the inheriting values. */
|
|
38
|
+
@property --morph-squish {
|
|
39
|
+
syntax: "<number>";
|
|
40
|
+
inherits: true;
|
|
41
|
+
initial-value: 1;
|
|
42
|
+
}
|
|
43
|
+
@property --morph-neck-girth {
|
|
44
|
+
syntax: "<number>";
|
|
45
|
+
inherits: true;
|
|
46
|
+
initial-value: 0;
|
|
47
|
+
}
|
|
48
|
+
@property --morph-k {
|
|
49
|
+
syntax: "<number>";
|
|
50
|
+
inherits: true;
|
|
51
|
+
initial-value: 1;
|
|
52
|
+
}
|
|
53
|
+
@property --morph-waist {
|
|
54
|
+
syntax: "<number>";
|
|
55
|
+
inherits: true;
|
|
56
|
+
initial-value: 1;
|
|
57
|
+
}
|
|
58
|
+
@property --morph-specular-angle {
|
|
59
|
+
syntax: "<angle>";
|
|
60
|
+
inherits: true;
|
|
61
|
+
initial-value: 0deg;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@layer components {
|
|
65
|
+
/* The morph FIELD host — the sibling goo LAYER the filter applies to (never an
|
|
66
|
+
ancestor of glass). The weld writes the drive-derived channels here; the bodies +
|
|
67
|
+
neck live under it and read the inheriting values. The filter engages ONLY while the
|
|
68
|
+
morph is in-flight (`[data-morphing]`) — crisp at rest, gooey during the merge. */
|
|
69
|
+
.morph-field {
|
|
70
|
+
position: relative;
|
|
71
|
+
pointer-events: none;
|
|
72
|
+
/* isolation keeps the blur/threshold scoped to the masses, not the page behind. */
|
|
73
|
+
isolation: isolate;
|
|
74
|
+
filter: none;
|
|
75
|
+
}
|
|
76
|
+
/* Gate the goo filter to the in-flight window — the §L7 Safari budget fence (no
|
|
77
|
+
steady-state re-blur). The weld sets `[data-morphing]` on the host (or the consumer
|
|
78
|
+
does). The filter id is the consumer's tuned instance off the ONE <GooFilter> mount
|
|
79
|
+
(`url(#glass-goo)` / `url(#pager-goo)` / `url(#dock-morph-goo)` / `url(#morph-goo)`),
|
|
80
|
+
passed via `--morph-goo-filter`. The REGULAR filter property (Safari-correct). */
|
|
81
|
+
[data-morphing].morph-field,
|
|
82
|
+
[data-morphing] .morph-field {
|
|
83
|
+
filter: var(--morph-goo-filter, url(#morph-goo));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* A morph BODY — a warm-cream domed-droplet mass the weld translates/squashes. The fill
|
|
87
|
+
is the SAME six-layer warm-glass register the whole library reads (NEVER gray — the
|
|
88
|
+
transparent-plate bug the showcase had is exactly this fill being absent). The
|
|
89
|
+
transform is written INLINE by the weld (translate + scale); this sheet supplies the
|
|
90
|
+
resting silhouette + fill + the cast. */
|
|
91
|
+
.morph-body {
|
|
92
|
+
position: absolute;
|
|
93
|
+
border-radius: 999px;
|
|
94
|
+
/* the warm-cream domed droplet — a soft radial so the goo threshold reads a domed
|
|
95
|
+
mass, not a flat slab; transmissive (~0.55-0.80 α) so the colorful field reads
|
|
96
|
+
THROUGH it. Reads the shared --glass-* cohort (warm-cream identity, both modes). */
|
|
97
|
+
background: radial-gradient(
|
|
98
|
+
120% 120% at 50% 38%,
|
|
99
|
+
var(--glass-bg-floating, color-mix(in oklab, var(--card), white 8%)) 0%,
|
|
100
|
+
var(--glass-bg-resting, var(--card)) 62%,
|
|
101
|
+
color-mix(in oklab, var(--card), var(--foreground) 6%) 100%
|
|
102
|
+
);
|
|
103
|
+
/* a 1px inner catch-light rim (the §3 defined edge) — the crisp metaball rim. */
|
|
104
|
+
box-shadow: inset 0 1px 0 0 color-mix(in oklab, white 22%, transparent);
|
|
105
|
+
overflow: clip;
|
|
106
|
+
transform-origin: center;
|
|
107
|
+
will-change: transform;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* The welling NECK — the concave-throat filament between the two outermost bodies. Its
|
|
111
|
+
girth WELLS on `--morph-neck-girth` (peak mid, ~0 at the ends → no ghost throat at
|
|
112
|
+
rest) and its clip-path carves the structural hourglass waist (the Tier-C floor, both
|
|
113
|
+
engines, BEFORE the filter fuses it). The weld writes its transform inline (translate
|
|
114
|
+
+ scaleX span + scaleY girth); this sheet supplies the fill + the waist clip + the
|
|
115
|
+
specular sweep. */
|
|
116
|
+
.morph-neck {
|
|
117
|
+
position: absolute;
|
|
118
|
+
border-radius: 999px;
|
|
119
|
+
background: radial-gradient(
|
|
120
|
+
130% 130% at 50% 40%,
|
|
121
|
+
var(--glass-bg-floating, color-mix(in oklab, var(--card), white 8%)) 0%,
|
|
122
|
+
var(--glass-bg-resting, var(--card)) 70%,
|
|
123
|
+
color-mix(in oklab, var(--card), var(--foreground) 6%) 100%
|
|
124
|
+
);
|
|
125
|
+
/* THE CONCAVE WAIST — the clip-path hourglass pinches the throat toward the
|
|
126
|
+
centerline as the gap-fraction k narrows (the structural local-minimum waist read
|
|
127
|
+
on BOTH engines before the blur). The inset GROWS from the rim as the waist
|
|
128
|
+
tightens (`1 - --morph-waist`), `round 999px` so the throat is a gel capsule. */
|
|
129
|
+
--neck-pinch: calc((1 - clamp(0, var(--morph-waist, 1), 1)) * 42%);
|
|
130
|
+
clip-path: inset(var(--neck-pinch) 0 var(--neck-pinch) 0 round 999px);
|
|
131
|
+
/* the neck is visible EXACTLY while it wells (the opacity is the girth). */
|
|
132
|
+
opacity: var(--morph-neck-girth, 0);
|
|
133
|
+
transform-origin: center;
|
|
134
|
+
overflow: clip;
|
|
135
|
+
will-change: transform, clip-path, opacity;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* THE NECK SPECULAR-SWEEP (follow-through) — a moving catch-light bending along the
|
|
139
|
+
throat as it stretches, reading the SHARED --glass-specular-core cohort (NO fork).
|
|
140
|
+
The conic angle LAGS the geometry (`--morph-specular-angle` carries the 60° trail the
|
|
141
|
+
weld writes). plus-lighter additive; a non-supporting engine degrades to a plain warm
|
|
142
|
+
overlay. */
|
|
143
|
+
.morph-neck::after {
|
|
144
|
+
content: "";
|
|
145
|
+
position: absolute;
|
|
146
|
+
inset: 0;
|
|
147
|
+
border-radius: 999px;
|
|
148
|
+
pointer-events: none;
|
|
149
|
+
background: conic-gradient(
|
|
150
|
+
from var(--morph-specular-angle, 0deg) at 50% 50%,
|
|
151
|
+
transparent 0deg,
|
|
152
|
+
color-mix(
|
|
153
|
+
in srgb,
|
|
154
|
+
var(--glass-specular-core, hsl(40 35% 92%)) 55%,
|
|
155
|
+
transparent
|
|
156
|
+
) 18deg,
|
|
157
|
+
transparent 60deg,
|
|
158
|
+
transparent 360deg
|
|
159
|
+
);
|
|
160
|
+
opacity: calc(
|
|
161
|
+
var(--glass-specular-intensity-rest, 0.12) +
|
|
162
|
+
clamp(0, var(--morph-neck-girth, 0), 1) * 0.18
|
|
163
|
+
);
|
|
164
|
+
mix-blend-mode: plus-lighter;
|
|
165
|
+
will-change: opacity;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* THE 1940s INK CAST (solid drawing — the most ALIVE detail). A `::after` caster on the
|
|
169
|
+
FIELD that slides OPPOSITE the morph motion and DEEPENS mid-merge, pooling darkest at
|
|
170
|
+
the thinnest waist (the mass is heaviest where the neck is thinnest). On the REAL
|
|
171
|
+
`--shadow-cartoon-*` rung (never a hex, never an animated box-shadow — a compositor
|
|
172
|
+
translate of a soft radial). Gated on `--motion-weight` so PRM zeroes it. */
|
|
173
|
+
.morph-field::after {
|
|
174
|
+
content: "";
|
|
175
|
+
position: absolute;
|
|
176
|
+
inset: 0;
|
|
177
|
+
z-index: -1;
|
|
178
|
+
pointer-events: none;
|
|
179
|
+
border-radius: inherit;
|
|
180
|
+
/* the cast plane reads the cartoon shadow rung (the cards.css cohort) — a soft warm
|
|
181
|
+
ink pool that deepens as the waist thins. No hex; reads --shadow-color. */
|
|
182
|
+
background: radial-gradient(
|
|
183
|
+
60% 40% at 50% 60%,
|
|
184
|
+
color-mix(
|
|
185
|
+
in srgb,
|
|
186
|
+
var(--shadow-color, var(--foreground))
|
|
187
|
+
calc(
|
|
188
|
+
(18% + (1 - clamp(0, var(--morph-waist, 1), 1)) * 22%) *
|
|
189
|
+
var(--motion-weight, 0)
|
|
190
|
+
),
|
|
191
|
+
transparent
|
|
192
|
+
)
|
|
193
|
+
0%,
|
|
194
|
+
transparent 72%
|
|
195
|
+
);
|
|
196
|
+
/* slide OPPOSITE the morph — the cast trails the mass. The offset is the neck girth
|
|
197
|
+
× weight (deepest at mid-merge), on the cross axis. Compositor translate only. */
|
|
198
|
+
translate: 0
|
|
199
|
+
calc(var(--morph-neck-girth, 0) * 6px * var(--motion-weight, 0));
|
|
200
|
+
will-change: transform, background;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* PRM (motion-canon P6 / §L5) — the goo layer drops, the neck never paints, the cast +
|
|
204
|
+
sweep are static-off; --motion-weight 0 (the :root PRM carve in scheme-motion.css)
|
|
205
|
+
already zeroes the squash/arc/cast amplitude. The morph still CONFIRMS (the weld's
|
|
206
|
+
seat() places one resting mass at the endpoint). */
|
|
207
|
+
@media (prefers-reduced-motion: reduce) {
|
|
208
|
+
[data-morphing].morph-field,
|
|
209
|
+
[data-morphing] .morph-field {
|
|
210
|
+
filter: none;
|
|
211
|
+
}
|
|
212
|
+
.morph-neck,
|
|
213
|
+
.morph-neck::after,
|
|
214
|
+
.morph-field::after {
|
|
215
|
+
display: none;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* @supports floor — no `filter:url()` (the WebKit teardrop floor / a gap engine): the
|
|
220
|
+
clip-path hourglass waist on .morph-neck is the structural cross-engine FLOOR; the
|
|
221
|
+
bodies + the welling neck still read as a metaball via the clip-path waist alone (no
|
|
222
|
+
filter fuse). The morph degrades by SOFTENING, never to a non-morph crossfade. */
|
|
223
|
+
@supports not (filter: url("#morph-goo")) {
|
|
224
|
+
[data-morphing].morph-field,
|
|
225
|
+
[data-morphing] .morph-field {
|
|
226
|
+
filter: none;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|