@adukiorg/anza 0.4.0 → 0.4.2

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.
Files changed (41) hide show
  1. package/bin/anza/anza-linux-arm64 +0 -0
  2. package/bin/anza/anza-linux-x64 +0 -0
  3. package/bin/anza/anza-macos-arm64 +0 -0
  4. package/bin/anza/anza-macos-x64 +0 -0
  5. package/bin/anza/anza-windows-x64.exe +0 -0
  6. package/package.json +1 -1
  7. package/src/core/api/index.js +2 -2
  8. package/src/core/offline/sync.js +2 -2
  9. package/src/core/router/cascade.js +15 -20
  10. package/src/core/router/container.js +4 -0
  11. package/src/core/router/graph.js +40 -12
  12. package/src/core/router/index.js +7 -1
  13. package/src/core/router/intercept.js +400 -100
  14. package/src/core/router/match.js +30 -0
  15. package/src/core/ui/define/element.js +64 -11
  16. package/src/core/ui/define/orchestrator.js +8 -4
  17. package/src/core/ui/define/utils.js +13 -7
  18. package/src/core/ui/defs/dock.js +18 -1
  19. package/src/core/ui/defs/page.js +75 -29
  20. package/src/core/ui/defs/spec.js +81 -11
  21. package/src/elements/data/list/style.css +1 -1
  22. package/src/elements/data/table/index.js +2 -1
  23. package/src/elements/data/table/style.css +1 -1
  24. package/src/elements/feedback/alert/style.css +1 -1
  25. package/src/styles/base.css +22 -21
  26. package/src/tokens/index.css +1 -4
  27. package/src/tokens/primitives/colors.css +9 -64
  28. package/src/tokens/primitives/motion.css +6 -18
  29. package/src/tokens/primitives/spacing.css +7 -12
  30. package/src/tokens/primitives/typography.css +12 -42
  31. package/src/tokens/registered/colors.css +5 -96
  32. package/src/tokens/registered/dimensions.css +6 -19
  33. package/src/tokens/semantic/contrast.css +8 -36
  34. package/src/tokens/semantic/dark.css +13 -48
  35. package/src/tokens/semantic/light.css +13 -44
  36. package/src/tokens/semantic/transitions.css +22 -12
  37. package/CHANGELOG.md +0 -352
  38. package/src/tokens/primitives/radius.css +0 -16
  39. package/src/tokens/primitives/shadow.css +0 -34
  40. package/src/tokens/primitives/zindex.css +0 -18
  41. package/src/tokens/semantic/components.css +0 -123
@@ -1,71 +1,16 @@
1
1
  /**
2
2
  * tokens/primitives/colors.css
3
3
  *
4
- * Perceptually uniform color scales using OKLCH.
5
- * Converted from hex values provided in the design system.
4
+ * Base raw color decisions.
6
5
  */
7
6
 
8
7
  :root {
9
- /* Gray scale — 11-step perceptual scale */
10
- --gray-0: oklch(100% 0 0);
11
- --gray-50: oklch(98% 0.002 264);
12
- --gray-100: oklch(95% 0.004 264);
13
- --gray-200: oklch(90% 0.006 264);
14
- --gray-300: oklch(80% 0.008 264);
15
- --gray-400: oklch(65% 0.01 264);
16
- --gray-500: oklch(50% 0.012 264);
17
- --gray-600: oklch(38% 0.014 264);
18
- --gray-700: oklch(28% 0.016 264);
19
- --gray-800: oklch(18% 0.018 264);
20
- --gray-900: oklch(10% 0.02 264);
21
- --gray-950: oklch(5% 0.022 264);
22
-
23
- /* Brand green palette — based on #07a45f, #09d379 */
24
- --brand-50: oklch(96% 0.08 155);
25
- --brand-100: oklch(90% 0.12 155);
26
- --brand-200: oklch(82% 0.16 155);
27
- --brand-300: oklch(72% 0.18 155);
28
- --brand-400: oklch(62% 0.20 155);
29
- --brand-500: oklch(55% 0.22 155);
30
- --brand-600: oklch(48% 0.20 155);
31
- --brand-700: oklch(40% 0.18 155);
32
- --brand-800: oklch(32% 0.16 155);
33
- --brand-900: oklch(24% 0.14 155);
34
- --brand-950: oklch(15% 0.12 155);
35
-
36
- /* Success palette — based on #10b981 */
37
- --success-50: oklch(96% 0.08 155);
38
- --success-100: oklch(88% 0.12 155);
39
- --success-200: oklch(78% 0.16 155);
40
- --success-300: oklch(68% 0.18 155);
41
- --success-400: oklch(58% 0.20 155);
42
- --success-500: oklch(52% 0.22 155);
43
- --success-600: oklch(45% 0.20 155);
44
-
45
- /* Error palette — based on #ec4b19 */
46
- --error-50: oklch(96% 0.06 35);
47
- --error-100: oklch(90% 0.10 35);
48
- --error-200: oklch(80% 0.14 35);
49
- --error-300: oklch(70% 0.18 35);
50
- --error-400: oklch(60% 0.22 35);
51
- --error-500: oklch(54% 0.24 35);
52
- --error-600: oklch(47% 0.22 35);
53
-
54
- /* Warn palette — based on #fa6436 */
55
- --warn-50: oklch(96% 0.08 45);
56
- --warn-100: oklch(90% 0.12 45);
57
- --warn-200: oklch(80% 0.16 45);
58
- --warn-300: oklch(70% 0.20 45);
59
- --warn-400: oklch(60% 0.24 45);
60
- --warn-500: oklch(54% 0.26 45);
61
- --warn-600: oklch(47% 0.24 45);
62
-
63
- /* Info palette */
64
- --info-50: oklch(96% 0.06 240);
65
- --info-100: oklch(90% 0.10 240);
66
- --info-200: oklch(80% 0.14 240);
67
- --info-300: oklch(70% 0.18 240);
68
- --info-400: oklch(60% 0.22 240);
69
- --info-500: oklch(54% 0.24 240);
70
- --info-600: oklch(47% 0.22 240);
8
+ --color-white: #ffffff;
9
+ --color-black: #000000;
10
+ --gray-100: oklch(95% 0 0);
11
+ --gray-200: oklch(90% 0 0);
12
+ --gray-800: oklch(20% 0 0);
13
+ --gray-900: oklch(10% 0 0);
14
+ --brand: oklch(62% 0.17 145); /* Base brand accent */
71
15
  }
16
+
@@ -1,26 +1,14 @@
1
1
  /**
2
2
  * tokens/primitives/motion.css
3
3
  *
4
- * Durations and easing curves for transitions and animations.
4
+ * Essential motion parameters.
5
5
  */
6
6
 
7
7
  :root {
8
- /* Durations */
9
- --duration-fast: 100ms;
10
- --duration-normal: 200ms;
11
- --duration-slow: 300ms;
12
-
13
- /* Easing curves */
14
- --ease-in: cubic-bezier(0.4, 0, 1, 1);
15
- --ease-out: cubic-bezier(0, 0, 0.2, 1);
16
- --ease-in-out: cubic-bezier(0.4, 0, 0.6, 1);
17
- --ease-linear: linear;
8
+ --duration-fast: 120ms;
9
+ --duration-normal: 240ms;
10
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
11
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
12
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
18
13
  }
19
14
 
20
- @media (prefers-reduced-motion: reduce) {
21
- :root {
22
- --duration-fast: 0ms;
23
- --duration-normal: 0ms;
24
- --duration-slow: 0ms;
25
- }
26
- }
@@ -1,19 +1,14 @@
1
1
  /**
2
2
  * tokens/primitives/spacing.css
3
3
  *
4
- * Fixed spacing scale using rem units based on a 4px increment system.
4
+ * Minimal numeric spacing scale.
5
5
  */
6
6
 
7
7
  :root {
8
- --space-px: 1px;
9
- --space-0: 0px;
10
- --space-xs: 0.25rem; /* 4px */
11
- --space-sm: 0.5rem; /* 8px */
12
- --space-md: 1rem; /* 16px */
13
- --space-lg: 1.5rem; /* 24px */
14
- --space-xl: 2rem; /* 32px */
15
- --space-2xl: 3rem; /* 48px */
16
- --space-3xl: 4rem; /* 64px */
17
- --space-4xl: 6rem; /* 96px */
18
- --space-5xl: 8rem; /* 128px */
8
+ --space-0: 0px;
9
+ --space-px: 1px;
10
+ --space-2: 0.5rem; /* 8px */
11
+ --space-3: 0.75rem; /* 12px */
12
+ --space-4: 1rem; /* 16px */
19
13
  }
14
+
@@ -1,49 +1,19 @@
1
1
  /**
2
2
  * tokens/primitives/typography.css
3
3
  *
4
- * Typography scales, weights, line-heights, letter-spacings, and font stacks.
5
- * Google Fonts: Inter, JetBrains Mono, IBM Plex Sans
4
+ * Essential typography settings.
6
5
  */
7
6
 
8
- @import url("https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap");
9
- @import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap");
10
- @import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,100..900;1,100..900&display=swap");
11
-
12
7
  :root {
13
- /* Modular type scale (1.25 ratio) */
14
- --text-xs: 0.75rem; /* 12px */
15
- --text-sm: 0.875rem; /* 14px */
16
- --text-md: 1rem; /* 16px */
17
- --text-lg: 1.25rem; /* 20px */
18
- --text-xl: 1.5rem; /* 24px */
19
- --text-2xl: 1.875rem; /* 30px */
20
- --text-3xl: 2.25rem; /* 36px */
21
- --text-4xl: 3rem; /* 48px */
22
- --text-5xl: 3.75rem; /* 60px */
23
-
24
- /* Font weights */
25
- --font-light: 300;
26
- --font-normal: 400;
27
- --font-medium: 500;
28
- --font-semibold: 600;
29
- --font-bold: 700;
30
-
31
- /* Line heights */
32
- --leading-tight: 1.25;
33
- --leading-snug: 1.375;
34
- --leading-normal: 1.5;
35
- --leading-relaxed: 1.625;
36
- --leading-loose: 2;
37
-
38
- /* Letter spacing */
39
- --tracking-tight: -0.025em;
40
- --tracking-normal: 0;
41
- --tracking-wide: 0.025em;
42
- --tracking-wider: 0.05em;
43
- --tracking-widest: 0.1em;
44
-
45
- /* Font families */
46
- --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
47
- --font-serif: 'IBM Plex Sans', serif;
48
- --font-mono: 'JetBrains Mono', monospace;
8
+ --font-sans: system-ui, -apple-system, sans-serif;
9
+ --font-size-base: 1rem;
10
+ --font-size-lg: 1.25rem;
11
+ --font-size-xl: 1.5rem;
12
+ --font-size-2xl: 1.875rem;
13
+ --font-size-3xl: 2.25rem;
14
+ --font-weight-regular: 400;
15
+ --font-weight-semibold: 600;
16
+ --line-height-normal: 1.5;
17
+ --line-height-tight: 1.25;
49
18
  }
19
+
@@ -1,21 +1,13 @@
1
1
  /**
2
2
  * tokens/registered/colors.css
3
3
  *
4
- * Houdini @property registrations for animatable semantic color tokens.
5
- * This permits smooth, GPU-accelerated theme transition morphs.
6
- * Source: doc 26 §5
4
+ * Houdini @property registrations for animatable core semantic color tokens.
7
5
  */
8
6
 
9
7
  @property --color-surface-page {
10
8
  syntax: '<color>';
11
9
  inherits: true;
12
- initial-value: oklch(97% 0 0);
13
- }
14
-
15
- @property --color-surface-card {
16
- syntax: '<color>';
17
- inherits: true;
18
- initial-value: oklch(100% 0 0);
10
+ initial-value: oklch(98% 0 0);
19
11
  }
20
12
 
21
13
  @property --color-surface-elevated {
@@ -24,12 +16,6 @@
24
16
  initial-value: oklch(100% 0 0);
25
17
  }
26
18
 
27
- @property --color-surface-inverse {
28
- syntax: '<color>';
29
- inherits: true;
30
- initial-value: oklch(10% 0 0);
31
- }
32
-
33
19
  @property --color-content-primary {
34
20
  syntax: '<color>';
35
21
  inherits: true;
@@ -39,95 +25,18 @@
39
25
  @property --color-content-secondary {
40
26
  syntax: '<color>';
41
27
  inherits: true;
42
- initial-value: oklch(38% 0 0);
43
- }
44
-
45
- @property --color-content-disabled {
46
- syntax: '<color>';
47
- inherits: true;
48
- initial-value: oklch(64% 0 0);
49
- }
50
-
51
- @property --color-content-inverse {
52
- syntax: '<color>';
53
- inherits: true;
54
- initial-value: oklch(97% 0 0);
55
- }
56
-
57
- @property --color-content-link {
58
- syntax: '<color>';
59
- inherits: true;
60
- initial-value: oklch(55% 0.22 250);
28
+ initial-value: oklch(30% 0 0);
61
29
  }
62
30
 
63
31
  @property --color-interactive {
64
32
  syntax: '<color>';
65
33
  inherits: true;
66
- initial-value: oklch(55% 0.22 250);
67
- }
68
-
69
- @property --color-interactive-hover {
70
- syntax: '<color>';
71
- inherits: true;
72
- initial-value: oklch(46% 0.20 250);
73
- }
74
-
75
- @property --color-interactive-active {
76
- syntax: '<color>';
77
- inherits: true;
78
- initial-value: oklch(38% 0.18 250);
79
- }
80
-
81
- @property --color-interactive-focus {
82
- syntax: '<color>';
83
- inherits: true;
84
- initial-value: oklch(55% 0.22 250);
85
- }
86
-
87
- @property --color-interactive-disabled {
88
- syntax: '<color>';
89
- inherits: true;
90
- initial-value: oklch(88% 0 0);
91
- }
92
-
93
- @property --color-feedback-success {
94
- syntax: '<color>';
95
- inherits: true;
96
- initial-value: oklch(63% 0.19 145);
97
- }
98
-
99
- @property --color-feedback-warning {
100
- syntax: '<color>';
101
- inherits: true;
102
- initial-value: oklch(75% 0.18 65);
103
- }
104
-
105
- @property --color-feedback-error {
106
- syntax: '<color>';
107
- inherits: true;
108
- initial-value: oklch(58% 0.22 25);
109
- }
110
-
111
- @property --color-feedback-info {
112
- syntax: '<color>';
113
- inherits: true;
114
- initial-value: oklch(60% 0.18 230);
34
+ initial-value: oklch(62% 0.17 145);
115
35
  }
116
36
 
117
37
  @property --color-border-default {
118
38
  syntax: '<color>';
119
39
  inherits: true;
120
- initial-value: oklch(88% 0 0);
40
+ initial-value: oklch(90% 0 0);
121
41
  }
122
42
 
123
- @property --color-border-strong {
124
- syntax: '<color>';
125
- inherits: true;
126
- initial-value: oklch(64% 0 0);
127
- }
128
-
129
- @property --color-border-focus {
130
- syntax: '<color>';
131
- inherits: true;
132
- initial-value: oklch(55% 0.22 250);
133
- }
@@ -1,31 +1,18 @@
1
1
  /**
2
2
  * tokens/registered/dimensions.css
3
3
  *
4
- * Houdini @property registrations for animatable dimension/spacing tokens.
5
- * This permits smooth, type-checked transitions on spacing and layout.
6
- * Source: doc 26 §5
4
+ * Houdini @property registrations for animatable transition tokens.
7
5
  */
8
6
 
9
- @property --space-4 {
10
- syntax: '<length>';
11
- inherits: true;
12
- initial-value: 16px;
13
- }
14
-
15
- @property --radius-md {
16
- syntax: '<length>';
7
+ @property --transition-duration {
8
+ syntax: '<time>';
17
9
  inherits: true;
18
- initial-value: 6px;
10
+ initial-value: 240ms;
19
11
  }
20
12
 
21
- @property --font-size-base {
13
+ @property --transition-offset {
22
14
  syntax: '<length>';
23
15
  inherits: true;
24
- initial-value: 16px;
16
+ initial-value: 30px;
25
17
  }
26
18
 
27
- @property --duration-normal {
28
- syntax: '<time>';
29
- inherits: true;
30
- initial-value: 200ms;
31
- }
@@ -2,50 +2,22 @@
2
2
  * tokens/semantic/contrast.css
3
3
  *
4
4
  * WCAG AAA compliant high-contrast semantic token overrides.
5
- * Enhances readability for visually impaired users.
6
- * Source: doc 26 §3, library2.md §Phase 1-B
7
5
  */
8
6
 
9
7
  [data-theme="high-contrast"] {
10
- /* Surfaces */
11
- --color-surface-page: var(--color-neutral-0);
12
- --color-surface-card: var(--color-neutral-0);
13
- --color-surface-elevated: var(--color-neutral-0);
14
- --color-surface-inverse: var(--color-neutral-1000);
8
+ --color-surface-page: var(--color-white);
9
+ --color-surface-elevated: var(--color-white);
10
+ --color-content-primary: var(--color-black);
11
+ --color-content-secondary: var(--color-black);
12
+ --color-interactive: var(--color-black);
13
+ --color-border-default: var(--color-black);
15
14
 
16
- /* Content */
17
- --color-content-primary: var(--color-neutral-1000);
18
- --color-content-secondary: var(--color-neutral-900);
19
- --color-content-disabled: var(--color-neutral-700);
20
- --color-content-inverse: var(--color-neutral-0);
21
- --color-content-link: var(--color-brand-900);
22
-
23
- /* Interactive Elements */
24
- --color-interactive: var(--color-brand-900);
25
- --color-interactive-hover: var(--color-neutral-1000);
26
- --color-interactive-active: var(--color-neutral-1000);
27
- --color-interactive-disabled: var(--color-neutral-600);
28
-
29
- /* Borders */
30
- --color-border-default: var(--color-neutral-1000);
31
- --color-border-strong: var(--color-neutral-1000);
32
- --color-border-focus: var(--color-brand-900);
33
-
34
- /* Automatic theme morph — same timing as light theme */
35
15
  transition:
36
16
  --color-surface-page 220ms var(--ease-out),
37
- --color-surface-card 220ms var(--ease-out),
38
17
  --color-surface-elevated 220ms var(--ease-out),
39
- --color-surface-inverse 220ms var(--ease-out),
40
18
  --color-content-primary 180ms var(--ease-out),
41
19
  --color-content-secondary 180ms var(--ease-out),
42
- --color-content-disabled 180ms var(--ease-out),
43
- --color-content-inverse 180ms var(--ease-out),
44
- --color-content-link 180ms var(--ease-out),
45
20
  --color-interactive 180ms var(--ease-out),
46
- --color-interactive-hover 180ms var(--ease-out),
47
- --color-interactive-active 180ms var(--ease-out),
48
- --color-border-default 180ms var(--ease-out),
49
- --color-border-strong 180ms var(--ease-out),
50
- --color-border-focus 180ms var(--ease-out);
21
+ --color-border-default 180ms var(--ease-out);
51
22
  }
23
+
@@ -5,57 +5,22 @@
5
5
  */
6
6
 
7
7
  [data-theme="dark"] {
8
- /* Surfaces */
9
- --background: var(--gray-950);
10
- --background-elevated: var(--gray-900);
11
- --background-inverse: var(--gray-50);
12
-
13
- /* Content (Text & Icons) */
14
- --foreground: var(--gray-50);
15
- --foreground-muted: var(--gray-400);
16
- --foreground-disabled: var(--gray-600);
17
- --foreground-inverse: var(--gray-900);
18
- --foreground-link: var(--brand-300);
19
-
20
- /* Interactive Elements */
21
- --primary: var(--brand-400);
22
- --primary-hover: var(--brand-300);
23
- --primary-active: var(--brand-200);
24
- --primary-focus: var(--brand-400);
25
- --primary-disabled: var(--gray-700);
26
- --primary-foreground: var(--gray-0);
27
-
28
- /* Borders */
29
- --border: var(--gray-800);
30
- --border-strong: var(--gray-600);
31
- --border-focus: var(--brand-400);
8
+ --color-surface-page: var(--gray-900);
9
+ --color-surface-elevated: var(--gray-800);
10
+ --color-content-primary: var(--color-white);
11
+ --color-content-secondary:var(--gray-100);
12
+ --color-interactive: var(--brand);
13
+ --color-border-default: var(--gray-800);
32
14
  }
33
15
 
34
16
  @media (prefers-color-scheme: dark) {
35
17
  :root:not([data-theme="light"]) {
36
- /* Surfaces */
37
- --background: var(--gray-950);
38
- --background-elevated: var(--gray-900);
39
- --background-inverse: var(--gray-50);
40
-
41
- /* Content (Text & Icons) */
42
- --foreground: var(--gray-50);
43
- --foreground-muted: var(--gray-400);
44
- --foreground-disabled: var(--gray-600);
45
- --foreground-inverse: var(--gray-900);
46
- --foreground-link: var(--brand-300);
47
-
48
- /* Interactive Elements */
49
- --primary: var(--brand-400);
50
- --primary-hover: var(--brand-300);
51
- --primary-active: var(--brand-200);
52
- --primary-focus: var(--brand-400);
53
- --primary-disabled: var(--gray-700);
54
- --primary-foreground: var(--gray-0);
55
-
56
- /* Borders */
57
- --border: var(--gray-800);
58
- --border-strong: var(--gray-600);
59
- --border-focus: var(--brand-400);
18
+ --color-surface-page: var(--gray-900);
19
+ --color-surface-elevated: var(--gray-800);
20
+ --color-content-primary: var(--color-white);
21
+ --color-content-secondary:var(--gray-100);
22
+ --color-interactive: var(--brand);
23
+ --color-border-default: var(--gray-800);
60
24
  }
61
25
  }
26
+
@@ -5,53 +5,21 @@
5
5
  */
6
6
 
7
7
  :root {
8
- /* Surfaces */
9
- --background: var(--gray-50);
10
- --background-elevated: var(--gray-0);
11
- --background-inverse: var(--gray-900);
12
-
13
- /* Content (Text & Icons) */
14
- --foreground: var(--gray-900);
15
- --foreground-muted: var(--gray-600);
16
- --foreground-disabled: var(--gray-400);
17
- --foreground-inverse: var(--gray-50);
18
- --foreground-link: var(--brand-600);
19
-
20
- /* Interactive Elements */
21
- --primary: var(--brand-500);
22
- --primary-hover: var(--brand-600);
23
- --primary-active: var(--brand-700);
24
- --primary-focus: var(--brand-500);
25
- --primary-disabled: var(--gray-300);
26
- --primary-foreground: var(--gray-0);
27
-
28
- /* Feedback Semantics */
29
- --success: var(--success-500);
30
- --warn: var(--warn-500);
31
- --error: var(--error-500);
32
- --info: var(--info-500);
33
-
34
- /* Borders */
35
- --border: var(--gray-200);
36
- --border-strong: var(--gray-400);
37
- --border-focus: var(--brand-500);
8
+ --color-surface-page: var(--color-white);
9
+ --color-surface-elevated: var(--color-white);
10
+ --color-content-primary: var(--gray-900);
11
+ --color-content-secondary:var(--gray-800);
12
+ --color-interactive: var(--brand);
13
+ --color-border-default: var(--gray-200);
38
14
 
39
15
  /* Automatic theme morph configuration */
40
16
  transition:
41
- --background 220ms var(--ease-out),
42
- --background-elevated 220ms var(--ease-out),
43
- --background-inverse 220ms var(--ease-out),
44
- --foreground 180ms var(--ease-out),
45
- --foreground-muted 180ms var(--ease-out),
46
- --foreground-disabled 180ms var(--ease-out),
47
- --foreground-inverse 180ms var(--ease-out),
48
- --foreground-link 180ms var(--ease-out),
49
- --primary 180ms var(--ease-out),
50
- --primary-hover 180ms var(--ease-out),
51
- --primary-active 180ms var(--ease-out),
52
- --border 180ms var(--ease-out),
53
- --border-strong 180ms var(--ease-out),
54
- --border-focus 180ms var(--ease-out);
17
+ --color-surface-page 220ms var(--ease-out),
18
+ --color-surface-elevated 220ms var(--ease-out),
19
+ --color-content-primary 180ms var(--ease-out),
20
+ --color-content-secondary 180ms var(--ease-out),
21
+ --color-interactive 180ms var(--ease-out),
22
+ --color-border-default 180ms var(--ease-out);
55
23
  }
56
24
 
57
25
  @media (prefers-reduced-motion: reduce) {
@@ -59,3 +27,4 @@
59
27
  transition: none !important;
60
28
  }
61
29
  }
30
+
@@ -1,27 +1,32 @@
1
1
  /**
2
2
  * tokens/semantic/transitions.css
3
3
  *
4
- * View Transition pseudo-element theming.
5
- * Connects the browser's CSS View Transitions API to the semantic token system.
4
+ * View Transition pseudo-element mapping and layout swap animations.
6
5
  */
7
6
 
8
7
  :root {
9
- /* Backdrop behind old and new page snapshots during a transition */
10
- --transition-bg: var(--color-surface-page);
11
-
12
- /* Timing tokens used by JS when calling startViewTransition */
13
8
  --transition-duration: var(--duration-normal);
14
9
  --transition-easing: var(--ease-out);
15
-
16
- /* Directional modifiers pushed pages feel different from popped pages */
17
- --transition-push: var(--ease-out);
18
- --transition-pop: var(--ease-in);
10
+ --transition-push: cubic-bezier(0.1, 0.9, 0.2, 1);
11
+ --transition-pop: cubic-bezier(0.9, 0.1, 1, 0.2);
19
12
  --transition-replace: var(--ease-in-out);
13
+ --transition-offset: 30px;
14
+ --transition-bg: var(--color-surface-page);
20
15
  }
21
16
 
22
- ::view-transition-old(root),
17
+ ::view-transition-old(root) {
18
+ animation: 90ms ease-in both fade-out;
19
+ }
23
20
  ::view-transition-new(root) {
24
- background: var(--transition-bg);
21
+ animation: var(--transition-duration) var(--transition-easing) both slide-in;
22
+ }
23
+
24
+ @keyframes fade-out {
25
+ to { opacity: 0; }
26
+ }
27
+ @keyframes slide-in {
28
+ from { transform: translateY(var(--transition-offset)); }
29
+ to { transform: translateY(0); }
25
30
  }
26
31
 
27
32
  @media (prefers-reduced-motion: reduce) {
@@ -29,4 +34,9 @@
29
34
  --transition-duration: 0ms;
30
35
  --transition-easing: linear;
31
36
  }
37
+ ::view-transition-old(root),
38
+ ::view-transition-new(root) {
39
+ animation: none !important;
40
+ }
32
41
  }
42
+