@mkbabb/glass-ui 2.0.0 → 3.0.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/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/{CommandShortcut-_INFUMu6.js → CommandShortcut-BNDzfFnB.js} +2 -2
- package/dist/{ContextMenuSubContent-DCkweFW9.js → ContextMenuSubContent-DLEyeqbh.js} +3 -3
- package/dist/{DialogContent-CmCijgX9.js → DialogContent-DSo7PKlU.js} +1 -1
- package/dist/{DialogFooter-DRdaCok0.js → DialogFooter-D5KY6sCX.js} +1 -1
- package/dist/{Notification-DrI1DT2v.js → Notification-D97JO0fK.js} +2 -2
- package/dist/{SelectScrollDownButton-yu8EYUnu.js → SelectScrollDownButton-BwTexKeY.js} +2 -2
- package/dist/{Toaster-DY8_jtHv.js → Toaster-CY8gJu9E.js} +69 -58
- package/dist/animated-digit.js +1 -1
- package/dist/aurora.js +100 -87
- package/dist/carousel.js +4 -4
- package/dist/{check-dwgetki8.js → check-Nuw7H9Yh.js} +1 -1
- package/dist/{chevron-down-DILQA1t6.js → chevron-down-Du2b9vY_.js} +1 -1
- package/dist/{chevron-right-fS7fal2t.js → chevron-right-CtDxpE3w.js} +1 -1
- package/dist/{chevron-up-BtYjYQOS.js → chevron-up-CenYokvI.js} +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/aurora/composables/runtime.d.ts +24 -1
- package/dist/components/custom/sortable-list/SortableHandle.vue.d.ts +1 -1
- package/dist/components/custom/toggle-chip/ToggleChip.vue.d.ts +6 -4
- package/dist/components/custom/typewriter/TypewriterText.vue.d.ts +1 -1
- package/dist/components/ui/drawer/Drawer.vue.d.ts +25 -2
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -1
- package/dist/components/ui/drawer/index.d.ts +9 -0
- package/dist/components/ui/toast/Toaster.vue.d.ts +7 -1
- package/dist/components/ui/toast/index.d.ts +1 -0
- package/dist/components/ui/toast/use-toast.d.ts +14 -1
- package/dist/composables/dark/index.d.ts +1 -0
- package/dist/composables/dom/index.d.ts +1 -0
- package/dist/composables/dom/useIdleReady.d.ts +63 -0
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/motion/core/index.d.ts +6 -0
- package/dist/composables/motion/index.d.ts +0 -7
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +1 -1
- package/dist/constants-D-8FN28s.js +13 -0
- package/dist/context-menu.js +1 -1
- package/dist/{createLucideIcon-Bn9a1b70.js → createLucideIcon-rHu18UQW.js} +2 -2
- package/dist/dark.d.ts +1 -1
- package/dist/dark.js +12 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +1 -1
- package/dist/dom.js +2 -2
- package/dist/{dropdown-menu-2K-SGkZU.js → dropdown-menu-gHSkffW7.js} +2 -2
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +2 -2
- package/dist/forms.js +2 -2
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +139 -115
- package/dist/icon-tooltip.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +3 -3
- package/dist/{minimize-2-LsCJ_eNt.js → minimize-2-C_oyKVwZ.js} +1 -1
- package/dist/motion-core.d.ts +1 -0
- package/dist/motion-core.js +192 -0
- package/dist/motion.js +25 -227
- package/dist/notification.js +1 -1
- package/dist/responsive-tabs.js +1 -1
- package/dist/{search-ocd8tmL9.js → search-7XEx_6hq.js} +1 -1
- package/dist/search.js +4 -4
- package/dist/select.js +1 -1
- package/dist/{sheet-CLVkb3AO.js → sheet-BsBdO5jq.js} +1 -1
- package/dist/sheet.js +1 -1
- package/dist/sortable-list.js +6 -3
- package/dist/status-dot.js +16 -13
- package/dist/styles/dock.css +72 -95
- package/dist/styles/drawer.css +138 -0
- package/dist/styles/index.css +18 -2
- package/dist/styles/instrument-chassis.css +28 -1
- package/dist/styles/theme.css +3 -0
- package/dist/styles/tokens.css +109 -266
- package/dist/styles/typography.css +44 -131
- package/dist/styles/utilities.css +23 -58
- package/dist/toast.js +1 -1
- package/dist/{useAnimatedNumber-DcvTR9B4.js → useAnimatedNumber-2l13GibX.js} +9 -20
- package/dist/{useConfiguratorState-BlaevW0S.js → useConfiguratorState-BpZi8QJu.js} +5 -5
- package/dist/{useBreakpoint-BHlX-MhR.js → useIdleReady-DlzJicQH.js} +29 -1
- package/dist/{x-cdWAmO-q.js → x-Cb3NE2Ne.js} +1 -1
- package/package.json +12 -5
- package/src/styles/dock.css +72 -95
- package/src/styles/drawer.css +138 -0
- package/src/styles/index.css +14 -2
- package/src/styles/instrument-chassis.css +28 -1
- package/src/styles/theme.css +3 -0
- package/src/styles/tokens.css +109 -266
- package/src/styles/typography.css +44 -131
- package/src/styles/utilities.css +23 -58
- package/dist/composables/motion/useSpringOrchestrator.d.ts +0 -15
- /package/dist/{IconTooltip-ge_mBSWR.js → IconTooltip-GIeWdo64.js} +0 -0
- /package/dist/{Input-CbakTe3B.js → Input-CBvqW8kZ.js} +0 -0
- /package/dist/composables/{motion → dark}/installDarkModeSync.d.ts +0 -0
- /package/dist/{useKeyboardShortcuts-B1ev1YEC.js → useKeyboardShortcuts-CPO4AhLx.js} +0 -0
package/src/styles/tokens.css
CHANGED
|
@@ -79,21 +79,10 @@
|
|
|
79
79
|
headline and the thank-you headline stay in lockstep. */
|
|
80
80
|
--motion-duration-complete-shimmer: 2.4s;
|
|
81
81
|
--motion-delay-complete-shimmer: 220ms;
|
|
82
|
-
/*
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
(gold-headline-shimmer: background-position 120% 0 → -120% 0),
|
|
87
|
-
and the animation declaration are mutually consistent: at 2.4s
|
|
88
|
-
duration + 220ms delay the bright band traverses the headline
|
|
89
|
-
glyphs cleanly. A regression that drops either token to 0ms /
|
|
90
|
-
unset / 0 would silently collapse the celebratory shimmer to an
|
|
91
|
-
imperceptible blow-through (live regression P1-12 surfaced this
|
|
92
|
-
risk; investigation closed at the publisher as a verify — both
|
|
93
|
-
values resolve correctly today). These two values are LOAD-
|
|
94
|
-
BEARING. Do not retire / zero / un-publish without an explicit
|
|
95
|
-
decision + companion consumer-side migration at speedtest's
|
|
96
|
-
CompleteHeadline.vue + ThankYou.vue. */
|
|
82
|
+
/* The gold-headline shimmer reads these two tokens under a one-shot
|
|
83
|
+
animation: at 2.4s + 220ms delay the bright band traverses the headline
|
|
84
|
+
glyphs cleanly. Load-bearing — zeroing either collapses the shimmer to
|
|
85
|
+
an imperceptible blow-through. */
|
|
97
86
|
|
|
98
87
|
/* CompleteBadge staged-reveal cluster — the disc / ring / check curve
|
|
99
88
|
fires at three asymmetric durations + delays per the A4-AF staged-
|
|
@@ -106,43 +95,16 @@
|
|
|
106
95
|
--motion-delay-badge-ring: 220ms;
|
|
107
96
|
--motion-delay-badge-check: 460ms;
|
|
108
97
|
|
|
109
|
-
/*
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
of
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
• tight (40ms) — dense row cascades where the gap between
|
|
120
|
-
consecutive reveals should be sub-perceptual (StatsCards row
|
|
121
|
-
strip, results-table rows under their `:nth-child(N+1)` delays)
|
|
122
|
-
• default (80ms) — the canonical row-stagger rhythm (the
|
|
123
|
-
speedtest ResultStack row-tint sweep, the DistributionChart
|
|
124
|
-
bar entrance — both already at 80ms). Aliased as `default`
|
|
125
|
-
to match `useStagger`'s built-in fallback so consumers
|
|
126
|
-
omitting `delayMs` resolve to the same token.
|
|
127
|
-
• relaxed (120ms) — wider cascades where each reveal carries
|
|
128
|
-
its own attention budget (TimeSeriesChart series entrance)
|
|
129
|
-
|
|
130
|
-
The FD2 §6 rule-1 "shared period multiple" canon for ambient
|
|
131
|
-
cycles extends here to staggers: at 40/80/120ms, the default
|
|
132
|
-
(80ms) is the LCM of tight (40) AND a 2/3 of relaxed (120)
|
|
133
|
-
— a tight cascade beating against a default cascade syncs on
|
|
134
|
-
every-other-reveal, and a default cascade against a relaxed
|
|
135
|
-
cascade syncs on every-three-reveals. Consumers that nest
|
|
136
|
-
multiple cascades on adjacent surfaces should pick adjacent
|
|
137
|
-
tiers so the cross-beats stay quiet.
|
|
138
|
-
|
|
139
|
-
Consumers can read these tokens directly from inline-style
|
|
140
|
-
calc() expressions (`animation-delay: calc(var(--motion-stagger-default) * var(--row-index))`)
|
|
141
|
-
or via JS by resolving the CSS custom property at runtime
|
|
142
|
-
(`getComputedStyle(document.documentElement).getPropertyValue('--motion-stagger-default')`).
|
|
143
|
-
The latter shape collapses the speedtest TS-side constants
|
|
144
|
-
(SERIES_STAGGER_MS, BAR_STAGGER_MS, STATS_CARD_STAGGER_MS) into
|
|
145
|
-
single-source token reads. */
|
|
98
|
+
/* Staggered-reveal increment canon — three perceptually-distinct tiers for
|
|
99
|
+
per-row/per-cell/per-bar cascades:
|
|
100
|
+
• tight (40ms) — dense row cascades, sub-perceptual gap
|
|
101
|
+
• default (80ms) — the canonical row-stagger rhythm (matches
|
|
102
|
+
`useStagger`'s built-in fallback)
|
|
103
|
+
• relaxed (120ms) — wider cascades where each reveal carries its own
|
|
104
|
+
attention budget
|
|
105
|
+
Adjacent tiers keep cross-beats quiet (80 is the LCM of 40 and 2/3 of
|
|
106
|
+
120). Consumers read these via inline-style calc() or `getComputedStyle`
|
|
107
|
+
at runtime. */
|
|
146
108
|
--motion-stagger-tight: 40ms;
|
|
147
109
|
--motion-stagger-default: 80ms;
|
|
148
110
|
--motion-stagger-relaxed: 120ms;
|
|
@@ -199,23 +161,13 @@
|
|
|
199
161
|
--ease-accelerate: var(--ease-in);
|
|
200
162
|
|
|
201
163
|
/* ═══════════════════════════════════════════════
|
|
202
|
-
§2.A AMBIENT MOTION — Pulse aura tokens
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
its `intensity` prop ('subtle' = 1.06; 'vivid' = 1.22).
|
|
210
|
-
|
|
211
|
-
Opacity min/max scope is `--pulse-aura-opacity-{min,max}` —
|
|
212
|
-
the aura ALWAYS keeps a visible halo (min 0.55) so the colour
|
|
213
|
-
stays read at the trough; the peak goes to 0.95 so the breath
|
|
214
|
-
reads as a soft swell, not a fade-in-fade-out.
|
|
215
|
-
|
|
216
|
-
Reduced motion: Pulse.vue's scoped @media bracket forces
|
|
217
|
-
`animation: none` and parks at the min stop. Depth + colour
|
|
218
|
-
remain visible; the breath cycle disables.
|
|
164
|
+
§2.A AMBIENT MOTION — Pulse aura tokens
|
|
165
|
+
|
|
166
|
+
Breathing rhythm for `<Pulse variant="aura">`. The 6s duration is the
|
|
167
|
+
canon ambient-pulse rate; scale 1.0 ↔ 1.15 reads as a quiet halo at
|
|
168
|
+
intensity="normal" (Pulse remaps min/max from its `intensity` prop).
|
|
169
|
+
The aura always keeps a visible halo at the trough (opacity min 0.55).
|
|
170
|
+
Reduced motion: Pulse.vue parks at the min stop, breath cycle disabled.
|
|
219
171
|
═══════════════════════════════════════════════ */
|
|
220
172
|
--animate-ambient-pulse-duration: 6s;
|
|
221
173
|
--animate-ambient-pulse-scale-min: 1.0;
|
|
@@ -247,37 +199,18 @@
|
|
|
247
199
|
--progress-sectioned-track: var(--secondary);
|
|
248
200
|
|
|
249
201
|
/* ═══════════════════════════════════════════════
|
|
250
|
-
§2.C ANIMATION EXPRESSIVENESS
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
fade established by the chassis cascade gains an amount companion
|
|
263
|
-
(`@property --phase-tint-amount`) so the chassis backdrop "warms
|
|
264
|
-
toward" the active phase. Both typed vars interpolate together
|
|
265
|
-
across the speedtest-owned `--motion-duration-phase-handoff`
|
|
266
|
-
window; the chassis reads the consumer-tuned clock with a safe
|
|
267
|
-
600ms default so a non-speedtest consumer still gets the cross-
|
|
268
|
-
fade shape.
|
|
269
|
-
|
|
270
|
-
• Audacious button press-ripple (M.2 Q5 — ratified G-AI-D27) — the
|
|
271
|
-
`btn-audacious` utility gains an in-place `@property --ripple-
|
|
272
|
-
radius` ripple emanating from the pressed surface. Single typed
|
|
273
|
-
length, ramps 0 → max over the ripple duration, retires on
|
|
274
|
-
release. Q3 (needle micro-jitter) + Q4 (DockLayerGroup sympath-
|
|
275
|
-
etic motion) were pruned at G-AI-D27 — no tokens reserved.
|
|
276
|
-
|
|
277
|
-
All three families coexist with the existing `--motion-*` /
|
|
278
|
-
`--phase-*` cluster. Speedtest re-uses these tokens at the existing
|
|
279
|
-
--motion-duration-phase-handoff (consumer-side, 600ms). PRM brackets
|
|
280
|
-
live alongside each consumer rule. */
|
|
202
|
+
§2.C ANIMATION EXPRESSIVENESS
|
|
203
|
+
|
|
204
|
+
Three idiom families:
|
|
205
|
+
• Progress lifecycle — the progress bar rides an intake pulse on
|
|
206
|
+
rising-edge, a crescendo brightening at ≥85%, and a one-shot discharge
|
|
207
|
+
flash at 100% (the crescendo is the typed `@property --progress-crescendo`).
|
|
208
|
+
• Chassis phase-tint companion — `@property --phase-tint-amount` so the
|
|
209
|
+
chassis backdrop warms toward the active phase, interpolating with
|
|
210
|
+
`--phase-color` across the consumer's phase-handoff window (600ms default).
|
|
211
|
+
• Audacious button press-ripple — `btn-audacious` gains a typed
|
|
212
|
+
`@property --ripple-radius` ramping 0 → max over the ripple duration.
|
|
213
|
+
═══════════════════════════════════════════════ */
|
|
281
214
|
|
|
282
215
|
/* Progress lifecycle — typed crescendo + segment-local durations */
|
|
283
216
|
--motion-duration-progress-intake: 220ms; /* rising-edge pulse */
|
|
@@ -391,6 +324,13 @@
|
|
|
391
324
|
--popover: var(--neutral-0);
|
|
392
325
|
--popover-foreground: var(--foreground);
|
|
393
326
|
|
|
327
|
+
/* R0G-5 (AO.W4) — warm-neutral public-data panel surface. One warmth step
|
|
328
|
+
off --card (hue 44 vs 48, +4 sat, −2 L) so a consumer's aurora-OFF
|
|
329
|
+
/dashboard/* surfaces read with the admin canon's warm-neutral chrome
|
|
330
|
+
instead of the colder bare card. Opaque surface (the --card family), not
|
|
331
|
+
a --surface-tint-* overlay. Consumer applies on /dashboard/* only. */
|
|
332
|
+
--surface-public-data-panel: hsl(44 16% 96%);
|
|
333
|
+
|
|
394
334
|
--muted: var(--neutral-1);
|
|
395
335
|
--muted-foreground: var(--neutral-5);
|
|
396
336
|
/* W7-α' (AK-FD1) — one rung less-faint than --muted-foreground for
|
|
@@ -547,21 +487,12 @@
|
|
|
547
487
|
variable at any ancestor. Auto-dark via `--card`. */
|
|
548
488
|
--card-header-bg: color-mix(in srgb, var(--card) 60%, transparent);
|
|
549
489
|
|
|
550
|
-
/* Dock shadows
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
dark mode the 10% cream-white ring traced the right-cap arc and
|
|
557
|
-
still read as a shadow even after the directional drop was
|
|
558
|
-
gone).
|
|
559
|
-
The dock's own `border: 1.5px solid var(--glass-border-dock)` already
|
|
560
|
-
provides silhouette definition, so the outer ring was redundant. The
|
|
561
|
-
canonical dock shadow is now a single omnidirectional glow in the
|
|
562
|
-
`--shadow-md`/`--shadow-lg` family. Per-instance directional drop
|
|
563
|
-
can still be reinstated via `--shadow-dock-override` (consumed by
|
|
564
|
-
every `.glass-dock` state selector — see dock.css). */
|
|
490
|
+
/* Dock shadows — a single omnidirectional glow in the
|
|
491
|
+
`--shadow-md`/`--shadow-lg` family (a directional drop concentrated on
|
|
492
|
+
the pill's rounded right cap as a right-edge halo; the dock's own
|
|
493
|
+
border already defines the silhouette). Per-instance directional drop
|
|
494
|
+
reinstates via `--shadow-dock-override` (consumed by every `.glass-dock`
|
|
495
|
+
state selector — see dock.css). */
|
|
565
496
|
--shadow-dock: 0 0 20px color-mix(in srgb, var(--shadow-color) 14%, transparent);
|
|
566
497
|
--shadow-dock-collapsed: 0 0 12px color-mix(in srgb, var(--shadow-color) 12%, transparent);
|
|
567
498
|
--dock-shadow: var(--shadow-dock);
|
|
@@ -617,27 +548,11 @@
|
|
|
617
548
|
--glass-blur-resting-radius: 12px;
|
|
618
549
|
--glass-blur-floating-radius: 16px;
|
|
619
550
|
--glass-blur-overlay-radius: 24px;
|
|
620
|
-
/*
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
overrides the J.W3.C compositor-cost concern: 14px is the lower
|
|
626
|
-
end of the FD1 §4 target range (14-16px); the dock composes
|
|
627
|
-
`blur()` only (no saturate — preserved from J.W3.C); the
|
|
628
|
-
`prefers-reduced-transparency` PRM bracket at glass.css:229
|
|
629
|
-
still maps the dock to its opacity-only register.
|
|
630
|
-
Quiet tier (above) lifted 3px → 10px on the same perceptual-
|
|
631
|
-
register reset (FD1 §4 target range 10-12px; 10px is the lower
|
|
632
|
-
end). The MetricBadge pills + InstrumentChassis-internal cells
|
|
633
|
-
now read as translucent gauge rather than flat tint.
|
|
634
|
-
|
|
635
|
-
AL-W3-α (T10 per A-synthesis §1.5): retune 14px → 11px with a
|
|
636
|
-
paired opacity lift 0.32 → 0.42 (below). The user mandate at
|
|
637
|
-
AL-time was "slight blur" + "refined glassyness" — at 11px /
|
|
638
|
-
0.42 the dock reads as a CRISPER GLASS PILL (the iOS Control
|
|
639
|
-
Center register), not a feathered watercolour wash. Holds the
|
|
640
|
-
register at the lower blur radius. */
|
|
551
|
+
/* Dock blur radius — 11px, paired with the 0.42 opacity below: a crisp
|
|
552
|
+
glass pill (the iOS Control Center register), not a feathered wash.
|
|
553
|
+
The dock composes `blur()` only (no saturate); the
|
|
554
|
+
`prefers-reduced-transparency` bracket at glass.css maps it to the
|
|
555
|
+
opacity-only register. */
|
|
641
556
|
--glass-blur-dock-radius: 11px;
|
|
642
557
|
|
|
643
558
|
--glass-blur-wash: blur(var(--glass-blur-wash-radius)) saturate(1.05);
|
|
@@ -645,23 +560,14 @@
|
|
|
645
560
|
--glass-blur-resting: blur(var(--glass-blur-resting-radius)) saturate(1.05);
|
|
646
561
|
--glass-blur-floating: blur(var(--glass-blur-floating-radius)) saturate(1.4);
|
|
647
562
|
--glass-blur-overlay: blur(var(--glass-blur-overlay-radius)) saturate(1.5);
|
|
648
|
-
/* Dock blur composes blur() only — no saturate.
|
|
649
|
-
feathers the aurora bleed-through into a watercolour register
|
|
650
|
-
while `--glass-bg-dock` (32% card opacity) carries the
|
|
651
|
-
translucent register. The dock reads as "feathered glass" rather
|
|
652
|
-
than "transparent tint" (AJ.W2-β). */
|
|
563
|
+
/* Dock blur composes blur() only — no saturate. */
|
|
653
564
|
--glass-blur-dock: blur(var(--glass-blur-dock-radius));
|
|
654
565
|
|
|
655
|
-
/* Dock-specific opacity.
|
|
656
|
-
as a translucent overlay rather than a panel
|
|
657
|
-
through it. Consumed by `.glass-dock` via
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
the dock blur radius drop (14px → 11px above). The user mandate at
|
|
661
|
-
AL-time was "slight blur" + "refined glassyness" — the +0.10 opacity
|
|
662
|
-
lift HOLDS the surface register against the tightened blur, so the
|
|
663
|
-
dock still reads as a clearly painted chrome rather than dissociating
|
|
664
|
-
into a frosted ghost. */
|
|
566
|
+
/* Dock-specific opacity (0.42) — lighter than `resting` (0.65) so the dock
|
|
567
|
+
reads as a translucent overlay rather than a panel, backdrop bleed
|
|
568
|
+
visible through it. Consumed by `.glass-dock` via `--glass-bg-dock`. The
|
|
569
|
+
value holds the surface register against the tightened 11px blur so the
|
|
570
|
+
dock reads as painted chrome, not a frosted ghost. */
|
|
665
571
|
--glass-opacity-dock: 0.42;
|
|
666
572
|
|
|
667
573
|
/* Chassis-specific opacity. Looser than `default` (0.50) so the
|
|
@@ -881,6 +787,13 @@
|
|
|
881
787
|
- var(--page-padding-top, 0rem)
|
|
882
788
|
- 1rem
|
|
883
789
|
);
|
|
790
|
+
/* R0G-2 (AO.W3/W4) — chassis mobile dial-reserve canon. instrument-
|
|
791
|
+
chassis.css's mobile breakpoint reserves the dial's final box from
|
|
792
|
+
frame 0 via these vars (with the same values as inline fallbacks, the
|
|
793
|
+
safety net). Token-first home so the vars resolve canonically. */
|
|
794
|
+
--instrument-dial-min-height-mobile: 24rem;
|
|
795
|
+
--instrument-dial-meter-reserve-mobile: minmax(0, 1fr);
|
|
796
|
+
|
|
884
797
|
--max-width-input: 24rem;
|
|
885
798
|
--input-min-width-sm: 5rem;
|
|
886
799
|
--min-width-input-sm: var(--input-min-width-sm);
|
|
@@ -1000,27 +913,10 @@
|
|
|
1000
913
|
--scale-press: 0.96;
|
|
1001
914
|
--scale-press-dock: 0.92;
|
|
1002
915
|
|
|
1003
|
-
/* Press-scale
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
0.97) is the slightly-softer rung the legacy button + slider
|
|
1008
|
-
recipes consume.
|
|
1009
|
-
|
|
1010
|
-
AL-W10 SLIM reconciliation (per audit G-W1-2 / G-W1-4 F-2):
|
|
1011
|
-
the prior `--scale-press: 0.95` value drifted from the §L3
|
|
1012
|
-
canonical 0.96 rung; the canon-amend lifts the token to match
|
|
1013
|
-
the iOS `.regular` control rung the precept ratifies.
|
|
1014
|
-
|
|
1015
|
-
Q.W4 Lane D (Q-sty-5) retired the P.W4 `--scale-press-{xs,md,lg}`
|
|
1016
|
-
rungs: the ladder was minted as preemptive consumer-facing
|
|
1017
|
-
substrate for a words/frontend `active:scale-[X.XX]` absorption
|
|
1018
|
-
that never landed — a fleet-wide grep (words/frontend, fourier,
|
|
1019
|
-
bbnf-buddy, speedtest, keyframes.js + glass-ui src/) found zero
|
|
1020
|
-
`var(--scale-press-{xs,md,lg})` consumers. Substrate-without-
|
|
1021
|
-
consumer is binary (N invariant 23 / L invariant 8); the three
|
|
1022
|
-
unused rungs are gone. `sm` is retained — `--scale-press-btn`
|
|
1023
|
-
aliases it. */
|
|
916
|
+
/* Press-scale rungs. `--scale-press` (0.96) is the canonical iOS Liquid
|
|
917
|
+
Glass press value every primitive reaches for unless it has a documented
|
|
918
|
+
reason (DESIGN.md §L3); `--scale-press-btn` aliases the slightly-softer
|
|
919
|
+
`--scale-press-sm` (0.97) the button + slider recipes consume. */
|
|
1024
920
|
--scale-press-sm: 0.97;
|
|
1025
921
|
--scale-press-btn: var(--scale-press-sm);
|
|
1026
922
|
--opacity-disabled: 0.5;
|
|
@@ -1168,26 +1064,12 @@
|
|
|
1168
1064
|
/* ═══════════════════════════════════════════════
|
|
1169
1065
|
§17 METRIC
|
|
1170
1066
|
|
|
1171
|
-
MetricRow / MetricStack value-clamp dialect. The
|
|
1172
|
-
`
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
whole family here per the DESIGN.md feature-token-home rule;
|
|
1178
|
-
the SFCs now consume them bare.
|
|
1179
|
-
|
|
1180
|
-
The declared values ARE the `audacious` poster register — the
|
|
1181
|
-
hero-scale clamp for a single giant number the user watches
|
|
1182
|
-
climb. MetricStack's `[data-register="result"]` scoped selector
|
|
1183
|
-
legitimately overrides this register-locally for the compact
|
|
1184
|
-
multi-row ledger; that override now retunes a globally declared
|
|
1185
|
-
default rather than minting a fallback.
|
|
1186
|
-
|
|
1187
|
-
Three clamp arms each: `min` (floor), `cqi` (the binding
|
|
1188
|
-
container-query middle term), `max` (ceiling). value + label
|
|
1189
|
-
carry all three; unit carries min/max only (its cqi coefficient
|
|
1190
|
-
is a fixed 6cqi, not consumer-tuned).
|
|
1067
|
+
MetricRow / MetricStack value-clamp dialect. The declared values are the
|
|
1068
|
+
`audacious` poster register — the hero-scale clamp for a single giant
|
|
1069
|
+
number; MetricStack's `[data-register="result"]` selector overrides it
|
|
1070
|
+
locally for the compact multi-row ledger. Three clamp arms each: `min`
|
|
1071
|
+
(floor), `cqi` (the binding container-query middle term), `max`
|
|
1072
|
+
(ceiling); unit carries min/max only (its cqi is a fixed 6cqi).
|
|
1191
1073
|
═══════════════════════════════════════════════ */
|
|
1192
1074
|
|
|
1193
1075
|
/* Value register — audacious-poster hero clamp */
|
|
@@ -1206,69 +1088,35 @@
|
|
|
1206
1088
|
--metric-row-label-clamp-max: 2.75rem;
|
|
1207
1089
|
|
|
1208
1090
|
/* ═══════════════════════════════════════════════
|
|
1209
|
-
§2.D INSTRUMENT-CLUSTER COMPOSITION RHYTHM
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
bound (FD2 §5.2) and any two stacked progress rails inside a
|
|
1214
|
-
cluster share the same vertical rhythm token. Both tokens were
|
|
1215
|
-
authored speedtest-local (`AJ.W3-α`, `AJ.W3-μ.3`) but the design
|
|
1216
|
-
intent is library-canon: the instrument-chassis family owns the
|
|
1217
|
-
under-meter / progress-cluster grammar, so the tokens absorb here
|
|
1218
|
-
at AK.W3. Speedtest reads transitively through the canon.
|
|
1219
|
-
|
|
1220
|
-
AM-W7-δ — `--meter-progress-gap` RETIRED (dead-canon). It was
|
|
1221
|
-
absorbed pre-emptively at AK.W3 for a post-nest "meter ↔ per-phase
|
|
1222
|
-
progress-bar gap" composition that never materialised: speedtest's
|
|
1223
|
-
bar uses the negative `--meter-progress-inset` instead, and a
|
|
1224
|
-
fleet grep (glass-ui src/ + demo + speedtest) found ZERO `var()`
|
|
1225
|
-
consumers (only doc references in pre-AL/pre-AK audits flagging it
|
|
1226
|
-
as G-AL-D-METER-PROGRESS-GAP-DEAD-CANON, routed to retire). Per
|
|
1227
|
-
NO-legacy-code it is removed rather than kept as speculative
|
|
1228
|
-
forward-compat reservation; a future glass-ui Meter primitive that
|
|
1229
|
-
needs the gap re-authors it at its real consumer.
|
|
1230
|
-
|
|
1231
|
-
• `--meter-progress-inset` — the negative-margin inset that pulls
|
|
1232
|
-
the under-meter bar INTO the unpainted ring lane around the
|
|
1233
|
-
dial canvas (~4% of meter-size, two-thirds of the way through
|
|
1234
|
-
the lane). Consumed at `.phase-progress` with `margin-block-
|
|
1235
|
-
start: calc(-1 * var(--meter-progress-inset))`.
|
|
1236
|
-
• `--progress-stack-gap` — vertical rhythm between any two stacked
|
|
1237
|
-
progress rails inside one cluster (the under-meter bar cluster
|
|
1238
|
-
+ the global PhaseTimeline siblinged at W3-β).
|
|
1091
|
+
§2.D INSTRUMENT-CLUSTER COMPOSITION RHYTHM
|
|
1092
|
+
|
|
1093
|
+
The instrument-chassis family owns the under-meter / progress-cluster
|
|
1094
|
+
grammar.
|
|
1239
1095
|
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1096
|
+
• `--meter-progress-inset` — the negative-margin inset that pulls the
|
|
1097
|
+
under-meter bar INTO the unpainted ring lane around the dial canvas
|
|
1098
|
+
(~4% of meter-size). Consumed at `.phase-progress` via
|
|
1099
|
+
`margin-block-start: calc(-1 * var(--meter-progress-inset))`. The
|
|
1100
|
+
`--meter-size` reference resolves against the consumer's own
|
|
1101
|
+
declaration; the 200px fallback keeps the calc well-defined.
|
|
1102
|
+
• `--progress-stack-gap` — vertical rhythm between any two stacked
|
|
1103
|
+
progress rails inside one cluster.
|
|
1104
|
+
═══════════════════════════════════════════════ */
|
|
1244
1105
|
--meter-progress-inset: calc(var(--meter-size, 200px) * 0.04);
|
|
1245
1106
|
--progress-stack-gap: clamp(0.1875rem, 0.4cqi, 0.375rem);
|
|
1246
1107
|
|
|
1247
1108
|
/* ═══════════════════════════════════════════════
|
|
1248
|
-
§2.E CELEBRATION-TIER REGISTER
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
• `--celebration-row-rhythm` — gap between the celebration
|
|
1260
|
-
cluster's rows (cqi-axis so the rhythm tracks the card's
|
|
1261
|
-
intrinsic width).
|
|
1262
|
-
• `--text-celebration-headline-size` — the SINGLE designed peak
|
|
1263
|
-
both celebration surfaces clamp toward (the W2-C unification).
|
|
1264
|
-
cqi-axis so the size tracks each card's intrinsic width.
|
|
1265
|
-
• `--complete-headline-size` — the per-consumer FONT-SIZE HOOK
|
|
1266
|
-
that `CompleteHeadline.vue` reads (`font-size:
|
|
1267
|
-
var(--complete-headline-size, …)`). Each consumer assigns the
|
|
1268
|
-
canon clamp (`--text-celebration-headline-size`) to this hook
|
|
1269
|
-
at the container so the headline pegs at the shared peak.
|
|
1270
|
-
The default falls back to a smaller hero-rung clamp for
|
|
1271
|
-
consumers that haven't opted into the celebration ceiling. */
|
|
1109
|
+
§2.E CELEBRATION-TIER REGISTER
|
|
1110
|
+
|
|
1111
|
+
Shared peak for any "completion" / "thank-you" surface.
|
|
1112
|
+
|
|
1113
|
+
• `--celebration-row-rhythm` — gap between the cluster's rows (cqi-axis).
|
|
1114
|
+
• `--text-celebration-headline-size` — the single designed peak both
|
|
1115
|
+
celebration surfaces clamp toward (cqi-axis).
|
|
1116
|
+
• `--complete-headline-size` — the per-consumer font-size hook a consumer
|
|
1117
|
+
assigns the canon clamp to so its headline pegs at the shared peak;
|
|
1118
|
+
the default falls back to a smaller hero-rung clamp.
|
|
1119
|
+
═══════════════════════════════════════════════ */
|
|
1272
1120
|
--celebration-row-rhythm: clamp(0.5rem, 1.6cqi, 1rem);
|
|
1273
1121
|
--text-celebration-headline-size: clamp(2.5rem, 12cqi, 9rem);
|
|
1274
1122
|
--complete-headline-size: clamp(2.25rem, 11cqi, 4rem);
|
|
@@ -1276,22 +1124,12 @@
|
|
|
1276
1124
|
/* ═══════════════════════════════════════════════
|
|
1277
1125
|
§19 TABLE DENSITY
|
|
1278
1126
|
|
|
1279
|
-
A single unitless knob `--table-density` scales the cell
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
• 0.75 — compact admin table (tighter rows, more data/screen)
|
|
1287
|
-
• 1 — default (unchanged)
|
|
1288
|
-
• 1.25 — comfortable / touch-friendly rows
|
|
1289
|
-
|
|
1290
|
-
The derived tokens are read by the `table-cell` and `table-head`
|
|
1291
|
-
CSS utilities (utilities.css) which TableCell.vue and TableHead.vue
|
|
1292
|
-
consume instead of the former Tailwind `p-4` / `h-12` literals.
|
|
1293
|
-
Changing `--table-density` cascades instantly via CSS inheritance —
|
|
1294
|
-
no JS prop is needed.
|
|
1127
|
+
A single unitless knob `--table-density` scales the cell padding +
|
|
1128
|
+
header row height of the Table / DataTable primitive. Default `1`
|
|
1129
|
+
resolves to 1rem cell padding + 3rem header height; 0.75 is a compact
|
|
1130
|
+
admin table, 1.25 is comfortable/touch-friendly. The derived tokens are
|
|
1131
|
+
read by the `table-cell` / `table-head` utilities; changing the knob
|
|
1132
|
+
cascades instantly via CSS inheritance — no JS prop needed.
|
|
1295
1133
|
═══════════════════════════════════════════════ */
|
|
1296
1134
|
--table-density: 1;
|
|
1297
1135
|
--table-cell-px: calc(1rem * var(--table-density));
|
|
@@ -1326,6 +1164,11 @@
|
|
|
1326
1164
|
--popover: hsl(24 8% 10%);
|
|
1327
1165
|
--popover-foreground: var(--foreground);
|
|
1328
1166
|
|
|
1167
|
+
/* R0G-5 (AO.W4) — dark mirror of the warm-neutral public-data panel.
|
|
1168
|
+
--card's dark hsl(24 8% 10%) nudged one warmth step toward amber
|
|
1169
|
+
(24→36) + +1 sat + +2 L so the dark dashboard panel lifts off the page. */
|
|
1170
|
+
--surface-public-data-panel: hsl(36 9% 12%);
|
|
1171
|
+
|
|
1329
1172
|
--muted: var(--neutral-1);
|
|
1330
1173
|
--muted-foreground: var(--neutral-5);
|
|
1331
1174
|
/* W7-α' (AK-FD1) — strong-muted secondary text. Auto-tracks the dark
|