@mkbabb/glass-ui 4.0.1 → 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-CW7a0m8M.js → CardAction-DlVP2evz.js} +72 -53
- package/dist/{CommandShortcut-DvZNQ_HF.js → CommandShortcut-By-VQcLO.js} +25 -14
- package/dist/{ConfiguratorRow-BR4l-ixA.js → ConfiguratorRow-YMXdINHx.js} +14 -14
- package/dist/ContextMenuContent-CMWn6huB.js +90 -0
- package/dist/{ContextMenuSubContent-xol4sD2q.js → ContextMenuSubContent-DvwWCUc0.js} +16 -16
- package/dist/{DataTable-CuKwF7wr.js → DataTable-C4tG3eIJ.js} +4 -4
- package/dist/DialogContent-D8U9ZfWS.js +121 -0
- package/dist/DialogFooter-DoLy0ewI.js +80 -0
- package/dist/DialogScrollContent-BMekN7gq.js +93 -0
- package/dist/{FadingScroll-DI6hQhT9.js → FadingScroll-P8B30rAD.js} +1 -1
- package/dist/HoverCardContent-DAmGYglo.js +88 -0
- package/dist/{HoverPopover-CbqbNwgU.js → HoverPopover-DYpBOzzF.js} +1 -1
- package/dist/{IconChip-BTD-nay5.js → IconChip-CQa7XZYc.js} +7 -5
- package/dist/{IconTooltip-Bl8gFZ8d.js → IconTooltip-_df8M3xm.js} +1 -1
- package/dist/Input-CyU4_hIC.js +57 -0
- package/dist/{MetricBadge-RHdBP72w.js → MetricBadge-DQt_dGah.js} +1 -1
- package/dist/{Notification-VUwexFUf.js → Notification-BlSPJhtZ.js} +4 -4
- package/dist/NumberFieldContent-Z3VxGu_6.js +140 -0
- 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-DctG61iZ.js → Progress-C9SsdwIZ.js} +1 -1
- package/dist/{ScrollingText-yOpBzFYq.js → ScrollingText-DY3W1Jfh.js} +2 -2
- package/dist/SelectScrollDownButton-3mFHX_R-.js +260 -0
- package/dist/{SelectSeparator-DXswVdRz.js → SelectSeparator-CNRGG7Ew.js} +1 -1
- package/dist/Separator-Cf9-JFgi.js +44 -0
- package/dist/Switch-uf-UKPA2.js +49 -0
- package/dist/{Toaster-Bw4xR8xV.js → Toaster-ozrsR4mP.js} +2 -2
- package/dist/{ToggleGroupItem-pEM9vIhs.js → ToggleGroupItem-BpzaVzNm.js} +6 -6
- package/dist/TooltipProvider-QQVM_80r.js +109 -0
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +16 -32
- package/dist/api/types-extra.d.ts +33 -0
- package/dist/api.js +2 -2
- package/dist/aurora.js +629 -269
- package/dist/badge-Bt14yURi.js +72 -0
- package/dist/badge.js +1 -1
- package/dist/border-progress.js +49 -57
- package/dist/button-D1W9PrzI.js +130 -0
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -3
- package/dist/card.js +1 -1
- package/dist/carousel.js +235 -106
- package/dist/chipVariants-BJQ0I2kB.js +18 -0
- package/dist/collapsible.js +1 -1
- package/dist/color-B9jZdhJX.js +116 -0
- package/dist/color.js +2 -2
- package/dist/command.js +1 -1
- package/dist/completion-seal.d.ts +1 -0
- package/dist/completion-seal.js +89 -0
- package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
- package/dist/components/custom/aurora/composables/color.d.ts +13 -0
- package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
- package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
- package/dist/components/custom/aurora/composables/runtime.d.ts +12 -0
- package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +12 -3
- package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +8 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +47 -0
- package/dist/components/custom/aurora/constants/renderMode.d.ts +16 -8
- package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -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/border-progress/composables/spectrum-walk.d.ts +25 -0
- package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +14 -18
- package/dist/components/custom/border-progress/index.d.ts +1 -1
- package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
- package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
- package/dist/components/custom/completion-seal/constants.d.ts +46 -0
- package/dist/components/custom/completion-seal/index.d.ts +4 -0
- package/dist/components/custom/concentric/Concentric.vue.d.ts +15 -12
- package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +12 -0
- package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
- package/dist/components/custom/concentric/composables/levelField.d.ts +50 -0
- package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +7 -3
- package/dist/components/custom/concentric/composables/useConcentric.d.ts +3 -3
- package/dist/components/custom/concentric/constants.d.ts +69 -24
- 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/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
- package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
- package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
- package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
- package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
- package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
- package/dist/components/custom/constellation/constants.d.ts +33 -0
- package/dist/components/custom/constellation/constellationField.d.ts +31 -1
- package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
- package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
- package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
- package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
- package/dist/components/custom/constellation/index.d.ts +5 -5
- package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
- package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
- package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
- package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
- package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
- package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
- package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
- package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
- package/dist/components/custom/deck/constants.d.ts +14 -0
- package/dist/components/custom/deck/index.d.ts +8 -0
- package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +4 -3
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +22 -0
- package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +19 -0
- package/dist/components/custom/dock/DockStack.vue.d.ts +78 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +21 -3
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +18 -32
- package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +78 -67
- package/dist/components/custom/dock/composables/index.d.ts +3 -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/useDockSearch.d.ts +85 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +49 -0
- package/dist/components/custom/dock/constants.d.ts +32 -17
- package/dist/components/custom/dock/index.d.ts +8 -2
- package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +15 -11
- package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +69 -6
- 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 +50 -9
- package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +6 -5
- package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +23 -9
- package/dist/components/custom/dot-flow-field/constants.d.ts +92 -20
- package/dist/components/custom/dot-flow-field/index.d.ts +2 -2
- 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 +31 -18
- package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +2 -1
- package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
- package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
- package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +61 -0
- package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
- package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +34 -0
- package/dist/components/custom/dot-matrix/constants.d.ts +72 -0
- package/dist/components/custom/dot-matrix/index.d.ts +5 -0
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
- package/dist/components/custom/easing/EasingPicker.vue.d.ts +2 -2
- package/dist/components/custom/easing/composables/useEasingPicker.d.ts +5 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +44 -47
- package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +24 -0
- package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +31 -0
- package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +56 -0
- package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +61 -37
- package/dist/components/custom/fourier-field/constants.d.ts +114 -4
- package/dist/components/custom/fourier-field/index.d.ts +23 -18
- package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
- package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
- package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +9 -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/index.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
- 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 +86 -1
- package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
- package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
- package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +79 -0
- package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +45 -0
- package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
- package/dist/components/custom/goo-dot-matrix/constants.d.ts +115 -0
- package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +13 -0
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +4 -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/labeled-field/LabeledField.vue.d.ts +21 -2
- package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
- package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
- package/dist/components/custom/pager-dots/index.d.ts +2 -0
- package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
- package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +18 -0
- package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
- package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +105 -0
- package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +18 -0
- package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +21 -0
- package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
- package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
- package/dist/components/custom/paper-grid/constants.d.ts +95 -0
- package/dist/components/custom/paper-grid/index.d.ts +5 -0
- package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
- package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
- package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
- package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
- package/dist/components/custom/search/index.d.ts +2 -0
- package/dist/components/custom/search/searchVariants.d.ts +19 -0
- package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
- package/dist/components/custom/selectable-chip/chipVariants.d.ts +39 -0
- package/dist/components/custom/selectable-chip/index.d.ts +2 -0
- package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +15 -0
- package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
- package/dist/components/custom/split-chars/index.d.ts +1 -0
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +8 -6
- package/dist/components/custom/tabs/constants.d.ts +28 -2
- 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 +32 -17
- package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
- package/dist/components/ui/_shared/index.d.ts +2 -0
- package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
- 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/button/index.d.ts +1 -1
- package/dist/components/ui/card/Card.vue.d.ts +46 -1
- package/dist/components/ui/card/ScrollCard.vue.d.ts +1 -1
- package/dist/components/ui/card/index.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselContent.vue.d.ts +2 -4
- package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
- package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
- package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
- package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
- 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/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
- package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
- package/dist/components/ui/input/Input.vue.d.ts +3 -0
- package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
- package/dist/components/ui/select/SelectContent.vue.d.ts +12 -0
- package/dist/components/ui/slider/Slider.vue.d.ts +9 -0
- package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
- package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
- package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
- package/dist/composables/color/index.d.ts +2 -0
- package/dist/composables/color/useAccentTone.d.ts +34 -0
- package/dist/composables/dom/index.d.ts +1 -0
- package/dist/composables/dom/useDragVelocity.d.ts +46 -0
- package/dist/composables/glass/useVizChoreography.d.ts +123 -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 +105 -2
- package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +40 -2
- package/dist/composables/glass/webgpu/index.d.ts +2 -1
- package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +65 -7
- package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +50 -2
- package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
- package/dist/composables/motion/core/index.d.ts +7 -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/scrollReader.d.ts +25 -0
- package/dist/composables/motion/springPresets.d.ts +19 -1
- 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/useCharStagger.d.ts +44 -0
- package/dist/composables/motion/useDockCtaReceive.d.ts +29 -22
- 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/useScrollChrome.d.ts +58 -0
- package/dist/composables/motion/useScrollPin.d.ts +49 -0
- package/dist/composables/motion/useScrollScene.d.ts +67 -0
- package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
- package/dist/composables/motion/useSpringPress.d.ts +5 -5
- package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
- package/dist/composables/sidebar/index.d.ts +4 -1
- package/dist/composables/sidebar/types.d.ts +68 -3
- package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
- package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
- package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
- package/dist/composables/virtual/index.d.ts +4 -0
- package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
- package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
- package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
- package/dist/concentric.js +552 -309
- package/dist/configurator.js +2 -2
- package/dist/confirm-dialog.js +62 -47
- package/dist/constellation.js +635 -235
- 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.d.ts +1 -0
- package/dist/deck.js +105 -0
- package/dist/dialog.js +4 -3
- package/dist/dock.js +1320 -631
- package/dist/dockContext-gFVS2gMg.js +18 -0
- package/dist/dom.js +7 -6
- package/dist/dot-flow-field.js +1268 -387
- package/dist/dot-matrix.d.ts +1 -0
- package/dist/dot-matrix.js +774 -0
- package/dist/dotMatrixField-CRO0ZFk4.js +48 -0
- package/dist/drawer.js +106 -96
- package/dist/{dropdown-menu-CofSZuk8.js → dropdown-menu-CCfcCQ68.js} +83 -79
- package/dist/dropdown-menu.js +1 -1
- package/dist/easing.js +188 -176
- package/dist/expandable-container.js +43 -21
- package/dist/fading-scroll.js +1 -1
- package/dist/flow.glsl-DqEGRpl4.js +4 -0
- package/dist/forms.js +64 -62
- package/dist/fourier-field.js +1069 -178
- 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 +164 -119
- package/dist/goo-blob.js +175 -1230
- package/dist/goo-dot-matrix.d.ts +1 -0
- package/dist/goo-dot-matrix.js +811 -0
- 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 +5 -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 +70 -60
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +1 -1
- package/dist/metric-stack.js +12 -3
- package/dist/motion-core.js +59 -34
- package/dist/motion-curves.js +30 -14
- package/dist/motion.js +231 -96
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/pager-dots.js +2 -91
- package/dist/paper-backdrop.js +1 -1
- package/dist/paper-grid.d.ts +1 -0
- package/dist/paper-grid.js +761 -0
- package/dist/paperGrid-CXCSMbZ1.js +191 -0
- package/dist/popover.js +1 -1
- package/dist/{presets-BW2b-fr1.js → presets-QvYgnFIZ.js} +14 -13
- package/dist/{procedural-color.glsl-CIFsJhwI.js → procedural-color.wgsl-C1Y5PkM6.js} +2 -2
- package/dist/progress.js +1 -1
- package/dist/pulse.js +2 -2
- package/dist/reactive.js +2 -2
- package/dist/{useCanvas2D-B8w_E3Rr.js → resolveCanvasColor-DsSJk06I.js} +16 -6
- package/dist/scrollReader-rc3Ns_NM.js +42 -0
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +162 -306
- package/dist/select.js +3 -3
- package/dist/selectable-chip.d.ts +1 -0
- package/dist/selectable-chip.js +48 -0
- package/dist/separator.js +1 -1
- package/dist/{sheet-tZMg0E0w.js → sheet-DUCIoOe0.js} +4 -4
- package/dist/sheet.js +1 -1
- package/dist/sidebar.js +216 -114
- package/dist/slider-CcICPe3u.js +149 -0
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/spectrum-walk-cBNSx_zm.js +33 -0
- package/dist/springPresets-DfoQ6XRY.js +64 -0
- package/dist/stacked-icons.js +54 -39
- package/dist/styles/animations.css +13 -3
- package/dist/styles/cards.css +271 -2
- package/dist/styles/completion-seal.css +131 -0
- package/dist/styles/components.css +1 -4
- package/dist/styles/configurator.css +221 -1
- package/dist/styles/critical-partition.mjs +66 -11
- package/dist/styles/deferred.css +4 -0
- package/dist/styles/dock/adaptive-legibility.css +119 -0
- package/dist/styles/dock/cta-seat.css +87 -0
- package/dist/styles/dock/density.css +167 -6
- package/dist/styles/dock/fission-bridge.css +552 -0
- package/dist/styles/dock/layers.css +90 -78
- package/dist/styles/dock/morph-bridge.css +67 -18
- package/dist/styles/dock/morph.css +57 -118
- package/dist/styles/dock/overflow.css +12 -0
- package/dist/styles/dock/search.css +68 -0
- package/dist/styles/dock/shape.css +250 -0
- package/dist/styles/dock/shell.css +24 -8
- package/dist/styles/dock/stack-rail.css +352 -0
- package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
- package/dist/styles/dock-controls/icon-button.css +46 -0
- package/dist/styles/dock-controls/triggers.css +23 -1
- package/dist/styles/dock-controls.css +18 -0
- package/dist/styles/dock.css +27 -2
- package/dist/styles/drawer.css +166 -0
- package/dist/styles/glass/accent-tone.css +66 -0
- package/dist/styles/glass/control-surfaces.css +167 -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/ladder.css +67 -17
- 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 +31 -9
- package/dist/styles/glass/surfaces.css +81 -150
- package/dist/styles/glass.css +21 -0
- package/dist/styles/icon-chip.css +45 -0
- package/dist/styles/index.css +26 -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/scroll-chrome.css +123 -0
- package/dist/styles/scroll-driven.css +38 -0
- package/dist/styles/segmented-tabs.css +110 -40
- package/dist/styles/select.css +151 -0
- package/dist/styles/theme/bridges.css +22 -0
- package/dist/styles/theme/radius.css +18 -1
- package/dist/styles/tokens/color-radius.css +14 -4
- package/dist/styles/tokens/dark-arm.css +94 -12
- package/dist/styles/tokens/glass-deep.css +33 -4
- package/dist/styles/tokens/glass-fx.css +122 -1
- package/dist/styles/tokens/glass.css +226 -34
- package/dist/styles/tokens/light-dark.css +3 -3
- package/dist/styles/tokens/offsets.css +27 -0
- package/dist/styles/tokens/property-regs.css +277 -0
- package/dist/styles/tokens/scale-paper.css +86 -30
- package/dist/styles/tokens/scheme-motion.css +106 -133
- 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/sizing-config.css +110 -0
- package/dist/styles/tokens/sizing.css +55 -104
- package/dist/styles/tokens.css +14 -2
- package/dist/styles/typography/semantic.css +18 -5
- package/dist/styles/utilities/a11y-overrides.css +20 -5
- package/dist/styles/utilities/base-misc.css +52 -0
- package/dist/styles/utilities/btn.css +84 -3
- package/dist/styles/utilities/components.css +31 -6
- package/dist/styles/utilities/metal.css +26 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +199 -182
- 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 +2 -2
- package/dist/uniformBridgeWGPU-BCse1SHU.js +1268 -0
- package/dist/{useAnimatedNumber-BfUq2bUM.js → useAnimatedNumber-BntskVdQ.js} +1 -1
- package/dist/{useConfiguratorState-DNlOh6c8.js → useConfiguratorState-22BcULzF.js} +41 -38
- package/dist/useControlSize-DAZ062x7.js +9 -0
- package/dist/useDockCtaReceive-DX7RDb6_.js +88 -0
- package/dist/{useDragMorph-DgxnsVJz.js → useDragMorph-DGLSewwB.js} +4 -4
- package/dist/useDragVelocity-CjcfX3dA.js +57 -0
- package/dist/useFuzzySearch-0fTYOhS4.js +177 -0
- package/dist/useGooMorph-Cs13NgYL.js +104 -0
- package/dist/useGpuSubstrate-Ceet70xq.js +347 -0
- package/dist/useHaptic-CPz5BT9I.js +134 -0
- package/dist/{useLiquidFlex-mZPMiNXh.js → useLiquidFlex-Cc6PjVJD.js} +8 -3
- package/dist/useLiquidPress-CtOQ8Z0_.js +43 -0
- package/dist/useMorphField-ogBM7ubT.js +141 -0
- package/dist/usePointerVelocityField-BrkqZFhj.js +91 -0
- package/dist/useScrollChrome-JuImi1DM.js +258 -0
- package/dist/{useSpringMount-q1amq1SJ.js → useSpringMount-DFxtzmkR.js} +1 -1
- package/dist/useSpringPress-VM9RgVq3.js +36 -0
- package/dist/{useSurfaceAxis-g0NloYEF.js → useSurfaceAxis-Ci7Dnaw2.js} +1 -1
- package/dist/{useTouchGate-CBZTD4SD.js → useTouchGate-B1Lf9XqN.js} +1 -1
- package/dist/{vendor-CKmzio-i.js → vendor-B2qOlYY3.js} +24 -11
- package/dist/virtual.d.ts +1 -0
- package/dist/virtual.js +225 -0
- package/dist/watercolor-dot.js +107 -74
- package/dist/writeVelocityWeight-Bh83xZfs.js +19 -0
- package/package.json +140 -9
- package/src/styles/animations.css +13 -3
- package/src/styles/cards.css +271 -2
- package/src/styles/completion-seal.css +131 -0
- package/src/styles/configurator.css +221 -1
- package/src/styles/critical-partition.mjs +66 -11
- package/src/styles/dock/adaptive-legibility.css +119 -0
- package/src/styles/dock/cta-seat.css +87 -0
- package/src/styles/dock/density.css +167 -6
- package/src/styles/dock/fission-bridge.css +552 -0
- package/src/styles/dock/layers.css +90 -78
- package/src/styles/dock/morph-bridge.css +67 -18
- package/src/styles/dock/morph.css +57 -118
- package/src/styles/dock/overflow.css +12 -0
- package/src/styles/dock/search.css +68 -0
- package/src/styles/dock/shape.css +250 -0
- package/src/styles/dock/shell.css +24 -8
- package/src/styles/dock/stack-rail.css +352 -0
- package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
- package/src/styles/dock-controls/icon-button.css +46 -0
- package/src/styles/dock-controls/triggers.css +23 -1
- package/src/styles/dock-controls.css +18 -0
- package/src/styles/dock.css +27 -2
- package/src/styles/drawer.css +164 -0
- package/src/styles/glass/accent-tone.css +66 -0
- package/src/styles/glass/control-surfaces.css +167 -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/ladder.css +67 -17
- 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 +31 -9
- package/src/styles/glass/surfaces.css +81 -150
- package/src/styles/glass.css +21 -0
- package/src/styles/icon-chip.css +45 -0
- package/src/styles/index.css +26 -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/scroll-chrome.css +123 -0
- package/src/styles/scroll-driven.css +38 -0
- package/src/styles/segmented-tabs.css +110 -36
- package/src/styles/select.css +151 -0
- package/src/styles/theme/bridges.css +22 -0
- package/src/styles/theme/radius.css +18 -1
- package/src/styles/tokens/color-radius.css +14 -4
- package/src/styles/tokens/dark-arm.css +94 -12
- package/src/styles/tokens/glass-deep.css +33 -4
- package/src/styles/tokens/glass-fx.css +122 -1
- package/src/styles/tokens/glass.css +226 -34
- package/src/styles/tokens/light-dark.css +3 -3
- package/src/styles/tokens/offsets.css +27 -0
- package/src/styles/tokens/property-regs.css +277 -0
- package/src/styles/tokens/scale-paper.css +86 -30
- package/src/styles/tokens/scheme-motion.css +106 -133
- 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/sizing-config.css +110 -0
- package/src/styles/tokens/sizing.css +55 -104
- package/src/styles/tokens.css +14 -2
- package/src/styles/typography/semantic.css +18 -5
- package/src/styles/utilities/a11y-overrides.css +20 -5
- package/src/styles/utilities/base-misc.css +52 -0
- package/src/styles/utilities/btn.css +84 -3
- package/src/styles/utilities/components.css +31 -6
- package/src/styles/utilities/metal.css +26 -0
- package/dist/ContextMenuContent-uWnVxDab.js +0 -85
- package/dist/DialogContent-DcKK8k9i.js +0 -103
- package/dist/DialogFooter-BZNX5aVr.js +0 -165
- package/dist/HoverCardContent-b2uaAMRR.js +0 -83
- package/dist/Input-h9v5LeXf.js +0 -55
- package/dist/NumberFieldContent-Cq7EzX-U.js +0 -138
- package/dist/PaperBackdrop-Vf3tlpvd.js +0 -31
- package/dist/SelectScrollDownButton-CrA8F0iV.js +0 -252
- package/dist/Separator-pKF0oA4M.js +0 -37
- package/dist/Switch-CwYNf8bo.js +0 -47
- package/dist/TooltipProvider-rzvnXz60.js +0 -104
- package/dist/badge-D9XWW4GT.js +0 -53
- package/dist/button-DYCUa-tH.js +0 -126
- package/dist/color-DweYl7pE.js +0 -86
- package/dist/components/custom/concentric/composables/ringField.d.ts +0 -44
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
- package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
- package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
- package/dist/createCanvasLifecycle-CHD5XrDW.js +0 -82
- package/dist/dockContext-BNfyPLe9.js +0 -17
- package/dist/procedural-color.wgsl-CToRHugY.js +0 -224
- package/dist/resolveCanvasColor-CUyHr5Uu.js +0 -11
- package/dist/slider-DVb4HXU-.js +0 -142
- package/dist/springPresets-CFQGQfdl.js +0 -40
- package/dist/styles/dock/rail-extend.css +0 -397
- package/dist/useLiquidPress-kfb4KX79.js +0 -39
- package/dist/usePointerVelocityField-JbRd5CrM.js +0 -137
- package/dist/useRAFLoop-UYa4zoiN.js +0 -109
- package/dist/useSpringPress-BsqPr7FJ.js +0 -34
- package/src/styles/dock/rail-extend.css +0 -397
- /package/dist/{CollapsibleContent-68dEXIAl.js → CollapsibleContent-D7UNsXQr.js} +0 -0
- /package/dist/{InstrumentChassis-Bx0F_q5g.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-DwwjicPY.js → SelectGroup-Dcczq44n.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
- /package/dist/{compile-CQEFRTmx.js → compile-INR_tPk_.js} +0 -0
- /package/dist/{constants-BPOqYJAm.js → constants-BWj7DkMn.js} +0 -0
- /package/dist/{createContext-CpBNTRMI.js → createContext-Cd23P9j0.js} +0 -0
- /package/dist/{math-BINYmg5z.js → math-5RcIgCB4.js} +0 -0
- /package/dist/{menuItemVariants-D8VNHq22.js → menuItemVariants-DAXquKja.js} +0 -0
- /package/dist/{prng-Za0Rmgag.js → prng-B5tIXTtj.js} +0 -0
- /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-B4HO9LXG.js} +0 -0
- /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-DO8Vl4gs.js} +0 -0
- /package/dist/{useInterval-CvK1mL92.js → useInterval-BVUI-sez.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BEut54Tk.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-D7bYU2RK.js → useScrollProgress-A0M6qRl7.js} +0 -0
- /package/dist/{useSortable-DHjtZSEd.js → useSortable-DQV_UNDw.js} +0 -0
- /package/dist/{useTextHighlight-CWEi25hf.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-Czsb7zQC.js → vReveal-CT1KtwZA.js} +0 -0
- /package/dist/{vSpecular-CQFmLNzA.js → vSpecular-EX7loENl.js} +0 -0
|
@@ -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
|
+
}
|
package/src/styles/paper.css
CHANGED
|
@@ -1,29 +1,68 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* paper.css — Paper-texture primitives
|
|
2
|
+
* paper.css — Paper-texture primitives (BD.W-PAPER-MORPHISM, the texture+blend
|
|
3
|
+
* redesign — the grain/grit must be PLAINLY VISIBLE; if you squint, it FAILS).
|
|
3
4
|
*
|
|
4
5
|
* Two composable Tailwind `@utility` declarations:
|
|
5
|
-
* - paper-underpaint: fixed, app-root, fullscreen
|
|
6
|
-
* - paper-grain-overlay: ::after overlay for individual surfaces
|
|
6
|
+
* - paper-underpaint: fixed, app-root, fullscreen tooth texture at z-index -1
|
|
7
|
+
* - paper-grain-overlay: ::after tooth overlay for individual surfaces
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
9
|
+
* THE FIX (the headline): the prior `feTurbulence bf=0.65 4-oct` + `feBlend
|
|
10
|
+
* multiply in2=SourceGraphic` cloud was a self-cancelling no-op — a fine cloud
|
|
11
|
+
* averaged to grey on hiDPI, and `overlay`/`soft-light` collapse to IDENTITY
|
|
12
|
+
* against a near-white cream wash (L≈0.98) / near-black ink wash (the blends only
|
|
13
|
+
* bite mid-grey backdrops; the paper register lives on the poles). Measured std
|
|
14
|
+
* 0.02–0.86 — invisible by math.
|
|
15
|
+
*
|
|
16
|
+
* THE TEXTURE — `--paper-grain-tooth`: a COARSE anisotropic grey-RGB speckle
|
|
17
|
+
* (`baseFrequency='0.04 0.09'` = grain direction, 2 octaves), KEEP the RGB
|
|
18
|
+
* (`feColorMatrix saturate=0` → grey, never zero it), per-channel
|
|
19
|
+
* `feComponentTransfer` slope-1.8/intercept-(-0.4) CONTRAST-STRETCH (the
|
|
20
|
+
* letterpress bite) + `feFuncA slope=0 intercept=1` (FULL OPAQUE alpha — the
|
|
21
|
+
* grey speckle is painted straight, the blend carries the darken/lighten; NOT the
|
|
22
|
+
* lens-A luminance→alpha matrix that gives a near-empty texture). `<filter
|
|
23
|
+
* color-interpolation-filters='sRGB'>` pins sRGB (identical Chrome↔Safari,
|
|
24
|
+
* deterministic seed). NO `feBlend` mud op. Tile 140px (coarse tooth reads as
|
|
25
|
+
* STRUCTURE, survives hiDPI, divides cleanly DPR 1/2/3).
|
|
26
|
+
*
|
|
27
|
+
* THE BLEND LAW (the decisive, physically-true move): `multiply` (light — ink
|
|
28
|
+
* sinks into the paper's pits → darken) / `screen` (dark — fiber catches light →
|
|
29
|
+
* lighten). Baseline, sRGB-safe, identical both engines. Plain per-mode arms.
|
|
30
|
+
*
|
|
31
|
+
* THE ALPHA: `--paper-grain-opacity` re-calibrated to the JND floor (light 0.22 /
|
|
32
|
+
* dark 0.16 — glass-fx.css / dark-arm.css; the inversion the measurements force:
|
|
33
|
+
* multiply on cream is gentle → MORE, screen on ink bites hard → LESS).
|
|
34
|
+
*
|
|
35
|
+
* The LIBRARY FENCE: `--glass-grain-opacity` (0.025/0.045) is BYTE-UNTOUCHED — the
|
|
36
|
+
* calm glass identity stands; paper is loud, glass is a whisper. That separation
|
|
37
|
+
* IS the design.
|
|
10
38
|
*/
|
|
11
39
|
|
|
40
|
+
/* The ONE coarse-tooth texture — DRY single source, both utilities resolve it.
|
|
41
|
+
Painted onto a rect at full alpha (`feFuncA slope=0 intercept=1`); the
|
|
42
|
+
mix-blend-mode carries the visibility. sRGB-pinned, deterministic seed. */
|
|
43
|
+
:root {
|
|
44
|
+
--paper-grain-tooth: url("data:image/svg+xml,%3Csvg width='140' height='140' viewBox='0 0 140 140' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='t' x='0' y='0' width='100%25' height='100%25' color-interpolation-filters='sRGB'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.04 0.09' numOctaves='2' seed='7' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncG type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncB type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncA type='linear' slope='0' intercept='1'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23t)'/%3E%3C/svg%3E");
|
|
45
|
+
--paper-grain-tile: 140px;
|
|
46
|
+
}
|
|
47
|
+
|
|
12
48
|
@utility paper-underpaint {
|
|
13
49
|
position: fixed;
|
|
14
50
|
inset: 0;
|
|
15
51
|
z-index: -1;
|
|
16
52
|
pointer-events: none;
|
|
17
|
-
background-image:
|
|
53
|
+
background-image: var(--paper-grain-tooth);
|
|
18
54
|
background-repeat: repeat;
|
|
19
|
-
background-size:
|
|
20
|
-
opacity: var(--glass-grain-opacity);
|
|
55
|
+
background-size: var(--paper-grain-tile) var(--paper-grain-tile);
|
|
56
|
+
opacity: var(--paper-grain-opacity, var(--glass-grain-opacity));
|
|
57
|
+
/* LIGHT: ink sinks into the cream → multiply darkens the valleys. */
|
|
21
58
|
mix-blend-mode: multiply;
|
|
22
59
|
}
|
|
23
60
|
|
|
24
61
|
:where(.dark) .paper-underpaint,
|
|
25
62
|
.dark .paper-underpaint {
|
|
26
|
-
|
|
63
|
+
/* DARK: fiber catches light off the ink → screen lifts (NOT soft-light, which
|
|
64
|
+
collapses to identity on the near-black pole — the self-cancelling defect). */
|
|
65
|
+
mix-blend-mode: screen;
|
|
27
66
|
}
|
|
28
67
|
|
|
29
68
|
@utility paper-grain-overlay {
|
|
@@ -36,23 +75,200 @@
|
|
|
36
75
|
inset: 0;
|
|
37
76
|
border-radius: inherit;
|
|
38
77
|
pointer-events: none;
|
|
39
|
-
background-image:
|
|
78
|
+
background-image: var(--paper-grain-tooth);
|
|
40
79
|
background-repeat: repeat;
|
|
41
|
-
background-size:
|
|
42
|
-
opacity: var(--glass-grain-opacity);
|
|
43
|
-
|
|
80
|
+
background-size: var(--paper-grain-tile) var(--paper-grain-tile);
|
|
81
|
+
opacity: var(--paper-grain-opacity, var(--glass-grain-opacity));
|
|
82
|
+
/* LIGHT tooth: multiply — the physically-true ink-into-pits darken (NOT
|
|
83
|
+
overlay, which is identity on the L≈0.98 cream pole). */
|
|
84
|
+
mix-blend-mode: multiply;
|
|
44
85
|
}
|
|
45
86
|
}
|
|
46
87
|
|
|
47
88
|
:where(.dark) .paper-grain-overlay::after,
|
|
48
89
|
.dark .paper-grain-overlay::after {
|
|
49
|
-
|
|
90
|
+
/* DARK tooth: screen — fiber catches light off the ink (NOT soft-light). */
|
|
91
|
+
mix-blend-mode: screen;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* ═══════════════════════════════════════════════════════════════════════
|
|
95
|
+
BD.W-PAGE-FIELD / BD.W-GLASS-FIELD — the WARM COLORFUL FIELD register
|
|
96
|
+
───────────────────────────────────────────────────────────────────────
|
|
97
|
+
The single highest-leverage piece: it turns the gray storybook WARM. A
|
|
98
|
+
per-route four-layer technicolor CEL (amber key → terracotta mid → sand
|
|
99
|
+
bounce + a warm over-glaze toward the --glass-key corner) PLUS a wide
|
|
100
|
+
low-chroma BASE WASH that raises the floor everywhere, painted at FIELD
|
|
101
|
+
lightness (L 0.90-0.93 light / 0.28-0.34 dark — where the gamut admits
|
|
102
|
+
REAL chroma, NOT the gamut-bound L0.98 plate) OVER the decoupled
|
|
103
|
+
--neutral-0 floor (KEEP-NEUTRAL, untouched, never deleted).
|
|
104
|
+
|
|
105
|
+
ONE primitive, TWO acceptance floors (glass-floor ~0.012 composite-behind-
|
|
106
|
+
glass + field-floor 0.045 ground). The library glass material is BYTE-
|
|
107
|
+
UNTOUCHED — it finally has a backdrop worthy of it.
|
|
108
|
+
|
|
109
|
+
THE WARM-BOUND IS A PAINT INVARIANT: --field-h clamps the route's
|
|
110
|
+
--field-h-raw to [25,95] IN THE CSS calc, so an inline raw:210 CANNOT
|
|
111
|
+
paint teal/navy. The teal/navy purge is enforced at the paint layer.
|
|
112
|
+
|
|
113
|
+
OPT-IN: the warm stops only render under `[data-paper-field]` (the demo
|
|
114
|
+
chassis sets it per glass route) — the calm neutral underpaint stays the
|
|
115
|
+
default for solid-chrome routes; --neutral-0 stays decoupled + calm.
|
|
116
|
+
|
|
117
|
+
CROSS-ENGINE: pure compositor CSS — radial/conic-gradient + oklch() +
|
|
118
|
+
transform only. NO backdrop-filter:url, NO SVG goo, NO trig. oklch ≥ Safari
|
|
119
|
+
15.4, @property ≥ 16.4, gradients/transform forever. The WebKit premultiply-
|
|
120
|
+
toward-black desaturation hole is dodged: every warm 0-alpha stop is an
|
|
121
|
+
explicit `oklch(L C H / 0)` warm color, NEVER bare `transparent`.
|
|
122
|
+
═══════════════════════════════════════════════════════════════════════ */
|
|
123
|
+
|
|
124
|
+
/* The warm-bound: clamp the route's raw hue request to [25,95]. A DISTINCT
|
|
125
|
+
var (NOT self-referential `--field-h: max(var(--field-h),…)` which is a
|
|
126
|
+
no-op) — the route writes --field-h-raw, the field resolves --field-h.
|
|
127
|
+
Set on the field element itself so the clamp resolves even when the chassis
|
|
128
|
+
writes --field-h-raw on an ancestor. */
|
|
129
|
+
.paper-field {
|
|
130
|
+
--field-h: clamp(25, var(--field-h-raw, 62), 95);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* The warm-cel GROUND — a dedicated fixed plane the chassis mounts UNDER the
|
|
134
|
+
grain (the grain `.paper-underpaint` rides on top at its 0.22 multiply
|
|
135
|
+
opacity; the field paints true at full opacity / normal blend, so the grain
|
|
136
|
+
does NOT crush the pigment). ONE <PaperBackdrop field> component emits both,
|
|
137
|
+
stacked — one backdrop mount, grain on top, warm field below. */
|
|
138
|
+
.paper-field {
|
|
139
|
+
position: fixed;
|
|
140
|
+
inset: 0;
|
|
141
|
+
/* one step BELOW the grain underpaint (the chassis mounts the grain at
|
|
142
|
+
-z-10) so the grain rides ON TOP of the warm field — one backdrop, two
|
|
143
|
+
stacked planes. Still above the page floor (content is z 0+). */
|
|
144
|
+
z-index: -11;
|
|
145
|
+
pointer-events: none;
|
|
146
|
+
/* L4 warm over-glaze — a faint cel sheen brightest toward the upper-right
|
|
147
|
+
--glass-key corner (cel coherence: field + glass rim/cast share ONE key).
|
|
148
|
+
--glass-key is a KEYWORD (upper-right), so the glaze is positioned by a
|
|
149
|
+
fixed `at`/`from` matching it — NEVER a `-58deg`/keyword-as-angle bug. */
|
|
150
|
+
background:
|
|
151
|
+
conic-gradient(
|
|
152
|
+
from -45deg at 78% 22%,
|
|
153
|
+
oklch(0.96 0.05 calc(var(--field-h) + 6) / calc(0.30 * var(--field-intensity))),
|
|
154
|
+
oklch(0.96 0.05 calc(var(--field-h) + 6) / 0) 28%,
|
|
155
|
+
oklch(0.96 0.05 calc(var(--field-h) + 6) / 0) 72%,
|
|
156
|
+
oklch(0.96 0.05 calc(var(--field-h) + 6) / calc(0.18 * var(--field-intensity)))
|
|
157
|
+
),
|
|
158
|
+
/* the wide warm BASE WASH — raises the floor EVERYWHERE (no flat gap). */
|
|
159
|
+
radial-gradient(
|
|
160
|
+
120% 100% at 50% 50%,
|
|
161
|
+
oklch(0.91 0.075 calc(var(--field-h) + 8) / calc(0.50 * var(--field-intensity))),
|
|
162
|
+
oklch(0.91 0.075 calc(var(--field-h) + 8) / 0) 100%
|
|
163
|
+
),
|
|
164
|
+
/* L3 sand fill-light bounce (bottom-right). */
|
|
165
|
+
radial-gradient(
|
|
166
|
+
95% 80% at 80% 88%,
|
|
167
|
+
oklch(0.88 0.115 calc(var(--field-h) + 30) / calc(0.90 * var(--field-intensity))),
|
|
168
|
+
oklch(0.88 0.115 calc(var(--field-h) + 30) / 0) 70%
|
|
169
|
+
),
|
|
170
|
+
/* L2 terracotta saturated mid (right band, where the cards sit). */
|
|
171
|
+
radial-gradient(
|
|
172
|
+
95% 78% at 78% 30%,
|
|
173
|
+
oklch(0.85 0.145 calc(var(--field-h) - 24) / calc(0.90 * var(--field-intensity))),
|
|
174
|
+
oklch(0.85 0.145 calc(var(--field-h) - 24) / 0) 72%
|
|
175
|
+
),
|
|
176
|
+
/* L1 amber key mass (densest pigment, top-left toward the key-light). */
|
|
177
|
+
radial-gradient(
|
|
178
|
+
100% 84% at 24% 20%,
|
|
179
|
+
oklch(0.87 0.155 calc(var(--field-h)) / calc(0.95 * var(--field-intensity))),
|
|
180
|
+
oklch(0.87 0.155 calc(var(--field-h)) / 0) 75%
|
|
181
|
+
),
|
|
182
|
+
var(--neutral-0); /* L0 the KEEP-NEUTRAL solid floor — decoupled. */
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* DARK: warm-LUMINOUS — lower L, KEEP chroma; NEVER gray-charcoal. Plain
|
|
186
|
+
ancestor `.dark .x` (a scoped :global(.dark) silently drops; this is a
|
|
187
|
+
non-scoped global stylesheet so a plain `.dark` ancestor is correct). */
|
|
188
|
+
.dark .paper-field {
|
|
189
|
+
background:
|
|
190
|
+
conic-gradient(
|
|
191
|
+
from -45deg at 78% 22%,
|
|
192
|
+
oklch(0.42 0.05 calc(var(--field-h) + 6) / calc(0.30 * var(--field-intensity))),
|
|
193
|
+
oklch(0.42 0.05 calc(var(--field-h) + 6) / 0) 28%,
|
|
194
|
+
oklch(0.42 0.05 calc(var(--field-h) + 6) / 0) 72%,
|
|
195
|
+
oklch(0.42 0.05 calc(var(--field-h) + 6) / calc(0.18 * var(--field-intensity)))
|
|
196
|
+
),
|
|
197
|
+
radial-gradient(
|
|
198
|
+
120% 100% at 50% 50%,
|
|
199
|
+
oklch(0.30 0.055 calc(var(--field-h) + 8) / calc(0.50 * var(--field-intensity))),
|
|
200
|
+
oklch(0.30 0.055 calc(var(--field-h) + 8) / 0) 100%
|
|
201
|
+
),
|
|
202
|
+
radial-gradient(
|
|
203
|
+
95% 80% at 80% 88%,
|
|
204
|
+
oklch(0.34 0.085 calc(var(--field-h) + 30) / calc(0.90 * var(--field-intensity))),
|
|
205
|
+
oklch(0.34 0.085 calc(var(--field-h) + 30) / 0) 70%
|
|
206
|
+
),
|
|
207
|
+
radial-gradient(
|
|
208
|
+
95% 78% at 78% 30%,
|
|
209
|
+
oklch(0.33 0.10 calc(var(--field-h) - 24) / calc(0.90 * var(--field-intensity))),
|
|
210
|
+
oklch(0.33 0.10 calc(var(--field-h) - 24) / 0) 72%
|
|
211
|
+
),
|
|
212
|
+
radial-gradient(
|
|
213
|
+
100% 84% at 24% 20%,
|
|
214
|
+
oklch(0.36 0.11 calc(var(--field-h)) / calc(0.95 * var(--field-intensity))),
|
|
215
|
+
oklch(0.36 0.11 calc(var(--field-h)) / 0) 75%
|
|
216
|
+
),
|
|
217
|
+
var(--neutral-0);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/* The CARTOON DRIFT — liquid-weight on the ground: anticipation (pull-back) →
|
|
221
|
+
arc sweep (translate + rotate on ONE curve) → follow-through overshoot, baked
|
|
222
|
+
by --ease-cartoon-punch (DEPEND on BD.W-CARTOON-PUNCH, no literal-cubic dup).
|
|
223
|
+
Rides a `::before` copy of the bg (the field plane has a FREE ::before, no
|
|
224
|
+
collision with the grain). The warm stops survive PRM; only the drift
|
|
225
|
+
freezes. */
|
|
226
|
+
.paper-field::before {
|
|
227
|
+
content: "";
|
|
228
|
+
position: absolute;
|
|
229
|
+
inset: -28%;
|
|
230
|
+
background: inherit;
|
|
231
|
+
opacity: 0.72;
|
|
232
|
+
pointer-events: none;
|
|
233
|
+
animation: field-cel-drift 42s
|
|
234
|
+
var(--ease-cartoon-punch, cubic-bezier(0.5, -0.2, 0.4, 1.2)) infinite
|
|
235
|
+
alternate;
|
|
236
|
+
will-change: transform;
|
|
237
|
+
content-visibility: auto;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
@keyframes field-cel-drift {
|
|
241
|
+
/* independent translate:/scale:/rotate: LONGHANDS — a `transform: scale()`
|
|
242
|
+
shorthand would clobber the translate centering (build-trap e). */
|
|
243
|
+
from {
|
|
244
|
+
translate: -1.5% 1%;
|
|
245
|
+
scale: 1;
|
|
246
|
+
rotate: -1.2deg;
|
|
247
|
+
}
|
|
248
|
+
to {
|
|
249
|
+
translate: 2.5% -2.5%;
|
|
250
|
+
scale: 1.07;
|
|
251
|
+
rotate: 2.4deg;
|
|
252
|
+
}
|
|
50
253
|
}
|
|
51
254
|
|
|
52
255
|
/* ═══════════════════════════════════════════════
|
|
53
256
|
A11y — respect user motion + transparency preferences
|
|
54
257
|
═══════════════════════════════════════════════ */
|
|
258
|
+
@media (prefers-reduced-motion: reduce) {
|
|
259
|
+
/* the drift freezes — the warm field STAYS (it is content, not motion). */
|
|
260
|
+
.paper-field::before {
|
|
261
|
+
animation: none;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
55
265
|
@media (prefers-reduced-transparency: reduce) {
|
|
266
|
+
/* the warm stops drop to 0-alpha; the decoupled --neutral-0 floor shows
|
|
267
|
+
(the calm opaque legibility floor). The field is a transmissive
|
|
268
|
+
enhancement, NEVER a legibility dependency. */
|
|
269
|
+
.paper-field {
|
|
270
|
+
--field-intensity: 0;
|
|
271
|
+
}
|
|
56
272
|
.paper-underpaint,
|
|
57
273
|
.paper-grain-overlay::after {
|
|
58
274
|
opacity: 0;
|