zabi-components 7.0.2 → 8.1.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/CHANGELOG.md +1924 -0
- package/README.md +287 -11
- package/THEME.md +149 -332
- package/THEMING.md +1329 -163
- package/dist/atoms/ActionPanel.svelte +24 -9
- package/dist/atoms/ActionPanel.svelte.d.ts +2 -0
- package/dist/atoms/Avatar.svelte +104 -0
- package/dist/atoms/Avatar.svelte.d.ts +34 -0
- package/dist/atoms/Badge.svelte +124 -58
- package/dist/atoms/Badge.svelte.d.ts +17 -5
- package/dist/atoms/Button.svelte +212 -62
- package/dist/atoms/Button.svelte.d.ts +33 -2
- package/dist/atoms/Card.svelte +31 -28
- package/dist/atoms/Card.svelte.d.ts +5 -2
- package/dist/atoms/CardContent.svelte +10 -2
- package/dist/atoms/CardContent.svelte.d.ts +2 -0
- package/dist/atoms/CardFooter.svelte +10 -2
- package/dist/atoms/CardFooter.svelte.d.ts +2 -0
- package/dist/atoms/CardHeader.svelte +26 -6
- package/dist/atoms/CardHeader.svelte.d.ts +2 -0
- package/dist/atoms/Checkbox.svelte +52 -21
- package/dist/atoms/Checkbox.svelte.d.ts +6 -2
- package/dist/atoms/CodeBlock.svelte +35 -9
- package/dist/atoms/CodeBlock.svelte.d.ts +13 -3
- package/dist/atoms/ColorPicker.svelte +272 -52
- package/dist/atoms/ColorPicker.svelte.d.ts +6 -1
- package/dist/atoms/Container.svelte +17 -10
- package/dist/atoms/DateField.svelte +107 -0
- package/dist/atoms/DateField.svelte.d.ts +53 -0
- package/dist/atoms/Divider.svelte +4 -4
- package/dist/atoms/FeatureCard.svelte +4 -3
- package/dist/atoms/FieldMessages.svelte +69 -0
- package/dist/atoms/FieldMessages.svelte.d.ts +23 -0
- package/dist/atoms/FloatingActionButton.svelte +174 -0
- package/dist/atoms/FloatingActionButton.svelte.d.ts +51 -0
- package/dist/atoms/Heading.svelte +93 -32
- package/dist/atoms/Heading.svelte.d.ts +24 -4
- package/dist/atoms/IconButton.svelte +242 -53
- package/dist/atoms/IconButton.svelte.d.ts +49 -4
- package/dist/atoms/Input.svelte +267 -74
- package/dist/atoms/Input.svelte.d.ts +32 -2
- package/dist/atoms/List.svelte +13 -2
- package/dist/atoms/List.svelte.d.ts +2 -0
- package/dist/atoms/ListItem.svelte +44 -11
- package/dist/atoms/ListItem.svelte.d.ts +5 -0
- package/dist/atoms/ListItemLeading.svelte +4 -2
- package/dist/atoms/ListItemLeading.svelte.d.ts +1 -1
- package/dist/atoms/OptimizedImage.svelte +11 -2
- package/dist/atoms/OptimizedImage.svelte.d.ts +2 -0
- package/dist/atoms/Progress.svelte +31 -9
- package/dist/atoms/Progress.svelte.d.ts +6 -0
- package/dist/atoms/Radio.svelte +23 -3
- package/dist/atoms/Radio.svelte.d.ts +6 -2
- package/dist/atoms/Rating.svelte +494 -0
- package/dist/atoms/Rating.svelte.d.ts +56 -0
- package/dist/atoms/Select.svelte +475 -135
- package/dist/atoms/Select.svelte.d.ts +52 -2
- package/dist/atoms/SelectionControl.svelte +99 -18
- package/dist/atoms/SelectionControl.svelte.d.ts +6 -3
- package/dist/atoms/Skeleton.svelte +5 -3
- package/dist/atoms/Slider.svelte +309 -0
- package/dist/atoms/Slider.svelte.d.ts +40 -0
- package/dist/atoms/Spinner.svelte +57 -0
- package/dist/atoms/Spinner.svelte.d.ts +19 -0
- package/dist/atoms/Table.svelte +152 -6
- package/dist/atoms/Table.svelte.d.ts +15 -3
- package/dist/atoms/TemporalField.svelte +140 -0
- package/dist/atoms/TemporalField.svelte.d.ts +32 -0
- package/dist/atoms/Text.svelte +56 -15
- package/dist/atoms/Text.svelte.d.ts +13 -4
- package/dist/atoms/Textarea.svelte +57 -45
- package/dist/atoms/Textarea.svelte.d.ts +14 -2
- package/dist/atoms/ThemeToggle.svelte +238 -56
- package/dist/atoms/ThemeToggle.svelte.d.ts +28 -3
- package/dist/atoms/TimeField.svelte +108 -0
- package/dist/atoms/TimeField.svelte.d.ts +54 -0
- package/dist/atoms/Toast.svelte +25 -10
- package/dist/atoms/Toast.svelte.d.ts +2 -0
- package/dist/atoms/Toggle.svelte +60 -19
- package/dist/atoms/Toggle.svelte.d.ts +18 -2
- package/dist/atoms/Tooltip.svelte +583 -40
- package/dist/atoms/Tooltip.svelte.d.ts +26 -0
- package/dist/atoms/ZabiStringsProvider.svelte +45 -0
- package/dist/atoms/ZabiStringsProvider.svelte.d.ts +27 -0
- package/dist/atoms/index.d.ts +17 -0
- package/dist/atoms/index.js +12 -0
- package/dist/atoms/selection-control.styles.d.ts +36 -5
- package/dist/atoms/selection-control.styles.js +40 -9
- package/dist/components/atoms/index.d.ts +17 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/selection-control.styles.d.ts +36 -5
- package/dist/components/atoms/selection-control.styles.d.ts.map +1 -1
- package/dist/components/index.d.ts +83 -3
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/molecules/index.d.ts +46 -0
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/toast-store.d.ts +53 -7
- package/dist/components/molecules/toast-store.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +6 -0
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/types/variants.d.ts +15 -1
- package/dist/components/types/variants.d.ts.map +1 -1
- package/dist/components/util/app-shell.d.ts +28 -0
- package/dist/components/util/app-shell.d.ts.map +1 -0
- package/dist/components/util/avatar.d.ts +36 -0
- package/dist/components/util/avatar.d.ts.map +1 -0
- package/dist/components/util/bottom-sheet.d.ts +30 -0
- package/dist/components/util/bottom-sheet.d.ts.map +1 -0
- package/dist/components/util/bottom-tab-bar.d.ts +35 -0
- package/dist/components/util/bottom-tab-bar.d.ts.map +1 -0
- package/dist/components/util/calendar.d.ts +56 -0
- package/dist/components/util/calendar.d.ts.map +1 -0
- package/dist/components/util/cn.d.ts +8 -0
- package/dist/components/util/cn.d.ts.map +1 -0
- package/dist/components/util/collapsible.d.ts +58 -0
- package/dist/components/util/collapsible.d.ts.map +1 -0
- package/dist/components/util/confirm-dialog.d.ts +12 -0
- package/dist/components/util/confirm-dialog.d.ts.map +1 -0
- package/dist/components/util/date.d.ts +96 -0
- package/dist/components/util/date.d.ts.map +1 -0
- package/dist/components/util/drawer.d.ts +13 -0
- package/dist/components/util/drawer.d.ts.map +1 -0
- package/dist/components/util/dropdown.d.ts +47 -0
- package/dist/components/util/dropdown.d.ts.map +1 -0
- package/dist/components/util/field.d.ts +39 -0
- package/dist/components/util/field.d.ts.map +1 -0
- package/dist/components/util/fit-in-viewport.d.ts +201 -0
- package/dist/components/util/fit-in-viewport.d.ts.map +1 -0
- package/dist/components/util/focus-utils.d.ts +75 -2
- package/dist/components/util/focus-utils.d.ts.map +1 -1
- package/dist/components/util/hydration.d.ts +45 -0
- package/dist/components/util/hydration.d.ts.map +1 -0
- package/dist/components/util/keyboard-inset.d.ts +18 -0
- package/dist/components/util/keyboard-inset.d.ts.map +1 -0
- package/dist/components/util/media-grid.d.ts +51 -0
- package/dist/components/util/media-grid.d.ts.map +1 -0
- package/dist/components/util/media.d.ts +6 -0
- package/dist/components/util/media.d.ts.map +1 -0
- package/dist/components/util/overlay-chrome.d.ts +53 -0
- package/dist/components/util/overlay-chrome.d.ts.map +1 -0
- package/dist/components/util/overlay.d.ts +72 -0
- package/dist/components/util/overlay.d.ts.map +1 -0
- package/dist/components/util/photo.d.ts +215 -0
- package/dist/components/util/photo.d.ts.map +1 -0
- package/dist/components/util/portal.d.ts +23 -0
- package/dist/components/util/portal.d.ts.map +1 -0
- package/dist/components/util/pull-to-refresh.d.ts +27 -0
- package/dist/components/util/pull-to-refresh.d.ts.map +1 -0
- package/dist/components/util/radio-keys.d.ts +25 -0
- package/dist/components/util/radio-keys.d.ts.map +1 -0
- package/dist/components/util/rating.d.ts +23 -0
- package/dist/components/util/rating.d.ts.map +1 -0
- package/dist/components/util/ready-made-strings.d.ts +77 -0
- package/dist/components/util/ready-made-strings.d.ts.map +1 -0
- package/dist/components/util/scroll-padding.d.ts +20 -0
- package/dist/components/util/scroll-padding.d.ts.map +1 -0
- package/dist/components/util/segmented-control.d.ts +16 -0
- package/dist/components/util/segmented-control.d.ts.map +1 -0
- package/dist/components/util/select.d.ts +41 -0
- package/dist/components/util/select.d.ts.map +1 -0
- package/dist/components/util/sheet-drag.d.ts +60 -0
- package/dist/components/util/sheet-drag.d.ts.map +1 -0
- package/dist/components/util/sidebar.d.ts +63 -0
- package/dist/components/util/sidebar.d.ts.map +1 -0
- package/dist/components/util/sortable-list.d.ts +65 -0
- package/dist/components/util/sortable-list.d.ts.map +1 -0
- package/dist/components/util/ssr-safe.d.ts +4 -4
- package/dist/components/util/ssr-safe.d.ts.map +1 -1
- package/dist/components/util/stepper.d.ts +40 -0
- package/dist/components/util/stepper.d.ts.map +1 -0
- package/dist/components/util/swipeable-list-item.d.ts +36 -0
- package/dist/components/util/swipeable-list-item.d.ts.map +1 -0
- package/dist/components/util/theme-mode.d.ts +80 -0
- package/dist/components/util/theme-mode.d.ts.map +1 -0
- package/dist/components/util/toaster.d.ts +93 -0
- package/dist/components/util/toaster.d.ts.map +1 -0
- package/dist/components/util/tooltip.d.ts +10 -0
- package/dist/components/util/tooltip.d.ts.map +1 -0
- package/dist/components/util/top-navbar.d.ts +11 -0
- package/dist/components/util/top-navbar.d.ts.map +1 -0
- package/dist/components/util/touch-target.d.ts +31 -0
- package/dist/components/util/touch-target.d.ts.map +1 -0
- package/dist/components/util/zabi-strings.d.ts +133 -0
- package/dist/components/util/zabi-strings.d.ts.map +1 -0
- package/dist/create-theme/cli.js +169 -0
- package/dist/create-theme/index.d.ts +176 -0
- package/dist/create-theme/index.js +817 -0
- package/dist/create-theme/lib/ramp-math.js +128 -0
- package/dist/create-theme/lib/resolve.js +141 -0
- package/dist/create-theme/theme-data.js +1116 -0
- package/dist/index.d.ts +83 -3
- package/dist/index.js +60 -8
- package/dist/molecules/Alert.svelte +73 -66
- package/dist/molecules/Alert.svelte.d.ts +9 -1
- package/dist/molecules/AppBar.svelte +415 -0
- package/dist/molecules/AppBar.svelte.d.ts +69 -0
- package/dist/molecules/AvatarGroup.svelte +116 -0
- package/dist/molecules/AvatarGroup.svelte.d.ts +40 -0
- package/dist/molecules/BottomSheet.svelte +540 -0
- package/dist/molecules/BottomSheet.svelte.d.ts +93 -0
- package/dist/molecules/BottomTabBar.svelte +297 -0
- package/dist/molecules/BottomTabBar.svelte.d.ts +64 -0
- package/dist/molecules/Calendar.svelte +597 -0
- package/dist/molecules/Calendar.svelte.d.ts +72 -0
- package/dist/molecules/Collapsible.svelte +243 -0
- package/dist/molecules/Collapsible.svelte.d.ts +44 -0
- package/dist/molecules/CollapsibleGroup.svelte +126 -0
- package/dist/molecules/CollapsibleGroup.svelte.d.ts +14 -0
- package/dist/molecules/ComponentDemo.svelte +25 -5
- package/dist/molecules/ComponentDemo.svelte.d.ts +5 -0
- package/dist/molecules/ConfirmDialog.svelte +253 -0
- package/dist/molecules/ConfirmDialog.svelte.d.ts +55 -0
- package/dist/molecules/ContactForm.svelte +46 -19
- package/dist/molecules/ContactForm.svelte.d.ts +10 -0
- package/dist/molecules/Drawer.svelte +394 -0
- package/dist/molecules/Drawer.svelte.d.ts +55 -0
- package/dist/molecules/Dropdown.svelte +540 -50
- package/dist/molecules/Dropdown.svelte.d.ts +49 -6
- package/dist/molecules/DropdownItem.svelte +122 -0
- package/dist/molecules/DropdownItem.svelte.d.ts +28 -0
- package/dist/molecules/EmptyState.svelte +56 -10
- package/dist/molecules/EmptyState.svelte.d.ts +8 -0
- package/dist/molecules/Form.svelte +25 -14
- package/dist/molecules/Form.svelte.d.ts +13 -5
- package/dist/molecules/FormField.svelte +11 -2
- package/dist/molecules/FormField.svelte.d.ts +2 -0
- package/dist/molecules/Header.svelte +13 -3
- package/dist/molecules/Header.svelte.d.ts +2 -0
- package/dist/molecules/ImageUpload.svelte +422 -70
- package/dist/molecules/ImageUpload.svelte.d.ts +61 -5
- package/dist/molecules/MediaGrid.svelte +527 -0
- package/dist/molecules/MediaGrid.svelte.d.ts +77 -0
- package/dist/molecules/Modal.svelte +340 -45
- package/dist/molecules/Modal.svelte.d.ts +59 -7
- package/dist/molecules/NavigationMenu.svelte +15 -3
- package/dist/molecules/NavigationMenu.svelte.d.ts +4 -0
- package/dist/molecules/NavigationMenuContent.svelte +91 -36
- package/dist/molecules/NavigationMenuContent.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuItem.svelte +10 -3
- package/dist/molecules/NavigationMenuItem.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuLink.svelte +10 -2
- package/dist/molecules/NavigationMenuLink.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuList.svelte +19 -4
- package/dist/molecules/NavigationMenuList.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuTrigger.svelte +16 -3
- package/dist/molecules/NavigationMenuTrigger.svelte.d.ts +2 -0
- package/dist/molecules/Page.svelte +38 -2
- package/dist/molecules/Page.svelte.d.ts +13 -0
- package/dist/molecules/PhotoGrid.svelte +433 -0
- package/dist/molecules/PhotoGrid.svelte.d.ts +62 -0
- package/dist/molecules/PhotoViewer.svelte +1116 -0
- package/dist/molecules/PhotoViewer.svelte.d.ts +56 -0
- package/dist/molecules/PropsTable.svelte +26 -11
- package/dist/molecules/PropsTable.svelte.d.ts +5 -0
- package/dist/molecules/PullToRefresh.svelte +263 -0
- package/dist/molecules/PullToRefresh.svelte.d.ts +52 -0
- package/dist/molecules/RadioGroup.svelte +57 -15
- package/dist/molecules/RadioGroup.svelte.d.ts +16 -3
- package/dist/molecules/Section.svelte +13 -5
- package/dist/molecules/Section.svelte.d.ts +3 -1
- package/dist/molecules/SegmentedControl.svelte +323 -0
- package/dist/molecules/SegmentedControl.svelte.d.ts +34 -0
- package/dist/molecules/SidebarBrandHeader.svelte +24 -5
- package/dist/molecules/SidebarBrandHeader.svelte.d.ts +5 -0
- package/dist/molecules/SidebarFooter.svelte +39 -8
- package/dist/molecules/SidebarFooter.svelte.d.ts +5 -0
- package/dist/molecules/SidebarNavSection.svelte +12 -4
- package/dist/molecules/SidebarNavSection.svelte.d.ts +2 -0
- package/dist/molecules/SlideUp.svelte +253 -30
- package/dist/molecules/SlideUp.svelte.d.ts +31 -4
- package/dist/molecules/SortableList.svelte +632 -0
- package/dist/molecules/SortableList.svelte.d.ts +69 -0
- package/dist/molecules/Stepper.svelte +548 -0
- package/dist/molecules/Stepper.svelte.d.ts +39 -0
- package/dist/molecules/StickyActionBar.svelte +191 -0
- package/dist/molecules/StickyActionBar.svelte.d.ts +65 -0
- package/dist/molecules/SwipeableListItem.svelte +334 -0
- package/dist/molecules/SwipeableListItem.svelte.d.ts +54 -0
- package/dist/molecules/Tabs.svelte +254 -24
- package/dist/molecules/Tabs.svelte.d.ts +15 -4
- package/dist/molecules/Toaster.svelte +352 -6
- package/dist/molecules/Toaster.svelte.d.ts +95 -2
- package/dist/molecules/ToasterToast.svelte +279 -62
- package/dist/molecules/ToasterToast.svelte.d.ts +11 -0
- package/dist/molecules/UnsavedChangesBar.svelte +212 -0
- package/dist/molecules/UnsavedChangesBar.svelte.d.ts +43 -0
- package/dist/molecules/index.d.ts +46 -0
- package/dist/molecules/index.js +27 -0
- package/dist/molecules/toast-store.d.ts +53 -7
- package/dist/molecules/toast-store.js +21 -0
- package/dist/organisms/AppShell.svelte +196 -0
- package/dist/organisms/AppShell.svelte.d.ts +61 -0
- package/dist/organisms/SidebarAccountPanel.svelte +111 -12
- package/dist/organisms/SidebarAccountPanel.svelte.d.ts +21 -0
- package/dist/organisms/SidebarNavigation.svelte +193 -69
- package/dist/organisms/SidebarNavigation.svelte.d.ts +31 -1
- package/dist/organisms/SidebarPanel.svelte +45 -16
- package/dist/organisms/SidebarPanel.svelte.d.ts +2 -0
- package/dist/organisms/SidebarShell.svelte +263 -0
- package/dist/organisms/SidebarShell.svelte.d.ts +106 -0
- package/dist/organisms/TopNavbar.svelte +329 -33
- package/dist/organisms/TopNavbar.svelte.d.ts +28 -0
- package/dist/organisms/index.d.ts +6 -0
- package/dist/organisms/index.js +4 -0
- package/dist/routes/lib/variant-utils.d.ts +26 -0
- package/dist/routes/lib/{variant-utils.ts → variant-utils.js} +15 -46
- package/dist/types/components.d.ts +4 -0
- package/dist/types/components.d.ts.map +1 -1
- package/dist/types/events.js +1 -0
- package/dist/types/index.d.ts +605 -25
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/variants.ts +17 -1
- package/dist/util/app-shell.d.ts +27 -0
- package/dist/util/app-shell.js +72 -0
- package/dist/util/avatar.d.ts +35 -0
- package/dist/util/avatar.js +52 -0
- package/dist/util/bottom-sheet.d.ts +29 -0
- package/dist/util/bottom-sheet.js +43 -0
- package/dist/util/bottom-tab-bar.d.ts +34 -0
- package/dist/util/bottom-tab-bar.js +54 -0
- package/dist/util/calendar.d.ts +55 -0
- package/dist/util/calendar.js +74 -0
- package/dist/util/cn.d.ts +7 -0
- package/dist/util/cn.js +48 -0
- package/dist/util/collapsible.d.ts +57 -0
- package/dist/util/collapsible.js +23 -0
- package/dist/util/confirm-dialog.d.ts +11 -0
- package/dist/util/confirm-dialog.js +2 -0
- package/dist/util/date.d.ts +95 -0
- package/dist/util/date.js +237 -0
- package/dist/util/drawer.d.ts +12 -0
- package/dist/util/drawer.js +7 -0
- package/dist/util/dropdown.d.ts +46 -0
- package/dist/util/dropdown.js +21 -0
- package/dist/util/field.d.ts +38 -0
- package/dist/util/field.js +38 -0
- package/dist/util/fit-in-viewport.d.ts +200 -0
- package/dist/util/fit-in-viewport.js +399 -0
- package/dist/util/focus-utils.d.ts +75 -2
- package/dist/util/focus-utils.js +182 -9
- package/dist/util/hydration.d.ts +44 -0
- package/dist/util/hydration.js +58 -0
- package/dist/util/keyboard-inset.d.ts +17 -0
- package/dist/util/keyboard-inset.js +53 -0
- package/dist/util/media-grid.d.ts +50 -0
- package/dist/util/media-grid.js +81 -0
- package/dist/util/media.d.ts +5 -0
- package/dist/util/media.js +10 -0
- package/dist/util/overlay-chrome.d.ts +52 -0
- package/dist/util/overlay-chrome.js +56 -0
- package/dist/util/overlay.d.ts +71 -0
- package/dist/util/overlay.js +240 -0
- package/dist/util/photo.d.ts +214 -0
- package/dist/util/photo.js +206 -0
- package/dist/util/portal.d.ts +22 -0
- package/dist/util/portal.js +50 -0
- package/dist/util/pull-to-refresh.d.ts +26 -0
- package/dist/util/pull-to-refresh.js +30 -0
- package/dist/util/radio-keys.d.ts +24 -0
- package/dist/util/radio-keys.js +49 -0
- package/dist/util/rating.d.ts +22 -0
- package/dist/util/rating.js +26 -0
- package/dist/util/ready-made-strings.d.ts +76 -0
- package/dist/util/ready-made-strings.js +67 -0
- package/dist/util/scroll-padding.d.ts +19 -0
- package/dist/util/scroll-padding.js +44 -0
- package/dist/util/segmented-control.d.ts +15 -0
- package/dist/util/segmented-control.js +1 -0
- package/dist/util/select.d.ts +40 -0
- package/dist/util/select.js +63 -0
- package/dist/util/sheet-drag.d.ts +59 -0
- package/dist/util/sheet-drag.js +241 -0
- package/dist/util/sidebar.d.ts +62 -0
- package/dist/util/sidebar.js +38 -0
- package/dist/util/sortable-list.d.ts +64 -0
- package/dist/util/sortable-list.js +53 -0
- package/dist/util/ssr-safe.d.ts +4 -4
- package/dist/util/stepper.d.ts +39 -0
- package/dist/util/stepper.js +38 -0
- package/dist/util/swipeable-list-item.d.ts +35 -0
- package/dist/util/swipeable-list-item.js +32 -0
- package/dist/util/theme-mode.d.ts +79 -0
- package/dist/util/theme-mode.js +121 -0
- package/dist/util/toaster.d.ts +92 -0
- package/dist/util/toaster.js +75 -0
- package/dist/util/tooltip.d.ts +9 -0
- package/dist/util/tooltip.js +18 -0
- package/dist/util/top-navbar.d.ts +10 -0
- package/dist/util/top-navbar.js +5 -0
- package/dist/util/touch-target.d.ts +30 -0
- package/dist/util/touch-target.js +30 -0
- package/dist/util/zabi-strings.d.ts +132 -0
- package/dist/util/zabi-strings.js +105 -0
- package/dist/zabi-components-colors.css +5 -2
- package/dist/zabi-components-theme-dark-only.css +574 -225
- package/dist/zabi-components-theme-dark.css +574 -225
- package/dist/zabi-components-theme-only.css +1680 -317
- package/dist/zabi-components-theme.css +1680 -317
- package/dist/zabi-components.css +4473 -1158
- package/docs/lucide-icons.md +41 -16
- package/docs/theme-imports.md +81 -11
- package/package.json +51 -29
- package/dist/lib/layout-width-tokens.d.ts +0 -17
- package/dist/lib/layout-width-tokens.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Button.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Button.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Input.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Input.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/List.d.ts +0 -3
- package/dist/lib/showcase/component-docs/List.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Modal.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Modal.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Radio.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Radio.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts +0 -3
- package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Skeleton.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Skeleton.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/_shared.d.ts +0 -12
- package/dist/lib/showcase/component-docs/_shared.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/index.d.ts +0 -4
- package/dist/lib/showcase/component-docs/index.d.ts.map +0 -1
- package/dist/lib/showcase/components-catalog.d.ts +0 -3
- package/dist/lib/showcase/components-catalog.d.ts.map +0 -1
- package/dist/lib/showcase/components-showcase-constants.d.ts +0 -89
- package/dist/lib/showcase/components-showcase-constants.d.ts.map +0 -1
- package/dist/lib/showcase/docs-sidebar-helpers.d.ts +0 -15
- package/dist/lib/showcase/docs-sidebar-helpers.d.ts.map +0 -1
- package/dist/routes/lib/focus-utils.d.ts +0 -12
- package/dist/routes/lib/focus-utils.ts +0 -110
- package/dist/routes/lib/ssr-safe.ts +0 -58
- package/scripts/fix-lucide-svelte-icon-dts.js +0 -35
|
@@ -2,245 +2,594 @@
|
|
|
2
2
|
|
|
3
3
|
/* Dark Mode Theme - CSS Custom Properties */
|
|
4
4
|
/* Import this file after the main theme to enable dark mode support */
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
--zabi-base-600: #52525b
|
|
20
|
-
--zabi-base-650: #484850
|
|
21
|
-
--zabi-base-700: #3f3f46
|
|
22
|
-
--zabi-base-750: #333338
|
|
23
|
-
--zabi-base-800: #27272a
|
|
24
|
-
--zabi-base-850: #1f1f22
|
|
25
|
-
--zabi-base-900: #18181b
|
|
26
|
-
--zabi-base-925: #101013
|
|
27
|
-
--zabi-base-950: #09090b
|
|
28
|
-
/* Mirror @theme --zabi-brand-* ramp (same physical hex; required for standalone dark import) */
|
|
29
|
-
--zabi-brand-50: #f7faff
|
|
30
|
-
--zabi-brand-100: #edf2fb
|
|
31
|
-
--zabi-brand-200: #dfe7fb
|
|
32
|
-
--zabi-brand-300: #ccdbfd
|
|
33
|
-
--zabi-brand-400: #abc4ff
|
|
34
|
-
--zabi-brand-500: #8fa8ff
|
|
35
|
-
--zabi-brand-600: #6e84fa
|
|
36
|
-
--zabi-brand-700: #5366e2
|
|
37
|
-
--zabi-brand-800: #3f4fc0
|
|
38
|
-
--zabi-brand-900: #2f3c99
|
|
39
|
-
--zabi-brand-950: #1f2866
|
|
5
|
+
[data-theme="light"] {
|
|
6
|
+
color-scheme: light;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
[data-theme="dark"] {
|
|
10
|
+
color-scheme: dark;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
[data-theme="auto"] {
|
|
14
|
+
color-scheme: light dark;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.dark,
|
|
18
|
+
[data-theme="dark"] {
|
|
40
19
|
/* Brand Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
41
|
-
--color-brand-50: var(--zabi-brand-950)
|
|
42
|
-
--color-brand-100: var(--zabi-brand-900)
|
|
43
|
-
--color-brand-200: var(--zabi-brand-800)
|
|
44
|
-
--color-brand-300: var(--zabi-brand-700)
|
|
45
|
-
--color-brand-400: var(--zabi-brand-600)
|
|
46
|
-
--color-brand-500: var(--zabi-brand-500)
|
|
47
|
-
--color-brand-600: var(--zabi-brand-400)
|
|
48
|
-
--color-brand-700: var(--zabi-brand-300)
|
|
49
|
-
--color-brand-800: var(--zabi-brand-200)
|
|
50
|
-
--color-brand-900: var(--zabi-brand-100)
|
|
51
|
-
--color-brand-950: var(--zabi-brand-50)
|
|
52
|
-
/* Mirror @theme --zabi-citron-* ramp (same physical hex; required for standalone dark import) */
|
|
53
|
-
--zabi-citron-50: #f9faeb
|
|
54
|
-
--zabi-citron-100: #f1f5cf
|
|
55
|
-
--zabi-citron-200: #e4ecaa
|
|
56
|
-
--zabi-citron-300: #d5e184
|
|
57
|
-
--zabi-citron-400: #c7d460
|
|
58
|
-
--zabi-citron-500: #bbbe64
|
|
59
|
-
--zabi-citron-600: #a3a852
|
|
60
|
-
--zabi-citron-700: #848a43
|
|
61
|
-
--zabi-citron-800: #666c35
|
|
62
|
-
--zabi-citron-900: #4d5229
|
|
63
|
-
--zabi-citron-950: #323518
|
|
20
|
+
--color-brand-50: var(--zabi-brand-950);
|
|
21
|
+
--color-brand-100: var(--zabi-brand-900);
|
|
22
|
+
--color-brand-200: var(--zabi-brand-800);
|
|
23
|
+
--color-brand-300: var(--zabi-brand-700);
|
|
24
|
+
--color-brand-400: var(--zabi-brand-600);
|
|
25
|
+
--color-brand-500: var(--zabi-brand-500);
|
|
26
|
+
--color-brand-600: var(--zabi-brand-400);
|
|
27
|
+
--color-brand-700: var(--zabi-brand-300);
|
|
28
|
+
--color-brand-800: var(--zabi-brand-200);
|
|
29
|
+
--color-brand-900: var(--zabi-brand-100);
|
|
30
|
+
--color-brand-950: var(--zabi-brand-50);
|
|
64
31
|
/* Citron Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
65
|
-
--color-citron-50: var(--zabi-citron-950)
|
|
66
|
-
--color-citron-100: var(--zabi-citron-900)
|
|
67
|
-
--color-citron-200: var(--zabi-citron-800)
|
|
68
|
-
--color-citron-300: var(--zabi-citron-700)
|
|
69
|
-
--color-citron-400: var(--zabi-citron-600)
|
|
70
|
-
--color-citron-500: var(--zabi-citron-500)
|
|
71
|
-
--color-citron-600: var(--zabi-citron-400)
|
|
72
|
-
--color-citron-700: var(--zabi-citron-300)
|
|
73
|
-
--color-citron-800: var(--zabi-citron-200)
|
|
74
|
-
--color-citron-900: var(--zabi-citron-100)
|
|
75
|
-
--color-citron-950: var(--zabi-citron-50)
|
|
76
|
-
/*
|
|
77
|
-
--
|
|
78
|
-
--
|
|
79
|
-
--
|
|
80
|
-
--
|
|
81
|
-
--
|
|
82
|
-
--
|
|
83
|
-
--
|
|
84
|
-
--
|
|
85
|
-
--
|
|
86
|
-
--
|
|
87
|
-
--
|
|
32
|
+
--color-citron-50: var(--zabi-citron-950);
|
|
33
|
+
--color-citron-100: var(--zabi-citron-900);
|
|
34
|
+
--color-citron-200: var(--zabi-citron-800);
|
|
35
|
+
--color-citron-300: var(--zabi-citron-700);
|
|
36
|
+
--color-citron-400: var(--zabi-citron-600);
|
|
37
|
+
--color-citron-500: var(--zabi-citron-500);
|
|
38
|
+
--color-citron-600: var(--zabi-citron-400);
|
|
39
|
+
--color-citron-700: var(--zabi-citron-300);
|
|
40
|
+
--color-citron-800: var(--zabi-citron-200);
|
|
41
|
+
--color-citron-900: var(--zabi-citron-100);
|
|
42
|
+
--color-citron-950: var(--zabi-citron-50);
|
|
43
|
+
/* Accent Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
44
|
+
--color-accent-50: var(--zabi-accent-950);
|
|
45
|
+
--color-accent-100: var(--zabi-accent-900);
|
|
46
|
+
--color-accent-200: var(--zabi-accent-800);
|
|
47
|
+
--color-accent-300: var(--zabi-accent-700);
|
|
48
|
+
--color-accent-400: var(--zabi-accent-600);
|
|
49
|
+
--color-accent-500: var(--zabi-accent-500);
|
|
50
|
+
--color-accent-600: var(--zabi-accent-400);
|
|
51
|
+
--color-accent-700: var(--zabi-accent-300);
|
|
52
|
+
--color-accent-800: var(--zabi-accent-200);
|
|
53
|
+
--color-accent-900: var(--zabi-accent-100);
|
|
54
|
+
--color-accent-950: var(--zabi-accent-50);
|
|
88
55
|
/* Pine Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
89
|
-
--color-pine-50: var(--zabi-pine-950)
|
|
90
|
-
--color-pine-100: var(--zabi-pine-900)
|
|
91
|
-
--color-pine-200: var(--zabi-pine-800)
|
|
92
|
-
--color-pine-300: var(--zabi-pine-700)
|
|
93
|
-
--color-pine-400: var(--zabi-pine-600)
|
|
94
|
-
--color-pine-500: var(--zabi-pine-500)
|
|
95
|
-
--color-pine-600: var(--zabi-pine-400)
|
|
96
|
-
--color-pine-700: var(--zabi-pine-300)
|
|
97
|
-
--color-pine-800: var(--zabi-pine-200)
|
|
98
|
-
--color-pine-900: var(--zabi-pine-100)
|
|
99
|
-
--color-pine-950: var(--zabi-pine-50)
|
|
100
|
-
/* Mirror @theme --zabi-iris-* ramp (same physical hex; required for standalone dark import) */
|
|
101
|
-
--zabi-iris-50: #f4f4fa
|
|
102
|
-
--zabi-iris-100: #e9e9f7
|
|
103
|
-
--zabi-iris-200: #d6d6f0
|
|
104
|
-
--zabi-iris-300: #bdbde6
|
|
105
|
-
--zabi-iris-400: #a3a3d8
|
|
106
|
-
--zabi-iris-500: #6969b3
|
|
107
|
-
--zabi-iris-600: #58589e
|
|
108
|
-
--zabi-iris-700: #474788
|
|
109
|
-
--zabi-iris-800: #38386f
|
|
110
|
-
--zabi-iris-900: #2a2a56
|
|
111
|
-
--zabi-iris-950: #1b1b37
|
|
56
|
+
--color-pine-50: var(--zabi-pine-950);
|
|
57
|
+
--color-pine-100: var(--zabi-pine-900);
|
|
58
|
+
--color-pine-200: var(--zabi-pine-800);
|
|
59
|
+
--color-pine-300: var(--zabi-pine-700);
|
|
60
|
+
--color-pine-400: var(--zabi-pine-600);
|
|
61
|
+
--color-pine-500: var(--zabi-pine-500);
|
|
62
|
+
--color-pine-600: var(--zabi-pine-400);
|
|
63
|
+
--color-pine-700: var(--zabi-pine-300);
|
|
64
|
+
--color-pine-800: var(--zabi-pine-200);
|
|
65
|
+
--color-pine-900: var(--zabi-pine-100);
|
|
66
|
+
--color-pine-950: var(--zabi-pine-50);
|
|
112
67
|
/* Iris Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
113
|
-
--color-iris-50: var(--zabi-iris-950)
|
|
114
|
-
--color-iris-100: var(--zabi-iris-900)
|
|
115
|
-
--color-iris-200: var(--zabi-iris-800)
|
|
116
|
-
--color-iris-300: var(--zabi-iris-700)
|
|
117
|
-
--color-iris-400: var(--zabi-iris-600)
|
|
118
|
-
--color-iris-500: var(--zabi-iris-500)
|
|
119
|
-
--color-iris-600: var(--zabi-iris-400)
|
|
120
|
-
--color-iris-700: var(--zabi-iris-300)
|
|
121
|
-
--color-iris-800: var(--zabi-iris-200)
|
|
122
|
-
--color-iris-900: var(--zabi-iris-100)
|
|
123
|
-
--color-iris-950: var(--zabi-iris-50)
|
|
124
|
-
/* Mirror @theme --zabi-warning-* ramp (same physical hex; required for standalone dark import) */
|
|
125
|
-
--zabi-warning-50: #fffbeb
|
|
126
|
-
--zabi-warning-100: #fef3c7
|
|
127
|
-
--zabi-warning-200: #fde68a
|
|
128
|
-
--zabi-warning-300: #fcd34d
|
|
129
|
-
--zabi-warning-400: #fbbf24
|
|
130
|
-
--zabi-warning-500: #f59e0b
|
|
131
|
-
--zabi-warning-600: #d97706
|
|
132
|
-
--zabi-warning-700: #b45309
|
|
133
|
-
--zabi-warning-800: #92400e
|
|
134
|
-
--zabi-warning-900: #78350f
|
|
135
|
-
--zabi-warning-950: #451a03
|
|
68
|
+
--color-iris-50: var(--zabi-iris-950);
|
|
69
|
+
--color-iris-100: var(--zabi-iris-900);
|
|
70
|
+
--color-iris-200: var(--zabi-iris-800);
|
|
71
|
+
--color-iris-300: var(--zabi-iris-700);
|
|
72
|
+
--color-iris-400: var(--zabi-iris-600);
|
|
73
|
+
--color-iris-500: var(--zabi-iris-500);
|
|
74
|
+
--color-iris-600: var(--zabi-iris-400);
|
|
75
|
+
--color-iris-700: var(--zabi-iris-300);
|
|
76
|
+
--color-iris-800: var(--zabi-iris-200);
|
|
77
|
+
--color-iris-900: var(--zabi-iris-100);
|
|
78
|
+
--color-iris-950: var(--zabi-iris-50);
|
|
136
79
|
/* Warning Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
137
|
-
--color-warning-50: var(--zabi-warning-950)
|
|
138
|
-
--color-warning-100: var(--zabi-warning-900)
|
|
139
|
-
--color-warning-200: var(--zabi-warning-800)
|
|
140
|
-
--color-warning-300: var(--zabi-warning-700)
|
|
141
|
-
--color-warning-400: var(--zabi-warning-600)
|
|
142
|
-
--color-warning-500: var(--zabi-warning-500)
|
|
143
|
-
--color-warning-600: var(--zabi-warning-400)
|
|
144
|
-
--color-warning-700: var(--zabi-warning-300)
|
|
145
|
-
--color-warning-800: var(--zabi-warning-200)
|
|
146
|
-
--color-warning-900: var(--zabi-warning-100)
|
|
147
|
-
--color-warning-950: var(--zabi-warning-50)
|
|
148
|
-
/* Mirror @theme --zabi-error-* ramp (same physical hex; required for standalone dark import) */
|
|
149
|
-
--zabi-error-50: #fef2f2
|
|
150
|
-
--zabi-error-100: #fee2e2
|
|
151
|
-
--zabi-error-200: #fecaca
|
|
152
|
-
--zabi-error-300: #fca5a5
|
|
153
|
-
--zabi-error-400: #f87171
|
|
154
|
-
--zabi-error-500: #ef4444
|
|
155
|
-
--zabi-error-600: #dc2626
|
|
156
|
-
--zabi-error-700: #b91c1c
|
|
157
|
-
--zabi-error-800: #991b1b
|
|
158
|
-
--zabi-error-900: #7f1d1d
|
|
159
|
-
--zabi-error-950: #450a0a
|
|
80
|
+
--color-warning-50: var(--zabi-warning-950);
|
|
81
|
+
--color-warning-100: var(--zabi-warning-900);
|
|
82
|
+
--color-warning-200: var(--zabi-warning-800);
|
|
83
|
+
--color-warning-300: var(--zabi-warning-700);
|
|
84
|
+
--color-warning-400: var(--zabi-warning-600);
|
|
85
|
+
--color-warning-500: var(--zabi-warning-500);
|
|
86
|
+
--color-warning-600: var(--zabi-warning-400);
|
|
87
|
+
--color-warning-700: var(--zabi-warning-300);
|
|
88
|
+
--color-warning-800: var(--zabi-warning-200);
|
|
89
|
+
--color-warning-900: var(--zabi-warning-100);
|
|
90
|
+
--color-warning-950: var(--zabi-warning-50);
|
|
160
91
|
/* Error Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
161
|
-
--color-error-50: var(--zabi-error-950)
|
|
162
|
-
--color-error-100: var(--zabi-error-900)
|
|
163
|
-
--color-error-200: var(--zabi-error-800)
|
|
164
|
-
--color-error-300: var(--zabi-error-700)
|
|
165
|
-
--color-error-400: var(--zabi-error-600)
|
|
166
|
-
--color-error-500: var(--zabi-error-500)
|
|
167
|
-
--color-error-600: var(--zabi-error-400)
|
|
168
|
-
--color-error-700: var(--zabi-error-300)
|
|
169
|
-
--color-error-800: var(--zabi-error-200)
|
|
170
|
-
--color-error-900: var(--zabi-error-100)
|
|
171
|
-
--color-error-950: var(--zabi-error-50)
|
|
92
|
+
--color-error-50: var(--zabi-error-950);
|
|
93
|
+
--color-error-100: var(--zabi-error-900);
|
|
94
|
+
--color-error-200: var(--zabi-error-800);
|
|
95
|
+
--color-error-300: var(--zabi-error-700);
|
|
96
|
+
--color-error-400: var(--zabi-error-600);
|
|
97
|
+
--color-error-500: var(--zabi-error-500);
|
|
98
|
+
--color-error-600: var(--zabi-error-400);
|
|
99
|
+
--color-error-700: var(--zabi-error-300);
|
|
100
|
+
--color-error-800: var(--zabi-error-200);
|
|
101
|
+
--color-error-900: var(--zabi-error-100);
|
|
102
|
+
--color-error-950: var(--zabi-error-50);
|
|
172
103
|
/* Base Color Scale — semantic → physical mirror (1000 − step); 500 is fixed point */
|
|
173
|
-
--color-base-50:
|
|
174
|
-
--color-base-75:
|
|
175
|
-
--color-base-100:
|
|
176
|
-
--color-base-150:
|
|
177
|
-
--color-base-200:
|
|
178
|
-
--color-base-250:
|
|
179
|
-
--color-base-300:
|
|
180
|
-
--color-base-350:
|
|
181
|
-
--color-base-400:
|
|
182
|
-
--color-base-450:
|
|
183
|
-
--color-base-500:
|
|
184
|
-
--color-base-550:
|
|
185
|
-
--color-base-600:
|
|
186
|
-
--color-base-650:
|
|
187
|
-
--color-base-700:
|
|
188
|
-
--color-base-750:
|
|
189
|
-
--color-base-800:
|
|
190
|
-
--color-base-850:
|
|
191
|
-
--color-base-900:
|
|
192
|
-
--color-base-925:
|
|
193
|
-
--color-base-950:
|
|
104
|
+
--color-base-50: var(--zabi-base-950);
|
|
105
|
+
--color-base-75: var(--zabi-base-925);
|
|
106
|
+
--color-base-100: var(--zabi-base-900);
|
|
107
|
+
--color-base-150: var(--zabi-base-850);
|
|
108
|
+
--color-base-200: var(--zabi-base-800);
|
|
109
|
+
--color-base-250: var(--zabi-base-750);
|
|
110
|
+
--color-base-300: var(--zabi-base-700);
|
|
111
|
+
--color-base-350: var(--zabi-base-650);
|
|
112
|
+
--color-base-400: var(--zabi-base-600);
|
|
113
|
+
--color-base-450: var(--zabi-base-550);
|
|
114
|
+
--color-base-500: var(--zabi-base-500);
|
|
115
|
+
--color-base-550: var(--zabi-base-450);
|
|
116
|
+
--color-base-600: var(--zabi-base-400);
|
|
117
|
+
--color-base-650: var(--zabi-base-350);
|
|
118
|
+
--color-base-700: var(--zabi-base-300);
|
|
119
|
+
--color-base-750: var(--zabi-base-250);
|
|
120
|
+
--color-base-800: var(--zabi-base-200);
|
|
121
|
+
--color-base-850: var(--zabi-base-150);
|
|
122
|
+
--color-base-900: var(--zabi-base-100);
|
|
123
|
+
--color-base-925: var(--zabi-base-75);
|
|
124
|
+
--color-base-950: var(--zabi-base-50);
|
|
194
125
|
/* Background Colors - No dark mode overrides needed, base colors are already inverted */
|
|
195
126
|
/* Page Colors - No dark mode overrides needed, base colors are already inverted */
|
|
196
|
-
/*
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
--
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
127
|
+
/* Surface elevation — shadows don't read on dark, so each level steps up +6 OKLCH lightness
|
|
128
|
+
* from the page background (L 21 → 27 → 33 → 39).
|
|
129
|
+
*
|
|
130
|
+
* GENERATED by scripts/generate-surfaces.js from tokens/surface-ladder.js — do not hand-edit.
|
|
131
|
+
* The page is --zabi-base-900. Each level above it is --zabi-base-50 (the same light as the
|
|
132
|
+
* dark hover tint) washed over the page at 6.4% / 13.1% / 19.7%, so every level is the one
|
|
133
|
+
* below it with more light on it, and a --zabi-base-* override carries the whole ladder.
|
|
134
|
+
* Mixing two opaque colours stays opaque, so a modal never lets the page through. With the
|
|
135
|
+
* default greys these resolve to #18181b / #262629 / #363638 / #454547.
|
|
136
|
+
* Enforced by scripts/check-surface-elevation.js (strictly increasing, 5–8 points). */
|
|
137
|
+
--color-surface-base: var(--zabi-base-900);
|
|
138
|
+
--color-surface-raised: color-mix(in srgb, var(--zabi-base-50) 6.4%, var(--zabi-base-900));
|
|
139
|
+
--color-surface-elevated: color-mix(in srgb, var(--zabi-base-50) 13.1%, var(--zabi-base-900));
|
|
140
|
+
--color-surface-overlay: color-mix(in srgb, var(--zabi-base-50) 19.7%, var(--zabi-base-900));
|
|
141
|
+
/* base-400 mirrors to --zabi-base-600 (#52525b), one step lighter than the overlay. */
|
|
142
|
+
--color-surface-overlay-hover: var(--color-base-400);
|
|
143
|
+
/* Inset — the step between the page and the raised surface (L 24). The input
|
|
144
|
+
* field is the library's own inset; see --color-input below. */
|
|
145
|
+
--color-surface-inset: var(--color-base-150);
|
|
146
|
+
/* Distinct from base, raised AND elevated — a neutral chip has no hue to
|
|
147
|
+
* separate it, so it has to separate on lightness wherever it lands. */
|
|
148
|
+
--color-neutral-subtle: var(--color-base-300);
|
|
149
|
+
--color-neutral-border: var(--color-base-200);
|
|
150
|
+
--color-border-overlay: var(--color-base-450);
|
|
151
|
+
/* Background Colors */
|
|
152
|
+
--color-background: var(--color-surface-base);
|
|
153
|
+
--color-background-tertiary: var(--color-base-100);
|
|
154
|
+
/* Page Colors — pinned: light moved the page to base-150, dark stays on base-100 */
|
|
155
|
+
--color-page: var(--color-base-100);
|
|
156
|
+
/* Card Colors — aliases of the surface levels */
|
|
157
|
+
--color-card: var(--color-surface-raised);
|
|
158
|
+
--color-card-hover: var(--color-surface-elevated);
|
|
159
|
+
--color-card-active: var(--color-surface-overlay);
|
|
160
|
+
--color-card-elevated: var(--color-surface-elevated);
|
|
161
|
+
/* Surfaces — numbered aliases of the surface levels */
|
|
162
|
+
--color-surface-1: var(--color-surface-raised);
|
|
163
|
+
--color-surface-2: var(--color-surface-elevated);
|
|
164
|
+
--color-surface-3: var(--color-surface-overlay);
|
|
165
|
+
--color-surface-4: var(--color-base-400);
|
|
166
|
+
/*
|
|
167
|
+
* Secondary text keeps ≥ 4.5:1 on every surface level, including overlays (L39).
|
|
168
|
+
* Only base-650 and lighter pass on the overlay, so caption takes base-650 and description
|
|
169
|
+
* moves one step up to base-700 to stay visibly stronger than caption.
|
|
170
|
+
*/
|
|
171
|
+
--color-description: var(--color-base-700);
|
|
172
|
+
--color-caption: var(--color-base-650);
|
|
173
|
+
/* Interaction fills — light tint on dark, mirroring the light-mode rule.
|
|
174
|
+
* Alpha keeps these one step away from every surface level, which a fixed
|
|
175
|
+
* ramp step cannot guarantee (base-100 in dark IS the page background). */
|
|
176
|
+
--color-surface-hover: rgba(250, 250, 250, 0.08);
|
|
177
|
+
--color-surface-active: rgba(250, 250, 250, 0.14);
|
|
206
178
|
/* Overlay Colors */
|
|
207
|
-
--color-overlay: rgba(0, 0, 0, 0.7)
|
|
208
|
-
/* Input Colors
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
--color-input
|
|
212
|
-
|
|
213
|
-
--color-
|
|
179
|
+
--color-overlay: rgba(0, 0, 0, 0.7);
|
|
180
|
+
/* Input Colors
|
|
181
|
+
* Dark fields are INSET: one step below the raised surface they sit on,
|
|
182
|
+
* which is the dark-mode equivalent of a white field on a grey page. */
|
|
183
|
+
--color-input: var(--color-surface-inset);
|
|
184
|
+
/* Restated here: the root value of a var() alias is resolved at :root. */
|
|
185
|
+
--color-progress-fill: var(--color-action-primary);
|
|
186
|
+
--color-progress-track: var(--color-input);
|
|
187
|
+
/* base-500 (the mirror's fixed point): 3.40:1 on the dark field, 3.67:1 on
|
|
188
|
+
* the page and 3.12:1 on the card. base-300 was 1.57, 1.70 and 1.44. */
|
|
189
|
+
--color-input-border: var(--color-base-500);
|
|
190
|
+
--color-input-border-hover: var(--color-input-border);
|
|
191
|
+
--color-input-hover: var(--color-base-200);
|
|
192
|
+
/* One step past hover, and one short of the border (base-300), so the
|
|
193
|
+
* pressed field keeps its edge: 1.31:1 against the resting field. */
|
|
194
|
+
--color-input-active: var(--color-base-250);
|
|
195
|
+
--color-input-focus: var(--color-base-150);
|
|
196
|
+
--color-input-disabled: var(--color-base-100);
|
|
197
|
+
/* base-500 is the mirror's fixed point, the same grey as it was in light,
|
|
198
|
+
* and a dark field is a far lighter ground for it than a white one is dark:
|
|
199
|
+
* 3.40:1 at rest, 3.08:1 on hover, 2.60:1 pressed. base-600 mirrors to
|
|
200
|
+
* --zabi-base-400 (#a1a1aa): 6.41, 5.81 and 4.90. base-550 would be 4.74
|
|
201
|
+
* at rest but under 4.5 on hover. The value text is 2.0:1 stronger. */
|
|
202
|
+
--color-input-placeholder: var(--color-base-600);
|
|
214
203
|
/* Text Colors - No dark mode overrides needed, base colors are already inverted */
|
|
215
|
-
/* Border Colors -
|
|
216
|
-
|
|
204
|
+
/* Border Colors - the decorative edges need no override, base colors are
|
|
205
|
+
* already inverted. The control boundary does: base-500 is the mirror's
|
|
206
|
+
* fixed point (#71717a in both themes), and the dark surfaces above the card
|
|
207
|
+
* are too light for it (2.49:1 on elevated, 1.98:1 on the overlay). base-600
|
|
208
|
+
* mirrors to --zabi-base-400 (#a1a1aa): 3.73:1 on the overlay, the lightest
|
|
209
|
+
* surface, and more on every level below it. base-550 is 2.76:1 there. */
|
|
210
|
+
--color-control-border: var(--color-base-600);
|
|
211
|
+
/* Focus Colors — the same steps as light, through the mirror: brand-600 is
|
|
212
|
+
* --zabi-brand-400 here, which is also the dark primary fill, so on a
|
|
213
|
+
* primary button the ring is separated by its offset gap exactly as in light.
|
|
214
|
+
* Dark used to stay one step back, on brand-500, the mirror's fixed point.
|
|
215
|
+
* That is 5.4:1 on the dark page but only 2.91:1 on the overlay, the
|
|
216
|
+
* lightest surface (2.78:1 for an amber brand), and a ring in a modal or a
|
|
217
|
+
* menu needs 3:1 too. Restated rather than left to inherit, so an app's
|
|
218
|
+
* light-only override of --color-focus does not reach dark. */
|
|
219
|
+
--color-focus: var(--color-brand-600);
|
|
220
|
+
--color-focus-weak: var(--color-brand-700);
|
|
221
|
+
--color-focus-medium: var(--color-brand-800);
|
|
222
|
+
--color-focus-strong: var(--color-brand-900);
|
|
223
|
+
/* The muted ring, for the same reason as the control boundary above: one
|
|
224
|
+
* step lighter than the fixed point, 3.73:1 on the overlay. */
|
|
225
|
+
--color-focus-ring-muted: var(--color-base-600);
|
|
217
226
|
/* Primary Colors - No dark mode overrides needed, brand colors are already inverted */
|
|
218
227
|
/* Secondary Colors - No dark mode overrides needed, base colors are already inverted */
|
|
219
|
-
/*
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
228
|
+
/* Tinted fills and edges — pinned at steps 100 and 200.
|
|
229
|
+
* The solid, weak, medium, strong and text steps need no override: they
|
|
230
|
+
* resolve through the mirrored ramps. The tints do, because light moved them
|
|
231
|
+
* to steps 200 and 300 to read on a white card, and the mirror of those is
|
|
232
|
+
* too heavy on a dark surface. */
|
|
233
|
+
--color-success-subtle: var(--color-pine-100);
|
|
234
|
+
--color-success-border: var(--color-pine-200);
|
|
235
|
+
--color-warning-subtle: var(--color-warning-100);
|
|
236
|
+
--color-warning-border: var(--color-warning-200);
|
|
237
|
+
--color-error-subtle: var(--color-error-100);
|
|
238
|
+
--color-error-border: var(--color-error-200);
|
|
239
|
+
--color-energetic-subtle: var(--color-citron-100);
|
|
240
|
+
--color-energetic-border: var(--color-citron-200);
|
|
241
|
+
--color-accent-subtle: var(--color-accent-100);
|
|
242
|
+
--color-accent-border: var(--color-accent-200);
|
|
243
|
+
/* Label on a solid accent fill: the dark end of the ramp on its light end. */
|
|
244
|
+
--color-on-accent: var(--zabi-on-accent-dark);
|
|
245
|
+
--color-info-subtle: var(--color-iris-100);
|
|
246
|
+
--color-info-border: var(--color-iris-200);
|
|
247
|
+
/* Neutral Colors — base-550 mirrors to L* 57, which is only 4.35:1 on a
|
|
248
|
+
* raised surface. One step lighter clears AA on every dark surface level. */
|
|
249
|
+
--color-neutral: var(--color-base-600);
|
|
250
|
+
/* Info Colors — no further overrides: @theme uses --color-iris-* (incl. --color-info-active); iris mirrors in .dark via --zabi-iris-* */
|
|
225
251
|
/* ========================================
|
|
226
252
|
ACTION COLORS - Dark Mode Overrides
|
|
227
253
|
======================================== */
|
|
228
254
|
/* Primary Actions - Background adapts automatically via brand color inversion */
|
|
229
|
-
/* 🎯 TO CHANGE bg-action-primary IN DARK MODE: Edit --zabi-brand-* physical ramp
|
|
230
|
-
/*
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
--color-
|
|
236
|
-
--color-action-
|
|
237
|
-
|
|
238
|
-
--color-action-
|
|
239
|
-
--color-action-
|
|
240
|
-
/*
|
|
241
|
-
--
|
|
242
|
-
|
|
243
|
-
--
|
|
244
|
-
--
|
|
245
|
-
--
|
|
246
|
-
|
|
255
|
+
/* 🎯 TO CHANGE bg-action-primary IN DARK MODE: Edit the --zabi-brand-* physical ramp in @theme (semantic --color-brand-* follows the mirror) */
|
|
256
|
+
/* "On brand" in dark: --zabi-on-brand-dark, by default the physical dark end
|
|
257
|
+
* of the brand ramp on the physical light end used as the dark-mode primary
|
|
258
|
+
* fill (7.21:1). --color-action-primary-text is restated, as it always
|
|
259
|
+
* was here, so that an app's light-only override of it does not carry a
|
|
260
|
+
* white label onto the light dark-mode fill. */
|
|
261
|
+
--color-on-brand: var(--zabi-on-brand-dark);
|
|
262
|
+
--color-action-primary-text: var(--color-on-brand);
|
|
263
|
+
/* Pinned like the other tints: light moved these a step darker. */
|
|
264
|
+
--color-action-primary-subtle: var(--color-brand-100);
|
|
265
|
+
--color-action-primary-subtle-hover: var(--color-brand-200);
|
|
266
|
+
/* Half a step past the dark hover fill, as in light. */
|
|
267
|
+
--color-action-primary-subtle-active: color-mix(in srgb, var(--color-brand-300) 50%, var(--color-brand-200));
|
|
268
|
+
/* Secondary Actions - light alpha tint instead of the light-mode dark tint */
|
|
269
|
+
--color-action-secondary: rgba(250, 250, 250, 0.09);
|
|
270
|
+
--color-action-secondary-hover: rgba(250, 250, 250, 0.15);
|
|
271
|
+
--color-action-secondary-active: rgba(250, 250, 250, 0.21);
|
|
272
|
+
/* Disabled Actions - base-200 in dark is #27272a, still the quietest fill.
|
|
273
|
+
* Pinned: light moved a step darker to stay visible on its darker page. */
|
|
274
|
+
--color-action-disabled: var(--color-base-200);
|
|
275
|
+
--color-action-disabled-border: var(--color-base-250);
|
|
276
|
+
/* Danger Actions — restated as aliases, not re-pointed.
|
|
277
|
+
* These resolve through the mirrored --color-error-* scale, so dark danger
|
|
278
|
+
* is the same step of the same ramp as light danger. They are repeated here
|
|
279
|
+
* only because `zabi-components/theme-dark-only` has to stand alone as a
|
|
280
|
+
* complete import (validate-theme.js enforces that). The raw hex this
|
|
281
|
+
* replaced pinned dark danger brighter than light, which is why the
|
|
282
|
+
* destructive action was the loudest element on a dark page. */
|
|
283
|
+
--color-action-danger: var(--color-error-600);
|
|
284
|
+
--color-action-danger-hover: var(--color-error-700);
|
|
285
|
+
--color-action-danger-active: var(--color-error-800);
|
|
286
|
+
--color-action-danger-subtle: var(--color-error-100);
|
|
287
|
+
--color-action-danger-subtle-hover: var(--color-error-200);
|
|
288
|
+
--color-action-danger-text: var(--color-error-50);
|
|
289
|
+
/* Shadow Colors — black, not the light theme's ink tint */
|
|
290
|
+
--shadow-color: 0 0 0;
|
|
291
|
+
--shadow-opacity: 0.3;
|
|
292
|
+
--shadow-sm: 0 1px 3px 0 rgb(var(--shadow-color) / var(--shadow-opacity)), 0 1px 2px -1px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
293
|
+
--shadow-md: 0 4px 6px -1px rgb(var(--shadow-color) / var(--shadow-opacity)), 0 2px 4px -2px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
294
|
+
--shadow-lg: 0 10px 15px -3px rgb(var(--shadow-color) / var(--shadow-opacity)), 0 4px 6px -4px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
295
|
+
--shadow-xl: 0 20px 25px -5px rgb(var(--shadow-color) / var(--shadow-opacity)), 0 8px 10px -6px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
296
|
+
/* Not a token: tells the browser the page is dark, so what it draws itself
|
|
297
|
+
* (date and time pickers, scrollbars, autofill, the caret of a native
|
|
298
|
+
* select) is dark too. It is the last declaration on purpose:
|
|
299
|
+
* scripts/sync-theme-tokens.js rewrites the ramp aliases at the top of this
|
|
300
|
+
* rule. The build publishes this rule under [data-theme="dark"] and, inside
|
|
301
|
+
* the dark media query, [data-theme="auto"], and every one of them carries
|
|
302
|
+
* it. Until 8.1 only the attributes set it and the class did not. */
|
|
303
|
+
color-scheme: dark;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* The same declarations again, for data-theme="auto" when the system is dark. */
|
|
307
|
+
@media (prefers-color-scheme: dark) {
|
|
308
|
+
[data-theme="auto"] {
|
|
309
|
+
/* Brand Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
310
|
+
--color-brand-50: var(--zabi-brand-950);
|
|
311
|
+
--color-brand-100: var(--zabi-brand-900);
|
|
312
|
+
--color-brand-200: var(--zabi-brand-800);
|
|
313
|
+
--color-brand-300: var(--zabi-brand-700);
|
|
314
|
+
--color-brand-400: var(--zabi-brand-600);
|
|
315
|
+
--color-brand-500: var(--zabi-brand-500);
|
|
316
|
+
--color-brand-600: var(--zabi-brand-400);
|
|
317
|
+
--color-brand-700: var(--zabi-brand-300);
|
|
318
|
+
--color-brand-800: var(--zabi-brand-200);
|
|
319
|
+
--color-brand-900: var(--zabi-brand-100);
|
|
320
|
+
--color-brand-950: var(--zabi-brand-50);
|
|
321
|
+
/* Citron Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
322
|
+
--color-citron-50: var(--zabi-citron-950);
|
|
323
|
+
--color-citron-100: var(--zabi-citron-900);
|
|
324
|
+
--color-citron-200: var(--zabi-citron-800);
|
|
325
|
+
--color-citron-300: var(--zabi-citron-700);
|
|
326
|
+
--color-citron-400: var(--zabi-citron-600);
|
|
327
|
+
--color-citron-500: var(--zabi-citron-500);
|
|
328
|
+
--color-citron-600: var(--zabi-citron-400);
|
|
329
|
+
--color-citron-700: var(--zabi-citron-300);
|
|
330
|
+
--color-citron-800: var(--zabi-citron-200);
|
|
331
|
+
--color-citron-900: var(--zabi-citron-100);
|
|
332
|
+
--color-citron-950: var(--zabi-citron-50);
|
|
333
|
+
/* Accent Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
334
|
+
--color-accent-50: var(--zabi-accent-950);
|
|
335
|
+
--color-accent-100: var(--zabi-accent-900);
|
|
336
|
+
--color-accent-200: var(--zabi-accent-800);
|
|
337
|
+
--color-accent-300: var(--zabi-accent-700);
|
|
338
|
+
--color-accent-400: var(--zabi-accent-600);
|
|
339
|
+
--color-accent-500: var(--zabi-accent-500);
|
|
340
|
+
--color-accent-600: var(--zabi-accent-400);
|
|
341
|
+
--color-accent-700: var(--zabi-accent-300);
|
|
342
|
+
--color-accent-800: var(--zabi-accent-200);
|
|
343
|
+
--color-accent-900: var(--zabi-accent-100);
|
|
344
|
+
--color-accent-950: var(--zabi-accent-50);
|
|
345
|
+
/* Pine Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
346
|
+
--color-pine-50: var(--zabi-pine-950);
|
|
347
|
+
--color-pine-100: var(--zabi-pine-900);
|
|
348
|
+
--color-pine-200: var(--zabi-pine-800);
|
|
349
|
+
--color-pine-300: var(--zabi-pine-700);
|
|
350
|
+
--color-pine-400: var(--zabi-pine-600);
|
|
351
|
+
--color-pine-500: var(--zabi-pine-500);
|
|
352
|
+
--color-pine-600: var(--zabi-pine-400);
|
|
353
|
+
--color-pine-700: var(--zabi-pine-300);
|
|
354
|
+
--color-pine-800: var(--zabi-pine-200);
|
|
355
|
+
--color-pine-900: var(--zabi-pine-100);
|
|
356
|
+
--color-pine-950: var(--zabi-pine-50);
|
|
357
|
+
/* Iris Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
358
|
+
--color-iris-50: var(--zabi-iris-950);
|
|
359
|
+
--color-iris-100: var(--zabi-iris-900);
|
|
360
|
+
--color-iris-200: var(--zabi-iris-800);
|
|
361
|
+
--color-iris-300: var(--zabi-iris-700);
|
|
362
|
+
--color-iris-400: var(--zabi-iris-600);
|
|
363
|
+
--color-iris-500: var(--zabi-iris-500);
|
|
364
|
+
--color-iris-600: var(--zabi-iris-400);
|
|
365
|
+
--color-iris-700: var(--zabi-iris-300);
|
|
366
|
+
--color-iris-800: var(--zabi-iris-200);
|
|
367
|
+
--color-iris-900: var(--zabi-iris-100);
|
|
368
|
+
--color-iris-950: var(--zabi-iris-50);
|
|
369
|
+
/* Warning Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
370
|
+
--color-warning-50: var(--zabi-warning-950);
|
|
371
|
+
--color-warning-100: var(--zabi-warning-900);
|
|
372
|
+
--color-warning-200: var(--zabi-warning-800);
|
|
373
|
+
--color-warning-300: var(--zabi-warning-700);
|
|
374
|
+
--color-warning-400: var(--zabi-warning-600);
|
|
375
|
+
--color-warning-500: var(--zabi-warning-500);
|
|
376
|
+
--color-warning-600: var(--zabi-warning-400);
|
|
377
|
+
--color-warning-700: var(--zabi-warning-300);
|
|
378
|
+
--color-warning-800: var(--zabi-warning-200);
|
|
379
|
+
--color-warning-900: var(--zabi-warning-100);
|
|
380
|
+
--color-warning-950: var(--zabi-warning-50);
|
|
381
|
+
/* Error Color Scale — semantic → physical mirror (1000 − step); 500 fixed point */
|
|
382
|
+
--color-error-50: var(--zabi-error-950);
|
|
383
|
+
--color-error-100: var(--zabi-error-900);
|
|
384
|
+
--color-error-200: var(--zabi-error-800);
|
|
385
|
+
--color-error-300: var(--zabi-error-700);
|
|
386
|
+
--color-error-400: var(--zabi-error-600);
|
|
387
|
+
--color-error-500: var(--zabi-error-500);
|
|
388
|
+
--color-error-600: var(--zabi-error-400);
|
|
389
|
+
--color-error-700: var(--zabi-error-300);
|
|
390
|
+
--color-error-800: var(--zabi-error-200);
|
|
391
|
+
--color-error-900: var(--zabi-error-100);
|
|
392
|
+
--color-error-950: var(--zabi-error-50);
|
|
393
|
+
/* Base Color Scale — semantic → physical mirror (1000 − step); 500 is fixed point */
|
|
394
|
+
--color-base-50: var(--zabi-base-950);
|
|
395
|
+
--color-base-75: var(--zabi-base-925);
|
|
396
|
+
--color-base-100: var(--zabi-base-900);
|
|
397
|
+
--color-base-150: var(--zabi-base-850);
|
|
398
|
+
--color-base-200: var(--zabi-base-800);
|
|
399
|
+
--color-base-250: var(--zabi-base-750);
|
|
400
|
+
--color-base-300: var(--zabi-base-700);
|
|
401
|
+
--color-base-350: var(--zabi-base-650);
|
|
402
|
+
--color-base-400: var(--zabi-base-600);
|
|
403
|
+
--color-base-450: var(--zabi-base-550);
|
|
404
|
+
--color-base-500: var(--zabi-base-500);
|
|
405
|
+
--color-base-550: var(--zabi-base-450);
|
|
406
|
+
--color-base-600: var(--zabi-base-400);
|
|
407
|
+
--color-base-650: var(--zabi-base-350);
|
|
408
|
+
--color-base-700: var(--zabi-base-300);
|
|
409
|
+
--color-base-750: var(--zabi-base-250);
|
|
410
|
+
--color-base-800: var(--zabi-base-200);
|
|
411
|
+
--color-base-850: var(--zabi-base-150);
|
|
412
|
+
--color-base-900: var(--zabi-base-100);
|
|
413
|
+
--color-base-925: var(--zabi-base-75);
|
|
414
|
+
--color-base-950: var(--zabi-base-50);
|
|
415
|
+
/* Background Colors - No dark mode overrides needed, base colors are already inverted */
|
|
416
|
+
/* Page Colors - No dark mode overrides needed, base colors are already inverted */
|
|
417
|
+
/* Surface elevation — shadows don't read on dark, so each level steps up +6 OKLCH lightness
|
|
418
|
+
* from the page background (L 21 → 27 → 33 → 39).
|
|
419
|
+
*
|
|
420
|
+
* GENERATED by scripts/generate-surfaces.js from tokens/surface-ladder.js — do not hand-edit.
|
|
421
|
+
* The page is --zabi-base-900. Each level above it is --zabi-base-50 (the same light as the
|
|
422
|
+
* dark hover tint) washed over the page at 6.4% / 13.1% / 19.7%, so every level is the one
|
|
423
|
+
* below it with more light on it, and a --zabi-base-* override carries the whole ladder.
|
|
424
|
+
* Mixing two opaque colours stays opaque, so a modal never lets the page through. With the
|
|
425
|
+
* default greys these resolve to #18181b / #262629 / #363638 / #454547.
|
|
426
|
+
* Enforced by scripts/check-surface-elevation.js (strictly increasing, 5–8 points). */
|
|
427
|
+
--color-surface-base: var(--zabi-base-900);
|
|
428
|
+
--color-surface-raised: color-mix(in srgb, var(--zabi-base-50) 6.4%, var(--zabi-base-900));
|
|
429
|
+
--color-surface-elevated: color-mix(in srgb, var(--zabi-base-50) 13.1%, var(--zabi-base-900));
|
|
430
|
+
--color-surface-overlay: color-mix(in srgb, var(--zabi-base-50) 19.7%, var(--zabi-base-900));
|
|
431
|
+
/* base-400 mirrors to --zabi-base-600 (#52525b), one step lighter than the overlay. */
|
|
432
|
+
--color-surface-overlay-hover: var(--color-base-400);
|
|
433
|
+
/* Inset — the step between the page and the raised surface (L 24). The input
|
|
434
|
+
* field is the library's own inset; see --color-input below. */
|
|
435
|
+
--color-surface-inset: var(--color-base-150);
|
|
436
|
+
/* Distinct from base, raised AND elevated — a neutral chip has no hue to
|
|
437
|
+
* separate it, so it has to separate on lightness wherever it lands. */
|
|
438
|
+
--color-neutral-subtle: var(--color-base-300);
|
|
439
|
+
--color-neutral-border: var(--color-base-200);
|
|
440
|
+
--color-border-overlay: var(--color-base-450);
|
|
441
|
+
/* Background Colors */
|
|
442
|
+
--color-background: var(--color-surface-base);
|
|
443
|
+
--color-background-tertiary: var(--color-base-100);
|
|
444
|
+
/* Page Colors — pinned: light moved the page to base-150, dark stays on base-100 */
|
|
445
|
+
--color-page: var(--color-base-100);
|
|
446
|
+
/* Card Colors — aliases of the surface levels */
|
|
447
|
+
--color-card: var(--color-surface-raised);
|
|
448
|
+
--color-card-hover: var(--color-surface-elevated);
|
|
449
|
+
--color-card-active: var(--color-surface-overlay);
|
|
450
|
+
--color-card-elevated: var(--color-surface-elevated);
|
|
451
|
+
/* Surfaces — numbered aliases of the surface levels */
|
|
452
|
+
--color-surface-1: var(--color-surface-raised);
|
|
453
|
+
--color-surface-2: var(--color-surface-elevated);
|
|
454
|
+
--color-surface-3: var(--color-surface-overlay);
|
|
455
|
+
--color-surface-4: var(--color-base-400);
|
|
456
|
+
/*
|
|
457
|
+
* Secondary text keeps ≥ 4.5:1 on every surface level, including overlays (L39).
|
|
458
|
+
* Only base-650 and lighter pass on the overlay, so caption takes base-650 and description
|
|
459
|
+
* moves one step up to base-700 to stay visibly stronger than caption.
|
|
460
|
+
*/
|
|
461
|
+
--color-description: var(--color-base-700);
|
|
462
|
+
--color-caption: var(--color-base-650);
|
|
463
|
+
/* Interaction fills — light tint on dark, mirroring the light-mode rule.
|
|
464
|
+
* Alpha keeps these one step away from every surface level, which a fixed
|
|
465
|
+
* ramp step cannot guarantee (base-100 in dark IS the page background). */
|
|
466
|
+
--color-surface-hover: rgba(250, 250, 250, 0.08);
|
|
467
|
+
--color-surface-active: rgba(250, 250, 250, 0.14);
|
|
468
|
+
/* Overlay Colors */
|
|
469
|
+
--color-overlay: rgba(0, 0, 0, 0.7);
|
|
470
|
+
/* Input Colors
|
|
471
|
+
* Dark fields are INSET: one step below the raised surface they sit on,
|
|
472
|
+
* which is the dark-mode equivalent of a white field on a grey page. */
|
|
473
|
+
--color-input: var(--color-surface-inset);
|
|
474
|
+
/* Restated here: the root value of a var() alias is resolved at :root. */
|
|
475
|
+
--color-progress-fill: var(--color-action-primary);
|
|
476
|
+
--color-progress-track: var(--color-input);
|
|
477
|
+
/* base-500 (the mirror's fixed point): 3.40:1 on the dark field, 3.67:1 on
|
|
478
|
+
* the page and 3.12:1 on the card. base-300 was 1.57, 1.70 and 1.44. */
|
|
479
|
+
--color-input-border: var(--color-base-500);
|
|
480
|
+
--color-input-border-hover: var(--color-input-border);
|
|
481
|
+
--color-input-hover: var(--color-base-200);
|
|
482
|
+
/* One step past hover, and one short of the border (base-300), so the
|
|
483
|
+
* pressed field keeps its edge: 1.31:1 against the resting field. */
|
|
484
|
+
--color-input-active: var(--color-base-250);
|
|
485
|
+
--color-input-focus: var(--color-base-150);
|
|
486
|
+
--color-input-disabled: var(--color-base-100);
|
|
487
|
+
/* base-500 is the mirror's fixed point, the same grey as it was in light,
|
|
488
|
+
* and a dark field is a far lighter ground for it than a white one is dark:
|
|
489
|
+
* 3.40:1 at rest, 3.08:1 on hover, 2.60:1 pressed. base-600 mirrors to
|
|
490
|
+
* --zabi-base-400 (#a1a1aa): 6.41, 5.81 and 4.90. base-550 would be 4.74
|
|
491
|
+
* at rest but under 4.5 on hover. The value text is 2.0:1 stronger. */
|
|
492
|
+
--color-input-placeholder: var(--color-base-600);
|
|
493
|
+
/* Text Colors - No dark mode overrides needed, base colors are already inverted */
|
|
494
|
+
/* Border Colors - the decorative edges need no override, base colors are
|
|
495
|
+
* already inverted. The control boundary does: base-500 is the mirror's
|
|
496
|
+
* fixed point (#71717a in both themes), and the dark surfaces above the card
|
|
497
|
+
* are too light for it (2.49:1 on elevated, 1.98:1 on the overlay). base-600
|
|
498
|
+
* mirrors to --zabi-base-400 (#a1a1aa): 3.73:1 on the overlay, the lightest
|
|
499
|
+
* surface, and more on every level below it. base-550 is 2.76:1 there. */
|
|
500
|
+
--color-control-border: var(--color-base-600);
|
|
501
|
+
/* Focus Colors — the same steps as light, through the mirror: brand-600 is
|
|
502
|
+
* --zabi-brand-400 here, which is also the dark primary fill, so on a
|
|
503
|
+
* primary button the ring is separated by its offset gap exactly as in light.
|
|
504
|
+
* Dark used to stay one step back, on brand-500, the mirror's fixed point.
|
|
505
|
+
* That is 5.4:1 on the dark page but only 2.91:1 on the overlay, the
|
|
506
|
+
* lightest surface (2.78:1 for an amber brand), and a ring in a modal or a
|
|
507
|
+
* menu needs 3:1 too. Restated rather than left to inherit, so an app's
|
|
508
|
+
* light-only override of --color-focus does not reach dark. */
|
|
509
|
+
--color-focus: var(--color-brand-600);
|
|
510
|
+
--color-focus-weak: var(--color-brand-700);
|
|
511
|
+
--color-focus-medium: var(--color-brand-800);
|
|
512
|
+
--color-focus-strong: var(--color-brand-900);
|
|
513
|
+
/* The muted ring, for the same reason as the control boundary above: one
|
|
514
|
+
* step lighter than the fixed point, 3.73:1 on the overlay. */
|
|
515
|
+
--color-focus-ring-muted: var(--color-base-600);
|
|
516
|
+
/* Primary Colors - No dark mode overrides needed, brand colors are already inverted */
|
|
517
|
+
/* Secondary Colors - No dark mode overrides needed, base colors are already inverted */
|
|
518
|
+
/* Tinted fills and edges — pinned at steps 100 and 200.
|
|
519
|
+
* The solid, weak, medium, strong and text steps need no override: they
|
|
520
|
+
* resolve through the mirrored ramps. The tints do, because light moved them
|
|
521
|
+
* to steps 200 and 300 to read on a white card, and the mirror of those is
|
|
522
|
+
* too heavy on a dark surface. */
|
|
523
|
+
--color-success-subtle: var(--color-pine-100);
|
|
524
|
+
--color-success-border: var(--color-pine-200);
|
|
525
|
+
--color-warning-subtle: var(--color-warning-100);
|
|
526
|
+
--color-warning-border: var(--color-warning-200);
|
|
527
|
+
--color-error-subtle: var(--color-error-100);
|
|
528
|
+
--color-error-border: var(--color-error-200);
|
|
529
|
+
--color-energetic-subtle: var(--color-citron-100);
|
|
530
|
+
--color-energetic-border: var(--color-citron-200);
|
|
531
|
+
--color-accent-subtle: var(--color-accent-100);
|
|
532
|
+
--color-accent-border: var(--color-accent-200);
|
|
533
|
+
/* Label on a solid accent fill: the dark end of the ramp on its light end. */
|
|
534
|
+
--color-on-accent: var(--zabi-on-accent-dark);
|
|
535
|
+
--color-info-subtle: var(--color-iris-100);
|
|
536
|
+
--color-info-border: var(--color-iris-200);
|
|
537
|
+
/* Neutral Colors — base-550 mirrors to L* 57, which is only 4.35:1 on a
|
|
538
|
+
* raised surface. One step lighter clears AA on every dark surface level. */
|
|
539
|
+
--color-neutral: var(--color-base-600);
|
|
540
|
+
/* Info Colors — no further overrides: @theme uses --color-iris-* (incl. --color-info-active); iris mirrors in .dark via --zabi-iris-* */
|
|
541
|
+
/* ========================================
|
|
542
|
+
ACTION COLORS - Dark Mode Overrides
|
|
543
|
+
======================================== */
|
|
544
|
+
/* Primary Actions - Background adapts automatically via brand color inversion */
|
|
545
|
+
/* 🎯 TO CHANGE bg-action-primary IN DARK MODE: Edit the --zabi-brand-* physical ramp in @theme (semantic --color-brand-* follows the mirror) */
|
|
546
|
+
/* "On brand" in dark: --zabi-on-brand-dark, by default the physical dark end
|
|
547
|
+
* of the brand ramp on the physical light end used as the dark-mode primary
|
|
548
|
+
* fill (7.21:1). --color-action-primary-text is restated, as it always
|
|
549
|
+
* was here, so that an app's light-only override of it does not carry a
|
|
550
|
+
* white label onto the light dark-mode fill. */
|
|
551
|
+
--color-on-brand: var(--zabi-on-brand-dark);
|
|
552
|
+
--color-action-primary-text: var(--color-on-brand);
|
|
553
|
+
/* Pinned like the other tints: light moved these a step darker. */
|
|
554
|
+
--color-action-primary-subtle: var(--color-brand-100);
|
|
555
|
+
--color-action-primary-subtle-hover: var(--color-brand-200);
|
|
556
|
+
/* Half a step past the dark hover fill, as in light. */
|
|
557
|
+
--color-action-primary-subtle-active: color-mix(in srgb, var(--color-brand-300) 50%, var(--color-brand-200));
|
|
558
|
+
/* Secondary Actions - light alpha tint instead of the light-mode dark tint */
|
|
559
|
+
--color-action-secondary: rgba(250, 250, 250, 0.09);
|
|
560
|
+
--color-action-secondary-hover: rgba(250, 250, 250, 0.15);
|
|
561
|
+
--color-action-secondary-active: rgba(250, 250, 250, 0.21);
|
|
562
|
+
/* Disabled Actions - base-200 in dark is #27272a, still the quietest fill.
|
|
563
|
+
* Pinned: light moved a step darker to stay visible on its darker page. */
|
|
564
|
+
--color-action-disabled: var(--color-base-200);
|
|
565
|
+
--color-action-disabled-border: var(--color-base-250);
|
|
566
|
+
/* Danger Actions — restated as aliases, not re-pointed.
|
|
567
|
+
* These resolve through the mirrored --color-error-* scale, so dark danger
|
|
568
|
+
* is the same step of the same ramp as light danger. They are repeated here
|
|
569
|
+
* only because `zabi-components/theme-dark-only` has to stand alone as a
|
|
570
|
+
* complete import (validate-theme.js enforces that). The raw hex this
|
|
571
|
+
* replaced pinned dark danger brighter than light, which is why the
|
|
572
|
+
* destructive action was the loudest element on a dark page. */
|
|
573
|
+
--color-action-danger: var(--color-error-600);
|
|
574
|
+
--color-action-danger-hover: var(--color-error-700);
|
|
575
|
+
--color-action-danger-active: var(--color-error-800);
|
|
576
|
+
--color-action-danger-subtle: var(--color-error-100);
|
|
577
|
+
--color-action-danger-subtle-hover: var(--color-error-200);
|
|
578
|
+
--color-action-danger-text: var(--color-error-50);
|
|
579
|
+
/* Shadow Colors — black, not the light theme's ink tint */
|
|
580
|
+
--shadow-color: 0 0 0;
|
|
581
|
+
--shadow-opacity: 0.3;
|
|
582
|
+
--shadow-sm: 0 1px 3px 0 rgb(var(--shadow-color) / var(--shadow-opacity)), 0 1px 2px -1px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
583
|
+
--shadow-md: 0 4px 6px -1px rgb(var(--shadow-color) / var(--shadow-opacity)), 0 2px 4px -2px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
584
|
+
--shadow-lg: 0 10px 15px -3px rgb(var(--shadow-color) / var(--shadow-opacity)), 0 4px 6px -4px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
585
|
+
--shadow-xl: 0 20px 25px -5px rgb(var(--shadow-color) / var(--shadow-opacity)), 0 8px 10px -6px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
586
|
+
/* Not a token: tells the browser the page is dark, so what it draws itself
|
|
587
|
+
* (date and time pickers, scrollbars, autofill, the caret of a native
|
|
588
|
+
* select) is dark too. It is the last declaration on purpose:
|
|
589
|
+
* scripts/sync-theme-tokens.js rewrites the ramp aliases at the top of this
|
|
590
|
+
* rule. The build publishes this rule under [data-theme="dark"] and, inside
|
|
591
|
+
* the dark media query, [data-theme="auto"], and every one of them carries
|
|
592
|
+
* it. Until 8.1 only the attributes set it and the class did not. */
|
|
593
|
+
color-scheme: dark;
|
|
594
|
+
}
|
|
595
|
+
}
|