@mkbabb/glass-ui 0.3.0 → 2.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/README.md +170 -70
- package/dist/CardFooter-Yi0xtLLd.js +129 -0
- package/dist/CollapsibleContent-DHRuXE3P.js +52 -0
- package/dist/CommandShortcut-_INFUMu6.js +285 -0
- package/dist/ContextMenuContent-CvXfU5qz.js +85 -0
- package/dist/ContextMenuSubContent-DCkweFW9.js +250 -0
- package/dist/DataTable-Ce00dbHD.js +460 -0
- package/dist/DialogContent-CmCijgX9.js +93 -0
- package/dist/DialogFooter-DRdaCok0.js +165 -0
- package/dist/DiscoGlyph-wRA02zAJ.js +132 -0
- package/dist/GlyphFace-BnPMUZ16.js +51 -0
- package/dist/HoverCardContent-4nN5-5bz.js +83 -0
- package/dist/HoverPopover-Btv4RQfv.js +80 -0
- package/dist/IconTooltip-ge_mBSWR.js +25 -0
- package/dist/Input-CbakTe3B.js +32 -0
- package/dist/InstrumentChassis-DOaVYyWq.js +65 -0
- package/dist/InstrumentRail-jHDqXj70.js +44 -0
- package/dist/Label-C8QMJSsf.js +32 -0
- package/dist/MetricBadge-DRBB18Xq.js +78 -0
- package/dist/ModalOverlay-DKLVY-cj.js +53 -0
- package/dist/Notification-DrI1DT2v.js +99 -0
- package/dist/PaperBackdrop-Bc2drCqJ.js +31 -0
- package/dist/PopoverContent-BCH4eYs8.js +121 -0
- package/dist/Progress-CCH-2UBR.js +126 -0
- package/dist/ScrollingText-7P8skg5W.js +40 -0
- package/dist/SelectGroup-O69GTQ77.js +31 -0
- package/dist/SelectScrollDownButton-yu8EYUnu.js +235 -0
- package/dist/SelectSeparator-GTHxKO0a.js +49 -0
- package/dist/Separator-_NCypg_C.js +37 -0
- package/dist/Switch-CL0uxu8F.js +41 -0
- package/dist/Toaster-DY8_jtHv.js +255 -0
- package/dist/ToggleGroupItem-BYG_8M9M.js +152 -0
- package/dist/TooltipProvider-C5QLSPto.js +104 -0
- package/dist/UnderlineTabs-BtrUcXn-.js +64 -0
- package/dist/_plugin-vue_export-helper-n-_DRHWS.js +8 -0
- package/dist/animated-digit.d.ts +1 -0
- package/dist/animated-digit.js +44 -0
- package/dist/api/index.d.ts +30 -0
- package/dist/api.js +2 -0
- package/dist/aurora.d.ts +1 -0
- package/dist/aurora.js +541 -0
- package/dist/badge-BbxVKZfw.js +49 -0
- package/dist/badge.d.ts +1 -0
- package/dist/badge.js +2 -0
- package/dist/button-BlOW34DT.js +70 -0
- package/dist/button.d.ts +1 -0
- package/dist/button.js +2 -0
- package/dist/card.d.ts +1 -0
- package/dist/card.js +2 -0
- package/dist/carousel.d.ts +2 -0
- package/dist/carousel.js +394 -0
- package/dist/check-dwgetki8.js +7 -0
- package/dist/chevron-down-DILQA1t6.js +7 -0
- package/dist/chevron-right-fS7fal2t.js +7 -0
- package/dist/chevron-up-BtYjYQOS.js +7 -0
- package/dist/cn-DJXf4yaB.js +97 -0
- package/dist/collapsible.d.ts +1 -0
- package/dist/collapsible.js +2 -0
- package/dist/command.d.ts +1 -0
- package/dist/command.js +2 -0
- package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +48 -0
- package/dist/components/custom/animated-digit/index.d.ts +2 -0
- package/dist/components/custom/aurora/Aurora.vue.d.ts +95 -0
- package/dist/components/custom/aurora/composables/color.d.ts +39 -0
- package/dist/components/custom/aurora/composables/configSource.d.ts +10 -0
- package/dist/components/custom/aurora/composables/runtime.d.ts +54 -0
- package/dist/components/custom/aurora/composables/useAurora.d.ts +67 -0
- package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +25 -0
- package/dist/components/custom/aurora/index.d.ts +9 -0
- package/dist/components/custom/aurora/presets.d.ts +121 -0
- package/dist/components/custom/aurora/renderMode.d.ts +30 -0
- package/dist/components/custom/aurora/shaders/aurora.frag.d.ts +1 -0
- package/dist/components/custom/aurora/shaders/aurora.vert.d.ts +1 -0
- package/dist/components/custom/configurator/Configurator.vue.d.ts +102 -0
- package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +68 -0
- package/dist/components/custom/configurator/ConfiguratorRow.vue.d.ts +63 -0
- package/dist/components/custom/configurator/density.d.ts +30 -0
- package/dist/components/custom/configurator/index.d.ts +6 -0
- package/dist/components/custom/configurator/useConfiguratorState.d.ts +45 -0
- package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +32 -0
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +23 -0
- package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +58 -0
- package/dist/components/custom/disco-glyph/index.d.ts +1 -0
- package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +29 -0
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +30 -0
- package/dist/components/custom/dock/DockLayer.vue.d.ts +34 -0
- package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +43 -0
- package/dist/components/custom/dock/DockSelectTrigger.vue.d.ts +29 -0
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +39 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +96 -0
- package/dist/components/custom/dock/composables/dockContext.d.ts +40 -0
- package/dist/components/custom/dock/composables/dockLayerContext.d.ts +29 -0
- package/dist/components/custom/dock/composables/index.d.ts +7 -0
- package/dist/components/custom/dock/composables/isTeleportedTarget.d.ts +9 -0
- package/dist/components/custom/dock/composables/useDockState.d.ts +70 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +34 -0
- package/dist/components/custom/dock/index.d.ts +9 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +40 -0
- package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +36 -0
- package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +28 -0
- package/dist/components/custom/glass-carousel/index.d.ts +4 -0
- package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +30 -0
- 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/glyph-face/GlyphFace.vue.d.ts +64 -0
- package/dist/components/custom/glyph-face/index.d.ts +2 -0
- package/dist/components/custom/glyph-face/keys.d.ts +35 -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/hover-popover/HoverPopover.vue.d.ts +71 -0
- package/dist/components/custom/hover-popover/index.d.ts +1 -0
- package/dist/components/custom/icon-tooltip/IconTooltip.vue.d.ts +16 -0
- package/dist/components/custom/infinite-scroll/InfiniteScroll.vue.d.ts +33 -0
- package/dist/components/custom/infinite-scroll/composables/types.d.ts +21 -0
- package/dist/components/custom/infinite-scroll/composables/useInfiniteScroll.d.ts +9 -0
- package/dist/components/custom/instrument-chassis/ChassisDivider.vue.d.ts +30 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +82 -0
- package/dist/components/custom/instrument-chassis/index.d.ts +3 -0
- 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/labeled-field/LabeledField.vue.d.ts +36 -0
- package/dist/components/custom/labeled-field/LabeledInput.vue.d.ts +15 -0
- package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +18 -0
- package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +16 -0
- package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +13 -0
- package/dist/components/custom/labeled-field/index.d.ts +5 -0
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +39 -0
- package/dist/components/custom/metric-badge/index.d.ts +1 -0
- package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +97 -0
- package/dist/components/custom/metric-cell/index.d.ts +2 -0
- package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +103 -0
- package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +92 -0
- package/dist/components/custom/metric-stack/index.d.ts +4 -0
- package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +21 -0
- package/dist/components/custom/paper-backdrop/index.d.ts +2 -0
- package/dist/components/custom/pulse/Pulse.vue.d.ts +53 -0
- package/dist/components/custom/pulse/index.d.ts +1 -0
- package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +67 -0
- package/dist/components/custom/responsive-tabs/index.d.ts +2 -0
- package/dist/components/custom/scrolling-text/ScrollingText.vue.d.ts +20 -0
- package/dist/components/custom/scrolling-text/index.d.ts +1 -0
- package/dist/components/custom/search/FuzzySearch.vue.d.ts +16 -0
- package/dist/components/custom/search/SearchBar.vue.d.ts +30 -0
- package/dist/components/custom/search/composables/fuzzySearchIndex.d.ts +42 -0
- package/dist/components/custom/search/composables/types.d.ts +31 -0
- package/dist/components/custom/search/composables/useFuzzySearch.d.ts +12 -0
- package/dist/components/custom/sortable-list/SortableHandle.vue.d.ts +32 -0
- package/dist/components/custom/sortable-list/SortableItem.vue.d.ts +38 -0
- package/dist/components/custom/sortable-list/SortableList.vue.d.ts +76 -0
- package/dist/components/custom/sortable-list/context.d.ts +26 -0
- package/dist/components/custom/sortable-list/index.d.ts +4 -0
- package/dist/components/custom/stacked-icons/StackedIconGroup.vue.d.ts +30 -0
- package/dist/components/custom/stacked-icons/index.d.ts +2 -0
- package/dist/components/custom/stacked-icons/types.d.ts +18 -0
- package/dist/components/custom/status-dot/StatusDot.vue.d.ts +18 -0
- package/dist/components/custom/status-dot/index.d.ts +1 -0
- package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +24 -0
- package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +56 -0
- package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +17 -0
- package/dist/components/custom/timeline/ContinuousTimeline.vue.d.ts +118 -0
- package/dist/components/custom/timeline/GlassTimeline.vue.d.ts +114 -0
- package/dist/components/custom/timeline/ScrubberTimeline.vue.d.ts +29 -0
- package/dist/components/custom/timeline/SegmentedTimeline.vue.d.ts +46 -0
- package/dist/components/custom/timeline/geometry.d.ts +100 -0
- package/dist/components/custom/timeline/index.d.ts +2 -0
- package/dist/components/custom/timeline/types.d.ts +57 -0
- package/dist/components/custom/toggle-chip/ToggleChip.vue.d.ts +39 -0
- package/dist/components/custom/toggle-chip/index.d.ts +17 -0
- package/dist/components/custom/typewriter/TypewriterText.vue.d.ts +85 -0
- package/dist/components/custom/typewriter/composables/useTypewriter.d.ts +22 -0
- package/dist/components/custom/typewriter/types.d.ts +137 -0
- package/dist/components/custom/typewriter/utils/keyboard.d.ts +15 -0
- package/dist/components/custom/typewriter/utils/pausePatterns.d.ts +28 -0
- package/dist/components/custom/typewriter/utils/timing.d.ts +17 -0
- package/dist/components/custom/typewriter/utils/typoStateMachine.d.ts +24 -0
- package/dist/components/ui/_shared/ModalOverlay.vue.d.ts +90 -0
- package/dist/components/ui/_shared/index.d.ts +2 -0
- package/dist/components/ui/_shared/menuItemVariants.d.ts +32 -0
- package/dist/components/ui/_shared/useStalePropWarning.d.ts +27 -0
- package/dist/components/ui/accordion/Accordion.vue.d.ts +19 -0
- package/dist/components/ui/accordion/AccordionContent.vue.d.ts +18 -0
- package/dist/components/ui/accordion/AccordionItem.vue.d.ts +18 -0
- package/dist/components/ui/accordion/AccordionTrigger.vue.d.ts +20 -0
- package/dist/components/ui/accordion/index.d.ts +4 -0
- package/dist/components/ui/alert/Alert.vue.d.ts +19 -0
- package/dist/components/ui/alert/AlertDescription.vue.d.ts +17 -0
- package/dist/components/ui/alert/AlertTitle.vue.d.ts +17 -0
- package/dist/components/ui/alert/index.d.ts +8 -0
- package/dist/components/ui/avatar/Avatar.vue.d.ts +23 -0
- package/dist/components/ui/avatar/AvatarFallback.vue.d.ts +14 -0
- package/dist/components/ui/avatar/AvatarImage.vue.d.ts +4 -0
- package/dist/components/ui/avatar/index.d.ts +9 -0
- package/dist/components/ui/badge/Badge.vue.d.ts +20 -0
- package/dist/components/ui/badge/index.d.ts +7 -0
- package/dist/components/ui/button/Button.vue.d.ts +23 -0
- package/dist/components/ui/button/index.d.ts +7 -0
- package/dist/components/ui/card/Card.vue.d.ts +56 -0
- package/dist/components/ui/card/CardContent.vue.d.ts +17 -0
- package/dist/components/ui/card/CardDescription.vue.d.ts +17 -0
- package/dist/components/ui/card/CardFooter.vue.d.ts +17 -0
- package/dist/components/ui/card/CardHeader.vue.d.ts +55 -0
- package/dist/components/ui/card/CardTitle.vue.d.ts +17 -0
- package/dist/components/ui/card/index.d.ts +6 -0
- package/dist/components/ui/carousel/Carousel.vue.d.ts +37 -0
- package/dist/components/ui/carousel/CarouselContent.vue.d.ts +16 -0
- package/dist/components/ui/carousel/CarouselDots.vue.d.ts +4 -0
- package/dist/components/ui/carousel/CarouselItem.vue.d.ts +14 -0
- package/dist/components/ui/carousel/CarouselNext.vue.d.ts +22 -0
- package/dist/components/ui/carousel/CarouselPager.vue.d.ts +10 -0
- package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +22 -0
- package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +51 -0
- package/dist/components/ui/carousel/index.d.ts +10 -0
- package/dist/components/ui/carousel/interface.d.ts +20 -0
- package/dist/components/ui/carousel/useCarousel.d.ts +20 -0
- package/dist/components/ui/checkbox/Checkbox.vue.d.ts +22 -0
- package/dist/components/ui/checkbox/index.d.ts +1 -0
- package/dist/components/ui/collapsible/Collapsible.vue.d.ts +20 -0
- package/dist/components/ui/collapsible/CollapsibleContent.vue.d.ts +14 -0
- package/dist/components/ui/collapsible/CollapsibleTrigger.vue.d.ts +14 -0
- package/dist/components/ui/collapsible/index.d.ts +3 -0
- package/dist/components/ui/combobox/Combobox.vue.d.ts +29 -0
- package/dist/components/ui/combobox/ComboboxAnchor.vue.d.ts +18 -0
- package/dist/components/ui/combobox/ComboboxEmpty.vue.d.ts +18 -0
- package/dist/components/ui/combobox/ComboboxGroup.vue.d.ts +19 -0
- package/dist/components/ui/combobox/ComboboxInput.vue.d.ts +22 -0
- package/dist/components/ui/combobox/ComboboxItem.vue.d.ts +22 -0
- package/dist/components/ui/combobox/ComboboxItemIndicator.vue.d.ts +18 -0
- package/dist/components/ui/combobox/ComboboxList.vue.d.ts +32 -0
- package/dist/components/ui/combobox/ComboboxSeparator.vue.d.ts +18 -0
- package/dist/components/ui/combobox/ComboboxViewport.vue.d.ts +18 -0
- package/dist/components/ui/combobox/index.d.ts +11 -0
- package/dist/components/ui/command/Command.vue.d.ts +35 -0
- package/dist/components/ui/command/CommandDialog.vue.d.ts +18 -0
- package/dist/components/ui/command/CommandEmpty.vue.d.ts +18 -0
- package/dist/components/ui/command/CommandGroup.vue.d.ts +19 -0
- package/dist/components/ui/command/CommandInput.vue.d.ts +8 -0
- package/dist/components/ui/command/CommandItem.vue.d.ts +22 -0
- package/dist/components/ui/command/CommandList.vue.d.ts +30 -0
- package/dist/components/ui/command/CommandSeparator.vue.d.ts +18 -0
- package/dist/components/ui/command/CommandShortcut.vue.d.ts +17 -0
- package/dist/components/ui/command/index.d.ts +9 -0
- package/dist/components/ui/context-menu/ContextMenu.vue.d.ts +18 -0
- package/dist/components/ui/context-menu/ContextMenuCheckboxItem.vue.d.ts +24 -0
- package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +30 -0
- package/dist/components/ui/context-menu/ContextMenuItem.vue.d.ts +23 -0
- package/dist/components/ui/context-menu/ContextMenuLabel.vue.d.ts +19 -0
- package/dist/components/ui/context-menu/ContextMenuRadioGroup.vue.d.ts +18 -0
- package/dist/components/ui/context-menu/ContextMenuRadioItem.vue.d.ts +22 -0
- package/dist/components/ui/context-menu/ContextMenuSeparator.vue.d.ts +8 -0
- package/dist/components/ui/context-menu/ContextMenuShortcut.vue.d.ts +17 -0
- package/dist/components/ui/context-menu/ContextMenuSubContent.vue.d.ts +34 -0
- package/dist/components/ui/context-menu/ContextMenuSubTrigger.vue.d.ts +19 -0
- package/dist/components/ui/context-menu/ContextMenuTrigger.vue.d.ts +14 -0
- package/dist/components/ui/context-menu/index.d.ts +12 -0
- package/dist/components/ui/data-table/DataTable.vue.d.ts +81 -0
- package/dist/components/ui/data-table/DataTablePagination.vue.d.ts +13 -0
- package/dist/components/ui/data-table/types.d.ts +56 -0
- package/dist/components/ui/dialog/Dialog.vue.d.ts +18 -0
- package/dist/components/ui/dialog/DialogClose.vue.d.ts +14 -0
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +71 -0
- package/dist/components/ui/dialog/DialogDescription.vue.d.ts +18 -0
- package/dist/components/ui/dialog/DialogFooter.vue.d.ts +17 -0
- package/dist/components/ui/dialog/DialogHeader.vue.d.ts +17 -0
- package/dist/components/ui/dialog/DialogScrollContent.vue.d.ts +33 -0
- package/dist/components/ui/dialog/DialogTitle.vue.d.ts +18 -0
- package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +14 -0
- package/dist/components/ui/dialog/index.d.ts +9 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +30 -0
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +32 -0
- package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +18 -0
- package/dist/components/ui/drawer/DrawerFooter.vue.d.ts +17 -0
- package/dist/components/ui/drawer/DrawerHeader.vue.d.ts +17 -0
- package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +8 -0
- package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +18 -0
- package/dist/components/ui/drawer/index.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/DropdownMenu.vue.d.ts +18 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue.d.ts +24 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +32 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuGroup.vue.d.ts +14 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuItem.vue.d.ts +19 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuLabel.vue.d.ts +19 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue.d.ts +18 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuRadioItem.vue.d.ts +22 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSeparator.vue.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuShortcut.vue.d.ts +17 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSub.vue.d.ts +18 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +34 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue.d.ts +18 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuTrigger.vue.d.ts +14 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +15 -0
- package/dist/components/ui/hover-card/HoverCard.vue.d.ts +18 -0
- package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +20 -0
- package/dist/components/ui/hover-card/HoverCardTrigger.vue.d.ts +14 -0
- package/dist/components/ui/hover-card/index.d.ts +3 -0
- package/dist/components/ui/index.d.ts +41 -0
- package/dist/components/ui/input/Input.vue.d.ts +13 -0
- package/dist/components/ui/input/index.d.ts +1 -0
- package/dist/components/ui/label/Label.vue.d.ts +18 -0
- package/dist/components/ui/label/index.d.ts +1 -0
- package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +43 -0
- package/dist/components/ui/metric-pill/index.d.ts +1 -0
- package/dist/components/ui/multi-select/MultiSelect.vue.d.ts +24 -0
- package/dist/components/ui/multi-select/index.d.ts +7 -0
- package/dist/components/ui/notification/Notification.vue.d.ts +16 -0
- package/dist/components/ui/notification/index.d.ts +1 -0
- package/dist/components/ui/number-field/NumberField.vue.d.ts +22 -0
- package/dist/components/ui/number-field/NumberFieldContent.vue.d.ts +17 -0
- package/dist/components/ui/number-field/NumberFieldDecrement.vue.d.ts +18 -0
- package/dist/components/ui/number-field/NumberFieldIncrement.vue.d.ts +18 -0
- package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +3 -0
- package/dist/components/ui/number-field/index.d.ts +5 -0
- package/dist/components/ui/popover/Popover.vue.d.ts +18 -0
- package/dist/components/ui/popover/PopoverContent.vue.d.ts +39 -0
- package/dist/components/ui/popover/PopoverTrigger.vue.d.ts +14 -0
- package/dist/components/ui/popover/index.d.ts +3 -0
- package/dist/components/ui/progress/Progress.vue.d.ts +111 -0
- package/dist/components/ui/progress/index.d.ts +2 -0
- package/dist/components/ui/radio-group/RadioGroup.vue.d.ts +22 -0
- package/dist/components/ui/radio-group/RadioGroupItem.vue.d.ts +8 -0
- package/dist/components/ui/radio-group/index.d.ts +2 -0
- package/dist/components/ui/section/Section.vue.d.ts +73 -0
- package/dist/components/ui/section/index.d.ts +1 -0
- package/dist/components/ui/select/Select.vue.d.ts +21 -0
- package/dist/components/ui/select/SelectContent.vue.d.ts +30 -0
- package/dist/components/ui/select/SelectGroup.vue.d.ts +18 -0
- package/dist/components/ui/select/SelectItem.vue.d.ts +21 -0
- package/dist/components/ui/select/SelectLabel.vue.d.ts +18 -0
- package/dist/components/ui/select/SelectScrollDownButton.vue.d.ts +18 -0
- package/dist/components/ui/select/SelectScrollUpButton.vue.d.ts +18 -0
- package/dist/components/ui/select/SelectSeparator.vue.d.ts +8 -0
- package/dist/components/ui/select/SelectTrigger.vue.d.ts +22 -0
- package/dist/components/ui/select/SelectValue.vue.d.ts +14 -0
- package/dist/components/ui/select/index.d.ts +10 -0
- package/dist/components/ui/separator/Separator.vue.d.ts +9 -0
- package/dist/components/ui/separator/index.d.ts +1 -0
- package/dist/components/ui/sheet/Sheet.vue.d.ts +18 -0
- package/dist/components/ui/sheet/SheetClose.vue.d.ts +14 -0
- package/dist/components/ui/sheet/SheetContent.vue.d.ts +53 -0
- package/dist/components/ui/sheet/SheetDescription.vue.d.ts +18 -0
- package/dist/components/ui/sheet/SheetFooter.vue.d.ts +17 -0
- package/dist/components/ui/sheet/SheetHeader.vue.d.ts +17 -0
- package/dist/components/ui/sheet/SheetTitle.vue.d.ts +18 -0
- package/dist/components/ui/sheet/SheetTrigger.vue.d.ts +14 -0
- package/dist/components/ui/sheet/index.d.ts +13 -0
- package/dist/components/ui/skeleton/Skeleton.vue.d.ts +32 -0
- package/dist/components/ui/skeleton/index.d.ts +1 -0
- package/dist/components/ui/slider/Slider.vue.d.ts +26 -0
- package/dist/components/ui/slider/index.d.ts +31 -0
- package/dist/components/ui/switch/Switch.vue.d.ts +12 -0
- package/dist/components/ui/switch/index.d.ts +1 -0
- package/dist/components/ui/table/Table.vue.d.ts +17 -0
- package/dist/components/ui/table/TableBody.vue.d.ts +17 -0
- package/dist/components/ui/table/TableCaption.vue.d.ts +17 -0
- package/dist/components/ui/table/TableCell.vue.d.ts +17 -0
- package/dist/components/ui/table/TableEmpty.vue.d.ts +20 -0
- package/dist/components/ui/table/TableHead.vue.d.ts +17 -0
- package/dist/components/ui/table/TableHeader.vue.d.ts +17 -0
- package/dist/components/ui/table/TableRow.vue.d.ts +17 -0
- package/dist/components/ui/table/index.d.ts +8 -0
- package/dist/components/ui/tabs/Tabs.vue.d.ts +19 -0
- package/dist/components/ui/tabs/TabsContent.vue.d.ts +18 -0
- package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +8 -0
- package/dist/components/ui/tabs/TabsList.vue.d.ts +18 -0
- package/dist/components/ui/tabs/TabsTrigger.vue.d.ts +18 -0
- package/dist/components/ui/tabs/index.d.ts +5 -0
- package/dist/components/ui/tags-input/TagsInput.vue.d.ts +28 -0
- package/dist/components/ui/tags-input/TagsInputInput.vue.d.ts +8 -0
- package/dist/components/ui/tags-input/TagsInputItem.vue.d.ts +18 -0
- package/dist/components/ui/tags-input/TagsInputItemDelete.vue.d.ts +18 -0
- package/dist/components/ui/tags-input/TagsInputItemText.vue.d.ts +8 -0
- package/dist/components/ui/tags-input/index.d.ts +5 -0
- package/dist/components/ui/textarea/Textarea.vue.d.ts +13 -0
- package/dist/components/ui/textarea/index.d.ts +1 -0
- package/dist/components/ui/toast/Toast.vue.d.ts +104 -0
- package/dist/components/ui/toast/ToastAction.vue.d.ts +18 -0
- package/dist/components/ui/toast/ToastClose.vue.d.ts +8 -0
- package/dist/components/ui/toast/ToastDescription.vue.d.ts +18 -0
- package/dist/components/ui/toast/ToastTitle.vue.d.ts +18 -0
- package/dist/components/ui/toast/Toaster.vue.d.ts +3 -0
- package/dist/components/ui/toast/index.d.ts +8 -0
- package/dist/components/ui/toast/use-toast.d.ts +155 -0
- package/dist/components/ui/toggle/Toggle.vue.d.ts +29 -0
- package/dist/components/ui/toggle/index.d.ts +26 -0
- package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +25 -0
- package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +21 -0
- package/dist/components/ui/toggle-group/index.d.ts +2 -0
- package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +21 -0
- package/dist/components/ui/tooltip/Tooltip.vue.d.ts +18 -0
- package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +26 -0
- package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts +14 -0
- package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts +14 -0
- package/dist/components/ui/tooltip/index.d.ts +4 -0
- package/dist/composables/dark/index.d.ts +1 -0
- package/dist/composables/dark/useGlobalDark.d.ts +7 -0
- package/dist/composables/dom/index.d.ts +6 -0
- package/dist/composables/dom/useBreakpoint.d.ts +38 -0
- package/dist/composables/dom/useClipboard.d.ts +45 -0
- package/dist/composables/dom/useResizeObserver.d.ts +50 -0
- package/dist/composables/dom/useTokenColor.d.ts +27 -0
- package/dist/composables/dom/useTouchGate.d.ts +18 -0
- package/dist/composables/dom/useViewportReady.d.ts +87 -0
- package/dist/composables/glass/index.d.ts +1 -0
- package/dist/composables/glass/useGlassRenderer.d.ts +37 -0
- package/dist/composables/glass/webgl/frostShader.d.ts +27 -0
- package/dist/composables/index.d.ts +9 -0
- package/dist/composables/keyboard/index.d.ts +1 -0
- package/dist/composables/keyboard/useKeyboardShortcuts.d.ts +33 -0
- package/dist/composables/motion/constants.d.ts +19 -0
- package/dist/composables/motion/index.d.ts +14 -0
- package/dist/composables/motion/installDarkModeSync.d.ts +1 -0
- package/dist/composables/motion/useAnimatedNumber.d.ts +40 -0
- package/dist/composables/motion/useAnimatedNumberMap.d.ts +29 -0
- package/dist/composables/motion/useIntersectionPause.d.ts +33 -0
- package/dist/composables/motion/useNumericTransition.d.ts +32 -0
- package/dist/composables/motion/useRAFLoop.d.ts +43 -0
- package/dist/composables/motion/useScrollProgress.d.ts +23 -0
- package/dist/composables/motion/useSpring.d.ts +66 -0
- package/dist/composables/motion/useSpringMount.d.ts +52 -0
- package/dist/composables/motion/useSpringOrchestrator.d.ts +15 -0
- package/dist/composables/motion/useSpringPress.d.ts +46 -0
- package/dist/composables/motion/useStagger.d.ts +50 -0
- package/dist/composables/motion/useStaggerReveal.d.ts +22 -0
- package/dist/composables/reactive/index.d.ts +2 -0
- package/dist/composables/reactive/useInterval.d.ts +24 -0
- package/dist/composables/reactive/useTimer.d.ts +24 -0
- package/dist/composables/sidebar/index.d.ts +7 -0
- package/dist/composables/sidebar/types.d.ts +44 -0
- package/dist/composables/sidebar/useScrollTracker.d.ts +12 -0
- package/dist/composables/sidebar/useSidebarFollow.d.ts +16 -0
- package/dist/composables/sidebar/useSidebarState.d.ts +39 -0
- package/dist/composables/sidebar/useTreeIndex.d.ts +37 -0
- package/dist/composables/sortable/index.d.ts +1 -0
- package/dist/composables/sortable/useSortable.d.ts +149 -0
- package/dist/configurator.d.ts +1 -0
- package/dist/configurator.js +2 -0
- package/dist/confirm-dialog.d.ts +1 -0
- package/dist/confirm-dialog.js +69 -0
- package/dist/context-menu.d.ts +1 -0
- package/dist/context-menu.js +3 -0
- package/dist/controls.d.ts +1 -0
- package/dist/controls.js +51 -0
- package/dist/createLucideIcon-Bn9a1b70.js +43 -0
- package/dist/dark.d.ts +1 -0
- package/dist/dark.js +2 -0
- package/dist/data-table.d.ts +1 -0
- package/dist/data-table.js +2 -0
- package/dist/dialog.d.ts +1 -0
- package/dist/dialog.js +3 -0
- package/dist/disco-glyph.d.ts +1 -0
- package/dist/disco-glyph.js +2 -0
- package/dist/dock.d.ts +1 -0
- package/dist/dock.js +548 -0
- package/dist/dockContext-BDGSrwsV.js +16 -0
- package/dist/dom.d.ts +1 -0
- package/dist/dom.js +4 -0
- package/dist/dropdown-menu-2K-SGkZU.js +363 -0
- package/dist/dropdown-menu.d.ts +1 -0
- package/dist/dropdown-menu.js +2 -0
- package/dist/expandable-container.d.ts +1 -0
- package/dist/expandable-container.js +64 -0
- package/dist/fonts/README.md +95 -0
- package/dist/fonts/fira-code/OFL.txt +93 -0
- package/dist/fonts/fira-code/fira-code-latin-ext.woff2 +0 -0
- package/dist/fonts/fira-code/fira-code-latin.woff2 +0 -0
- package/dist/fonts/plus-jakarta-sans/OFL.txt +93 -0
- package/dist/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext.woff2 +0 -0
- package/dist/fonts/plus-jakarta-sans/plus-jakarta-sans-latin.woff2 +0 -0
- package/dist/forms.d.ts +3 -0
- package/dist/forms.js +311 -0
- package/dist/glass-carousel.d.ts +1 -0
- package/dist/glass-carousel.js +207 -0
- package/dist/glass-panel.d.ts +1 -0
- package/dist/glass-panel.js +44 -0
- package/dist/glass-ui.css +2 -1
- package/dist/glass-ui.js +1150 -10021
- package/dist/glyph-face.d.ts +1 -0
- package/dist/glyph-face.js +3 -0
- package/dist/header-ribbon.d.ts +1 -0
- package/dist/header-ribbon.js +63 -0
- package/dist/hover-card.d.ts +1 -0
- package/dist/hover-card.js +2 -0
- package/dist/hover-popover.d.ts +1 -0
- package/dist/hover-popover.js +2 -0
- package/dist/icon-tooltip.d.ts +1 -0
- package/dist/icon-tooltip.js +2 -0
- package/dist/index.d.ts +49 -6619
- package/dist/infinite-scroll.d.ts +2 -0
- package/dist/infinite-scroll.js +73 -0
- package/dist/instrument-chassis.d.ts +1 -0
- package/dist/instrument-chassis.js +2 -0
- package/dist/instrument-rail.d.ts +1 -0
- package/dist/instrument-rail.js +2 -0
- package/dist/keyboard.d.ts +1 -0
- package/dist/keyboard.js +2 -0
- package/dist/keys-DVkcUktU.js +11 -0
- package/dist/label.d.ts +1 -0
- package/dist/label.js +2 -0
- package/dist/labeled-field.d.ts +1 -0
- package/dist/labeled-field.js +194 -0
- package/dist/menuItemVariants-B2nDL7zH.js +30 -0
- package/dist/metric-badge.d.ts +1 -0
- package/dist/metric-badge.js +2 -0
- package/dist/metric-cell.d.ts +1 -0
- package/dist/metric-cell.js +54 -0
- package/dist/metric-stack.d.ts +1 -0
- package/dist/metric-stack.js +107 -0
- package/dist/minimize-2-LsCJ_eNt.js +38 -0
- package/dist/motion.d.ts +1 -0
- package/dist/motion.js +286 -0
- package/dist/notification.d.ts +1 -0
- package/dist/notification.js +2 -0
- package/dist/paper-backdrop.d.ts +1 -0
- package/dist/paper-backdrop.js +2 -0
- package/dist/popover.d.ts +1 -0
- package/dist/popover.js +2 -0
- package/dist/presets-BMzCDrmR.js +71 -0
- package/dist/progress.d.ts +1 -0
- package/dist/progress.js +2 -0
- package/dist/pulse.d.ts +1 -0
- package/dist/pulse.js +54 -0
- package/dist/reactive.d.ts +1 -0
- package/dist/reactive.js +3 -0
- package/dist/responsive-tabs.d.ts +1 -0
- package/dist/responsive-tabs.js +89 -0
- package/dist/scrolling-text.d.ts +1 -0
- package/dist/scrolling-text.js +2 -0
- package/dist/search-ocd8tmL9.js +12 -0
- package/dist/search.d.ts +1 -0
- package/dist/search.js +425 -0
- package/dist/select.d.ts +1 -0
- package/dist/select.js +4 -0
- package/dist/separator.d.ts +1 -0
- package/dist/separator.js +2 -0
- package/dist/sheet-CLVkb3AO.js +214 -0
- package/dist/sheet.d.ts +1 -0
- package/dist/sheet.js +2 -0
- package/dist/sidebar.d.ts +1 -0
- package/dist/sidebar.js +304 -0
- package/dist/slider-BQaLYFLh.js +133 -0
- package/dist/slider.d.ts +1 -0
- package/dist/slider.js +2 -0
- package/dist/sortable-list.d.ts +1 -0
- package/dist/sortable-list.js +82 -0
- package/dist/stacked-icons.d.ts +1 -0
- package/dist/stacked-icons.js +83 -0
- package/dist/status-dot.d.ts +1 -0
- package/dist/status-dot.js +55 -0
- package/dist/styles/animations.css +298 -0
- package/dist/styles/cards.css +44 -0
- package/dist/styles/disco-glyph.css +26 -0
- package/dist/styles/dock.css +1085 -0
- package/dist/styles/floating-panel.css +34 -0
- package/dist/styles/fonts.css +143 -0
- package/dist/styles/glass.css +277 -0
- package/dist/styles/glyph-face.css +92 -0
- package/dist/styles/hover-popover.css +44 -0
- package/dist/styles/index.css +96 -0
- package/dist/styles/instrument-chassis.css +313 -0
- package/dist/styles/instrument-rail.css +128 -0
- package/dist/styles/paper.css +68 -0
- package/dist/styles/theme.css +358 -0
- package/dist/styles/tokens.css +1495 -0
- package/dist/styles/transitions.css +245 -0
- package/dist/styles/typography.css +553 -0
- package/dist/styles/utilities.css +893 -0
- package/dist/tabs.d.ts +1 -0
- package/dist/tabs.js +206 -0
- package/dist/timeline.d.ts +1 -0
- package/dist/timeline.js +466 -0
- package/dist/toast.d.ts +1 -0
- package/dist/toast.js +2 -0
- package/dist/toggle-chip.d.ts +1 -0
- package/dist/toggle-chip.js +71 -0
- package/dist/toggle-group.d.ts +1 -0
- package/dist/toggle-group.js +2 -0
- package/dist/tokens.d.ts +53 -0
- package/dist/tokens.js +16 -0
- package/dist/tooltip.d.ts +1 -0
- package/dist/tooltip.js +2 -0
- package/dist/typewriter.d.ts +1 -0
- package/dist/typewriter.js +860 -0
- package/dist/useAnimatedNumber-DcvTR9B4.js +51 -0
- package/dist/useBreakpoint-BHlX-MhR.js +134 -0
- package/dist/useConfiguratorState-BlaevW0S.js +266 -0
- package/dist/useGlassRenderer-DMDdMH55.js +69 -0
- package/dist/useGlobalDark-PMiP5Jku.js +24 -0
- package/dist/useIntersectionPause-CXYfYg_C.js +39 -0
- package/dist/useInterval-COlTCeVa.js +18 -0
- package/dist/useKeyboardShortcuts-B1ev1YEC.js +99 -0
- package/dist/useResizeObserver-F4aRR4Cj.js +44 -0
- package/dist/useSortable-Ck0rBJ4g.js +175 -0
- package/dist/useSpringMount-BTRBNzXP.js +113 -0
- package/dist/useTimer-lp5NlH4w.js +20 -0
- package/dist/useTouchGate-BhhEMlwJ.js +84 -0
- package/dist/utils/cn.d.ts +27 -0
- package/dist/x-cdWAmO-q.js +10 -0
- package/package.json +514 -26
- package/src/fonts/README.md +95 -0
- package/src/fonts/fira-code/OFL.txt +93 -0
- package/src/fonts/fira-code/fira-code-latin-ext.woff2 +0 -0
- package/src/fonts/fira-code/fira-code-latin.woff2 +0 -0
- package/src/fonts/plus-jakarta-sans/OFL.txt +93 -0
- package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext.woff2 +0 -0
- package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin.woff2 +0 -0
- package/src/styles/animations.css +172 -107
- package/src/styles/cards.css +30 -52
- package/src/styles/disco-glyph.css +26 -0
- package/src/styles/dock.css +991 -127
- package/src/styles/floating-panel.css +22 -37
- package/src/styles/fonts.css +143 -0
- package/src/styles/glass.css +129 -126
- package/src/styles/glyph-face.css +92 -0
- package/src/styles/hover-popover.css +44 -0
- package/src/styles/index.css +73 -3
- package/src/styles/instrument-chassis.css +313 -0
- package/src/styles/instrument-rail.css +128 -0
- package/src/styles/paper.css +68 -0
- package/src/styles/theme.css +292 -72
- package/src/styles/tokens.css +1345 -183
- package/src/styles/transitions.css +227 -208
- package/src/styles/typography.css +498 -222
- package/src/styles/utilities.css +612 -437
- package/src/components/custom/aurora/Aurora.vue +0 -34
- package/src/components/custom/aurora/composables/color.ts +0 -122
- package/src/components/custom/aurora/composables/useAurora.ts +0 -352
- package/src/components/custom/aurora/index.ts +0 -8
- package/src/components/custom/confirm-dialog/ConfirmDialog.vue +0 -88
- package/src/components/custom/controls/DarkModeToggle.vue +0 -96
- package/src/components/custom/dock/DockLayerGroup.vue +0 -21
- package/src/components/custom/dock/DockPopover.vue +0 -263
- package/src/components/custom/dock/GlassDock.vue +0 -276
- package/src/components/custom/dock/composables/index.ts +0 -16
- package/src/components/custom/dock/composables/isTeleportedTarget.ts +0 -19
- package/src/components/custom/dock/composables/useDockActionBar.ts +0 -33
- package/src/components/custom/dock/composables/useDockState.ts +0 -314
- package/src/components/custom/dock/composables/useDockTransition.ts +0 -146
- package/src/components/custom/dock/composables/useLayerTransition.ts +0 -135
- package/src/components/custom/dock/composables/usePopupMutex.ts +0 -83
- package/src/components/custom/dock/index.ts +0 -9
- package/src/components/custom/expandable-container/ExpandableContainer.vue +0 -64
- package/src/components/custom/glass-panel/GlassPanel.vue +0 -98
- package/src/components/custom/glass-panel/index.ts +0 -2
- package/src/components/custom/icon-tooltip/IconTooltip.vue +0 -20
- package/src/components/custom/index.ts +0 -15
- package/src/components/custom/infinite-scroll/InfiniteScroll.vue +0 -55
- package/src/components/custom/infinite-scroll/composables/types.ts +0 -23
- package/src/components/custom/infinite-scroll/composables/useInfiniteScroll.ts +0 -73
- package/src/components/custom/labeled-field/LabeledInput.vue +0 -29
- package/src/components/custom/labeled-field/LabeledSelect.vue +0 -59
- package/src/components/custom/labeled-field/LabeledSlider.vue +0 -32
- package/src/components/custom/labeled-field/LabeledSwitch.vue +0 -27
- package/src/components/custom/labeled-field/index.ts +0 -4
- package/src/components/custom/metaballs/MetaballCanvas.vue +0 -23
- package/src/components/custom/metaballs/index.ts +0 -4
- package/src/components/custom/metaballs/shaders.ts +0 -63
- package/src/components/custom/metaballs/types.ts +0 -29
- package/src/components/custom/metaballs/useMetaballs.ts +0 -252
- package/src/components/custom/search/FuzzySearch.vue +0 -589
- package/src/components/custom/search/SearchBar.vue +0 -44
- package/src/components/custom/search/composables/fuzzySearchIndex.ts +0 -224
- package/src/components/custom/search/composables/types.ts +0 -34
- package/src/components/custom/search/composables/useFuzzySearch.ts +0 -115
- package/src/components/custom/sidebar/ProgressiveSidebar.vue +0 -256
- package/src/components/custom/sidebar/composables/index.ts +0 -6
- package/src/components/custom/sidebar/composables/useScrollTracker.ts +0 -242
- package/src/components/custom/sidebar/composables/useSidebarFollow.ts +0 -247
- package/src/components/custom/sidebar/composables/useSidebarState.ts +0 -72
- package/src/components/custom/sidebar/composables/useTreeIndex.ts +0 -152
- package/src/components/custom/sidebar/index.ts +0 -15
- package/src/components/custom/sidebar/types.ts +0 -50
- package/src/components/custom/tabs/BouncyTabs.vue +0 -39
- package/src/components/custom/tabs/BouncyToggle.vue +0 -352
- package/src/components/custom/tabs/UnderlineTabs.vue +0 -115
- package/src/components/custom/timeline/GlassTimeline.vue +0 -174
- package/src/components/custom/timeline/index.ts +0 -1
- package/src/components/custom/typewriter/TypewriterText.vue +0 -239
- package/src/components/custom/typewriter/composables/useTypewriter.ts +0 -413
- package/src/components/custom/typewriter/types.ts +0 -159
- package/src/components/custom/typewriter/utils/keyboard.ts +0 -213
- package/src/components/custom/typewriter/utils/pausePatterns.ts +0 -55
- package/src/components/custom/typewriter/utils/timing.ts +0 -104
- package/src/components/custom/typewriter/utils/typoStateMachine.ts +0 -197
- package/src/components/index.ts +0 -2
- package/src/components/ui/accordion/Accordion.vue +0 -19
- package/src/components/ui/accordion/AccordionContent.vue +0 -24
- package/src/components/ui/accordion/AccordionItem.vue +0 -24
- package/src/components/ui/accordion/AccordionTrigger.vue +0 -39
- package/src/components/ui/accordion/index.ts +0 -4
- package/src/components/ui/alert/Alert.vue +0 -20
- package/src/components/ui/alert/AlertDescription.vue +0 -17
- package/src/components/ui/alert/AlertTitle.vue +0 -17
- package/src/components/ui/alert/index.ts +0 -23
- package/src/components/ui/avatar/Avatar.vue +0 -21
- package/src/components/ui/avatar/AvatarFallback.vue +0 -11
- package/src/components/ui/avatar/AvatarImage.vue +0 -9
- package/src/components/ui/avatar/index.ts +0 -24
- package/src/components/ui/badge/Badge.vue +0 -16
- package/src/components/ui/badge/index.ts +0 -25
- package/src/components/ui/button/Button.vue +0 -26
- package/src/components/ui/button/index.ts +0 -43
- package/src/components/ui/card/Card.vue +0 -28
- package/src/components/ui/card/CardContent.vue +0 -14
- package/src/components/ui/card/CardDescription.vue +0 -14
- package/src/components/ui/card/CardFooter.vue +0 -14
- package/src/components/ui/card/CardHeader.vue +0 -14
- package/src/components/ui/card/CardTitle.vue +0 -21
- package/src/components/ui/card/index.ts +0 -6
- package/src/components/ui/carousel/Carousel.vue +0 -53
- package/src/components/ui/carousel/CarouselContent.vue +0 -35
- package/src/components/ui/carousel/CarouselItem.vue +0 -24
- package/src/components/ui/carousel/CarouselNext.vue +0 -40
- package/src/components/ui/carousel/CarouselPrevious.vue +0 -40
- package/src/components/ui/carousel/index.ts +0 -10
- package/src/components/ui/carousel/interface.ts +0 -26
- package/src/components/ui/carousel/useCarousel.ts +0 -56
- package/src/components/ui/checkbox/Checkbox.vue +0 -33
- package/src/components/ui/checkbox/index.ts +0 -1
- package/src/components/ui/collapsible/Collapsible.vue +0 -15
- package/src/components/ui/collapsible/CollapsibleContent.vue +0 -11
- package/src/components/ui/collapsible/CollapsibleTrigger.vue +0 -11
- package/src/components/ui/collapsible/index.ts +0 -3
- package/src/components/ui/combobox/Combobox.vue +0 -17
- package/src/components/ui/combobox/ComboboxAnchor.vue +0 -23
- package/src/components/ui/combobox/ComboboxEmpty.vue +0 -21
- package/src/components/ui/combobox/ComboboxGroup.vue +0 -27
- package/src/components/ui/combobox/ComboboxInput.vue +0 -41
- package/src/components/ui/combobox/ComboboxItem.vue +0 -24
- package/src/components/ui/combobox/ComboboxItemIndicator.vue +0 -23
- package/src/components/ui/combobox/ComboboxList.vue +0 -29
- package/src/components/ui/combobox/ComboboxSeparator.vue +0 -21
- package/src/components/ui/combobox/ComboboxViewport.vue +0 -23
- package/src/components/ui/combobox/index.ts +0 -12
- package/src/components/ui/command/Command.vue +0 -30
- package/src/components/ui/command/CommandDialog.vue +0 -21
- package/src/components/ui/command/CommandEmpty.vue +0 -20
- package/src/components/ui/command/CommandGroup.vue +0 -29
- package/src/components/ui/command/CommandInput.vue +0 -33
- package/src/components/ui/command/CommandItem.vue +0 -26
- package/src/components/ui/command/CommandList.vue +0 -27
- package/src/components/ui/command/CommandSeparator.vue +0 -23
- package/src/components/ui/command/CommandShortcut.vue +0 -14
- package/src/components/ui/command/index.ts +0 -9
- package/src/components/ui/context-menu/ContextMenu.vue +0 -15
- package/src/components/ui/context-menu/ContextMenuCheckboxItem.vue +0 -40
- package/src/components/ui/context-menu/ContextMenuContent.vue +0 -36
- package/src/components/ui/context-menu/ContextMenuGroup.vue +0 -11
- package/src/components/ui/context-menu/ContextMenuItem.vue +0 -34
- package/src/components/ui/context-menu/ContextMenuLabel.vue +0 -25
- package/src/components/ui/context-menu/ContextMenuPortal.vue +0 -11
- package/src/components/ui/context-menu/ContextMenuRadioGroup.vue +0 -19
- package/src/components/ui/context-menu/ContextMenuRadioItem.vue +0 -40
- package/src/components/ui/context-menu/ContextMenuSeparator.vue +0 -20
- package/src/components/ui/context-menu/ContextMenuShortcut.vue +0 -14
- package/src/components/ui/context-menu/ContextMenuSub.vue +0 -19
- package/src/components/ui/context-menu/ContextMenuSubContent.vue +0 -35
- package/src/components/ui/context-menu/ContextMenuSubTrigger.vue +0 -34
- package/src/components/ui/context-menu/ContextMenuTrigger.vue +0 -13
- package/src/components/ui/context-menu/index.ts +0 -14
- package/src/components/ui/data-table/DataTable.vue +0 -167
- package/src/components/ui/data-table/DataTablePagination.vue +0 -112
- package/src/components/ui/data-table/types.ts +0 -48
- package/src/components/ui/dialog/Dialog.vue +0 -14
- package/src/components/ui/dialog/DialogClose.vue +0 -11
- package/src/components/ui/dialog/DialogContent.vue +0 -61
- package/src/components/ui/dialog/DialogDescription.vue +0 -24
- package/src/components/ui/dialog/DialogFooter.vue +0 -19
- package/src/components/ui/dialog/DialogHeader.vue +0 -16
- package/src/components/ui/dialog/DialogScrollContent.vue +0 -65
- package/src/components/ui/dialog/DialogTitle.vue +0 -29
- package/src/components/ui/dialog/DialogTrigger.vue +0 -11
- package/src/components/ui/dialog/index.ts +0 -9
- package/src/components/ui/drawer/Drawer.vue +0 -19
- package/src/components/ui/drawer/DrawerContent.vue +0 -28
- package/src/components/ui/drawer/DrawerDescription.vue +0 -20
- package/src/components/ui/drawer/DrawerFooter.vue +0 -14
- package/src/components/ui/drawer/DrawerHeader.vue +0 -14
- package/src/components/ui/drawer/DrawerOverlay.vue +0 -18
- package/src/components/ui/drawer/DrawerTitle.vue +0 -20
- package/src/components/ui/drawer/index.ts +0 -8
- package/src/components/ui/dropdown-menu/DropdownMenu.vue +0 -14
- package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -40
- package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -44
- package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -11
- package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -28
- package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -24
- package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -19
- package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -40
- package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -22
- package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -14
- package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -19
- package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -36
- package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -33
- package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -13
- package/src/components/ui/dropdown-menu/index.ts +0 -16
- package/src/components/ui/hover-card/HoverCard.vue +0 -14
- package/src/components/ui/hover-card/HoverCardContent.vue +0 -41
- package/src/components/ui/hover-card/HoverCardTrigger.vue +0 -11
- package/src/components/ui/hover-card/index.ts +0 -3
- package/src/components/ui/index.ts +0 -41
- package/src/components/ui/input/Input.vue +0 -24
- package/src/components/ui/input/index.ts +0 -1
- package/src/components/ui/label/Label.vue +0 -27
- package/src/components/ui/label/index.ts +0 -1
- package/src/components/ui/multi-select/MultiSelect.vue +0 -141
- package/src/components/ui/multi-select/index.ts +0 -7
- package/src/components/ui/notification/Notification.vue +0 -85
- package/src/components/ui/notification/index.ts +0 -1
- package/src/components/ui/number-field/NumberField.vue +0 -23
- package/src/components/ui/number-field/NumberFieldContent.vue +0 -14
- package/src/components/ui/number-field/NumberFieldDecrement.vue +0 -25
- package/src/components/ui/number-field/NumberFieldIncrement.vue +0 -25
- package/src/components/ui/number-field/NumberFieldInput.vue +0 -8
- package/src/components/ui/number-field/index.ts +0 -5
- package/src/components/ui/popover/Popover.vue +0 -15
- package/src/components/ui/popover/PopoverContent.vue +0 -61
- package/src/components/ui/popover/PopoverTrigger.vue +0 -11
- package/src/components/ui/popover/index.ts +0 -3
- package/src/components/ui/progress/Progress.vue +0 -39
- package/src/components/ui/progress/index.ts +0 -1
- package/src/components/ui/radio-group/RadioGroup.vue +0 -25
- package/src/components/ui/radio-group/RadioGroupItem.vue +0 -39
- package/src/components/ui/radio-group/index.ts +0 -2
- package/src/components/ui/scroll-area/ScrollArea.vue +0 -29
- package/src/components/ui/scroll-area/ScrollBar.vue +0 -30
- package/src/components/ui/scroll-area/index.ts +0 -2
- package/src/components/ui/scroll-pane/ScrollPane.vue +0 -25
- package/src/components/ui/scroll-pane/ScrollPaneHeader.vue +0 -75
- package/src/components/ui/scroll-pane/index.ts +0 -2
- package/src/components/ui/select/Select.vue +0 -15
- package/src/components/ui/select/SelectContent.vue +0 -57
- package/src/components/ui/select/SelectGroup.vue +0 -19
- package/src/components/ui/select/SelectItem.vue +0 -47
- package/src/components/ui/select/SelectItemText.vue +0 -11
- package/src/components/ui/select/SelectLabel.vue +0 -13
- package/src/components/ui/select/SelectScrollDownButton.vue +0 -24
- package/src/components/ui/select/SelectScrollUpButton.vue +0 -24
- package/src/components/ui/select/SelectSeparator.vue +0 -17
- package/src/components/ui/select/SelectTrigger.vue +0 -45
- package/src/components/ui/select/SelectValue.vue +0 -11
- package/src/components/ui/select/index.ts +0 -11
- package/src/components/ui/separator/Separator.vue +0 -35
- package/src/components/ui/separator/index.ts +0 -1
- package/src/components/ui/sheet/Sheet.vue +0 -14
- package/src/components/ui/sheet/SheetClose.vue +0 -11
- package/src/components/ui/sheet/SheetContent.vue +0 -56
- package/src/components/ui/sheet/SheetDescription.vue +0 -22
- package/src/components/ui/sheet/SheetFooter.vue +0 -19
- package/src/components/ui/sheet/SheetHeader.vue +0 -16
- package/src/components/ui/sheet/SheetTitle.vue +0 -22
- package/src/components/ui/sheet/SheetTrigger.vue +0 -11
- package/src/components/ui/sheet/index.ts +0 -31
- package/src/components/ui/skeleton/Skeleton.vue +0 -14
- package/src/components/ui/skeleton/index.ts +0 -1
- package/src/components/ui/slider/Slider.vue +0 -67
- package/src/components/ui/slider/index.ts +0 -1
- package/src/components/ui/switch/Switch.vue +0 -37
- package/src/components/ui/switch/index.ts +0 -1
- package/src/components/ui/table/Table.vue +0 -16
- package/src/components/ui/table/TableBody.vue +0 -14
- package/src/components/ui/table/TableCaption.vue +0 -14
- package/src/components/ui/table/TableCell.vue +0 -14
- package/src/components/ui/table/TableEmpty.vue +0 -39
- package/src/components/ui/table/TableFooter.vue +0 -16
- package/src/components/ui/table/TableHead.vue +0 -21
- package/src/components/ui/table/TableHeader.vue +0 -14
- package/src/components/ui/table/TableRow.vue +0 -21
- package/src/components/ui/table/index.ts +0 -9
- package/src/components/ui/tabs/Tabs.vue +0 -15
- package/src/components/ui/tabs/TabsContent.vue +0 -22
- package/src/components/ui/tabs/TabsIndicator.vue +0 -22
- package/src/components/ui/tabs/TabsList.vue +0 -25
- package/src/components/ui/tabs/TabsTrigger.vue +0 -29
- package/src/components/ui/tabs/index.ts +0 -5
- package/src/components/ui/tags-input/TagsInput.vue +0 -22
- package/src/components/ui/tags-input/TagsInputInput.vue +0 -19
- package/src/components/ui/tags-input/TagsInputItem.vue +0 -22
- package/src/components/ui/tags-input/TagsInputItemDelete.vue +0 -24
- package/src/components/ui/tags-input/TagsInputItemText.vue +0 -19
- package/src/components/ui/tags-input/index.ts +0 -5
- package/src/components/ui/textarea/Textarea.vue +0 -24
- package/src/components/ui/textarea/index.ts +0 -1
- package/src/components/ui/toast/Toast.vue +0 -57
- package/src/components/ui/toast/ToastAction.vue +0 -30
- package/src/components/ui/toast/ToastClose.vue +0 -31
- package/src/components/ui/toast/ToastDescription.vue +0 -25
- package/src/components/ui/toast/ToastTitle.vue +0 -25
- package/src/components/ui/toast/Toaster.vue +0 -31
- package/src/components/ui/toast/index.ts +0 -8
- package/src/components/ui/toast/use-toast.ts +0 -136
- package/src/components/ui/toggle/Toggle.vue +0 -35
- package/src/components/ui/toggle/index.ts +0 -27
- package/src/components/ui/toggle-group/ToggleGroup.vue +0 -34
- package/src/components/ui/toggle-group/ToggleGroupItem.vue +0 -35
- package/src/components/ui/toggle-group/index.ts +0 -2
- package/src/components/ui/tooltip/Tooltip.vue +0 -14
- package/src/components/ui/tooltip/TooltipContent.vue +0 -31
- package/src/components/ui/tooltip/TooltipProvider.vue +0 -11
- package/src/components/ui/tooltip/TooltipTrigger.vue +0 -11
- package/src/components/ui/tooltip/index.ts +0 -4
- package/src/composables/glass/index.ts +0 -8
- package/src/composables/glass/useGlassRenderer.ts +0 -252
- package/src/composables/glass/webgl/frostShader.ts +0 -221
- package/src/composables/glass/webgpu/glassShader.wgsl +0 -173
- package/src/composables/index.ts +0 -32
- package/src/composables/infinite-scroll/index.ts +0 -2
- package/src/composables/infinite-scroll/types.ts +0 -25
- package/src/composables/infinite-scroll/useInfiniteScroll.ts +0 -101
- package/src/composables/interaction/index.ts +0 -5
- package/src/composables/interaction/useHeightTransition.ts +0 -82
- package/src/composables/interaction/useHoverPopover.ts +0 -64
- package/src/composables/interaction/useHoverToggle.ts +0 -103
- package/src/composables/interaction/useLeaveTimer.ts +0 -17
- package/src/composables/interaction/useTouchGate.ts +0 -207
- package/src/composables/pagination/index.ts +0 -2
- package/src/composables/pagination/useOffsetPagination.ts +0 -70
- package/src/composables/prng.ts +0 -32
- package/src/composables/useCharSplit.ts +0 -31
- package/src/composables/useClipboard.ts +0 -46
- package/src/composables/useGlobalDark.ts +0 -61
- package/src/composables/useKeyboardShortcuts.ts +0 -205
- package/src/composables/useWatercolorBlob.ts +0 -136
- package/src/composables/virtual/index.ts +0 -22
- package/src/composables/virtual/useVirtualSectionWindow.ts +0 -338
- package/src/composables/virtual/useWindowedStore.ts +0 -86
- package/src/composables/virtual/virtualSectionLayout.ts +0 -212
- package/src/index.ts +0 -9
- package/src/styles/scroll-pane.css +0 -10
- package/src/utils/cn.ts +0 -6
- /package/{src/components/custom/confirm-dialog/index.ts → dist/components/custom/confirm-dialog/index.d.ts} +0 -0
- /package/{src/components/custom/controls/index.ts → dist/components/custom/controls/index.d.ts} +0 -0
- /package/{src/components/custom/expandable-container/index.ts → dist/components/custom/expandable-container/index.d.ts} +0 -0
- /package/{src/components/custom/icon-tooltip/index.ts → dist/components/custom/icon-tooltip/index.d.ts} +0 -0
- /package/{src/components/custom/infinite-scroll/composables/index.ts → dist/components/custom/infinite-scroll/composables/index.d.ts} +0 -0
- /package/{src/components/custom/infinite-scroll/index.ts → dist/components/custom/infinite-scroll/index.d.ts} +0 -0
- /package/{src/components/custom/search/composables/index.ts → dist/components/custom/search/composables/index.d.ts} +0 -0
- /package/{src/components/custom/search/index.ts → dist/components/custom/search/index.d.ts} +0 -0
- /package/{src/components/custom/tabs/index.ts → dist/components/custom/tabs/index.d.ts} +0 -0
- /package/{src/components/custom/typewriter/composables/index.ts → dist/components/custom/typewriter/composables/index.d.ts} +0 -0
- /package/{src/components/custom/typewriter/index.ts → dist/components/custom/typewriter/index.d.ts} +0 -0
- /package/{src/components/ui/data-table/index.ts → dist/components/ui/data-table/index.d.ts} +0 -0
- /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
|
@@ -0,0 +1,1495 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* tokens.css — Unified design tokens for @mkbabb/glass-ui
|
|
3
|
+
*
|
|
4
|
+
* Library default identity: warm-cream + muted-black, 13-stop per-section jewel
|
|
5
|
+
* palette, viz-basis colors (Fourier red / Chebyshev blue / Legendre purple),
|
|
6
|
+
* cartoon offset shadows, 0.625rem base radius, paper-and-glass forward.
|
|
7
|
+
*
|
|
8
|
+
* Structural tokens (durations, easings, springs, z-index, focus ring,
|
|
9
|
+
* interactive scales) are stable across consumers. Visual tokens (colors,
|
|
10
|
+
* shadows, radii, grain opacities) are consumer-overridable.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
:root {
|
|
14
|
+
/* ═══════════════════════════════════════════════
|
|
15
|
+
§0 THEME BRIDGE FALLBACKS
|
|
16
|
+
|
|
17
|
+
theme.css uses these non-Tailwind names to register v4 utility
|
|
18
|
+
namespaces without self-referential @theme variables. The public
|
|
19
|
+
runtime tokens remain --font-*, --leading-*, and --tracking-* in
|
|
20
|
+
typography.css.
|
|
21
|
+
═══════════════════════════════════════════════ */
|
|
22
|
+
--font-stack-display: "Fraunces", Georgia, serif;
|
|
23
|
+
--font-stack-serif: "Computer Modern Serif", "Latin Modern Roman", "CMU Serif", Georgia, serif;
|
|
24
|
+
--font-stack-sans: "Helvetica Neue", "Arial Nova", Arial, system-ui, sans-serif;
|
|
25
|
+
/* AC.W6b (v1.5.0) — self-hosted Fira Code engages by default for
|
|
26
|
+
every glass-ui consumer. The calibrated "Fira Code Fallback"
|
|
27
|
+
face (declared in typography.css) wraps the system mono stack
|
|
28
|
+
with metric overrides so the `font-display: swap` window is
|
|
29
|
+
geometry-neutral. */
|
|
30
|
+
--font-stack-mono: "Fira Code", "Fira Code Fallback", "Fira Mono", monospace;
|
|
31
|
+
|
|
32
|
+
--type-leading-micro: 1.2;
|
|
33
|
+
--type-leading-caption: 1.3;
|
|
34
|
+
--type-leading-small: 1.4;
|
|
35
|
+
--type-leading-body: 1.5;
|
|
36
|
+
--type-leading-prose: 1.618;
|
|
37
|
+
--type-leading-heading: 1.2;
|
|
38
|
+
--type-leading-display: 1.1;
|
|
39
|
+
|
|
40
|
+
--type-tracking-tight: -0.025em;
|
|
41
|
+
--type-tracking-snug: -0.01em;
|
|
42
|
+
--type-tracking-normal: 0;
|
|
43
|
+
--type-tracking-wide: 0.025em;
|
|
44
|
+
--type-tracking-wider: 0.05em;
|
|
45
|
+
--type-tracking-caps: 0.1em;
|
|
46
|
+
|
|
47
|
+
/* ═══════════════════════════════════════════════
|
|
48
|
+
§1 DURATION
|
|
49
|
+
═══════════════════════════════════════════════ */
|
|
50
|
+
--duration-instant: 0.1s;
|
|
51
|
+
--duration-fast: 0.2s;
|
|
52
|
+
--duration-normal: 0.3s;
|
|
53
|
+
--duration-slow: 0.45s;
|
|
54
|
+
--duration-panel: 0.55s;
|
|
55
|
+
--duration-xl: 1s;
|
|
56
|
+
--duration-xxl: 1.5s;
|
|
57
|
+
--duration-shimmer-fast: 3s;
|
|
58
|
+
--duration-shimmer: 5s;
|
|
59
|
+
/* Sparkle micro-event — primary-CTA disco-grain sparkle sweep, success
|
|
60
|
+
affirmations. R5 vocab.γ gap row 3 (single-site at dock.css:735 today,
|
|
61
|
+
reserved for J.W2.7 §17 audacious-CTA buildout). */
|
|
62
|
+
--duration-sparkle: 600ms;
|
|
63
|
+
|
|
64
|
+
/* AH.W5-e (FA-8 §4d) — motion-duration + staged-reveal canon.
|
|
65
|
+
|
|
66
|
+
Six duration tokens + three delay tokens promoted from raw literals
|
|
67
|
+
at speedtest's celebratory-reveal SFCs (SpeedtestResults, ThankYou,
|
|
68
|
+
ResultStack, CompleteBadge). Unified under the `--motion-*`
|
|
69
|
+
namespace (parallel to `--motion-ease-*`) so all motion tokens
|
|
70
|
+
cluster at one canon — duration + easing arm together. */
|
|
71
|
+
|
|
72
|
+
/* Staged-entrance pairing — opacity + transform Vue <Transition> arms
|
|
73
|
+
in the celebratory headline + result-row reveals. Partners with
|
|
74
|
+
`--motion-ease-staged-entrance` / `--motion-ease-overshoot`. */
|
|
75
|
+
--motion-duration-staged: 320ms;
|
|
76
|
+
|
|
77
|
+
/* One-shot celebratory shimmer — gold-headline shimmer animation
|
|
78
|
+
duration + staging delay. Shared canon so the speedtest results
|
|
79
|
+
headline and the thank-you headline stay in lockstep. */
|
|
80
|
+
--motion-duration-complete-shimmer: 2.4s;
|
|
81
|
+
--motion-delay-complete-shimmer: 220ms;
|
|
82
|
+
/* AJ.W2-ζ canon checkpoint — the gold-headline shimmer at
|
|
83
|
+
CompleteHeadline + ThankYou reads these two tokens under a
|
|
84
|
+
one-shot CSS animation. The gradient (background-size: 240% 100%
|
|
85
|
+
with --color-gold-light at 46%), the @keyframes
|
|
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. */
|
|
97
|
+
|
|
98
|
+
/* CompleteBadge staged-reveal cluster — the disc / ring / check curve
|
|
99
|
+
fires at three asymmetric durations + delays per the A4-AF staged-
|
|
100
|
+
variety design intent. Promoting the magic numbers makes the
|
|
101
|
+
staged-variety visible at the canon. */
|
|
102
|
+
--motion-duration-badge-disc: 420ms;
|
|
103
|
+
--motion-duration-badge-ring: 560ms;
|
|
104
|
+
--motion-duration-badge-check: 380ms;
|
|
105
|
+
--motion-delay-badge-disc: 80ms;
|
|
106
|
+
--motion-delay-badge-ring: 220ms;
|
|
107
|
+
--motion-delay-badge-check: 460ms;
|
|
108
|
+
|
|
109
|
+
/* AJ-W4-κ — staggered-reveal increment canon (per A5 §8.9). Promotes
|
|
110
|
+
the scattered per-consumer constants
|
|
111
|
+
(`STATS_CARD_STAGGER_MS = 40` in MetricGaugeCards,
|
|
112
|
+
`BAR_STAGGER_MS = 80` in DistributionChart,
|
|
113
|
+
`SERIES_STAGGER_MS = 120` in TimeSeriesChart,
|
|
114
|
+
`useStagger` default 80ms) to one shared canon so a per-row /
|
|
115
|
+
per-cell / per-bar cascade across consumer surfaces reads at one
|
|
116
|
+
of three named tiers.
|
|
117
|
+
|
|
118
|
+
The three tiers are perceptually distinct registers:
|
|
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. */
|
|
146
|
+
--motion-stagger-tight: 40ms;
|
|
147
|
+
--motion-stagger-default: 80ms;
|
|
148
|
+
--motion-stagger-relaxed: 120ms;
|
|
149
|
+
|
|
150
|
+
/* ═══════════════════════════════════════════════
|
|
151
|
+
§2 EASING — Spring curves via linear()
|
|
152
|
+
|
|
153
|
+
Generated from `scripts/regen-spring-tokens.mjs` — DO NOT hand-edit.
|
|
154
|
+
To tune a spring: edit the PRESETS table in the script and re-run
|
|
155
|
+
`node scripts/regen-spring-tokens.mjs`. The script invokes
|
|
156
|
+
`springLinearStops()` from `@mkbabb/keyframes.js` which solves the
|
|
157
|
+
analytic second-order damped harmonic oscillator and emits CSS
|
|
158
|
+
`linear()` stops; this is the single source of truth tying each
|
|
159
|
+
(response, ζ) pair to its serialized curve.
|
|
160
|
+
|
|
161
|
+
iOS-canonical (response, dampingFraction) per AL-X4 §3:
|
|
162
|
+
smooth: (0.50s, ζ=0.86) — gentle settle, sub-perceptual overshoot ~0.5%
|
|
163
|
+
snappy: (0.35s, ζ=0.85) — quick crisp, micro-overshoot
|
|
164
|
+
bouncy: (0.50s, ζ=0.65) — emphatic overshoot ~7%
|
|
165
|
+
gentle: (0.70s, ζ=1.00) — patient critically-damped
|
|
166
|
+
|
|
167
|
+
Note on `smooth`: at ζ=0.86 the analytic solver produces a peak
|
|
168
|
+
of 1.00498 (+0.5%) at the 24% slot — mathematically present but
|
|
169
|
+
sub-perceptual. I keep ζ=0.86 rather than promoting to ζ=1.0
|
|
170
|
+
because true critical damping is `gentle`'s register, and
|
|
171
|
+
`smooth` wants a slightly faster visual settle than `gentle`'s
|
|
172
|
+
patient curve. The 0.5% peak does not read as overshoot to the
|
|
173
|
+
eye but does narrowly distinguish `smooth` from `gentle`.
|
|
174
|
+
═══════════════════════════════════════════════ */
|
|
175
|
+
--spring-smooth: linear(0, 0.09804 2.041%, 0.29288 4.082%, 0.49447 6.122%, 0.66436 8.163%, 0.79208 10.204%, 0.88050 12.245%, 0.93754 14.286%, 0.97182 16.327%, 0.99083 18.367%, 1.00027 20.408%, 1.00413 22.449%, 1.00502 24.490%, 1.00453 26.531%, 1.00355 28.571%, 1.00254 30.612%, 1.00169 32.653%, 1.00105 34.694%, 1.00060 36.735%, 1.00031 38.776%, 1.00014 40.816%, 1.00005 42.857%, 1.00000 44.898%, 1.00000 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
|
|
176
|
+
--spring-snappy: linear(0, 0.10438 2.041%, 0.32622 4.082%, 0.56668 6.122%, 0.77153 8.163%, 0.91961 10.204%, 1.01073 12.245%, 1.05549 14.286%, 1.06804 16.327%, 1.06171 18.367%, 1.04686 20.408%, 1.03044 22.449%, 1.01629 24.490%, 1.00596 26.531%, 0.99954 28.571%, 0.99633 30.612%, 0.99537 32.653%, 0.99575 34.694%, 0.99674 36.735%, 0.99786 38.776%, 0.99884 40.816%, 0.99956 42.857%, 1.00001 44.898%, 1.00024 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
|
|
177
|
+
--spring-bouncy: linear(0, 0.11105 2.041%, 0.36430 4.082%, 0.65496 6.122%, 0.90929 8.163%, 1.08828 10.204%, 1.18289 12.245%, 1.20482 14.286%, 1.17641 16.327%, 1.12214 18.367%, 1.06276 20.408%, 1.01239 22.449%, 0.97809 24.490%, 0.96099 26.531%, 0.95826 28.571%, 0.96514 30.612%, 0.97666 32.653%, 0.98873 34.694%, 0.99867 36.735%, 1.00520 38.776%, 1.00825 40.816%, 1.00847 42.857%, 1.00686 44.898%, 1.00443 46.939%, 1.00199 48.980%, 1.00004 51.020%, 0.99880 53.061%, 0.99827 55.102%, 0.99829 57.143%, 0.99866 59.184%, 0.99916 61.224%, 0.99966 63.265%, 1.00004 65.306%, 1.00027 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
|
|
178
|
+
--spring-gentle: linear(0, 0.09415 2.041%, 0.27374 4.082%, 0.45506 6.122%, 0.60779 8.163%, 0.72570 10.204%, 0.81213 12.245%, 0.87336 14.286%, 0.91570 16.327%, 0.94445 18.367%, 0.96371 20.408%, 0.97645 22.449%, 0.98481 24.490%, 0.99025 26.531%, 0.99377 28.571%, 0.99604 30.612%, 0.99749 32.653%, 0.99841 34.694%, 0.99900 36.735%, 0.99937 38.776%, 0.99961 40.816%, 0.99975 42.857%, 0.99985 44.898%, 1.00000 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
|
|
179
|
+
|
|
180
|
+
/* Core cubic-bezier (exits, fallbacks, non-spring uses) */
|
|
181
|
+
--motion-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
|
|
182
|
+
--motion-ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
183
|
+
--motion-ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
184
|
+
--motion-ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
|
|
185
|
+
|
|
186
|
+
--ease-standard: var(--motion-ease-standard);
|
|
187
|
+
--ease-out: var(--motion-ease-out);
|
|
188
|
+
--ease-in: var(--motion-ease-in);
|
|
189
|
+
--ease-out-expo: var(--motion-ease-out-expo);
|
|
190
|
+
|
|
191
|
+
/* Apple-inspired — micro-interactions, switches, dock hover */
|
|
192
|
+
--motion-ease-apple: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
193
|
+
--motion-ease-apple-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
194
|
+
|
|
195
|
+
--ease-apple: var(--motion-ease-apple);
|
|
196
|
+
--ease-apple-spring: var(--motion-ease-apple-spring);
|
|
197
|
+
--ease-spring: var(--spring-snappy);
|
|
198
|
+
--ease-decelerate: var(--ease-out);
|
|
199
|
+
--ease-accelerate: var(--ease-in);
|
|
200
|
+
|
|
201
|
+
/* ═══════════════════════════════════════════════
|
|
202
|
+
§2.A AMBIENT MOTION — Pulse aura tokens (AB.W3.T1)
|
|
203
|
+
|
|
204
|
+
Parameterise the breathing rhythm for `<Pulse variant="aura">`
|
|
205
|
+
so consumers don't re-author the cycle per site. The 6s
|
|
206
|
+
duration is the canon ambient-pulse rate (matches the dial's
|
|
207
|
+
idle breathing). Scale 1.0 ↔ 1.15 reads as a quiet halo at
|
|
208
|
+
intensity="normal"; the Pulse component remaps min/max from
|
|
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.
|
|
219
|
+
═══════════════════════════════════════════════ */
|
|
220
|
+
--animate-ambient-pulse-duration: 6s;
|
|
221
|
+
--animate-ambient-pulse-scale-min: 1.0;
|
|
222
|
+
--animate-ambient-pulse-scale-max: 1.15;
|
|
223
|
+
--animate-ambient-pulse-easing: var(--ease-apple);
|
|
224
|
+
|
|
225
|
+
/* Aura opacity range — keep the trough visible (the colour reads
|
|
226
|
+
at every phase of the cycle). Consumers may override per site
|
|
227
|
+
(e.g. the completion one-shot uses min=0 to fade out). */
|
|
228
|
+
--pulse-aura-opacity-min: 0.55;
|
|
229
|
+
--pulse-aura-opacity-max: 0.95;
|
|
230
|
+
|
|
231
|
+
/* ═══════════════════════════════════════════════
|
|
232
|
+
§2.B SECTIONED PROGRESS — phase-bus rail (AB.W3.T2)
|
|
233
|
+
|
|
234
|
+
The sectioned `<Progress variant="sectioned">` exposes one
|
|
235
|
+
height knob + one track tint knob. Defaults size the rail at
|
|
236
|
+
0.875rem (14px) — the W3 spec minimum (≥ 14px mobile, ≥ 18px
|
|
237
|
+
desktop). Consumers override the height per breakpoint via the
|
|
238
|
+
same token name on the consumer-side surface.
|
|
239
|
+
|
|
240
|
+
The bar reads as a recessed glass channel: inner top
|
|
241
|
+
catch-light + lower inner shadow + small outer drop. The
|
|
242
|
+
depth lives entirely in the Progress.vue scoped block; this
|
|
243
|
+
token only parameterises the rail BACKGROUND and HEIGHT —
|
|
244
|
+
depth shadows compose from the existing --shadow-color rung.
|
|
245
|
+
═══════════════════════════════════════════════ */
|
|
246
|
+
--progress-sectioned-height: 0.875rem;
|
|
247
|
+
--progress-sectioned-track: var(--secondary);
|
|
248
|
+
|
|
249
|
+
/* ═══════════════════════════════════════════════
|
|
250
|
+
§2.C ANIMATION EXPRESSIVENESS — AI.W4 grammar
|
|
251
|
+
(publisher-side; consumer-side companions live in speedtest)
|
|
252
|
+
|
|
253
|
+
Three idiom families compose the W4 wave:
|
|
254
|
+
|
|
255
|
+
• Progress lifecycle (M.1) — the under-meter / survey progress bar
|
|
256
|
+
rides an intake pulse on rising-edge, a crescendo brightening at
|
|
257
|
+
≥85%, and a one-shot discharge flash at 100%. The crescendo is a
|
|
258
|
+
typed CSS variable (`@property --progress-crescendo`) so the
|
|
259
|
+
indicator's leading-edge gradient stop interpolates smoothly.
|
|
260
|
+
|
|
261
|
+
• Chassis phase-tint companion (M.1) — the `--phase-color` cross-
|
|
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. */
|
|
281
|
+
|
|
282
|
+
/* Progress lifecycle — typed crescendo + segment-local durations */
|
|
283
|
+
--motion-duration-progress-intake: 220ms; /* rising-edge pulse */
|
|
284
|
+
--motion-duration-progress-crescendo: 240ms; /* leading-edge brighten */
|
|
285
|
+
--motion-duration-progress-indeterminate: 4s; /* indeterminate sweep period */
|
|
286
|
+
|
|
287
|
+
/* Chassis depth-of-tint peak — the amount `--phase-tint-amount`
|
|
288
|
+
interpolates toward when a phase is active. Subtle by intent;
|
|
289
|
+
a 6% color-mix reads as "warmth toward the phase" without
|
|
290
|
+
overwhelming the chassis chrome's resting register. */
|
|
291
|
+
--phase-tint-peak: 6%;
|
|
292
|
+
|
|
293
|
+
/* Audacious button press-ripple — geometry + duration. The ripple
|
|
294
|
+
radius caps at 12rem so an oversized button doesn't paint a
|
|
295
|
+
transparent halo beyond its bounds (the parent's `overflow:
|
|
296
|
+
hidden` clips the visible region; the cap keeps the gradient
|
|
297
|
+
falloff well-defined). */
|
|
298
|
+
--ripple-radius-max: 12rem;
|
|
299
|
+
--motion-duration-ripple: 340ms;
|
|
300
|
+
|
|
301
|
+
/* Skeleton breath variant — the M.3 "known-imminent" loading
|
|
302
|
+
register. 6s cycle (the canon ambient rate) so a known-imminent
|
|
303
|
+
skeleton breathes in lockstep with the dial and the Pulse aura.
|
|
304
|
+
Coexists with the 1.5s shimmer (sliding gradient) and the
|
|
305
|
+
Tailwind animate-pulse (2s, short-wait) variants — distinct
|
|
306
|
+
temporal registers per use-case. */
|
|
307
|
+
--skeleton-breath-duration: 6s;
|
|
308
|
+
|
|
309
|
+
/* ═══════════════════════════════════════════════
|
|
310
|
+
§3 Z-INDEX SCALE
|
|
311
|
+
═══════════════════════════════════════════════ */
|
|
312
|
+
/* V.W2 T12 — Aurora background tier (sits behind --z-background).
|
|
313
|
+
Consumed by `<Aurora>` in speedtest's App.vue (`-z-10` literal today). */
|
|
314
|
+
--z-behind: -10;
|
|
315
|
+
--z-background: 0;
|
|
316
|
+
--z-content: 10;
|
|
317
|
+
--z-controls: 20;
|
|
318
|
+
--z-bar: 30;
|
|
319
|
+
--z-header: 35;
|
|
320
|
+
--z-dock: 40;
|
|
321
|
+
--z-panel: 45;
|
|
322
|
+
--z-overlay: 50;
|
|
323
|
+
--z-hovercard: 120;
|
|
324
|
+
--z-tooltip: 120;
|
|
325
|
+
--z-popover: 130;
|
|
326
|
+
--z-modal: 140;
|
|
327
|
+
--z-fullscreen: 150;
|
|
328
|
+
--z-toast: 160;
|
|
329
|
+
--z-toggle: 999;
|
|
330
|
+
--z-max: 9999;
|
|
331
|
+
--z-debug: 99999;
|
|
332
|
+
|
|
333
|
+
/* ═══════════════════════════════════════════════
|
|
334
|
+
§4 BORDER RADIUS — 0.625rem base (warm-cream identity)
|
|
335
|
+
═══════════════════════════════════════════════ */
|
|
336
|
+
--radius: 0.625rem;
|
|
337
|
+
--radius-xs: 4px;
|
|
338
|
+
--radius-sm: 4px;
|
|
339
|
+
--radius-md: 6px;
|
|
340
|
+
--radius-lg: var(--radius);
|
|
341
|
+
--radius-xl: 12px;
|
|
342
|
+
--radius-2xl: 1rem;
|
|
343
|
+
--radius-pill: 9999px;
|
|
344
|
+
|
|
345
|
+
/* Semantic aliases */
|
|
346
|
+
--radius-card: var(--radius-2xl);
|
|
347
|
+
--radius-panel: var(--radius-xl);
|
|
348
|
+
--radius-dialog: var(--radius-2xl);
|
|
349
|
+
--radius-input: var(--radius);
|
|
350
|
+
--radius-button: var(--radius);
|
|
351
|
+
--radius-badge: var(--radius-pill);
|
|
352
|
+
--radius-dock: var(--radius-pill);
|
|
353
|
+
/* Tooltip alias — semantic handle for the lg rung; consumed by W2 ui/tooltip
|
|
354
|
+
migration (currently inline `rounded-lg`). R5 vocab.γ gap row 5. */
|
|
355
|
+
--radius-tooltip: var(--radius-lg);
|
|
356
|
+
|
|
357
|
+
/* ═══════════════════════════════════════════════
|
|
358
|
+
§5 COLOR PALETTE — Warm cream / muted black
|
|
359
|
+
|
|
360
|
+
Neutral scale: perceptually-uniform L* steps at hue 48 (warm paper).
|
|
361
|
+
Each pair visibly distinct at 20px viewing distance.
|
|
362
|
+
0 → 1 : 3 L (page → soft field)
|
|
363
|
+
1 → 2 : 5 L (soft field → chip / tab-inactive)
|
|
364
|
+
2 → 3 : 8 L (chip → hover / highlight)
|
|
365
|
+
3 → 4 : 12 L (highlight → subtle border)
|
|
366
|
+
4 → 5 : 25 L (border → muted text, contrast jump)
|
|
367
|
+
5 → 6 : 10 L (muted text → strong-muted text, secondary register)
|
|
368
|
+
|
|
369
|
+
Semantic aliases re-point into the scale — no back-compat shims.
|
|
370
|
+
═══════════════════════════════════════════════ */
|
|
371
|
+
--neutral-0: hsl(48 12% 98%); /* L 98 — page surface */
|
|
372
|
+
--neutral-1: hsl(48 10% 95%); /* L 95 — soft field bg */
|
|
373
|
+
--neutral-2: hsl(48 9% 90%); /* L 90 — chip / tab-inactive bg */
|
|
374
|
+
--neutral-3: hsl(48 8% 82%); /* L 82 — hover / highlight bg */
|
|
375
|
+
--neutral-4: hsl(48 7% 70%); /* L 70 — subtle border */
|
|
376
|
+
--neutral-5: hsl(48 6% 40%); /* L 40 — muted text (WCAG AA: 5.23:1 vs L98 page / 4.91:1 vs L95 muted) */
|
|
377
|
+
/* W7-α' (AK-FD1) — strong-muted text rung. One principled ladder step
|
|
378
|
+
(10 L darker, the 5→6 cadence above) past muted text toward
|
|
379
|
+
--foreground (L10). Sits at the 1/3 point of the L40→L10 muted→primary
|
|
380
|
+
gap: legible secondary text that reads less-faint than muted but not as
|
|
381
|
+
assertive as primary. By-COLOUR per the canon (a neutral step, not an
|
|
382
|
+
alpha mute); hue held at 48, sat nudged 6→7 toward --foreground's 10.
|
|
383
|
+
WCAG AA: 7.79:1 vs L98 page / 7.31:1 vs L95 muted (cf. neutral-5's
|
|
384
|
+
5.23:1) — comfortably above the 4.5:1 body floor. */
|
|
385
|
+
--neutral-6: hsl(48 7% 30%); /* L 30 — strong-muted text (secondary register) */
|
|
386
|
+
|
|
387
|
+
--background: var(--neutral-0);
|
|
388
|
+
--foreground: hsl(24 10% 10%);
|
|
389
|
+
--card: var(--neutral-0);
|
|
390
|
+
--card-foreground: var(--foreground);
|
|
391
|
+
--popover: var(--neutral-0);
|
|
392
|
+
--popover-foreground: var(--foreground);
|
|
393
|
+
|
|
394
|
+
--muted: var(--neutral-1);
|
|
395
|
+
--muted-foreground: var(--neutral-5);
|
|
396
|
+
/* W7-α' (AK-FD1) — one rung less-faint than --muted-foreground for
|
|
397
|
+
secondary text that reads too-faint at the muted rung over resting
|
|
398
|
+
glass (CardDescription). By-colour neutral step, not alpha. */
|
|
399
|
+
--muted-foreground-strong: var(--neutral-6);
|
|
400
|
+
--secondary: var(--neutral-2);
|
|
401
|
+
--secondary-foreground: var(--foreground);
|
|
402
|
+
--accent: var(--neutral-3);
|
|
403
|
+
--accent-foreground: var(--foreground);
|
|
404
|
+
|
|
405
|
+
--border: var(--neutral-4);
|
|
406
|
+
--input: var(--neutral-4);
|
|
407
|
+
|
|
408
|
+
--primary: hsl(24 10% 10%);
|
|
409
|
+
--primary-foreground: var(--neutral-0);
|
|
410
|
+
--destructive: hsl(0 72% 50%);
|
|
411
|
+
--destructive-foreground: var(--neutral-0);
|
|
412
|
+
--ring: hsl(24 10% 10%);
|
|
413
|
+
--shadow: hsl(24 10% 10%);
|
|
414
|
+
--shadow-color: var(--foreground);
|
|
415
|
+
|
|
416
|
+
/* Foreground-tint rungs — canonical handles for the 36+ raw
|
|
417
|
+
`color-mix(in srgb, var(--foreground) N%, transparent)` sites surveyed
|
|
418
|
+
in R5 axis-1. Each rung's α is named in its key (4 → 4%, 22 → 22%).
|
|
419
|
+
Auto-dark via --foreground; no explicit dark mirrors needed. R5
|
|
420
|
+
vocab.γ gap row 1. Consumers land in W2.B + W3.C. */
|
|
421
|
+
--surface-tint-4: color-mix(in srgb, var(--foreground) 4%, transparent);
|
|
422
|
+
--surface-tint-6: color-mix(in srgb, var(--foreground) 6%, transparent);
|
|
423
|
+
--surface-tint-8: color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
424
|
+
--surface-tint-10: color-mix(in srgb, var(--foreground) 10%, transparent);
|
|
425
|
+
--surface-tint-12: color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
426
|
+
--surface-tint-15: color-mix(in srgb, var(--foreground) 15%, transparent);
|
|
427
|
+
--surface-tint-18: color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
428
|
+
--surface-tint-22: color-mix(in srgb, var(--foreground) 22%, transparent);
|
|
429
|
+
--surface-tint-25: color-mix(in srgb, var(--foreground) 25%, transparent);
|
|
430
|
+
/* Higher-α rungs added at L.W5 (absorbs K R4 — 4 P1 sites whose
|
|
431
|
+
literal `color-mix(in srgb, var(--foreground) {35,40,70}%, transparent)`
|
|
432
|
+
expressions bypassed the canonical token family). See `docs/tranches/L/
|
|
433
|
+
audit/W5-A-doc-cohort-proof.md`. */
|
|
434
|
+
--surface-tint-35: color-mix(in srgb, var(--foreground) 35%, transparent);
|
|
435
|
+
--surface-tint-40: color-mix(in srgb, var(--foreground) 40%, transparent);
|
|
436
|
+
--surface-tint-70: color-mix(in srgb, var(--foreground) 70%, transparent);
|
|
437
|
+
|
|
438
|
+
/* Muted-tinted surface rungs — canonical handles for the 9 raw
|
|
439
|
+
`color-mix(in srgb, var(--muted) N%, transparent)` sites in
|
|
440
|
+
FuzzySearch / BouncyToggle / Slider scoped CSS. (AI.W5-δ — the
|
|
441
|
+
ProgressiveSidebar consumer retired at the wave; the canonical token
|
|
442
|
+
rung lives on for the remaining consumers.) Auto-dark via --muted.
|
|
443
|
+
R5 vocab.γ axis-1 row. */
|
|
444
|
+
--muted-soft: color-mix(in srgb, var(--muted) 30%, transparent);
|
|
445
|
+
--muted-medium: color-mix(in srgb, var(--muted) 50%, transparent);
|
|
446
|
+
|
|
447
|
+
/* ═══════════════════════════════════════════════
|
|
448
|
+
§6 SECTION PALETTE — 13-stop jewel tones (light)
|
|
449
|
+
═══════════════════════════════════════════════ */
|
|
450
|
+
--section-color-0: hsl(334 63% 47%); /* rose */
|
|
451
|
+
--section-color-1: hsl(272 44% 47%); /* purple */
|
|
452
|
+
--section-color-2: hsl(224 58% 46%); /* indigo */
|
|
453
|
+
--section-color-3: hsl(194 62% 36%); /* teal-cyan */
|
|
454
|
+
--section-color-4: hsl(163 46% 35%); /* forest */
|
|
455
|
+
--section-color-5: hsl(35 70% 42%); /* amber */
|
|
456
|
+
--section-color-6: hsl(6 72% 49%); /* tomato-red */
|
|
457
|
+
--section-color-7: hsl(286 46% 47%); /* violet */
|
|
458
|
+
--section-color-8: hsl(342 62% 44%); /* ruby */
|
|
459
|
+
--section-color-9: hsl(205 20% 38%); /* slate-blue */
|
|
460
|
+
--section-color-10: hsl(86 38% 36%); /* olive */
|
|
461
|
+
--section-color-11: hsl(187 58% 39%); /* ocean */
|
|
462
|
+
--section-color-12: hsl(256 44% 52%); /* periwinkle */
|
|
463
|
+
|
|
464
|
+
/* Accent colors */
|
|
465
|
+
--accent-pink: hsl(330 65% 55%);
|
|
466
|
+
--section-heading: hsl(328 60% 46%);
|
|
467
|
+
--accent-red: hsl(0 72% 50%);
|
|
468
|
+
|
|
469
|
+
/* ═══════════════════════════════════════════════
|
|
470
|
+
§6b VIZ BASIS — core brand hues
|
|
471
|
+
═══════════════════════════════════════════════ */
|
|
472
|
+
--viz-fourier: hsl(6 72% 49%);
|
|
473
|
+
--viz-chebyshev: hsl(224 58% 46%);
|
|
474
|
+
--viz-legendre: hsl(286 46% 47%);
|
|
475
|
+
--viz-amber: var(--section-color-5);
|
|
476
|
+
--viz-green: var(--section-color-4);
|
|
477
|
+
|
|
478
|
+
/* Semantic UI accents */
|
|
479
|
+
--tier-featured: hsl(45 100% 50%);
|
|
480
|
+
--tier-saved: hsl(210 100% 60%);
|
|
481
|
+
--like: hsl(0 80% 60%);
|
|
482
|
+
--success: hsl(142 71% 45%);
|
|
483
|
+
--warning: hsl(38 92% 50%);
|
|
484
|
+
--info: hsl(217 91% 60%);
|
|
485
|
+
--delete: hsl(0 70% 55%);
|
|
486
|
+
|
|
487
|
+
/* Semantic foregrounds — text/glyph atop --success/--warning/--info plates.
|
|
488
|
+
Notification.vue currently hardcodes `text-white`/`text-foreground`
|
|
489
|
+
inline; W2 migrates consumers to read these tokens. Warning carries a
|
|
490
|
+
dark glyph because the amber plate is too luminous for white. R5
|
|
491
|
+
vocab.γ gap row 4. */
|
|
492
|
+
--success-foreground: var(--neutral-0);
|
|
493
|
+
--warning-foreground: hsl(24 10% 10%);
|
|
494
|
+
--info-foreground: var(--neutral-0);
|
|
495
|
+
|
|
496
|
+
/* ═══════════════════════════════════════════════
|
|
497
|
+
§7 SHADOWS — cartoon offset is the signature
|
|
498
|
+
═══════════════════════════════════════════════ */
|
|
499
|
+
--shadow-cartoon: 3px 3px 0px 0px color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
500
|
+
--shadow-cartoon-hover: 4px 4px 0px 0px color-mix(in srgb, var(--foreground) 10%, transparent);
|
|
501
|
+
--shadow-soft: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
502
|
+
--shadow-elevated: 0 8px 24px rgba(0, 0, 0, 0.12);
|
|
503
|
+
--shadow-modal:
|
|
504
|
+
4px 4px 0px 0px color-mix(in srgb, var(--foreground) 8%, transparent),
|
|
505
|
+
0 24px 64px color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
506
|
+
|
|
507
|
+
--cartoon-shadow: var(--shadow-cartoon);
|
|
508
|
+
--cartoon-shadow-hover: var(--shadow-cartoon-hover);
|
|
509
|
+
--soft-shadow: var(--shadow-soft);
|
|
510
|
+
--elevated-shadow: var(--shadow-elevated);
|
|
511
|
+
--modal-shadow: var(--shadow-modal);
|
|
512
|
+
|
|
513
|
+
/* Elevation scale */
|
|
514
|
+
--shadow-xs: 0 1px 3px color-mix(in srgb, var(--shadow-color) 4%, transparent),
|
|
515
|
+
0 1px 2px color-mix(in srgb, var(--shadow-color) 6%, transparent);
|
|
516
|
+
--shadow-sm: 0 2px 8px color-mix(in srgb, var(--shadow-color) 6%, transparent);
|
|
517
|
+
--shadow-md: 0 4px 16px color-mix(in srgb, var(--shadow-color) 8%, transparent);
|
|
518
|
+
--shadow-lg: 0 4px 20px color-mix(in srgb, var(--shadow-color) 12%, transparent);
|
|
519
|
+
--shadow-xl: 0 8px 24px color-mix(in srgb, var(--shadow-color) 14%, transparent);
|
|
520
|
+
--shadow-2xl: 0 25px 50px -12px color-mix(in srgb, var(--shadow-color) 25%, transparent);
|
|
521
|
+
|
|
522
|
+
/* Z.W2.T3a — uniform-cast shadow rung. Offset 0 / 0, no directional
|
|
523
|
+
Y bias. Use case: dock-hosted icons (e.g. the speedtest settings
|
|
524
|
+
gear) where the surrounding dock shadow's downward cast reads as
|
|
525
|
+
a per-icon right-edge halo on the rightmost child (A2 §B7). The
|
|
526
|
+
uniform variant carries the same color-mix recipe family as the
|
|
527
|
+
sized rungs (`--shadow-md`, `--shadow-lg`) so the perceived
|
|
528
|
+
elevation is a peer, not a sibling. Consumers compose via
|
|
529
|
+
`--shadow-dock-override: var(--shadow-uniform)` per-instance, or
|
|
530
|
+
attach to per-icon-button stacks where directional cast is wrong-
|
|
531
|
+
shape. Documented in DESIGN.md token table. */
|
|
532
|
+
--shadow-uniform: 0 0 12px color-mix(in srgb, var(--shadow-color) 8%, transparent);
|
|
533
|
+
|
|
534
|
+
/* Card = soft drop plate by default. The cartoon offset is a brand-flavoured
|
|
535
|
+
decoration (a sticker look), not the canonical card shape. Consumers
|
|
536
|
+
wanting the cartoon look pass <Card surface="cartoon">, which composes the
|
|
537
|
+
`.cartoon-surface` utility (it reads --shadow-cartoon directly). R3-spec
|
|
538
|
+
§F.1, S.W4; Q.W3 Lane H. */
|
|
539
|
+
--shadow-card: var(--shadow-md);
|
|
540
|
+
--card-shadow: var(--shadow-card);
|
|
541
|
+
|
|
542
|
+
/* AI.W1-α — sticky CardHeader background. Parameterises the
|
|
543
|
+
`bg-card/60` literal value.js's PaneHeader.vue carried so the
|
|
544
|
+
glass-ui canon owns the recipe. The scroll-driven `<CardHeader
|
|
545
|
+
shrink>` choreography reads this token for its sticky-header
|
|
546
|
+
backdrop tint; consumers retune per-app by overriding the
|
|
547
|
+
variable at any ancestor. Auto-dark via `--card`. */
|
|
548
|
+
--card-header-bg: color-mix(in srgb, var(--card) 60%, transparent);
|
|
549
|
+
|
|
550
|
+
/* Dock shadows */
|
|
551
|
+
/* User 2026-05-13 (third + fourth report). The dock previously layered:
|
|
552
|
+
1) directional `0 4px 20px` drop → retired (third report; the Y-
|
|
553
|
+
offset concentrated on the pill's rounded right cap and read as
|
|
554
|
+
a right-edge halo on the rightmost child).
|
|
555
|
+
2) `0 0 0 1px` hairline outer ring → retired (fourth report; in
|
|
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). */
|
|
565
|
+
--shadow-dock: 0 0 20px color-mix(in srgb, var(--shadow-color) 14%, transparent);
|
|
566
|
+
--shadow-dock-collapsed: 0 0 12px color-mix(in srgb, var(--shadow-color) 12%, transparent);
|
|
567
|
+
--dock-shadow: var(--shadow-dock);
|
|
568
|
+
--dock-shadow-collapsed: var(--shadow-dock-collapsed);
|
|
569
|
+
|
|
570
|
+
/* Cartoon shadow color primitives (kept for tiered cartoon utilities) */
|
|
571
|
+
--shadow-cartoon-color: rgb(0 0 0 / 0.12);
|
|
572
|
+
--shadow-cartoon-color-soft: rgb(0 0 0 / 0.06);
|
|
573
|
+
|
|
574
|
+
/* Tiered cartoon shadows */
|
|
575
|
+
--shadow-cartoon-sm: -3px 2px 1px color-mix(in srgb, var(--shadow-color) 10%, transparent),
|
|
576
|
+
0 3px 1px color-mix(in srgb, var(--shadow-color) 10%, transparent),
|
|
577
|
+
-3px 3px 1px color-mix(in srgb, var(--shadow-color) 6%, transparent);
|
|
578
|
+
--shadow-cartoon-md: -4px 3px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
|
|
579
|
+
0 4px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
|
|
580
|
+
-4px 4px 2px color-mix(in srgb, var(--shadow-color) 8%, transparent);
|
|
581
|
+
--shadow-cartoon-lg: -6px 4px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
|
|
582
|
+
0 6px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
|
|
583
|
+
-6px 6px 2px color-mix(in srgb, var(--shadow-color) 8%, transparent);
|
|
584
|
+
--cartoon-shadow-sm: var(--shadow-cartoon-sm);
|
|
585
|
+
--cartoon-shadow-md: var(--shadow-cartoon-md);
|
|
586
|
+
--cartoon-shadow-lg: var(--shadow-cartoon-lg);
|
|
587
|
+
|
|
588
|
+
/* ═══════════════════════════════════════════════
|
|
589
|
+
§8 GLASSMORPHISM — Five-tier surface ladder (v0.8.0)
|
|
590
|
+
|
|
591
|
+
Tier semantics, alpha-monotonic:
|
|
592
|
+
wash ~0.30α + light blur (was `subtle`)
|
|
593
|
+
quiet ~0.50α + medium blur (the formerly missing rung)
|
|
594
|
+
resting ~0.65α + canonical blur (was `default`; the speedtest plate)
|
|
595
|
+
floating ~0.80α + heavier blur (was `elevated`)
|
|
596
|
+
overlay ~0.95α + heaviest blur (NEW; modal-over-modal)
|
|
597
|
+
|
|
598
|
+
v0.8.0 retires the four-tier `subtle | default | medium | elevated`
|
|
599
|
+
ladder outright. No legacy aliases. Consumers migrate at the same
|
|
600
|
+
breaking change. R3-spec §A.
|
|
601
|
+
═══════════════════════════════════════════════ */
|
|
602
|
+
|
|
603
|
+
/* Opacity primitives */
|
|
604
|
+
--glass-opacity-wash: 0.30;
|
|
605
|
+
--glass-opacity-quiet: 0.50;
|
|
606
|
+
--glass-opacity-resting: 0.65;
|
|
607
|
+
--glass-opacity-floating: 0.80;
|
|
608
|
+
--glass-opacity-overlay: 0.95;
|
|
609
|
+
|
|
610
|
+
/* Blur primitives. The radii here feather the dock + meter card to a
|
|
611
|
+
barely-perceptible diffusion that lets the substrate behind it bleed
|
|
612
|
+
through cleanly while keeping hero typography crisp at meter scale.
|
|
613
|
+
The resting blur sits at 12px so a glass plate reads as a diffusion
|
|
614
|
+
without consumer-side override. */
|
|
615
|
+
--glass-blur-wash-radius: 1px;
|
|
616
|
+
--glass-blur-quiet-radius: 10px;
|
|
617
|
+
--glass-blur-resting-radius: 12px;
|
|
618
|
+
--glass-blur-floating-radius: 16px;
|
|
619
|
+
--glass-blur-overlay-radius: 24px;
|
|
620
|
+
/* AJ.W2-β — dock blur lifted to 14px (was 0px at J.W3.C, was 1px
|
|
621
|
+
pre-J.W3.C). Per FD1 §4 §1.9 (AJ-time live regression P1-11):
|
|
622
|
+
"the dock should feel anchored to its surface; too much blur
|
|
623
|
+
dissociates" — but zero blur reads as "transparent-with-tint",
|
|
624
|
+
NOT as "feathered glass." The AJ-time perceptual register
|
|
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. */
|
|
641
|
+
--glass-blur-dock-radius: 11px;
|
|
642
|
+
|
|
643
|
+
--glass-blur-wash: blur(var(--glass-blur-wash-radius)) saturate(1.05);
|
|
644
|
+
--glass-blur-quiet: blur(var(--glass-blur-quiet-radius));
|
|
645
|
+
--glass-blur-resting: blur(var(--glass-blur-resting-radius)) saturate(1.05);
|
|
646
|
+
--glass-blur-floating: blur(var(--glass-blur-floating-radius)) saturate(1.4);
|
|
647
|
+
--glass-blur-overlay: blur(var(--glass-blur-overlay-radius)) saturate(1.5);
|
|
648
|
+
/* Dock blur composes blur() only — no saturate. The 14px radius
|
|
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-β). */
|
|
653
|
+
--glass-blur-dock: blur(var(--glass-blur-dock-radius));
|
|
654
|
+
|
|
655
|
+
/* Dock-specific opacity. Lighter than `resting` (0.65) so the dock reads
|
|
656
|
+
as a translucent overlay rather than a panel — backdrop bleed visible
|
|
657
|
+
through it. Consumed by `.glass-dock` via the `--glass-bg-dock` token.
|
|
658
|
+
|
|
659
|
+
AL-W3-α (T10 per A-synthesis §1.5): retune 0.32 → 0.42 paired with
|
|
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. */
|
|
665
|
+
--glass-opacity-dock: 0.42;
|
|
666
|
+
|
|
667
|
+
/* Chassis-specific opacity. Looser than `default` (0.50) so the
|
|
668
|
+
<InstrumentChassis> surface reads as glass-over-aurora at its
|
|
669
|
+
64rem-wide footprint; the default tier stays calibrated for cards.
|
|
670
|
+
Mirrors the dock-tier pattern (own opacity primitive + composed bg).
|
|
671
|
+
Light 0.28 sits in the gap between dock (0.32) and a hypothetical
|
|
672
|
+
wash tier; dark 0.36 mirrors the +0.08 step the dock takes from
|
|
673
|
+
`glass-bg-medium` (0.65) down to its own 0.32. */
|
|
674
|
+
--glass-opacity-chassis: 0.28;
|
|
675
|
+
|
|
676
|
+
/* Composed backgrounds */
|
|
677
|
+
--glass-bg-wash: color-mix(in srgb, var(--card) calc(var(--glass-opacity-wash) * 100%), transparent);
|
|
678
|
+
--glass-bg-quiet: color-mix(in srgb, var(--card) calc(var(--glass-opacity-quiet) * 100%), transparent);
|
|
679
|
+
--glass-bg-resting: color-mix(in srgb, var(--card) calc(var(--glass-opacity-resting) * 100%), transparent);
|
|
680
|
+
--glass-bg-floating: color-mix(in srgb, var(--card) calc(var(--glass-opacity-floating) * 100%), transparent);
|
|
681
|
+
--glass-bg-overlay: color-mix(in srgb, var(--card) calc(var(--glass-opacity-overlay) * 100%), transparent);
|
|
682
|
+
--glass-bg-dock: color-mix(in srgb, var(--card) calc(var(--glass-opacity-dock) * 100%), transparent);
|
|
683
|
+
--glass-bg-chassis: color-mix(in srgb, var(--card) calc(var(--glass-opacity-chassis) * 100%), transparent);
|
|
684
|
+
|
|
685
|
+
/* Composed borders — foreground-tinted */
|
|
686
|
+
--glass-border-wash: color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
687
|
+
--glass-border-quiet: color-mix(in srgb, var(--foreground) 10%, transparent);
|
|
688
|
+
--glass-border-resting: color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
689
|
+
--glass-border-floating: color-mix(in srgb, var(--foreground) 15%, transparent);
|
|
690
|
+
--glass-border-overlay: color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
691
|
+
--glass-border-dock: color-mix(in srgb, var(--foreground) 11%, transparent);
|
|
692
|
+
--glass-border: var(--glass-border-quiet);
|
|
693
|
+
--glass-border-strong: var(--glass-border-floating);
|
|
694
|
+
|
|
695
|
+
/* Shared decorative. Light grain dropped 0.035 → 0.025 in P.W1.B —
|
|
696
|
+
at the chassis scale the original alpha read as crawl over the new
|
|
697
|
+
lower-alpha chassis bg; the grain's role is texture, not reading,
|
|
698
|
+
so it sits at the perceptual floor. Dark companion drops 0.06 →
|
|
699
|
+
0.045 below to keep the soft-light blend alive without stippling. */
|
|
700
|
+
--glass-grain-opacity: 0.025;
|
|
701
|
+
--glass-grain-opacity-disco: 0.08;
|
|
702
|
+
--glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.25);
|
|
703
|
+
|
|
704
|
+
/* Hairline-accent — 0.5px catch-light + under-shadow pair.
|
|
705
|
+
Single token composes the canonical 2-stop hairline used by dock,
|
|
706
|
+
instrument-chassis. The `.hairline-accent` utility
|
|
707
|
+
(utilities.css §hairline) adopts these via `box-shadow:`. */
|
|
708
|
+
--hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.06);
|
|
709
|
+
--hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.04);
|
|
710
|
+
--border-hairline: var(--hairline-catch-light), var(--hairline-under-shadow);
|
|
711
|
+
|
|
712
|
+
/* Specular catch-light — 1.5px-tall top-edge highlight that swaps in for
|
|
713
|
+
--glass-highlight on interactive moments (e.g. primary-action hover).
|
|
714
|
+
Reads as a real catch-light on a curved surface. The `-dark` companion
|
|
715
|
+
is overridden inside `.dark`; the named token here is the explicit
|
|
716
|
+
handle consumers can reference to compose dark-aware layers. */
|
|
717
|
+
--glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.45);
|
|
718
|
+
--glass-specular-dark: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
|
|
719
|
+
|
|
720
|
+
/* Chassis curvature illusion — a subtle radial gradient at the chassis
|
|
721
|
+
top centre that lifts the surface without committing to literal 3D.
|
|
722
|
+
Composed into <InstrumentChassis>'s background stack. */
|
|
723
|
+
--glass-curvature-overlay: radial-gradient(
|
|
724
|
+
ellipse at 50% -20%,
|
|
725
|
+
hsl(0 0% 100% / 0.06),
|
|
726
|
+
transparent 60%
|
|
727
|
+
);
|
|
728
|
+
--glass-curvature-overlay-dark: radial-gradient(
|
|
729
|
+
ellipse at 50% -20%,
|
|
730
|
+
hsl(0 0% 100% / 0.06),
|
|
731
|
+
transparent 60%
|
|
732
|
+
);
|
|
733
|
+
|
|
734
|
+
/* Chart palette aliases — speedtest et al. read these for phase tinting.
|
|
735
|
+
Defaults map to viz-basis hues; consumers can override per app. */
|
|
736
|
+
--chart-ping: var(--viz-chebyshev);
|
|
737
|
+
--chart-download: var(--viz-fourier);
|
|
738
|
+
--chart-upload: var(--viz-amber);
|
|
739
|
+
--chart-jitter: var(--viz-legendre);
|
|
740
|
+
|
|
741
|
+
/* O.W6 Lane D — WCAG companion `--chart-{phase}-label` tokens
|
|
742
|
+
(speedtest AC.W6c.T2 — F1.V-04 closure).
|
|
743
|
+
|
|
744
|
+
The canvas-side hues above preserve their saturated brand register
|
|
745
|
+
(correct against the meter dial); the COMPANION tokens darken to
|
|
746
|
+
L≈0.40 so phase-label text on `--background` clears the WCAG 2.1
|
|
747
|
+
AA-body 4.5:1 contrast floor. Mirrors the two-token discipline
|
|
748
|
+
already established by `--meter-{background-color,track-stroke}`:
|
|
749
|
+
one token feeds the canvas/visual, the second feeds the label
|
|
750
|
+
text.
|
|
751
|
+
|
|
752
|
+
Light-mode L≈0.40 in OKLCH preserves the hue rotation while
|
|
753
|
+
dropping luminance enough for body contrast; dark-mode flips to
|
|
754
|
+
L≈0.85 against the dark canvas. Consumers reach these via
|
|
755
|
+
`color: var(--chart-ping-label)` (etc.) on label elements ONLY —
|
|
756
|
+
chart strokes/fills continue to read `--chart-ping`. */
|
|
757
|
+
--chart-ping-label: oklch(0.40 0.18 230);
|
|
758
|
+
--chart-download-label: oklch(0.40 0.20 22);
|
|
759
|
+
--chart-upload-label: oklch(0.40 0.16 55);
|
|
760
|
+
--chart-jitter-label: oklch(0.40 0.20 305);
|
|
761
|
+
|
|
762
|
+
/* O.W6 Lane D — Meter track stroke (speedtest AC.W6c.T3 — F1.V-02
|
|
763
|
+
closure). Promoted from speedtest's consumer-side declaration so
|
|
764
|
+
glass-ui owns the canonical light + dark values. The light-mode
|
|
765
|
+
value reads opaque foreground (composes through canvas
|
|
766
|
+
`globalAlpha` in consumer renderers; e.g., speedtest's `rings.ts`
|
|
767
|
+
`globalAlpha = 0.22` lands the phantom-track at the perceptual
|
|
768
|
+
sweet-spot). The dark-mode companion lives under `.dark` below
|
|
769
|
+
and ALSO reads `var(--foreground)` — the prior speedtest value
|
|
770
|
+
`var(--background)` rendered bg-on-bg invisible at dark mode. */
|
|
771
|
+
--meter-track-stroke: var(--foreground);
|
|
772
|
+
|
|
773
|
+
/* Shadow per tier — complete box-shadow lists for glass surface classes */
|
|
774
|
+
--glass-shadow-wash: var(--shadow-sm), var(--glass-highlight);
|
|
775
|
+
--glass-shadow-quiet: var(--shadow-md), var(--glass-highlight);
|
|
776
|
+
--glass-shadow-resting: var(--shadow-lg), var(--glass-highlight);
|
|
777
|
+
--glass-shadow-floating: var(--shadow-xl),
|
|
778
|
+
0 0 0 0.5px color-mix(in srgb, var(--shadow-color) 5%, transparent),
|
|
779
|
+
var(--glass-highlight);
|
|
780
|
+
--glass-shadow-overlay: var(--shadow-2xl),
|
|
781
|
+
0 0 0 0.5px color-mix(in srgb, var(--shadow-color) 8%, transparent),
|
|
782
|
+
var(--glass-highlight);
|
|
783
|
+
--glass-shadow: var(--glass-shadow-quiet);
|
|
784
|
+
--glass-shadow-lg: var(--glass-shadow-floating);
|
|
785
|
+
|
|
786
|
+
/* ─────────────────────────────────────────────────────────────
|
|
787
|
+
AL-W1-α augmented — SPINE 8th tier (HOUSING register)
|
|
788
|
+
|
|
789
|
+
Closes the AK W2 chassis-spine architectural underclaim per
|
|
790
|
+
AL-X5 §4.1. The spine register is a polished SLEEVE, not glass:
|
|
791
|
+
NO backdrop-filter, NO plate opacity, hairline outer stroke,
|
|
792
|
+
interior radial vignette that subtly carries the phase-color
|
|
793
|
+
cascade. Consumed exclusively by `<InstrumentChassis variant="spine">`
|
|
794
|
+
at App-level mount paths (quiet-content routes).
|
|
795
|
+
|
|
796
|
+
The 4 tokens here cover the minimum viable substrate the SLIM
|
|
797
|
+
Y4/Y6/Y7 retention set ratified. The 35 rejected axes (saturate
|
|
798
|
+
band, edge-light per tier, depth-shadow per tier, tier-up macro)
|
|
799
|
+
stay rejected per the conservative-creation mandate.
|
|
800
|
+
───────────────────────────────────────────────────────────── */
|
|
801
|
+
--glass-spine-opacity: 0;
|
|
802
|
+
--glass-spine-blur: 0px;
|
|
803
|
+
--glass-spine-border: var(--surface-tint-8);
|
|
804
|
+
--glass-spine-vignette: radial-gradient(
|
|
805
|
+
ellipse at 50% 0%,
|
|
806
|
+
color-mix(in oklab, var(--phase-color, var(--surface-tint-8)) 8%, transparent),
|
|
807
|
+
transparent 60%
|
|
808
|
+
);
|
|
809
|
+
|
|
810
|
+
/* ─────────────────────────────────────────────────────────────
|
|
811
|
+
AL-W10 SLIM — UNDER-SHADOW recipe rungs
|
|
812
|
+
|
|
813
|
+
Per AL-X5 §4 + Y7 §3. iOS Liquid Glass surfaces carry a 0.5px
|
|
814
|
+
dark hairline along the bottom edge (reads as under-shadow /
|
|
815
|
+
glass thickness). The substrate `--hairline-under-shadow`
|
|
816
|
+
already publishes one quiet rung; the four-rung ladder here
|
|
817
|
+
names the SLIM retention set (Y4 §3.2 / Y6 §4.3) — `quiet`,
|
|
818
|
+
`default`, `vivid`, `spine` cover the consumer landings without
|
|
819
|
+
multiplying tokens per tier. The 3 hand-rolled literals at
|
|
820
|
+
`instrument-chassis.css:52`, `dock.css:279`, `dock.css:952`
|
|
821
|
+
retire to these.
|
|
822
|
+
|
|
823
|
+
Composes as a NON-INSET box-shadow layer alongside the existing
|
|
824
|
+
`--glass-shadow-*` recipe (the inset under-shadow stays at the
|
|
825
|
+
hand-rolled literal where it's load-bearing on chassis-internal
|
|
826
|
+
surfaces).
|
|
827
|
+
───────────────────────────────────────────────────────────── */
|
|
828
|
+
--glass-under-shadow-quiet: 0 2px 8px -1px oklch(0 0 0 / 0.04);
|
|
829
|
+
--glass-under-shadow-default: 0 4px 16px -2px oklch(0 0 0 / 0.08);
|
|
830
|
+
--glass-under-shadow-vivid: 0 8px 32px -4px oklch(0 0 0 / 0.12);
|
|
831
|
+
--glass-under-shadow-spine: 0 1px 0 0 oklch(0 0 0 / 0.06);
|
|
832
|
+
|
|
833
|
+
/* Overlay scrim rungs — substrate-aware modal/dialog backdrop tints.
|
|
834
|
+
Three weights cover the deployed range: dialog-scroll (subtle),
|
|
835
|
+
canonical modal (default), drawer/full-cover (strong). Currently
|
|
836
|
+
5 raw `bg-black/{40,50,80}` sites across Dialog/Sheet/Drawer/
|
|
837
|
+
ConfirmDialog hardcode the value; W2.A migrates consumers.
|
|
838
|
+
R5 vocab.γ gap row 2. */
|
|
839
|
+
--overlay-scrim: color-mix(in srgb, var(--shadow-color) 50%, transparent);
|
|
840
|
+
--overlay-scrim-strong: color-mix(in srgb, var(--shadow-color) 80%, transparent);
|
|
841
|
+
--overlay-scrim-subtle: color-mix(in srgb, var(--shadow-color) 40%, transparent);
|
|
842
|
+
|
|
843
|
+
/* ═══════════════════════════════════════════════
|
|
844
|
+
§9 ANIMATION OFFSETS
|
|
845
|
+
═══════════════════════════════════════════════ */
|
|
846
|
+
/* Hover lift offsets */
|
|
847
|
+
--lift-sm: -1px;
|
|
848
|
+
--lift-md: -2px;
|
|
849
|
+
--lift-lg: -4px;
|
|
850
|
+
|
|
851
|
+
/* Layout tokens */
|
|
852
|
+
--mask-fade-width: 1rem;
|
|
853
|
+
/* J.W3.C — dock content overflow caps. When dock content exceeds
|
|
854
|
+
these dimensions, the inner `.dock-layers` (horizontal) /
|
|
855
|
+
`.glass-dock.vertical` (rail) container scrolls with a
|
|
856
|
+
`.scroll-fade-{x,y}` mask-fade so the boundary feathers rather
|
|
857
|
+
than cliffs. Defaults clamp to 80vw / 80vh capped at sensible
|
|
858
|
+
desktop widths; consumers override per-dock by setting either
|
|
859
|
+
token directly on a `.glass-dock` instance. User findings 1 + 5a. */
|
|
860
|
+
--dock-max-inline-size: min(80vw, 64rem);
|
|
861
|
+
--dock-max-block-size: min(80vh, 48rem);
|
|
862
|
+
|
|
863
|
+
/* AB.W1.T1 — chassis max-block-size guardrail.
|
|
864
|
+
Maximum block size a centred consumer-app card may consume while
|
|
865
|
+
preserving the inline dock footprint. The recipe subtracts the
|
|
866
|
+
consumer-owned `--dock-footer-space` (dock height + dock inset +
|
|
867
|
+
card-edge inset) and `--page-padding-top` from the dynamic viewport,
|
|
868
|
+
then takes one further rem of breathing room so the card never
|
|
869
|
+
butts the dock — the user mandate is `≥ 1rem visible gap above
|
|
870
|
+
dock`. Both consumer tokens carry safe fallbacks for callers that
|
|
871
|
+
have not declared them.
|
|
872
|
+
|
|
873
|
+
Consumers should shrink internal regions (meter, readout, timeline)
|
|
874
|
+
before falling back to scroll. This token is a guardrail against
|
|
875
|
+
chassis overflow, NOT a license to make the card scroll as the
|
|
876
|
+
default solution; clamp-first / no-scroll-first is the canon.
|
|
877
|
+
See DESIGN.md `## Chassis sizing — dock-adjusted viewport`. */
|
|
878
|
+
--chassis-max-block-size: calc(
|
|
879
|
+
100dvh
|
|
880
|
+
- var(--dock-footer-space, 5.75rem)
|
|
881
|
+
- var(--page-padding-top, 0rem)
|
|
882
|
+
- 1rem
|
|
883
|
+
);
|
|
884
|
+
--max-width-input: 24rem;
|
|
885
|
+
--input-min-width-sm: 5rem;
|
|
886
|
+
--min-width-input-sm: var(--input-min-width-sm);
|
|
887
|
+
--chart-height-compact: 15rem;
|
|
888
|
+
--chart-height-default: 22.5rem;
|
|
889
|
+
--chart-height-large: 25rem;
|
|
890
|
+
--chart-margin: 1.25rem;
|
|
891
|
+
--paper-texture-size: 200px 200px;
|
|
892
|
+
|
|
893
|
+
/* Border opacity scale */
|
|
894
|
+
--border-opacity-light: 0.15;
|
|
895
|
+
--border-opacity-medium: 0.25;
|
|
896
|
+
--border-opacity-strong: 0.6;
|
|
897
|
+
|
|
898
|
+
/* ═══════════════════════════════════════════════
|
|
899
|
+
§10 SIZING
|
|
900
|
+
═══════════════════════════════════════════════ */
|
|
901
|
+
--size-icon-btn: 2.5rem;
|
|
902
|
+
--icon-xs: 0.75rem;
|
|
903
|
+
--icon-sm: 0.875rem;
|
|
904
|
+
--icon-md: 1rem;
|
|
905
|
+
--icon-lg: 1.25rem;
|
|
906
|
+
--icon-xl: 1.5rem;
|
|
907
|
+
/* V.W2 T9 — 32px rung; spinner glyphs (Loader2) + dense table-row buttons.
|
|
908
|
+
Naming follows the radius ladder + Tailwind convention (2xl > xl > xxl) —
|
|
909
|
+
see B6 §2.4 for the naming rationale. */
|
|
910
|
+
--icon-2xl: 2rem;
|
|
911
|
+
/* V.W2 T10 — 40px rung; empty-state hero glyph (DashboardMap MapIcon).
|
|
912
|
+
AI.W5-ζ — rebound from `2.5rem` literal to `var(--size-icon-btn)` so
|
|
913
|
+
the alignment is contractual single-source-of-truth rather than the
|
|
914
|
+
coincidental numerical match noted prior. */
|
|
915
|
+
--icon-3xl: var(--size-icon-btn);
|
|
916
|
+
/* V.W2 T11 — 56px rung; FlowSelector school/home survey-flow picker.
|
|
917
|
+
Largest rung in the icon ladder; reserved for hero-class glyphs. */
|
|
918
|
+
--icon-hero: 3.5rem;
|
|
919
|
+
|
|
920
|
+
/* Golden-ratio spacing rungs — φ² and φ³. Preemptive substrate; W4 hero
|
|
921
|
+
chassis + W5 StoryChassis migration land the consumers. R3 §A row 1.
|
|
922
|
+
The 0..4 rungs are not currently named (consumers reach via
|
|
923
|
+
Tailwind's spacing scale); 5/6 land here because their values fall
|
|
924
|
+
outside the default ladder and the audacious chassis pattern wants
|
|
925
|
+
a named handle. */
|
|
926
|
+
--space-phi-5: 2.618rem; /* φ² */
|
|
927
|
+
--space-phi-6: 4.236rem; /* φ³ */
|
|
928
|
+
|
|
929
|
+
/* Dock geometry — consumers may override locally */
|
|
930
|
+
--dock-h: calc(var(--size-icon-btn) + 0.75rem + 3px);
|
|
931
|
+
--dock-margin: 0.5rem;
|
|
932
|
+
--dock-menubar-reserve: 4rem;
|
|
933
|
+
|
|
934
|
+
/* Dock active-state ladder (O.W6 Lane B)
|
|
935
|
+
Token-overridable active paint for `.dock-icon-button`. Promoted
|
|
936
|
+
from hardcoded `background: var(--muted); color: var(--foreground)`
|
|
937
|
+
per bbnf-buddy O11/c R1: 7 `:deep()` escapes at `ToolsLayer.vue`
|
|
938
|
+
redefine bg/color/scale/border/shadow on the active variant; the
|
|
939
|
+
ladder absorbs ~3 of 7 at a stroke. Defaults preserve the prior
|
|
940
|
+
visual contract (no transform, no border, no shadow) — overrides
|
|
941
|
+
take effect per-instance via `:root` or a parent scope, e.g.
|
|
942
|
+
`.tools-layer { --dock-active-scale: 1.2; --dock-active-bg: …; }`.
|
|
943
|
+
≥ 2-consumer coverage: bbnf-buddy ToolsLayer (override consumer) +
|
|
944
|
+
speedtest dock (default consumer). */
|
|
945
|
+
--dock-active-bg: var(--muted);
|
|
946
|
+
--dock-active-color: var(--foreground);
|
|
947
|
+
--dock-active-scale: 1;
|
|
948
|
+
--dock-active-border: none;
|
|
949
|
+
--dock-active-shadow: none;
|
|
950
|
+
|
|
951
|
+
/* Q.W3 Lane G (Q-cos-13) — the O.W6 Lane D `--icon-tooltip-hit-area`
|
|
952
|
+
token retired here. IconTooltip no longer owns a wrap-span; the
|
|
953
|
+
slotted child carries its own WCAG 2.5.5 hit-area (interactive
|
|
954
|
+
children via their four-state contract, bare glyphs via a
|
|
955
|
+
`min-h-11 min-w-11` host). No orphaned token left behind. */
|
|
956
|
+
|
|
957
|
+
/* O.W6 Lane D — Dock touch-target floor. Mirrors the IconTooltip
|
|
958
|
+
hit-area but for the dock-control surface. The base value tracks
|
|
959
|
+
the desktop default (`--size-icon-btn`); the
|
|
960
|
+
`@media (pointer: coarse)` block at `dock.css` lifts it to the
|
|
961
|
+
WCAG 2.5.5 floor on touch devices. */
|
|
962
|
+
--dock-touch-target: 2.75rem; /* 44px */
|
|
963
|
+
|
|
964
|
+
/* MetricBadge — stacked variant geometry. The 2-row stacked layout
|
|
965
|
+
(label / value+unit) wants a taller floor than the inline pill so the
|
|
966
|
+
label has breathing room above the baseline pair. T.W2.T2 +
|
|
967
|
+
audit B-spec §3.2 vertical-rhythm table land 42px (2.625rem) as the
|
|
968
|
+
min-height with 6px (0.375rem) block padding. The inline ladder
|
|
969
|
+
keeps its tight defaults via `--metric-badge-min-height` /
|
|
970
|
+
`--metric-badge-padding-block` (declared inline at the
|
|
971
|
+
`.metric-badge` selector). */
|
|
972
|
+
--metric-badge-min-height-stacked: 2.625rem;
|
|
973
|
+
--metric-badge-padding-block-stacked: 0.375rem;
|
|
974
|
+
|
|
975
|
+
/* Configurator — N.W2 Lane A density axis (4 rungs).
|
|
976
|
+
The `comfortable` rung restates the pre-N.W2 baked recipe exactly
|
|
977
|
+
(`gap-1.5 py-2` = 0.375rem / 0.5rem) so unparameterised consumers
|
|
978
|
+
see no visual change. `mobile` halves the vertical breathing room
|
|
979
|
+
for narrow-viewport studios; `spacious` doubles it for settings-
|
|
980
|
+
page hosts. See `<ConfiguratorRow>` scoped CSS for the attribute-
|
|
981
|
+
selector binding. */
|
|
982
|
+
--configurator-row-gap-mobile: 0.25rem; /* 4px — tight */
|
|
983
|
+
--configurator-row-gap-compact: 0.3125rem; /* 5px — slightly tighter */
|
|
984
|
+
--configurator-row-gap-comfortable: 0.375rem; /* 6px — pre-N.W2 default */
|
|
985
|
+
--configurator-row-gap-spacious: 0.75rem; /* 12px — generous */
|
|
986
|
+
|
|
987
|
+
--configurator-row-py-mobile: 0.25rem; /* 4px — tight */
|
|
988
|
+
--configurator-row-py-compact: 0.375rem; /* 6px — slightly tighter */
|
|
989
|
+
--configurator-row-py-comfortable: 0.5rem; /* 8px — pre-N.W2 default */
|
|
990
|
+
--configurator-row-py-spacious: 0.875rem; /* 14px — generous */
|
|
991
|
+
|
|
992
|
+
/* Component font override (consumers override locally) */
|
|
993
|
+
--select-font: inherit;
|
|
994
|
+
|
|
995
|
+
/* ═══════════════════════════════════════════════
|
|
996
|
+
§11 INTERACTIVE SCALES & FOCUS
|
|
997
|
+
═══════════════════════════════════════════════ */
|
|
998
|
+
--scale-hover: 1.08;
|
|
999
|
+
--scale-hover-dock: 1.1;
|
|
1000
|
+
--scale-press: 0.96;
|
|
1001
|
+
--scale-press-dock: 0.92;
|
|
1002
|
+
|
|
1003
|
+
/* Press-scale — the canonical iOS Liquid Glass press value.
|
|
1004
|
+
`--scale-press` (0.96) is the canonical rung every primitive
|
|
1005
|
+
should reach for unless it has a documented reason — see
|
|
1006
|
+
DESIGN.md §L3. `--scale-press-btn` (aliased to `--scale-press-sm`,
|
|
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. */
|
|
1024
|
+
--scale-press-sm: 0.97;
|
|
1025
|
+
--scale-press-btn: var(--scale-press-sm);
|
|
1026
|
+
--opacity-disabled: 0.5;
|
|
1027
|
+
--opacity-icon-muted: 0.8;
|
|
1028
|
+
|
|
1029
|
+
--focus-ring-width: 2px;
|
|
1030
|
+
--focus-ring-shadow: 0 0 0 var(--focus-ring-width) color-mix(in srgb, var(--ring) 30%, transparent),
|
|
1031
|
+
0 0 8px color-mix(in srgb, var(--ring) 15%, transparent);
|
|
1032
|
+
--focus-ring: var(--focus-ring-shadow);
|
|
1033
|
+
|
|
1034
|
+
/* ═══════════════════════════════════════════════
|
|
1035
|
+
§12 PAPER TEXTURES
|
|
1036
|
+
═══════════════════════════════════════════════ */
|
|
1037
|
+
/* Canonical subtle paper-texture opacity — restored from fourier-original
|
|
1038
|
+
(`4df1a06:web/src/style.css:53-54`) after A.W3.5.ab confirmed the
|
|
1039
|
+
heretofore `opacity='1'` URI rendered as an overt grain field in every
|
|
1040
|
+
downstream consumer of `.paper-texture`. The SVG `opacity` attribute is
|
|
1041
|
+
baked at parse-time and cannot read a CSS var, so the subtle value must
|
|
1042
|
+
be inlined; if a consumer needs a heavier overlay, they should layer
|
|
1043
|
+
a wrapper element with its own `opacity:`/`mix-blend-mode:` atop. */
|
|
1044
|
+
--paper-clean-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
|
|
1045
|
+
--paper-aged-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.5' numOctaves='5' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E");
|
|
1046
|
+
|
|
1047
|
+
/* ═══════════════════════════════════════════════
|
|
1048
|
+
§13 GOLD (accent family kept for consumers using it)
|
|
1049
|
+
═══════════════════════════════════════════════ */
|
|
1050
|
+
--gold: hsl(43 74% 49%);
|
|
1051
|
+
--gold-light: hsl(51 100% 50%);
|
|
1052
|
+
--gold-dark: hsl(34 87% 38%);
|
|
1053
|
+
|
|
1054
|
+
--color-gold: var(--gold);
|
|
1055
|
+
--color-gold-light: var(--gold-light);
|
|
1056
|
+
--color-gold-dark: var(--gold-dark);
|
|
1057
|
+
|
|
1058
|
+
/* ═══════════════════════════════════════════════
|
|
1059
|
+
§14 RAINBOW PALETTE
|
|
1060
|
+
═══════════════════════════════════════════════ */
|
|
1061
|
+
--rainbow-red: hsl(0 85% 60%);
|
|
1062
|
+
--rainbow-orange: hsl(30 90% 55%);
|
|
1063
|
+
--rainbow-yellow: hsl(55 90% 55%);
|
|
1064
|
+
--rainbow-green: hsl(130 70% 50%);
|
|
1065
|
+
--rainbow-blue: hsl(210 80% 55%);
|
|
1066
|
+
--rainbow-indigo: hsl(260 70% 60%);
|
|
1067
|
+
--rainbow-violet: hsl(300 75% 60%);
|
|
1068
|
+
|
|
1069
|
+
--rainbow-pastel-red: hsl(0 50% 78%);
|
|
1070
|
+
--rainbow-pastel-orange: hsl(25 55% 76%);
|
|
1071
|
+
--rainbow-pastel-yellow: hsl(50 55% 78%);
|
|
1072
|
+
--rainbow-pastel-green: hsl(130 35% 74%);
|
|
1073
|
+
--rainbow-pastel-blue: hsl(220 45% 76%);
|
|
1074
|
+
--rainbow-pastel-indigo: hsl(260 35% 76%);
|
|
1075
|
+
--rainbow-pastel-violet: hsl(280 40% 78%);
|
|
1076
|
+
|
|
1077
|
+
/* ═══════════════════════════════════════════════
|
|
1078
|
+
§16 TIMELINE
|
|
1079
|
+
Timeline primitive tokens. All three variants (scrubber +
|
|
1080
|
+
segmented + continuous) compose these. Both segmented + continuous
|
|
1081
|
+
arrays carry the same `TimelineSegment[]` data shape; only the
|
|
1082
|
+
rendering geometry differs. See DESIGN.md `## Timeline Primitive`.
|
|
1083
|
+
═══════════════════════════════════════════════ */
|
|
1084
|
+
|
|
1085
|
+
/* Heights — per-variant rail thickness */
|
|
1086
|
+
--timeline-scrubber-height: 0.5rem; /* 8px — single-track scrubber */
|
|
1087
|
+
--timeline-segmented-height: 0.625rem; /* 10px — N adjacent bands */
|
|
1088
|
+
--timeline-continuous-height: 0.75rem; /* 12px — ONE pill, N regions */
|
|
1089
|
+
|
|
1090
|
+
/* Geometry — shared across all variants */
|
|
1091
|
+
--timeline-dot-size: 0.875rem; /* 14px — boundary dot diameter (pointer: fine) */
|
|
1092
|
+
--timeline-dot-size-touch: 1.25rem; /* 20px — boundary dot diameter (pointer: coarse) */
|
|
1093
|
+
--timeline-touch-target: 44px; /* AC.W6d F2.I-04 — WCAG 2.5.5 target-size floor.
|
|
1094
|
+
The `::before` halo around each dot extends to
|
|
1095
|
+
this dimension so finger-precision users meet
|
|
1096
|
+
the (target-size: 44×44 minimum) clause without
|
|
1097
|
+
the visible dot growing to that footprint at
|
|
1098
|
+
pointer: fine. */
|
|
1099
|
+
--timeline-segment-flex: 1 1 0; /* per-cell flex distribution (segmented) */
|
|
1100
|
+
|
|
1101
|
+
/* Boundary-dot glass knobs (Q.W4 Lane B — promoted from
|
|
1102
|
+
ContinuousTimeline.vue SFC fallbacks; `3cb70db` minted these as a
|
|
1103
|
+
private dialect). The continuous-variant dot is a GLASS primitive:
|
|
1104
|
+
a translucent tinted fill over a backdrop blur with a hairline
|
|
1105
|
+
ring. These knobs let consumers retune the resting glass + the
|
|
1106
|
+
per-state tints without a `:deep()` reach.
|
|
1107
|
+
fill — resting translucent fill
|
|
1108
|
+
blur — backdrop blur tier behind the dot
|
|
1109
|
+
ring — hairline glass ring (border-color)
|
|
1110
|
+
tint-current — wash colour for the active-phase dot
|
|
1111
|
+
tint-completed — wash colour for the completed-phase dot
|
|
1112
|
+
check-color — completion-tick stroke (defaults to the
|
|
1113
|
+
completed tint) */
|
|
1114
|
+
--timeline-dot-fill: var(--surface-tint-12);
|
|
1115
|
+
--timeline-dot-blur: var(--glass-blur-quiet);
|
|
1116
|
+
--timeline-dot-ring: var(--glass-border-floating);
|
|
1117
|
+
--timeline-dot-tint-current: var(--accent, var(--foreground));
|
|
1118
|
+
--timeline-dot-tint-completed: var(--success, var(--foreground));
|
|
1119
|
+
--timeline-dot-check-color: var(--timeline-dot-tint-completed);
|
|
1120
|
+
|
|
1121
|
+
/* Continuous-variant specific — seam dividers between regions.
|
|
1122
|
+
Set `--timeline-continuous-seam-opacity: 0` to suppress the
|
|
1123
|
+
inter-region 1px dividers entirely. Default `0.25` reads as a
|
|
1124
|
+
subtle hairline; the `--timeline-continuous-seam-color` knob lets
|
|
1125
|
+
consumers override the seam tint independently of opacity. */
|
|
1126
|
+
--timeline-continuous-seam-opacity: 0.25;
|
|
1127
|
+
--timeline-continuous-seam-color: color-mix(
|
|
1128
|
+
in srgb,
|
|
1129
|
+
var(--foreground) calc(var(--timeline-continuous-seam-opacity) * 100%),
|
|
1130
|
+
transparent
|
|
1131
|
+
);
|
|
1132
|
+
|
|
1133
|
+
/* Per-segment default gradient fallback — applied when a segment
|
|
1134
|
+
omits its `gradient` field. Consumers can override per-phase via
|
|
1135
|
+
the `--timeline-segment-gradient-{key}` knobs below. */
|
|
1136
|
+
--timeline-segment-default-gradient: linear-gradient(
|
|
1137
|
+
90deg,
|
|
1138
|
+
var(--surface-tint-15),
|
|
1139
|
+
var(--surface-tint-25)
|
|
1140
|
+
);
|
|
1141
|
+
|
|
1142
|
+
/* Per-phase gradient defaults — paint the canonical chart palette
|
|
1143
|
+
at the gradient leading edge, fading to a 60%-opacity tail. The
|
|
1144
|
+
speedtest consumer wires these via `gradient: "var(--timeline-segment-gradient-ping)"`
|
|
1145
|
+
per segment; the same names work for any consumer who follows the
|
|
1146
|
+
ping/download/upload/jitter taxonomy. */
|
|
1147
|
+
--timeline-segment-gradient-ping: linear-gradient(
|
|
1148
|
+
90deg,
|
|
1149
|
+
var(--chart-ping),
|
|
1150
|
+
color-mix(in srgb, var(--chart-ping) 60%, transparent)
|
|
1151
|
+
);
|
|
1152
|
+
--timeline-segment-gradient-download: linear-gradient(
|
|
1153
|
+
90deg,
|
|
1154
|
+
var(--chart-download),
|
|
1155
|
+
color-mix(in srgb, var(--chart-download) 60%, transparent)
|
|
1156
|
+
);
|
|
1157
|
+
--timeline-segment-gradient-upload: linear-gradient(
|
|
1158
|
+
90deg,
|
|
1159
|
+
var(--chart-upload),
|
|
1160
|
+
color-mix(in srgb, var(--chart-upload) 60%, transparent)
|
|
1161
|
+
);
|
|
1162
|
+
--timeline-segment-gradient-jitter: linear-gradient(
|
|
1163
|
+
90deg,
|
|
1164
|
+
var(--chart-jitter),
|
|
1165
|
+
color-mix(in srgb, var(--chart-jitter) 60%, transparent)
|
|
1166
|
+
);
|
|
1167
|
+
|
|
1168
|
+
/* ═══════════════════════════════════════════════
|
|
1169
|
+
§17 METRIC
|
|
1170
|
+
|
|
1171
|
+
MetricRow / MetricStack value-clamp dialect. The post-P
|
|
1172
|
+
`9ba68ca` + `d244dd5` commits introduced this 8-token family
|
|
1173
|
+
(plus the P.W5 Lane A.1 MetricRow clamp work) as a private SFC
|
|
1174
|
+
dialect — the defaults lived as `var(…, fallback)` literals
|
|
1175
|
+
scattered across MetricRow.vue / MetricStack.vue, never
|
|
1176
|
+
discoverable or `:root`-overridable. Q.W4 Lane A promotes the
|
|
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).
|
|
1191
|
+
═══════════════════════════════════════════════ */
|
|
1192
|
+
|
|
1193
|
+
/* Value register — audacious-poster hero clamp */
|
|
1194
|
+
--metric-row-value-clamp-min: 4.5rem;
|
|
1195
|
+
--metric-row-value-clamp-cqi: 34cqi;
|
|
1196
|
+
--metric-row-value-clamp-max: var(--type-display-hero);
|
|
1197
|
+
|
|
1198
|
+
/* Unit register — one tier below the value it qualifies */
|
|
1199
|
+
--metric-row-unit-clamp-min: 1.5rem;
|
|
1200
|
+
--metric-row-unit-clamp-max: 3.25rem;
|
|
1201
|
+
|
|
1202
|
+
/* Label register — uppercase, the binding row-height term in the
|
|
1203
|
+
compact `result` register */
|
|
1204
|
+
--metric-row-label-clamp-min: 1.125rem;
|
|
1205
|
+
--metric-row-label-clamp-cqi: 5cqi;
|
|
1206
|
+
--metric-row-label-clamp-max: 2.75rem;
|
|
1207
|
+
|
|
1208
|
+
/* ═══════════════════════════════════════════════
|
|
1209
|
+
§2.D INSTRUMENT-CLUSTER COMPOSITION RHYTHM —
|
|
1210
|
+
AK.W3 / FD1 TRANSPOSITION 5 absorb.
|
|
1211
|
+
|
|
1212
|
+
The under-meter progress bar nests INTO the dial's painted-disc
|
|
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-β).
|
|
1239
|
+
|
|
1240
|
+
The `--meter-size` reference inside the inset clamp resolves
|
|
1241
|
+
against the consumer's own `--meter-size` declaration; when no
|
|
1242
|
+
consumer ships one (a non-speedtest demo of the chassis), the
|
|
1243
|
+
inline fallback of 200px keeps the calc well-defined. */
|
|
1244
|
+
--meter-progress-inset: calc(var(--meter-size, 200px) * 0.04);
|
|
1245
|
+
--progress-stack-gap: clamp(0.1875rem, 0.4cqi, 0.375rem);
|
|
1246
|
+
|
|
1247
|
+
/* ═══════════════════════════════════════════════
|
|
1248
|
+
§2.E CELEBRATION-TIER REGISTER — AK.W3 / FD1
|
|
1249
|
+
TRANSPOSITION 5 absorb.
|
|
1250
|
+
|
|
1251
|
+
The celebration cluster (speedtest "Complete!" headline,
|
|
1252
|
+
ThankYou's "Thanks for taking the time" headline) is a SHARED
|
|
1253
|
+
peak across multiple consumer surfaces. Before AK.W3 these
|
|
1254
|
+
tokens were speedtest-local (`AJ.W3-μ.4`, W2-C headline-parity)
|
|
1255
|
+
but the design intent is library-canon: any glass-ui consumer
|
|
1256
|
+
composing a "completion" / "thank-you" surface should reach
|
|
1257
|
+
for the same row-rhythm + headline-ceiling pair.
|
|
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. */
|
|
1272
|
+
--celebration-row-rhythm: clamp(0.5rem, 1.6cqi, 1rem);
|
|
1273
|
+
--text-celebration-headline-size: clamp(2.5rem, 12cqi, 9rem);
|
|
1274
|
+
--complete-headline-size: clamp(2.25rem, 11cqi, 4rem);
|
|
1275
|
+
|
|
1276
|
+
/* ═══════════════════════════════════════════════
|
|
1277
|
+
§19 TABLE DENSITY
|
|
1278
|
+
|
|
1279
|
+
A single unitless knob `--table-density` scales the cell
|
|
1280
|
+
padding and header row height of the Table / DataTable
|
|
1281
|
+
primitive. Default `1` is backward-compatible (resolves to
|
|
1282
|
+
the same `1rem` cell padding and `3rem` header height as the
|
|
1283
|
+
pre-knob hardcoded values). Consumers set this on a wrapping
|
|
1284
|
+
element or on `:root` to tune density for their context:
|
|
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.
|
|
1295
|
+
═══════════════════════════════════════════════ */
|
|
1296
|
+
--table-density: 1;
|
|
1297
|
+
--table-cell-px: calc(1rem * var(--table-density));
|
|
1298
|
+
--table-cell-py: calc(1rem * var(--table-density));
|
|
1299
|
+
--table-head-h: calc(3rem * var(--table-density));
|
|
1300
|
+
--table-head-px: calc(1rem * var(--table-density));
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
/* ═══════════════════════════════════════════════
|
|
1304
|
+
DARK MODE — warm dark, section palette brightened ~20% L
|
|
1305
|
+
═══════════════════════════════════════════════ */
|
|
1306
|
+
.dark {
|
|
1307
|
+
/* Neutral scale mirrors light-mode pattern: step UP from the background's
|
|
1308
|
+
low L toward foreground. Same perceptual deltas as light. */
|
|
1309
|
+
--neutral-0: hsl(24 8% 6%); /* L 6 — page surface (dark) */
|
|
1310
|
+
--neutral-1: hsl(24 6% 11%); /* L 11 — soft field */
|
|
1311
|
+
--neutral-2: hsl(24 5% 16%); /* L 16 — chip / tab-inactive */
|
|
1312
|
+
--neutral-3: hsl(24 5% 22%); /* L 22 — hover / highlight */
|
|
1313
|
+
--neutral-4: hsl(24 5% 34%); /* L 34 — subtle border */
|
|
1314
|
+
--neutral-5: hsl(48 5% 62%); /* L 62 — muted text (WCAG AA: 7.39:1 vs L6 page / 6.58:1 vs L11 muted) */
|
|
1315
|
+
/* W7-α' (AK-FD1) — strong-muted text. Same principled ladder step as
|
|
1316
|
+
light, mirrored: 10 L LIGHTER than muted (62→72) toward --foreground
|
|
1317
|
+
(L90), the 1/3 point of the L62→L90 muted→primary gap. By-colour; hue
|
|
1318
|
+
48, sat nudged 5→6. WCAG AA: 9.86:1 vs L6 page / 8.78:1 vs L11 muted
|
|
1319
|
+
(cf. neutral-5's 7.39:1). */
|
|
1320
|
+
--neutral-6: hsl(48 6% 72%); /* L 72 — strong-muted text (secondary register) */
|
|
1321
|
+
|
|
1322
|
+
--background: var(--neutral-0);
|
|
1323
|
+
--foreground: hsl(48 10% 90%);
|
|
1324
|
+
--card: hsl(24 8% 10%);
|
|
1325
|
+
--card-foreground: var(--foreground);
|
|
1326
|
+
--popover: hsl(24 8% 10%);
|
|
1327
|
+
--popover-foreground: var(--foreground);
|
|
1328
|
+
|
|
1329
|
+
--muted: var(--neutral-1);
|
|
1330
|
+
--muted-foreground: var(--neutral-5);
|
|
1331
|
+
/* W7-α' (AK-FD1) — strong-muted secondary text. Auto-tracks the dark
|
|
1332
|
+
neutral-6 rung above; by-colour, not alpha. */
|
|
1333
|
+
--muted-foreground-strong: var(--neutral-6);
|
|
1334
|
+
--secondary: var(--neutral-2);
|
|
1335
|
+
--secondary-foreground: var(--foreground);
|
|
1336
|
+
--accent: var(--neutral-3);
|
|
1337
|
+
--accent-foreground: var(--foreground);
|
|
1338
|
+
|
|
1339
|
+
--border: var(--neutral-4);
|
|
1340
|
+
--input: var(--neutral-4);
|
|
1341
|
+
|
|
1342
|
+
--primary: hsl(48 10% 90%);
|
|
1343
|
+
--primary-foreground: hsl(24 10% 10%);
|
|
1344
|
+
--destructive: hsl(0 62.8% 30.6%);
|
|
1345
|
+
--destructive-foreground: hsl(48 10% 90%);
|
|
1346
|
+
--ring: hsl(48 10% 70%);
|
|
1347
|
+
--shadow: hsl(0 0% 5%);
|
|
1348
|
+
|
|
1349
|
+
/* Section palette — brightened for dark backgrounds */
|
|
1350
|
+
--section-color-0: hsl(334 72% 70%);
|
|
1351
|
+
--section-color-1: hsl(272 54% 73%);
|
|
1352
|
+
--section-color-2: hsl(224 67% 72%);
|
|
1353
|
+
--section-color-3: hsl(194 61% 64%);
|
|
1354
|
+
--section-color-4: hsl(163 50% 60%);
|
|
1355
|
+
--section-color-5: hsl(37 73% 67%);
|
|
1356
|
+
--section-color-6: hsl(6 77% 66%);
|
|
1357
|
+
--section-color-7: hsl(286 58% 72%);
|
|
1358
|
+
--section-color-8: hsl(342 71% 69%);
|
|
1359
|
+
--section-color-9: hsl(205 24% 70%);
|
|
1360
|
+
--section-color-10: hsl(86 44% 63%);
|
|
1361
|
+
--section-color-11: hsl(187 63% 65%);
|
|
1362
|
+
--section-color-12: hsl(256 60% 74%);
|
|
1363
|
+
|
|
1364
|
+
--accent-pink: hsl(335 55% 65%);
|
|
1365
|
+
--section-heading: hsl(330 55% 68%);
|
|
1366
|
+
--accent-red: hsl(0 68% 62%);
|
|
1367
|
+
|
|
1368
|
+
--viz-fourier: hsl(6 77% 66%);
|
|
1369
|
+
--viz-chebyshev: hsl(224 67% 72%);
|
|
1370
|
+
--viz-legendre: hsl(286 58% 72%);
|
|
1371
|
+
--viz-amber: var(--section-color-5);
|
|
1372
|
+
--viz-green: var(--section-color-4);
|
|
1373
|
+
|
|
1374
|
+
/* O.W6 Lane D — WCAG companion labels lift to L≈0.85 against the
|
|
1375
|
+
deep dark canvas; same two-token discipline as light mode (canvas
|
|
1376
|
+
hue preserved at `--chart-*`; only the label register shifts). */
|
|
1377
|
+
--chart-ping-label: oklch(0.85 0.12 230);
|
|
1378
|
+
--chart-download-label: oklch(0.85 0.14 22);
|
|
1379
|
+
--chart-upload-label: oklch(0.85 0.12 55);
|
|
1380
|
+
--chart-jitter-label: oklch(0.85 0.14 305);
|
|
1381
|
+
|
|
1382
|
+
/* O.W6 Lane D — Meter track stroke dark companion. Mirrors `:root`
|
|
1383
|
+
(was speedtest's consumer-side `var(--background)` — bg-on-bg
|
|
1384
|
+
invisible at dark mode; F1.V-02 closure). */
|
|
1385
|
+
--meter-track-stroke: var(--foreground);
|
|
1386
|
+
|
|
1387
|
+
--tier-featured: hsl(45 100% 60%);
|
|
1388
|
+
--tier-saved: hsl(210 100% 70%);
|
|
1389
|
+
--like: hsl(0 80% 68%);
|
|
1390
|
+
--success: hsl(142 71% 58%);
|
|
1391
|
+
--warning: hsl(38 92% 60%);
|
|
1392
|
+
--info: hsl(217 91% 70%);
|
|
1393
|
+
--delete: hsl(0 70% 62%);
|
|
1394
|
+
|
|
1395
|
+
/* Semantic foregrounds — off-white over dark plates. Mirrors the
|
|
1396
|
+
`--destructive-foreground` dark pattern (hsl 48 10% 90%). The warning
|
|
1397
|
+
glyph stays dark-on-amber; the dark amber rung is luminous enough that
|
|
1398
|
+
a darker glyph still reads (matches light-mode behaviour). */
|
|
1399
|
+
--success-foreground: hsl(48 10% 96%);
|
|
1400
|
+
--warning-foreground: hsl(24 10% 10%);
|
|
1401
|
+
--info-foreground: hsl(48 10% 96%);
|
|
1402
|
+
|
|
1403
|
+
--shadow-cartoon: 3px 3px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent);
|
|
1404
|
+
--shadow-cartoon-hover: 4px 4px 0px 0px color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
1405
|
+
--shadow-soft: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
1406
|
+
--shadow-elevated: 0 8px 24px rgba(0, 0, 0, 0.35);
|
|
1407
|
+
--shadow-modal:
|
|
1408
|
+
4px 4px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent),
|
|
1409
|
+
0 24px 64px color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
1410
|
+
|
|
1411
|
+
--shadow-cartoon-color: rgb(255 255 255 / 0.07);
|
|
1412
|
+
--shadow-cartoon-color-soft: rgb(255 255 255 / 0.03);
|
|
1413
|
+
|
|
1414
|
+
/* Glass opacity + grain for dark — five-tier ladder, alpha-monotonic.
|
|
1415
|
+
Each rung lifts ~0.08 from its light counterpart so the dark surfaces
|
|
1416
|
+
carry comparable read-weight against the deeper canvas. */
|
|
1417
|
+
--glass-opacity-wash: 0.38;
|
|
1418
|
+
--glass-opacity-quiet: 0.58;
|
|
1419
|
+
--glass-opacity-resting: 0.72;
|
|
1420
|
+
--glass-opacity-floating: 0.88;
|
|
1421
|
+
--glass-opacity-overlay: 0.96;
|
|
1422
|
+
--glass-opacity-chassis: 0.36;
|
|
1423
|
+
--glass-grain-opacity: 0.045;
|
|
1424
|
+
--glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.08);
|
|
1425
|
+
|
|
1426
|
+
/* Hairline-accent dark mirror — see light counterpart at line ~404. */
|
|
1427
|
+
--hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.05);
|
|
1428
|
+
--hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.06);
|
|
1429
|
+
|
|
1430
|
+
/* Specular + curvature — softened for dark backdrops. Disco-grain stays
|
|
1431
|
+
at the same opacity ceiling; the dark grain blend already lifts it. */
|
|
1432
|
+
--glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
|
|
1433
|
+
--glass-curvature-overlay: radial-gradient(
|
|
1434
|
+
ellipse at 50% -20%,
|
|
1435
|
+
hsl(0 0% 100% / 0.06),
|
|
1436
|
+
transparent 60%
|
|
1437
|
+
);
|
|
1438
|
+
|
|
1439
|
+
/* Gold — boosted for dark */
|
|
1440
|
+
--gold: hsl(43 74% 55%);
|
|
1441
|
+
--gold-light: hsl(51 100% 55%);
|
|
1442
|
+
--gold-dark: hsl(34 87% 45%);
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
/* ═══════════════════════════════════════════════
|
|
1446
|
+
§18 TYPED CSS PROPERTIES — Houdini @property registrations
|
|
1447
|
+
(AI.W4 grammar — adjacent to §2.C tokens above)
|
|
1448
|
+
|
|
1449
|
+
Three typed custom properties register with the CSS Houdini @property
|
|
1450
|
+
API so transitions interpolate VALUES (percentage / length) rather
|
|
1451
|
+
than the textual representation. Unregistered fallback is safe — the
|
|
1452
|
+
`initial-value` provides a sensible default for any consumer that
|
|
1453
|
+
imports this stylesheet on a browser that doesn't yet support the
|
|
1454
|
+
typed @property registration (the cross-fade collapses to the
|
|
1455
|
+
initial value, then re-paints at the new state).
|
|
1456
|
+
|
|
1457
|
+
Browser support: Chromium 85+, Safari 16.4+, Firefox 128+. The
|
|
1458
|
+
speedtest deployment target sits well within the floor.
|
|
1459
|
+
|
|
1460
|
+
• --progress-crescendo (percentage) — the leading-edge brightness
|
|
1461
|
+
ramp on `<Progress variant="gradient">` past 85% modelValue.
|
|
1462
|
+
`inherits: false` because the value is consumed at one
|
|
1463
|
+
declaration only (the gradient stop calculation); inheriting
|
|
1464
|
+
would let an unrelated ancestor accidentally drive a sibling
|
|
1465
|
+
progress bar.
|
|
1466
|
+
|
|
1467
|
+
• --phase-tint-amount (percentage) — the chassis depth-of-tint
|
|
1468
|
+
companion to `--phase-color`. `inherits: true` because the
|
|
1469
|
+
value cascades from the chassis root through every region
|
|
1470
|
+
wrapper that reads it for a sympathetic tint (matches the
|
|
1471
|
+
`--phase-color` inheritance pattern).
|
|
1472
|
+
|
|
1473
|
+
• --ripple-radius (length) — the `btn-audacious` press ripple
|
|
1474
|
+
radial. `inherits: false` because each button owns its own
|
|
1475
|
+
ripple state (a hovered parent must not push a ripple-radius
|
|
1476
|
+
onto a non-pressed child).
|
|
1477
|
+
═══════════════════════════════════════════════ */
|
|
1478
|
+
|
|
1479
|
+
@property --progress-crescendo {
|
|
1480
|
+
syntax: "<percentage>";
|
|
1481
|
+
inherits: false;
|
|
1482
|
+
initial-value: 0%;
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
@property --phase-tint-amount {
|
|
1486
|
+
syntax: "<percentage>";
|
|
1487
|
+
inherits: true;
|
|
1488
|
+
initial-value: 0%;
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
@property --ripple-radius {
|
|
1492
|
+
syntax: "<length>";
|
|
1493
|
+
inherits: false;
|
|
1494
|
+
initial-value: 0px;
|
|
1495
|
+
}
|