@mkbabb/glass-ui 3.8.0 → 3.10.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/README.md +1 -6
- package/dist/{CardAction-q2qHCJFG.js → CardAction-DuArVky-.js} +4 -4
- package/dist/{CommandShortcut-SzWRhROC.js → CommandShortcut-CefCj5mt.js} +7 -7
- package/dist/{ContextMenuSubContent-Do977Cbf.js → ContextMenuSubContent-Bhg4f5jX.js} +3 -3
- package/dist/{DataTable-CvlWXz65.js → DataTable-CUHMukiQ.js} +1 -1
- package/dist/{DialogContent-DjZWT3lK.js → DialogContent-BRkT1cjP.js} +1 -1
- package/dist/{MetricBadge-lTc002u2.js → MetricBadge-BZVWIxNy.js} +6 -4
- package/dist/{Notification-BxK8LZMw.js → Notification-DLMhblXR.js} +2 -2
- package/dist/{NumberFieldContent-CLNVR1iY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
- package/dist/{SelectScrollDownButton-C7TRe-ep.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
- package/dist/{SelectSeparator-L8pPEn4L.js → SelectSeparator-C4Ql0gzV.js} +1 -1
- package/dist/{Switch-LDKLmmgx.js → Switch-Ch-k3Rv-.js} +1 -1
- package/dist/{TabsList-qyHZ2lKY.js → TabsList-B8CVOQPC.js} +2 -2
- package/dist/{Toaster-CabYEEF_.js → Toaster-1rYWrmAm.js} +1 -1
- package/dist/{ToggleGroupItem-CkXUcBlt.js → ToggleGroupItem-Cev4pOVK.js} +4 -4
- package/dist/animated-digit.js +1 -1
- package/dist/api/index.d.ts +2 -1
- package/dist/api.js +1 -1
- package/dist/aurora.js +236 -545
- package/dist/{badge-DHQrc_GQ.js → badge-CaoFJzRb.js} +5 -5
- package/dist/badge.js +1 -1
- package/dist/{button-CAywcrhO.js → button-DN39cGqL.js} +13 -12
- package/dist/button.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.js +1 -1
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/{compile-BBTRjvQS.js → compile-BOXjLUxu.js} +24 -24
- package/dist/components/custom/aurora/composables/atoms.d.ts +21 -4
- package/dist/components/custom/aurora/composables/runtime.d.ts +0 -9
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +0 -11
- package/dist/components/custom/aurora/constants/renderMode.d.ts +0 -32
- package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
- package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +1 -1
- package/dist/components/custom/constellation/Constellation.vue.d.ts +73 -1
- package/dist/components/custom/constellation/constellationField.d.ts +255 -3
- package/dist/components/custom/constellation/index.d.ts +2 -2
- package/dist/components/custom/dock/DockSeparator.vue.d.ts +3 -0
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +4 -3
- package/dist/components/custom/dock/GlassDock.vue.d.ts +45 -63
- package/dist/components/custom/dock/composables/dockContext.d.ts +7 -0
- package/dist/components/custom/dock/index.d.ts +2 -1
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +29 -0
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +6 -0
- package/dist/components/custom/fourier-field/index.d.ts +25 -1
- package/dist/components/custom/fourier-field/math.d.ts +3 -8
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +8 -10
- package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +19 -5
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +6 -14
- package/dist/components/custom/goo-blob/index.d.ts +1 -1
- package/dist/components/custom/goo-blob/types.d.ts +59 -25
- package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
- package/dist/components/custom/handmark/brush.d.ts +219 -0
- package/dist/components/custom/handmark/freehand.d.ts +69 -0
- package/dist/components/custom/handmark/geometry.d.ts +32 -0
- package/dist/components/custom/handmark/index.d.ts +21 -0
- package/dist/components/custom/handmark/ink.d.ts +11 -0
- package/dist/components/custom/handmark/texture.d.ts +39 -0
- package/dist/components/custom/handmark/types.d.ts +53 -0
- package/dist/components/custom/handmark/useHandMark.d.ts +66 -0
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +8 -0
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +92 -0
- package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +49 -0
- package/dist/components/custom/tabs/index.d.ts +2 -5
- package/dist/components/ui/button/index.d.ts +1 -1
- package/dist/components/ui/card/Card.vue.d.ts +5 -3
- 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/carousel/GlassCarouselPager.vue.d.ts +3 -4
- package/dist/components/ui/slider/index.d.ts +22 -11
- package/dist/components/ui/tabs/TabsList.vue.d.ts +1 -1
- package/dist/composables/color/index.d.ts +12 -7
- package/dist/composables/context/createContext.d.ts +1 -1
- package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +1 -6
- package/dist/composables/motion/core/index.d.ts +1 -0
- package/dist/composables/motion/useRouteTransition.d.ts +42 -0
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +1 -1
- package/dist/constellation.js +212 -72
- package/dist/context-menu.js +1 -1
- package/dist/controls.js +1 -1
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deck-progress.js +1 -1
- package/dist/dialog.js +1 -1
- package/dist/dock.js +257 -243
- package/dist/{dropdown-menu-B_4bWyyG.js → dropdown-menu-D77jX6Df.js} +3 -3
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +61 -38
- package/dist/forms.js +5 -5
- package/dist/fourier-field.js +89 -97
- package/dist/fourier-math.d.ts +1 -0
- package/dist/fourier-math.js +2 -0
- package/dist/glass-panel.js +1 -1
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +107 -109
- package/dist/goo-blob.js +316 -297
- package/dist/handmark.d.ts +1 -0
- package/dist/handmark.js +609 -0
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +5 -5
- package/dist/math-DTpRVC0e.js +27 -0
- package/dist/{menuItemVariants-DKM85SNE.js → menuItemVariants-CCoBNkU5.js} +1 -1
- package/dist/metric-badge.js +1 -1
- package/dist/metric-stack.js +1 -1
- package/dist/motion-core.js +70 -69
- package/dist/motion.js +2 -2
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +1 -1
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +4 -4
- package/dist/select.js +2 -2
- package/dist/{slider-D9puf-Ko.js → slider-CyzcxBoh.js} +6 -6
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +1 -1
- package/dist/status-dot.js +17 -16
- package/dist/styles/animations.css +80 -20
- package/dist/styles/cards.css +2 -2
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/density.css +230 -0
- package/dist/styles/dock/layer-group.css +275 -0
- package/dist/styles/dock/layers.css +355 -0
- package/dist/styles/dock/morph.css +244 -0
- package/dist/styles/dock/overflow.css +201 -0
- package/dist/styles/dock/shell.css +457 -0
- package/dist/styles/dock-controls.css +205 -55
- package/dist/styles/dock.css +42 -1349
- package/dist/styles/drawer.css +12 -4
- package/dist/styles/glass.css +535 -78
- package/dist/styles/index.css +12 -11
- package/dist/styles/paper.css +68 -2
- package/dist/styles/theme.css +58 -0
- package/dist/styles/tokens.css +601 -69
- package/dist/styles/transitions.css +20 -2
- package/dist/styles/utilities.css +218 -78
- package/dist/styles/view-transition.css +51 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +182 -151
- package/dist/timeline.js +1 -1
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-Bcpy5Etf.js} +1 -1
- package/dist/{useConfiguratorState-CMff4GzH.js → useConfiguratorState-DxAqksK6.js} +21 -10
- package/dist/{useGlassRenderer-5I0YkI4t.js → useGlassRenderer-D7YGOYiM.js} +1 -1
- package/dist/useViewTransition-DaN5Zrox.js +21 -0
- package/dist/vReveal-zUIQk-rJ.js +53 -0
- package/dist/watercolor-dot.js +1 -1
- package/package.json +80 -39
- package/src/styles/animations.css +80 -20
- package/src/styles/cards.css +2 -2
- package/src/styles/dock/density.css +230 -0
- package/src/styles/dock/layer-group.css +275 -0
- package/src/styles/dock/layers.css +355 -0
- package/src/styles/dock/morph.css +244 -0
- package/src/styles/dock/overflow.css +201 -0
- package/src/styles/dock/shell.css +457 -0
- package/src/styles/dock-controls.css +205 -55
- package/src/styles/dock.css +42 -1349
- package/src/styles/drawer.css +12 -4
- package/src/styles/glass.css +535 -78
- package/src/styles/index.css +12 -11
- package/src/styles/paper.css +68 -2
- package/src/styles/theme.css +58 -0
- package/src/styles/tokens.css +601 -69
- package/src/styles/transitions.css +20 -2
- package/src/styles/utilities.css +218 -78
- package/src/styles/view-transition.css +51 -0
- package/dist/DiscoGlyph-CG0F410s.js +0 -132
- package/dist/GlyphFace-DRjDkB0s.js +0 -51
- package/dist/UnderlineTabs-Uxn-R3MT.js +0 -39
- package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +0 -16
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +0 -7
- package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +0 -7
- package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +0 -4
- package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +0 -58
- package/dist/components/custom/disco-glyph/index.d.ts +0 -1
- package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +0 -36
- package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +0 -28
- package/dist/components/custom/glass-carousel/index.d.ts +0 -4
- package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +0 -30
- package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +0 -64
- package/dist/components/custom/glyph-face/index.d.ts +0 -2
- package/dist/components/custom/glyph-face/keys.d.ts +0 -9
- package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +0 -73
- package/dist/components/custom/responsive-tabs/index.d.ts +0 -2
- package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +0 -27
- package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +0 -60
- package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +0 -20
- package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +0 -39
- package/dist/composables/glass/createGPUCanvas.d.ts +0 -40
- package/dist/disco-glyph.d.ts +0 -1
- package/dist/disco-glyph.js +0 -2
- package/dist/glass-carousel.d.ts +0 -1
- package/dist/glass-carousel.js +0 -219
- package/dist/glyph-face.d.ts +0 -1
- package/dist/glyph-face.js +0 -3
- package/dist/keys-BsYjEFOW.js +0 -9
- package/dist/responsive-tabs.d.ts +0 -1
- package/dist/responsive-tabs.js +0 -95
- package/dist/styles/disco-glyph.css +0 -26
- package/dist/styles/glyph-face.css +0 -92
- package/dist/vReveal-CqaCz_mC.js +0 -44
- package/src/styles/disco-glyph.css +0 -26
- package/src/styles/glyph-face.css +0 -92
- /package/dist/{DeckProgress-AVgbIULY.js → DeckProgress-Dmk4_AKN.js} +0 -0
- /package/dist/{HoverPopover-D56O6Ylp.js → HoverPopover-2LOIW34a.js} +0 -0
- /package/dist/{IconTooltip-D2T5nYOM.js → IconTooltip-Cus0fvK0.js} +0 -0
- /package/dist/{Input-DVG_J0ne.js → Input-xuDwALQR.js} +0 -0
- /package/dist/{ScrollingText-CVyqxvfv.js → ScrollingText-BPP84wKo.js} +0 -0
- /package/dist/{color-DMLTunJK.js → color-C5ls_QF7.js} +0 -0
- /package/dist/{constants-BPOqYJAm.js → constants-yKeKnE84.js} +0 -0
- /package/dist/{presets-D1XPuTj-.js → presets-Dkdv55Gt.js} +0 -0
- /package/dist/{prng-COGhh02-.js → prng-D27-B3tK.js} +0 -0
- /package/dist/{useGlobalDark-D3EBWzXK.js → useGlobalDark-d6waty-X.js} +0 -0
- /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Cck5Uxk8.js} +0 -0
- /package/dist/{useInterval-CcLfq2WU.js → useInterval-Dsmqwi03.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-CyIYrndH.js} +0 -0
- /package/dist/{useScrollProgress-C9ysDic5.js → useScrollProgress-CffFGLa5.js} +0 -0
- /package/dist/{useSortable-MGAbCGVJ.js → useSortable-C8ReQ50P.js} +0 -0
- /package/dist/{useTextHighlight-9nMW23Qb.js → useTextHighlight-CWEi25hf.js} +0 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/* dock/morph.css — the SINGLE-SCALAR morph chrome + state response (AX.W06 carve).
|
|
2
|
+
*
|
|
3
|
+
* Carved from the dock.css god-module (slice 25). This partial owns the dock's
|
|
4
|
+
* DYNAMIC chrome: the W01 `--dock-expand-t` directional expanded-ness derivation,
|
|
5
|
+
* the root background/border/padding interpolation on the ONE `--dock-morph-t`
|
|
6
|
+
* clock, the collapsed/summary state (the W45-TUNE Q1 proportioned pill + the
|
|
7
|
+
* summary glyph reveal), the held / open-descendant surface response, and the
|
|
8
|
+
* W55 adaptive-legibility `--glass-backdrop: light` bucket. The static structural
|
|
9
|
+
* surface (root, clip, variants, persistent) lives in dock/shell.css.
|
|
10
|
+
*
|
|
11
|
+
* @import-ed by dock.css in cascade order, in the SAME `@layer components` — the
|
|
12
|
+
* carve is isomorphic (same layer, same source order → ZERO visual delta). */
|
|
13
|
+
|
|
14
|
+
@layer components {
|
|
15
|
+
/* AX.W01 — the root chrome morphs off the SINGLE `--dock-morph-t` scalar, NOT a
|
|
16
|
+
CSS transition (the prior `padding/scale/radius var(--dock-motion-resize)` +
|
|
17
|
+
`background/border-color var(--dock-motion-standard)` transition list — TWO
|
|
18
|
+
curves on TWO durations — is DELETED). `--dock-expand-t` is the directional
|
|
19
|
+
expanded-ness (0 = collapsed look, 1 = expanded look) derived from the
|
|
20
|
+
per-swap morph scalar + the synchronously-set `.expanded`/`.collapsed` class:
|
|
21
|
+
the box width AND the root padding/radius/color move on ONE clock. The
|
|
22
|
+
per-frame writes drive the registered `<number>` scalar; the `calc()` reads
|
|
23
|
+
below interpolate composited. Under PRM the spring's `respectReducedMotion`
|
|
24
|
+
settles instantly (the scalar jumps 0→1 in one frame → the chrome snaps). */
|
|
25
|
+
|
|
26
|
+
/* `--dock-expand-t` — the directional expanded-ness. `--dock-morph-t` is a
|
|
27
|
+
REGISTERED `@property` (initial-value 0), so it is NEVER guaranteed-invalid:
|
|
28
|
+
`var(--dock-morph-t, 1)` reads 0 at REST (the fallback is DEAD), which would
|
|
29
|
+
resolve every expanded dock to expand-t 0 → the collapsed resting look (the
|
|
30
|
+
pill-radius + collapsed bg/border/padding regression). So the resting value is
|
|
31
|
+
stated STATICALLY per class, and ONLY while a morph is in flight
|
|
32
|
+
(`[data-morphing]` armed on the root by useLayerTransition, cleared on settle)
|
|
33
|
+
does expand-t track the live spring scalar. The class is ALREADY the END state
|
|
34
|
+
during the morph, so the read resolves the correct in-flight blend (collapse
|
|
35
|
+
1→0 via `1 - t`; expand 0→1 via `t`); on settle `[data-morphing]` clears and
|
|
36
|
+
expand-t snaps to the exact class endpoint. */
|
|
37
|
+
.glass-dock:not(.vertical).expanded,
|
|
38
|
+
.glass-dock:not(.vertical).always-expanded {
|
|
39
|
+
--dock-expand-t: 1;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.glass-dock:not(.vertical).collapsed {
|
|
43
|
+
--dock-expand-t: 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.glass-dock:not(.vertical).expanded[data-morphing],
|
|
47
|
+
.glass-dock:not(.vertical).always-expanded[data-morphing] {
|
|
48
|
+
--dock-expand-t: var(--dock-morph-t);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.glass-dock:not(.vertical).collapsed[data-morphing] {
|
|
52
|
+
--dock-expand-t: calc(1 - var(--dock-morph-t));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* The morphing root chrome — background / border-color interpolate between the
|
|
56
|
+
collapsed and expanded endpoints on the ONE `--dock-expand-t` scalar. Scoped
|
|
57
|
+
to the horizontal `variant-dock` (the rail / instrument-strip variants own
|
|
58
|
+
their own surface vocabulary and do not collapse↔expand). The two color axes
|
|
59
|
+
blend in srgb (the house mix the token ladder speaks). The `.collapsed`
|
|
60
|
+
discrete bg/border declarations are RETIRED — this block is the single
|
|
61
|
+
authority, and at rest `--dock-expand-t` resolves to the class endpoint (0
|
|
62
|
+
collapsed / 1 expanded) so the resting look is exact. */
|
|
63
|
+
.glass-dock.variant-dock:not(.vertical) {
|
|
64
|
+
background: color-mix(
|
|
65
|
+
in srgb,
|
|
66
|
+
var(--glass-bg-dock, var(--glass-bg-resting))
|
|
67
|
+
calc(var(--dock-expand-t, 1) * 100%),
|
|
68
|
+
var(--glass-bg-wash)
|
|
69
|
+
);
|
|
70
|
+
border-color: color-mix(
|
|
71
|
+
in srgb,
|
|
72
|
+
var(--glass-border-dock, var(--glass-border-resting))
|
|
73
|
+
calc(var(--dock-expand-t, 1) * 100%),
|
|
74
|
+
var(--glass-border-floating)
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* The padding morph is split out + scoped `:not(.dock-overflow-wrap)` so the
|
|
79
|
+
wrap variant's own padding rules (W04 territory — `.dock-overflow-wrap` +
|
|
80
|
+
its `@media` snap-back) are NOT clobbered by this higher-specificity longhand.
|
|
81
|
+
Padding interpolates linearly between the collapsed floor and the expanded
|
|
82
|
+
block/inline padding on the same `--dock-expand-t` scalar. */
|
|
83
|
+
.glass-dock.variant-dock:not(.vertical):not(.dock-overflow-wrap) {
|
|
84
|
+
--dock-pad-collapsed: var(
|
|
85
|
+
--dock-collapsed-padding,
|
|
86
|
+
var(--dock-padding-block, 0.375rem)
|
|
87
|
+
);
|
|
88
|
+
padding-block: calc(
|
|
89
|
+
var(--dock-pad-collapsed) +
|
|
90
|
+
(var(--dock-padding-block, 0.375rem) - var(--dock-pad-collapsed)) *
|
|
91
|
+
var(--dock-expand-t, 1)
|
|
92
|
+
);
|
|
93
|
+
padding-inline: calc(
|
|
94
|
+
var(--dock-pad-collapsed) +
|
|
95
|
+
(var(--dock-padding-inline, 0.5rem) - var(--dock-pad-collapsed)) *
|
|
96
|
+
var(--dock-expand-t, 1)
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* AX.W01 — the collapsed padding / background / border-color are RETIRED here
|
|
101
|
+
(the `--dock-expand-t` morph block above is the single authority for those
|
|
102
|
+
three axes — they interpolate, never snap). `.collapsed` keeps only its
|
|
103
|
+
non-morphing concerns: the pointer affordance, the centred summary layout,
|
|
104
|
+
and the collapsed shadow (box-shadow crossfades discretely — a subtle,
|
|
105
|
+
acceptable swap that a `color-mix` cannot blend across its multi-layer
|
|
106
|
+
value). */
|
|
107
|
+
.glass-dock.collapsed {
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
justify-content: center;
|
|
110
|
+
box-shadow: var(--shadow-dock-override, var(--shadow-dock-collapsed));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* AX.W45-TUNE Q1 — the collapsed summary floors on BOTH axes off the SAME
|
|
114
|
+
`--dock-collapsed-summary-min-size` token (now MINTED in tokens.css §10 as a
|
|
115
|
+
tight ≈0.7× of the full control height). The prior rule floored ONLY
|
|
116
|
+
`min-width` and let the token fall to `--dock-layer-height` (the full control
|
|
117
|
+
height) — so the collapsed pill read as a full-row stub, not a proportioned
|
|
118
|
+
squircle. Adding the symmetric `min-block-size` makes the collapsed pill a
|
|
119
|
+
tight square-ish dot the consumer's glyph sits centred in (the proportioned-
|
|
120
|
+
pill target the user's Q1 named). */
|
|
121
|
+
.glass-dock.collapsed .dock-layer--summary {
|
|
122
|
+
min-width: var(
|
|
123
|
+
--dock-collapsed-summary-min-size,
|
|
124
|
+
var(--dock-layer-height, 2.5rem)
|
|
125
|
+
);
|
|
126
|
+
min-block-size: var(
|
|
127
|
+
--dock-collapsed-summary-min-size,
|
|
128
|
+
var(--dock-layer-height, 2.5rem)
|
|
129
|
+
);
|
|
130
|
+
justify-content: center;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* AX.W45 DK1 — the collapsed/summary glyph appears WITH the pill, no added
|
|
134
|
+
delay. The `--summary` pane is the INCOMING pane on collapse, but the shared
|
|
135
|
+
stagger ramp reads `--dock-expand-t` which runs 1→0 on collapse — so the
|
|
136
|
+
summary glyph used to fade OUT over the back half of the morph and pop in only
|
|
137
|
+
at settle (the "shrunken icon does not appear for a while" defect). Keying the
|
|
138
|
+
summary pane's stagger scalar to `--dock-morph-t` directly (the per-swap
|
|
139
|
+
incoming-ness, 0→1) reveals it as the box settles — appearing WITH the pill.
|
|
140
|
+
The summary is a single front-loaded glyph (onset 0), so this lands it at full
|
|
141
|
+
opacity by the morph's tail. The `--dock-expand-t` directional scalar stays
|
|
142
|
+
the right driver for the box CHROME (bg/border/padding/radius interpolate
|
|
143
|
+
between the collapsed↔expanded endpoints); only the summary pane's CONTENT
|
|
144
|
+
reveal is decoupled onto the incoming scalar. */
|
|
145
|
+
.glass-dock[data-morphing] .dock-layer--summary {
|
|
146
|
+
--dock-expand-t: var(--dock-morph-t);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* AW.W3 — the collapsed-hover scale rides the unified dock spring vocabulary.
|
|
150
|
+
The `scale var(--dock-motion-resize)` arm was added to the `.glass-dock`
|
|
151
|
+
root transition above, so this hover scale settles on the SAME spring curve
|
|
152
|
+
the expand morph uses — a collapsed→hover→expand gesture is one continuous
|
|
153
|
+
spring, not a `scale`-ease handed off to the width-spring. The hover scale
|
|
154
|
+
and the press squish (`--scale-press-dock`) are now one register on the dock
|
|
155
|
+
surface. */
|
|
156
|
+
.glass-dock.collapsed:hover {
|
|
157
|
+
background: var(--glass-bg-wash);
|
|
158
|
+
border-color: var(--glass-border-floating);
|
|
159
|
+
box-shadow: var(--shadow-dock-override, var(--shadow-dock));
|
|
160
|
+
scale: var(--dock-collapsed-hover-scale);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* J.W5.C — held-state substrate response.
|
|
164
|
+
*
|
|
165
|
+
* When a descendant signals `dockKeepOpen` (e.g. an active slider drag),
|
|
166
|
+
* `useDockState.isHeld` flips true and the root carries `data-held`.
|
|
167
|
+
* The dock background lifts a tier (resting → floating-equivalent) and
|
|
168
|
+
* the border quiets to the floating ring; the change tracks pointer
|
|
169
|
+
* movement on `--duration-fast` so it reads as a held-cursor cue, not
|
|
170
|
+
* a state change. The same flag is consumed by descendants (Slider
|
|
171
|
+
* thumb halo) via `useOptionalDockContext().held` for cross-substrate
|
|
172
|
+
* coordination (typed-key canonical shape; O.W2 invariant 25).
|
|
173
|
+
*/
|
|
174
|
+
.glass-dock[data-held] {
|
|
175
|
+
/* AX.W55 — the held tier threads the oklab tint wrapper (zero-delta at the
|
|
176
|
+
`0%` rest default) so the adaptive darken reaches the held state too. */
|
|
177
|
+
background: color-mix(
|
|
178
|
+
in oklab,
|
|
179
|
+
var(--glass-bg-floating, var(--glass-bg-resting)),
|
|
180
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
181
|
+
);
|
|
182
|
+
border-color: var(--glass-border-floating, var(--glass-border-resting));
|
|
183
|
+
transition:
|
|
184
|
+
background var(--duration-fast) var(--ease-standard),
|
|
185
|
+
border-color var(--duration-fast) var(--ease-standard),
|
|
186
|
+
box-shadow var(--duration-fast) var(--ease-standard);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* AQ.W3 §W3.1b — open-descendant surface response. When a dock-hosted
|
|
190
|
+
trigger (`[data-state="open"]`) is open, the dock root holds its elevated
|
|
191
|
+
read natively (no consumer JS). Idempotent with `[data-held]` above (same
|
|
192
|
+
floating paint, different trigger). Decorative; `:has()` Baseline Widely. */
|
|
193
|
+
.glass-dock:has([data-state="open"]) {
|
|
194
|
+
/* AX.W55 — same oklab tint wrapper as `[data-held]` (zero-delta at rest). */
|
|
195
|
+
background: color-mix(
|
|
196
|
+
in oklab,
|
|
197
|
+
var(--glass-bg-floating, var(--glass-bg-resting)),
|
|
198
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
199
|
+
);
|
|
200
|
+
border-color: var(--glass-border-floating, var(--glass-border-resting));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* ── Adaptive legibility: the dock over a light backdrop (AX.W55 — the literal
|
|
204
|
+
G2 surface; "Glass dock over VERY LIGHT materials is unreadable") ──────────
|
|
205
|
+
The dock is the surface the user reported unreadable over light content. Its
|
|
206
|
+
shell (`--glass-bg-dock`), chassis-strip, and held/open tiers all now read the
|
|
207
|
+
SAME oklab tint seam the five rungs use, so this ONE bucket block — set when a
|
|
208
|
+
consumer marks `--glass-backdrop: light` on the dock's ancestor — lifts every
|
|
209
|
+
dock surface toward ink in lockstep. The tint tokens are INHERITING, so
|
|
210
|
+
re-pointing them on the `.glass-dock` root re-resolves every nested surface +
|
|
211
|
+
cascades to the dock CONTROLS (which read `--dock-fg-on-aurora` for their
|
|
212
|
+
foreground); `--dock-fg-on-aurora` re-points to the warm-ink here so the
|
|
213
|
+
control glyphs/labels clear AA over the now-darkened plate — ONE reconciled
|
|
214
|
+
path, the foreground twin folded INTO the probe, not a third fork. The
|
|
215
|
+
morph-root interp (`.variant-dock:not(.vertical)` above) stays `color-mix(in
|
|
216
|
+
srgb …)` for the transition; the adaptive darken rides its RESTING endpoint
|
|
217
|
+
(`--glass-bg-dock`, which carries the tint) — the in-flight morph frames are
|
|
218
|
+
sub-perceptual (the ratified resting-endpoint-only default). */
|
|
219
|
+
@container style(--glass-backdrop: light) {
|
|
220
|
+
.glass-dock {
|
|
221
|
+
--glass-tint-source: var(--glass-tint-ink);
|
|
222
|
+
--glass-tint-strength: var(--glass-tint-strength-aa);
|
|
223
|
+
--dock-fg-on-aurora: var(--glass-tint-ink);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* AX.W55 — the `contrast-color()` flip for the dock control foreground (Chrome
|
|
228
|
+
147+/Safari 26+; progressive enhancement, NEVER the load-bearing floor). The
|
|
229
|
+
declarative bucket above already carries AA on all engines (it darkens the dock
|
|
230
|
+
plate so the warm-dark `--dock-fg-on-aurora` clears ~17:1 over white at the 18%
|
|
231
|
+
floor). On a supporting engine `contrast-color()` REFINES the control ink,
|
|
232
|
+
anchored on the LIGHT BACKDROP signal (`--card`, the warm-white surface base the
|
|
233
|
+
bright bucket implies) — `contrast-color(var(--card))` resolves to the legible
|
|
234
|
+
DARK ink. Anchoring on the dark ink instead inverts to white (illegible on the
|
|
235
|
+
still-light dock plate), so the anchor is the light surface, matching the rung
|
|
236
|
+
refinement in glass.css. The bucket is the floor; this is the native pick. */
|
|
237
|
+
@supports (color: contrast-color(white)) {
|
|
238
|
+
@container style(--glass-backdrop: light) {
|
|
239
|
+
.glass-dock {
|
|
240
|
+
--dock-fg-on-aurora: contrast-color(var(--card));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/* dock/overflow.css — the OVER-cap overflow strategies (AX.W06 carve).
|
|
2
|
+
*
|
|
3
|
+
* Carved from the dock.css god-module (slice 25). This partial owns the
|
|
4
|
+
* `overflow=` axis: the `overflow="scroll"` inline/block scroll ports
|
|
5
|
+
* (`.dock-scroll-x` / `.dock-scroll-y`, hidden scrollbar, momentum-trapped), the
|
|
6
|
+
* W04 CONTENT-DRIVEN `overflow="wrap"` intrinsic-flex recipe (the
|
|
7
|
+
* `.dock-overflow-wrap` pill↔card radius + floating-tier elevation morph on the
|
|
8
|
+
* ONE `--dock-expand-t` scalar — RELOCATED verbatim, never re-authored), and the
|
|
9
|
+
* W45 D15 single coarse-pointer `--dock-scale` multiplier.
|
|
10
|
+
*
|
|
11
|
+
* @import-ed by dock.css in cascade order, in the SAME `@layer components` — the
|
|
12
|
+
* carve is isomorphic (same layer, same source order → ZERO visual delta). */
|
|
13
|
+
|
|
14
|
+
@layer components {
|
|
15
|
+
/* ── Scroll-on-overflow opt-in (GlassDock `overflow="scroll"`) ───────
|
|
16
|
+
The default contract grows-to-fit then overflows visibly past the
|
|
17
|
+
axis cap. `overflow="scroll"` instead makes the dock the scroll port
|
|
18
|
+
on its layout axis, pairing the existing cap with a hidden-scrollbar
|
|
19
|
+
scroll region so over-cap content stays reachable. The rounded pill
|
|
20
|
+
masks the scroll edge; both axes keep their cap. */
|
|
21
|
+
|
|
22
|
+
/* Inline axis (horizontal docks). The active layer becomes the scroll
|
|
23
|
+
port: `min-width: 0` releases the flex item's `min-content` floor so
|
|
24
|
+
it can shrink under the clamped `.dock-layers` track, then `overflow-x:
|
|
25
|
+
auto` scrolls its over-cap content. `.dock-layers` must KEEP clipping
|
|
26
|
+
so the pill's rounded edge masks the scroll boundary — hence the
|
|
27
|
+
grow-mode `overflow-x: visible` (`.dock-layers`, above) is overridden
|
|
28
|
+
back to `hidden` here. */
|
|
29
|
+
.glass-dock.dock-scroll-x.expanded:not(.dock-overflow-wrap) > .dock-layers {
|
|
30
|
+
overflow-x: hidden;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.glass-dock.dock-scroll-x .dock-layer--full {
|
|
34
|
+
min-width: 0;
|
|
35
|
+
overflow-x: auto;
|
|
36
|
+
scrollbar-width: none;
|
|
37
|
+
/* Trap the inline-scroll momentum at the dock's own boundary so a
|
|
38
|
+
wheel/trackpad gesture that bottoms out the pill does NOT chain into
|
|
39
|
+
scrolling the page behind it (the dock is a self-contained scroll
|
|
40
|
+
port, not a window into the route scroller). */
|
|
41
|
+
overscroll-behavior-x: contain;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.glass-dock.dock-scroll-x .dock-layer--full::-webkit-scrollbar {
|
|
45
|
+
display: none;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Block axis (vertical rails). The root keeps its `max-block-size` cap
|
|
49
|
+
and scrolls its over-cap children — cap + scroll is the correct
|
|
50
|
+
pairing the grow-mode contract split apart. Ties the
|
|
51
|
+
`.vertical.always-expanded` visible default on specificity and wins on
|
|
52
|
+
source order. */
|
|
53
|
+
.glass-dock.vertical.dock-scroll-y {
|
|
54
|
+
overflow-y: auto;
|
|
55
|
+
scrollbar-width: none;
|
|
56
|
+
/* Same momentum-trap as the inline port — a rail that bottoms out must
|
|
57
|
+
not chain its remaining wheel delta into the page scroller behind it. */
|
|
58
|
+
overscroll-behavior-y: contain;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.glass-dock.vertical.dock-scroll-y::-webkit-scrollbar {
|
|
62
|
+
display: none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* ── `overflow="wrap"` recipe — CONTENT-DRIVEN intrinsic flex reflow ──
|
|
66
|
+
(AX.W04 F0). Parallel to the `.dock-scroll-{x,y}` hooks the
|
|
67
|
+
`overflow="scroll"` member emits, `overflow="wrap"` emits this class.
|
|
68
|
+
(HORIZONTAL-ONLY — GlassDock.vue guards the emit on
|
|
69
|
+
`orientation !== 'vertical'`; a vertical rail grows-to-fit + clamps via
|
|
70
|
+
`--dock-max-block-size`, its own overflow story.)
|
|
71
|
+
|
|
72
|
+
The reflow is INTRINSIC: `flex-wrap: wrap` is ALWAYS-ON (no viewport MQ),
|
|
73
|
+
and the dock shrink-wraps to content with `max-inline-size` capping it at
|
|
74
|
+
the canonical `--dock-max-inline-size` token (the SAME cap every
|
|
75
|
+
overflow strategy reads — `min(80vw, 64rem)` default, consumer-overridable
|
|
76
|
+
per-instance). So the layer wraps to N rows EXACTLY when its intrinsic row
|
|
77
|
+
exceeds the cap — at ANY viewport width — and collapses to one row when it
|
|
78
|
+
fits. The magic-640 `@media` snap-back + the `--dock-overflow-bp` token are
|
|
79
|
+
DELETED (the inherited mobile-responsive debt, origin 078dd79). */
|
|
80
|
+
.glass-dock.dock-overflow-wrap {
|
|
81
|
+
white-space: normal;
|
|
82
|
+
/* The content-driven cap. The dock ALREADY shrink-wraps to its content's
|
|
83
|
+
intrinsic width (the base `.glass-dock` rule), so `max-inline-size` caps
|
|
84
|
+
that intrinsic width at `--dock-max-inline-size`: under the cap the
|
|
85
|
+
shrink-wrap wins → one row; over the cap the dock holds at the cap and the
|
|
86
|
+
inner `flex-wrap: wrap` row reflows to N rows. ONE token, no breakpoint.
|
|
87
|
+
(The `min(max-content, …)` form is INVALID CSS — the math functions reject
|
|
88
|
+
the `max-content` intrinsic keyword, computing the property to its initial
|
|
89
|
+
`none` and silently dropping the cap; intrinsic-shrink + this plain cap IS
|
|
90
|
+
the valid `min(max-content, cap)`.) */
|
|
91
|
+
max-inline-size: var(--dock-max-inline-size);
|
|
92
|
+
padding: var(--dock-wrap-padding-block, var(--dock-padding-block, 0.375rem))
|
|
93
|
+
var(--dock-wrap-padding-inline, 0.625rem);
|
|
94
|
+
|
|
95
|
+
/* F4 — the pill↔card radius morph. A wrap dock is a FINITE multi-row CARD
|
|
96
|
+
surface when expanded and a stadium PILL when collapsed — the SAME
|
|
97
|
+
pill↔card morph the big-dock `shape-card` path rides. The corner glides
|
|
98
|
+
on the `--dock-expand-t` W01 single-scalar: `--radius-pill` at expand-t 0
|
|
99
|
+
(collapsed), `--dock-card-radius` at expand-t 1 (expanded — UNIFIED on
|
|
100
|
+
the SAME finite-radius token the big-dock card uses; the bare 16px
|
|
101
|
+
`--radius-2xl` literal is DELETED). ONE register, no discrete snap. */
|
|
102
|
+
border-radius: calc(
|
|
103
|
+
var(--radius-pill) +
|
|
104
|
+
(var(--dock-card-radius) - var(--radius-pill)) *
|
|
105
|
+
var(--dock-expand-t, 1)
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
/* F1 — the card-tier elevation morph ("material thickens as glass flexes
|
|
109
|
+
larger", WWDC25 §219). The wrap dock lifts from the flat thin-pill
|
|
110
|
+
`--shadow-dock` glow onto the FLOATING-tier stack (the `--shadow-dock-wrap`
|
|
111
|
+
token names the canonical composite on `:root`; a consumer retints the
|
|
112
|
+
whole card shadow by overriding THAT one token per the cartoon-shadow
|
|
113
|
+
contract). The three floating layers — drop / material-rim / under-cast —
|
|
114
|
+
fade in driven by the SAME `--dock-expand-t` scalar the radius glides on:
|
|
115
|
+
`--dock-wrap-elev` is the scalar as a 0→1 percent, so each layer's alpha
|
|
116
|
+
tracks the corner morph in LOCKSTEP (ONE clock, ONE register). At
|
|
117
|
+
expand-t 0 (collapsed/pill) the floating layers are 0%-alpha (invisible)
|
|
118
|
+
→ only the base `--shadow-dock` glow shows; at expand-t 1 (expanded/card)
|
|
119
|
+
the full floating stack grounds the multi-row silhouette. The per-layer
|
|
120
|
+
recipe mirrors `--shadow-dock-wrap` (= `--shadow-xl` + `--glass-material-rim`
|
|
121
|
+
+ `--glass-under-shadow-vivid`) so the token stays the source-of-record. */
|
|
122
|
+
--dock-wrap-elev: calc(var(--dock-expand-t, 1) * 100%);
|
|
123
|
+
box-shadow:
|
|
124
|
+
var(--glass-edge-light),
|
|
125
|
+
var(--shadow-dock-override, var(--shadow-dock)),
|
|
126
|
+
0 8px 24px color-mix(in srgb, var(--shadow-color) calc(0.14 * var(--dock-wrap-elev)), transparent),
|
|
127
|
+
0 0 0 0.5px color-mix(in srgb, var(--shadow-color) calc(0.05 * var(--dock-wrap-elev)), transparent),
|
|
128
|
+
0 8px 32px -4px color-mix(in srgb, oklch(0 0 0 / 0.12) var(--dock-wrap-elev), transparent);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.glass-dock.dock-overflow-wrap .dock-layer--full {
|
|
132
|
+
flex-wrap: wrap;
|
|
133
|
+
justify-content: center;
|
|
134
|
+
height: auto;
|
|
135
|
+
min-height: var(--dock-wrap-layer-min-height, var(--dock-layer-height, 2rem));
|
|
136
|
+
gap: var(--dock-wrap-row-gap, 0.25rem)
|
|
137
|
+
var(--dock-wrap-column-gap, var(--dock-layer-gap, 0.375rem));
|
|
138
|
+
/* AX.W04 — NO `transition: min-height` JS-morph (the AW.W3b spring-keyed
|
|
139
|
+
min-height detector is RETIRED — the false `proof:dock-layering-polish`
|
|
140
|
+
wrap-reflow claim is STRUCK). The reflow is intrinsic flex: rows
|
|
141
|
+
appear/vanish on the cap crossing with no second clock. The radius +
|
|
142
|
+
shadow lift ride the `--dock-expand-t` scalar (the W01 single clock),
|
|
143
|
+
NOT a CSS transition on the retired `--dock-motion-resize` list. */
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.glass-dock.dock-overflow-wrap .dock-layer--summary {
|
|
147
|
+
height: auto;
|
|
148
|
+
min-height: var(--dock-wrap-layer-min-height, var(--dock-layer-height, 2rem));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.glass-dock.dock-overflow-wrap .dock-separator {
|
|
152
|
+
display: none;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Collapsed, a wrap dock is the single-row summary PILL. `white-space: nowrap`
|
|
156
|
+
keeps the summary on one line; the inline cap stays `max-inline-size:
|
|
157
|
+
var(--dock-max-inline-size)` (inherited from the `.dock-overflow-wrap` rule
|
|
158
|
+
above) so the collapsed box still shrink-wraps to the small summary's
|
|
159
|
+
max-content (NOT the full cap). The
|
|
160
|
+
radius morph resolves to `--radius-pill` at collapsed (--dock-expand-t 0) and
|
|
161
|
+
the box-shadow to the flat `--shadow-dock` glow (--dock-wrap-elev 0%). */
|
|
162
|
+
.glass-dock.dock-overflow-wrap.collapsed {
|
|
163
|
+
white-space: nowrap;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* AX.W45 D15 / AX.W51 D18 RECONCILE — the coarse-pointer dock growth now rides
|
|
167
|
+
the GLOBAL `--ui-scale` comfort axis, NOT a parallel dock-only 1.5×. The
|
|
168
|
+
library-wide `@media (pointer: coarse) { :root { --ui-scale:
|
|
169
|
+
var(--ui-coarse-scale, 1.5) } }` block (tokens.css) lifts the master scalar,
|
|
170
|
+
and `--dock-scale: calc(var(--ui-scale) * var(--dock-local-scale, 1))` (its
|
|
171
|
+
re-homed definition) inherits it FOR FREE — so the dock grows ~1.5× on touch
|
|
172
|
+
WITH the buttons/inputs/badges (ONE consistent touch scale; at HEAD the dock
|
|
173
|
+
grew but the rest of the library did not — the three-scale split this resolves).
|
|
174
|
+
The whole density cascade (box + padding + gap + tab + tile-min + glyph) scales
|
|
175
|
+
in LOCKSTEP through its existing `calc(<base> * --dock-scale)` chain, zero edit.
|
|
176
|
+
|
|
177
|
+
This block keeps ONLY the dock-LOCAL extras the global axis cannot supply:
|
|
178
|
+
• `--dock-local-scale: var(--dock-mobile-scale, 1)` — the dock-local EXTRA
|
|
179
|
+
multiplier (default 1 → no extra; the dock matches the global comfort by
|
|
180
|
+
default). A consumer who wants the dock LARGER than the library on touch
|
|
181
|
+
sets `--dock-mobile-scale` and it STACKS on top of the global coarse default
|
|
182
|
+
(NOT a parallel hardcoded 1.5 — the no-double-scale reconcile).
|
|
183
|
+
• the 44px touch floor: `--dock-control-floor` + `--size-icon-btn` lift to
|
|
184
|
+
`--dock-touch-target` so the `max(…, floor)` clamp in the scaled control-size
|
|
185
|
+
guarantees ≥ 44px regardless of the scalar (a sub-1 scale cannot drop the
|
|
186
|
+
target). `--size-icon-btn` keeps its floor for STANDALONE icon-button
|
|
187
|
+
surfaces (a routed gear, no dock ancestor) that read it directly.
|
|
188
|
+
Fine pointer byte-identical (`--ui-scale` stays 1).
|
|
189
|
+
|
|
190
|
+
AP.W3 R0G-6 — selector is `.glass-dock[data-density]`, not bare `.glass-dock`:
|
|
191
|
+
the always-present density setter (0,2,0) would shadow a bare (0,1,0) rule. The
|
|
192
|
+
presence-selector (0,2,0) wins by source order, lifting `--dock-local-scale` +
|
|
193
|
+
the floor so the cascade re-resolves at touch scale. */
|
|
194
|
+
@media (pointer: coarse) {
|
|
195
|
+
.glass-dock[data-density] {
|
|
196
|
+
--dock-local-scale: var(--dock-mobile-scale, 1);
|
|
197
|
+
--dock-control-floor: var(--dock-touch-target, 2.75rem);
|
|
198
|
+
--size-icon-btn: var(--dock-touch-target, 2.75rem);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|