zabi-components 8.1.0 → 9.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/CHANGELOG.md +1011 -0
- package/README.md +1 -1
- package/THEME.md +18 -5
- package/THEMING.md +308 -74
- package/dist/atoms/ActionPanel.svelte +1 -1
- package/dist/atoms/Avatar.svelte +19 -3
- package/dist/atoms/Avatar.svelte.d.ts +12 -0
- package/dist/atoms/Badge.svelte +37 -8
- package/dist/atoms/Badge.svelte.d.ts +6 -0
- package/dist/atoms/Block.svelte +74 -0
- package/dist/atoms/Block.svelte.d.ts +29 -0
- package/dist/atoms/Button.svelte +52 -15
- package/dist/atoms/Button.svelte.d.ts +3 -2
- package/dist/atoms/Card.svelte +181 -25
- package/dist/atoms/Card.svelte.d.ts +55 -3
- package/dist/atoms/Checkbox.svelte +33 -0
- package/dist/atoms/Checkbox.svelte.d.ts +27 -0
- package/dist/atoms/Chip.svelte +351 -0
- package/dist/atoms/Chip.svelte.d.ts +57 -0
- package/dist/atoms/CodeField.svelte +385 -0
- package/dist/atoms/CodeField.svelte.d.ts +61 -0
- package/dist/atoms/ColorPicker.svelte +1 -0
- package/dist/atoms/DateField.svelte +41 -3
- package/dist/atoms/DateField.svelte.d.ts +31 -3
- package/dist/atoms/FloatingActionButton.svelte +5 -3
- package/dist/atoms/FloatingActionButton.svelte.d.ts +1 -1
- package/dist/atoms/Heading.svelte +27 -1
- package/dist/atoms/Heading.svelte.d.ts +7 -0
- package/dist/atoms/IconButton.svelte +81 -9
- package/dist/atoms/IconButton.svelte.d.ts +13 -0
- package/dist/atoms/Input.svelte +10 -5
- package/dist/atoms/Input.svelte.d.ts +3 -2
- package/dist/atoms/List.svelte +3 -2
- package/dist/atoms/ListItem.svelte +31 -7
- package/dist/atoms/ListItem.svelte.d.ts +6 -0
- package/dist/atoms/PickerField.svelte +239 -0
- package/dist/atoms/PickerField.svelte.d.ts +67 -0
- package/dist/atoms/Progress.svelte +78 -17
- package/dist/atoms/Progress.svelte.d.ts +11 -1
- package/dist/atoms/Radio.svelte +32 -0
- package/dist/atoms/Radio.svelte.d.ts +26 -0
- package/dist/atoms/Rating.svelte +132 -6
- package/dist/atoms/Rating.svelte.d.ts +24 -3
- package/dist/atoms/Select.svelte +24 -26
- package/dist/atoms/Select.svelte.d.ts +12 -0
- package/dist/atoms/SelectionControl.svelte +99 -6
- package/dist/atoms/SelectionControl.svelte.d.ts +25 -0
- package/dist/atoms/Skeleton.svelte +114 -18
- package/dist/atoms/Skeleton.svelte.d.ts +30 -3
- package/dist/atoms/SkeletonGroup.svelte +43 -0
- package/dist/atoms/SkeletonGroup.svelte.d.ts +20 -0
- package/dist/atoms/Slider.svelte +35 -0
- package/dist/atoms/Sparkline.svelte +109 -0
- package/dist/atoms/Sparkline.svelte.d.ts +27 -0
- package/dist/atoms/SpeechBubble.svelte +187 -0
- package/dist/atoms/SpeechBubble.svelte.d.ts +33 -0
- package/dist/atoms/Stat.svelte +72 -0
- package/dist/atoms/Stat.svelte.d.ts +19 -0
- package/dist/atoms/TemporalField.svelte +342 -10
- package/dist/atoms/TemporalField.svelte.d.ts +20 -4
- package/dist/atoms/Textarea.svelte +100 -5
- package/dist/atoms/Textarea.svelte.d.ts +21 -0
- package/dist/atoms/TimeColumn.svelte +150 -0
- package/dist/atoms/TimeColumn.svelte.d.ts +25 -0
- package/dist/atoms/TimeField.svelte +46 -3
- package/dist/atoms/TimeField.svelte.d.ts +34 -3
- package/dist/atoms/Toast.svelte +6 -5
- package/dist/atoms/Toggle.svelte +61 -10
- package/dist/atoms/Toggle.svelte.d.ts +15 -0
- package/dist/atoms/Tooltip.svelte +20 -1
- package/dist/atoms/Tooltip.svelte.d.ts +7 -0
- package/dist/atoms/index.d.ts +21 -0
- package/dist/atoms/index.js +17 -0
- package/dist/atoms/selection-control.styles.d.ts +15 -4
- package/dist/atoms/selection-control.styles.js +16 -5
- package/dist/components/atoms/index.d.ts +21 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/selection-control.styles.d.ts +15 -4
- package/dist/components/atoms/selection-control.styles.d.ts.map +1 -1
- package/dist/components/index.d.ts +27 -3
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/map.d.ts +11 -0
- package/dist/components/map.d.ts.map +1 -0
- package/dist/components/molecules/index.d.ts +7 -2
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/toast-store.d.ts +30 -0
- package/dist/components/molecules/toast-store.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +6 -1
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/types/variants.d.ts +12 -3
- package/dist/components/types/variants.d.ts.map +1 -1
- package/dist/components/util/app-shell.d.ts +55 -4
- package/dist/components/util/app-shell.d.ts.map +1 -1
- package/dist/components/util/avatar.d.ts +3 -0
- package/dist/components/util/avatar.d.ts.map +1 -1
- package/dist/components/util/bottom-tab-bar.d.ts +6 -0
- package/dist/components/util/bottom-tab-bar.d.ts.map +1 -1
- package/dist/components/util/chart.d.ts +140 -0
- package/dist/components/util/chart.d.ts.map +1 -0
- package/dist/components/util/chip.d.ts +66 -0
- package/dist/components/util/chip.d.ts.map +1 -0
- package/dist/components/util/cn.d.ts.map +1 -1
- package/dist/components/util/code-field.d.ts +63 -0
- package/dist/components/util/code-field.d.ts.map +1 -0
- package/dist/components/util/collapsible.d.ts +6 -0
- package/dist/components/util/collapsible.d.ts.map +1 -1
- package/dist/components/util/display-voice.d.ts +10 -0
- package/dist/components/util/display-voice.d.ts.map +1 -0
- package/dist/components/util/field-control.d.ts +30 -0
- package/dist/components/util/field-control.d.ts.map +1 -0
- package/dist/components/util/field.d.ts +6 -0
- package/dist/components/util/field.d.ts.map +1 -1
- package/dist/components/util/focus-utils.d.ts +2 -0
- package/dist/components/util/focus-utils.d.ts.map +1 -1
- package/dist/components/util/map-view.d.ts +144 -0
- package/dist/components/util/map-view.d.ts.map +1 -0
- package/dist/components/util/photo.d.ts +19 -0
- package/dist/components/util/photo.d.ts.map +1 -1
- package/dist/components/util/progress.d.ts +19 -0
- package/dist/components/util/progress.d.ts.map +1 -0
- package/dist/components/util/scroll-edge.d.ts +33 -0
- package/dist/components/util/scroll-edge.d.ts.map +1 -0
- package/dist/components/util/sheet-drag.d.ts +25 -1
- package/dist/components/util/sheet-drag.d.ts.map +1 -1
- package/dist/components/util/skeleton.d.ts +15 -0
- package/dist/components/util/skeleton.d.ts.map +1 -0
- package/dist/components/util/sliding-indicator.d.ts +25 -0
- package/dist/components/util/sliding-indicator.d.ts.map +1 -0
- package/dist/components/util/temporal-field.d.ts +89 -0
- package/dist/components/util/temporal-field.d.ts.map +1 -0
- package/dist/components/util/toaster.d.ts +40 -0
- package/dist/components/util/toaster.d.ts.map +1 -1
- package/dist/components/util/tone-surface.d.ts +34 -0
- package/dist/components/util/tone-surface.d.ts.map +1 -0
- package/dist/components/util/top-navbar.d.ts +26 -2
- package/dist/components/util/top-navbar.d.ts.map +1 -1
- package/dist/components/util/zabi-strings.d.ts +9 -0
- package/dist/components/util/zabi-strings.d.ts.map +1 -1
- package/dist/create-theme/cli.js +6 -2
- package/dist/create-theme/index.d.ts +17 -3
- package/dist/create-theme/index.js +252 -35
- package/dist/create-theme/lib/resolve.js +97 -0
- package/dist/create-theme/theme-data.js +1618 -90
- package/dist/index.d.ts +27 -3
- package/dist/index.js +18 -0
- package/dist/map.d.ts +10 -0
- package/dist/map.js +9 -0
- package/dist/molecules/Alert.svelte +31 -12
- package/dist/molecules/Alert.svelte.d.ts +12 -1
- package/dist/molecules/AppBar.svelte +287 -28
- package/dist/molecules/AppBar.svelte.d.ts +62 -0
- package/dist/molecules/AvatarGroup.svelte +1 -1
- package/dist/molecules/BarChart.svelte +381 -0
- package/dist/molecules/BarChart.svelte.d.ts +45 -0
- package/dist/molecules/BottomSheet.svelte +88 -20
- package/dist/molecules/BottomSheet.svelte.d.ts +17 -1
- package/dist/molecules/BottomTabBar.svelte +134 -28
- package/dist/molecules/BottomTabBar.svelte.d.ts +36 -2
- package/dist/molecules/Calendar.svelte.d.ts +1 -1
- package/dist/molecules/ChipGroup.svelte +325 -0
- package/dist/molecules/ChipGroup.svelte.d.ts +41 -0
- package/dist/molecules/Collapsible.svelte +158 -54
- package/dist/molecules/Collapsible.svelte.d.ts +23 -6
- package/dist/molecules/CollapsibleGroup.svelte +16 -6
- package/dist/molecules/ConfirmDialog.svelte +5 -1
- package/dist/molecules/ConfirmDialog.svelte.d.ts +3 -0
- package/dist/molecules/Drawer.svelte +33 -12
- package/dist/molecules/Dropdown.svelte +9 -1
- package/dist/molecules/Dropdown.svelte.d.ts +2 -0
- package/dist/molecules/DropdownItem.svelte +1 -1
- package/dist/molecules/ImageUpload.svelte +230 -120
- package/dist/molecules/ImageUpload.svelte.d.ts +38 -3
- package/dist/molecules/LineChart.svelte +459 -0
- package/dist/molecules/LineChart.svelte.d.ts +53 -0
- package/dist/molecules/MapView.svelte +565 -0
- package/dist/molecules/MapView.svelte.d.ts +88 -0
- package/dist/molecules/Modal.svelte +11 -6
- package/dist/molecules/PhotoGrid.svelte +100 -10
- package/dist/molecules/PhotoGrid.svelte.d.ts +11 -0
- package/dist/molecules/PhotoViewer.svelte +121 -24
- package/dist/molecules/PhotoViewer.svelte.d.ts +18 -0
- package/dist/molecules/PieChart.svelte +421 -0
- package/dist/molecules/PieChart.svelte.d.ts +51 -0
- package/dist/molecules/RadioGroup.svelte +20 -4
- package/dist/molecules/RadioGroup.svelte.d.ts +5 -0
- package/dist/molecules/SegmentedControl.svelte +136 -3
- package/dist/molecules/SegmentedControl.svelte.d.ts +6 -0
- package/dist/molecules/SidebarFooter.svelte +1 -1
- package/dist/molecules/SidebarNavSection.svelte +1 -1
- package/dist/molecules/SortableList.svelte +1 -0
- package/dist/molecules/Stepper.svelte +21 -7
- package/dist/molecules/StickyActionBar.svelte +67 -8
- package/dist/molecules/StickyActionBar.svelte.d.ts +14 -1
- package/dist/molecules/Tabs.svelte +79 -2
- package/dist/molecules/Toaster.svelte +171 -7
- package/dist/molecules/Toaster.svelte.d.ts +60 -2
- package/dist/molecules/ToasterToast.svelte +292 -60
- package/dist/molecules/ToasterToast.svelte.d.ts +6 -0
- package/dist/molecules/UnsavedChangesBar.svelte +13 -2
- package/dist/molecules/index.d.ts +7 -2
- package/dist/molecules/index.js +4 -0
- package/dist/molecules/toast-store.d.ts +30 -0
- package/dist/molecules/toast-store.js +4 -1
- package/dist/organisms/AppNavigation.svelte +440 -0
- package/dist/organisms/AppNavigation.svelte.d.ts +72 -0
- package/dist/organisms/AppShell.svelte +539 -39
- package/dist/organisms/AppShell.svelte.d.ts +102 -6
- package/dist/organisms/AppShellHeaderPart.svelte +163 -0
- package/dist/organisms/AppShellHeaderPart.svelte.d.ts +57 -0
- package/dist/organisms/SidebarNavigation.svelte +23 -36
- package/dist/organisms/SidebarPanel.svelte +10 -14
- package/dist/organisms/SidebarPanel.svelte.d.ts +1 -0
- package/dist/organisms/SidebarShell.svelte +2 -3
- package/dist/organisms/TopNavbar.svelte +117 -28
- package/dist/organisms/TopNavbar.svelte.d.ts +22 -1
- package/dist/organisms/TopNavbarSheetContent.svelte +145 -0
- package/dist/organisms/TopNavbarSheetContent.svelte.d.ts +24 -0
- package/dist/organisms/index.d.ts +6 -1
- package/dist/organisms/index.js +4 -0
- package/dist/types/components.d.ts +17 -1
- package/dist/types/components.d.ts.map +1 -1
- package/dist/types/index.d.ts +497 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/variants.ts +14 -3
- package/dist/util/app-shell.d.ts +55 -4
- package/dist/util/app-shell.js +32 -7
- package/dist/util/avatar.d.ts +3 -0
- package/dist/util/bottom-tab-bar.d.ts +6 -0
- package/dist/util/chart.d.ts +139 -0
- package/dist/util/chart.js +305 -0
- package/dist/util/chip.d.ts +65 -0
- package/dist/util/chip.js +58 -0
- package/dist/util/cn.js +28 -2
- package/dist/util/code-field.d.ts +62 -0
- package/dist/util/code-field.js +112 -0
- package/dist/util/collapsible.d.ts +6 -0
- package/dist/util/display-voice.d.ts +9 -0
- package/dist/util/display-voice.js +9 -0
- package/dist/util/field-control.d.ts +29 -0
- package/dist/util/field-control.js +32 -0
- package/dist/util/field.d.ts +6 -0
- package/dist/util/focus-utils.d.ts +2 -0
- package/dist/util/focus-utils.js +4 -0
- package/dist/util/map-view.d.ts +143 -0
- package/dist/util/map-view.js +121 -0
- package/dist/util/photo.d.ts +19 -0
- package/dist/util/photo.js +3 -0
- package/dist/util/progress.d.ts +18 -0
- package/dist/util/progress.js +17 -0
- package/dist/util/scroll-edge.d.ts +32 -0
- package/dist/util/scroll-edge.js +87 -0
- package/dist/util/sheet-drag.d.ts +25 -1
- package/dist/util/sheet-drag.js +71 -1
- package/dist/util/skeleton.d.ts +14 -0
- package/dist/util/skeleton.js +22 -0
- package/dist/util/sliding-indicator.d.ts +24 -0
- package/dist/util/sliding-indicator.js +44 -0
- package/dist/util/temporal-field.d.ts +88 -0
- package/dist/util/temporal-field.js +136 -0
- package/dist/util/toaster.d.ts +40 -0
- package/dist/util/toaster.js +55 -0
- package/dist/util/tone-surface.d.ts +33 -0
- package/dist/util/tone-surface.js +35 -0
- package/dist/util/top-navbar.d.ts +26 -2
- package/dist/util/top-navbar.js +23 -0
- package/dist/util/zabi-strings.d.ts +9 -0
- package/dist/zabi-components-colors.css +9 -3
- package/dist/zabi-components-theme-dark-only.css +474 -164
- package/dist/zabi-components-theme-dark.css +474 -164
- package/dist/zabi-components-theme-only.css +933 -99
- package/dist/zabi-components-theme.css +933 -99
- package/dist/zabi-components.css +2275 -321
- package/package.json +11 -1
|
@@ -31,14 +31,18 @@
|
|
|
31
31
|
--zabi-base-900: #18181b;
|
|
32
32
|
--zabi-base-925: #101013;
|
|
33
33
|
--zabi-base-950: #09090b;
|
|
34
|
-
/* Typography -
|
|
35
|
-
--font-family-sans:
|
|
34
|
+
/* Typography - the platform UI face, no font is downloaded */
|
|
35
|
+
--font-family-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
36
36
|
/* Headings follow the body face until an app sets this to a display font
|
|
37
37
|
* on :root. Applied to h1–h6 in the base layer below and by the Heading
|
|
38
38
|
* component. */
|
|
39
39
|
--font-family-heading: var(--font-family-sans);
|
|
40
|
-
/*
|
|
41
|
-
|
|
40
|
+
/* A second face for a display line (Heading variant="display", `font-display`):
|
|
41
|
+
* a hero, a score, a big number. Follows the heading face until an app sets
|
|
42
|
+
* it, so a second typeface is one token and not a CSS rule. */
|
|
43
|
+
--font-family-display: var(--font-family-heading);
|
|
44
|
+
/* Code. CodeBlock reads it. */
|
|
45
|
+
--font-family-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
|
|
42
46
|
/* Tailwind's own names for the same three faces. Its `font-sans` and
|
|
43
47
|
* `font-mono` utilities read --font-sans and --font-mono, which were its
|
|
44
48
|
* system stacks: `class="font-sans"` on a heading left the brand face, and
|
|
@@ -48,6 +52,7 @@
|
|
|
48
52
|
--font-sans: var(--font-family-sans);
|
|
49
53
|
--font-mono: var(--font-family-mono);
|
|
50
54
|
--font-heading: var(--font-family-heading);
|
|
55
|
+
--font-display: var(--font-family-display);
|
|
51
56
|
/* Font weights. These are the variables Tailwind's `font-normal`,
|
|
52
57
|
* `font-medium`, `font-semibold` and `font-bold` read, so every component
|
|
53
58
|
* weight follows an override here. `regular` is the name a brand uses for
|
|
@@ -81,17 +86,17 @@
|
|
|
81
86
|
--color-brand-900: var(--zabi-brand-900);
|
|
82
87
|
--color-brand-950: var(--zabi-brand-950);
|
|
83
88
|
/* Citron Color Scale — physical ramp + semantic aliases (same mirror pattern as pine / base) */
|
|
84
|
-
--zabi-citron-50: #
|
|
85
|
-
--zabi-citron-100: #
|
|
86
|
-
--zabi-citron-200: #
|
|
87
|
-
--zabi-citron-300: #
|
|
88
|
-
--zabi-citron-400: #
|
|
89
|
-
--zabi-citron-500: #
|
|
90
|
-
--zabi-citron-600: #
|
|
91
|
-
--zabi-citron-700: #
|
|
92
|
-
--zabi-citron-800: #
|
|
93
|
-
--zabi-citron-900: #
|
|
94
|
-
--zabi-citron-950: #
|
|
89
|
+
--zabi-citron-50: #f4f8ee;
|
|
90
|
+
--zabi-citron-100: #e9f0de;
|
|
91
|
+
--zabi-citron-200: #d4e2bd;
|
|
92
|
+
--zabi-citron-300: #b9ce92;
|
|
93
|
+
--zabi-citron-400: #99b55e;
|
|
94
|
+
--zabi-citron-500: #769619;
|
|
95
|
+
--zabi-citron-600: #5d7900;
|
|
96
|
+
--zabi-citron-700: #4a6100;
|
|
97
|
+
--zabi-citron-800: #384a00;
|
|
98
|
+
--zabi-citron-900: #273500;
|
|
99
|
+
--zabi-citron-950: #192300;
|
|
95
100
|
--color-citron-50: var(--zabi-citron-50);
|
|
96
101
|
--color-citron-100: var(--zabi-citron-100);
|
|
97
102
|
--color-citron-200: var(--zabi-citron-200);
|
|
@@ -129,17 +134,17 @@
|
|
|
129
134
|
--color-accent-900: var(--zabi-accent-900);
|
|
130
135
|
--color-accent-950: var(--zabi-accent-950);
|
|
131
136
|
/* Pine Color Scale — physical ramp + semantic aliases (mirror pattern matches --zabi-base-* / --color-base-*) */
|
|
132
|
-
--zabi-pine-50: #
|
|
133
|
-
--zabi-pine-100: #
|
|
134
|
-
--zabi-pine-200: #
|
|
135
|
-
--zabi-pine-300: #
|
|
136
|
-
--zabi-pine-400: #
|
|
137
|
-
--zabi-pine-500: #
|
|
138
|
-
--zabi-pine-600: #
|
|
139
|
-
--zabi-pine-700: #
|
|
140
|
-
--zabi-pine-800: #
|
|
141
|
-
--zabi-pine-900: #
|
|
142
|
-
--zabi-pine-950: #
|
|
137
|
+
--zabi-pine-50: #f0f9f3;
|
|
138
|
+
--zabi-pine-100: #e1f2e8;
|
|
139
|
+
--zabi-pine-200: #c3e5d0;
|
|
140
|
+
--zabi-pine-300: #9cd3b2;
|
|
141
|
+
--zabi-pine-400: #6cbb8e;
|
|
142
|
+
--zabi-pine-500: #319e67;
|
|
143
|
+
--zabi-pine-600: #00804b;
|
|
144
|
+
--zabi-pine-700: #00683b;
|
|
145
|
+
--zabi-pine-800: #00502b;
|
|
146
|
+
--zabi-pine-900: #00391c;
|
|
147
|
+
--zabi-pine-950: #002610;
|
|
143
148
|
--color-pine-50: var(--zabi-pine-50);
|
|
144
149
|
--color-pine-100: var(--zabi-pine-100);
|
|
145
150
|
--color-pine-200: var(--zabi-pine-200);
|
|
@@ -175,17 +180,17 @@
|
|
|
175
180
|
--color-iris-900: var(--zabi-iris-900);
|
|
176
181
|
--color-iris-950: var(--zabi-iris-950);
|
|
177
182
|
/* Warning Color Scale — physical ramp + semantic aliases (Tailwind amber) */
|
|
178
|
-
--zabi-warning-50: #
|
|
179
|
-
--zabi-warning-100: #
|
|
180
|
-
--zabi-warning-200: #
|
|
181
|
-
--zabi-warning-300: #
|
|
182
|
-
--zabi-warning-400: #
|
|
183
|
-
--zabi-warning-500: #
|
|
184
|
-
--zabi-warning-600: #
|
|
185
|
-
--zabi-warning-700: #
|
|
183
|
+
--zabi-warning-50: #fdf5ec;
|
|
184
|
+
--zabi-warning-100: #fbebda;
|
|
185
|
+
--zabi-warning-200: #f6d7b4;
|
|
186
|
+
--zabi-warning-300: #efbc84;
|
|
187
|
+
--zabi-warning-400: #e49a44;
|
|
188
|
+
--zabi-warning-500: #c67800;
|
|
189
|
+
--zabi-warning-600: #a05f00;
|
|
190
|
+
--zabi-warning-700: #834b00;
|
|
186
191
|
--zabi-warning-800: #663800;
|
|
187
|
-
--zabi-warning-900: #
|
|
188
|
-
--zabi-warning-950: #
|
|
192
|
+
--zabi-warning-900: #4b2700;
|
|
193
|
+
--zabi-warning-950: #331800;
|
|
189
194
|
--color-warning-50: var(--zabi-warning-50);
|
|
190
195
|
--color-warning-100: var(--zabi-warning-100);
|
|
191
196
|
--color-warning-200: var(--zabi-warning-200);
|
|
@@ -248,17 +253,33 @@
|
|
|
248
253
|
* overlay: modals, sheets, menus, popovers, toasts. Light mode keeps white surfaces + shadows;
|
|
249
254
|
* dark mode (see .dark) steps each level up in OKLCH lightness because shadows don't read on dark.
|
|
250
255
|
*
|
|
251
|
-
* Light cannot go lighter than white, so
|
|
252
|
-
* the card
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
+
* Light cannot go lighter than white, so the page is a near-white (base-50)
|
|
257
|
+
* and the card, white, is told apart from it by its 1px --color-border edge,
|
|
258
|
+
* not by lightness or a shadow. Nested surfaces step down from the card:
|
|
259
|
+
* elevated and inset (base-100). Enforced by scripts/check-surface-elevation.js:
|
|
260
|
+
* raised and overlay no darker than the page, elevated and inset at least 2
|
|
261
|
+
* points below raised, and the card edge at least 1.2:1 on the page and the card.
|
|
262
|
+
* (Until 8.1 the page was base-150 and the card carried a shadow.)
|
|
256
263
|
* Keep this block BELOW the "Background Colors" marker: scripts/sync-theme-tokens.js regenerates
|
|
257
264
|
* everything between the base-scale aliases and that marker. */
|
|
258
|
-
--color-surface-base: var(--color-base-
|
|
265
|
+
--color-surface-base: var(--color-base-50);
|
|
259
266
|
--color-surface-raised: #ffffff;
|
|
260
267
|
--color-surface-elevated: var(--color-base-100);
|
|
261
268
|
--color-surface-overlay: #ffffff;
|
|
269
|
+
/* Chrome — the surface of bars and sidebars (AppBar, TopNavbar, BottomTabBar,
|
|
270
|
+
* the sidebars). One token so a theme can retint all of them at once. Equal to
|
|
271
|
+
* the page colour in both themes (D108): a bar is flush with the page at
|
|
272
|
+
* rest and takes the material over it once content scrolls under it. Point it
|
|
273
|
+
* at --color-surface-raised for a raised bar fill. */
|
|
274
|
+
--color-surface-chrome: var(--color-surface-base);
|
|
275
|
+
/* Bars (D124), read by .material-bar. The fill at rest, the hairline shown
|
|
276
|
+
* once content is under the bar (decorative, not a guarded edge: the same
|
|
277
|
+
* idea as the material rim), the fill of an on-brand AppBar, and the active
|
|
278
|
+
* tab's pill in the BottomTabBar. */
|
|
279
|
+
--color-bar: var(--color-surface-chrome);
|
|
280
|
+
--color-bar-border: color-mix(in srgb, var(--color-headline) 10%, transparent);
|
|
281
|
+
--color-bar-brand: var(--color-action-primary);
|
|
282
|
+
--color-tabbar-active: var(--color-nav-menu-active);
|
|
262
283
|
/* Inset — a recessed area ON a raised surface (a well, a code sample, a stat
|
|
263
284
|
* strip inside a card). It is the ramp step between the page and the raised
|
|
264
285
|
* surface in both themes, so it always reads as cut into the card, never as
|
|
@@ -272,18 +293,31 @@
|
|
|
272
293
|
* card still has an outline where its shadow is thinnest; a solid step in dark. */
|
|
273
294
|
--color-border-overlay: rgba(9, 9, 11, 0.1);
|
|
274
295
|
--color-background: var(--color-surface-base);
|
|
275
|
-
--color-background-secondary: var(--color-base-
|
|
296
|
+
--color-background-secondary: var(--color-base-100);
|
|
297
|
+
/* was base-50, which is now the page itself */
|
|
276
298
|
--color-background-tertiary: var(--color-base-150);
|
|
277
299
|
/* Page Colors */
|
|
278
|
-
--color-page: var(--color-base
|
|
300
|
+
--color-page: var(--color-surface-base);
|
|
279
301
|
--color-page-secondary: var(--color-base-200);
|
|
280
302
|
/* Card Colors — aliases of the surface levels (kept for compatibility) */
|
|
281
303
|
--color-card: var(--color-surface-raised);
|
|
282
|
-
/* Hover
|
|
283
|
-
*
|
|
284
|
-
|
|
285
|
-
--color-card-
|
|
304
|
+
/* Hover must not read as the page: the page is base-50 now, so base-100 was
|
|
305
|
+
* only ΔE 2.1 from it (the guard wants 2.5). Hover is base-150 (1.18:1 on the
|
|
306
|
+
* white card, ΔE 4.6 from the page), active one step further. */
|
|
307
|
+
--color-card-hover: var(--color-base-150);
|
|
308
|
+
--color-card-active: var(--color-base-200);
|
|
286
309
|
--color-card-elevated: var(--color-surface-overlay);
|
|
310
|
+
/* Card tint — the brand tint as a surface for content (Card tone="tint"): the
|
|
311
|
+
* subtle fill's own step (brand-100), as its own token so an app can move one
|
|
312
|
+
* and not the other. Headline, body, label, description, caption and link
|
|
313
|
+
* hold 4.5:1 on it, and the ring, the field edge and the outline Button's
|
|
314
|
+
* edge 3:1 (a form can sit on it): 15.30, 12.87, 9.02, 6.68, 5.29 and 5.84:1;
|
|
315
|
+
* ring 4.19, field edge 4.17. */
|
|
316
|
+
--color-card-tint: var(--color-brand-100);
|
|
317
|
+
/* Card variant="flat": today's flat fill (the card), opaque. Dark restates it as a translucent step. */
|
|
318
|
+
--color-card-flat: var(--color-card);
|
|
319
|
+
--color-card-flat-hover: var(--color-card-hover);
|
|
320
|
+
--color-card-flat-active: var(--color-card-active);
|
|
287
321
|
/* Surfaces — numbered aliases (kept for compatibility; prefer surface-base/raised/elevated/overlay) */
|
|
288
322
|
--color-surface-1: var(--color-surface-raised);
|
|
289
323
|
--color-surface-2: var(--color-surface-elevated);
|
|
@@ -295,10 +329,33 @@
|
|
|
295
329
|
--color-control-track: var(--color-base-400);
|
|
296
330
|
--color-control-track-hover: var(--color-base-450);
|
|
297
331
|
--color-control-track-active: var(--color-base-500);
|
|
332
|
+
/* Toggle track — the off switch. The shared control track above is a mid
|
|
333
|
+
* grey (base-400) that reads as disabled, so the switch has its own: a light
|
|
334
|
+
* tint, with its edge doing the 3:1 work (WCAG 1.4.11), which a fill this
|
|
335
|
+
* light cannot. The edge is the field edge, 4.63:1 on the page and 4.83:1 on
|
|
336
|
+
* a card. Slider and Progress keep the shared track. */
|
|
337
|
+
--color-toggle-track: var(--color-base-200);
|
|
338
|
+
--color-toggle-track-hover: var(--color-base-250);
|
|
339
|
+
--color-toggle-track-active: var(--color-base-300);
|
|
340
|
+
--color-toggle-track-border: var(--color-input-border);
|
|
341
|
+
/* Toggle knob, by default 3:1 or more on every track fill it sits on (WCAG
|
|
342
|
+
* 1.4.11). Off, a dark knob on the light track: base-500 is 3.81:1 on the
|
|
343
|
+
* resting track, 3.53:1 hovered and 3.27:1 pressed. On, the label colour of
|
|
344
|
+
* the primary fill: 4.86:1 at rest, 6.76:1 hovered and 9.44:1 pressed. The consumer's
|
|
345
|
+
* own `--color-toggle-thumb` and `--color-toggle-thumb-checked` (declared
|
|
346
|
+
* nowhere) come first; see `.bg-toggle-thumb`. */
|
|
347
|
+
--color-toggle-knob: var(--color-base-500);
|
|
348
|
+
--color-toggle-knob-checked: var(--color-action-primary-text);
|
|
298
349
|
/* Progress — the bar of Progress. The fill is the primary action, so it
|
|
299
350
|
* follows a pinned primary; the track is the field fill it always was. */
|
|
300
351
|
--color-progress-fill: var(--color-action-primary);
|
|
301
352
|
--color-progress-track: var(--color-input);
|
|
353
|
+
/* The edge of the track. The default track is the field fill (white on the
|
|
354
|
+
* white card), 1.00:1 on the card and 1.04:1 on the page, so its edge is the
|
|
355
|
+
* field edge, 3:1 on both (the guard holds it). An app whose own track
|
|
356
|
+
* already reaches 3:1 sets this to `transparent`; createTheme does that when
|
|
357
|
+
* it overrides the track. */
|
|
358
|
+
--color-progress-track-border: var(--color-input-border);
|
|
302
359
|
/* Interaction fills — surface-relative on purpose.
|
|
303
360
|
* A hard-coded ramp step (e.g. base-100) can coincide exactly with the
|
|
304
361
|
* surface it sits on, which is how ghost hover became invisible: in dark
|
|
@@ -320,19 +377,31 @@
|
|
|
320
377
|
* border, not by greying the fill; dark keeps its fill step and leaves this
|
|
321
378
|
* equal to the resting border. One step past the resting edge. */
|
|
322
379
|
--color-input-border-hover: var(--color-base-550);
|
|
323
|
-
/* One step off white
|
|
324
|
-
* already greyer than the disabled fill. */
|
|
380
|
+
/* One step off white, and the same step the card hover uses. */
|
|
325
381
|
--color-input-hover: var(--color-base-100);
|
|
326
382
|
/* Pressed, for a field that is pressed rather than typed in: the Select
|
|
327
383
|
* trigger. It borrowed the hover step, 1.10:1 against the resting field,
|
|
328
|
-
* when every other pressed fill is 1.26:1 or more.
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
|
|
384
|
+
* when every other pressed fill is 1.26:1 or more. Derived from the field,
|
|
385
|
+
* not a fixed ramp step: an app that sets the card (and so the field) to
|
|
386
|
+
* another colour through createTheme overrides would otherwise land its
|
|
387
|
+
* field on top of a fixed step (base-200 was 1.21:1 against a base-50 field
|
|
388
|
+
* of #f8faff, below the 1.25 the generator holds). 12% of the ink into the
|
|
389
|
+
* field is the smallest whole percent that keeps the three pairs: 1.25:1
|
|
390
|
+
* against the field (11% is the floor), body and placeholder 4.5:1 on it.
|
|
391
|
+
* Default theme: #e3e3e4 (was #e4e4e7); on a #f8faff field with the
|
|
392
|
+
* ink at 12%: 1.28:1 against it. */
|
|
393
|
+
--color-input-active: color-mix(in srgb, var(--zabi-base-900) 12%, var(--color-input));
|
|
332
394
|
--color-input-focus: var(--color-surface-raised);
|
|
333
|
-
/* The
|
|
334
|
-
* the
|
|
335
|
-
|
|
395
|
+
/* The only grey field. It was the page colour; the page is now near white
|
|
396
|
+
* (1.04:1 against the white field), so it takes base-150, 1.18:1 on the field
|
|
397
|
+
* as before. Dark still uses the dark page (base-100). */
|
|
398
|
+
--color-input-disabled: var(--color-base-150);
|
|
399
|
+
/* Light fields are opaque already: inside a colour block they stay as they are. The dark
|
|
400
|
+
* theme restates these as opaque steps (see there). */
|
|
401
|
+
--color-input-solid: var(--color-input);
|
|
402
|
+
--color-input-solid-hover: var(--color-input-hover);
|
|
403
|
+
--color-input-solid-focus: var(--color-input-focus);
|
|
404
|
+
--color-input-solid-active: var(--color-input-active);
|
|
336
405
|
/* Text Colors */
|
|
337
406
|
--color-headline: var(--color-base-900);
|
|
338
407
|
--color-body: var(--color-base-800);
|
|
@@ -382,6 +451,14 @@
|
|
|
382
451
|
* elevated surface and 1.98:1 on the dark overlay. .dark pins this one step
|
|
383
452
|
* lighter for that reason. */
|
|
384
453
|
--color-control-border: var(--color-base-500);
|
|
454
|
+
/* Segmented control thumb (tone neutral): the selected segment, a card-coloured
|
|
455
|
+
* piece on the tinted track. The edge is what identifies it (WCAG 1.4.11), as
|
|
456
|
+
* the 1.1:1 fill step alone would not. It is the control boundary, which dark
|
|
457
|
+
* lifts a step (base-600) because the input edge is only 2.4:1 on this track; it is held to 3:1 against the track
|
|
458
|
+
* over the page and over a card (scripts/contrast-pairs.js). */
|
|
459
|
+
--color-segment-thumb: var(--color-surface-raised);
|
|
460
|
+
--color-segment-thumb-text: var(--color-headline);
|
|
461
|
+
--color-segment-thumb-border: var(--color-control-border);
|
|
385
462
|
/* Focus Colors
|
|
386
463
|
* brand-600, not brand-500: a focus indicator needs 3:1 against what is
|
|
387
464
|
* around it, and brand-500 was 2.99:1 on the page. brand-600 is also the
|
|
@@ -426,8 +503,8 @@
|
|
|
426
503
|
* <family>-weak step 700 pressed / emphasis
|
|
427
504
|
* <family>-medium step 800 strongest fill
|
|
428
505
|
* <family>-strong step 900 darkest
|
|
429
|
-
* <family>-subtle step
|
|
430
|
-
* <family>-border step
|
|
506
|
+
* <family>-subtle step 100 tinted fill (badges, alerts); .dark restates step 100
|
|
507
|
+
* <family>-border step 200 tinted edge; .dark restates step 200
|
|
431
508
|
* <family>-text step 700 text on a subtle fill or a page surface
|
|
432
509
|
*
|
|
433
510
|
* Warning, error and energetic previously sat at step 500 — the mirror's
|
|
@@ -440,29 +517,29 @@
|
|
|
440
517
|
--color-success-weak: var(--color-pine-700);
|
|
441
518
|
--color-success-medium: var(--color-pine-800);
|
|
442
519
|
--color-success-strong: var(--color-pine-900);
|
|
443
|
-
--color-success-subtle: var(--color-pine-
|
|
444
|
-
--color-success-border: var(--color-pine-
|
|
520
|
+
--color-success-subtle: var(--color-pine-100);
|
|
521
|
+
--color-success-border: var(--color-pine-200);
|
|
445
522
|
/* Warning Colors */
|
|
446
523
|
--color-warning: var(--color-warning-600);
|
|
447
524
|
--color-warning-weak: var(--color-warning-700);
|
|
448
525
|
--color-warning-medium: var(--color-warning-800);
|
|
449
526
|
--color-warning-strong: var(--color-warning-900);
|
|
450
|
-
--color-warning-subtle: var(--color-warning-
|
|
451
|
-
--color-warning-border: var(--color-warning-
|
|
527
|
+
--color-warning-subtle: var(--color-warning-100);
|
|
528
|
+
--color-warning-border: var(--color-warning-200);
|
|
452
529
|
/* Error Colors */
|
|
453
530
|
--color-error: var(--color-error-600);
|
|
454
531
|
--color-error-weak: var(--color-error-700);
|
|
455
532
|
--color-error-medium: var(--color-error-800);
|
|
456
533
|
--color-error-strong: var(--color-error-900);
|
|
457
|
-
--color-error-subtle: var(--color-error-
|
|
458
|
-
--color-error-border: var(--color-error-
|
|
534
|
+
--color-error-subtle: var(--color-error-100);
|
|
535
|
+
--color-error-border: var(--color-error-200);
|
|
459
536
|
/* Energetic Colors (Citron) */
|
|
460
537
|
--color-energetic: var(--color-citron-600);
|
|
461
538
|
--color-energetic-weak: var(--color-citron-700);
|
|
462
539
|
--color-energetic-medium: var(--color-citron-800);
|
|
463
540
|
--color-energetic-strong: var(--color-citron-900);
|
|
464
|
-
--color-energetic-subtle: var(--color-citron-
|
|
465
|
-
--color-energetic-border: var(--color-citron-
|
|
541
|
+
--color-energetic-subtle: var(--color-citron-100);
|
|
542
|
+
--color-energetic-border: var(--color-citron-200);
|
|
466
543
|
/* Accent Colors — the second brand colour, on --zabi-accent-* (citron by
|
|
467
544
|
* default). The same recipe as the primary action: fill at 600, hover 700,
|
|
468
545
|
* active 800, so "more pressed" is "more contrast" in both themes; tint,
|
|
@@ -471,8 +548,8 @@
|
|
|
471
548
|
--color-accent: var(--color-accent-600);
|
|
472
549
|
--color-accent-hover: var(--color-accent-700);
|
|
473
550
|
--color-accent-active: var(--color-accent-800);
|
|
474
|
-
--color-accent-subtle: var(--color-accent-
|
|
475
|
-
--color-accent-border: var(--color-accent-
|
|
551
|
+
--color-accent-subtle: var(--color-accent-100);
|
|
552
|
+
--color-accent-border: var(--color-accent-200);
|
|
476
553
|
--color-accent-text: var(--color-accent-700);
|
|
477
554
|
/* Label on a solid accent fill — see "on brand" below for the two knobs. */
|
|
478
555
|
--zabi-on-accent: #ffffff;
|
|
@@ -488,20 +565,20 @@
|
|
|
488
565
|
--color-neutral-weak: var(--color-base-600);
|
|
489
566
|
--color-neutral-medium: var(--color-base-700);
|
|
490
567
|
--color-neutral-strong: var(--color-base-900);
|
|
491
|
-
/*
|
|
568
|
+
/* Visibly past the page (base-50, 1.20:1) and the card (1.27:1). It was
|
|
492
569
|
* base-100 once, which IS the dark page and made a neutral badge measure
|
|
493
|
-
* 1.00:1 and read as bare text
|
|
494
|
-
* like every other family. */
|
|
495
|
-
--color-neutral-subtle: var(--color-base-
|
|
496
|
-
--color-neutral-border: var(--color-base-
|
|
570
|
+
* 1.00:1 and read as bare text; base-150 is only 1.13:1 on the page. The
|
|
571
|
+
* border is a step darker than the fill, like every other family. */
|
|
572
|
+
--color-neutral-subtle: var(--color-base-200);
|
|
573
|
+
--color-neutral-border: var(--color-base-250);
|
|
497
574
|
/* Info Colors */
|
|
498
575
|
--color-info: var(--color-iris-600);
|
|
499
576
|
--color-info-weak: var(--color-iris-700);
|
|
500
577
|
--color-info-medium: var(--color-iris-800);
|
|
501
578
|
--color-info-strong: var(--color-iris-900);
|
|
502
579
|
--color-info-active: var(--color-iris-400);
|
|
503
|
-
--color-info-subtle: var(--color-iris-
|
|
504
|
-
--color-info-border: var(--color-iris-
|
|
580
|
+
--color-info-subtle: var(--color-iris-100);
|
|
581
|
+
--color-info-border: var(--color-iris-200);
|
|
505
582
|
/* Text alias */
|
|
506
583
|
--color-info-text: var(--color-iris-700);
|
|
507
584
|
/* ========================================
|
|
@@ -519,27 +596,32 @@
|
|
|
519
596
|
--color-action-primary: var(--color-brand-600);
|
|
520
597
|
--color-action-primary-hover: var(--color-brand-700);
|
|
521
598
|
--color-action-primary-active: var(--color-brand-800);
|
|
522
|
-
--color-action-primary-subtle: var(--color-brand-
|
|
523
|
-
--color-action-primary-subtle-hover: var(--color-brand-
|
|
599
|
+
--color-action-primary-subtle: var(--color-brand-100);
|
|
600
|
+
--color-action-primary-subtle-hover: var(--color-brand-200);
|
|
601
|
+
/* Edge of a subtle brand badge when `bordered`; the tint's own darker step. */
|
|
602
|
+
--color-action-primary-border: var(--color-brand-200);
|
|
524
603
|
/* Held down, on a control whose resting fill is the subtle one: a toggled-on
|
|
525
604
|
* ghost IconButton. It used the hover step, which is 1.24:1 against the
|
|
526
605
|
* resting fill and, with a mouse, is what the button already shows. Half a
|
|
527
606
|
* step past hover is 1.42:1 against resting, and the icon (--color-link)
|
|
528
607
|
* keeps 3.50:1 on it; a whole step would leave the icon at 3.01:1. */
|
|
529
|
-
--color-action-primary-subtle-active: color-mix(in srgb, var(--color-brand-
|
|
608
|
+
--color-action-primary-subtle-active: color-mix(in srgb, var(--color-brand-300) 50%, var(--color-brand-200));
|
|
530
609
|
/* "On brand" — the label on a primary fill.
|
|
531
610
|
* White rather than brand-50: the ramp's lightest tint lands at exactly
|
|
532
611
|
* 4.50:1 on brand-600 — passing, but with no margin. Pure white gives 4.86:1.
|
|
533
|
-
* Dark
|
|
612
|
+
* Dark has the same fill (step 600, physical) and the same label: white on
|
|
613
|
+
* it is 4.76:1 on any ramp, since every ramp is on one lightness curve.
|
|
534
614
|
*
|
|
535
615
|
* A light brand (amber, yellow) cannot carry white text, so both values are
|
|
536
616
|
* knobs an app sets once on :root, like the ramps:
|
|
537
617
|
* --zabi-on-brand label in light mode
|
|
538
|
-
* --zabi-on-brand-dark label in dark mode
|
|
618
|
+
* --zabi-on-brand-dark label in dark mode: follows the light label (white),
|
|
619
|
+
* since the dark fill is the same step; set it to a dark
|
|
620
|
+
* one for a pale dark primary
|
|
539
621
|
* --color-on-brand is the role, remapped by .dark; components keep using
|
|
540
622
|
* --color-action-primary-text, which follows it. */
|
|
541
623
|
--zabi-on-brand: #ffffff;
|
|
542
|
-
--zabi-on-brand-dark: var(--zabi-brand
|
|
624
|
+
--zabi-on-brand-dark: var(--zabi-on-brand);
|
|
543
625
|
--color-on-brand: var(--zabi-on-brand);
|
|
544
626
|
--color-action-primary-text: var(--color-on-brand);
|
|
545
627
|
/* Secondary Actions - Used by bg-action-secondary utility class
|
|
@@ -552,6 +634,40 @@
|
|
|
552
634
|
--color-action-secondary-subtle: var(--color-base-100);
|
|
553
635
|
--color-action-secondary-subtle-hover: var(--color-base-200);
|
|
554
636
|
--color-action-secondary-text: var(--color-headline);
|
|
637
|
+
/* Tonal Actions - Used by bg-action-tonal utility class.
|
|
638
|
+
* A brand-tinted fill with the brand as its label: the quieter action beside
|
|
639
|
+
* a primary, and a chosen answer. It is the subtle tint (brand-100) and its
|
|
640
|
+
* own hover (brand-200) and pressed steps (halfway to brand-300, like the
|
|
641
|
+
* toggled-on ghost button; 1.30:1 against the resting fill). The label is
|
|
642
|
+
* brand-800, the lightest step that holds 4.5:1 on all three fills for any
|
|
643
|
+
* brand, not only the default: step 700 does on the default brand (5.84,
|
|
644
|
+
* 4.97, 4.48:1) but fails the pressed fill by 0.02, and by more on a
|
|
645
|
+
* saturated blue (4.39:1 for #0026EA). 800 gives 8.15, 6.94 and 6.25:1. */
|
|
646
|
+
--color-action-tonal: var(--color-action-primary-subtle);
|
|
647
|
+
--color-action-tonal-hover: var(--color-action-primary-subtle-hover);
|
|
648
|
+
--color-action-tonal-active: color-mix(in srgb, var(--color-brand-300) 50%, var(--color-brand-200));
|
|
649
|
+
--color-action-tonal-text: var(--color-brand-800);
|
|
650
|
+
/* Chip - the filter and choice pill (Chip). At rest a quiet neutral fill that
|
|
651
|
+
* shows on the page and on a card without an edge: base-200 is 1.22:1 on the
|
|
652
|
+
* page and 1.27:1 on the card, hover base-300 and pressed base-350 (1.42 and
|
|
653
|
+
* 1.85 on the page). The label is the headline, 4.5:1 or more on all three
|
|
654
|
+
* (13.96, 11.99 and 9.18:1). */
|
|
655
|
+
--color-chip: var(--color-base-200);
|
|
656
|
+
--color-chip-hover: var(--color-base-300);
|
|
657
|
+
--color-chip-active: var(--color-base-350);
|
|
658
|
+
--color-chip-text: var(--color-headline);
|
|
659
|
+
/* A selected chip is tonal, in both modes (never solid): its own tokens,
|
|
660
|
+
* pointing at the tonal role, so an app that themes tonal gets matching chips
|
|
661
|
+
* and one that wants another selected look sets these. */
|
|
662
|
+
--color-chip-selected: var(--color-action-tonal);
|
|
663
|
+
--color-chip-selected-hover: var(--color-action-tonal-hover);
|
|
664
|
+
--color-chip-selected-active: var(--color-action-tonal-active);
|
|
665
|
+
--color-chip-selected-text: var(--color-action-tonal-text);
|
|
666
|
+
/* Outline Actions - the edge of an outline Button. The border role was the
|
|
667
|
+
* card edge, 1.25:1 on the page: a label in a ghost box. This is the field
|
|
668
|
+
* edge (base-500), already held to 3:1 on the field, the page and a card. */
|
|
669
|
+
--color-action-outline-border: var(--color-input-border);
|
|
670
|
+
--color-action-outline-border-hover: var(--color-input-border-hover);
|
|
555
671
|
/* Disabled Actions - shared by every variant.
|
|
556
672
|
* Disabled must be the QUIETEST state, never a brighter colour than the
|
|
557
673
|
* enabled secondary. It used to be brand-500 plus opacity-50, which made a
|
|
@@ -576,13 +692,128 @@
|
|
|
576
692
|
--color-action-danger-text: var(--color-error-50);
|
|
577
693
|
/* Shadow Colors
|
|
578
694
|
* Light elevation is carried by the shadow, so it is the ramp's own ink
|
|
579
|
-
* (base-900)
|
|
695
|
+
* (base-900). Every step is two layers: a tight contact shadow
|
|
696
|
+
* (--shadow-opacity-contact) that grounds the edge and a wider, softer
|
|
697
|
+
* ambient one (--shadow-opacity) that carries the distance. Until 8.1 both
|
|
698
|
+
* layers shared one flat 14%; the 8.1 values are in CHANGELOG.md. */
|
|
580
699
|
--shadow-color: 24 24 27;
|
|
581
|
-
--shadow-opacity: 0.
|
|
582
|
-
--shadow-
|
|
583
|
-
--shadow-
|
|
584
|
-
--shadow-
|
|
585
|
-
--shadow-
|
|
700
|
+
--shadow-opacity: 0.1;
|
|
701
|
+
--shadow-opacity-contact: 0.06;
|
|
702
|
+
--shadow-sm: 0 1px 2px 0 rgb(var(--shadow-color) / var(--shadow-opacity-contact)), 0 2px 6px -1px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
703
|
+
--shadow-md: 0 1px 3px 0 rgb(var(--shadow-color) / var(--shadow-opacity-contact)), 0 6px 14px -2px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
704
|
+
--shadow-lg: 0 1px 2px 0 rgb(var(--shadow-color) / var(--shadow-opacity-contact)), 0 10px 30px 0 rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
705
|
+
--shadow-xl: 0 2px 4px 0 rgb(var(--shadow-color) / var(--shadow-opacity-contact)), 0 20px 50px -8px rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
706
|
+
/* What a material (glass) casts: the lg step. Its own name so a theme can
|
|
707
|
+
* retune glass without moving every floating surface. */
|
|
708
|
+
--shadow-material: 0 1px 2px 0 rgb(var(--shadow-color) / var(--shadow-opacity-contact)), 0 10px 30px 0 rgb(var(--shadow-color) / var(--shadow-opacity));
|
|
709
|
+
/* Motion
|
|
710
|
+
* Four durations and three curves. Tailwind's default transition reads
|
|
711
|
+
* --duration-base and --ease-standard, so every `transition-*` class that
|
|
712
|
+
* sets no duration of its own follows them (150ms, as before; the curve is
|
|
713
|
+
* new). `ease-standard`, `ease-out` and `ease-spring` are utilities;
|
|
714
|
+
* durations are used as `duration-(--duration-moderate)`. --ease-out is
|
|
715
|
+
* Tailwind's own name and value. --ease-spring is a lightly damped spring
|
|
716
|
+
* (one overshoot of about 5%, settled by the end): the cubic-bezier is the
|
|
717
|
+
* fallback, and the @supports block after @theme upgrades it to linear().
|
|
718
|
+
* prefers-reduced-motion re-points all of them (see @motion-reduced). */
|
|
719
|
+
--duration-fast: 100ms;
|
|
720
|
+
--duration-base: 150ms;
|
|
721
|
+
--duration-moderate: 200ms;
|
|
722
|
+
--duration-slow: 300ms;
|
|
723
|
+
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
|
724
|
+
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
725
|
+
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
726
|
+
--default-transition-duration: var(--duration-base);
|
|
727
|
+
--default-transition-timing-function: var(--ease-standard);
|
|
728
|
+
/* Materials — the frosted layer for what floats over content (bars, sheets,
|
|
729
|
+
* menus). Used through .material-thin|regular|thick (below), never a raw
|
|
730
|
+
* backdrop-blur. A material is a surface at partial alpha, so it is judged
|
|
731
|
+
* over the worst backdrop of the mode, not alone: the alpha floors are
|
|
732
|
+
* enforced by scripts/check-contrast.js (see scripts/contrast-pairs.js,
|
|
733
|
+
* MATERIALS) and by createTheme for an app's own theme. Each alpha is the
|
|
734
|
+
* smallest whole 2% that passes every pair its level carries, plus a little
|
|
735
|
+
* margin (floors against the page-colour chrome: thin 50 / 30, regular 82 / 47,
|
|
736
|
+
* thick 84 / 68, light / dark; light thick has 4 points because a tinted neutral (neutralChroma 0.08) needs 87; dark is judged on the dimmed backdrop, below):
|
|
737
|
+
* thin headline (a control on a bar: an icon, a short label;
|
|
738
|
+
* its focus ring is drawn outside it)
|
|
739
|
+
* regular + body, label, focus ring (bars, the tab bar, a floating sidebar)
|
|
740
|
+
* thick + description, caption (sheets, menus, modals, toasts, tooltips)
|
|
741
|
+
* Dark's worst backdrop is near-white, which its surfaces are close to. The
|
|
742
|
+
* dark filter therefore also dims the backdrop (--material-backdrop-brightness,
|
|
743
|
+
* 0.6: brightness() multiplies the sRGB channels), so the brightest thing
|
|
744
|
+
* that can be behind dark glass is near-white times 0.6, and the guard measures
|
|
745
|
+
* that. It is true to the rendering because the dimming and the translucent
|
|
746
|
+
* fill are switched together: every fallback below drops the filter and makes
|
|
747
|
+
* the fill opaque. Light is brightness(1), an identity.
|
|
748
|
+
* The fallbacks (reduced transparency, more contrast, forced colors, no
|
|
749
|
+
* backdrop-filter, data-materials="opaque") are below the .dark rule. */
|
|
750
|
+
--material-alpha-thin: 58%;
|
|
751
|
+
--material-alpha-regular: 84%;
|
|
752
|
+
--material-alpha-thick: 88%;
|
|
753
|
+
--color-material-thin: color-mix(in srgb, var(--color-surface-chrome) var(--material-alpha-thin), transparent);
|
|
754
|
+
--color-material-regular: color-mix(in srgb, var(--color-surface-chrome) var(--material-alpha-regular), transparent);
|
|
755
|
+
--color-material-thick: color-mix(in srgb, var(--color-surface-overlay) var(--material-alpha-thick), transparent);
|
|
756
|
+
--material-blur-thin: 16px;
|
|
757
|
+
--material-blur-regular: 24px;
|
|
758
|
+
--material-blur-thick: 32px;
|
|
759
|
+
--material-saturate: 180%;
|
|
760
|
+
/* What the filter does to the backdrop's brightness (a number): 1 in light,
|
|
761
|
+
* where it is an identity; below 1 in dark, which dims what shows through the
|
|
762
|
+
* glass. The alpha floors are measured on the dimmed backdrop. */
|
|
763
|
+
--material-backdrop-brightness: 1;
|
|
764
|
+
--material-filter-thin: blur(var(--material-blur-thin)) saturate(var(--material-saturate)) brightness(var(--material-backdrop-brightness));
|
|
765
|
+
--material-filter-regular: blur(var(--material-blur-regular)) saturate(var(--material-saturate)) brightness(var(--material-backdrop-brightness));
|
|
766
|
+
--material-filter-thick: blur(var(--material-blur-thick)) saturate(var(--material-saturate)) brightness(var(--material-backdrop-brightness));
|
|
767
|
+
/* The light top edge and the 1px outline, from the neutral ramp so a
|
|
768
|
+
* neutral override tints them. */
|
|
769
|
+
--color-material-highlight: color-mix(in srgb, var(--zabi-base-50) 60%, transparent);
|
|
770
|
+
--color-material-rim: color-mix(in srgb, var(--zabi-base-900) 9%, transparent);
|
|
771
|
+
/* Gradients (D99). Contrast is never measured against a gradient: each one
|
|
772
|
+
* is built from named stops, and scripts/contrast-pairs.js holds the worst
|
|
773
|
+
* stop of each to the pairs that sit on it. The strengths are the strongest
|
|
774
|
+
* whole 5% (canvas) and whole percent (control veils) at which every pair
|
|
775
|
+
* passes, capped at the prototype (canvas 85 / 45, top veil 22, bottom 14).
|
|
776
|
+
* Light canvas 55 (caption and link on the wash), dark canvas 25 (field edge
|
|
777
|
+
* on the wash).
|
|
778
|
+
*
|
|
779
|
+
* Control veils, light: darken-only. The top is 0%, so the fill at the top
|
|
780
|
+
* is the control's own colour: the label keeps its full contrast and an
|
|
781
|
+
* app's brand colour is not altered. Lightening the top of the brand-600
|
|
782
|
+
* fill took the white label (about 4.6:1) under 4.5:1, which is why it was
|
|
783
|
+
* 4% before. The bottom is 14% of base-950, the strongest whole percent that
|
|
784
|
+
* passes every pair (the label only gains from a darker fill); it is the
|
|
785
|
+
* depth. Dark is the same darken-only veil (the fill is a mid step with a white
|
|
786
|
+
* label, as in light); only the accent, whose dark fill is light under a dark
|
|
787
|
+
* label, keeps the lighter top, 22 / 6, in its own strengths.
|
|
788
|
+
*
|
|
789
|
+
* Canvas: two soft radial washes from brand 300 and accent 300 for glass to
|
|
790
|
+
* show something. A background-image only; .bg-canvas adds the page colour.
|
|
791
|
+
* The library does not paint it on body. */
|
|
792
|
+
--gradient-canvas-strength: 55%;
|
|
793
|
+
--color-canvas-wash-brand: color-mix(in srgb, var(--color-brand-300) var(--gradient-canvas-strength), transparent);
|
|
794
|
+
--color-canvas-wash-accent: color-mix(in srgb, var(--color-accent-300) var(--gradient-canvas-strength), transparent);
|
|
795
|
+
--gradient-canvas:
|
|
796
|
+
radial-gradient(90% 46% at 8% 0%, var(--color-canvas-wash-brand), transparent 70%),
|
|
797
|
+
radial-gradient(80% 40% at 100% 4%, var(--color-canvas-wash-accent), transparent 70%);
|
|
798
|
+
/* Solid controls: a veil laid over the control's own background-color, so
|
|
799
|
+
* hover and pressed fills keep working. The start and end tokens are the veil
|
|
800
|
+
* colours (translucent neutral, from the ramp so a neutral override tints
|
|
801
|
+
* them): a light one on top, a slight dark one at the bottom. It serves the
|
|
802
|
+
* three solid fills: primary, accent and danger (the veil is neutral, so
|
|
803
|
+
* `bg-control-gradient` is the danger one too). The accent has strengths of
|
|
804
|
+
* its own, which follow the shared ones, so an app whose accent carries a
|
|
805
|
+
* dark label can differ (createTheme does that when the pairs need it). */
|
|
806
|
+
--gradient-control-top-strength: 0%;
|
|
807
|
+
--gradient-control-bottom-strength: 14%;
|
|
808
|
+
--gradient-control-accent-top-strength: var(--gradient-control-top-strength);
|
|
809
|
+
--gradient-control-accent-bottom-strength: var(--gradient-control-bottom-strength);
|
|
810
|
+
--color-control-gradient-start: color-mix(in srgb, var(--zabi-base-50) var(--gradient-control-top-strength), transparent);
|
|
811
|
+
--color-control-gradient-end: color-mix(in srgb, var(--zabi-base-950) var(--gradient-control-bottom-strength), transparent);
|
|
812
|
+
--gradient-control: linear-gradient(to bottom, var(--color-control-gradient-start), var(--color-control-gradient-end));
|
|
813
|
+
--color-control-gradient-accent-start: color-mix(in srgb, var(--zabi-base-50) var(--gradient-control-accent-top-strength), transparent);
|
|
814
|
+
--color-control-gradient-accent-end: color-mix(in srgb, var(--zabi-base-950) var(--gradient-control-accent-bottom-strength), transparent);
|
|
815
|
+
--gradient-control-accent: linear-gradient(to bottom, var(--color-control-gradient-accent-start), var(--color-control-gradient-accent-end));
|
|
816
|
+
--shadow-control-highlight: inset 0 1px 0 color-mix(in srgb, var(--zabi-base-50) 40%, transparent);
|
|
586
817
|
/* Spacing */
|
|
587
818
|
--spacing-xs: 0.25rem;
|
|
588
819
|
--spacing-sm: 0.5rem;
|
|
@@ -693,6 +924,248 @@ body {
|
|
|
693
924
|
color-scheme: light;
|
|
694
925
|
}
|
|
695
926
|
|
|
927
|
+
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more), (forced-colors: active) {
|
|
928
|
+
:root:root {
|
|
929
|
+
--color-material-thin: var(--color-surface-chrome);
|
|
930
|
+
--color-material-regular: var(--color-surface-chrome);
|
|
931
|
+
--color-material-thick: var(--color-surface-overlay);
|
|
932
|
+
--material-filter-thin: none;
|
|
933
|
+
--material-filter-regular: none;
|
|
934
|
+
--material-filter-thick: none;
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
939
|
+
:root:root {
|
|
940
|
+
--color-material-thin: var(--color-surface-chrome);
|
|
941
|
+
--color-material-regular: var(--color-surface-chrome);
|
|
942
|
+
--color-material-thick: var(--color-surface-overlay);
|
|
943
|
+
--material-filter-thin: none;
|
|
944
|
+
--material-filter-regular: none;
|
|
945
|
+
--material-filter-thick: none;
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
[data-materials="opaque"][data-materials="opaque"] {
|
|
950
|
+
--color-material-thin: var(--color-surface-chrome);
|
|
951
|
+
--color-material-regular: var(--color-surface-chrome);
|
|
952
|
+
--color-material-thick: var(--color-surface-overlay);
|
|
953
|
+
--material-filter-thin: none;
|
|
954
|
+
--material-filter-regular: none;
|
|
955
|
+
--material-filter-thick: none;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
959
|
+
:root {
|
|
960
|
+
--ease-spring: linear(0, 0.14, 0.409, 0.668, 0.859, 0.974, 1.029, 1.046, 1.041, 1.03, 1.017, 1.008, 1.002, 0.999, 0.998, 0.998, 1);
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
@media (prefers-reduced-motion: reduce) {
|
|
965
|
+
:root:root {
|
|
966
|
+
--duration-fast: 0s;
|
|
967
|
+
--duration-base: 0s;
|
|
968
|
+
--duration-moderate: 0s;
|
|
969
|
+
--duration-slow: 0s;
|
|
970
|
+
--ease-spring: var(--ease-standard);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
.material-thin,
|
|
975
|
+
.material-regular,
|
|
976
|
+
.material-thick {
|
|
977
|
+
--tw-shadow:
|
|
978
|
+
inset 0 1px 0 var(--color-material-highlight),
|
|
979
|
+
inset 0 0 0 1px var(--color-material-rim),
|
|
980
|
+
var(--shadow-material);
|
|
981
|
+
box-shadow:
|
|
982
|
+
var(--tw-inset-shadow, 0 0 #0000),
|
|
983
|
+
var(--tw-inset-ring-shadow, 0 0 #0000),
|
|
984
|
+
var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
985
|
+
var(--tw-ring-shadow, 0 0 #0000),
|
|
986
|
+
var(--tw-shadow);
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
.material-thin {
|
|
990
|
+
background-color: var(--color-material-thin);
|
|
991
|
+
-webkit-backdrop-filter: var(--material-filter-thin);
|
|
992
|
+
backdrop-filter: var(--material-filter-thin);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
.material-regular {
|
|
996
|
+
background-color: var(--color-material-regular);
|
|
997
|
+
-webkit-backdrop-filter: var(--material-filter-regular);
|
|
998
|
+
backdrop-filter: var(--material-filter-regular);
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
.material-thick {
|
|
1002
|
+
background-color: var(--color-material-thick);
|
|
1003
|
+
-webkit-backdrop-filter: var(--material-filter-thick);
|
|
1004
|
+
backdrop-filter: var(--material-filter-thick);
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
@media (forced-colors: active) {
|
|
1008
|
+
.material-thin,
|
|
1009
|
+
.material-regular,
|
|
1010
|
+
.material-thick {
|
|
1011
|
+
outline: 1px solid CanvasText;
|
|
1012
|
+
outline-offset: -1px;
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
.material-layer-thick {
|
|
1017
|
+
isolation: isolate;
|
|
1018
|
+
background-color: transparent;
|
|
1019
|
+
--tw-shadow: var(--shadow-material);
|
|
1020
|
+
box-shadow:
|
|
1021
|
+
var(--tw-inset-shadow, 0 0 #0000),
|
|
1022
|
+
var(--tw-inset-ring-shadow, 0 0 #0000),
|
|
1023
|
+
var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
1024
|
+
var(--tw-ring-shadow, 0 0 #0000),
|
|
1025
|
+
var(--tw-shadow);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
.material-layer-thick::before {
|
|
1029
|
+
content: "";
|
|
1030
|
+
position: absolute;
|
|
1031
|
+
inset: 0;
|
|
1032
|
+
z-index: -1;
|
|
1033
|
+
border-radius: inherit;
|
|
1034
|
+
pointer-events: none;
|
|
1035
|
+
background-color: var(--color-material-thick);
|
|
1036
|
+
-webkit-backdrop-filter: var(--material-filter-thick);
|
|
1037
|
+
backdrop-filter: var(--material-filter-thick);
|
|
1038
|
+
box-shadow:
|
|
1039
|
+
inset 0 1px 0 var(--color-material-highlight),
|
|
1040
|
+
inset 0 0 0 1px var(--color-material-rim);
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
@media (forced-colors: active) {
|
|
1044
|
+
.material-layer-thick {
|
|
1045
|
+
outline: 1px solid CanvasText;
|
|
1046
|
+
outline-offset: -1px;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
.material-layer-regular {
|
|
1051
|
+
isolation: isolate;
|
|
1052
|
+
background-color: transparent;
|
|
1053
|
+
--tw-shadow: var(--shadow-material);
|
|
1054
|
+
box-shadow:
|
|
1055
|
+
var(--tw-inset-shadow, 0 0 #0000),
|
|
1056
|
+
var(--tw-inset-ring-shadow, 0 0 #0000),
|
|
1057
|
+
var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
1058
|
+
var(--tw-ring-shadow, 0 0 #0000),
|
|
1059
|
+
var(--tw-shadow);
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
.material-layer-regular::before {
|
|
1063
|
+
content: "";
|
|
1064
|
+
position: absolute;
|
|
1065
|
+
inset: 0;
|
|
1066
|
+
z-index: -1;
|
|
1067
|
+
border-radius: inherit;
|
|
1068
|
+
pointer-events: none;
|
|
1069
|
+
background-color: var(--color-material-regular);
|
|
1070
|
+
-webkit-backdrop-filter: var(--material-filter-regular);
|
|
1071
|
+
backdrop-filter: var(--material-filter-regular);
|
|
1072
|
+
box-shadow:
|
|
1073
|
+
inset 0 1px 0 var(--color-material-highlight),
|
|
1074
|
+
inset 0 0 0 1px var(--color-material-rim);
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
@media (forced-colors: active) {
|
|
1078
|
+
.material-layer-regular {
|
|
1079
|
+
outline: 1px solid CanvasText;
|
|
1080
|
+
outline-offset: -1px;
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
.material-bar {
|
|
1085
|
+
isolation: isolate;
|
|
1086
|
+
background-color: transparent;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
.material-bar::before {
|
|
1090
|
+
content: "";
|
|
1091
|
+
position: absolute;
|
|
1092
|
+
inset: 0;
|
|
1093
|
+
z-index: -1;
|
|
1094
|
+
box-sizing: border-box;
|
|
1095
|
+
pointer-events: none;
|
|
1096
|
+
background-color: var(--color-bar);
|
|
1097
|
+
border: 0 solid transparent;
|
|
1098
|
+
border-bottom-width: 1px;
|
|
1099
|
+
transition-property: background-color, border-color;
|
|
1100
|
+
transition-duration: var(--duration-moderate);
|
|
1101
|
+
transition-timing-function: var(--ease-standard);
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
.material-bar[data-bar-edge="bottom"]::before {
|
|
1105
|
+
border-bottom-width: 0;
|
|
1106
|
+
border-top-width: 1px;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
.material-bar[data-scrolled-under="true"]::before {
|
|
1110
|
+
background-color: var(--color-material-regular);
|
|
1111
|
+
-webkit-backdrop-filter: var(--material-filter-regular);
|
|
1112
|
+
backdrop-filter: var(--material-filter-regular);
|
|
1113
|
+
border-color: var(--color-bar-border);
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
@media (forced-colors: active) {
|
|
1117
|
+
.material-bar[data-scrolled-under="true"]::before {
|
|
1118
|
+
border-color: CanvasText;
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
.bg-canvas {
|
|
1123
|
+
background-color: var(--color-surface-base);
|
|
1124
|
+
background-image: var(--gradient-canvas);
|
|
1125
|
+
background-repeat: no-repeat;
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
.bg-control-gradient,
|
|
1129
|
+
.bg-control-gradient-accent {
|
|
1130
|
+
--tw-inset-shadow: var(--shadow-control-highlight);
|
|
1131
|
+
box-shadow:
|
|
1132
|
+
var(--tw-inset-shadow, 0 0 #0000),
|
|
1133
|
+
var(--tw-inset-ring-shadow, 0 0 #0000),
|
|
1134
|
+
var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
1135
|
+
var(--tw-ring-shadow, 0 0 #0000),
|
|
1136
|
+
var(--tw-shadow, 0 0 #0000);
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
.bg-control-gradient {
|
|
1140
|
+
background-image: var(--gradient-control);
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
.bg-control-gradient-accent {
|
|
1144
|
+
background-image: var(--gradient-control-accent);
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
.ring-toggle-track {
|
|
1148
|
+
--tw-inset-ring-shadow: inset 0 0 0 1px var(--color-toggle-track-border);
|
|
1149
|
+
box-shadow:
|
|
1150
|
+
var(--tw-inset-shadow, 0 0 #0000),
|
|
1151
|
+
var(--tw-inset-ring-shadow, 0 0 #0000),
|
|
1152
|
+
var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
1153
|
+
var(--tw-ring-shadow, 0 0 #0000),
|
|
1154
|
+
var(--tw-shadow, 0 0 #0000);
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
.rounded-button {
|
|
1158
|
+
border-radius: var(--zabi-button-radius, var(--radius-control));
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
.font-button {
|
|
1162
|
+
font-weight: var(--zabi-button-font-weight, 500);
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
.font-button-strong {
|
|
1166
|
+
font-weight: var(--zabi-button-font-weight, 600);
|
|
1167
|
+
}
|
|
1168
|
+
|
|
696
1169
|
.bg-base-50 {
|
|
697
1170
|
background-color: var(--color-base-50);
|
|
698
1171
|
}
|
|
@@ -867,10 +1340,26 @@ body {
|
|
|
867
1340
|
background-color: var(--color-card);
|
|
868
1341
|
}
|
|
869
1342
|
|
|
1343
|
+
.bg-toggle-thumb {
|
|
1344
|
+
background-color: var(--color-toggle-thumb, var(--color-toggle-knob));
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
.bg-toggle-thumb-checked {
|
|
1348
|
+
background-color: var(--color-toggle-thumb-checked, var(--color-toggle-thumb, var(--color-toggle-knob-checked)));
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
.bg-card-flat {
|
|
1352
|
+
background-color: var(--color-card-flat);
|
|
1353
|
+
}
|
|
1354
|
+
|
|
870
1355
|
@media (hover: hover) {
|
|
871
1356
|
.hover\:bg-card-hover:hover {
|
|
872
1357
|
background-color: var(--color-card-hover);
|
|
873
1358
|
}
|
|
1359
|
+
|
|
1360
|
+
.hover\:bg-card-flat-hover:hover {
|
|
1361
|
+
background-color: var(--color-card-flat-hover);
|
|
1362
|
+
}
|
|
874
1363
|
}
|
|
875
1364
|
|
|
876
1365
|
.bg-surface-1 {
|
|
@@ -923,6 +1412,10 @@ body {
|
|
|
923
1412
|
background-color: var(--color-card-active);
|
|
924
1413
|
}
|
|
925
1414
|
|
|
1415
|
+
.active\:bg-card-flat-active:active {
|
|
1416
|
+
background-color: var(--color-card-flat-active);
|
|
1417
|
+
}
|
|
1418
|
+
|
|
926
1419
|
.disabled\:bg-input-disabled:disabled {
|
|
927
1420
|
background-color: var(--color-input-disabled);
|
|
928
1421
|
}
|
|
@@ -1121,6 +1614,18 @@ body {
|
|
|
1121
1614
|
background-color: var(--color-nav-menu-item-active);
|
|
1122
1615
|
}
|
|
1123
1616
|
|
|
1617
|
+
.bg-tabbar-active {
|
|
1618
|
+
background-color: var(--color-tabbar-active);
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
.bg-bar-brand {
|
|
1622
|
+
background-color: var(--color-bar-brand);
|
|
1623
|
+
}
|
|
1624
|
+
|
|
1625
|
+
.border-bar {
|
|
1626
|
+
border-color: var(--color-bar-border);
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1124
1629
|
.text-success {
|
|
1125
1630
|
color: var(--color-success-text);
|
|
1126
1631
|
}
|
|
@@ -1275,7 +1780,7 @@ body {
|
|
|
1275
1780
|
.focus-ring--muted {
|
|
1276
1781
|
--zabi-focus-ring-color: var(--color-focus-ring-muted, var(--color-base-500));
|
|
1277
1782
|
}
|
|
1278
|
-
:where(:has(> .on-brand, > .on-accent):not(.on-brand, .on-accent, .on-brand *, .on-accent *)) {
|
|
1783
|
+
:where(:has(> .on-brand, > .on-accent, > .on-fill):not(.on-brand, .on-accent, .on-fill, .on-brand *, .on-accent *, .on-fill *)) {
|
|
1279
1784
|
--zabi-theme-headline: var(--color-headline);
|
|
1280
1785
|
--zabi-theme-body: var(--color-body);
|
|
1281
1786
|
--zabi-theme-label: var(--color-label);
|
|
@@ -1287,6 +1792,8 @@ body {
|
|
|
1287
1792
|
--zabi-theme-border-medium: var(--color-border-medium);
|
|
1288
1793
|
--zabi-theme-border-strong: var(--color-border-strong);
|
|
1289
1794
|
--zabi-theme-control-border: var(--color-control-border);
|
|
1795
|
+
--zabi-theme-action-outline-border: var(--color-action-outline-border);
|
|
1796
|
+
--zabi-theme-action-outline-border-hover: var(--color-action-outline-border-hover);
|
|
1290
1797
|
--zabi-theme-focus-ring: var(--color-focus-ring);
|
|
1291
1798
|
--zabi-theme-focus-ring-muted: var(--color-focus-ring-muted);
|
|
1292
1799
|
--zabi-theme-nav-menu-focus: var(--color-nav-menu-focus);
|
|
@@ -1312,6 +1819,8 @@ body {
|
|
|
1312
1819
|
--color-border-medium: var(--color-on-brand);
|
|
1313
1820
|
--color-border-strong: var(--color-on-brand);
|
|
1314
1821
|
--color-control-border: var(--color-on-brand);
|
|
1822
|
+
--color-action-outline-border: var(--color-on-brand);
|
|
1823
|
+
--color-action-outline-border-hover: var(--color-on-brand);
|
|
1315
1824
|
}
|
|
1316
1825
|
|
|
1317
1826
|
.on-accent {
|
|
@@ -1332,15 +1841,98 @@ body {
|
|
|
1332
1841
|
--color-border-medium: var(--color-on-accent);
|
|
1333
1842
|
--color-border-strong: var(--color-on-accent);
|
|
1334
1843
|
--color-control-border: var(--color-on-accent);
|
|
1844
|
+
--color-action-outline-border: var(--color-on-accent);
|
|
1845
|
+
--color-action-outline-border-hover: var(--color-on-accent);
|
|
1335
1846
|
}
|
|
1336
|
-
|
|
1847
|
+
.on-fill {
|
|
1848
|
+
color: var(--zabi-on-fill, currentColor);
|
|
1849
|
+
--color-focus-ring: var(--zabi-on-fill, currentColor);
|
|
1850
|
+
--color-focus-ring-muted: var(--zabi-on-fill, currentColor);
|
|
1851
|
+
--color-nav-menu-focus: var(--zabi-on-fill, currentColor);
|
|
1852
|
+
--color-focus-ring-offset: transparent;
|
|
1853
|
+
--color-focus-ring-danger: var(--zabi-on-fill, currentColor);
|
|
1854
|
+
--color-headline: var(--zabi-on-fill, currentColor);
|
|
1855
|
+
--color-body: var(--zabi-on-fill, currentColor);
|
|
1856
|
+
--color-label: var(--zabi-on-fill, currentColor);
|
|
1857
|
+
--color-description: var(--zabi-on-fill, currentColor);
|
|
1858
|
+
--color-caption: var(--zabi-on-fill, currentColor);
|
|
1859
|
+
--color-link: var(--zabi-on-fill, currentColor);
|
|
1860
|
+
--color-link-hover: var(--zabi-on-fill, currentColor);
|
|
1861
|
+
--color-border: var(--zabi-on-fill, currentColor);
|
|
1862
|
+
--color-border-medium: var(--zabi-on-fill, currentColor);
|
|
1863
|
+
--color-border-strong: var(--zabi-on-fill, currentColor);
|
|
1864
|
+
--color-control-border: var(--zabi-on-fill, currentColor);
|
|
1865
|
+
--color-action-outline-border: var(--zabi-on-fill, currentColor);
|
|
1866
|
+
--color-action-outline-border-hover: var(--zabi-on-fill, currentColor);
|
|
1867
|
+
}
|
|
1868
|
+
:where(.on-brand, .on-accent, .on-fill) {
|
|
1869
|
+
--zabi-inv-primary: var(--color-action-primary);
|
|
1870
|
+
--zabi-inv-primary-hover: var(--color-action-primary-hover);
|
|
1871
|
+
--zabi-inv-primary-active: var(--color-action-primary-active);
|
|
1872
|
+
--zabi-inv-primary-text: var(--color-action-primary-text);
|
|
1873
|
+
--zabi-inv-accent: var(--color-accent);
|
|
1874
|
+
--zabi-inv-accent-hover: var(--color-accent-hover);
|
|
1875
|
+
--zabi-inv-accent-active: var(--color-accent-active);
|
|
1876
|
+
--zabi-inv-accent-text: var(--color-on-accent);
|
|
1877
|
+
--zabi-inv-secondary: var(--color-action-secondary);
|
|
1878
|
+
--zabi-inv-secondary-hover: var(--color-action-secondary-hover);
|
|
1879
|
+
--zabi-inv-secondary-active: var(--color-action-secondary-active);
|
|
1880
|
+
}
|
|
1881
|
+
:where(.on-brand) {
|
|
1882
|
+
--zabi-inv-secondary: rgba(9, 9, 11, 0.1);
|
|
1883
|
+
--zabi-inv-secondary-hover: rgba(9, 9, 11, 0.15);
|
|
1884
|
+
--zabi-inv-secondary-active: rgba(9, 9, 11, 0.2);
|
|
1885
|
+
}
|
|
1886
|
+
:where(.on-brand) {
|
|
1887
|
+
--zabi-inv-primary: var(--color-on-brand);
|
|
1888
|
+
--zabi-inv-primary-hover: color-mix(in srgb, var(--color-on-brand) 88%, var(--color-action-primary));
|
|
1889
|
+
--zabi-inv-primary-active: color-mix(in srgb, var(--color-on-brand) 76%, var(--color-action-primary));
|
|
1890
|
+
--zabi-inv-primary-text: var(--color-action-primary);
|
|
1891
|
+
--zabi-inv-star: var(--color-on-brand);
|
|
1892
|
+
}
|
|
1893
|
+
:where(.on-accent) {
|
|
1894
|
+
--zabi-inv-accent: var(--color-on-accent);
|
|
1895
|
+
--zabi-inv-accent-hover: color-mix(in srgb, var(--color-on-accent) 88%, var(--color-accent));
|
|
1896
|
+
--zabi-inv-accent-active: color-mix(in srgb, var(--color-on-accent) 76%, var(--color-accent));
|
|
1897
|
+
--zabi-inv-accent-text: var(--color-accent);
|
|
1898
|
+
--zabi-inv-star: var(--color-on-accent);
|
|
1899
|
+
}
|
|
1900
|
+
:where(.on-fill) {
|
|
1901
|
+
--zabi-inv-primary: var(--zabi-on-fill, currentColor);
|
|
1902
|
+
--zabi-inv-primary-hover: color-mix(in srgb, var(--zabi-on-fill, currentColor) 88%, var(--zabi-fill, var(--color-card)));
|
|
1903
|
+
--zabi-inv-primary-active: color-mix(in srgb, var(--zabi-on-fill, currentColor) 76%, var(--zabi-fill, var(--color-card)));
|
|
1904
|
+
--zabi-inv-primary-text: var(--zabi-fill, var(--color-card));
|
|
1905
|
+
--zabi-inv-star: var(--zabi-on-fill, currentColor);
|
|
1906
|
+
}
|
|
1907
|
+
:where(.bg-action-primary:not(.on-brand, .on-accent, .on-fill)):where(.on-brand *, .on-accent *, .on-fill *) {
|
|
1908
|
+
--color-action-primary: var(--zabi-inv-primary);
|
|
1909
|
+
--color-action-primary-hover: var(--zabi-inv-primary-hover);
|
|
1910
|
+
--color-action-primary-active: var(--zabi-inv-primary-active);
|
|
1911
|
+
--color-action-primary-text: var(--zabi-inv-primary-text);
|
|
1912
|
+
}
|
|
1913
|
+
:where(.bg-action-secondary, .bg-action-secondary-active):where(.on-brand *, .on-accent *, .on-fill *) {
|
|
1914
|
+
--color-action-secondary: var(--zabi-inv-secondary);
|
|
1915
|
+
--color-action-secondary-hover: var(--zabi-inv-secondary-hover);
|
|
1916
|
+
--color-action-secondary-active: var(--zabi-inv-secondary-active);
|
|
1917
|
+
}
|
|
1918
|
+
:where(.bg-accent:not(.on-brand, .on-accent, .on-fill)):where(.on-brand *, .on-accent *, .on-fill *) {
|
|
1919
|
+
--color-accent: var(--zabi-inv-accent);
|
|
1920
|
+
--color-accent-hover: var(--zabi-inv-accent-hover);
|
|
1921
|
+
--color-accent-active: var(--zabi-inv-accent-active);
|
|
1922
|
+
--color-on-accent: var(--zabi-inv-accent-text);
|
|
1923
|
+
}
|
|
1924
|
+
:where(.rating):where(.on-brand *, .on-accent *, .on-fill *) {
|
|
1925
|
+
--zabi-rating-on: var(--zabi-inv-star);
|
|
1926
|
+
}
|
|
1927
|
+
:where(.on-brand, .on-accent, .on-fill)
|
|
1337
1928
|
:where(
|
|
1338
|
-
.bg-card, .bg-card-elevated, .bg-background, .bg-surface-base,
|
|
1929
|
+
.bg-card, .bg-card-flat, .bg-card-elevated, .bg-background, .bg-surface-base,
|
|
1339
1930
|
.bg-surface-raised, .bg-surface-elevated, .bg-surface-overlay, .bg-surface-overlay-hover,
|
|
1340
|
-
.bg-surface-inset, .bg-surface-1, .bg-surface-2, .bg-surface-3,
|
|
1931
|
+
.bg-surface-chrome, .bg-surface-inset, .bg-surface-1, .bg-surface-2, .bg-surface-3,
|
|
1341
1932
|
.bg-surface-4, .bg-input, .bg-input-disabled, .bg-accent-subtle,
|
|
1342
|
-
.bg-action-danger-subtle, .bg-action-primary-subtle, .bg-
|
|
1343
|
-
.bg-
|
|
1933
|
+
.bg-action-danger-subtle, .bg-action-primary-subtle, .bg-action-tonal, .bg-card-tint, .bg-chip, .bg-chip-selected,
|
|
1934
|
+
.bg-energetic-subtle, .bg-error-subtle,
|
|
1935
|
+
.bg-info-subtle, .bg-neutral-subtle, .bg-badge-neutral, .bg-toggle-thumb, .bg-toggle-thumb-checked, .bg-success-subtle, .bg-warning-subtle,
|
|
1344
1936
|
.bg-nav-menu-active, .bg-action-disabled, .list-group, .on-surface
|
|
1345
1937
|
) {
|
|
1346
1938
|
color: var(--zabi-theme-body);
|
|
@@ -1355,15 +1947,41 @@ body {
|
|
|
1355
1947
|
--color-border-medium: var(--zabi-theme-border-medium);
|
|
1356
1948
|
--color-border-strong: var(--zabi-theme-border-strong);
|
|
1357
1949
|
--color-control-border: var(--zabi-theme-control-border);
|
|
1950
|
+
--color-action-outline-border: var(--zabi-theme-action-outline-border);
|
|
1951
|
+
--color-action-outline-border-hover: var(--zabi-theme-action-outline-border-hover);
|
|
1952
|
+
--zabi-inv-primary: var(--color-action-primary);
|
|
1953
|
+
--zabi-inv-primary-hover: var(--color-action-primary-hover);
|
|
1954
|
+
--zabi-inv-primary-active: var(--color-action-primary-active);
|
|
1955
|
+
--zabi-inv-primary-text: var(--color-action-primary-text);
|
|
1956
|
+
--zabi-inv-accent: var(--color-accent);
|
|
1957
|
+
--zabi-inv-accent-hover: var(--color-accent-hover);
|
|
1958
|
+
--zabi-inv-accent-active: var(--color-accent-active);
|
|
1959
|
+
--zabi-inv-accent-text: var(--color-on-accent);
|
|
1960
|
+
--zabi-inv-secondary: var(--color-action-secondary);
|
|
1961
|
+
--zabi-inv-secondary-hover: var(--color-action-secondary-hover);
|
|
1962
|
+
--zabi-inv-secondary-active: var(--color-action-secondary-active);
|
|
1963
|
+
--zabi-inv-star: initial;
|
|
1964
|
+
}
|
|
1965
|
+
:where(.on-brand, .on-accent, .on-fill) :where(.bg-card-flat) {
|
|
1966
|
+
--color-card-flat: var(--color-card);
|
|
1967
|
+
--color-card-flat-hover: var(--color-card-hover);
|
|
1968
|
+
--color-card-flat-active: var(--color-card-active);
|
|
1969
|
+
}
|
|
1970
|
+
:where(.on-brand, .on-accent, .on-fill) :where(.bg-input) {
|
|
1971
|
+
--color-input: var(--color-input-solid);
|
|
1972
|
+
--color-input-hover: var(--color-input-solid-hover);
|
|
1973
|
+
--color-input-focus: var(--color-input-solid-focus);
|
|
1974
|
+
--color-input-active: var(--color-input-solid-active);
|
|
1358
1975
|
}
|
|
1359
|
-
:where(.on-brand, .on-accent)
|
|
1976
|
+
:where(.on-brand, .on-accent, .on-fill)
|
|
1360
1977
|
:where(
|
|
1361
|
-
.bg-card, .bg-card-elevated, .bg-background, .bg-surface-base,
|
|
1978
|
+
.bg-card, .bg-card-flat, .bg-card-elevated, .bg-background, .bg-surface-base,
|
|
1362
1979
|
.bg-surface-raised, .bg-surface-elevated, .bg-surface-overlay, .bg-surface-overlay-hover,
|
|
1363
|
-
.bg-surface-inset, .bg-surface-1, .bg-surface-2, .bg-surface-3,
|
|
1980
|
+
.bg-surface-chrome, .bg-surface-inset, .bg-surface-1, .bg-surface-2, .bg-surface-3,
|
|
1364
1981
|
.bg-surface-4, .bg-input, .bg-input-disabled, .bg-accent-subtle,
|
|
1365
|
-
.bg-action-danger-subtle, .bg-action-primary-subtle, .bg-
|
|
1366
|
-
.bg-
|
|
1982
|
+
.bg-action-danger-subtle, .bg-action-primary-subtle, .bg-action-tonal, .bg-card-tint, .bg-chip, .bg-chip-selected,
|
|
1983
|
+
.bg-energetic-subtle, .bg-error-subtle,
|
|
1984
|
+
.bg-info-subtle, .bg-neutral-subtle, .bg-badge-neutral, .bg-toggle-thumb, .bg-toggle-thumb-checked, .bg-success-subtle, .bg-warning-subtle,
|
|
1367
1985
|
.bg-nav-menu-active, .bg-action-disabled, .list-group, .on-surface
|
|
1368
1986
|
)
|
|
1369
1987
|
> :where(*) {
|
|
@@ -1373,6 +1991,24 @@ body {
|
|
|
1373
1991
|
--color-focus-ring-offset: var(--zabi-theme-focus-ring-offset);
|
|
1374
1992
|
--color-focus-ring-danger: var(--zabi-theme-focus-ring-danger);
|
|
1375
1993
|
}
|
|
1994
|
+
.list-dividers > li + li,
|
|
1995
|
+
.list-group > li + li {
|
|
1996
|
+
position: relative;
|
|
1997
|
+
}
|
|
1998
|
+
.list-dividers > li + li::before,
|
|
1999
|
+
.list-group > li + li::before {
|
|
2000
|
+
content: "";
|
|
2001
|
+
position: absolute;
|
|
2002
|
+
inset-inline: 1rem;
|
|
2003
|
+
top: calc(-0.125rem - 0.5px);
|
|
2004
|
+
height: 1px;
|
|
2005
|
+
background-color: var(--zabi-list-divider-color, var(--color-border));
|
|
2006
|
+
pointer-events: none;
|
|
2007
|
+
}
|
|
2008
|
+
:is(.list-dividers, .list-group) > li:has(> [data-selected="true"])::before,
|
|
2009
|
+
:is(.list-dividers, .list-group) > li:has(> [data-selected="true"]) + li::before {
|
|
2010
|
+
display: none;
|
|
2011
|
+
}
|
|
1376
2012
|
.list-group {
|
|
1377
2013
|
@apply space-y-1 overflow-hidden rounded-xl border border-border p-1;
|
|
1378
2014
|
background-color: var(--color-surface-1);
|
|
@@ -1425,6 +2061,9 @@ body {
|
|
|
1425
2061
|
0 0 0 2px var(--color-focus-ring-offset),
|
|
1426
2062
|
0 0 0 4px var(--color-focus-ring);
|
|
1427
2063
|
}
|
|
2064
|
+
.select-container {
|
|
2065
|
+
max-width: 100%;
|
|
2066
|
+
}
|
|
1428
2067
|
.selection-control-option-row {
|
|
1429
2068
|
box-shadow: none;
|
|
1430
2069
|
}
|
|
@@ -1434,6 +2073,9 @@ body {
|
|
|
1434
2073
|
0 0 0 2px var(--color-focus-ring-offset),
|
|
1435
2074
|
0 0 0 4px var(--color-focus-ring);
|
|
1436
2075
|
}
|
|
2076
|
+
.selection-control-option-row-quiet:has(:checked):not(:has(:focus-visible)) {
|
|
2077
|
+
box-shadow: none;
|
|
2078
|
+
}
|
|
1437
2079
|
}
|
|
1438
2080
|
|
|
1439
2081
|
@media (forced-colors: active) {
|
|
@@ -1446,6 +2088,71 @@ body {
|
|
|
1446
2088
|
}
|
|
1447
2089
|
}
|
|
1448
2090
|
|
|
2091
|
+
@media (forced-colors: active) {
|
|
2092
|
+
.toggle-switch {
|
|
2093
|
+
border: 1px solid ButtonText;
|
|
2094
|
+
background-color: Canvas;
|
|
2095
|
+
background-image: none;
|
|
2096
|
+
}
|
|
2097
|
+
.toggle-switch-thumb {
|
|
2098
|
+
top: 1px;
|
|
2099
|
+
left: 1px;
|
|
2100
|
+
background-color: ButtonText;
|
|
2101
|
+
}
|
|
2102
|
+
.toggle-switch[aria-checked="true"] {
|
|
2103
|
+
border-color: Highlight;
|
|
2104
|
+
background-color: Highlight;
|
|
2105
|
+
}
|
|
2106
|
+
.toggle-switch[aria-checked="true"] .toggle-switch-thumb {
|
|
2107
|
+
background-color: HighlightText;
|
|
2108
|
+
}
|
|
2109
|
+
.toggle-switch:disabled {
|
|
2110
|
+
border-color: GrayText;
|
|
2111
|
+
opacity: 1;
|
|
2112
|
+
}
|
|
2113
|
+
.toggle-switch:disabled[aria-checked="true"] {
|
|
2114
|
+
background-color: GrayText;
|
|
2115
|
+
}
|
|
2116
|
+
.toggle-switch:disabled .toggle-switch-thumb {
|
|
2117
|
+
background-color: GrayText;
|
|
2118
|
+
}
|
|
2119
|
+
.toggle-switch:disabled[aria-checked="true"] .toggle-switch-thumb,
|
|
2120
|
+
.toggle-switch:disabled[aria-busy="true"] .toggle-switch-thumb {
|
|
2121
|
+
background-color: Canvas;
|
|
2122
|
+
}
|
|
2123
|
+
|
|
2124
|
+
.selection-control-shell {
|
|
2125
|
+
border-color: ButtonText;
|
|
2126
|
+
}
|
|
2127
|
+
.selection-control-shell:has(:checked) {
|
|
2128
|
+
border-color: Highlight;
|
|
2129
|
+
background-color: Highlight;
|
|
2130
|
+
}
|
|
2131
|
+
.selection-control-shell:has(:checked) > svg {
|
|
2132
|
+
color: HighlightText;
|
|
2133
|
+
}
|
|
2134
|
+
.selection-control-shell:has(:checked) > .selection-control-dot {
|
|
2135
|
+
background-color: HighlightText;
|
|
2136
|
+
}
|
|
2137
|
+
.selection-control-shell:has(:disabled) {
|
|
2138
|
+
border-color: GrayText;
|
|
2139
|
+
opacity: 1;
|
|
2140
|
+
}
|
|
2141
|
+
.selection-control-shell:has(:checked):has(:disabled) {
|
|
2142
|
+
background-color: GrayText;
|
|
2143
|
+
}
|
|
2144
|
+
.selection-control-shell:has(:checked):has(:disabled) > svg {
|
|
2145
|
+
color: Canvas;
|
|
2146
|
+
}
|
|
2147
|
+
.selection-control-shell:has(:checked):has(:disabled) > .selection-control-dot {
|
|
2148
|
+
background-color: Canvas;
|
|
2149
|
+
}
|
|
2150
|
+
.selection-control-label-row-interaction:has(:disabled) {
|
|
2151
|
+
opacity: 1;
|
|
2152
|
+
color: GrayText;
|
|
2153
|
+
}
|
|
2154
|
+
}
|
|
2155
|
+
|
|
1449
2156
|
.bg-action-primary {
|
|
1450
2157
|
background-color: var(--color-action-primary);
|
|
1451
2158
|
}
|
|
@@ -1508,6 +2215,129 @@ body {
|
|
|
1508
2215
|
}
|
|
1509
2216
|
}
|
|
1510
2217
|
|
|
2218
|
+
.bg-action-tonal {
|
|
2219
|
+
background-color: var(--color-action-tonal);
|
|
2220
|
+
}
|
|
2221
|
+
|
|
2222
|
+
@media (hover: hover) {
|
|
2223
|
+
.bg-action-tonal:hover {
|
|
2224
|
+
background-color: var(--color-action-tonal-hover);
|
|
2225
|
+
}
|
|
2226
|
+
}
|
|
2227
|
+
|
|
2228
|
+
.bg-action-tonal:active {
|
|
2229
|
+
background-color: var(--color-action-tonal-active);
|
|
2230
|
+
}
|
|
2231
|
+
|
|
2232
|
+
.bg-action-tonal:disabled {
|
|
2233
|
+
background-color: var(--color-action-disabled);
|
|
2234
|
+
color: var(--color-action-disabled-text);
|
|
2235
|
+
}
|
|
2236
|
+
|
|
2237
|
+
.text-action-tonal {
|
|
2238
|
+
color: var(--color-action-tonal-text);
|
|
2239
|
+
}
|
|
2240
|
+
|
|
2241
|
+
@layer utilities {
|
|
2242
|
+
.bg-badge-neutral {
|
|
2243
|
+
background-color: var(--zabi-badge-neutral-fill, var(--color-neutral-subtle));
|
|
2244
|
+
}
|
|
2245
|
+
.text-badge-neutral {
|
|
2246
|
+
color: var(--zabi-badge-neutral-text, var(--color-neutral-text));
|
|
2247
|
+
}
|
|
2248
|
+
}
|
|
2249
|
+
|
|
2250
|
+
@layer utilities {
|
|
2251
|
+
.bg-skeleton-on-color {
|
|
2252
|
+
background-color: var(--zabi-skeleton-fill, color-mix(in srgb, currentColor 24%, transparent));
|
|
2253
|
+
}
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
.bg-chip {
|
|
2257
|
+
background-color: var(--color-chip);
|
|
2258
|
+
}
|
|
2259
|
+
|
|
2260
|
+
.bg-chip-hover {
|
|
2261
|
+
background-color: var(--color-chip-hover);
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
.bg-chip-active {
|
|
2265
|
+
background-color: var(--color-chip-active);
|
|
2266
|
+
}
|
|
2267
|
+
|
|
2268
|
+
@media (hover: hover) {
|
|
2269
|
+
.hover\:bg-chip-hover:hover {
|
|
2270
|
+
background-color: var(--color-chip-hover);
|
|
2271
|
+
}
|
|
2272
|
+
}
|
|
2273
|
+
|
|
2274
|
+
.active\:bg-chip-active:active {
|
|
2275
|
+
background-color: var(--color-chip-active);
|
|
2276
|
+
}
|
|
2277
|
+
|
|
2278
|
+
.text-chip-text {
|
|
2279
|
+
color: var(--color-chip-text);
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2282
|
+
.bg-chip-selected {
|
|
2283
|
+
background-color: var(--color-chip-selected);
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
.bg-chip-selected-hover {
|
|
2287
|
+
background-color: var(--color-chip-selected-hover);
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
.bg-chip-selected-active {
|
|
2291
|
+
background-color: var(--color-chip-selected-active);
|
|
2292
|
+
}
|
|
2293
|
+
|
|
2294
|
+
@media (hover: hover) {
|
|
2295
|
+
.hover\:bg-chip-selected-hover:hover {
|
|
2296
|
+
background-color: var(--color-chip-selected-hover);
|
|
2297
|
+
}
|
|
2298
|
+
}
|
|
2299
|
+
|
|
2300
|
+
.active\:bg-chip-selected-active:active {
|
|
2301
|
+
background-color: var(--color-chip-selected-active);
|
|
2302
|
+
}
|
|
2303
|
+
|
|
2304
|
+
.text-chip-selected-text {
|
|
2305
|
+
color: var(--color-chip-selected-text);
|
|
2306
|
+
}
|
|
2307
|
+
|
|
2308
|
+
.bg-card-tint {
|
|
2309
|
+
background-color: var(--color-card-tint);
|
|
2310
|
+
}
|
|
2311
|
+
|
|
2312
|
+
.border-progress-track-border {
|
|
2313
|
+
border-color: var(--color-progress-track-border);
|
|
2314
|
+
}
|
|
2315
|
+
|
|
2316
|
+
.bg-toggle-track {
|
|
2317
|
+
background-color: var(--color-toggle-track);
|
|
2318
|
+
}
|
|
2319
|
+
|
|
2320
|
+
@media (hover: hover) {
|
|
2321
|
+
.bg-toggle-track:hover {
|
|
2322
|
+
background-color: var(--color-toggle-track-hover);
|
|
2323
|
+
}
|
|
2324
|
+
}
|
|
2325
|
+
|
|
2326
|
+
.bg-toggle-track:active {
|
|
2327
|
+
background-color: var(--color-toggle-track-active);
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2330
|
+
.border-action-outline {
|
|
2331
|
+
border-color: var(--color-action-outline-border);
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2334
|
+
@media (hover: hover) {
|
|
2335
|
+
.border-action-outline:hover,
|
|
2336
|
+
.hover\:border-action-outline-hover:hover {
|
|
2337
|
+
border-color: var(--color-action-outline-border-hover);
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
|
|
1511
2341
|
.bg-action-danger {
|
|
1512
2342
|
background-color: var(--color-action-danger);
|
|
1513
2343
|
}
|
|
@@ -1659,6 +2489,10 @@ body {
|
|
|
1659
2489
|
z-index: var(--z-sticky);
|
|
1660
2490
|
}
|
|
1661
2491
|
|
|
2492
|
+
.z-fixed {
|
|
2493
|
+
z-index: var(--z-fixed);
|
|
2494
|
+
}
|
|
2495
|
+
|
|
1662
2496
|
.z-dropdown {
|
|
1663
2497
|
z-index: var(--z-dropdown);
|
|
1664
2498
|
}
|