@ds-mo/tokens 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,165 @@
1
+ /* AUTO-GENERATED. See scripts/generate-dimension-tokens.mjs */
2
+ /* Source: src/json/dimensions/dimensions.tokens.json */
3
+
4
+ :root {
5
+ /* Base — override --dimension-base to scale the entire dimension system */
6
+ --dimension-base: 8px;
7
+ --dimension-space-base: var(--dimension-base);
8
+ --dimension-radius-base: var(--dimension-base);
9
+ --dimension-size-base: var(--dimension-base);
10
+ --dimension-stroke-width-base: var(--dimension-base);
11
+
12
+ /* Spacing — calc() relative to --dimension-space-base */
13
+ --dimension-space-100: var(--dimension-space-base);
14
+ --dimension-space-125: calc(var(--dimension-space-base) * 5 / 4);
15
+ --dimension-space-150: calc(var(--dimension-space-base) * 3 / 2);
16
+ --dimension-space-175: calc(var(--dimension-space-base) * 7 / 4);
17
+ --dimension-space-200: calc(var(--dimension-space-base) * 2);
18
+ --dimension-space-250: calc(var(--dimension-space-base) * 5 / 2);
19
+ --dimension-space-300: calc(var(--dimension-space-base) * 3);
20
+ --dimension-space-400: calc(var(--dimension-space-base) * 4);
21
+ --dimension-space-600: calc(var(--dimension-space-base) * 6);
22
+ --dimension-space-800: calc(var(--dimension-space-base) * 8);
23
+ --dimension-space-000: 0;
24
+ --dimension-space-012: calc(var(--dimension-space-base) / 8);
25
+ --dimension-space-025: calc(var(--dimension-space-base) / 4);
26
+ --dimension-space-050: calc(var(--dimension-space-base) / 2);
27
+ --dimension-space-075: calc(var(--dimension-space-base) * 3 / 4);
28
+ --dimension-space-n012: calc(var(--dimension-space-base) * -1 / 8);
29
+ --dimension-space-n025: calc(var(--dimension-space-base) * -1 / 4);
30
+ --dimension-space-n050: calc(var(--dimension-space-base) * -1 / 2);
31
+ --dimension-space-n075: calc(var(--dimension-space-base) * -3 / 4);
32
+ --dimension-space-n100: calc(var(--dimension-space-base) * -1);
33
+ --dimension-space-n125: calc(var(--dimension-space-base) * -5 / 4);
34
+ --dimension-space-n150: calc(var(--dimension-space-base) * -3 / 2);
35
+ --dimension-space-n175: calc(var(--dimension-space-base) * -7 / 4);
36
+ --dimension-space-n200: calc(var(--dimension-space-base) * -2);
37
+ --dimension-space-n250: calc(var(--dimension-space-base) * -5 / 2);
38
+ --dimension-space-n300: calc(var(--dimension-space-base) * -3);
39
+ --dimension-space-n400: calc(var(--dimension-space-base) * -4);
40
+ --dimension-space-n600: calc(var(--dimension-space-base) * -6);
41
+ --dimension-space-n800: calc(var(--dimension-space-base) * -8);
42
+
43
+ /* Radius — calc() relative to --dimension-radius-base */
44
+ --dimension-radius-100: var(--dimension-radius-base);
45
+ --dimension-radius-125: calc(var(--dimension-radius-base) * 5 / 4);
46
+ --dimension-radius-150: calc(var(--dimension-radius-base) * 3 / 2);
47
+ --dimension-radius-175: calc(var(--dimension-radius-base) * 7 / 4);
48
+ --dimension-radius-200: calc(var(--dimension-radius-base) * 2);
49
+ --dimension-radius-250: calc(var(--dimension-radius-base) * 5 / 2);
50
+ --dimension-radius-275: calc(var(--dimension-radius-base) * 11 / 4);
51
+ --dimension-radius-300: calc(var(--dimension-radius-base) * 3);
52
+ --dimension-radius-400: calc(var(--dimension-radius-base) * 4);
53
+ --dimension-radius-600: calc(var(--dimension-radius-base) * 6);
54
+ --dimension-radius-000: 0;
55
+ --dimension-radius-012: calc(var(--dimension-radius-base) / 8);
56
+ --dimension-radius-025: calc(var(--dimension-radius-base) / 4);
57
+ --dimension-radius-037: calc(var(--dimension-radius-base) * 3 / 8);
58
+ --dimension-radius-050: calc(var(--dimension-radius-base) / 2);
59
+ --dimension-radius-075: calc(var(--dimension-radius-base) * 3 / 4);
60
+ --dimension-radius-half: 9999px;
61
+
62
+ /* Stroke widths — calc() relative to --dimension-stroke-width-base */
63
+ --dimension-stroke-width-012: calc(var(--dimension-stroke-width-base) / 8);
64
+ --dimension-stroke-width-015: calc(var(--dimension-stroke-width-base) * 5 / 32);
65
+ --dimension-stroke-width-018: calc(var(--dimension-stroke-width-base) * 3 / 16);
66
+ --dimension-stroke-width-025: calc(var(--dimension-stroke-width-base) / 4);
67
+ --dimension-stroke-width-037: calc(var(--dimension-stroke-width-base) * 3 / 8);
68
+ --dimension-stroke-width-050: calc(var(--dimension-stroke-width-base) / 2);
69
+
70
+ /* Size — element width/height, calc() relative to --dimension-size-base */
71
+ --dimension-size-100: var(--dimension-size-base);
72
+ --dimension-size-150: calc(var(--dimension-size-base) * 3 / 2);
73
+ --dimension-size-200: calc(var(--dimension-size-base) * 2);
74
+ --dimension-size-250: calc(var(--dimension-size-base) * 5 / 2);
75
+ --dimension-size-300: calc(var(--dimension-size-base) * 3);
76
+ --dimension-size-400: calc(var(--dimension-size-base) * 4);
77
+ --dimension-size-500: calc(var(--dimension-size-base) * 5);
78
+ --dimension-size-600: calc(var(--dimension-size-base) * 6);
79
+ --dimension-size-800: calc(var(--dimension-size-base) * 8);
80
+ --dimension-size-000: 0;
81
+ --dimension-size-050: calc(var(--dimension-size-base) / 2);
82
+
83
+ /* Iconography — semantic icon size aliases, calc() relative to --dimension-size-base */
84
+ --dimension-iconography-xs: calc(var(--dimension-size-base) * 3 / 2);
85
+ --dimension-iconography-sm: calc(var(--dimension-size-base) * 2);
86
+ --dimension-iconography-md: calc(var(--dimension-size-base) * 5 / 2);
87
+ --dimension-iconography-lg: calc(var(--dimension-size-base) * 3);
88
+ --dimension-iconography-xl: calc(var(--dimension-size-base) * 4);
89
+ --dimension-iconography-2xl: calc(var(--dimension-size-base) * 6);
90
+ --dimension-iconography-3xl: calc(var(--dimension-size-base) * 8);
91
+
92
+ /* Card widths */
93
+ --dimension-card-width-sm: 400px;
94
+ --dimension-card-width-md: 600px;
95
+ --dimension-card-width-lg: 800px;
96
+
97
+ /* Modal widths */
98
+ --dimension-modal-width-sm: 400px;
99
+ --dimension-modal-width-md: 600px;
100
+ --dimension-modal-width-lg: 800px;
101
+
102
+ /* Form widths */
103
+ --dimension-form-width-sm: 400px;
104
+ --dimension-form-width-md: 600px;
105
+ --dimension-form-width-lg: 800px;
106
+
107
+ /* Table column widths */
108
+ --dimension-table-column-width-xs: 100px;
109
+ --dimension-table-column-width-sm: 200px;
110
+ --dimension-table-column-width-md: 300px;
111
+ --dimension-table-column-width-lg: 400px;
112
+ --dimension-table-column-width-xl: 500px;
113
+
114
+ /* Menu widths */
115
+ --dimension-menu-width-sm: 200px;
116
+ --dimension-menu-width-md: 400px;
117
+ --dimension-menu-width-lg: 600px;
118
+
119
+ /* Tooltip widths */
120
+ --dimension-tooltip-width-sm: 200px;
121
+ --dimension-tooltip-width-md: 400px;
122
+ --dimension-tooltip-width-lg: 600px;
123
+
124
+ /* Panel widths */
125
+ --dimension-panel-width-xs: 200px;
126
+ --dimension-panel-width-sm: 300px;
127
+ --dimension-panel-width-md: 400px;
128
+ --dimension-panel-width-lg: 500px;
129
+ --dimension-panel-width-xl: 600px;
130
+ --dimension-panel-width-fill: 100%;
131
+
132
+ /* Offset — for transforms and background-position, calc() relative to --dimension-space-base */
133
+ --dimension-offset-100: var(--dimension-space-base);
134
+ --dimension-offset-125: calc(var(--dimension-space-base) * 5 / 4);
135
+ --dimension-offset-150: calc(var(--dimension-space-base) * 3 / 2);
136
+ --dimension-offset-175: calc(var(--dimension-space-base) * 7 / 4);
137
+ --dimension-offset-200: calc(var(--dimension-space-base) * 2);
138
+ --dimension-offset-250: calc(var(--dimension-space-base) * 5 / 2);
139
+ --dimension-offset-000: 0;
140
+ --dimension-offset-025: calc(var(--dimension-space-base) / 4);
141
+ --dimension-offset-050: calc(var(--dimension-space-base) / 2);
142
+ --dimension-offset-075: calc(var(--dimension-space-base) * 3 / 4);
143
+ --dimension-offset-n025: calc(var(--dimension-space-base) * -1 / 4);
144
+ --dimension-offset-n050: calc(var(--dimension-space-base) * -1 / 2);
145
+ --dimension-offset-n075: calc(var(--dimension-space-base) * -3 / 4);
146
+ --dimension-offset-n100: calc(var(--dimension-space-base) * -1);
147
+ --dimension-offset-n125: calc(var(--dimension-space-base) * -5 / 4);
148
+ --dimension-offset-n150: calc(var(--dimension-space-base) * -3 / 2);
149
+ --dimension-offset-n175: calc(var(--dimension-space-base) * -7 / 4);
150
+ --dimension-offset-n200: calc(var(--dimension-space-base) * -2);
151
+ --dimension-offset-n250: calc(var(--dimension-space-base) * -5 / 2);
152
+
153
+ /* Scale — unitless multipliers for transform: scale() */
154
+ --dimension-scale-100: 1;
155
+ --dimension-scale-subtle: 0.99;
156
+
157
+ /* Z-index layers */
158
+ --dimension-z-index-base: 0;
159
+ --dimension-z-index-raised: 50;
160
+ --dimension-z-index-overlay: 250;
161
+ --dimension-z-index-modal: 450;
162
+ --dimension-z-index-floating: 500;
163
+ --dimension-z-index-tooltip: 750;
164
+
165
+ }
@@ -0,0 +1,241 @@
1
+ /* AUTO-GENERATED + HAND-AUTHORED. See scripts/generate-effects-tokens.mjs */
2
+ /* Generated section: from src/json/effects/effects.tokens.json */
3
+
4
+ :root {
5
+ /* Blur */
6
+ --effect-blur-sm: 8px;
7
+ --effect-blur-md: 16px;
8
+ --effect-blur-lg: 32px;
9
+
10
+ /* Animation durations */
11
+ --effect-animation-duration-instant: 0ms;
12
+ --effect-animation-duration-short-1: 50ms;
13
+ --effect-animation-duration-short-2: 100ms;
14
+ --effect-animation-duration-short-3: 200ms;
15
+ --effect-animation-duration-medium-1: 300ms;
16
+ --effect-animation-duration-medium-2: 400ms;
17
+ --effect-animation-duration-medium-3: 500ms;
18
+ --effect-animation-duration-long-1: 750ms;
19
+ --effect-animation-duration-long-2: 1000ms;
20
+ --effect-animation-duration-long-3: 2000ms;
21
+
22
+ /* Animation delays */
23
+ --effect-animation-delay-instant: 0ms;
24
+ --effect-animation-delay-short-1: 200ms;
25
+ --effect-animation-delay-short-2: 300ms;
26
+ --effect-animation-delay-short-3: 400ms;
27
+ --effect-animation-delay-medium-1: 500ms;
28
+ --effect-animation-delay-medium-2: 750ms;
29
+ --effect-animation-delay-medium-3: 1000ms;
30
+ --effect-animation-delay-long-1: 2000ms;
31
+ --effect-animation-delay-long-2: 4000ms;
32
+ --effect-animation-delay-long-3: 6000ms;
33
+
34
+ /* Animation easing curves */
35
+ --effect-animation-easing-ease-in: cubic-bezier(0.47,0,0.75,0.72);
36
+ --effect-animation-easing-ease-out: cubic-bezier(0.17,0.84,0.44,1);
37
+ --effect-animation-easing-ease-in-out: cubic-bezier(0.77,0,0.18,1);
38
+ --effect-animation-easing-ease-in-out-back: cubic-bezier(0.22, 0.61, 0.01, 1.03);
39
+
40
+
41
+ /* ─────────────────────────────────────────────────────────────────────────
42
+ HAND-AUTHORED — Motion presets and transition shorthands.
43
+ These compose duration + easing together for convenience in components.
44
+ Not representable as Figma variables (they combine multiple primitives).
45
+ ───────────────────────────────────────────────────────────────────────── */
46
+
47
+ /* Motion presets — use like: transition: color var(--effect-motion-short-2);
48
+ Duration names match Figma: short-1/2/3, medium-1/2/3, long-1/2/3 */
49
+ --effect-motion-instant: var(--effect-animation-duration-instant) var(--effect-animation-easing-ease-in-out);
50
+ --effect-motion-short-1: var(--effect-animation-duration-short-1) var(--effect-animation-easing-ease-in-out);
51
+ --effect-motion-short-2: var(--effect-animation-duration-short-2) var(--effect-animation-easing-ease-in-out);
52
+ --effect-motion-short-3: var(--effect-animation-duration-short-3) var(--effect-animation-easing-ease-in-out);
53
+ --effect-motion-medium-1: var(--effect-animation-duration-medium-1) var(--effect-animation-easing-ease-in-out);
54
+ --effect-motion-medium-2: var(--effect-animation-duration-medium-2) var(--effect-animation-easing-ease-in-out);
55
+ --effect-motion-medium-3: var(--effect-animation-duration-medium-3) var(--effect-animation-easing-ease-in-out);
56
+ --effect-motion-long-1: var(--effect-animation-duration-long-1) var(--effect-animation-easing-ease-in-out);
57
+ --effect-motion-long-2: var(--effect-animation-duration-long-2) var(--effect-animation-easing-ease-in-out);
58
+ --effect-motion-long-3: var(--effect-animation-duration-long-3) var(--effect-animation-easing-ease-in-out);
59
+
60
+ /* Interaction transition shorthands — names match Figma duration scale */
61
+ --effect-transition-interaction-background-instant: background-color var(--effect-motion-instant);
62
+ --effect-transition-interaction-background-short-1: background-color var(--effect-motion-short-1);
63
+ --effect-transition-interaction-background-short-2: background-color var(--effect-motion-short-2);
64
+ --effect-transition-interaction-background-short-3: background-color var(--effect-motion-short-3);
65
+ --effect-transition-interaction-background-medium-1: background-color var(--effect-motion-medium-1);
66
+ --effect-transition-interaction-background-medium-2: background-color var(--effect-motion-medium-2);
67
+ --effect-transition-interaction-background-medium-3: background-color var(--effect-motion-medium-3);
68
+ --effect-transition-interaction-background-long-1: background-color var(--effect-motion-long-1);
69
+ --effect-transition-interaction-background-long-2: background-color var(--effect-motion-long-2);
70
+ --effect-transition-interaction-background-long-3: background-color var(--effect-motion-long-3);
71
+
72
+ --effect-transition-interaction-color-instant: color var(--effect-motion-instant);
73
+ --effect-transition-interaction-color-short-1: color var(--effect-motion-short-1);
74
+ --effect-transition-interaction-color-short-2: color var(--effect-motion-short-2);
75
+ --effect-transition-interaction-color-short-3: color var(--effect-motion-short-3);
76
+ --effect-transition-interaction-color-medium-1: color var(--effect-motion-medium-1);
77
+ --effect-transition-interaction-color-medium-2: color var(--effect-motion-medium-2);
78
+ --effect-transition-interaction-color-medium-3: color var(--effect-motion-medium-3);
79
+ --effect-transition-interaction-color-long-1: color var(--effect-motion-long-1);
80
+ --effect-transition-interaction-color-long-2: color var(--effect-motion-long-2);
81
+ --effect-transition-interaction-color-long-3: color var(--effect-motion-long-3);
82
+
83
+ --effect-transition-interaction-opacity-instant: opacity var(--effect-motion-instant);
84
+ --effect-transition-interaction-opacity-short-1: opacity var(--effect-motion-short-1);
85
+ --effect-transition-interaction-opacity-short-2: opacity var(--effect-motion-short-2);
86
+ --effect-transition-interaction-opacity-short-3: opacity var(--effect-motion-short-3);
87
+ --effect-transition-interaction-opacity-medium-1: opacity var(--effect-motion-medium-1);
88
+ --effect-transition-interaction-opacity-medium-2: opacity var(--effect-motion-medium-2);
89
+ --effect-transition-interaction-opacity-medium-3: opacity var(--effect-motion-medium-3);
90
+ --effect-transition-interaction-opacity-long-1: opacity var(--effect-motion-long-1);
91
+ --effect-transition-interaction-opacity-long-2: opacity var(--effect-motion-long-2);
92
+ --effect-transition-interaction-opacity-long-3: opacity var(--effect-motion-long-3);
93
+
94
+ --effect-transition-interaction-border-color-instant: border-color var(--effect-motion-instant);
95
+ --effect-transition-interaction-border-color-short-1: border-color var(--effect-motion-short-1);
96
+ --effect-transition-interaction-border-color-short-2: border-color var(--effect-motion-short-2);
97
+ --effect-transition-interaction-border-color-short-3: border-color var(--effect-motion-short-3);
98
+ --effect-transition-interaction-border-color-medium-1: border-color var(--effect-motion-medium-1);
99
+ --effect-transition-interaction-border-color-medium-2: border-color var(--effect-motion-medium-2);
100
+ --effect-transition-interaction-border-color-medium-3: border-color var(--effect-motion-medium-3);
101
+ --effect-transition-interaction-border-color-long-1: border-color var(--effect-motion-long-1);
102
+ --effect-transition-interaction-border-color-long-2: border-color var(--effect-motion-long-2);
103
+ --effect-transition-interaction-border-color-long-3: border-color var(--effect-motion-long-3);
104
+
105
+ --effect-transition-interaction-transform-instant: transform var(--effect-motion-instant);
106
+ --effect-transition-interaction-transform-short-1: transform var(--effect-motion-short-1);
107
+ --effect-transition-interaction-transform-short-2: transform var(--effect-motion-short-2);
108
+ --effect-transition-interaction-transform-short-3: transform var(--effect-motion-short-3);
109
+ --effect-transition-interaction-transform-medium-1: transform var(--effect-motion-medium-1);
110
+ --effect-transition-interaction-transform-medium-2: transform var(--effect-motion-medium-2);
111
+ --effect-transition-interaction-transform-medium-3: transform var(--effect-motion-medium-3);
112
+ --effect-transition-interaction-transform-long-1: transform var(--effect-motion-long-1);
113
+ --effect-transition-interaction-transform-long-2: transform var(--effect-motion-long-2);
114
+ --effect-transition-interaction-transform-long-3: transform var(--effect-motion-long-3);
115
+
116
+ /* ─────────────────────────────────────────────────────────────────────────
117
+ HAND-AUTHORED — Elevation tokens. Source: Figma App Styles — Variables.
118
+ Multi-layer box-shadows cannot be expressed as Figma number variables.
119
+
120
+ Three tokens per elevation level:
121
+ --effect-shadow-{name} outset layers only → apply via box-shadow on the main element
122
+ --effect-highlight-{name} inset layers only → apply via box-shadow on an ::after overlay
123
+ --effect-elevation-{name} combined convenience → only safe when element has no overflow:clip
124
+
125
+ The shadow/highlight split exists because inset box-shadows are clipped by overflow:hidden.
126
+ Components that need overflow:clip (e.g. cards with rounded corners + clipped content)
127
+ must apply shadow on the root and highlight on a full-size ::after positioned inside.
128
+ ───────────────────────────────────────────────────────────────────────── */
129
+
130
+ /* ── elevated-none ─────────────────────────────────────────────────────── */
131
+ --effect-shadow-elevated-none: none;
132
+ --effect-highlight-elevated-none: none;
133
+ --effect-elevation-elevated-none: none;
134
+
135
+ /* ── elevated-sm ───────────────────────────────────────────────────────── */
136
+ --effect-shadow-elevated-sm:
137
+ 0px 2px 4px -2px var(--color-elevation-shadow),
138
+ 0px 0px 0px 1px var(--color-elevation-shadow);
139
+ --effect-highlight-elevated-sm:
140
+ inset 0px 4px 2px -4px var(--color-elevation-highlight),
141
+ inset 0px 0px 0px 1px var(--color-elevation-highlight);
142
+ --effect-elevation-elevated-sm:
143
+ var(--effect-shadow-elevated-sm),
144
+ var(--effect-highlight-elevated-sm);
145
+
146
+ /* ── elevated-md ───────────────────────────────────────────────────────── */
147
+ --effect-shadow-elevated-md:
148
+ 0px 4px 8px -2px var(--color-elevation-shadow),
149
+ 0px 0px 0px 1px var(--color-elevation-shadow);
150
+ --effect-highlight-elevated-md:
151
+ inset 0px 4px 2px -4px var(--color-elevation-highlight),
152
+ inset 0px 0px 0px 1px var(--color-elevation-highlight);
153
+ --effect-elevation-elevated-md:
154
+ var(--effect-shadow-elevated-md),
155
+ var(--effect-highlight-elevated-md);
156
+
157
+ /* ── elevated-floating ─────────────────────────────────────────────────── */
158
+ --effect-shadow-elevated-floating:
159
+ 0px 8px 16px -4px var(--color-elevation-shadow),
160
+ 0px 0px 0px 1px var(--color-elevation-shadow);
161
+ --effect-highlight-elevated-floating:
162
+ inset 0px 4px 2px -4px var(--color-elevation-highlight),
163
+ inset 0px 0px 0px 1px var(--color-elevation-highlight);
164
+ --effect-elevation-elevated-floating:
165
+ var(--effect-shadow-elevated-floating),
166
+ var(--effect-highlight-elevated-floating);
167
+
168
+ /* ── depressed-sm ──────────────────────────────────────────────────────── */
169
+ /* Note: outset contains both shadow (top) and highlight (bottom rim) for depressed */
170
+ --effect-shadow-depressed-sm:
171
+ 0px -4px 2px -4px var(--color-elevation-shadow),
172
+ 0px 4px 2px -4px var(--color-elevation-highlight),
173
+ 0px 0px 0px 1px var(--color-elevation-highlight);
174
+ --effect-highlight-depressed-sm:
175
+ inset 0px 2px 4px -2px var(--color-elevation-shadow),
176
+ inset 0px 0px 0px 1px var(--color-elevation-shadow);
177
+ --effect-elevation-depressed-sm:
178
+ var(--effect-shadow-depressed-sm),
179
+ var(--effect-highlight-depressed-sm);
180
+
181
+ /* ── depressed-md ──────────────────────────────────────────────────────── */
182
+ --effect-shadow-depressed-md:
183
+ 0px -4px 2px -4px var(--color-elevation-shadow),
184
+ 0px 4px 2px -4px var(--color-elevation-highlight),
185
+ 0px 0px 0px 1px var(--color-elevation-highlight);
186
+ --effect-highlight-depressed-md:
187
+ inset 0px 4px 8px -4px var(--color-elevation-shadow),
188
+ inset 0px 0px 0px 1px var(--color-elevation-shadow);
189
+ --effect-elevation-depressed-md:
190
+ var(--effect-shadow-depressed-md),
191
+ var(--effect-highlight-depressed-md);
192
+
193
+ /* ── elevated-panel-top (shadow casts downward, attaches to bottom of viewport) ── */
194
+ --effect-shadow-elevated-panel-top:
195
+ 0px 4px 8px 0px var(--color-elevation-shadow),
196
+ 0px 0px 0px 1px var(--color-elevation-shadow);
197
+ --effect-highlight-elevated-panel-top:
198
+ inset 0px -4px 2px -4px var(--color-elevation-highlight),
199
+ inset 0px -1px 0px 0px var(--color-elevation-highlight);
200
+ --effect-elevation-elevated-panel-top:
201
+ var(--effect-shadow-elevated-panel-top),
202
+ var(--effect-highlight-elevated-panel-top);
203
+
204
+ /* ── elevated-panel-right (shadow casts leftward, panel attached to right edge) ── */
205
+ --effect-shadow-elevated-panel-right:
206
+ -4px 0px 8px -2px var(--color-elevation-shadow),
207
+ 0px 0px 0px 1px var(--color-elevation-shadow);
208
+ --effect-highlight-elevated-panel-right:
209
+ inset 4px 0px 2px -4px var(--color-elevation-highlight),
210
+ inset 1px 0px 0px 0px var(--color-elevation-highlight);
211
+ --effect-elevation-elevated-panel-right:
212
+ var(--effect-shadow-elevated-panel-right),
213
+ var(--effect-highlight-elevated-panel-right);
214
+
215
+ /* ── elevated-panel-bottom (shadow casts upward, attaches to top of viewport) ── */
216
+ --effect-shadow-elevated-panel-bottom:
217
+ 0px -4px 8px 0px var(--color-elevation-shadow),
218
+ 0px 0px 0px 1px var(--color-elevation-shadow);
219
+ --effect-highlight-elevated-panel-bottom:
220
+ inset 0px 4px 2px -4px var(--color-elevation-highlight),
221
+ inset 0px 1px 0px 0px var(--color-elevation-highlight);
222
+ --effect-elevation-elevated-panel-bottom:
223
+ var(--effect-shadow-elevated-panel-bottom),
224
+ var(--effect-highlight-elevated-panel-bottom);
225
+
226
+ /* ── elevated-panel-left (shadow casts rightward, panel attached to left edge) ── */
227
+ --effect-shadow-elevated-panel-left:
228
+ 4px 0px 8px -2px var(--color-elevation-shadow),
229
+ 0px 0px 0px 1px var(--color-elevation-shadow);
230
+ --effect-highlight-elevated-panel-left:
231
+ inset -4px 0px 2px -4px var(--color-elevation-highlight),
232
+ inset -1px 0px 0px 0px var(--color-elevation-highlight);
233
+ --effect-elevation-elevated-panel-left:
234
+ var(--effect-shadow-elevated-panel-left),
235
+ var(--effect-highlight-elevated-panel-left);
236
+
237
+ /* ── focus ring ────────────────────────────────────────────────────────── */
238
+ --effect-focus-ring:
239
+ 0 0 0 var(--dimension-space-025) transparent,
240
+ 0 0 0 calc(var(--dimension-space-025) + var(--dimension-stroke-width-025)) var(--color-foreground-medium-brand);
241
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * TokoMo — Global Styles
3
+ *
4
+ * Base styles that consuming apps should import alongside tokens.
5
+ * Includes font loading, color scheme, reduced-motion support,
6
+ * focus ring defaults, button press effects, and theme transitions.
7
+ *
8
+ * Usage:
9
+ * @import '@tokomo/tokens';
10
+ * @import '@tokomo/tokens/globals';
11
+ * @import '@tokomo/tokens/reset'; // optional
12
+ * @import '@tokomo/tokens/utilities'; // optional
13
+ */
14
+
15
+ /* Inter font — design system typeface */
16
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=block');
17
+
18
+ :root {
19
+ color-scheme: light;
20
+ }
21
+
22
+ /* Honor prefers-reduced-motion */
23
+ @media (prefers-reduced-motion: reduce) {
24
+ html,
25
+ body,
26
+ * {
27
+ animation-duration: 0.01ms !important;
28
+ animation-iteration-count: 1 !important;
29
+ transition-duration: 0.01ms !important;
30
+ scroll-behavior: auto !important;
31
+ }
32
+ }
33
+
34
+ html,
35
+ body {
36
+ height: 100%;
37
+ width: 100%;
38
+ margin: 0;
39
+ padding: 0;
40
+ font-family: 'Inter', sans-serif;
41
+ -webkit-font-smoothing: antialiased;
42
+ -moz-osx-font-smoothing: grayscale;
43
+ text-rendering: optimizeLegibility;
44
+ }
45
+
46
+ body {
47
+ color: var(--color-foreground-primary);
48
+ }
49
+
50
+ /* Global text selection styling */
51
+ *::selection {
52
+ background-color: var(--color-background-faint-brand);
53
+ color: var(--color-foreground-bold-brand);
54
+ }
55
+
56
+ *::-moz-selection {
57
+ background-color: var(--color-background-faint-brand);
58
+ color: var(--color-foreground-bold-brand);
59
+ }
60
+
61
+ /* Disable text selection for buttons and interactive elements */
62
+ button {
63
+ user-select: none;
64
+ -webkit-user-select: none;
65
+ -moz-user-select: none;
66
+ -ms-user-select: none;
67
+ }
68
+
69
+ /* Remove default browser focus outlines */
70
+ *:focus {
71
+ outline: none;
72
+ }
73
+
74
+ /* Suppress focus ring when focus came from a keyboard shortcut (not Tab) */
75
+ [data-focus-from-shortcut]:focus,
76
+ [data-focus-from-shortcut]:focus-visible {
77
+ outline: none !important;
78
+ }
79
+
80
+ /* Custom focus ring using outline with offset */
81
+ /* Creates: 2px gap (outline-offset) + 2px ring (outline-width) */
82
+ button:focus-visible,
83
+ a:focus-visible,
84
+ input:focus-visible,
85
+ textarea:focus-visible,
86
+ select:focus-visible,
87
+ [tabindex]:focus-visible {
88
+ outline: var(--dimension-stroke-width-025) solid var(--color-foreground-medium-brand);
89
+ outline-offset: var(--dimension-offset-025);
90
+ transition: outline var(--effect-motion-short-2);
91
+ }
92
+
93
+ @media (prefers-reduced-motion: reduce) {
94
+ button:focus-visible,
95
+ a:focus-visible,
96
+ input:focus-visible,
97
+ textarea:focus-visible,
98
+ select:focus-visible,
99
+ [tabindex]:focus-visible {
100
+ transition: none;
101
+ }
102
+ }
103
+
104
+ /* Disable color transitions during theme changes for instant updates */
105
+ html.theme-changing,
106
+ html.theme-changing *,
107
+ html.theme-changing *::before,
108
+ html.theme-changing *::after {
109
+ transition: none !important;
110
+ transition-duration: 0ms !important;
111
+ transition-delay: 0ms !important;
112
+ }