@astra-kit/ui 0.0.0-stage → 0.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 +15 -0
- package/LICENSE.md +21 -0
- package/README.md +384 -2
- package/THIRD_PARTY_NOTICES.md +31 -0
- package/assets/fonts/geist-LICENSE.txt +93 -0
- package/assets/fonts/geist-latin-variable.woff2 +0 -0
- package/assets/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
- package/assets/fonts/ibm-plex-mono-latin-500.woff2 +0 -0
- package/assets/fonts/ibmplexmono-LICENSE.txt +93 -0
- package/assets/fonts/inter-LICENSE.txt +93 -0
- package/assets/fonts/inter-latin-variable.woff2 +0 -0
- package/dist/adapters/unpic-image.d.ts +3 -0
- package/dist/adapters/unpic-image.js +98 -0
- package/dist/components/account-menu.d.ts +67 -0
- package/dist/components/account-menu.js +440 -0
- package/dist/components/action-button.d.ts +25 -0
- package/dist/components/action-button.js +264 -0
- package/dist/components/alert.d.ts +31 -0
- package/dist/components/alert.js +503 -0
- package/dist/components/animated-collapse.d.ts +19 -0
- package/dist/components/animated-collapse.js +170 -0
- package/dist/components/animated-count.d.ts +13 -0
- package/dist/components/animated-count.js +105 -0
- package/dist/components/animated-list-item.d.ts +25 -0
- package/dist/components/animated-list-item.js +134 -0
- package/dist/components/animated-theme-toggler.d.ts +12 -0
- package/dist/components/animated-theme-toggler.js +200 -0
- package/dist/components/avatar.d.ts +65 -0
- package/dist/components/avatar.js +463 -0
- package/dist/components/badge.d.ts +21 -0
- package/dist/components/badge.js +297 -0
- package/dist/components/button-interaction.d.ts +23 -0
- package/dist/components/button-interaction.js +22 -0
- package/dist/components/button-label.d.ts +8 -0
- package/dist/components/button-label.js +203 -0
- package/dist/components/button.d.ts +23 -0
- package/dist/components/button.js +145 -0
- package/dist/components/calendar.d.ts +47 -0
- package/dist/components/calendar.js +155 -0
- package/dist/components/card.d.ts +38 -0
- package/dist/components/card.js +904 -0
- package/dist/components/carousel.d.ts +71 -0
- package/dist/components/carousel.js +585 -0
- package/dist/components/checkbox.d.ts +15 -0
- package/dist/components/checkbox.js +324 -0
- package/dist/components/control-button.d.ts +16 -0
- package/dist/components/control-button.js +215 -0
- package/dist/components/data-table.d.ts +118 -0
- package/dist/components/data-table.js +895 -0
- package/dist/components/dialog-surface.d.ts +49 -0
- package/dist/components/dialog-surface.js +220 -0
- package/dist/components/dialog.d.ts +92 -0
- package/dist/components/dialog.js +320 -0
- package/dist/components/dropdown-menu.d.ts +57 -0
- package/dist/components/dropdown-menu.js +107 -0
- package/dist/components/field.d.ts +53 -0
- package/dist/components/field.js +710 -0
- package/dist/components/file-upload.d.ts +88 -0
- package/dist/components/file-upload.js +776 -0
- package/dist/components/filter-presets-bar.d.ts +73 -0
- package/dist/components/filter-presets-bar.js +510 -0
- package/dist/components/filter-query-bar.d.ts +21 -0
- package/dist/components/filter-query-bar.js +881 -0
- package/dist/components/filter-query-grammar.d.ts +188 -0
- package/dist/components/filter-query-grammar.js +875 -0
- package/dist/components/form.d.ts +29 -0
- package/dist/components/form.js +330 -0
- package/dist/components/highlighter.d.ts +15 -0
- package/dist/components/highlighter.js +152 -0
- package/dist/components/hover-card.d.ts +50 -0
- package/dist/components/hover-card.js +80 -0
- package/dist/components/input-group.d.ts +16 -0
- package/dist/components/input-group.js +277 -0
- package/dist/components/input.d.ts +17 -0
- package/dist/components/input.js +120 -0
- package/dist/components/label.d.ts +4 -0
- package/dist/components/label.js +43 -0
- package/dist/components/link.d.ts +9 -0
- package/dist/components/link.js +43 -0
- package/dist/components/morph-text.d.ts +14 -0
- package/dist/components/morph-text.js +210 -0
- package/dist/components/pagination.d.ts +59 -0
- package/dist/components/pagination.js +190 -0
- package/dist/components/popover.d.ts +17 -0
- package/dist/components/popover.js +40 -0
- package/dist/components/presence-swap.d.ts +22 -0
- package/dist/components/presence-swap.js +209 -0
- package/dist/components/primitives/alert-dialog.d.ts +68 -0
- package/dist/components/primitives/alert-dialog.js +629 -0
- package/dist/components/primitives/avatar.d.ts +46 -0
- package/dist/components/primitives/avatar.js +265 -0
- package/dist/components/primitives/calendar.d.ts +37 -0
- package/dist/components/primitives/calendar.js +1250 -0
- package/dist/components/primitives/carousel.d.ts +106 -0
- package/dist/components/primitives/carousel.js +928 -0
- package/dist/components/primitives/dialog.d.ts +62 -0
- package/dist/components/primitives/dialog.js +490 -0
- package/dist/components/primitives/dropdown-menu-items.d.ts +59 -0
- package/dist/components/primitives/dropdown-menu-items.js +265 -0
- package/dist/components/primitives/dropdown-menu.d.ts +64 -0
- package/dist/components/primitives/dropdown-menu.js +560 -0
- package/dist/components/primitives/hover-card.d.ts +50 -0
- package/dist/components/primitives/hover-card.js +507 -0
- package/dist/components/primitives/pagination.d.ts +65 -0
- package/dist/components/primitives/pagination.js +373 -0
- package/dist/components/primitives/popover.d.ts +22 -0
- package/dist/components/primitives/popover.js +213 -0
- package/dist/components/primitives/select.d.ts +37 -0
- package/dist/components/primitives/select.js +428 -0
- package/dist/components/primitives/tooltip.d.ts +30 -0
- package/dist/components/primitives/tooltip.js +277 -0
- package/dist/components/progress-ring.d.ts +20 -0
- package/dist/components/progress-ring.js +53 -0
- package/dist/components/radio-group.d.ts +34 -0
- package/dist/components/radio-group.js +392 -0
- package/dist/components/reaction-button.d.ts +30 -0
- package/dist/components/reaction-button.js +189 -0
- package/dist/components/rich-link-editor.d.ts +25 -0
- package/dist/components/rich-link-editor.js +320 -0
- package/dist/components/rich-markdown-content.d.ts +10 -0
- package/dist/components/rich-markdown-content.js +56 -0
- package/dist/components/rich-text-content.d.ts +19 -0
- package/dist/components/rich-text-content.js +26 -0
- package/dist/components/select.d.ts +55 -0
- package/dist/components/select.js +188 -0
- package/dist/components/separator.d.ts +3 -0
- package/dist/components/separator.js +48 -0
- package/dist/components/sheet.d.ts +19 -0
- package/dist/components/sheet.js +420 -0
- package/dist/components/sidebar-panel-context.d.ts +17 -0
- package/dist/components/sidebar-panel-context.js +14 -0
- package/dist/components/sidebar.d.ts +195 -0
- package/dist/components/sidebar.js +2041 -0
- package/dist/components/skeleton.d.ts +23 -0
- package/dist/components/skeleton.js +334 -0
- package/dist/components/split-button.d.ts +36 -0
- package/dist/components/split-button.js +306 -0
- package/dist/components/svgs/whatsappIcon.d.ts +3 -0
- package/dist/components/svgs/whatsappIcon.js +14 -0
- package/dist/components/switch.d.ts +13 -0
- package/dist/components/switch.js +444 -0
- package/dist/components/table.d.ts +10 -0
- package/dist/components/table.js +298 -0
- package/dist/components/tabs.d.ts +36 -0
- package/dist/components/tabs.js +636 -0
- package/dist/components/textarea.d.ts +16 -0
- package/dist/components/textarea.js +111 -0
- package/dist/components/themed-toaster.d.ts +7 -0
- package/dist/components/themed-toaster.js +86 -0
- package/dist/components/toaster.d.ts +12 -0
- package/dist/components/toaster.js +62 -0
- package/dist/components/tooltip.d.ts +43 -0
- package/dist/components/tooltip.js +65 -0
- package/dist/components/typing-animation.d.ts +34 -0
- package/dist/components/typing-animation.js +389 -0
- package/dist/constants/action-button.d.ts +20 -0
- package/dist/constants/action-button.js +17 -0
- package/dist/constants/alert.d.ts +16 -0
- package/dist/constants/alert.js +13 -0
- package/dist/constants/avatar.d.ts +38 -0
- package/dist/constants/avatar.js +32 -0
- package/dist/constants/badge.d.ts +6 -0
- package/dist/constants/badge.js +6 -0
- package/dist/constants/button.d.ts +16 -0
- package/dist/constants/button.js +16 -0
- package/dist/constants/calendar.d.ts +36 -0
- package/dist/constants/calendar.js +34 -0
- package/dist/constants/card.d.ts +23 -0
- package/dist/constants/card.js +20 -0
- package/dist/constants/carousel.d.ts +55 -0
- package/dist/constants/carousel.js +74 -0
- package/dist/constants/checkbox.d.ts +17 -0
- package/dist/constants/checkbox.js +17 -0
- package/dist/constants/dialog.d.ts +11 -0
- package/dist/constants/dialog.js +10 -0
- package/dist/constants/dropdown-menu.d.ts +10 -0
- package/dist/constants/dropdown-menu.js +37 -0
- package/dist/constants/field.d.ts +24 -0
- package/dist/constants/field.js +24 -0
- package/dist/constants/hover-card.d.ts +37 -0
- package/dist/constants/hover-card.js +85 -0
- package/dist/constants/morph-text.d.ts +13 -0
- package/dist/constants/morph-text.js +13 -0
- package/dist/constants/motion.d.ts +12 -0
- package/dist/constants/motion.js +12 -0
- package/dist/constants/pagination.d.ts +20 -0
- package/dist/constants/pagination.js +20 -0
- package/dist/constants/popover.d.ts +7 -0
- package/dist/constants/popover.js +33 -0
- package/dist/constants/radio-group.d.ts +10 -0
- package/dist/constants/radio-group.js +10 -0
- package/dist/constants/select.d.ts +7 -0
- package/dist/constants/select.js +34 -0
- package/dist/constants/sidebar.d.ts +9 -0
- package/dist/constants/sidebar.js +17 -0
- package/dist/constants/skeleton.d.ts +17 -0
- package/dist/constants/skeleton.js +17 -0
- package/dist/constants/split-button.d.ts +7 -0
- package/dist/constants/split-button.js +5 -0
- package/dist/constants/switch.d.ts +33 -0
- package/dist/constants/switch.js +41 -0
- package/dist/constants/tabs.d.ts +17 -0
- package/dist/constants/tabs.js +17 -0
- package/dist/constants/toast.d.ts +3 -0
- package/dist/constants/toast.js +3 -0
- package/dist/constants/tooltip.d.ts +13 -0
- package/dist/constants/tooltip.js +52 -0
- package/dist/hooks/use-horizontal-swipe.d.ts +23 -0
- package/dist/hooks/use-horizontal-swipe.js +80 -0
- package/dist/hooks/use-is-hydrated.d.ts +6 -0
- package/dist/hooks/use-is-hydrated.js +20 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-mobile.js +19 -0
- package/dist/hooks/use-prefers-reduced-motion.d.ts +2 -0
- package/dist/hooks/use-prefers-reduced-motion.js +27 -0
- package/dist/hooks/use-rich-link-editor.d.ts +55 -0
- package/dist/hooks/use-rich-link-editor.js +515 -0
- package/dist/hooks/use-sidebar-persistence.d.ts +6 -0
- package/dist/hooks/use-sidebar-persistence.js +52 -0
- package/dist/hooks/use-today.d.ts +7 -0
- package/dist/hooks/use-today.js +50 -0
- package/dist/hooks/use-viewer-time-zone.d.ts +6 -0
- package/dist/hooks/use-viewer-time-zone.js +20 -0
- package/dist/hooks.d.ts +11 -0
- package/dist/hooks.js +11 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.js +69 -0
- package/dist/lib/browser-clipboard.d.ts +13 -0
- package/dist/lib/browser-clipboard.js +48 -0
- package/dist/lib/column-filter-value.d.ts +12 -0
- package/dist/lib/column-filter-value.js +52 -0
- package/dist/lib/file-acceptance.d.ts +43 -0
- package/dist/lib/file-acceptance.js +107 -0
- package/dist/lib/format-file-size.d.ts +16 -0
- package/dist/lib/format-file-size.js +34 -0
- package/dist/lib/fuzzy-search.d.ts +17 -0
- package/dist/lib/fuzzy-search.js +183 -0
- package/dist/lib/horizontal-swipe.d.ts +23 -0
- package/dist/lib/horizontal-swipe.js +29 -0
- package/dist/lib/image-dimensions.d.ts +2 -0
- package/dist/lib/image-dimensions.js +7 -0
- package/dist/lib/name-initials.d.ts +7 -0
- package/dist/lib/name-initials.js +11 -0
- package/dist/lib/rich-text/link-markdown-constants.d.ts +147 -0
- package/dist/lib/rich-text/link-markdown-constants.js +458 -0
- package/dist/lib/rich-text/link-markdown-types.d.ts +53 -0
- package/dist/lib/rich-text/link-markdown-types.js +1 -0
- package/dist/lib/rich-text/link-markdown.d.ts +193 -0
- package/dist/lib/rich-text/link-markdown.js +592 -0
- package/dist/lib/rich-text/rich-markdown.d.ts +41 -0
- package/dist/lib/rich-text/rich-markdown.js +105 -0
- package/dist/lib/rich-text/rich-text-editor-dom.d.ts +26 -0
- package/dist/lib/rich-text/rich-text-editor-dom.js +79 -0
- package/dist/lib/toast-layer.d.ts +24 -0
- package/dist/lib/toast-layer.js +76 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.js +2 -0
- package/dist/lib/year-month-filter.d.ts +16 -0
- package/dist/lib/year-month-filter.js +46 -0
- package/dist/motion/arc-floating-slot.d.ts +40 -0
- package/dist/motion/arc-floating-slot.js +177 -0
- package/dist/motion/arc-press.d.ts +6 -0
- package/dist/motion/arc-press.js +59 -0
- package/dist/motion/arc-swap.d.ts +22 -0
- package/dist/motion/arc-swap.js +49 -0
- package/dist/motion/arc-tokens.d.ts +53 -0
- package/dist/motion/arc-tokens.js +73 -0
- package/dist/motion/glide-indicator.d.ts +69 -0
- package/dist/motion/glide-indicator.js +309 -0
- package/dist/motion/glide-slot.d.ts +9 -0
- package/dist/motion/glide-slot.js +71 -0
- package/dist/motion/motion-slot.d.ts +12 -0
- package/dist/motion/motion-slot.js +376 -0
- package/dist/motion/overlay-warmth.d.ts +24 -0
- package/dist/motion/overlay-warmth.js +70 -0
- package/dist/motion/presence.d.ts +40 -0
- package/dist/motion/presence.js +101 -0
- package/dist/motion/surface-keyframes.d.ts +24 -0
- package/dist/motion/surface-keyframes.js +141 -0
- package/dist/motion/tokens.d.ts +81 -0
- package/dist/motion/tokens.js +67 -0
- package/dist/motion/use-attached-element.d.ts +7 -0
- package/dist/motion/use-attached-element.js +22 -0
- package/dist/motion/use-morph-width.d.ts +13 -0
- package/dist/motion/use-morph-width.js +59 -0
- package/dist/next.d.ts +14 -0
- package/dist/next.js +79 -0
- package/dist/providers/astra-ui-provider.d.ts +27 -0
- package/dist/providers/astra-ui-provider.js +100 -0
- package/dist/providers/native-provider.d.ts +4 -0
- package/dist/providers/native-provider.js +45 -0
- package/dist/sonner.d.ts +7 -0
- package/dist/sonner.js +8 -0
- package/dist/styles.css +2 -0
- package/dist/tanstack.d.ts +11 -0
- package/dist/tanstack.js +50 -0
- package/dist/theme.d.ts +3 -0
- package/dist/theme.js +1 -0
- package/dist/types/data-table.d.ts +27 -0
- package/dist/types/data-table.js +1 -0
- package/fonts.css +5 -0
- package/package.json +450 -4
- package/styles.css +4 -0
- package/theme.css +248 -0
package/theme.css
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @astra-kit/ui theme: the Arc foundation (https://uiarc.dev, Copyright (c) 2026 Elia Kuratli, MIT License; see
|
|
3
|
+
* THIRD_PARTY_NOTICES.md) with the blue accent by default, followed by the shadcn/ui token names the components
|
|
4
|
+
* and consumers still read, mapped onto Arc roles.
|
|
5
|
+
* Dark mode: data-theme="dark" (Arc) or the dark class on <html>. Accent: data-accent on <html> overrides the default.
|
|
6
|
+
*/
|
|
7
|
+
:root {
|
|
8
|
+
color-scheme: light;
|
|
9
|
+
--neutral-0: oklch(100% 0 0);
|
|
10
|
+
--neutral-1: oklch(99% 0 0);
|
|
11
|
+
--neutral-2: oklch(97.8% 0 0);
|
|
12
|
+
--neutral-3: oklch(95.8% 0 0);
|
|
13
|
+
--neutral-4: oklch(91.5% 0 0);
|
|
14
|
+
--neutral-5: oklch(84% 0 0);
|
|
15
|
+
--neutral-6: oklch(72% 0 0);
|
|
16
|
+
--neutral-7: oklch(59% 0 0);
|
|
17
|
+
--neutral-8: oklch(46% 0 0);
|
|
18
|
+
--neutral-9: oklch(34% 0 0);
|
|
19
|
+
--neutral-10: oklch(23% 0 0);
|
|
20
|
+
--neutral-11: oklch(15% 0 0);
|
|
21
|
+
--background: var(--neutral-0);
|
|
22
|
+
--surface: var(--neutral-0);
|
|
23
|
+
--surface-raised: var(--neutral-0);
|
|
24
|
+
--surface-muted: var(--neutral-2);
|
|
25
|
+
--foreground: var(--neutral-11);
|
|
26
|
+
--text-secondary: var(--neutral-8);
|
|
27
|
+
--text-muted: var(--neutral-7);
|
|
28
|
+
--border: oklch(93.5% 0 0);
|
|
29
|
+
--border-subtle: oklch(96.5% 0 0);
|
|
30
|
+
--border-strong: oklch(82% 0 0);
|
|
31
|
+
--accent: oklch(33% 0 0);
|
|
32
|
+
--accent-strong: oklch(24% 0 0);
|
|
33
|
+
--accent-subtle: oklch(33% 0 0 / .1);
|
|
34
|
+
--accent-foreground: var(--background);
|
|
35
|
+
/* Selection controls (switch, checkbox, radio, slider). --control-on fills a chosen control; --control-glyph is the check or dot drawn on it;
|
|
36
|
+
thumbs stay white in both states so they always read against the track. Tuned per accent below so white thumbs hold on every hue. */
|
|
37
|
+
--control-on: oklch(23% 0 0);
|
|
38
|
+
--control-glyph: oklch(100% 0 0);
|
|
39
|
+
--control-track: oklch(89.5% 0 0);
|
|
40
|
+
--control-track-hover: oklch(86% 0 0);
|
|
41
|
+
--control-thumb: oklch(100% 0 0);
|
|
42
|
+
--control-thumb-on: oklch(100% 0 0);
|
|
43
|
+
--control-thumb-shadow: 0 0 0 .5px oklch(0% 0 0 / .07), 0 1px 2px oklch(0% 0 0 / .14), 0 2px 6px oklch(0% 0 0 / .06);
|
|
44
|
+
--control-on-subtle: color-mix(in oklab, var(--control-on) 10%, transparent);
|
|
45
|
+
/* Slider fills. Same as --control-on except neutral dark, where a mid grey keeps the white thumb distinct. */
|
|
46
|
+
--control-fill: var(--control-on);
|
|
47
|
+
/* Pointer focus draws no ring (product decision). --focus-ring is the halo a few fields drew for any input method, so it stays transparent.
|
|
48
|
+
Keyboard focus uses the outline at the end of this file; tune it with --focus-outline, --focus-outline-width and --focus-outline-offset. */
|
|
49
|
+
--focus-ring: transparent;
|
|
50
|
+
--success: oklch(49% .19 150);
|
|
51
|
+
--warning: oklch(58% .18 75);
|
|
52
|
+
--danger: oklch(54% .21 25);
|
|
53
|
+
--shadow-resting: 0 1px 2px oklch(0% 0 0 / .035);
|
|
54
|
+
--shadow-raised: 0 6px 18px oklch(0% 0 0 / .065), 0 1px 3px oklch(0% 0 0 / .035);
|
|
55
|
+
--shadow-floating: 0 20px 48px oklch(0% 0 0 / .105), 0 3px 10px oklch(0% 0 0 / .045);
|
|
56
|
+
/* Brand gradient: soft lavender to warm peach. Light enough for dark text (--arc-gradient-foreground, >12:1). */
|
|
57
|
+
--arc-gradient-from: oklch(90% .045 300);
|
|
58
|
+
--arc-gradient-to: oklch(92% .045 65);
|
|
59
|
+
--arc-gradient: linear-gradient(100deg, var(--arc-gradient-from), var(--arc-gradient-to));
|
|
60
|
+
--arc-gradient-foreground: oklch(22% .01 300);
|
|
61
|
+
/* Faint wash for backgrounds and tinted panels. */
|
|
62
|
+
--arc-gradient-soft: linear-gradient(135deg, oklch(97.5% .016 300), oklch(98% .016 65));
|
|
63
|
+
/* Hairline borders and rules. */
|
|
64
|
+
--arc-gradient-line: linear-gradient(100deg, oklch(83% .06 300), oklch(86% .06 65));
|
|
65
|
+
/* Text-safe stops for gradient text and small marks (>4.5:1 on the surface). */
|
|
66
|
+
--arc-gradient-ink: linear-gradient(100deg, oklch(47% .1 300), oklch(50% .09 55));
|
|
67
|
+
--space-1: .25rem; --space-2: .5rem; --space-3: .75rem; --space-4: 1rem;
|
|
68
|
+
--space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem;
|
|
69
|
+
--space-12: 3rem; --space-16: 4rem; --space-20: 5rem; --space-24: 6rem;
|
|
70
|
+
--radius-control: 1.125rem; --radius-panel: 1.625rem; --radius-surface: 2.125rem; --radius-pill: 9999px;
|
|
71
|
+
--control-height-sm: 2.25rem; --control-height-md: 2.75rem; --control-height-lg: 3.125rem;
|
|
72
|
+
--font-display: var(--font-geist, "Astra Geist"), sans-serif;
|
|
73
|
+
--font-body: var(--font-inter, "Astra Inter"), sans-serif;
|
|
74
|
+
--text-xs: .75rem; --text-sm: .875rem; --text-base: 1rem; --text-lg: 1.125rem;
|
|
75
|
+
--text-xl: 1.375rem; --text-2xl: 1.75rem; --text-3xl: 2.25rem;
|
|
76
|
+
--text-4xl: 3.25rem; --text-5xl: 4.5rem;
|
|
77
|
+
--tracking-display: -.03em; --tracking-body: -.01em;
|
|
78
|
+
--leading-display: 1.1; --leading-body: 1.4;
|
|
79
|
+
--ease-enter: cubic-bezier(.16,1,.3,1);
|
|
80
|
+
--ease-standard: cubic-bezier(.22,1,.36,1);
|
|
81
|
+
--ease-exit: cubic-bezier(.7,0,.84,0);
|
|
82
|
+
--ease-in-out: cubic-bezier(.65,0,.35,1);
|
|
83
|
+
/* Spring with a gentle settle (bounce .15). Pair with --duration-spring for transform transitions. */
|
|
84
|
+
--ease-spring: linear(0, 0.0258, 0.09, 0.1763, 0.2732, 0.3724, 0.4683, 0.5573, 0.6376, 0.7082, 0.7689, 0.8202, 0.8628, 0.8976, 0.9256, 0.9476, 0.9648, 0.9778, 0.9875, 0.9945, 0.9994, 1.0026, 1.0047, 1.0058, 1.0062, 1.0062, 1.0059, 1.0055, 1.0049, 1.0043, 1.0036, 1.0031, 1.0025, 1.002, 1.0016, 1.0013, 1);
|
|
85
|
+
--duration-instant: 120ms; --duration-fast: 160ms; --duration-standard: 240ms; --duration-considered: 480ms; --duration-spring: 580ms;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
:root[data-theme="dark"],
|
|
89
|
+
|
|
90
|
+
:root.dark {
|
|
91
|
+
color-scheme: dark;
|
|
92
|
+
--background: oklch(19% 0 0);
|
|
93
|
+
--surface: oklch(21.5% 0 0);
|
|
94
|
+
--surface-raised: oklch(24% 0 0);
|
|
95
|
+
/* Keep muted surfaces and hover states distinct from the base surface in dark mode. */
|
|
96
|
+
--surface-muted: oklch(26% 0 0);
|
|
97
|
+
--foreground: oklch(96% 0 0);
|
|
98
|
+
--text-secondary: oklch(77% 0 0);
|
|
99
|
+
--text-muted: oklch(64% 0 0);
|
|
100
|
+
--border: oklch(29% 0 0);
|
|
101
|
+
--border-subtle: oklch(25% 0 0);
|
|
102
|
+
--border-strong: oklch(40% 0 0);
|
|
103
|
+
--focus-ring: transparent;
|
|
104
|
+
--accent: oklch(80% 0 0);
|
|
105
|
+
--accent-strong: oklch(91% 0 0);
|
|
106
|
+
--accent-subtle: oklch(80% 0 0 / .13);
|
|
107
|
+
/* Neutral dark inverts: a near-white track carries a dark thumb, so on and off never read alike. */
|
|
108
|
+
--control-on: oklch(93% 0 0);
|
|
109
|
+
--control-glyph: oklch(19% 0 0);
|
|
110
|
+
--control-track: oklch(33% 0 0);
|
|
111
|
+
--control-track-hover: oklch(37% 0 0);
|
|
112
|
+
--control-thumb: oklch(97% 0 0);
|
|
113
|
+
--control-thumb-on: oklch(19% 0 0);
|
|
114
|
+
--control-fill: oklch(62% 0 0);
|
|
115
|
+
--control-thumb-shadow: 0 0 0 .5px oklch(0% 0 0 / .3), 0 1px 2px oklch(0% 0 0 / .35), 0 2px 6px oklch(0% 0 0 / .2);
|
|
116
|
+
--success: oklch(78% .18 150);
|
|
117
|
+
--warning: oklch(83% .17 80);
|
|
118
|
+
--danger: oklch(76% .2 25);
|
|
119
|
+
--shadow-resting: 0 1px 2px oklch(0% 0 0 / .18);
|
|
120
|
+
--shadow-raised: 0 8px 22px oklch(0% 0 0 / .22);
|
|
121
|
+
--shadow-floating: 0 22px 55px oklch(0% 0 0 / .34);
|
|
122
|
+
--arc-gradient-from: oklch(38% .05 300);
|
|
123
|
+
--arc-gradient-to: oklch(40% .045 60);
|
|
124
|
+
--arc-gradient-foreground: oklch(96% .005 300);
|
|
125
|
+
--arc-gradient-soft: linear-gradient(135deg, oklch(23.5% .016 300), oklch(24% .014 65));
|
|
126
|
+
--arc-gradient-line: linear-gradient(100deg, oklch(48% .06 300), oklch(52% .055 65));
|
|
127
|
+
--arc-gradient-ink: linear-gradient(100deg, oklch(82% .07 300), oklch(86% .065 70));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
:root[data-accent="neutral"] { --accent: oklch(33% 0 0); --accent-strong: oklch(24% 0 0); --accent-subtle: oklch(33% 0 0 / .1); }
|
|
131
|
+
:root[data-accent="violet"] { --accent: #7747ff; --accent-strong: #5528ce; --accent-subtle: rgb(119 71 255 / .13); }
|
|
132
|
+
:root[data-accent="blue"] { --accent: #0562ef; --accent-strong: #074db7; --accent-subtle: rgb(5 98 239 / .12); }
|
|
133
|
+
:root[data-accent="green"] { --accent: #0db879; --accent-strong: #087c54; --accent-subtle: rgb(13 184 121 / .13); --accent-foreground: #102016; }
|
|
134
|
+
:root[data-accent="amber"] { --accent: #f3ad20; --accent-strong: #9c6300; --accent-subtle: rgb(243 173 32 / .16); --accent-foreground: #20190d; }
|
|
135
|
+
:root[data-accent="orange"] { --accent: #f48120; --accent-strong: #aa4700; --accent-subtle: rgb(244 129 32 / .13); --accent-foreground: #17130f; }
|
|
136
|
+
:root[data-accent="coral"] { --accent: #f15f55; --accent-strong: #b92c27; --accent-subtle: rgb(241 95 85 / .14); --accent-foreground: #21110f; }
|
|
137
|
+
:root[data-accent="rose"] { --accent: #ed4e9d; --accent-strong: #ae2570; --accent-subtle: rgb(237 78 157 / .14); --accent-foreground: #250f1b; }
|
|
138
|
+
:root[data-theme="dark"][data-accent="neutral"], :root.dark[data-accent="neutral"] { --accent: oklch(80% 0 0); --accent-strong: oklch(91% 0 0); --accent-subtle: oklch(80% 0 0 / .13); }
|
|
139
|
+
:root[data-theme="dark"][data-accent="violet"], :root.dark[data-accent="violet"] { --accent: #a78bff; --accent-strong: #c7b7ff; --accent-subtle: rgb(119 71 255 / .22); }
|
|
140
|
+
:root[data-theme="dark"][data-accent="blue"], :root.dark[data-accent="blue"] { --accent: #6ba3ff; --accent-strong: #a4c7ff; --accent-subtle: rgb(5 98 239 / .22); }
|
|
141
|
+
:root[data-theme="dark"][data-accent="green"], :root.dark[data-accent="green"] { --accent: #53dca6; --accent-strong: #93efd0; --accent-subtle: rgb(13 184 121 / .2); }
|
|
142
|
+
:root[data-theme="dark"][data-accent="amber"], :root.dark[data-accent="amber"] { --accent: #ffcb62; --accent-strong: #ffe0a1; --accent-subtle: rgb(243 173 32 / .2); }
|
|
143
|
+
:root[data-theme="dark"][data-accent="orange"], :root.dark[data-accent="orange"] { --accent: #ffad5e; --accent-strong: #ffd0a0; --accent-subtle: rgb(244 129 32 / .2); --accent-foreground: #17130f; }
|
|
144
|
+
:root[data-theme="dark"][data-accent="coral"], :root.dark[data-accent="coral"] { --accent: #ff9386; --accent-strong: #ffc1ba; --accent-subtle: rgb(241 95 85 / .2); }
|
|
145
|
+
:root[data-theme="dark"][data-accent="rose"], :root.dark[data-accent="rose"] { --accent: #ff8bc5; --accent-strong: #ffc0df; --accent-subtle: rgb(237 78 157 / .2); }
|
|
146
|
+
|
|
147
|
+
/* Selection control fills per accent. Light: the accent, deepened slightly where a white thumb needs it. Dark: a mid tone instead of the pastel
|
|
148
|
+
text accent, so white thumbs and checks keep contrast without a neon track. Amber keeps a dark glyph because white on yellow washes out. */
|
|
149
|
+
:root[data-accent="neutral"] { --control-on: oklch(23% 0 0); --control-thumb-on: oklch(100% 0 0); --control-glyph: oklch(100% 0 0); }
|
|
150
|
+
:root[data-accent="violet"] { --control-on: #7747ff; --control-thumb-on: #fff; --control-glyph: #fff; }
|
|
151
|
+
:root[data-accent="blue"] { --control-on: #0562ef; --control-thumb-on: #fff; --control-glyph: #fff; }
|
|
152
|
+
:root[data-accent="green"] { --control-on: #10a870; --control-thumb-on: #fff; --control-glyph: #fff; }
|
|
153
|
+
:root[data-accent="amber"] { --control-on: #eda11a; --control-thumb-on: #fff; --control-glyph: #2a1c03; }
|
|
154
|
+
:root[data-accent="orange"] { --control-on: #f07818; --control-thumb-on: #fff; --control-glyph: #fff; }
|
|
155
|
+
:root[data-accent="coral"] { --control-on: #ec564b; --control-thumb-on: #fff; --control-glyph: #fff; }
|
|
156
|
+
:root[data-accent="rose"] { --control-on: #e64494; --control-thumb-on: #fff; --control-glyph: #fff; }
|
|
157
|
+
:root[data-theme="dark"][data-accent="neutral"], :root.dark[data-accent="neutral"] { --control-on: oklch(93% 0 0); --control-thumb-on: oklch(19% 0 0); --control-glyph: oklch(19% 0 0); }
|
|
158
|
+
:root[data-theme="dark"][data-accent="violet"], :root.dark[data-accent="violet"] { --control-on: #8a66ff; --control-thumb-on: #fff; --control-glyph: #fff; --control-fill: #8a66ff; }
|
|
159
|
+
:root[data-theme="dark"][data-accent="blue"], :root.dark[data-accent="blue"] { --control-on: #3b82f6; --control-thumb-on: #fff; --control-glyph: #fff; --control-fill: #3b82f6; }
|
|
160
|
+
:root[data-theme="dark"][data-accent="green"], :root.dark[data-accent="green"] { --control-on: #1fae78; --control-thumb-on: #fff; --control-glyph: #fff; --control-fill: #1fae78; }
|
|
161
|
+
:root[data-theme="dark"][data-accent="amber"], :root.dark[data-accent="amber"] { --control-on: #e8a52a; --control-thumb-on: #fff; --control-glyph: #241803; --control-fill: #e8a52a; }
|
|
162
|
+
:root[data-theme="dark"][data-accent="orange"], :root.dark[data-accent="orange"] { --control-on: #ef873a; --control-thumb-on: #fff; --control-glyph: #fff; --control-fill: #ef873a; }
|
|
163
|
+
:root[data-theme="dark"][data-accent="coral"], :root.dark[data-accent="coral"] { --control-on: #ec6a60; --control-thumb-on: #fff; --control-glyph: #fff; --control-fill: #ec6a60; }
|
|
164
|
+
:root[data-theme="dark"][data-accent="rose"], :root.dark[data-accent="rose"] { --control-on: #e457a0; --control-thumb-on: #fff; --control-glyph: #fff; --control-fill: #e457a0; }
|
|
165
|
+
|
|
166
|
+
/* Chart series palette, shared by every chart. Series 1 is the accent itself; series 2 to 4 rotate its hue at lightness steps
|
|
167
|
+
around it, so they stay distinct for every accent. A neutral accent falls back to a blue. Validated with the dataviz script
|
|
168
|
+
across all eight accents in both themes: every pair (not only neighbours) clears CVD ΔE 9 and normal vision ΔE 17. Browsers
|
|
169
|
+
without relative color get the neutral set. Override --series-1 to --series-4 on any element to rebrand a chart. */
|
|
170
|
+
:root { --series-1: #1f7dcf; --series-2: #7128a5; --series-3: #e58f00; --series-4: #009e84; }
|
|
171
|
+
:root[data-theme="dark"],
|
|
172
|
+
:root.dark { --series-1: #55adff; --series-2: #9c37be; --series-3: #e66e00; --series-4: #00a861; }
|
|
173
|
+
@supports (color: oklch(from red clamp(.4, l * sign(max(c - .02, 0)) + .5, .8) c h)) {
|
|
174
|
+
:root {
|
|
175
|
+
--series-1: oklch(from var(--accent) calc(l * sign(max(c - .02, 0)) + .58 * (1 - sign(max(c - .02, 0)))) calc(c * sign(max(c - .02, 0)) + .15 * (1 - sign(max(c - .02, 0)))) calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0)))));
|
|
176
|
+
--series-2: oklch(from var(--accent) clamp(.45, l * sign(max(c - .02, 0)) + .58 * (1 - sign(max(c - .02, 0))) - 0.25, .76) .19 calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0))) + 57));
|
|
177
|
+
--series-3: oklch(from var(--accent) clamp(.45, l * sign(max(c - .02, 0)) + .58 * (1 - sign(max(c - .02, 0))) + 0.14, .76) .18 calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0))) + 184));
|
|
178
|
+
--series-4: oklch(from var(--accent) clamp(.45, l * sign(max(c - .02, 0)) + .58 * (1 - sign(max(c - .02, 0))), .76) .21 calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0))) + 292));
|
|
179
|
+
}
|
|
180
|
+
:root[data-theme="dark"],
|
|
181
|
+
:root.dark {
|
|
182
|
+
--series-1: oklch(from var(--accent) calc(l * sign(max(c - .02, 0)) + .73 * (1 - sign(max(c - .02, 0)))) calc(c * sign(max(c - .02, 0)) + .15 * (1 - sign(max(c - .02, 0)))) calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0)))));
|
|
183
|
+
--series-2: oklch(from var(--accent) clamp(.485, l * sign(max(c - .02, 0)) + .73 * (1 - sign(max(c - .02, 0))) - 0.19, .665) .21 calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0))) + 66));
|
|
184
|
+
--series-3: oklch(from var(--accent) clamp(.485, l * sign(max(c - .02, 0)) + .73 * (1 - sign(max(c - .02, 0))) + 0.02, .665) .21 calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0))) + 175));
|
|
185
|
+
--series-4: oklch(from var(--accent) clamp(.485, l * sign(max(c - .02, 0)) + .73 * (1 - sign(max(c - .02, 0))) - 0.1, .665) .18 calc(h * sign(max(c - .02, 0)) + 250 * (1 - sign(max(c - .02, 0))) + 270));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Focus. Pointer focus never draws a ring (product decision). Keyboard focus (:focus-visible) draws a subtle accent outline, so keyboard users
|
|
190
|
+
can always see where they are (WCAG 2.4.7). Left out of the outline: text fields, which match :focus-visible on a mouse click too and show
|
|
191
|
+
focus with their border and caret; menu items and listbox options, whose highlight fill marks the keyboard position; and tabindex="-1"
|
|
192
|
+
targets (dialog panels, regions) that only receive focus from script.
|
|
193
|
+
Tune it on :root or any element, no !important needed:
|
|
194
|
+
--focus-outline color (default: the accent, softened); set transparent to hide it
|
|
195
|
+
--focus-outline-width default 2px
|
|
196
|
+
--focus-outline-offset default 2px; components inside clipped containers set a negative offset */
|
|
197
|
+
:focus:not(:focus-visible),
|
|
198
|
+
:is(input:not([type="button"], [type="checkbox"], [type="color"], [type="file"], [type="image"], [type="radio"], [type="range"], [type="reset"], [type="submit"]), textarea, [contenteditable]:not([contenteditable="false"]), [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="option"], [tabindex="-1"]):focus { outline: none !important; }
|
|
199
|
+
:focus-visible:not(input:not([type="button"], [type="checkbox"], [type="color"], [type="file"], [type="image"], [type="radio"], [type="range"], [type="reset"], [type="submit"]), textarea, [contenteditable]:not([contenteditable="false"]), [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="option"], [tabindex="-1"]) {
|
|
200
|
+
outline: var(--focus-outline-width, 2px) solid var(--focus-outline, color-mix(in oklab, var(--accent-strong) 72%, transparent)) !important;
|
|
201
|
+
outline-offset: var(--focus-outline-offset, 2px) !important;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* @astra-kit/ui default accent: Arc's blue, used until <html> sets data-accent. */
|
|
205
|
+
:root:not([data-accent]) { --accent: #0562ef; --accent-strong: #074db7; --accent-subtle: rgb(5 98 239 / .12); --control-on: #0562ef; --control-thumb-on: #fff; --control-glyph: #fff; }
|
|
206
|
+
:root[data-theme="dark"]:not([data-accent]), :root.dark:not([data-accent]) { --accent: #6ba3ff; --accent-strong: #a4c7ff; --accent-subtle: rgb(5 98 239 / .22); --control-on: #3b82f6; --control-thumb-on: #fff; --control-glyph: #fff; --control-fill: #3b82f6; }
|
|
207
|
+
|
|
208
|
+
/*
|
|
209
|
+
* shadcn/ui token names kept for components and consumer styles, as Arc roles. --background, --foreground, --border,
|
|
210
|
+
* --accent and --accent-foreground are Arc tokens: --accent is the brand accent, not shadcn's hover grey (the
|
|
211
|
+
* bg-accent utility maps to --surface-muted instead).
|
|
212
|
+
*/
|
|
213
|
+
:root {
|
|
214
|
+
--card: var(--surface);
|
|
215
|
+
--card-foreground: var(--foreground);
|
|
216
|
+
--popover: var(--surface-raised);
|
|
217
|
+
--popover-foreground: var(--foreground);
|
|
218
|
+
--primary: var(--accent);
|
|
219
|
+
--primary-foreground: var(--accent-foreground);
|
|
220
|
+
--secondary: var(--surface-muted);
|
|
221
|
+
--secondary-foreground: var(--foreground);
|
|
222
|
+
--muted: var(--surface-muted);
|
|
223
|
+
--muted-foreground: var(--text-secondary);
|
|
224
|
+
--destructive: var(--danger);
|
|
225
|
+
--input: var(--border-strong);
|
|
226
|
+
--ring: var(--border-strong);
|
|
227
|
+
--chart-1: var(--series-1);
|
|
228
|
+
--chart-2: var(--series-2);
|
|
229
|
+
--chart-3: var(--series-3);
|
|
230
|
+
--chart-4: var(--series-4);
|
|
231
|
+
--chart-5: var(--text-muted);
|
|
232
|
+
--free: var(--success);
|
|
233
|
+
--free-foreground: var(--success);
|
|
234
|
+
--free-strong: var(--success);
|
|
235
|
+
--coming-soon: var(--warning);
|
|
236
|
+
--coming-soon-foreground: var(--warning);
|
|
237
|
+
--radius: var(--radius-control);
|
|
238
|
+
--sidebar: var(--background);
|
|
239
|
+
--sidebar-foreground: var(--foreground);
|
|
240
|
+
--sidebar-primary: var(--accent);
|
|
241
|
+
--sidebar-primary-foreground: var(--accent-foreground);
|
|
242
|
+
--sidebar-accent: var(--surface-muted);
|
|
243
|
+
--sidebar-accent-foreground: var(--foreground);
|
|
244
|
+
--sidebar-border: var(--border);
|
|
245
|
+
--sidebar-ring: var(--border-strong);
|
|
246
|
+
/* Arc keeps page backgrounds plain; the token stays for consumers that still read it. */
|
|
247
|
+
--body-background-image: none;
|
|
248
|
+
}
|