@mkbabb/glass-ui 3.10.1 → 3.11.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-DrAcAV4d.js → CardAction-DuArVky-.js} +2 -2
- package/dist/{CommandShortcut-mV2e1aG6.js → CommandShortcut-CefCj5mt.js} +2 -2
- package/dist/{DataTable-C3E6jZ5B.js → DataTable-CUHMukiQ.js} +2 -2
- package/dist/DeckProgress-Dmk4_AKN.js +23 -0
- package/dist/{DialogContent-BxaaafFi.js → DialogContent-BRkT1cjP.js} +1 -1
- package/dist/{HoverPopover-CDA_SaCe.js → HoverPopover-2LOIW34a.js} +1 -1
- package/dist/InstrumentRail-CUJ05YVG.js +44 -0
- package/dist/{MetricBadge-idgrkqoP.js → MetricBadge-BZVWIxNy.js} +7 -5
- package/dist/{Notification-Cu0nN17_.js → Notification-DLMhblXR.js} +1 -1
- package/dist/{NumberFieldContent-CHEWghnY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
- package/dist/{PopoverContent-DpUvdYY-.js → PopoverContent-BId6ggf_.js} +1 -1
- package/dist/{Progress-BW-StFw2.js → Progress-iEuD9pxG.js} +1 -1
- package/dist/{ScrollingText-DruYCni_.js → ScrollingText-BPP84wKo.js} +1 -1
- package/dist/{SelectScrollDownButton-pirzjm--.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
- package/dist/{Switch-DeAqg6pi.js → Switch-Ch-k3Rv-.js} +1 -1
- package/dist/{TabsList-BAVzOZpg.js → TabsList-B8CVOQPC.js} +2 -2
- package/dist/{Toaster-CvuuW_y9.js → Toaster-1rYWrmAm.js} +46 -49
- package/dist/{ToggleGroupItem-DtD37b4G.js → ToggleGroupItem-COu_4IW4.js} +21 -17
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +5 -4
- package/dist/api.js +2 -2
- package/dist/aurora.js +70 -70
- package/dist/{badge-NdCQMvvB.js → badge-CaoFJzRb.js} +1 -1
- package/dist/badge.js +1 -1
- package/dist/{button-DyiWFAOE.js → button-DN39cGqL.js} +12 -12
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.js +5 -5
- package/dist/collapsible.js +1 -1
- package/dist/{color-B65wWyQz.js → color-C5ls_QF7.js} +7 -9
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/aurora/constants/presets.d.ts +62 -5
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/constellation/Constellation.vue.d.ts +0 -12
- package/dist/components/custom/constellation/constellationField.d.ts +151 -10
- package/dist/components/custom/constellation/index.d.ts +1 -3
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +0 -11
- package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +27 -0
- package/dist/components/custom/deck-progress/index.d.ts +2 -0
- package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +57 -0
- package/dist/components/custom/dialog-native/index.d.ts +1 -0
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +4 -3
- package/dist/components/custom/dock/GlassDock.vue.d.ts +115 -3
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +0 -36
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +0 -44
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +37 -5
- package/dist/components/custom/fourier-field/index.d.ts +1 -1
- package/dist/components/custom/fourier-field/math.d.ts +0 -17
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +41 -0
- package/dist/components/custom/glass-panel/index.d.ts +2 -0
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +3 -4
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +8 -11
- package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
- package/dist/components/custom/handmark/brush.d.ts +242 -0
- package/dist/components/custom/handmark/freehand.d.ts +69 -0
- package/dist/components/custom/handmark/geometry.d.ts +50 -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 +87 -0
- package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +31 -0
- package/dist/components/custom/header-ribbon/index.d.ts +2 -0
- package/dist/components/custom/header-ribbon/types.d.ts +7 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
- package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +91 -0
- package/dist/components/custom/instrument-rail/index.d.ts +2 -0
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +8 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +0 -1
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
- package/dist/components/ui/slider/index.d.ts +19 -22
- 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 +7 -1
- package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +3 -1
- package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +13 -0
- package/dist/composables/color/index.d.ts +0 -12
- package/dist/composables/dark/index.d.ts +1 -1
- package/dist/composables/dark/useGlobalDark.d.ts +21 -1
- package/dist/composables/glass/useSpecularTracking.d.ts +3 -12
- package/dist/composables/motion/core/index.d.ts +1 -0
- package/dist/composables/motion/index.d.ts +0 -2
- package/dist/composables/motion/useRouteTransition.d.ts +42 -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 +225 -260
- package/dist/controls.js +14 -48
- package/dist/dark.d.ts +1 -1
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deck-progress.d.ts +1 -0
- package/dist/deck-progress.js +2 -0
- package/dist/dialog.js +2 -2
- package/dist/dock.js +345 -340
- package/dist/dockContext-BKeIMmNk.js +9 -0
- package/dist/{dropdown-menu-DVnQcA0E.js → dropdown-menu-D77jX6Df.js} +4 -7
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +79 -38
- package/dist/forms.js +2 -2
- package/dist/fourier-field.js +102 -137
- package/dist/fourier-math.js +2 -2
- package/dist/glass-panel.d.ts +1 -0
- package/dist/glass-panel.js +44 -0
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +209 -287
- package/dist/goo-blob.js +212 -243
- package/dist/handmark.d.ts +1 -0
- package/dist/handmark.js +662 -0
- package/dist/header-ribbon.d.ts +1 -0
- package/dist/header-ribbon.js +63 -0
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/instrument-rail.d.ts +1 -0
- package/dist/instrument-rail.js +2 -0
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +5 -5
- package/dist/{math-BUU9hHID.js → math-DTpRVC0e.js} +2 -18
- 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 +37 -38
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/{presets-1OhFpaIC.js → presets-BP_ALM0m.js} +14 -1
- package/dist/progress.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 +6 -6
- package/dist/select.js +1 -1
- package/dist/{sheet-ChSXcJpU.js → sheet-VZEtNFvO.js} +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-sfl8gFDD.js → slider-ClgpP7EB.js} +4 -4
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +2 -2
- package/dist/stacked-icons.js +6 -6
- package/dist/styles/animations.css +111 -15
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/layer-group.css +0 -22
- package/dist/styles/dock/layers.css +1 -11
- package/dist/styles/dock/morph.css +19 -95
- package/dist/styles/dock/shell.css +0 -12
- package/dist/styles/dock-controls.css +31 -28
- package/dist/styles/drawer.css +0 -2
- package/dist/styles/floating-panel.css +0 -2
- package/dist/styles/glass-refract.css +0 -2
- package/dist/styles/glass.css +1188 -31
- package/dist/styles/hover-popover.css +0 -2
- package/dist/styles/index.css +6 -24
- package/dist/styles/instrument-chassis.css +0 -4
- package/dist/styles/paper.css +68 -2
- package/dist/styles/theme.css +20 -13
- package/dist/styles/tokens.css +2360 -22
- package/dist/styles/typography.css +6 -18
- package/dist/styles/utilities.css +1291 -19
- package/dist/styles/view-transition.css +51 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +98 -98
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAnimatedNumber-DfVgP4te.js → useAnimatedNumber-Bcpy5Etf.js} +1 -1
- package/dist/{useConfiguratorState-BdQXh9ie.js → useConfiguratorState-DxAqksK6.js} +1 -1
- package/dist/useGlassRenderer-D7YGOYiM.js +69 -0
- package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-D1wgEqfW.js} +21 -2
- package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
- package/dist/useSpringMount-BJSHcLl3.js +113 -0
- package/dist/useViewTransition-DaN5Zrox.js +21 -0
- package/dist/vReveal-zUIQk-rJ.js +53 -0
- package/dist/watercolor-dot.js +2 -2
- package/package.json +57 -33
- package/src/styles/animations.css +111 -15
- package/src/styles/dock/layer-group.css +0 -22
- package/src/styles/dock/layers.css +1 -11
- package/src/styles/dock/morph.css +19 -95
- package/src/styles/dock/shell.css +0 -12
- package/src/styles/dock-controls.css +31 -28
- package/src/styles/glass.css +1188 -31
- package/src/styles/index.css +6 -24
- package/src/styles/paper.css +68 -2
- package/src/styles/theme.css +20 -13
- package/src/styles/tokens.css +2360 -22
- package/src/styles/typography.css +6 -18
- package/src/styles/utilities.css +1291 -19
- package/src/styles/view-transition.css +51 -0
- package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +0 -1
- package/dist/components/custom/constellation/composables/createConstellationField.d.ts +0 -35
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
- package/dist/components/custom/constellation/constants.d.ts +0 -36
- package/dist/components/custom/constellation/constellationDraw.d.ts +0 -18
- package/dist/components/custom/constellation/constellationInteraction.d.ts +0 -102
- package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +0 -15
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +0 -131
- package/dist/components/custom/dock/constants.d.ts +0 -23
- package/dist/components/custom/fourier-field/presets.d.ts +0 -54
- package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +0 -18
- package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +0 -41
- package/dist/components/custom/goo-blob/constants.d.ts +0 -52
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +0 -1
- package/dist/components/custom/tabs/constants.d.ts +0 -12
- package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
- package/dist/components/custom/underline/index.d.ts +0 -2
- package/dist/components/custom/underline/types.d.ts +0 -56
- package/dist/composables/motion/curves.d.ts +0 -48
- package/dist/composables/motion/springPresets.d.ts +0 -33
- package/dist/composables/motion/suite.d.ts +0 -2
- package/dist/dockContext-bho8B1A4.js +0 -17
- package/dist/motion-curves.d.ts +0 -1
- package/dist/motion-curves.js +0 -130
- package/dist/springPresets-aRSm-4_k.js +0 -40
- package/dist/styles/glass/a11y-fallback.css +0 -245
- package/dist/styles/glass/ladder.css +0 -304
- package/dist/styles/glass/material.css +0 -238
- package/dist/styles/glass/progress-rail.css +0 -78
- package/dist/styles/glass/squircle.css +0 -66
- package/dist/styles/glass/surfaces.css +0 -306
- package/dist/styles/tokens/color-radius.css +0 -250
- package/dist/styles/tokens/dark-arm.css +0 -194
- package/dist/styles/tokens/glass.css +0 -413
- package/dist/styles/tokens/light-dark.css +0 -158
- package/dist/styles/tokens/offsets-sizing.css +0 -406
- package/dist/styles/tokens/property-regs.css +0 -169
- package/dist/styles/tokens/scale-paper.css +0 -361
- package/dist/styles/tokens/scheme-motion.css +0 -334
- package/dist/styles/tokens/shadow.css +0 -132
- package/dist/styles/utilities/a11y-overrides.css +0 -140
- package/dist/styles/utilities/animate.css +0 -26
- package/dist/styles/utilities/base.css +0 -365
- package/dist/styles/utilities/btn.css +0 -399
- package/dist/styles/utilities/components.css +0 -317
- package/dist/underline.d.ts +0 -1
- package/dist/underline.js +0 -85
- package/dist/useSpecularTracking-DFK_fhpG.js +0 -32
- package/dist/useSpringMount-DXUzxBjV.js +0 -108
- package/dist/vReveal-CqaCz_mC.js +0 -44
- package/src/styles/glass/a11y-fallback.css +0 -245
- package/src/styles/glass/ladder.css +0 -304
- package/src/styles/glass/material.css +0 -238
- package/src/styles/glass/progress-rail.css +0 -78
- package/src/styles/glass/squircle.css +0 -66
- package/src/styles/glass/surfaces.css +0 -306
- package/src/styles/tokens/color-radius.css +0 -250
- package/src/styles/tokens/dark-arm.css +0 -194
- package/src/styles/tokens/glass.css +0 -413
- package/src/styles/tokens/light-dark.css +0 -158
- package/src/styles/tokens/offsets-sizing.css +0 -406
- package/src/styles/tokens/property-regs.css +0 -169
- package/src/styles/tokens/scale-paper.css +0 -361
- package/src/styles/tokens/scheme-motion.css +0 -334
- package/src/styles/tokens/shadow.css +0 -132
- package/src/styles/utilities/a11y-overrides.css +0 -140
- package/src/styles/utilities/animate.css +0 -26
- package/src/styles/utilities/base.css +0 -365
- package/src/styles/utilities/btn.css +0 -399
- package/src/styles/utilities/components.css +0 -317
- /package/dist/{CollapsibleContent-Drow5WkV.js → CollapsibleContent-CP9qF1v4.js} +0 -0
- /package/dist/{DialogFooter-DufLHi0y.js → DialogFooter-Gprw8H_A.js} +0 -0
- /package/dist/{IconTooltip-BrQ5p181.js → IconTooltip-Cus0fvK0.js} +0 -0
- /package/dist/{Input-B-F818RU.js → Input-xuDwALQR.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-DWghtRt7.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
- /package/dist/{compile-Ce_V55zi.js → compile-BOXjLUxu.js} +0 -0
- /package/dist/{constants-C8NMonuo.js → constants-yKeKnE84.js} +0 -0
- /package/dist/{prng-CjVgzjQT.js → prng-D27-B3tK.js} +0 -0
- /package/dist/{resolveCanvasColor-CRvVzOvP.js → resolveCanvasColor-BBiYfp8g.js} +0 -0
- /package/dist/{useCanvas2D-CSeH8h16.js → useCanvas2D-ClrQuZtp.js} +0 -0
- /package/dist/{useIntersectionPause-DAdVPVp4.js → useIntersectionPause-Cck5Uxk8.js} +0 -0
- /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
- /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-CyIYrndH.js} +0 -0
- /package/dist/{useScrollProgress-CcgmgMQt.js → useScrollProgress-CffFGLa5.js} +0 -0
- /package/dist/{useSortable-DnyGXKKY.js → useSortable-C8ReQ50P.js} +0 -0
- /package/dist/{useTextHighlight-B3b10W6r.js → useTextHighlight-CWEi25hf.js} +0 -0
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
/* glass/surfaces.css
|
|
2
|
-
The convenience-shorthand surfaces — .glass-card / .glass-pill / .glass-btn + the glass pill-input + the chromatic edge-dispersion rim fringe.
|
|
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
|
-
/* ── Convenience shorthands (tier + shape) ── */
|
|
8
|
-
|
|
9
|
-
/* Static surface utility — no hover lift, no transition.
|
|
10
|
-
Interactive cards live in <Card> (which owns its own hover composition)
|
|
11
|
-
or in components that explicitly opt into a hover variant. */
|
|
12
|
-
.glass-card {
|
|
13
|
-
/* Focus-elevation rungs (AQ.W3 §W3.1a) — identity = at-rest paint; the
|
|
14
|
-
`:has(:focus-visible)` rule redefines them (one source, shared with
|
|
15
|
-
the fallback). */
|
|
16
|
-
--card-focus-shadow: var(--shadow-card);
|
|
17
|
-
--card-focus-border: var(--glass-border-quiet);
|
|
18
|
-
position: relative;
|
|
19
|
-
background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
|
|
20
|
-
backdrop-filter: var(--glass-blur-quiet);
|
|
21
|
-
border: 1px solid var(--card-focus-border);
|
|
22
|
-
border-radius: var(--radius-card);
|
|
23
|
-
box-shadow: var(--glass-material-rim), var(--card-focus-shadow);
|
|
24
|
-
/* AY.W-A11Y-PERF O-4 — upgrade `layout style` → include `paint` so the
|
|
25
|
-
maximal-glass nested backdrop-filter sample (a glass Button in this card)
|
|
26
|
-
does not escape the card box (the standard nested-backdrop-cost mitigation;
|
|
27
|
-
`contain: paint` clips DESCENDANTS only — the card's own rim/drop-shadow is
|
|
28
|
-
NOT clipped, device-verified). */
|
|
29
|
-
contain: layout style paint;
|
|
30
|
-
transition:
|
|
31
|
-
box-shadow var(--duration-fast) var(--ease-standard),
|
|
32
|
-
border-color var(--duration-fast) var(--ease-standard);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/* Elevate one rung on descendant KEYBOARD focus (`:focus-visible`, not
|
|
36
|
-
pointer). Scoped to `.glass-card`. `:has()` Baseline Widely; the
|
|
37
|
-
`@supports not selector(:has(*))` class fallback (below) ships anyway
|
|
38
|
-
(focus-elevation is UX-critical — child-state-styling MANDATORY clause). */
|
|
39
|
-
.glass-card:has(:focus-visible) {
|
|
40
|
-
--card-focus-shadow: var(--shadow-md);
|
|
41
|
-
--card-focus-border: var(--glass-border-floating);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* ── Glassmorphic circular icon button ── */
|
|
45
|
-
|
|
46
|
-
.glass-btn {
|
|
47
|
-
@apply flex items-center justify-center cursor-pointer;
|
|
48
|
-
|
|
49
|
-
/* Individual-transform identity base (AQ.W3 §W3.2) — `scale: 1` at rest
|
|
50
|
-
mints the stacking context once so the hover/press scale below does
|
|
51
|
-
not flicker it into being (the z-index/anchor hazard). */
|
|
52
|
-
scale: 1;
|
|
53
|
-
width: var(--size-icon-btn);
|
|
54
|
-
height: var(--size-icon-btn);
|
|
55
|
-
border-radius: var(--radius-pill);
|
|
56
|
-
border: 1.5px solid var(--glass-border-wash);
|
|
57
|
-
background: var(--glass-bg-wash);
|
|
58
|
-
backdrop-filter: var(--glass-blur-wash);
|
|
59
|
-
/* AY.W-A11Y-PERF O-4 — paint containment so the glass button's own
|
|
60
|
-
backdrop-filter sample stays inside the box when it nests in a glass card /
|
|
61
|
-
dialog / dock (the nested-backdrop-cost mitigation; clips descendants only,
|
|
62
|
-
the button's own rim/shadow is unaffected — device-verified). */
|
|
63
|
-
contain: paint;
|
|
64
|
-
color: var(--muted-foreground);
|
|
65
|
-
/* AX.W52 §6 doctrine — the surface legs ride the bezier `--ease-standard`;
|
|
66
|
-
the `scale` leg is reconciled onto `--spring-smooth` (was `--spring-snappy`)
|
|
67
|
-
so the icon-button hover settles on the SAME ONE register as `.btn-pill` /
|
|
68
|
-
`.tap-squish` / `btn-interactive` (the gate asserts one scale register
|
|
69
|
-
across all four). The press still reads crisp — `--spring-smooth` ζ=0.86
|
|
70
|
-
settles fast without a visible bounce. */
|
|
71
|
-
transition:
|
|
72
|
-
background var(--duration-fast) var(--ease-standard),
|
|
73
|
-
border-color var(--duration-fast) var(--ease-standard),
|
|
74
|
-
color var(--duration-fast) var(--ease-standard),
|
|
75
|
-
scale var(--duration-normal) var(--spring-smooth);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.glass-btn:hover:not(:disabled) {
|
|
79
|
-
background: color-mix(in srgb, var(--background) 85%, transparent);
|
|
80
|
-
border-color: var(--surface-tint-22);
|
|
81
|
-
color: var(--foreground);
|
|
82
|
-
scale: var(--scale-hover);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.glass-btn:active:not(:disabled) {
|
|
86
|
-
scale: var(--scale-press);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.glass-btn:focus-visible {
|
|
90
|
-
outline: none;
|
|
91
|
-
box-shadow: var(--focus-ring-shadow);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.glass-btn:disabled {
|
|
95
|
-
opacity: 0.35;
|
|
96
|
-
cursor: not-allowed;
|
|
97
|
-
pointer-events: none;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.glass-btn.is-active,
|
|
101
|
-
.glass-btn[aria-pressed="true"] {
|
|
102
|
-
background: var(--surface-tint-10);
|
|
103
|
-
border-color: var(--surface-tint-25);
|
|
104
|
-
color: var(--foreground);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/* ── Pill button base ─────────────────────────── */
|
|
108
|
-
.btn-pill {
|
|
109
|
-
@apply inline-flex items-center justify-center cursor-pointer font-medium border-none;
|
|
110
|
-
|
|
111
|
-
/* AX.W52 §6 identity base — `scale: 1` at rest so the hover/press scale
|
|
112
|
-
below animates the `scale` longhand (not `transform`) coherently and
|
|
113
|
-
does not flicker the stacking context into being (AQ.W3 §W3.2). */
|
|
114
|
-
scale: 1;
|
|
115
|
-
/* AX.W51 D18 — the pill GEOMETRY rides the ONE `--ui-scale` comfort axis.
|
|
116
|
-
gap / padding scale by the master scalar; the font reads the
|
|
117
|
-
`--control-text` register (`calc(--type-small * --ui-scale)`, the same
|
|
118
|
-
`text-sm` register the Button CVA paints), so a bare `.btn-pill` consumer
|
|
119
|
-
and a `<Button>` agree on the control font, and ONE `--ui-scale` override
|
|
120
|
-
grows the pill's height (via padding) + gap + font in lockstep. Desktop
|
|
121
|
-
default is the identity (scale 1 → the prior proportion). */
|
|
122
|
-
gap: calc(0.375rem * var(--ui-scale));
|
|
123
|
-
border-radius: var(--radius-pill);
|
|
124
|
-
padding: calc(0.5rem * var(--ui-scale)) calc(1rem * var(--ui-scale));
|
|
125
|
-
font-size: var(--control-text);
|
|
126
|
-
/* AX.W52 — the ONE coherent button transition (RED witness 5/6). The
|
|
127
|
-
SURFACE legs (bg/border/box-shadow/color/opacity) ride the bezier
|
|
128
|
-
`--ease-standard` (a colour cross-fade reads as a wobble on a spring);
|
|
129
|
-
the TRANSFORM leg (`scale`) rides `--spring-smooth` (the sub-perceptual
|
|
130
|
-
settle), so the hover lift + the surface cross-fade read as ONE glide.
|
|
131
|
-
The DEAD `transform` leg is retired — the variants animate the `scale`
|
|
132
|
-
longhand. CRITICAL: `.tap-squish` (composed alongside on the button
|
|
133
|
-
base, utilities.css) ALSO lists this full coherent set, so neither
|
|
134
|
-
class's `transition` shorthand can clobber the other down to a
|
|
135
|
-
scale-only animation — the cascade bug that left every button
|
|
136
|
-
transitioning ONLY `scale` (the live-readback RED, RED witness 5). The
|
|
137
|
-
doctrine: surface-props→bezier, transform→spring (tokens.css §2). */
|
|
138
|
-
transition:
|
|
139
|
-
background-color var(--duration-fast) var(--ease-standard),
|
|
140
|
-
border-color var(--duration-fast) var(--ease-standard),
|
|
141
|
-
box-shadow var(--duration-fast) var(--ease-standard),
|
|
142
|
-
color var(--duration-fast) var(--ease-standard),
|
|
143
|
-
opacity var(--duration-fast) var(--ease-standard),
|
|
144
|
-
scale var(--duration-fast) var(--spring-smooth);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.btn-pill > * {
|
|
148
|
-
@apply flex-shrink-0;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
.btn-pill:disabled {
|
|
153
|
-
opacity: var(--opacity-disabled);
|
|
154
|
-
cursor: not-allowed;
|
|
155
|
-
pointer-events: none;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/* ── Glass-button backdrop ─────────────────────────────────────────────
|
|
159
|
-
AX.W52 — the `glass`/`glass-wash` Button variants compose `.glass-wash`,
|
|
160
|
-
which resolves `--glass-blur-wash` = `blur(1px)` — a sub-perceptual
|
|
161
|
-
diffusion authored for a small detail TILE, not a button the user reads
|
|
162
|
-
as "glass" (the live readback found the glass variants at a negligible
|
|
163
|
-
1px). A hero control wants a real glass blur. `.btn-glass` re-points the
|
|
164
|
-
backdrop at `--glass-blur-btn` (the `quiet`-tier 10px radius + the gentle
|
|
165
|
-
`saturate(1.05) brightness(1.02)` light-concentration), so the glass
|
|
166
|
-
button variants actually read as liquid glass while the wash TILE tier
|
|
167
|
-
keeps its 1px untouched. Declares the UNPREFIXED `backdrop-filter` ONLY —
|
|
168
|
-
Lightning CSS emits the `-webkit-` companion per the single-source
|
|
169
|
-
authorship discipline above (hand-authoring both forms makes Lightning
|
|
170
|
-
dedup-and-keep-prefixed, which modern Chromium then drops). */
|
|
171
|
-
.btn-glass {
|
|
172
|
-
backdrop-filter: var(--glass-blur-btn);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/* ── Pill input ───────────────────────────────── */
|
|
176
|
-
.input-pill {
|
|
177
|
-
@apply flex w-full;
|
|
178
|
-
|
|
179
|
-
/* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
|
|
180
|
-
height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
|
|
181
|
-
--control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
|
|
182
|
-
font reads `--control-text`, the inline padding scales — so ONE override
|
|
183
|
-
grows the field's height + padding + font in lockstep. Desktop default is
|
|
184
|
-
the identity. */
|
|
185
|
-
height: var(--control-h-md);
|
|
186
|
-
border-radius: var(--radius-pill);
|
|
187
|
-
/* AW.W13 — the resting field edge reads as an enclosed control at rest
|
|
188
|
-
(~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
|
|
189
|
-
`:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
|
|
190
|
-
destructive ring below still win by order + specificity.
|
|
191
|
-
AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
|
|
192
|
-
border seam (`--glass-border-floating`, the matching 15%α rung) so the
|
|
193
|
-
pill is ONE glass model with the rest of the ladder, not a divergent
|
|
194
|
-
tint axis. */
|
|
195
|
-
border: 1.5px solid var(--glass-border-floating);
|
|
196
|
-
background: var(--glass-bg-quiet);
|
|
197
|
-
/* AX.W54 — the pill reads as REAL glass: the quiet-tier 10px blur (the
|
|
198
|
-
same `--glass-blur-quiet` its `--glass-bg-quiet` background pairs with),
|
|
199
|
-
not the sub-perceptual `blur(1px)` wash it carried — and the
|
|
200
|
-
`--glass-level` knob now clarifies it in lockstep with every surface. */
|
|
201
|
-
backdrop-filter: var(--glass-blur-quiet);
|
|
202
|
-
padding: 0 calc(1rem * var(--ui-scale));
|
|
203
|
-
font-size: var(--control-text);
|
|
204
|
-
color: var(--foreground);
|
|
205
|
-
transition:
|
|
206
|
-
background-color var(--duration-fast) var(--ease-standard),
|
|
207
|
-
border-color var(--duration-fast) var(--ease-standard),
|
|
208
|
-
box-shadow var(--duration-fast) var(--ease-standard),
|
|
209
|
-
color var(--duration-fast) var(--ease-standard),
|
|
210
|
-
opacity var(--duration-fast) var(--ease-standard);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
.input-pill::placeholder {
|
|
214
|
-
color: var(--surface-tint-35);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
|
|
218
|
-
accent ring on a mouse click); `:focus-visible` matches the
|
|
219
|
-
`.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
|
|
220
|
-
the `:user-invalid` rungs so an invalid focused field shows destructive,
|
|
221
|
-
not accent (the `:user-invalid:focus-visible` rule below wins by order +
|
|
222
|
-
specificity). `:focus-visible` Baseline Widely — no fallback. */
|
|
223
|
-
.input-pill:focus-visible {
|
|
224
|
-
outline: none;
|
|
225
|
-
border-color: var(--color-accent-opaque, var(--ring));
|
|
226
|
-
box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
|
|
230
|
-
The forgiving `:where(:user-invalid, .user-invalid-fallback,
|
|
231
|
-
[aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
|
|
232
|
-
native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
|
|
233
|
-
fallback class for engines without `:user-invalid` (css §3.2; NOT a
|
|
234
|
-
live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
|
|
235
|
-
imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
|
|
236
|
-
serves APP-DRIVEN validity — a custom key match, an async server check —
|
|
237
|
-
where there is no native constraint to trip `:user-invalid`, so the app
|
|
238
|
-
sets the ARIA attribute and the library's own ring paints with no
|
|
239
|
-
`:deep()` re-paint at the consumer. The destructive/success tints reuse
|
|
240
|
-
the semantic tokens via `color-mix` per the house pattern (W2). Non-color
|
|
241
|
-
reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
|
|
242
|
-
asterisk — the border/bg shift is the supplementary cue, never the sole
|
|
243
|
-
one. `:user-valid` is intentionally subtle (border only, no bg fill) so
|
|
244
|
-
a long valid form is not a wall of green. */
|
|
245
|
-
.input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
|
|
246
|
-
border-color: var(--destructive);
|
|
247
|
-
background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
|
|
248
|
-
}
|
|
249
|
-
.input-pill:where(:user-valid, .user-valid-fallback) {
|
|
250
|
-
border-color: var(--success);
|
|
251
|
-
}
|
|
252
|
-
/* Invalid + keyboard-focused → destructive ring (overrides the accent
|
|
253
|
-
`:focus-visible` ring above by order + the extra invalid compound). The
|
|
254
|
-
`[aria-invalid]` arm rides the same widened group so an app-driven
|
|
255
|
-
invalid field shows the destructive ring on focus too. */
|
|
256
|
-
.input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
|
|
257
|
-
border-color: var(--destructive);
|
|
258
|
-
box-shadow: 0 0 0 var(--focus-ring-width)
|
|
259
|
-
color-mix(in srgb, var(--destructive) 35%, transparent);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
|
|
263
|
-
`autosize` prop → `[data-autosize]`). The textarea grows vertically with
|
|
264
|
-
content between a 3-line floor and a token-driven ceiling, then scrolls.
|
|
265
|
-
`field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
|
|
266
|
-
engine the declaration is ignored and the element keeps the
|
|
267
|
-
`min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
|
|
268
|
-
no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
|
|
269
|
-
the unchanged no-op fallback. */
|
|
270
|
-
.input-pill[data-autosize] {
|
|
271
|
-
field-sizing: content;
|
|
272
|
-
width: 100%;
|
|
273
|
-
min-block-size: 3lh;
|
|
274
|
-
max-block-size: var(--textarea-autosize-max, 12lh);
|
|
275
|
-
resize: vertical;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
.input-pill:disabled {
|
|
279
|
-
opacity: 0.5;
|
|
280
|
-
cursor: not-allowed;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
|
|
284
|
-
The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
|
|
285
|
-
surface; its 8%α `--glass-border-wash` field edge vanished on cream just
|
|
286
|
-
like the input pill, so the same `--surface-tint-15` lift makes the
|
|
287
|
-
trigger read as an enclosed control at rest. Scoped to the combobox role
|
|
288
|
-
so the lift reaches ONLY the Select trigger, not every `.glass-wash`
|
|
289
|
-
surface. */
|
|
290
|
-
.glass-wash[role="combobox"] {
|
|
291
|
-
border-color: var(--surface-tint-15);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/* ── AW.W23 — chromatic edge dispersion (the polished-glass rim fringe) ──
|
|
295
|
-
An opt-in `.glass-chromatic` composes the warm/cool oklab fringe OVER the
|
|
296
|
-
W22 uniform rim (it does NOT replace it — the rim still rides each rung's
|
|
297
|
-
box-shadow). The fringe is a transparency garnish, so it composes ONLY
|
|
298
|
-
under `prefers-reduced-transparency: no-preference` and drops under
|
|
299
|
-
`reduce` (handled by the bracket below). The fringe lands as a dedicated
|
|
300
|
-
inset box-shadow pair on the material surface so it adds onto the rim. */
|
|
301
|
-
@media (prefers-reduced-transparency: no-preference) {
|
|
302
|
-
.glass-chromatic {
|
|
303
|
-
box-shadow: var(--glass-edge-dispersion), var(--glass-material-rim);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
/* tokens/color-radius.css
|
|
2
|
-
§4 radius reference · §5 warm-cream/muted-black palette · §5c constellation · §6 section palette · §6b viz basis.
|
|
3
|
-
Carved from the tokens.css cascade root; @import-ed by tokens.css in
|
|
4
|
-
cascade order. Same :root cascade context as its siblings. */
|
|
5
|
-
:root {
|
|
6
|
-
/* §4 BORDER RADIUS — authored ONCE in theme.css's leading plain @theme
|
|
7
|
-
block (AV.W16 TW1). A plain @theme mints each `--radius-*` as a global
|
|
8
|
-
:root var, so the `var(--radius-card)` recipe reads across this file
|
|
9
|
-
resolve from that source. The prior §4 twin here doubled the override
|
|
10
|
-
surface (the anti-pattern the @theme-inline migration kills) — excised;
|
|
11
|
-
retune the scale at theme.css. */
|
|
12
|
-
|
|
13
|
-
/* ═══════════════════════════════════════════════
|
|
14
|
-
§5 COLOR PALETTE — Warm cream / muted black
|
|
15
|
-
|
|
16
|
-
Neutral scale: perceptually-uniform L* steps at hue 48 (warm paper).
|
|
17
|
-
Each pair visibly distinct at 20px viewing distance.
|
|
18
|
-
0 → 1 : 3 L (page → soft field)
|
|
19
|
-
1 → 2 : 5 L (soft field → chip / tab-inactive)
|
|
20
|
-
2 → 3 : 8 L (chip → hover / highlight)
|
|
21
|
-
3 → 4 : 12 L (highlight → subtle border)
|
|
22
|
-
4 → 5 : 25 L (border → muted text, contrast jump)
|
|
23
|
-
5 → 6 : 10 L (muted text → strong-muted text, secondary register)
|
|
24
|
-
|
|
25
|
-
Semantic aliases re-point into the scale — no back-compat shims.
|
|
26
|
-
═══════════════════════════════════════════════ */
|
|
27
|
-
--neutral-0: hsl(48 12% 98%); /* L 98 — page surface */
|
|
28
|
-
--neutral-1: hsl(48 10% 95%); /* L 95 — soft field bg */
|
|
29
|
-
--neutral-2: hsl(48 9% 90%); /* L 90 — chip / tab-inactive bg */
|
|
30
|
-
--neutral-3: hsl(48 8% 82%); /* L 82 — hover / highlight bg */
|
|
31
|
-
--neutral-4: hsl(48 7% 70%); /* L 70 — subtle border */
|
|
32
|
-
--neutral-5: hsl(48 6% 40%); /* L 40 — muted text (WCAG AA: 5.23:1 vs L98 page / 4.91:1 vs L95 muted) */
|
|
33
|
-
/* W7-α' (AK-FD1) — strong-muted text rung. One principled ladder step
|
|
34
|
-
(10 L darker, the 5→6 cadence above) past muted text toward
|
|
35
|
-
--foreground (L10). Sits at the 1/3 point of the L40→L10 muted→primary
|
|
36
|
-
gap: legible secondary text that reads less-faint than muted but not as
|
|
37
|
-
assertive as primary. By-COLOUR per the canon (a neutral step, not an
|
|
38
|
-
alpha mute); hue held at 48, sat nudged 6→7 toward --foreground's 10.
|
|
39
|
-
WCAG AA: 7.79:1 vs L98 page / 7.31:1 vs L95 muted (cf. neutral-5's
|
|
40
|
-
5.23:1) — comfortably above the 4.5:1 body floor. */
|
|
41
|
-
--neutral-6: hsl(48 7% 30%); /* L 30 — strong-muted text (secondary register) */
|
|
42
|
-
|
|
43
|
-
--background: var(--neutral-0);
|
|
44
|
-
--foreground: hsl(24 10% 10%);
|
|
45
|
-
--card: var(--neutral-0);
|
|
46
|
-
--card-foreground: var(--foreground);
|
|
47
|
-
--popover: var(--neutral-0);
|
|
48
|
-
--popover-foreground: var(--foreground);
|
|
49
|
-
|
|
50
|
-
/* R0G-5 (AO.W4) — warm-neutral public-data panel surface. One warmth step
|
|
51
|
-
off --card (hue 44 vs 48, +4 sat, −2 L) so a consumer's aurora-OFF
|
|
52
|
-
/dashboard/* surfaces read with the admin canon's warm-neutral chrome
|
|
53
|
-
instead of the colder bare card. Opaque surface (the --card family), not
|
|
54
|
-
a --surface-tint-* overlay. Consumer applies on /dashboard/* only. */
|
|
55
|
-
--surface-public-data-panel: hsl(44 16% 96%);
|
|
56
|
-
|
|
57
|
-
--muted: var(--neutral-1);
|
|
58
|
-
--muted-foreground: var(--neutral-5);
|
|
59
|
-
/* W7-α' (AK-FD1) — one rung less-faint than --muted-foreground for
|
|
60
|
-
secondary text that reads too-faint at the muted rung over resting
|
|
61
|
-
glass (CardDescription). By-colour neutral step, not alpha. */
|
|
62
|
-
--muted-foreground-strong: var(--neutral-6);
|
|
63
|
-
--secondary: var(--neutral-2);
|
|
64
|
-
--secondary-foreground: var(--foreground);
|
|
65
|
-
--accent: var(--neutral-3);
|
|
66
|
-
--accent-foreground: var(--foreground);
|
|
67
|
-
|
|
68
|
-
--border: var(--neutral-4);
|
|
69
|
-
--input: var(--neutral-4);
|
|
70
|
-
|
|
71
|
-
--primary: hsl(24 10% 10%);
|
|
72
|
-
--primary-foreground: var(--neutral-0);
|
|
73
|
-
--destructive: hsl(0 72% 50%);
|
|
74
|
-
--destructive-foreground: var(--neutral-0);
|
|
75
|
-
--ring: hsl(24 10% 10%);
|
|
76
|
-
--shadow: hsl(24 10% 10%);
|
|
77
|
-
--shadow-color: var(--foreground);
|
|
78
|
-
|
|
79
|
-
/* AQ.W2 §4 — native-control accent. `accent-color` is an inherited
|
|
80
|
-
built-in <color>, so per the §2b resolve-late discipline it reads a
|
|
81
|
-
dedicated UNREGISTERED token set per-mode (NOT light-dark()) and is
|
|
82
|
-
re-specified inside `.dark` — otherwise the accent freezes to the
|
|
83
|
-
light shade at the cascade root. Light: muted-black checkmarks /
|
|
84
|
-
sliders on warm cream. Dark arm (`.dark`) reads `--ring` (mid-tone),
|
|
85
|
-
not the near-white dark `--primary`, so a checkbox's white checkmark
|
|
86
|
-
keeps contrast headroom (accent-color.md §5). */
|
|
87
|
-
--accent-color: var(--primary);
|
|
88
|
-
|
|
89
|
-
/* Border hairline at whisper alpha — the canonical rung for
|
|
90
|
-
section-spine / panel-edge hairlines a consumer wants to read as an
|
|
91
|
-
iOS-26 whisper rather than a hard rule. Consumers compose this named
|
|
92
|
-
rung instead of hand-mixing `color-mix(... var(--border) ...)`
|
|
93
|
-
per-site (token-first). 45% is the canonical whisper. Auto-dark via
|
|
94
|
-
`--border` (which is `var(--neutral-4)`, light-dark()-resolved). */
|
|
95
|
-
--border-soft: color-mix(in srgb, var(--border) 45%, transparent);
|
|
96
|
-
|
|
97
|
-
/* AQ.W3 §W3.4 — tokenized scrollbar thumb + track. Minted in the color
|
|
98
|
-
block so the `scrollbar-color` / `::-webkit-scrollbar-thumb` rungs read a
|
|
99
|
-
single source. Auto-dark via `--muted-foreground` (light-dark()-resolved,
|
|
100
|
-
AQ.W2) — the OS scrollbar chrome also honors `color-scheme: dark`, so the
|
|
101
|
-
custom thumb tracks the dark surface without an explicit dark mirror. The
|
|
102
|
-
thumb α (25%) matches the prior inline `.scrollbar-thin` value byte-for-
|
|
103
|
-
byte; `transparent` track keeps the scroll-pane glass reading through. */
|
|
104
|
-
--scrollbar-thumb: color-mix(in srgb, var(--muted-foreground) 25%, transparent);
|
|
105
|
-
--scrollbar-track: transparent;
|
|
106
|
-
|
|
107
|
-
/* Foreground-tint rungs — canonical handles for the 36+ raw
|
|
108
|
-
`color-mix(in srgb, var(--foreground) N%, transparent)` sites surveyed
|
|
109
|
-
in R5 axis-1. Each rung's α is named in its key (4 → 4%, 22 → 22%).
|
|
110
|
-
Auto-dark via --foreground; no explicit dark mirrors needed. R5
|
|
111
|
-
vocab.γ gap row 1. Consumers land in W2.B + W3.C. */
|
|
112
|
-
--surface-tint-4: color-mix(in srgb, var(--foreground) 4%, transparent);
|
|
113
|
-
--surface-tint-6: color-mix(in srgb, var(--foreground) 6%, transparent);
|
|
114
|
-
--surface-tint-8: color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
115
|
-
--surface-tint-10: color-mix(in srgb, var(--foreground) 10%, transparent);
|
|
116
|
-
--surface-tint-12: color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
117
|
-
--surface-tint-15: color-mix(in srgb, var(--foreground) 15%, transparent);
|
|
118
|
-
--surface-tint-18: color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
119
|
-
--surface-tint-22: color-mix(in srgb, var(--foreground) 22%, transparent);
|
|
120
|
-
--surface-tint-25: color-mix(in srgb, var(--foreground) 25%, transparent);
|
|
121
|
-
/* Higher-α rungs added at L.W5 (absorbs K R4 — 4 P1 sites whose
|
|
122
|
-
literal `color-mix(in srgb, var(--foreground) {35,40,70}%, transparent)`
|
|
123
|
-
expressions bypassed the canonical token family). See `docs/tranches/L/
|
|
124
|
-
audit/W5-A-doc-cohort-proof.md`. */
|
|
125
|
-
--surface-tint-35: color-mix(in srgb, var(--foreground) 35%, transparent);
|
|
126
|
-
--surface-tint-40: color-mix(in srgb, var(--foreground) 40%, transparent);
|
|
127
|
-
--surface-tint-70: color-mix(in srgb, var(--foreground) 70%, transparent);
|
|
128
|
-
|
|
129
|
-
/* Muted-tinted surface rungs — canonical handles for the 9 raw
|
|
130
|
-
`color-mix(in srgb, var(--muted) N%, transparent)` sites in
|
|
131
|
-
FuzzySearch / SegmentedTabs / Slider scoped CSS. (AI.W5-δ — the
|
|
132
|
-
ProgressiveSidebar consumer retired at the wave; the canonical token
|
|
133
|
-
rung lives on for the remaining consumers.) Auto-dark via --muted.
|
|
134
|
-
R5 vocab.γ axis-1 row. */
|
|
135
|
-
--muted-soft: color-mix(in srgb, var(--muted) 30%, transparent);
|
|
136
|
-
--muted-medium: color-mix(in srgb, var(--muted) 50%, transparent);
|
|
137
|
-
|
|
138
|
-
/* ═══════════════════════════════════════════════
|
|
139
|
-
§5c CONSTELLATION — Canvas2D proximity-graph lattice (AX.W17)
|
|
140
|
-
|
|
141
|
-
The H.W4 legibility intelligence promoted from the slides deck to
|
|
142
|
-
LIBRARY identity: the node tones, the edge hairline color, the per-mode
|
|
143
|
-
edge-alpha multipliers, and the field-yields-to-type translucency knob.
|
|
144
|
-
Only `--constellation-accent` (the anomaly tint) stays a CONSUMER preset
|
|
145
|
-
(slides aliases it to `--ncsu-red`); the library ships a neutral default.
|
|
146
|
-
|
|
147
|
-
PLAIN-hsl LITERALS, per arm — NEVER `light-dark()` and NEVER a
|
|
148
|
-
`var(--neutral-*)`/`var(--foreground)`/`var(--border)`/`var(--card)`
|
|
149
|
-
alias. Canvas2D silently REJECTS a `light-dark()` value into
|
|
150
|
-
`strokeStyle`/`fillStyle` (the W30 86.3%-red-splatter cardinal defect),
|
|
151
|
-
and the rejection is identical whether the value is a literal
|
|
152
|
-
`light-dark(…)` OR a `var()` that RESOLVES to one — so the constellation
|
|
153
|
-
tokens are plain-hsl LEAVES, the `:root` vs `.dark` cascade carrying two
|
|
154
|
-
literals. `proof:constellation-tokens` clause (c) machine-locks this
|
|
155
|
-
(the no-`light-dark(`-substring NOR transitive-`var()` static assertion).
|
|
156
|
-
═══════════════════════════════════════════════ */
|
|
157
|
-
/* Node tones — readable on the warm-cream ground. The two-tone split (the
|
|
158
|
-
`dim` half rides `-node-dim`). Warm-grey ink, NOT a neutral-ladder alias. */
|
|
159
|
-
--constellation-node: hsl(36 8% 46%);
|
|
160
|
-
--constellation-node-dim: hsl(36 8% 60%);
|
|
161
|
-
/* Edge hairline stroke — warm near-black on cream (the plain-hsl complement
|
|
162
|
-
the slides deck reads to fix the `--foreground` light-dark() leak). */
|
|
163
|
-
--constellation-line: hsl(24 14% 14%);
|
|
164
|
-
/* Anomaly tint — NEUTRAL library default (a desaturated warm accent). The
|
|
165
|
-
consumer overrides this (slides → `--ncsu-red`); the library does NOT
|
|
166
|
-
bake a brand hue. This is the single consumer-preset boundary. */
|
|
167
|
-
--constellation-accent: hsl(18 58% 46%);
|
|
168
|
-
/* Edge-alpha multipliers — replace the magic `0.17` hairline / pointer-web
|
|
169
|
-
literals. The cream ground lifts the node tones, so the field can recede;
|
|
170
|
-
the focus-proximity edge reads a touch stronger. */
|
|
171
|
-
--constellation-edge-alpha: 0.22;
|
|
172
|
-
--constellation-edge-focus-alpha: 0.34;
|
|
173
|
-
/* §7 field-yields-to-type translucency knob — the legible-but-RECESSIVE
|
|
174
|
-
MIDPOINT, NOT max-legibility. On cream the node tones already read, so the
|
|
175
|
-
field recedes further: BELOW the slides 0.92 max-legibility reference. */
|
|
176
|
-
--constellation-alpha: 0.80;
|
|
177
|
-
|
|
178
|
-
/* §interaction — the warp spring + the gravity-well tunings (NUMERIC, NOT
|
|
179
|
-
colors — read ONCE on mount via parseFloat, never reach a Canvas2D
|
|
180
|
-
fillStyle, so immune to the W30 light-dark()/Canvas2D leak; AY.W-CON2).
|
|
181
|
-
Mode-INVARIANT, declared ONCE in :root (the .dark arm needs no numeric
|
|
182
|
-
re-declare — a per-mode value SPLIT is what proof:constellation-tokens
|
|
183
|
-
clause (c) flags, and these tunings are identical in both modes).
|
|
184
|
-
`--constellation-warp-response` is the keyframes.js ANGULAR PERIOD (the
|
|
185
|
-
SwiftUI .spring(response:) axis), NOT a settle-duration — at ζ=1 the 2%
|
|
186
|
-
settle lands at t₂ ≈ 5.83/ω₀ ≈ 0.93·response (the engine keeps the
|
|
187
|
-
keyframes.js ω₀ = 2π/response convention, mints no second ω). */
|
|
188
|
-
--constellation-warp-response: 0.55; /* s — keyframes.js angular period (NOT a settle) */
|
|
189
|
-
--constellation-warp-zeta: 1.0; /* critically damped — a focal mark must NOT ring */
|
|
190
|
-
--constellation-well-gain: 14000; /* inverse-square force scale (the held-pull gain) */
|
|
191
|
-
--constellation-well-reach: 340; /* base-width px — the well's reach (k-scaled at step) */
|
|
192
|
-
--constellation-well-ramp: 4.0; /* 1/s — the ARM rate (≈0.25s bloom; release is the fixed brisk WELL_RELEASE_RAMP — the field-cools invariant, not consumer-tunable) */
|
|
193
|
-
--constellation-well-max-speed: 4.0; /* base-width px/frame cap — the no-slingshot clamp */
|
|
194
|
-
--constellation-well-hold-ms: 140; /* ms hold before the well arms */
|
|
195
|
-
--constellation-wander-idle: 8000; /* ms — min idle between auto re-targets (the W-CON1 drift cadence) */
|
|
196
|
-
--constellation-wander-jitter: 8000; /* ms — random extra idle per cadence (so the rhythm is not metronomic) */
|
|
197
|
-
|
|
198
|
-
/* ═══════════════════════════════════════════════
|
|
199
|
-
§6 SECTION PALETTE — 13-stop jewel tones (light)
|
|
200
|
-
═══════════════════════════════════════════════ */
|
|
201
|
-
/* AV.W16 TW2 — oklch ramp (perceptually-even L; hue preserved from the
|
|
202
|
-
prior hsl() cadence). Categorical jewel tones — distinct hues, not a
|
|
203
|
-
monotone scale. Authored as oklch pairs with the .dark mirror. */
|
|
204
|
-
--section-color-0: oklch(0.552 0.192 359.8); /* rose */
|
|
205
|
-
--section-color-1: oklch(0.502 0.165 305.9); /* purple */
|
|
206
|
-
--section-color-2: oklch(0.484 0.163 265.5); /* indigo */
|
|
207
|
-
--section-color-3: oklch(0.542 0.089 222.8); /* teal-cyan */
|
|
208
|
-
--section-color-4: oklch(0.551 0.088 171.1); /* forest */
|
|
209
|
-
--section-color-5: oklch(0.623 0.124 69.6); /* amber */
|
|
210
|
-
--section-color-6: oklch(0.579 0.201 30.4); /* tomato-red */
|
|
211
|
-
--section-color-7: oklch(0.532 0.180 317.5); /* violet */
|
|
212
|
-
--section-color-8: oklch(0.520 0.176 8.4); /* ruby */
|
|
213
|
-
--section-color-9: oklch(0.492 0.038 239.6); /* slate-blue */
|
|
214
|
-
--section-color-10: oklch(0.556 0.103 128.8); /* olive */
|
|
215
|
-
--section-color-11: oklch(0.601 0.092 208.0); /* ocean */
|
|
216
|
-
--section-color-12: oklch(0.513 0.163 291.9); /* periwinkle */
|
|
217
|
-
|
|
218
|
-
/* Accent colors */
|
|
219
|
-
--accent-pink: oklch(0.613 0.197 353.8);
|
|
220
|
-
--section-heading: oklch(0.545 0.189 352.8);
|
|
221
|
-
--accent-red: oklch(0.574 0.216 27.5);
|
|
222
|
-
|
|
223
|
-
/* ═══════════════════════════════════════════════
|
|
224
|
-
§6b VIZ BASIS — core brand hues
|
|
225
|
-
═══════════════════════════════════════════════ */
|
|
226
|
-
--viz-fourier: oklch(0.579 0.201 30.4);
|
|
227
|
-
--viz-chebyshev: oklch(0.484 0.163 265.5);
|
|
228
|
-
--viz-legendre: oklch(0.532 0.180 317.5);
|
|
229
|
-
--viz-amber: var(--section-color-5);
|
|
230
|
-
--viz-green: var(--section-color-4);
|
|
231
|
-
|
|
232
|
-
/* Semantic UI accents */
|
|
233
|
-
--tier-featured: oklch(0.841 0.173 84.2);
|
|
234
|
-
--tier-saved: oklch(0.676 0.176 252.3);
|
|
235
|
-
--like: oklch(0.633 0.200 24.9);
|
|
236
|
-
--success: oklch(0.720 0.192 149.5);
|
|
237
|
-
--warning: oklch(0.770 0.165 70.6);
|
|
238
|
-
--info: oklch(0.626 0.186 259.6);
|
|
239
|
-
--delete: oklch(0.597 0.198 25.5);
|
|
240
|
-
|
|
241
|
-
/* Semantic foregrounds — text/glyph atop --success/--warning/--info plates.
|
|
242
|
-
Notification.vue currently hardcodes `text-white`/`text-foreground`
|
|
243
|
-
inline; W2 migrates consumers to read these tokens. Warning carries a
|
|
244
|
-
dark glyph because the amber plate is too luminous for white. R5
|
|
245
|
-
vocab.γ gap row 4. */
|
|
246
|
-
--success-foreground: var(--neutral-0);
|
|
247
|
-
--warning-foreground: hsl(24 10% 10%);
|
|
248
|
-
--info-foreground: var(--neutral-0);
|
|
249
|
-
|
|
250
|
-
}
|