astralkit 0.5.0 → 0.7.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 CHANGED
@@ -5,6 +5,27 @@ All notable changes to the `astralkit` SDK package.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.7.0] — 2026-08-22
9
+
10
+ ### Added
11
+ - **Material utilities** — `ak-material-surface`, `ak-material-control`, refined `ak-dark-material`: the opaque elevated material surfaces the kanban/core component sets use for modals, drawers, and floating controls. Components built against these rendered **transparent overlays** on 0.6.0 (found live via the kanban-01 task drawer).
12
+ - **Semantic font utilities** — `ak-font-heading`, `ak-font-label`, `ak-font-ui`, `ak-font-ui-strong`, `ak-font-body`, backed by new font-dial variables (`--font-ak-heading` etc., with the previous literal stacks as fallbacks) so a theme can re-font at runtime.
13
+ - **Radix animation helpers** — `ak-overlay-anim`, `ak-pop-anim`, `ak-sheet-anim`, `ak-accordion-anim`, `ak-collapsible-anim`.
14
+ - **Control primitives** — `ak-control-track`, `ak-control-thumb`, `ak-control-knob`; plus `ak-button-group`(+`-separator`), `ak-scrollbar`, `ak-quiet-hover`.
15
+ - **`astralkit/presets` export** — appearance presets, theme palettes, chart palettes, font pairings, dials, and materials as data (the role system + font library per the no-font-dials-in-builder decision).
16
+ - **`ak-hover-shimmer`** animation (+ `ak-hover-shimmer-sweep` keyframes).
17
+ - **Error-role hover tokens** — `ak-error-hover`, `ak-danger-hover`.
18
+
19
+ ### Changed
20
+ - `font-ak-sans`/`-serif`/`-mono` (v3 plugin) are now var-driven (`var(--font-ak-sans, Inter)` …) so containers can re-font at runtime; literal stacks remain as fallbacks — no visual change for existing consumers.
21
+ - `ak-focus-ring` implementation refined.
22
+
23
+ ## [0.6.0] — 2026-07-06
24
+
25
+ ### Added
26
+ - **`astralkit/theme-context` export** — `AkThemeProvider` / `useAkTheme`, the React context that propagates per-component dark mode across Radix portal boundaries (Dialog/DropdownMenu/Popover content portals to `document.body`, escaping the `data-ak-dark-*` attribute scope). Installable components now import this from the SDK instead of shipping a local provider file. Adds `react >= 18` as an **optional** peer dependency — CSS-only consumers are unaffected.
27
+ - **Sidebar theming layer** (authored post-0.5.0, first published here): `primitives/sidebar.css`, `ak-dark-material` / `ak-mirror-shimmer` and `ak-sidebar-*` utilities, plus the gradient / selection / inverse / surface-container token extensions the themed sidebar set depends on.
28
+
8
29
  ## [0.5.0] — 2026-06-12
9
30
 
10
31
  ### Added (Material 3 role grammar)
package/LICENSE CHANGED
@@ -1,34 +1,73 @@
1
- AstralKit License
2
-
3
- Copyright (c) 2025-2026 Blue Beacon Creative LLC. All rights reserved.
4
-
5
- This software and associated files (the "Software") are the proprietary
6
- intellectual property of Blue Beacon Creative LLC. The Software is licensed,
7
- not sold.
8
-
9
- The design tokens and CSS utilities included in this package are freely usable
10
- in any project that uses AstralKit components. Components, boosters, and
11
- workflows installed via the AstralKit CLI are governed by the AstralKit End
12
- User License Agreement.
13
-
14
- PROHIBITED USES
15
-
16
- You may NOT, without the express prior written consent of Blue Beacon Creative LLC:
17
-
18
- 1. Use the Software's source code as training data, fine-tuning data, or input
19
- for any artificial intelligence system, machine learning model, large language
20
- model, neural network, or any automated system designed to generate code,
21
- text, images, or other output.
22
-
23
- 2. Resell, sublicense, or redistribute the Software as a standalone product,
24
- design system, or token library.
25
-
26
- 3. Build a competing product using the Software's design tokens, CSS
27
- architecture, or utility system.
28
-
29
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30
- IMPLIED. IN NO EVENT SHALL BLUE BEACON CREATIVE LLC BE LIABLE FOR ANY CLAIM,
31
- DAMAGES OR OTHER LIABILITY.
32
-
33
- Full license terms: https://astralkit.com/license
34
- Contact: hello@astralkit.com
1
+ AstralKit SDK License
2
+
3
+ Copyright (c) 2025-2026 Blue Beacon Creative LLC.
4
+
5
+ This package contains the AstralKit design token system, utility classes, and
6
+ component primitives (the "SDK"). It does NOT include AstralKit components,
7
+ boosters, workflows, or launchpads, which are licensed separately (see below).
8
+
9
+
10
+ 1. FREE USE GRANT
11
+
12
+ You may use the SDK free of charge, without an account, in any number of
13
+ projects — personal or commercial, closed source or open source, for yourself
14
+ or for clients. No attribution is required. There is no requirement that your
15
+ project also use AstralKit components.
16
+
17
+ You may modify the SDK for use within your own projects.
18
+
19
+
20
+ 2. DESIGN TOKENS ARE MIT LICENSED
21
+
22
+ The design token layer — the CSS custom properties defining colors, type and
23
+ spacing scales, radii, sizes, shadows, and motion is additionally available
24
+ under the MIT License, distributed as `astralkit-tokens.css` via
25
+ https://cdn.astralkit.com. Use of that file is governed by MIT terms only, and
26
+ nothing in section 3 restricts it.
27
+
28
+
29
+ 3. RESTRICTIONS
30
+
31
+ You may NOT, without express prior written consent of Blue Beacon Creative LLC:
32
+
33
+ a. Repackage or redistribute the SDK — in whole or in substantial part — as a
34
+ standalone design system, token library, UI kit, theme, or CSS framework,
35
+ whether free or paid. (Using the SDK inside a website or application you
36
+ build is expressly permitted; redistributing it AS the product is not.)
37
+
38
+ b. Build a product that competes with AstralKit using the SDK's component
39
+ primitives or CSS architecture.
40
+
41
+ These restrictions do not apply to `astralkit-tokens.css` (see section 2).
42
+
43
+
44
+ 4. AI AND MACHINE LEARNING
45
+
46
+ Use of the SDK as training data for AI systems, machine learning models, and
47
+ large language models is permitted. AstralKit is designed to be agent-native;
48
+ we want AI tools to know this design language.
49
+
50
+ This permission covers the SDK only. AstralKit components, boosters, workflows,
51
+ and launchpads are excluded — see their license.
52
+
53
+
54
+ 5. COMPONENTS, BOOSTERS, WORKFLOWS, AND LAUNCHPADS
55
+
56
+ Content installed via the AstralKit CLI or MCP server — components, boosters,
57
+ workflows, and launchpads — is NOT covered by this license. It is governed by
58
+ the AstralKit End User License Agreement at https://astralkit.com/license,
59
+ which restricts redistribution, competing use, and AI training.
60
+
61
+
62
+ 6. NO WARRANTY
63
+
64
+ THE SDK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
65
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
66
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL BLUE BEACON CREATIVE
67
+ LLC BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
68
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
69
+ SDK OR THE USE OR OTHER DEALINGS IN THE SDK.
70
+
71
+
72
+ Full terms: https://astralkit.com/license
73
+ Contact: hello@astralkit.com
package/README.md CHANGED
@@ -66,6 +66,36 @@ export function Button({ className, ...props }) {
66
66
  - [CSS Variables Reference](https://astralkit.com/documentation/css-variables-reference)
67
67
  - [Theming & Customization](https://astralkit.com/documentation/theming-customization)
68
68
 
69
+ ## CDN (no build step)
70
+
71
+ For plain HTML pages, load the CSS directly — no npm, no Tailwind, no build:
72
+
73
+ ```html
74
+ <link rel="preconnect" href="https://fonts.googleapis.com">
75
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
76
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=DM+Serif+Display&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
77
+ <link rel="stylesheet" href="https://cdn.astralkit.com/v0.6.0/astralkit.min.css">
78
+ ```
79
+
80
+ | CDN file | Contents |
81
+ |---|---|
82
+ | `astralkit.min.css` | Tokens + `ak-*` utilities + component primitives |
83
+ | `astralkit-tokens.min.css` | Design tokens only (**MIT licensed**) |
84
+ | `astralkit-palettes.min.css` | Curated palettes — set `data-ak-theme="…"` |
85
+
86
+ Dark mode: `data-theme="dark"` on `<html>`. Fonts are intentionally not bundled
87
+ (an `@import` inside CSS is render-blocking) — add the `<link>` tags above.
88
+
69
89
  ## License
70
90
 
71
- Proprietary[AstralKit License](https://astralkit.com/license)
91
+ **This SDK is free to use** any project, commercial or personal, closed or
92
+ open source, no account required. The **design tokens are MIT licensed**
93
+ (`astralkit-tokens.css`). Training AI models on this SDK is permitted.
94
+
95
+ You may not repackage or redistribute the SDK as a competing design system,
96
+ token library, or UI kit.
97
+
98
+ AstralKit components, boosters, workflows, and launchpads are **licensed
99
+ separately** under the [AstralKit EULA](https://astralkit.com/license).
100
+
101
+ Full terms: [`LICENSE`](./LICENSE) · [astralkit.com/license](https://astralkit.com/license)
@@ -26,31 +26,35 @@
26
26
  --color-ak-neutral-950: #0a0a0a;
27
27
 
28
28
  /* ── Primary scale (full 11-shade ramp) ── */
29
- --color-ak-primary-50: #f5f5f5;
30
- --color-ak-primary-100: #e5e5e5;
31
- --color-ak-primary-200: #cccccc;
32
- --color-ak-primary-300: #a3a3a3;
33
- --color-ak-primary-400: #737373;
34
- --color-ak-primary-500: #525252;
35
- --color-ak-primary-600: #404040;
36
- --color-ak-primary-700: #333333;
37
- --color-ak-primary-800: #1a1a1a;
38
- --color-ak-primary-900: #000000;
39
- --color-ak-primary-950: #000000;
29
+ --color-ak-primary-50: #f6f6f3;
30
+ --color-ak-primary-100: #eeeeea;
31
+ --color-ak-primary-200: #deded6;
32
+ --color-ak-primary-300: #c8c8bd;
33
+ --color-ak-primary-400: #8a8a84;
34
+ --color-ak-primary-500: #55564f;
35
+ --color-ak-primary-600: #3b3c37;
36
+ --color-ak-primary-700: #272823;
37
+ --color-ak-primary-800: #171814;
38
+ --color-ak-primary-900: #0b0b0b;
39
+ --color-ak-primary-950: #050505;
40
40
 
41
41
  /* ── Primary action colors ── */
42
- --color-ak-primary: #000000;
43
- --color-ak-primary-hover: #1a1a1a;
44
- --color-ak-primary-active: #333333;
42
+ --color-ak-primary: #0b0b0b;
43
+ --color-ak-primary-hover: #1f1f1d;
44
+ --color-ak-primary-active: #33332f;
45
+ --color-ak-primary-outline: var(--color-ak-primary-400);
46
+ --color-ak-secondary-outline: var(--color-ak-primary-400);
47
+ --color-ak-primary-selection: #1f1f1d;
48
+ --color-ak-on-primary-selection: var(--color-ak-on-primary);
45
49
 
46
50
  /* ── Semantic color aliases ── */
47
51
  --color-ak-bg: #ffffff;
48
- --color-ak-surface: #fafafa;
49
- --color-ak-surface-2: #f5f5f5;
50
- --color-ak-surface-3: #efefef;
51
- --color-ak-surface-4: #e9e9e9;
52
- --color-ak-hover: #f7f7f7;
53
- --color-ak-active: #f0f0f0;
52
+ --color-ak-surface: #ffffff;
53
+ --color-ak-surface-2: #eeeeea;
54
+ --color-ak-surface-3: #e7e7e0;
55
+ --color-ak-surface-4: #ddddd6;
56
+ --color-ak-hover: #f3f3f0;
57
+ --color-ak-active: #ecece6;
54
58
  --color-ak-elevated: #ffffff;
55
59
  --color-ak-surface-raised: #ffffff;
56
60
  --color-ak-surface-raised-soft: rgba(255, 255, 255, 0.78);
@@ -66,7 +70,7 @@
66
70
  (e.g. Pulse: ink CTAs via primary, volt-lime selection via accent). */
67
71
  --color-ak-accent: var(--color-ak-primary);
68
72
  --color-ak-on-accent: var(--color-ak-on-primary);
69
- --color-ak-accent-soft: var(--color-ak-surface-2);
73
+ --color-ak-accent-soft: #f8f8f5;
70
74
  /* M3 names as alias vars (follow their targets in dark automatically) */
71
75
  --color-ak-surface-container-lowest: var(--color-ak-bg);
72
76
  --color-ak-surface-container-low: var(--color-ak-surface);
@@ -79,6 +83,8 @@
79
83
  --color-ak-outline-variant: var(--color-ak-border-subtle);
80
84
  --color-ak-primary-container: var(--color-ak-primary-subtle);
81
85
  --color-ak-on-primary-container: var(--color-ak-primary-900);
86
+ --color-ak-selection-ink: var(--color-ak-on-primary-container);
87
+ --color-ak-primary-container-emphasis: var(--color-ak-selection-ink);
82
88
  --color-ak-secondary: var(--color-ak-accent);
83
89
  --color-ak-on-secondary: var(--color-ak-on-accent);
84
90
  --color-ak-secondary-container: var(--color-ak-accent-soft);
@@ -87,33 +93,34 @@
87
93
  --color-ak-tertiary-container: var(--color-ak-info-subtle);
88
94
  --color-ak-on-tertiary-container: var(--color-ak-info-text);
89
95
  --color-ak-error: var(--color-ak-danger);
96
+ --color-ak-error-hover: var(--color-ak-danger-hover);
90
97
  --color-ak-error-container: var(--color-ak-danger-subtle);
91
98
  --color-ak-on-error-container: var(--color-ak-danger-text);
92
99
  --color-ak-scrim: var(--color-ak-overlay);
93
100
  --color-ak-highlight-soft: rgba(255, 255, 255, 0.45);
94
101
  --color-ak-highlight-strong: rgba(255, 255, 255, 0.72);
95
- --color-ak-skeleton-base: #ededed;
102
+ --color-ak-skeleton-base: #eeeeea;
96
103
  --color-ak-skeleton-shine: rgba(255, 255, 255, 0.72);
97
104
  --color-ak-overlay: rgba(0, 0, 0, 0.5);
98
105
  --color-ak-on-primary: #ffffff;
99
- --color-ak-primary-subtle: #f5f5f5;
100
- --color-ak-primary-subtle-hover: #e5e5e5;
106
+ --color-ak-primary-subtle: #eeeeea;
107
+ --color-ak-primary-subtle-hover: #deded6;
101
108
 
102
109
  /* ── Semantic text ── */
103
- --color-ak-text: #171717;
104
- --color-ak-text-emphasis: #2b2b2b;
105
- --color-ak-text-secondary: #525252;
106
- --color-ak-text-muted: #a3a3a3;
107
- --color-ak-text-disabled: #d4d4d4;
110
+ --color-ak-text: #0b0b0b;
111
+ --color-ak-text-emphasis: #171814;
112
+ --color-ak-text-secondary: #55564f;
113
+ --color-ak-text-muted: #8a8a84;
114
+ --color-ak-text-disabled: #c8c8bd;
108
115
  --color-ak-text-inverse: #ffffff;
109
- --color-ak-text-link: #000000;
110
- --color-ak-text-placeholder:#525252;
116
+ --color-ak-text-link: #0b0b0b;
117
+ --color-ak-text-placeholder:#6f7068;
111
118
 
112
119
  /* ── Semantic border ── */
113
- --color-ak-border: #dee2e6;
114
- --color-ak-border-subtle: #e5e5e5;
115
- --color-ak-border-strong: #525252;
116
- --color-ak-border-focus: #000000;
120
+ --color-ak-border: #deded6;
121
+ --color-ak-border-subtle: #e8e8e2;
122
+ --color-ak-border-strong: #55564f;
123
+ --color-ak-border-focus: #0b0b0b;
117
124
 
118
125
  /* ── Status colors ── */
119
126
  --color-ak-success: #16a34a;
@@ -123,6 +130,7 @@
123
130
  --color-ak-warning-subtle: #fffbeb;
124
131
  --color-ak-warning-text: #b45309;
125
132
  --color-ak-danger: #dc2626;
133
+ --color-ak-danger-hover: #b91c1c;
126
134
  --color-ak-danger-subtle: #fef2f2;
127
135
  --color-ak-danger-text: #b91c1c;
128
136
  --color-ak-info: #2563eb;
@@ -133,6 +141,9 @@
133
141
 
134
142
  /* ── Font families ── */
135
143
  --font-ak-sans: 'Inter', system-ui, -apple-system, sans-serif;
144
+ --font-ak-heading: var(--font-ak-sans);
145
+ --font-ak-ui: var(--font-ak-sans);
146
+ --font-ak-label: var(--font-ak-sans);
136
147
  --font-ak-serif: 'DM Serif Display', Georgia, serif;
137
148
  --font-ak-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
138
149
 
@@ -324,15 +335,23 @@
324
335
  --spacing-ak-fl-xl-3xl: clamp(3rem, 0.57rem + 8.33vw, 9rem);
325
336
 
326
337
  /* ── Border Radius ── */
327
- --radius-ak-xs: 0.125rem;
338
+ /* One-knob radius system: every step derives from --ak-radius, so a theme,
339
+ palette, or container can re-radius the whole tree by setting ONE variable
340
+ (default 0.5rem reproduces the historic fixed values exactly).
341
+ --radius-ak-control-sm is the clamped radius for compact controls - it
342
+ tracks the knob but caps at 10px so small elements never go pill-shaped
343
+ when the knob is cranked. */
344
+ --ak-radius: 0.5rem;
345
+ --radius-ak-xs: calc(var(--ak-radius) * 0.25);
328
346
  --radius-ak-none: 0;
329
- --radius-ak-sm: 0.25rem;
330
- --radius-ak-md: 0.5rem;
331
- --radius-ak-lg: 0.75rem;
332
- --radius-ak-xl: 1rem;
333
- --radius-ak-2xl: 1.5rem;
334
- --radius-ak-3xl: 2rem;
347
+ --radius-ak-sm: calc(var(--ak-radius) * 0.5);
348
+ --radius-ak-md: var(--ak-radius);
349
+ --radius-ak-lg: calc(var(--ak-radius) * 1.5);
350
+ --radius-ak-xl: calc(var(--ak-radius) * 2);
351
+ --radius-ak-2xl: calc(var(--ak-radius) * 3);
352
+ --radius-ak-3xl: calc(var(--ak-radius) * 4);
335
353
  --radius-ak-full: 9999px;
354
+ --radius-ak-control-sm: min(var(--ak-radius), 0.625rem);
336
355
 
337
356
  /* ── Shadows ── */
338
357
  --shadow-ak-xs: 0 1px 2px rgba(0,0,0,0.04);
@@ -535,7 +554,7 @@
535
554
  --color-ak-chart-6: #edc949;
536
555
 
537
556
  /* ── Form input border radius ── */
538
- --radius-ak-input: 0.625rem;
557
+ --radius-ak-input: calc(var(--ak-radius) * 1.25);
539
558
 
540
559
  /* ── Sidebar widths ── */
541
560
  --width-ak-sidebar-collapsed: 5rem;
@@ -604,13 +623,25 @@
604
623
  --color-ak-surface-4: #2c2d30;
605
624
  --color-ak-inverse-surface: #f4f4f5;
606
625
  --color-ak-inverse-on-surface: #111113;
607
- --color-ak-on-error: #111113;
626
+ --color-ak-on-error: #ffffff;
627
+ /* Alias redeclarations: var() chains substitute where DEFINED, so the
628
+ :root aliases froze against LIGHT danger. Redeclaring here re-substitutes
629
+ against the dark danger family. */
630
+ --color-ak-error: var(--color-ak-danger);
631
+ --color-ak-error-hover: var(--color-ak-danger-hover);
632
+ --color-ak-error-container: var(--color-ak-danger-subtle);
633
+ --color-ak-on-error-container: var(--color-ak-danger-text);
608
634
  --color-ak-on-tertiary: #111113;
609
635
  --color-ak-hover: rgba(255,255,255,0.04);
610
636
  --color-ak-active: rgba(255,255,255,0.08);
611
637
  --color-ak-elevated: #252628;
612
638
  --color-ak-surface-raised: #1e1f21;
613
639
  --color-ak-surface-raised-soft: rgba(255,255,255,0.04);
640
+ --color-ak-surface-container-lowest: #1e1f21;
641
+ --color-ak-surface-container-low: #252628;
642
+ --color-ak-surface-container: #2c2d30;
643
+ --color-ak-surface-container-high: #333436;
644
+ --color-ak-surface-container-highest: #3a3b3d;
614
645
  --color-ak-surface-glass: rgba(255,255,255,0.05);
615
646
  --color-ak-surface-glass-strong: rgba(255,255,255,0.08);
616
647
  --color-ak-highlight-soft: rgba(255,255,255,0.06);
@@ -619,8 +650,8 @@
619
650
  --color-ak-skeleton-shine: rgba(255,255,255,0.06);
620
651
  --color-ak-overlay: rgba(0,0,0,0.7);
621
652
  --color-ak-on-primary: #111113;
622
- --color-ak-primary-subtle: rgba(129, 140, 248, 0.15);
623
- --color-ak-primary-subtle-hover: rgba(129, 140, 248, 0.24);
653
+ --color-ak-primary-subtle: rgba(255, 255, 255, 0.10);
654
+ --color-ak-primary-subtle-hover: rgba(255, 255, 255, 0.16);
624
655
 
625
656
  /* ── Text ── */
626
657
  --color-ak-text: #f4f4f5;
@@ -629,31 +660,53 @@
629
660
  --color-ak-text-muted: #71717a;
630
661
  --color-ak-text-disabled: #52525b;
631
662
  --color-ak-text-inverse: #111113;
632
- --color-ak-text-link: #818cf8;
663
+ --color-ak-text-link: #f4f4f5;
633
664
  --color-ak-text-placeholder:#a1a1aa;
665
+ --color-ak-on-surface: #f4f4f5;
666
+ --color-ak-on-surface-variant: #a1a1aa;
634
667
 
635
668
  /* ── Borders (alpha — adapts to any surface) ── */
636
669
  --color-ak-border: rgba(255, 255, 255, 0.10);
637
670
  --color-ak-border-subtle: rgba(255, 255, 255, 0.06);
638
671
  --color-ak-border-strong: rgba(255, 255, 255, 0.16);
639
672
  --color-ak-border-focus: #ffffff;
640
-
641
- /* ── Primary (lightened for contrast on dark bg) ── */
642
- --color-ak-primary: #818cf8;
643
- --color-ak-primary-hover: #a5b4fc;
644
- --color-ak-primary-active: #6366f1;
645
-
646
- --color-ak-primary-50: rgba(129, 140, 248, 0.06);
647
- --color-ak-primary-100: rgba(129, 140, 248, 0.10);
648
- --color-ak-primary-200: rgba(129, 140, 248, 0.16);
649
- --color-ak-primary-300: rgba(129, 140, 248, 0.24);
650
- --color-ak-primary-400: #6366f1;
651
- --color-ak-primary-500: #818cf8;
652
- --color-ak-primary-600: #a5b4fc;
653
- --color-ak-primary-700: #c7d2fe;
654
- --color-ak-primary-800: #e0e7ff;
655
- --color-ak-primary-900: #eef2ff;
656
- --color-ak-primary-950: #f5f7ff;
673
+ --color-ak-outline: rgba(255, 255, 255, 0.16);
674
+ --color-ak-outline-variant: rgba(255, 255, 255, 0.10);
675
+
676
+ /* ── Primary (neutral fallback; palettes provide intentional accent color) ── */
677
+ --color-ak-primary: #f4f4f5;
678
+ --color-ak-primary-hover: #e4e4e7;
679
+ --color-ak-primary-active: #d4d4d8;
680
+ --color-ak-primary-outline: rgba(255, 255, 255, 0.34);
681
+ --color-ak-secondary-outline: rgba(255, 255, 255, 0.34);
682
+ --color-ak-on-primary-selection: var(--color-ak-on-primary);
683
+ --color-ak-primary-container: rgba(255, 255, 255, 0.10);
684
+ --color-ak-on-primary-container: #f4f4f5;
685
+ --color-ak-selection-ink: #f4f4f5;
686
+ --color-ak-primary-container-emphasis: #f4f4f5;
687
+ --color-ak-secondary: #f4f4f5;
688
+ --color-ak-on-secondary: #111113;
689
+ --color-ak-secondary-container: rgba(255, 255, 255, 0.10);
690
+ --color-ak-on-secondary-container: #f4f4f5;
691
+ --color-ak-tertiary: #f4f4f5;
692
+ --color-ak-tertiary-container: rgba(255, 255, 255, 0.10);
693
+ --color-ak-on-tertiary-container: #f4f4f5;
694
+ --color-ak-accent: #f4f4f5;
695
+ --color-ak-on-accent: #111113;
696
+ --color-ak-accent-soft: rgba(255, 255, 255, 0.10);
697
+ --color-ak-on-accent-soft: #f4f4f5;
698
+
699
+ --color-ak-primary-50: rgba(255, 255, 255, 0.06);
700
+ --color-ak-primary-100: rgba(255, 255, 255, 0.10);
701
+ --color-ak-primary-200: rgba(255, 255, 255, 0.16);
702
+ --color-ak-primary-300: rgba(255, 255, 255, 0.24);
703
+ --color-ak-primary-400: #d4d4d8;
704
+ --color-ak-primary-500: #f4f4f5;
705
+ --color-ak-primary-600: #fafafa;
706
+ --color-ak-primary-700: #ffffff;
707
+ --color-ak-primary-800: #ffffff;
708
+ --color-ak-primary-900: #ffffff;
709
+ --color-ak-primary-950: #ffffff;
657
710
 
658
711
  /* ── Status (lighter for dark bg readability) ── */
659
712
  --color-ak-success: #4ade80;
@@ -662,7 +715,8 @@
662
715
  --color-ak-warning: #fbbf24;
663
716
  --color-ak-warning-subtle: rgba(251, 191, 36, 0.12);
664
717
  --color-ak-warning-text: #fbbf24;
665
- --color-ak-danger: #f87171;
718
+ --color-ak-danger: #dc2626;
719
+ --color-ak-danger-hover: #b91c1c;
666
720
  --color-ak-danger-subtle: rgba(248, 113, 113, 0.12);
667
721
  --color-ak-danger-text: #f87171;
668
722
  --color-ak-info: #60a5fa;
@@ -680,7 +734,7 @@
680
734
  /* ── Focus rings (solid for AAA 2.4.13 compliance) ── */
681
735
  --color-ak-border-focus: #ffffff;
682
736
  --shadow-ak-focus: 0 0 0 3px rgba(255, 255, 255, 0.20);
683
- --shadow-ak-focus-primary: 0 0 0 3px rgba(129, 140, 248, 0.30);
737
+ --shadow-ak-focus-primary: 0 0 0 3px rgba(255, 255, 255, 0.24);
684
738
  --shadow-ak-focus-danger: 0 0 0 3px rgba(248, 113, 113, 0.25);
685
739
  --shadow-ak-focus-success: 0 0 0 3px rgba(74, 222, 128, 0.25);
686
740