@mkbabb/glass-ui 3.12.0 → 3.13.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-DuArVky-.js → CardAction-Cj2eycQ2.js} +2 -2
- package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-RowNEO6i.js} +4 -4
- package/dist/{ContextMenuSubContent-Bhg4f5jX.js → ContextMenuSubContent-BQmxTAdw.js} +4 -4
- package/dist/{DataTable-CUHMukiQ.js → DataTable-BCddn3T3.js} +3 -3
- package/dist/{DialogContent-BRkT1cjP.js → DialogContent-Dl9WkAoS.js} +3 -3
- package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-Blu4t7tJ.js} +2 -2
- package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-CISOJQuZ.js} +1 -1
- package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-DPzE09X9.js} +1 -1
- package/dist/MetricBadge-C9QMz1KT.js +79 -0
- package/dist/{Notification-DLMhblXR.js → Notification-DdwNxIrI.js} +2 -2
- package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-CqaN-SvN.js} +3 -3
- package/dist/{PopoverContent-BId6ggf_.js → PopoverContent-BYwt2-4x.js} +1 -1
- package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-DfFrwSph.js} +1 -1
- package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-CiDUxfEj.js} +6 -6
- package/dist/{Switch-Ch-k3Rv-.js → Switch-CsIuYP_e.js} +1 -1
- package/dist/{TabsList-B8CVOQPC.js → TabsList-Dttss653.js} +9 -5
- package/dist/{Toaster-1rYWrmAm.js → Toaster-D6q4HtXu.js} +50 -47
- package/dist/{ToggleGroupItem-COu_4IW4.js → ToggleGroupItem-D_AHlRw9.js} +18 -22
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +5 -2
- package/dist/api.js +2 -2
- package/dist/aurora.js +69 -69
- package/dist/{badge-CaoFJzRb.js → badge-UILT_3pZ.js} +1 -1
- package/dist/badge.js +1 -1
- package/dist/{button-DN39cGqL.js → button-ChXMfsud.js} +12 -12
- package/dist/button.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.js +8 -8
- package/dist/{check-BBKKKSTf.js → check-njhk-vfu.js} +1 -1
- package/dist/{chevron-down-BSkTP2aL.js → chevron-down-DKkxb4VV.js} +1 -1
- package/dist/{chevron-right-sDM0Yvrf.js → chevron-right-CPXbqQQz.js} +1 -1
- package/dist/{chevron-up-CCOD_FTz.js → chevron-up-n_24SqI-.js} +1 -1
- package/dist/coalesceMetric-5qIeZnTx.js +13 -0
- package/dist/{color-C5ls_QF7.js → color-CUYeFbgd.js} +9 -7
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +8 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +5 -62
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/configurator/ConfiguratorRow.vue.d.ts +16 -0
- package/dist/components/custom/constellation/Constellation.vue.d.ts +74 -6
- package/dist/components/custom/constellation/composables/createConstellationField.d.ts +41 -0
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
- package/dist/components/custom/constellation/constants.d.ts +61 -0
- package/dist/components/custom/constellation/constellationDraw.d.ts +30 -0
- package/dist/components/custom/constellation/constellationField.d.ts +116 -149
- package/dist/components/custom/constellation/constellationInteraction.d.ts +132 -0
- package/dist/components/custom/constellation/index.d.ts +5 -2
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
- package/dist/components/custom/dock/DockRail.vue.d.ts +88 -0
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +3 -4
- package/dist/components/custom/dock/GlassDock.vue.d.ts +5 -118
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
- package/dist/components/custom/dock/composables/index.d.ts +1 -0
- package/dist/components/custom/dock/composables/useDockClickIntegrity.d.ts +23 -0
- package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
- package/dist/components/custom/dock/composables/useDockOrientationMorph.d.ts +44 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +165 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
- package/dist/components/custom/dock/constants.d.ts +48 -0
- package/dist/components/custom/dock/index.d.ts +3 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +5 -37
- package/dist/components/custom/fourier-field/index.d.ts +1 -1
- package/dist/components/custom/fourier-field/math.d.ts +17 -0
- package/dist/components/custom/fourier-field/presets.d.ts +54 -0
- package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
- package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +11 -8
- package/dist/components/custom/goo-blob/constants.d.ts +52 -0
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
- package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +37 -0
- package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +6 -0
- package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +6 -0
- package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +6 -0
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +11 -18
- package/dist/components/custom/metric-badge/index.d.ts +1 -0
- package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +15 -4
- package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +6 -4
- package/dist/components/custom/tabs/constants.d.ts +12 -0
- package/dist/components/custom/underline/GlassUnderline.vue.d.ts +84 -0
- package/dist/components/custom/underline/index.d.ts +2 -0
- package/dist/components/custom/underline/types.d.ts +56 -0
- package/dist/components/ui/card/Card.vue.d.ts +15 -3
- package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
- package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +6 -3
- package/dist/components/ui/slider/index.d.ts +22 -19
- package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +4 -1
- package/dist/components/ui/toast/use-toast.d.ts +2 -2
- package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
- package/dist/components/ui/toggle/index.d.ts +1 -1
- package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +1 -7
- package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +1 -3
- package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +0 -13
- package/dist/composables/color/index.d.ts +12 -0
- package/dist/composables/dark/index.d.ts +1 -1
- package/dist/composables/dark/useGlobalDark.d.ts +1 -21
- package/dist/composables/glass/index.d.ts +0 -1
- package/dist/composables/glass/useGlassBackdropLuminance.d.ts +59 -0
- package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
- package/dist/composables/motion/core/index.d.ts +1 -1
- package/dist/composables/motion/curves.d.ts +48 -0
- package/dist/composables/motion/index.d.ts +2 -0
- package/dist/composables/motion/springPresets.d.ts +33 -0
- package/dist/composables/motion/suite.d.ts +2 -0
- package/dist/composables/motion/useLiquidFlex.d.ts +85 -0
- package/dist/composables/motion/useSpringMount.d.ts +1 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +2 -2
- package/dist/constellation.js +336 -222
- package/dist/context-menu.js +2 -2
- package/dist/controls.js +48 -20
- package/dist/dark.d.ts +1 -1
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +705 -365
- package/dist/dockContext-BegmJVmx.js +17 -0
- package/dist/dom.js +5 -5
- package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-DzkkyBwX.js} +11 -8
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +39 -80
- package/dist/forms.js +5 -5
- package/dist/fourier-field.js +134 -99
- package/dist/fourier-math.js +2 -2
- package/dist/glass-panel.js +86 -20
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +222 -212
- package/dist/goo-blob.js +243 -212
- package/dist/hover-card.js +1 -1
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/instrument-chassis.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +28 -18
- package/dist/{math-DTpRVC0e.js → math-U6-RrLmV.js} +18 -2
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +25 -21
- package/dist/metric-stack.js +35 -34
- package/dist/{minimize-2-lcXOuc6V.js → minimize-2-BV31Ob_h.js} +1 -1
- package/dist/motion-core.js +32 -137
- package/dist/motion-curves.d.ts +1 -0
- package/dist/motion-curves.js +130 -0
- package/dist/motion.js +38 -37
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/paper-backdrop.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/{presets-BP_ALM0m.js → presets-BKVyQfbt.js} +1 -14
- package/dist/progress.js +1 -1
- package/dist/reactive.js +2 -2
- package/dist/scrolling-text.js +1 -1
- package/dist/{search-nbkvr2dC.js → search-BSGrf2Sk.js} +1 -1
- package/dist/search.js +9 -9
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/{sheet-VZEtNFvO.js → sheet-1fChZjtw.js} +3 -3
- package/dist/sheet.js +1 -1
- package/dist/{slider-ClgpP7EB.js → slider-B-JP2JlI.js} +4 -4
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +2 -2
- package/dist/springPresets--YdWTHtm.js +40 -0
- package/dist/stacked-icons.js +6 -6
- package/dist/styles/animations.css +29 -114
- package/dist/styles/cards.css +55 -0
- package/dist/styles/components.css +4 -1
- package/dist/styles/configurator.css +42 -0
- package/dist/styles/dock/layer-group.css +83 -25
- package/dist/styles/dock/layers.css +23 -1
- package/dist/styles/dock/morph-bridge.css +123 -0
- package/dist/styles/dock/morph.css +175 -45
- package/dist/styles/dock/overflow.css +51 -1
- package/dist/styles/dock/rail-extend.css +300 -0
- package/dist/styles/dock/shell.css +63 -105
- package/dist/styles/dock-controls/dark-mode-toggle.css +109 -0
- package/dist/styles/dock-controls/icon-button.css +133 -0
- package/dist/styles/dock-controls/tab-button.css +202 -0
- package/dist/styles/dock-controls/touch-floor.css +94 -0
- package/dist/styles/dock-controls/triggers.css +128 -0
- package/dist/styles/dock-controls.css +30 -595
- package/dist/styles/dock.css +2 -0
- package/dist/styles/drawer.css +2 -0
- package/dist/styles/floating-panel.css +17 -0
- package/dist/styles/glass/a11y-fallback.css +245 -0
- package/dist/styles/glass/ladder.css +337 -0
- package/dist/styles/glass/material.css +238 -0
- package/dist/styles/glass/progress-rail.css +78 -0
- package/dist/styles/glass/squircle.css +66 -0
- package/dist/styles/glass/surfaces.css +306 -0
- package/dist/styles/glass-refract.css +2 -0
- package/dist/styles/glass.css +31 -1188
- package/dist/styles/hover-popover.css +2 -0
- package/dist/styles/index.css +28 -14
- package/dist/styles/instrument-chassis.css +4 -0
- package/dist/styles/paper.css +2 -68
- package/dist/styles/segmented-tabs.css +275 -0
- package/dist/styles/theme/bridges.css +337 -0
- package/dist/styles/theme/dark.css +7 -0
- package/dist/styles/theme/literals.css +94 -0
- package/dist/styles/theme/radius.css +95 -0
- package/dist/styles/theme.css +26 -529
- package/dist/styles/tokens/color-radius.css +260 -0
- package/dist/styles/tokens/dark-arm.css +200 -0
- package/dist/styles/tokens/glass.css +440 -0
- package/dist/styles/tokens/light-dark.css +158 -0
- package/dist/styles/tokens/offsets-sizing.css +500 -0
- package/dist/styles/tokens/property-regs.css +169 -0
- package/dist/styles/tokens/scale-paper.css +366 -0
- package/dist/styles/tokens/scheme-motion.css +334 -0
- package/dist/styles/tokens/shadow.css +166 -0
- package/dist/styles/tokens.css +22 -2360
- package/dist/styles/typography.css +75 -21
- package/dist/styles/utilities/a11y-overrides.css +140 -0
- package/dist/styles/utilities/animate.css +26 -0
- package/dist/styles/utilities/base.css +365 -0
- package/dist/styles/utilities/btn.css +401 -0
- package/dist/styles/utilities/components.css +317 -0
- package/dist/styles/utilities.css +19 -1318
- package/dist/styles/view-transition.css +0 -51
- package/dist/switch.js +1 -1
- package/dist/tabs.js +91 -82
- package/dist/timeline.js +1 -1
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/underline.d.ts +1 -0
- package/dist/underline.js +85 -0
- package/dist/{useAnimatedNumber-Bcpy5Etf.js → useAnimatedNumber-C5I3wWd8.js} +1 -1
- package/dist/{useConfiguratorState-DxAqksK6.js → useConfiguratorState-DAoeHVue.js} +8 -8
- package/dist/{useGlobalDark-CAhOXNLO.js → useGlobalDark-yhL4Wp-s.js} +3 -22
- package/dist/useLiquidFlex-BL0lLLN2.js +30 -0
- package/dist/useRAFLoop-Bxv0o6L5.js +109 -0
- package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-Dlvx-L3v.js} +1 -1
- package/dist/useSpecularTracking-Bo5su68i.js +32 -0
- package/dist/useSpringMount-CI2jOstM.js +108 -0
- package/dist/{useTouchGate-WFyJYsth.js → useTouchGate-Dg7MQI1G.js} +1 -1
- package/dist/utils/coalesceMetric.d.ts +29 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/vReveal-CqaCz_mC.js +44 -0
- package/dist/watercolor-dot.js +11 -9
- package/dist/{x-Dfsegz9Y.js → x-BUwTKe50.js} +1 -1
- package/package.json +78 -58
- package/src/styles/animations.css +29 -114
- package/src/styles/cards.css +53 -0
- package/src/styles/configurator.css +42 -0
- package/src/styles/dock/layer-group.css +83 -25
- package/src/styles/dock/layers.css +23 -1
- package/src/styles/dock/morph-bridge.css +123 -0
- package/src/styles/dock/morph.css +175 -45
- package/src/styles/dock/overflow.css +51 -1
- package/src/styles/dock/rail-extend.css +300 -0
- package/src/styles/dock/shell.css +63 -105
- package/src/styles/dock-controls/dark-mode-toggle.css +109 -0
- package/src/styles/dock-controls/icon-button.css +133 -0
- package/src/styles/dock-controls/tab-button.css +202 -0
- package/src/styles/dock-controls/touch-floor.css +94 -0
- package/src/styles/dock-controls/triggers.css +128 -0
- package/src/styles/dock-controls.css +30 -595
- package/src/styles/dock.css +2 -0
- package/src/styles/floating-panel.css +15 -0
- package/src/styles/glass/a11y-fallback.css +245 -0
- package/src/styles/glass/ladder.css +337 -0
- package/src/styles/glass/material.css +238 -0
- package/src/styles/glass/progress-rail.css +78 -0
- package/src/styles/glass/squircle.css +66 -0
- package/src/styles/glass/surfaces.css +306 -0
- package/src/styles/glass.css +31 -1188
- package/src/styles/index.css +28 -14
- package/src/styles/paper.css +2 -68
- package/src/styles/segmented-tabs.css +271 -0
- package/src/styles/theme/bridges.css +337 -0
- package/src/styles/theme/dark.css +7 -0
- package/src/styles/theme/literals.css +94 -0
- package/src/styles/theme/radius.css +95 -0
- package/src/styles/theme.css +26 -529
- package/src/styles/tokens/color-radius.css +260 -0
- package/src/styles/tokens/dark-arm.css +200 -0
- package/src/styles/tokens/glass.css +440 -0
- package/src/styles/tokens/light-dark.css +158 -0
- package/src/styles/tokens/offsets-sizing.css +500 -0
- package/src/styles/tokens/property-regs.css +169 -0
- package/src/styles/tokens/scale-paper.css +366 -0
- package/src/styles/tokens/scheme-motion.css +334 -0
- package/src/styles/tokens/shadow.css +166 -0
- package/src/styles/tokens.css +22 -2360
- package/src/styles/typography.css +75 -21
- package/src/styles/utilities/a11y-overrides.css +140 -0
- package/src/styles/utilities/animate.css +26 -0
- package/src/styles/utilities/base.css +365 -0
- package/src/styles/utilities/btn.css +401 -0
- package/src/styles/utilities/components.css +317 -0
- package/src/styles/utilities.css +19 -1318
- package/src/styles/view-transition.css +0 -51
- package/dist/DeckProgress-Dmk4_AKN.js +0 -23
- package/dist/InstrumentRail-CUJ05YVG.js +0 -44
- package/dist/MetricBadge-BZVWIxNy.js +0 -80
- package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
- package/dist/components/custom/deck-progress/index.d.ts +0 -2
- package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
- package/dist/components/custom/dialog-native/index.d.ts +0 -1
- package/dist/components/custom/handmark/HandMark.vue.d.ts +0 -29
- package/dist/components/custom/handmark/brush.d.ts +0 -242
- package/dist/components/custom/handmark/freehand.d.ts +0 -69
- package/dist/components/custom/handmark/geometry.d.ts +0 -50
- package/dist/components/custom/handmark/index.d.ts +0 -21
- package/dist/components/custom/handmark/ink.d.ts +0 -11
- package/dist/components/custom/handmark/texture.d.ts +0 -39
- package/dist/components/custom/handmark/types.d.ts +0 -53
- package/dist/components/custom/handmark/useHandMark.d.ts +0 -87
- package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
- package/dist/components/custom/instrument-rail/index.d.ts +0 -2
- package/dist/composables/motion/useRouteTransition.d.ts +0 -42
- package/dist/deck-progress.d.ts +0 -1
- package/dist/deck-progress.js +0 -2
- package/dist/dockContext-BKeIMmNk.js +0 -9
- package/dist/handmark.d.ts +0 -1
- package/dist/handmark.js +0 -663
- package/dist/instrument-rail.d.ts +0 -1
- package/dist/instrument-rail.js +0 -2
- package/dist/styles/instrument-rail.css +0 -127
- package/dist/useGlassRenderer-D7YGOYiM.js +0 -69
- package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
- package/dist/useSpringMount-BJSHcLl3.js +0 -113
- package/dist/useViewTransition-DaN5Zrox.js +0 -21
- package/dist/vReveal-zUIQk-rJ.js +0 -53
- package/src/styles/instrument-rail.css +0 -127
- /package/dist/{ContextMenuContent-DDa0v27s.js → ContextMenuContent-CT3AS1WX.js} +0 -0
- /package/dist/{HoverCardContent-B6CcQ8He.js → HoverCardContent-Csywg3YF.js} +0 -0
- /package/dist/{Input-xuDwALQR.js → Input-DWQQIOC4.js} +0 -0
- /package/dist/{InstrumentChassis-C2f6cBaQ.js → InstrumentChassis-UUJX0-mW.js} +0 -0
- /package/dist/{Label-zRfbQdCn.js → Label-r3WzWrsj.js} +0 -0
- /package/dist/{ModalOverlay-B1GkAjNb.js → ModalOverlay-DVLI2VRr.js} +0 -0
- /package/dist/{PaperBackdrop-CqwjnfLv.js → PaperBackdrop-DIXTtVq6.js} +0 -0
- /package/dist/{Progress-iEuD9pxG.js → Progress-DwlUKGbr.js} +0 -0
- /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-aumMgWLs.js} +0 -0
- /package/dist/{SelectSeparator-C4Ql0gzV.js → SelectSeparator-BQ_1Fcbp.js} +0 -0
- /package/dist/{Separator-D7sD7RKj.js → Separator-0JE6LtNu.js} +0 -0
- /package/dist/{TooltipProvider-CmZzCuaG.js → TooltipProvider-B3MkB_8P.js} +0 -0
- /package/dist/{compile-BOXjLUxu.js → compile-B7NGOBcP.js} +0 -0
- /package/dist/{constants-yKeKnE84.js → constants-CS75AWHG.js} +0 -0
- /package/dist/{createContext-B44Sah_H.js → createContext-BM46COQ-.js} +0 -0
- /package/dist/{createLucideIcon-B6uNAU9G.js → createLucideIcon-DydS2qgk.js} +0 -0
- /package/dist/{menuItemVariants-CCoBNkU5.js → menuItemVariants-DPiEarb0.js} +0 -0
- /package/dist/{supportsCssTimeline-C5oe0lnD.js → supportsCssTimeline-BWenxvHU.js} +0 -0
- /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-Cc-H9ees.js} +0 -0
- /package/dist/{useInterval-Dsmqwi03.js → useInterval-iHludrxk.js} +0 -0
- /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-Be3w_Rwk.js} +0 -0
- /package/dist/{useResizeObserver-CWCbk5Px.js → useResizeObserver-BhgdhOIj.js} +0 -0
- /package/dist/{useResolveTokenColor-r9pnNjqK.js → useResolveTokenColor-Dvn2RZJW.js} +0 -0
- /package/dist/{useSortable-C8ReQ50P.js → useSortable-muI29agz.js} +0 -0
- /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-DmRYkOBx.js} +0 -0
- /package/dist/{useTimer-3xqf_54b.js → useTimer-Dzarvzuk.js} +0 -0
- /package/dist/{useUserInvalidAria-DoJKMZ3s.js → useUserInvalidAria-B2h6jAM_.js} +0 -0
- /package/dist/{useViewportReady-RIr5Wgkh.js → useViewportReady-B40FK4Pa.js} +0 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/* glass/a11y-fallback.css
|
|
2
|
+
The accessibility + capability overrides — @media (prefers-reduced-transparency) / (prefers-contrast: more) / (forced-colors: active), the non-backdrop-filter @layer components fallback, and the :has()-less @supports fallback. LAST in cascade (they override the base ladder).
|
|
3
|
+
Carved from the glass.css cascade root; @import-ed by glass.css in cascade
|
|
4
|
+
order, each in its own @layer components (isomorphic to the monolith).
|
|
5
|
+
See docs/precepts/design-idioms.md §cohesion-aware partials. */
|
|
6
|
+
/* ── Accessibility: reduced transparency ──────────
|
|
7
|
+
AX.W54 — the gestalt collapse: ONE `--glass-level: 0` replaces the ten per-rung
|
|
8
|
+
opacity+blur clobbers. The level-0 path resolves solid `--card` + `blur(0)`
|
|
9
|
+
through the SAME machinery (the opacity seam → 1, the blur seam → 0), so every
|
|
10
|
+
glass surface — current and future — flattens with no per-rung enumeration. The
|
|
11
|
+
grain + highlight kills stay (they sit off the level axis). */
|
|
12
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
13
|
+
:root {
|
|
14
|
+
--glass-level: 0;
|
|
15
|
+
--glass-grain-opacity: 0;
|
|
16
|
+
--glass-highlight: 0 0 0 0 transparent;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* ── Accessibility: high contrast ─────────────────
|
|
21
|
+
AX.W54 — a single bounded `--glass-level: 0.3` (mostly-solid, not fully flat)
|
|
22
|
+
replaces the five per-rung opacity clobbers: every rung firms up toward solid
|
|
23
|
+
for AA while keeping a hint of the glass register. ONE knob, every rung.
|
|
24
|
+
|
|
25
|
+
AX.W55 — the Clear↔Tinted user-escape (Apple's iOS-26.2 analog) COORDINATES the
|
|
26
|
+
two axes here: the OPACITY axis rides W54's `--glass-level` (firm up toward solid)
|
|
27
|
+
AND the TINT axis biases toward ink — `--glass-tint-source` → the warm-ink +
|
|
28
|
+
`--glass-tint-strength` → the AA floor, the same darken the automatic bright
|
|
29
|
+
bucket applies, now reached by the explicit "more contrast" user request. The two
|
|
30
|
+
axes stay DISTINCT (level = opacity+blur, tint = darken) but share the bracket so
|
|
31
|
+
a high-contrast user gets BOTH a firmer plate and the ink-tint legibility lift —
|
|
32
|
+
one coordinated escape, not two parallel forks. */
|
|
33
|
+
@media (prefers-contrast: more) {
|
|
34
|
+
:root {
|
|
35
|
+
--glass-level: 0.3;
|
|
36
|
+
--glass-tint-source: var(--glass-tint-ink);
|
|
37
|
+
--glass-tint-strength: var(--glass-tint-strength-aa);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* ── Accessibility: forced-colors (Windows High Contrast) glass-language skin ──
|
|
42
|
+
AX.W36 — when the OS forces a palette (Windows High Contrast), the platform
|
|
43
|
+
strips the whole decorative glass register: `backdrop-filter` is dropped, the
|
|
44
|
+
`--glass-*` inset/box-shadow rungs vanish, and every meaning-bearing chroma
|
|
45
|
+
flattens to one system color. A `.glass-floating` Dialog over a `.glass-resting`
|
|
46
|
+
Card would read as two borderless transparent rectangles with no edge, and a
|
|
47
|
+
green-vs-red StatusDot would resolve to one indistinguishable dot. This skin
|
|
48
|
+
restores the STRUCTURE the glass chrome encoded — it does NOT pin glass-ui's
|
|
49
|
+
brand colours (no `forced-color-adjust: none`); the chrome is decorative and
|
|
50
|
+
YIELDS to the user's forced palette (css forced-colors guidance). Only the
|
|
51
|
+
standard WHC system keywords are used (`Canvas`/`CanvasText`/`Highlight`) — no
|
|
52
|
+
glass-ui token leaks into the WHC arm.
|
|
53
|
+
|
|
54
|
+
COORDINATES WITH W54 — the same `--glass-level: 0` opaque escape the reduced-
|
|
55
|
+
transparency / high-contrast brackets ride. Setting the ONE clarity knob to 0
|
|
56
|
+
collapses the `--glass-bg-*` opacity recipe to solid `--card` + `blur(0)` through
|
|
57
|
+
the SAME machinery (no parallel solid recipe), so the platform sees opaque plates
|
|
58
|
+
it maps to `Canvas`. The grain + highlight kills match the reduce bracket (they
|
|
59
|
+
sit off the level axis). The W55 tint axis is moot under WHC (the user's palette
|
|
60
|
+
supersedes the ink-darken) but harmless — the opaque plate is system-painted. */
|
|
61
|
+
@media (forced-colors: active) {
|
|
62
|
+
:root {
|
|
63
|
+
--glass-level: 0;
|
|
64
|
+
--glass-grain-opacity: 0;
|
|
65
|
+
--glass-highlight: 0 0 0 0 transparent;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* Every glass-material ladder rung relied on `backdrop-filter` + an inset
|
|
69
|
+
`box-shadow` rim for its silhouette — both gone under WHC. Restore a real
|
|
70
|
+
`border` keyed to the system text colour so each tier pane reads as a boxed
|
|
71
|
+
region. The selector group MIRRORS the ladder definition above (one source,
|
|
72
|
+
not a hand-rolled re-list) so a future rung added to the material group
|
|
73
|
+
inherits the WHC edge for free — and any `.glass-material` div picks up the
|
|
74
|
+
edge with no per-component arm. */
|
|
75
|
+
.glass-material,
|
|
76
|
+
.glass-wash,
|
|
77
|
+
.glass-quiet,
|
|
78
|
+
.glass-resting,
|
|
79
|
+
.glass-floating,
|
|
80
|
+
.glass-overlay,
|
|
81
|
+
.glass-card,
|
|
82
|
+
.glass-drawer {
|
|
83
|
+
border: 1px solid CanvasText;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* The floating + overlay rungs (Dialog / Sheet / Popover / DropdownMenu /
|
|
87
|
+
HoverCard compose them) + the Drawer (the overlay-band sheet, drawer.css)
|
|
88
|
+
get the canonical `Canvas` fill so the modal reads as a DISTINCT boxed
|
|
89
|
+
region OVER the page, not a transparent overlap — the hierarchy survives.
|
|
90
|
+
The `CanvasText` edge above already draws the box; this opaque fill
|
|
91
|
+
separates the floating layer from the content beneath it. */
|
|
92
|
+
.glass-floating,
|
|
93
|
+
.glass-overlay,
|
|
94
|
+
.glass-drawer {
|
|
95
|
+
background: Canvas;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* The decorative specular catch-light (`::before`) + grain overlay (`::after`)
|
|
99
|
+
paint nothing meaningful once chroma collapses — yield them entirely (the
|
|
100
|
+
same decorative-chrome cede the `--glass-level: 0` opaque escape performs on
|
|
101
|
+
the body). They are NOT part of the structure the skin restores. */
|
|
102
|
+
.glass-material::before,
|
|
103
|
+
.glass-wash::before,
|
|
104
|
+
.glass-quiet::before,
|
|
105
|
+
.glass-resting::before,
|
|
106
|
+
.glass-floating::before,
|
|
107
|
+
.glass-overlay::before,
|
|
108
|
+
.glass-card::before,
|
|
109
|
+
.glass-drawer::before,
|
|
110
|
+
.glass-wash::after,
|
|
111
|
+
.glass-quiet::after,
|
|
112
|
+
.glass-resting::after,
|
|
113
|
+
.glass-floating::after,
|
|
114
|
+
.glass-overlay::after {
|
|
115
|
+
display: none;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Meaning-bearing hue identity → a bordered glyph that keeps ok/warn/error
|
|
119
|
+
distinguishable by a WHC-HONORED system color, NOT a glass-ui hue (which WHC
|
|
120
|
+
strips to one fill). StatusDot reflects its variant onto `data-status`
|
|
121
|
+
(StatusDot.vue) and the inner dot carries `.status-dot__dot`; the
|
|
122
|
+
`role="img"` + `aria-label` accessible name already ships, so this is the
|
|
123
|
+
VISUAL differentiation only. A bare bordered dot + the per-status fill triplet
|
|
124
|
+
below means a sighted WHC user can still tell the row apart.
|
|
125
|
+
|
|
126
|
+
`!important` IS load-bearing here: StatusDot paints the dot fill via an INLINE
|
|
127
|
+
`:style="dotStyle"` (`background-color`, specificity 1,0,0,0), which outranks
|
|
128
|
+
any stylesheet selector AND which forced-colors then `forced-color-adjust:
|
|
129
|
+
auto`-remaps to a single Canvas-white — collapsing the row to one indistinct
|
|
130
|
+
dot. The WHC arm must override that inline fill, and inline can only be beaten
|
|
131
|
+
by `!important`; this is the documented forced-colors degradation path (the
|
|
132
|
+
arm only activates under WHC). The component keeps its inline hue in normal
|
|
133
|
+
mode untouched. */
|
|
134
|
+
.status-dot__dot {
|
|
135
|
+
border: 1px solid CanvasText;
|
|
136
|
+
/* The bordered ring alone separates a dot from its surround; the per-status
|
|
137
|
+
fill below adds the WHC-honored distinction. */
|
|
138
|
+
}
|
|
139
|
+
/* The inner painted fill (`.status-dot__fill`, `h-full w-full`) + the pulse ring
|
|
140
|
+
carry the SAME inline glass-ui hue StatusDot paints — under WHC they cover the
|
|
141
|
+
outer `.status-dot__dot` glyph with a `forced-color-adjust`-remapped Canvas
|
|
142
|
+
fill (the row collapses to one white dot even with the outer system color set).
|
|
143
|
+
Yield them so the outer bordered + system-color glyph is the sole visible dot. */
|
|
144
|
+
.status-dot__fill,
|
|
145
|
+
.status-dot__pulse {
|
|
146
|
+
display: none;
|
|
147
|
+
}
|
|
148
|
+
/* The ok/warn/error/idle distinction rides the standard WHC keyword palette:
|
|
149
|
+
active (ok) → Highlight (the affirmative system accent)
|
|
150
|
+
paused (warn) → Mark (the marked/attention system color)
|
|
151
|
+
error → CanvasText (a solid filled dot — the strongest weight)
|
|
152
|
+
idle/custom → Canvas (a hollow dot — only the CanvasText ring reads)
|
|
153
|
+
Each stays distinguishable by the system color the user's palette assigns,
|
|
154
|
+
never glass-ui chroma. The `!important` beats the component's inline fill. */
|
|
155
|
+
.status-dot__dot[data-status="active"] {
|
|
156
|
+
background: Highlight !important;
|
|
157
|
+
}
|
|
158
|
+
.status-dot__dot[data-status="paused"] {
|
|
159
|
+
background: Mark !important;
|
|
160
|
+
}
|
|
161
|
+
.status-dot__dot[data-status="error"] {
|
|
162
|
+
background: CanvasText !important;
|
|
163
|
+
}
|
|
164
|
+
.status-dot__dot[data-status="idle"],
|
|
165
|
+
.status-dot__dot[data-status="custom"] {
|
|
166
|
+
background: Canvas !important;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* ── @supports fallbacks for non-backdrop-filter browsers ── */
|
|
171
|
+
@layer components {
|
|
172
|
+
/* GUARD 1 — the NO-BLUR-AT-ALL engine (supports NEITHER the unprefixed NOR the
|
|
173
|
+
webkit form): paint an opaque-leaning plate so text stays legible without any
|
|
174
|
+
blur. AY.W-A11Y-PERF O-2b note: this is the floor for the theoretical
|
|
175
|
+
neither-supported case. The Safari ≤17 webkit-only trap (supports the `-webkit-`
|
|
176
|
+
form, so this `@supports not (… or …)` is FALSE and the fallback does NOT fire)
|
|
177
|
+
is closed at the SOURCE OF THE PREFIX: O-2a's build pass guarantees the shipped
|
|
178
|
+
dist carries the `-webkit-backdrop-filter:` pair, so a Safari-17 engine renders
|
|
179
|
+
the BLUR off the prefixed rule (it no longer falls through to a transparent
|
|
180
|
+
unprefixed-only surface). The trap closes where the prefix is emitted, not here. */
|
|
181
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
182
|
+
.glass-wash {
|
|
183
|
+
background: color-mix(in srgb, var(--card) 80%, transparent);
|
|
184
|
+
}
|
|
185
|
+
.glass-quiet {
|
|
186
|
+
background: color-mix(in srgb, var(--card) 88%, transparent);
|
|
187
|
+
}
|
|
188
|
+
.glass-resting {
|
|
189
|
+
background: color-mix(in srgb, var(--card) 94%, transparent);
|
|
190
|
+
}
|
|
191
|
+
.glass-floating {
|
|
192
|
+
background: color-mix(in srgb, var(--card) 98%, transparent);
|
|
193
|
+
}
|
|
194
|
+
.glass-overlay {
|
|
195
|
+
background: var(--card);
|
|
196
|
+
}
|
|
197
|
+
.glass-btn {
|
|
198
|
+
background: color-mix(in srgb, var(--background) 92%, transparent);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* GUARD 2 — the WEBKIT-ONLY engine (supports `-webkit-backdrop-filter` but NOT the
|
|
203
|
+
unprefixed `backdrop-filter` — Safari ≤17). With O-2a's build-emitted prefix the
|
|
204
|
+
shipped rung carries the `-webkit-backdrop-filter:` pair, so this engine PAINTS
|
|
205
|
+
the blur off that prefixed declaration. This guard exists to DOCUMENT-and-confirm
|
|
206
|
+
that path (and would re-assert the translucent glass identity if a future change
|
|
207
|
+
ever stripped the rung bg under this engine) — it re-states the rungs' translucent
|
|
208
|
+
glass-mix so a webkit-only engine that DID get the prefix keeps the glass look,
|
|
209
|
+
never the opaque GUARD-1 plate. The `proof:webkit-backdrop` gate asserts the
|
|
210
|
+
shipped dist carries BOTH guards. */
|
|
211
|
+
@supports ((-webkit-backdrop-filter: blur(1px)) and (not (backdrop-filter: blur(1px)))) {
|
|
212
|
+
.glass-wash {
|
|
213
|
+
background: color-mix(in oklab, var(--glass-bg-wash), var(--glass-tint-source) var(--glass-tint-strength));
|
|
214
|
+
}
|
|
215
|
+
.glass-quiet {
|
|
216
|
+
background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
|
|
217
|
+
}
|
|
218
|
+
.glass-resting {
|
|
219
|
+
background: color-mix(in oklab, var(--glass-bg-resting), var(--glass-tint-source) var(--glass-tint-strength));
|
|
220
|
+
}
|
|
221
|
+
.glass-floating {
|
|
222
|
+
background: color-mix(in oklab, var(--glass-bg-floating), var(--glass-tint-source) var(--glass-tint-strength));
|
|
223
|
+
}
|
|
224
|
+
.glass-overlay {
|
|
225
|
+
background: color-mix(in oklab, var(--glass-bg-overlay), var(--glass-tint-source) var(--glass-tint-strength));
|
|
226
|
+
}
|
|
227
|
+
.glass-btn {
|
|
228
|
+
background: var(--glass-bg-wash);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* ── :has() focus-elevation fallback (AQ.W3 §W3.1a) ──────────────────────
|
|
234
|
+
SOLE fallback for engines without `:has()`. `.is-focus-within` is toggled
|
|
235
|
+
by a ≤6-LOC focusin/focusout guard in `Card.vue` that runs ONLY when
|
|
236
|
+
`!CSS.supports('selector(:has(*))')` (modern engines run zero JS). The
|
|
237
|
+
class redefines the SAME `--card-focus-*` rungs as the `:has()` rule, so the
|
|
238
|
+
override values have one source. NOT a live+dead alias — `:has()` is the
|
|
239
|
+
enhancement, this the documented degradation path. */
|
|
240
|
+
@supports not selector(:has(*)) {
|
|
241
|
+
.glass-card.is-focus-within {
|
|
242
|
+
--card-focus-shadow: var(--shadow-md);
|
|
243
|
+
--card-focus-border: var(--glass-border-floating);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/* glass/ladder.css
|
|
2
|
+
The five-tier .glass-{wash,quiet,resting,floating,overlay} surface ladder + the W55 adaptive-legibility @container style(--glass-backdrop: light) bucket (co-located with its rung) + the .glass-opaque escape + the content-aware under-shadow.
|
|
3
|
+
Carved from the glass.css cascade root; @import-ed by glass.css in cascade
|
|
4
|
+
order, each in its own @layer components (isomorphic to the monolith).
|
|
5
|
+
See docs/precepts/design-idioms.md §cohesion-aware partials. */
|
|
6
|
+
@layer components {
|
|
7
|
+
/* ── Five-tier surface ladder (v0.8.0; visual only, no geometry) ──
|
|
8
|
+
Tier semantics, alpha-monotonic per R3-spec §A:
|
|
9
|
+
wash ~0.30α + light blur (was `subtle`)
|
|
10
|
+
quiet ~0.50α + medium blur (the missing rung)
|
|
11
|
+
resting ~0.65α + canonical blur (was `default`; the speedtest plate)
|
|
12
|
+
floating ~0.80α + heavier blur (was `elevated`)
|
|
13
|
+
overlay ~0.95α + heaviest blur (NEW; modal-over-modal) */
|
|
14
|
+
|
|
15
|
+
/* The five-rung surface ladder declares the unprefixed
|
|
16
|
+
`backdrop-filter` only IN SOURCE. Authoring both forms manually here
|
|
17
|
+
caused Lightning CSS in Tailwind v4 to dedup-and-keep-prefixed,
|
|
18
|
+
which modern Chromium then dropped from the CSSOM (the prefixed
|
|
19
|
+
alias is parser-rejected post-Chrome 113). AY.W-A11Y-PERF O-2a — the
|
|
20
|
+
build now OWNS the prefix: `vite.style-assets.ts publishStyleAssets()`
|
|
21
|
+
injects the `-webkit-backdrop-filter:` pair into the SHIPPED
|
|
22
|
+
`dist/styles/*.css` as a LAST pass (the source stays unprefixed, so
|
|
23
|
+
the Lightning dedup never sees both forms; the build emits the pair
|
|
24
|
+
after the cascade is assembled). This GUARANTEES the prefix reaches
|
|
25
|
+
dist/ regardless of the consumer's autoprefixer/browserslist — a
|
|
26
|
+
Safari ≤17 engine (webkit-form-only) paints the blur instead of
|
|
27
|
+
silently dropping the unprefixed rule. Verified by
|
|
28
|
+
`proof:webkit-backdrop` (count-parity over the shipped dist). */
|
|
29
|
+
/* AW.W23 — every rung's background composes the adaptive-tint recipe
|
|
30
|
+
(`color-mix(in oklab, <rung bg>, var(--glass-tint-source) var(--glass-tint-
|
|
31
|
+
strength))`). With the default `--glass-tint-strength: 0%` the mix is a
|
|
32
|
+
no-op = byte-identical to the un-tinted rung; a consumer biases the surface
|
|
33
|
+
toward a sampled backdrop hue by setting `--glass-tint-source` + a
|
|
34
|
+
strength ≤30%. oklab is the mwg-preferred tint space (NEVER an
|
|
35
|
+
`oklch(from …)` lightness-shift — browsers don't gamut-map yet). */
|
|
36
|
+
.glass-wash {
|
|
37
|
+
position: relative;
|
|
38
|
+
background: color-mix(in oklab, var(--glass-bg-wash), var(--glass-tint-source) var(--glass-tint-strength));
|
|
39
|
+
backdrop-filter: var(--glass-blur-wash);
|
|
40
|
+
border: 1px solid var(--glass-border-wash);
|
|
41
|
+
box-shadow: var(--glass-material-rim), var(--glass-shadow-wash);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* AL-W10 SLIM under-shadow wiring (tokens.css §AL-W10 SLIM —
|
|
45
|
+
UNDER-SHADOW recipe rungs). Each tier composes its canonical
|
|
46
|
+
iOS Liquid Glass under-shadow (a 0.5px dark hairline along the
|
|
47
|
+
bottom edge reading as glass thickness) as a NON-INSET layer
|
|
48
|
+
PREPENDED to the existing `--glass-shadow-*` recipe — the under-
|
|
49
|
+
shadow lays the floor; the existing shadow stack lays the lift.
|
|
50
|
+
quiet → `--glass-under-shadow-quiet` (0 2px 8px -1px α0.04)
|
|
51
|
+
resting → `--glass-under-shadow-default` (0 4px 16px -2px α0.08)
|
|
52
|
+
floating→ `--glass-under-shadow-vivid` (0 8px 32px -4px α0.12)
|
|
53
|
+
`.glass-wash` is sub-perceptual; `.glass-overlay` is modal-heavy
|
|
54
|
+
— neither composes an under-shadow rung (Y4/Y6/Y7 SLIM retention).
|
|
55
|
+
Spine tier wires its own rung at instrument-chassis.css. */
|
|
56
|
+
.glass-quiet {
|
|
57
|
+
position: relative;
|
|
58
|
+
background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
|
|
59
|
+
backdrop-filter: var(--glass-blur-quiet);
|
|
60
|
+
border: 1px solid var(--glass-border-quiet);
|
|
61
|
+
box-shadow:
|
|
62
|
+
var(--glass-material-rim),
|
|
63
|
+
var(--glass-under-shadow-quiet),
|
|
64
|
+
var(--glass-shadow-quiet);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.glass-resting {
|
|
68
|
+
position: relative;
|
|
69
|
+
background: color-mix(in oklab, var(--glass-bg-resting), var(--glass-tint-source) var(--glass-tint-strength));
|
|
70
|
+
backdrop-filter: var(--glass-blur-resting);
|
|
71
|
+
border: 1px solid var(--glass-border-resting);
|
|
72
|
+
box-shadow:
|
|
73
|
+
var(--glass-material-rim),
|
|
74
|
+
var(--glass-under-shadow-default),
|
|
75
|
+
var(--glass-shadow-resting);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* AV.W15 M3 / AW.W22 — the floating tier carries the full-perimeter rim (the
|
|
79
|
+
catch-light that "defines the silhouette", WWDC25 sess. 219). The rim now
|
|
80
|
+
comes from the unified `--glass-material-rim` (= `--glass-edge-light`) so
|
|
81
|
+
it shares ONE source with the rest of the ladder; it rides INSIDE the
|
|
82
|
+
box-shadow stack so it composes with the under-shadow floor + the lift. */
|
|
83
|
+
.glass-floating {
|
|
84
|
+
/* AY.W-A11Y-PERF O-1 — engage the W55 bright-backdrop bucket BY DEFAULT on
|
|
85
|
+
the overlay band: a floating surface floats over WHATEVER the consumer
|
|
86
|
+
painted (frequently a light/near-white app surface — the canonical G2
|
|
87
|
+
case), so the library opts its own overlay-band glass in at its own root
|
|
88
|
+
via the SELF-CONTAINER reach below (`.glass-floating { --glass-backdrop }`
|
|
89
|
+
+ `:where(.glass-floating) > * `-less: the rung re-points its OWN tint
|
|
90
|
+
through the companion self-rule, not only the ancestor @container). `dark`
|
|
91
|
+
(the :root default at tokens.css) stays the explicit per-surface override a
|
|
92
|
+
dark-substrate consumer dials in on an ancestor. */
|
|
93
|
+
--glass-backdrop: light;
|
|
94
|
+
position: relative;
|
|
95
|
+
background: color-mix(in oklab, var(--glass-bg-floating), var(--glass-tint-source) var(--glass-tint-strength));
|
|
96
|
+
backdrop-filter: var(--glass-blur-floating);
|
|
97
|
+
border: 1px solid var(--glass-border-floating);
|
|
98
|
+
box-shadow:
|
|
99
|
+
var(--glass-material-rim),
|
|
100
|
+
var(--glass-under-shadow-vivid),
|
|
101
|
+
var(--glass-shadow-floating);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.glass-overlay {
|
|
105
|
+
/* AY.W-A11Y-PERF O-1 — the overlay band engages the W55 bucket by default
|
|
106
|
+
(see .glass-floating). */
|
|
107
|
+
--glass-backdrop: light;
|
|
108
|
+
position: relative;
|
|
109
|
+
background: color-mix(in oklab, var(--glass-bg-overlay), var(--glass-tint-source) var(--glass-tint-strength));
|
|
110
|
+
backdrop-filter: var(--glass-blur-overlay);
|
|
111
|
+
border: 1px solid var(--glass-border-overlay);
|
|
112
|
+
box-shadow: var(--glass-material-rim), var(--glass-shadow-overlay);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* ── Adaptive legibility: the bright-backdrop bucket (AX.W55 — the iOS-26/27
|
|
116
|
+
"locally darken the glass over light content" move; G2) ──────────────────
|
|
117
|
+
When a consumer sets `--glass-backdrop: light` on any ancestor (a near-white
|
|
118
|
+
card surface, a pale aurora bleed, a bright data grid), the `@container
|
|
119
|
+
style()` read engages here and LIFTS the tint toward ink: `--glass-tint-
|
|
120
|
+
strength` climbs from the `0%` rest default to the bounded AA floor
|
|
121
|
+
(`--glass-tint-strength-aa`, ≤24% — translucent floor preserved) and `--glass-
|
|
122
|
+
tint-source` re-points from `var(--card)` to the warm-ink `--glass-tint-ink`.
|
|
123
|
+
Both are INHERITING custom properties the rungs' `background:` composite
|
|
124
|
+
already reads, so re-pointing them on the material group re-resolves the
|
|
125
|
+
EXISTING `color-mix(in oklab, <rung bg>, …)` toward ink — ZERO new compositing
|
|
126
|
+
seam, the literal darken-over-light recipe. The `.glass-*::before` specular
|
|
127
|
+
`plus-lighter` gleam (W52) is untouched (it composes ON the darkened plate;
|
|
128
|
+
the darkening is the orthogonal oklab-tint axis). No `@supports` wrapper:
|
|
129
|
+
style queries introduce no new `container-type` value (every element is a
|
|
130
|
+
style container by default), so an engine without style-query support parses
|
|
131
|
+
the unknown at-rule as invalid, drops the block, and keeps the zero-delta
|
|
132
|
+
glass (the graceful degradation — the surface is today's-glass, the pre-W55
|
|
133
|
+
state; see utilities.css §density for the same precedent). */
|
|
134
|
+
@container style(--glass-backdrop: light) {
|
|
135
|
+
.glass-material,
|
|
136
|
+
.glass-wash,
|
|
137
|
+
.glass-quiet,
|
|
138
|
+
.glass-resting,
|
|
139
|
+
.glass-floating,
|
|
140
|
+
.glass-overlay,
|
|
141
|
+
.glass-card {
|
|
142
|
+
--glass-tint-source: var(--glass-tint-ink);
|
|
143
|
+
--glass-tint-strength: var(--glass-tint-strength-aa);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* AY.W-A11Y-PERF O-1 — SELF-ENGAGE the overlay band by default. The
|
|
148
|
+
`@container style()` rule above queries an ANCESTOR (CSS style queries never
|
|
149
|
+
self-match — verified on Chrome 148), so the `.glass-floating { --glass-backdrop:
|
|
150
|
+
light }` default we set on the rung would NOT darken the rung's OWN surface, only
|
|
151
|
+
its descendants. AND the `:root` library default is `--glass-backdrop: dark`
|
|
152
|
+
(tokens.css), so a `@container style(--glass-backdrop: dark)` revert would ALWAYS
|
|
153
|
+
fire (every element has the dark :root as an ancestor) — it cannot distinguish an
|
|
154
|
+
explicit consumer `dark` from the default. So the overlay band self-engages
|
|
155
|
+
UNCONDITIONALLY as the library default: a floating/overlay surface floats over
|
|
156
|
+
WHATEVER the consumer painted (frequently a light/near-white app surface — the
|
|
157
|
+
canonical G2 case the user reported), so darkening the translucent plate toward
|
|
158
|
+
the warm-ink is the correct default. This re-points the tint tokens DIRECTLY on
|
|
159
|
+
the overlay-band surfaces (`.glass-floating` / `.glass-overlay` — the Dialog/
|
|
160
|
+
Sheet/Popover/DropdownMenu/HoverCard/Command/Tooltip/Toast/Select-content band),
|
|
161
|
+
engaging the SAME oklab tint axis (zero new compositing seam). Over a DARK page
|
|
162
|
+
the darken is sub-perceptual (warm-ink over an already-dark plate is a small
|
|
163
|
+
shift); a dark-substrate consumer who wants the pristine plate sets
|
|
164
|
+
`--glass-tint-strength: 0%` on the band or uses `.glass-opaque`. The in-srgb
|
|
165
|
+
`--surface-tint-*` family is never touched (this edits only the in-oklab glass
|
|
166
|
+
tint axis).
|
|
167
|
+
|
|
168
|
+
AZ.W-ADAPTIVE-AUTO Arm 1 — the self-engage now EXTENDS to the plain CONTENT
|
|
169
|
+
tiers (`.glass-card`/`.glass-resting`/`.glass-quiet`/`.glass-wash`), not just
|
|
170
|
+
the overlay band. The W54 glass-first MAXIMAL default makes content-on-glass-
|
|
171
|
+
over-a-bright-backdrop the common case, so every content tier self-darkens over
|
|
172
|
+
light WITHOUT consumer opt-in — closing the C5-7 asymmetry (the content tiers
|
|
173
|
+
painted near-invisible over light on every route). The prior W55 overlay-only
|
|
174
|
+
scoping (which kept the default-path byte-identity canary green by testing
|
|
175
|
+
`.glass-card`/`.glass-resting` with a bare no-ancestor div) is SUPERSEDED: the
|
|
176
|
+
three now-self-engaged kinds are no longer byte-identical to the dark bucket
|
|
177
|
+
(the canary narrows to the legitimately-zero-delta surfaces — the `.glass-opaque`
|
|
178
|
+
escape + an explicit per-surface `--glass-backdrop: dark` override — and the new
|
|
179
|
+
in-situ G1 π readback becomes the binding default-path truth). The muted body
|
|
180
|
+
register lifts to the full warm-ink under the engaged plate: the muted L40 tier
|
|
181
|
+
cannot clear 4.5:1 on a translucent darkened plate (darkening moves the plate
|
|
182
|
+
TOWARD muted's own luminance), so the low-contrast muted register resolves to
|
|
183
|
+
the legible dark ink (clears ~10:1) — a token re-point on the same inheriting
|
|
184
|
+
axis as the tint. */
|
|
185
|
+
:where(
|
|
186
|
+
.glass-floating,
|
|
187
|
+
.glass-overlay,
|
|
188
|
+
.glass-card,
|
|
189
|
+
.glass-resting,
|
|
190
|
+
.glass-quiet,
|
|
191
|
+
.glass-wash
|
|
192
|
+
) {
|
|
193
|
+
--glass-tint-source: var(--glass-tint-ink);
|
|
194
|
+
--glass-tint-strength: var(--glass-tint-strength-aa);
|
|
195
|
+
--muted-foreground: var(--foreground);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* AX.W55 — the `contrast-color()` foreground-ink flip (Chrome 147+/Safari 26+).
|
|
199
|
+
A PROGRESSIVE-ENHANCEMENT layer, NEVER the load-bearing floor (Open-Q #5
|
|
200
|
+
ratified): the declarative bucket above already carries AA on ALL engines (it
|
|
201
|
+
darkens the translucent plate so dark text clears ~11:1 over white at the 18%
|
|
202
|
+
floor — the live π readback ratifies). On a supporting engine `contrast-color()`
|
|
203
|
+
REFINES the foreground-ink pick natively, anchored on the LIGHT BACKDROP signal
|
|
204
|
+
(`--card`, the warm-white surface base the bright bucket implies) — NOT on the
|
|
205
|
+
ink. `contrast-color(var(--card))` over the light backdrop resolves to the
|
|
206
|
+
maximally-legible DARK ink (anchoring on the dark ink instead would invert to
|
|
207
|
+
white, illegible on the still-light translucent plate). The bucket is the floor;
|
|
208
|
+
this is the native refinement. Scoped to the bright bucket. */
|
|
209
|
+
@supports (color: contrast-color(white)) {
|
|
210
|
+
@container style(--glass-backdrop: light) {
|
|
211
|
+
.glass-material,
|
|
212
|
+
.glass-wash,
|
|
213
|
+
.glass-quiet,
|
|
214
|
+
.glass-resting,
|
|
215
|
+
.glass-floating,
|
|
216
|
+
.glass-overlay,
|
|
217
|
+
.glass-card {
|
|
218
|
+
color: contrast-color(var(--card));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/* AY.W-A11Y-PERF O-1 / AZ.W-ADAPTIVE-AUTO Arm 1 — the same contrast-color
|
|
222
|
+
refinement for the SELF-ENGAGED band + content tiers (the @container block
|
|
223
|
+
above queries an ancestor; these surfaces engage their own tint
|
|
224
|
+
unconditionally, so their ink-flip companion mirrors that). The muted
|
|
225
|
+
register flips to the same anchored dark ink. Progressive enhancement only
|
|
226
|
+
— the declarative darken above is the AA floor on all engines. */
|
|
227
|
+
:where(
|
|
228
|
+
.glass-floating,
|
|
229
|
+
.glass-overlay,
|
|
230
|
+
.glass-card,
|
|
231
|
+
.glass-resting,
|
|
232
|
+
.glass-quiet,
|
|
233
|
+
.glass-wash
|
|
234
|
+
) {
|
|
235
|
+
color: contrast-color(var(--card));
|
|
236
|
+
--muted-foreground: contrast-color(var(--card));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* ── The opaque escape (AX.W54) ───────────────────
|
|
241
|
+
The level-0 endpoint of the SAME glass machinery — a solid `--card` plate
|
|
242
|
+
(the opacity seam → 1) with `blur(0)` (the blur seam → 0), routed through
|
|
243
|
+
the ONE `--glass-level` knob. NOT a parallel solid `background:` recipe:
|
|
244
|
+
a `.glass-*` surface that ALSO carries `.glass-opaque` keeps its glass edge,
|
|
245
|
+
rim, and under-shadow (a solid plate with a glass edge, not a bare div), and
|
|
246
|
+
the @supports fallback + the a11y brackets compose coherently. This is the
|
|
247
|
+
explicit opt-out from the MAXIMAL glass default (dense data, forced-colors,
|
|
248
|
+
a consumer that wants a flat surface). */
|
|
249
|
+
.glass-opaque {
|
|
250
|
+
--glass-level: 0;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* ── Content-aware under-shadow modifier (AV.W15 M4) ──────────────
|
|
254
|
+
Apple raises the under-shadow over text (so the glass reads as
|
|
255
|
+
lifting OFF the text) and drops it over solid light. The modifier
|
|
256
|
+
is ATTRIBUTE-DRIVEN, no JS: a consumer adds `.glass-over-text`
|
|
257
|
+
(or `[data-over-content="text"]`) to a text-bearing glass surface to
|
|
258
|
+
swap it ONE under-shadow rung heavier, or `[data-over-content="solid"]`
|
|
259
|
+
to lighten it one rung over a solid-light backdrop. It reuses the
|
|
260
|
+
existing `--glass-under-shadow-{quiet,default,vivid}` rungs (no new
|
|
261
|
+
shadow value — `vivid` is sufficient over text), redefining only the
|
|
262
|
+
leading under-shadow layer per tier; the lift stack is untouched.
|
|
263
|
+
|
|
264
|
+
The selectors are per-tier so the swap is rung-correct
|
|
265
|
+
(quiet→default, resting→vivid). `.glass-floating` already sits at the
|
|
266
|
+
`vivid` ceiling over text, so the heavier variant is a no-op there
|
|
267
|
+
(the rung saturates) — documented, not an error. */
|
|
268
|
+
.glass-quiet.glass-over-text,
|
|
269
|
+
.glass-quiet[data-over-content="text"] {
|
|
270
|
+
box-shadow: var(--glass-under-shadow-default), var(--glass-shadow-quiet);
|
|
271
|
+
}
|
|
272
|
+
.glass-resting.glass-over-text,
|
|
273
|
+
.glass-resting[data-over-content="text"] {
|
|
274
|
+
box-shadow: var(--glass-under-shadow-vivid), var(--glass-shadow-resting);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* The inverse — over a solid-light backdrop the under-shadow lightens
|
|
278
|
+
one rung (the glass need not lift as hard off a flat bright field). */
|
|
279
|
+
.glass-resting[data-over-content="solid"] {
|
|
280
|
+
box-shadow: var(--glass-under-shadow-quiet), var(--glass-shadow-resting);
|
|
281
|
+
}
|
|
282
|
+
.glass-floating[data-over-content="solid"] {
|
|
283
|
+
box-shadow:
|
|
284
|
+
var(--glass-material-rim),
|
|
285
|
+
var(--glass-under-shadow-default),
|
|
286
|
+
var(--glass-shadow-floating);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Grain noise overlay — reuses paper texture SVG, no extra assets */
|
|
290
|
+
.glass-wash::after,
|
|
291
|
+
.glass-quiet::after,
|
|
292
|
+
.glass-resting::after,
|
|
293
|
+
.glass-floating::after,
|
|
294
|
+
.glass-overlay::after {
|
|
295
|
+
content: '';
|
|
296
|
+
position: absolute;
|
|
297
|
+
inset: 0;
|
|
298
|
+
border-radius: inherit;
|
|
299
|
+
background: var(--paper-clean-texture);
|
|
300
|
+
background-repeat: repeat;
|
|
301
|
+
background-size: var(--paper-texture-size);
|
|
302
|
+
opacity: var(--glass-grain-opacity);
|
|
303
|
+
pointer-events: none;
|
|
304
|
+
mix-blend-mode: overlay;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* (b) The unified rim — `--glass-edge-light` full-perimeter inset ring on
|
|
308
|
+
EVERY material surface (AW.W22). Previously the rim was wired only into
|
|
309
|
+
the floating/overlay tiers' box-shadow stack; promoting it to the material
|
|
310
|
+
group makes wash/quiet/resting/card/dock-control all carry the same
|
|
311
|
+
silhouette catch-light from ONE token. The rim is its OWN `box-shadow`
|
|
312
|
+
declaration on the material group so it composes uniformly without
|
|
313
|
+
perturbing each tier's elevation recipe (the floating/overlay tiers drop
|
|
314
|
+
their now-redundant inline `--glass-edge-light` layer below). The alpha is
|
|
315
|
+
deliberately low so the rim never eats AA legibility over a busy
|
|
316
|
+
backdrop. */
|
|
317
|
+
.glass-material,
|
|
318
|
+
.glass-wash,
|
|
319
|
+
.glass-quiet,
|
|
320
|
+
.glass-resting,
|
|
321
|
+
.glass-floating,
|
|
322
|
+
.glass-overlay,
|
|
323
|
+
.glass-card,
|
|
324
|
+
.glass-specular-track,
|
|
325
|
+
.dock-icon-button {
|
|
326
|
+
--glass-material-rim: var(--glass-edge-light);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.dark .glass-wash::after,
|
|
330
|
+
.dark .glass-quiet::after,
|
|
331
|
+
.dark .glass-resting::after,
|
|
332
|
+
.dark .glass-floating::after,
|
|
333
|
+
.dark .glass-overlay::after {
|
|
334
|
+
mix-blend-mode: soft-light;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
}
|