@orange-halo/tokens 2.0.0 → 2.2.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,512 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ :root {
6
+ --oh-grid-unit: 8px; /** 8px grid with 4px half-steps */
7
+ --oh-color-orange-50: #fff3e0;
8
+ --oh-color-orange-100: #ffe0b2;
9
+ --oh-color-orange-200: #ffcc80;
10
+ --oh-color-orange-300: #ffb74d;
11
+ --oh-color-orange-400: #ffa726;
12
+ --oh-color-orange-500: #ff9800;
13
+ --oh-color-orange-600: #fb8c00;
14
+ --oh-color-orange-700: #f57c00;
15
+ --oh-color-orange-800: #ef6c00;
16
+ --oh-color-orange-900: #c54300; /** Primary brand — 5.0:1 with white text, 4.7:1 on cream. Chosen for contrast: do not lighten. */
17
+ --oh-color-orange-950: #9e3500; /** Hover/active — 7.1:1 with white text, 6.6:1 on cream */
18
+ --oh-color-honey-50: #fefaee;
19
+ --oh-color-honey-100: #fdf3d4;
20
+ --oh-color-honey-200: #fbe7a8;
21
+ --oh-color-honey-300: #f8d56f;
22
+ --oh-color-honey-400: #e8a838; /** Signature honey */
23
+ --oh-color-honey-500: #d4922c;
24
+ --oh-color-honey-600: #b87a24;
25
+ --oh-color-honey-700: #8c5e1c; /** 5.3:1 on cream */
26
+ --oh-color-honey-800: #6b4815;
27
+ --oh-color-honey-900: #3d3529; /** Dark theme warning tint */
28
+ --oh-color-terracotta-50: #fbf5f0;
29
+ --oh-color-terracotta-100: #f5e8de;
30
+ --oh-color-terracotta-200: #e8cdbf;
31
+ --oh-color-terracotta-300: #d4a88f;
32
+ --oh-color-terracotta-400: #bf8060;
33
+ --oh-color-terracotta-500: #a0522d; /** Signature terracotta — WCAG AA (5.3:1) */
34
+ --oh-color-terracotta-600: #8b4726;
35
+ --oh-color-terracotta-700: #6f3920;
36
+ --oh-color-terracotta-800: #5a2f1a;
37
+ --oh-color-terracotta-900: #452414;
38
+ --oh-color-eucalyptus-50: #f0f6f6;
39
+ --oh-color-eucalyptus-100: #e0ebeb;
40
+ --oh-color-eucalyptus-200: #c2d7d7;
41
+ --oh-color-eucalyptus-300: #9ebebe;
42
+ --oh-color-eucalyptus-400: #7aa3a4;
43
+ --oh-color-eucalyptus-500: #5f8a8b; /** 3.6:1 on cream — UI and large text only */
44
+ --oh-color-eucalyptus-600: #4d7172;
45
+ --oh-color-eucalyptus-700: #3f5c5d; /** 6.8:1 on cream */
46
+ --oh-color-eucalyptus-800: #344a4b;
47
+ --oh-color-eucalyptus-900: #2a3c3d;
48
+ --oh-color-warm-cream: #faf7f2; /** Base background — warm off-white */
49
+ --oh-color-warm-linen: #f5f0e8; /** Raised surface */
50
+ --oh-color-warm-dawn: #fffbf5; /** Sunlit gradient — top */
51
+ --oh-color-warm-shell: #fdf6ee; /** Sunlit gradient — middle */
52
+ --oh-color-warm-biscuit: #f8efe4; /** Sunlit gradient — bottom */
53
+ --oh-color-warm-parchment: #ede8df; /** Inset surface */
54
+ --oh-color-warm-sand: #e2dcd2; /** Borders, dividers */
55
+ --oh-color-warm-dune: #c9c1b4; /** Decorative only — 1.7:1 on cream, never for control borders */
56
+ --oh-color-warm-stone: #a09080; /** Dark theme control borders — 4.9:1 on cocoa */
57
+ --oh-color-warm-taupe: #8a7a68; /** Dark theme borders — 3.7:1 on cocoa, 3.0:1 on walnut */
58
+ --oh-color-warm-driftwood: #6b5d4d; /** Secondary text — 6.0:1 on cream */
59
+ --oh-color-warm-bark: #52463a; /** Emphasis text — 8.6:1 on cream */
60
+ --oh-color-warm-hickory: #4a3f33; /** Dark theme hover and highlight surface */
61
+ --oh-color-warm-chestnut: #44382c; /** Dark theme sunlit surface */
62
+ --oh-color-warm-walnut: #3d3229; /** Primary text — 11.7:1 on cream. Dark theme raised surface */
63
+ --oh-color-warm-mocha: #352e28; /** Dark theme pressed and disabled surface */
64
+ --oh-color-warm-cocoa: #2a2420; /** Dark theme page background */
65
+ --oh-color-warm-espresso: #1f1a17; /** Dark theme inset surface */
66
+ --oh-color-green-50: #f0f7f1;
67
+ --oh-color-green-100: #d9edd9;
68
+ --oh-color-green-300: #7ab87c; /** Dark theme success — 6.5:1 with cocoa text */
69
+ --oh-color-green-500: #5a9a5c;
70
+ --oh-color-green-600: #4a8a4c; /** 3.9:1 on cream — icons and UI only, not text */
71
+ --oh-color-green-700: #3d7340; /** Success text — 5.3:1 on cream, 5.2:1 on green.50 */
72
+ --oh-color-green-900: #2a3629; /** Dark theme success tint */
73
+ --oh-color-red-50: #fdf4f3;
74
+ --oh-color-red-100: #f9e0dc;
75
+ --oh-color-red-300: #e08f8d; /** Dark theme error — 6.2:1 with cocoa text */
76
+ --oh-color-red-500: #c75450;
77
+ --oh-color-red-600: #b54540; /** 5.1:1 on cream */
78
+ --oh-color-red-700: #943836; /** Hover/active state */
79
+ --oh-color-red-900: #3d2a29; /** Dark theme error tint */
80
+ --oh-color-blue-50: #eef4f9;
81
+ --oh-color-blue-100: #d6e4f0;
82
+ --oh-color-blue-200: #a0b4c8;
83
+ --oh-color-blue-300: #7a9ab8;
84
+ --oh-color-blue-400: #5a82a8;
85
+ --oh-color-blue-500: #3d5a80; /** Signature accent — 7.1:1 with white text, 6.6:1 on cream */
86
+ --oh-color-blue-600: #354f70; /** Hover state */
87
+ --oh-color-blue-700: #2e4460; /** Active state */
88
+ --oh-color-blue-800: #253850;
89
+ --oh-color-white: #ffffff; /** Pure white for inputs/highlights */
90
+ --oh-color-surface-overlay: rgba(61, 50, 41, 0.4); /** Modal backdrop — warm */
91
+ --oh-color-surface-hover: #fff4e6; /** Warm hover tint */
92
+ --oh-color-surface-active-pressed: #f0ebe3; /** Active/pressed surface */
93
+ --oh-color-surface-sheen: rgba(255, 255, 255, 0.5); /** Light glaze at the top of card headers, fading to transparent */
94
+ --oh-color-surface-backdrop: rgba(61, 50, 41, 0.6); /** Modal backdrop — darker than surface.overlay so the dialog stands out */
95
+ --oh-color-border-brand: rgba(197, 67, 0, 0.25); /** Brand-tinted border */
96
+ --oh-color-border-brand-hover: rgba(197, 67, 0, 0.35); /** Brand-tinted border on hover. Decorative container edge — not a focus or control border */
97
+ --oh-color-border-divider: rgba(226, 213, 200, 0.6); /** Decorative divider inside a container, such as a card's header and footer */
98
+ --oh-font-family-sans: 'Bricolage Grotesque', 'General Sans', -apple-system, BlinkMacSystemFont, sans-serif;
99
+ --oh-font-family-display: 'Bricolage Grotesque', 'General Sans', sans-serif;
100
+ --oh-font-family-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
101
+ --oh-font-size-xs: 0.75rem; /** 12px */
102
+ --oh-font-size-base: 1rem; /** 16px */
103
+ --oh-font-size-lg: 1.25rem; /** 20px */
104
+ --oh-font-size-xl: 1.5rem; /** 24px */
105
+ --oh-font-size-2xl: 1.75rem; /** 28px */
106
+ --oh-font-size-3xl: 2rem; /** 32px */
107
+ --oh-font-size-4xl: 2.5rem; /** 40px */
108
+ --oh-font-size-5xl: 3rem; /** 48px */
109
+ --oh-font-weight-normal: 400;
110
+ --oh-font-weight-medium: 500;
111
+ --oh-font-weight-semibold: 600;
112
+ --oh-font-weight-bold: 700;
113
+ --oh-font-line-height-none: 1;
114
+ --oh-font-line-height-tight: 1.25;
115
+ --oh-font-line-height-snug: 1.35;
116
+ --oh-font-line-height-normal: 1.5;
117
+ --oh-font-line-height-relaxed: 1.65;
118
+ --oh-font-line-height-loose: 1.8;
119
+ --oh-font-letter-spacing-tighter: -0.02em;
120
+ --oh-font-letter-spacing-tight: -0.01em;
121
+ --oh-font-letter-spacing-normal: 0;
122
+ --oh-font-letter-spacing-wide: 0.01em;
123
+ --oh-font-letter-spacing-wider: 0.02em;
124
+ --oh-font-letter-spacing-widest: 0.05em; /** Uppercase labels: hero eyebrows, footer headings */
125
+ --oh-radius-none: 0;
126
+ --oh-radius-xs: 4px; /** Small details, chips */
127
+ --oh-radius-sm: 6px; /** Buttons, inputs */
128
+ --oh-radius-md: 10px; /** Cards, panels */
129
+ --oh-radius-lg: 14px; /** Modals, large containers */
130
+ --oh-radius-xl: 20px; /** Hero elements */
131
+ --oh-radius-full: 9999px; /** Avatars, pills */
132
+ --oh-shadow-none: none;
133
+ --oh-shadow-soft: 0 2px 8px rgba(61, 50, 41, 0.06), 0 1px 3px rgba(61, 50, 41, 0.08); /** Cards, raised elements */
134
+ --oh-shadow-medium: 0 4px 16px rgba(61, 50, 41, 0.08), 0 2px 6px rgba(61, 50, 41, 0.06); /** Dropdowns, popovers */
135
+ --oh-shadow-strong: 0 8px 24px rgba(61, 50, 41, 0.10), 0 4px 8px rgba(61, 50, 41, 0.06); /** Modals, dialogs */
136
+ --oh-shadow-glow: 0 0 0 3px rgba(197, 67, 0, 0.2), 0 0 12px rgba(197, 67, 0, 0.1); /** Focus ring — warm and friendly */
137
+ --oh-shadow-inset: inset 0 1px 3px rgba(61, 50, 41, 0.08); /** Inputs, wells */
138
+ --oh-shadow-chunky-primary: #e8c4a0; /** Warm peach for primary buttons */
139
+ --oh-shadow-chunky-secondary: #d4c4b0; /** Neutral tan for secondary/form elements */
140
+ --oh-shadow-chunky-accent: #a0b4c8; /** Blue offset shadow for accent buttons — decorative */
141
+ --oh-shadow-chunky-error: rgba(181, 69, 64, 0.3); /** Error state shadow */
142
+ --oh-shadow-chunky-driftwood: rgba(107, 93, 77, 0.15); /** Translucent driftwood, for offset shadows on cream */
143
+ --oh-shadow-chunky-driftwood-hover: rgba(107, 93, 77, 0.2); /** A step darker, for the lifted state */
144
+ --oh-shadow-chunky-driftwood-deep: rgba(107, 93, 77, 0.25); /** For dialogs, which sit above everything */
145
+ --oh-shadow-chunky-walnut: rgba(61, 50, 41, 0.15); /** Translucent walnut, for the inset shadow inside fields */
146
+ --oh-shadow-layered-flat: 0 1px 2px rgba(61, 50, 41, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.6);
147
+ --oh-shadow-layered-raised: 0 2px 6px rgba(61, 50, 41, 0.08), 0 6px 16px rgba(61, 50, 41, 0.05), inset 0 1px 0 rgba(255, 255, 255, 0.8);
148
+ --oh-shadow-layered-lifted: 0 4px 12px rgba(61, 50, 41, 0.1), 0 12px 28px rgba(61, 50, 41, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.9);
149
+ --oh-shadow-layered-pressed: 0 1px 3px rgba(61, 50, 41, 0.1), 0 3px 8px rgba(61, 50, 41, 0.06), inset 0 1px 2px rgba(61, 50, 41, 0.04);
150
+ --oh-shadow-layered-focused: 0 2px 6px rgba(61, 50, 41, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.8); /** Sits under the focus glow */
151
+ --oh-shadow-layered-sunlit: 0 2px 8px rgba(139, 69, 19, 0.08), 0 8px 24px rgba(139, 69, 19, 0.06), 0 0 20px rgba(197, 67, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.9);
152
+ --oh-shadow-layered-sunlit-lifted: 0 4px 12px rgba(139, 69, 19, 0.12), 0 12px 32px rgba(139, 69, 19, 0.08), 0 0 28px rgba(197, 67, 0, 0.06), inset 0 1px 0 rgba(255, 255, 255, 1);
153
+ --oh-shadow-layered-sunlit-focused: 0 2px 8px rgba(139, 69, 19, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.9); /** Sits under the focus glow */
154
+ --oh-gradient-warm: linear-gradient(135deg, #C54300 0%, #FF9800 100%); /** Brand emphasis */
155
+ --oh-gradient-nostalgic: linear-gradient(180deg, #F5F0E8 0%, #EDE8DF 100%); /** Subtle retro depth */
156
+ --oh-motion-duration-quick: 100ms; /** Micro-interactions (color shifts) */
157
+ --oh-motion-duration-snappy: 150ms; /** Button/input transitions */
158
+ --oh-motion-duration-gentle: 200ms; /** Standard interactions (hover, focus) */
159
+ --oh-motion-duration-relaxed: 300ms; /** Larger transitions (panels) */
160
+ --oh-motion-duration-slow: 400ms; /** Emphasis animations */
161
+ --oh-motion-easing-gentle: cubic-bezier(0.4, 0, 0.2, 1); /** Default — smooth and natural */
162
+ --oh-motion-easing-out: cubic-bezier(0, 0, 0.2, 1); /** Enters and reveals */
163
+ --oh-motion-easing-in: cubic-bezier(0.4, 0, 1, 1); /** Exits */
164
+ --oh-motion-easing-playful: cubic-bezier(0.34, 1.3, 0.64, 1); /** Celebrations — slight overshoot */
165
+ --oh-border-width-0: 0;
166
+ --oh-border-width-1: 1px;
167
+ --oh-border-width-2: 2px;
168
+ --oh-border-width-chunky: 2.5px; /** Signature chunky frame for controls and feedback */
169
+ --oh-spacing-0: 0;
170
+ --oh-spacing-1: 0.25rem; /** 4px */
171
+ --oh-spacing-2: 0.5rem; /** 8px */
172
+ --oh-spacing-3: 0.75rem; /** 12px */
173
+ --oh-spacing-4: 1rem; /** 16px */
174
+ --oh-spacing-5: 1.25rem; /** 20px */
175
+ --oh-spacing-6: 1.5rem; /** 24px */
176
+ --oh-spacing-7: 1.75rem; /** 28px */
177
+ --oh-spacing-8: 2rem; /** 32px */
178
+ --oh-spacing-10: 2.5rem; /** 40px */
179
+ --oh-spacing-12: 3rem; /** 48px */
180
+ --oh-spacing-16: 4rem; /** 64px */
181
+ --oh-spacing-20: 5rem; /** 80px */
182
+ --oh-spacing-px: 1px;
183
+ --oh-spacing-0-5: 0.125rem; /** 2px */
184
+ --oh-spacing-1-5: 0.375rem; /** 6px */
185
+ --oh-spacing-2-5: 0.625rem; /** 10px */
186
+ --oh-spacing-3-5: 0.875rem; /** 14px */
187
+ --oh-size-container-sm: 640px;
188
+ --oh-size-container-md: 768px;
189
+ --oh-size-container-lg: 1024px;
190
+ --oh-size-container-xl: 1280px;
191
+ --oh-size-breakpoint-xs: 480px;
192
+ --oh-size-breakpoint-sm: 640px;
193
+ --oh-size-breakpoint-md: 768px;
194
+ --oh-size-breakpoint-lg: 1024px;
195
+ --oh-z-index-0: 0;
196
+ --oh-z-index-10: 10;
197
+ --oh-z-index-20: 20;
198
+ --oh-z-index-dropdown: 1000;
199
+ --oh-z-index-sticky: 1100;
200
+ --oh-z-index-modal: 1200;
201
+ --oh-z-index-popover: 1300;
202
+ --oh-z-index-tooltip: 1400;
203
+ --oh-typography-heading-h1-line-height: 1.2; /** 48px at 40px: 40px × 1.25, rounded to the 8px grid */
204
+ --oh-typography-heading-h2-line-height: 1.25; /** 40px at 32px: 32px × 1.25, rounded to the 8px grid */
205
+ --oh-typography-heading-h3-line-height: 1.4286; /** 40px at 28px: 28px × 1.35, rounded to the 8px grid */
206
+ --oh-typography-heading-h4-line-height: 1.3333; /** 32px at 24px: 24px × 1.35, rounded to the 8px grid */
207
+ --oh-typography-heading-h5-line-height: 1.6; /** 32px at 20px: 20px × 1.5, rounded to the 8px grid */
208
+ --oh-typography-heading-h6-line-height: 1.5; /** 24px at 16px: 16px × 1.5, rounded to the 8px grid */
209
+ --oh-typography-body-xl-line-height: 1.6667; /** 40px at 24px: 24px × 1.5, rounded to the 8px grid */
210
+ --oh-typography-body-lg-line-height: 1.6; /** 32px at 20px: 20px × 1.65, rounded to the 8px grid */
211
+ --oh-typography-body-base-line-height: 1.5; /** 24px at 16px: 16px × 1.5, rounded to the 8px grid */
212
+ --oh-typography-body-sm-line-height: 1.6667; /** 20px at 12px: 12px × 1.5, rounded to the 4px grid */
213
+ --oh-typography-body-xs-line-height: 1.6667; /** 20px at 12px: 12px × 1.5, rounded to the 4px grid */
214
+ --oh-typography-label-base-line-height: 1.5; /** 24px at 16px: 16px × 1.5, rounded to the 8px grid */
215
+ --oh-typography-label-sm-line-height: 1.6667; /** 20px at 12px: 12px × 1.5, rounded to the 4px grid */
216
+ --oh-typography-code-line-height: 1.5; /** 24px at 16px: 16px × 1.5, rounded to the 8px grid */
217
+ --oh-elevation-offset-xs: 1px;
218
+ --oh-elevation-offset-sm: 2px;
219
+ --oh-elevation-offset-md: 3px;
220
+ --oh-elevation-offset-lg: 4px;
221
+ --oh-elevation-offset-xl: 5px;
222
+ --oh-elevation-offset-2xl: 6px;
223
+ --oh-lift-hover-sm: -1px;
224
+ --oh-lift-hover-md: -2px;
225
+ --oh-lift-press-sm: 1px;
226
+ --oh-lift-press-md: 2px;
227
+ --oh-decoration-underline-thickness: 2px;
228
+ --oh-decoration-underline-focus-thickness: 3px; /** The solid underline that shows keyboard focus on inline links */
229
+ --oh-decoration-underline-dash: 4px;
230
+ --oh-decoration-underline-period: 8px;
231
+ --oh-focus-ring-width: 3px;
232
+ --oh-focus-ring-offset: 2px;
233
+ --oh-focus-glow-color: rgba(197, 67, 0, 0.15); /** Decorative glow only — never the sole focus indicator */
234
+ --oh-button-size-sm-min-height: 40px;
235
+ --oh-button-size-md-min-height: 48px;
236
+ --oh-button-size-lg-min-height: 56px;
237
+ --oh-input-size-md-min-height: 48px;
238
+ --oh-card-section-header-gradient-end: rgba(255, 255, 255, 0);
239
+ --oh-progress-track-inset-shadow: rgba(0, 0, 0, 0.06); /** Neutral, so it works on every track colour */
240
+ --oh-progress-inverse-track-background: rgba(255, 255, 255, 0.15);
241
+ --oh-progress-inverse-track-border: rgba(255, 255, 255, 0.3);
242
+ --oh-link-text-decoration: underline;
243
+ --oh-link-text-decoration-hover: none;
244
+ --oh-link-inverse-focus-background: rgba(0, 0, 0, 0.1); /** Focus tint — paired with the underline, which is the indicator */
245
+ --oh-close-button-background-hover: rgba(0, 0, 0, 0.08); /** Neutral tint that works on every alert variant */
246
+ --oh-close-button-shadow-hover: rgba(0, 0, 0, 0.15); /** Offset shadow colour on hover and press. Neutral, like the background, so it works on every alert variant */
247
+ --oh-color-brand-primary: var(--oh-color-orange-900); /** Primary brand action — WCAG AA */
248
+ --oh-color-brand-primary-hover: var(--oh-color-orange-950); /** Hover state */
249
+ --oh-color-brand-primary-active: var(--oh-color-orange-950); /** Active/pressed state */
250
+ --oh-color-brand-primary-subtle: var(--oh-color-orange-50); /** Subtle tint */
251
+ --oh-color-brand-highlight: var(--oh-color-honey-400); /** Golden accent */
252
+ --oh-color-brand-highlight-subtle: var(--oh-color-honey-100);
253
+ --oh-color-accent-default: var(--oh-color-blue-500); /** Signature blue accent */
254
+ --oh-color-accent-hover: var(--oh-color-blue-600);
255
+ --oh-color-accent-active: var(--oh-color-blue-700);
256
+ --oh-color-accent-subtle: var(--oh-color-blue-50);
257
+ --oh-color-accent-shadow: var(--oh-color-blue-200); /** Chunky shadow for accent */
258
+ --oh-color-feedback-success: var(--oh-color-green-700); /** 5.2:1 on successSubtle — green.600 failed AA for text */
259
+ --oh-color-feedback-success-subtle: var(--oh-color-green-50);
260
+ --oh-color-feedback-error: var(--oh-color-red-600);
261
+ --oh-color-feedback-error-hover: var(--oh-color-red-700); /** Error hover/active state */
262
+ --oh-color-feedback-error-subtle: var(--oh-color-red-50);
263
+ --oh-color-feedback-error-shadow: var(--oh-shadow-chunky-error); /** Error shadow color */
264
+ --oh-color-feedback-warning: var(--oh-color-honey-700);
265
+ --oh-color-feedback-warning-subtle: var(--oh-color-honey-50);
266
+ --oh-color-feedback-info: var(--oh-color-blue-500);
267
+ --oh-color-feedback-info-subtle: var(--oh-color-blue-50);
268
+ --oh-color-surface-base: var(--oh-color-warm-cream); /** Page background — warm off-white */
269
+ --oh-color-surface-raised: var(--oh-color-warm-linen); /** Cards, panels — slight lift */
270
+ --oh-color-surface-sunlit: var(--oh-color-warm-cream); /** Featured — use with gradient */
271
+ --oh-color-surface-inset: var(--oh-color-warm-parchment); /** Inputs, wells — pressed in */
272
+ --oh-color-surface-highlight: var(--oh-color-white); /** Brightest surface — focused inputs, top of raised gradients */
273
+ --oh-color-surface-disabled: var(--oh-color-warm-sand); /** Quiet disabled */
274
+ --oh-color-surface-featured-start: var(--oh-color-warm-dawn); /** Featured (sunlit) card gradient: top */
275
+ --oh-color-surface-featured-mid: var(--oh-color-warm-shell); /** Featured (sunlit) card gradient: 30% */
276
+ --oh-color-surface-featured-end: var(--oh-color-warm-biscuit); /** Featured (sunlit) card gradient: bottom */
277
+ --oh-color-border-default: var(--oh-color-warm-sand); /** Standard border */
278
+ --oh-color-border-subtle: var(--oh-color-warm-parchment); /** Subtle dividers */
279
+ --oh-color-border-emphasis: var(--oh-color-warm-driftwood); /** Strong border for form elements */
280
+ --oh-color-border-strong: var(--oh-color-warm-dune); /** Neutral edge between default and emphasis — card hover, drawer edge. Decorative, not a 3:1 control border */
281
+ --oh-color-border-hover: var(--oh-color-terracotta-600); /** Hover border — darker for feedback */
282
+ --oh-color-border-disabled: var(--oh-color-warm-parchment);
283
+ --oh-color-text-primary: var(--oh-color-warm-walnut); /** Primary text — warm brown */
284
+ --oh-color-text-secondary: var(--oh-color-warm-driftwood); /** Secondary text */
285
+ --oh-color-text-disabled: var(--oh-color-warm-dune); /** Disabled text */
286
+ --oh-color-text-inverse: var(--oh-color-warm-cream); /** On dark backgrounds */
287
+ --oh-color-text-link: var(--oh-color-orange-900); /** Link text */
288
+ --oh-color-text-link-hover: var(--oh-color-orange-950); /** Link hover */
289
+ --oh-color-text-link-raised: var(--oh-color-orange-950); /** Links on raised (linen) surfaces — text.link is only 4.4:1 on linen */
290
+ --oh-color-text-brand: var(--oh-color-orange-900);
291
+ --oh-color-text-on-brand: var(--oh-color-white); /** Light text on dark brand bg */
292
+ --oh-color-text-on-accent: var(--oh-color-white); /** Light text on dark accent bg */
293
+ --oh-color-text-on-success: var(--oh-color-white); /** Text on filled color.feedback.success */
294
+ --oh-color-text-on-error: var(--oh-color-white); /** Text on filled color.feedback.error */
295
+ --oh-color-text-on-warning: var(--oh-color-white); /** Text on filled color.feedback.warning */
296
+ --oh-color-text-on-info: var(--oh-color-white); /** Text on filled color.feedback.info */
297
+ --oh-font-size-sm: var(--oh-font-size-xs); /** Kept so existing references don't break. On the grid, small text is xs; use xs or a tier 2 role */
298
+ --oh-shadow-primary: var(--oh-shadow-chunky-primary); /** Primary buttons */
299
+ --oh-shadow-secondary: var(--oh-shadow-chunky-secondary); /** Secondary/form elements */
300
+ --oh-shadow-accent: var(--oh-shadow-chunky-accent); /** Accent buttons */
301
+ --oh-shadow-error: var(--oh-shadow-chunky-error); /** Error state */
302
+ --oh-shadow-neutral: var(--oh-shadow-chunky-driftwood); /** Containers and the skip link */
303
+ --oh-shadow-neutral-hover: var(--oh-shadow-chunky-driftwood-hover); /** Lifted containers */
304
+ --oh-shadow-overlay: var(--oh-shadow-chunky-driftwood-deep); /** Dialogs */
305
+ --oh-shadow-field: var(--oh-shadow-chunky-walnut); /** The inset shadow inside text fields */
306
+ --oh-gradient-sunlit: linear-gradient(180deg, var(--oh-color-warm-dawn) 0%, var(--oh-color-warm-shell) 30%, var(--oh-color-warm-biscuit) 100%); /** Gentle warmth for surfaces — same stops as the sunlit card */
307
+ --oh-motion-quick: var(--oh-motion-duration-quick);
308
+ --oh-motion-snappy: var(--oh-motion-duration-snappy);
309
+ --oh-motion-gentle: var(--oh-motion-duration-gentle);
310
+ --oh-motion-relaxed: var(--oh-motion-duration-relaxed);
311
+ --oh-motion-slow: var(--oh-motion-duration-slow);
312
+ --oh-motion-ease-gentle: var(--oh-motion-easing-gentle);
313
+ --oh-motion-ease-out: var(--oh-motion-easing-out);
314
+ --oh-motion-ease-playful: var(--oh-motion-easing-playful);
315
+ --oh-spacing-layout-page: var(--oh-spacing-6);
316
+ --oh-spacing-layout-section: var(--oh-spacing-12);
317
+ --oh-spacing-layout-stack: var(--oh-spacing-5);
318
+ --oh-spacing-layout-inline: var(--oh-spacing-4);
319
+ --oh-spacing-component-xs: var(--oh-spacing-1-5);
320
+ --oh-spacing-component-sm: var(--oh-spacing-2-5);
321
+ --oh-spacing-component-md: var(--oh-spacing-3-5);
322
+ --oh-spacing-component-lg: var(--oh-spacing-5);
323
+ --oh-spacing-component-xl: var(--oh-spacing-7);
324
+ --oh-typography-heading-font-family: var(--oh-font-family-display);
325
+ --oh-typography-heading-h1-font-size: var(--oh-font-size-4xl);
326
+ --oh-typography-heading-h1-font-weight: var(--oh-font-weight-bold);
327
+ --oh-typography-heading-h1-letter-spacing: var(--oh-font-letter-spacing-tighter);
328
+ --oh-typography-heading-h2-font-size: var(--oh-font-size-3xl);
329
+ --oh-typography-heading-h2-font-weight: var(--oh-font-weight-bold);
330
+ --oh-typography-heading-h2-letter-spacing: var(--oh-font-letter-spacing-tight);
331
+ --oh-typography-heading-h3-font-size: var(--oh-font-size-2xl);
332
+ --oh-typography-heading-h3-font-weight: var(--oh-font-weight-semibold);
333
+ --oh-typography-heading-h3-letter-spacing: var(--oh-font-letter-spacing-tight);
334
+ --oh-typography-heading-h4-font-size: var(--oh-font-size-xl);
335
+ --oh-typography-heading-h4-font-weight: var(--oh-font-weight-semibold);
336
+ --oh-typography-heading-h4-letter-spacing: var(--oh-font-letter-spacing-normal);
337
+ --oh-typography-heading-h5-font-size: var(--oh-font-size-lg);
338
+ --oh-typography-heading-h5-font-weight: var(--oh-font-weight-medium);
339
+ --oh-typography-heading-h6-font-size: var(--oh-font-size-base);
340
+ --oh-typography-heading-h6-font-weight: var(--oh-font-weight-medium);
341
+ --oh-typography-body-font-family: var(--oh-font-family-sans);
342
+ --oh-typography-body-xl-font-size: var(--oh-font-size-xl);
343
+ --oh-typography-body-xl-font-weight: var(--oh-font-weight-normal);
344
+ --oh-typography-body-lg-font-size: var(--oh-font-size-lg);
345
+ --oh-typography-body-lg-font-weight: var(--oh-font-weight-normal);
346
+ --oh-typography-body-base-font-size: var(--oh-font-size-base);
347
+ --oh-typography-body-base-font-weight: var(--oh-font-weight-normal);
348
+ --oh-typography-body-sm-font-size: var(--oh-font-size-xs);
349
+ --oh-typography-body-sm-font-weight: var(--oh-font-weight-normal);
350
+ --oh-typography-body-sm-letter-spacing: var(--oh-font-letter-spacing-wide);
351
+ --oh-typography-body-xs-font-size: var(--oh-font-size-xs);
352
+ --oh-typography-body-xs-font-weight: var(--oh-font-weight-normal);
353
+ --oh-typography-body-xs-letter-spacing: var(--oh-font-letter-spacing-wide);
354
+ --oh-typography-label-font-family: var(--oh-font-family-sans);
355
+ --oh-typography-label-base-font-size: var(--oh-font-size-base);
356
+ --oh-typography-label-base-font-weight: var(--oh-font-weight-medium);
357
+ --oh-typography-label-base-letter-spacing: var(--oh-font-letter-spacing-wide);
358
+ --oh-typography-label-sm-font-size: var(--oh-font-size-xs);
359
+ --oh-typography-label-sm-font-weight: var(--oh-font-weight-medium);
360
+ --oh-typography-label-sm-letter-spacing: var(--oh-font-letter-spacing-wide);
361
+ --oh-typography-eyebrow-font-family: var(--oh-font-family-sans);
362
+ --oh-typography-eyebrow-font-size: var(--oh-font-size-base);
363
+ --oh-typography-eyebrow-font-weight: var(--oh-font-weight-medium);
364
+ --oh-typography-eyebrow-letter-spacing: var(--oh-font-letter-spacing-widest);
365
+ --oh-typography-control-font-family: var(--oh-font-family-sans);
366
+ --oh-typography-control-font-weight: var(--oh-font-weight-semibold);
367
+ --oh-typography-control-letter-spacing: var(--oh-font-letter-spacing-wide);
368
+ --oh-typography-control-font-size-sm: var(--oh-font-size-base); /** Small buttons, field labels */
369
+ --oh-typography-control-font-size-md: var(--oh-font-size-lg); /** Default: input text, choices, buttons */
370
+ --oh-typography-control-font-size-lg: var(--oh-font-size-xl); /** Large buttons */
371
+ --oh-typography-emphasis-font-weight: var(--oh-font-weight-semibold);
372
+ --oh-typography-code-font-family: var(--oh-font-family-mono);
373
+ --oh-typography-code-font-size: var(--oh-font-size-base);
374
+ --oh-layout-container-sm: var(--oh-size-container-sm);
375
+ --oh-layout-container-md: var(--oh-size-container-md);
376
+ --oh-layout-container-lg: var(--oh-size-container-lg);
377
+ --oh-layout-container-xl: var(--oh-size-container-xl);
378
+ --oh-shape-control: var(--oh-radius-md); /** Buttons, inputs, selects, tabs */
379
+ --oh-shape-container: var(--oh-radius-md); /** Alerts, modals, dropdowns, accordion items, panels */
380
+ --oh-shape-large: var(--oh-radius-lg); /** Cards */
381
+ --oh-shape-compact: var(--oh-radius-sm); /** Small controls and tags: close buttons, checkboxes, badges, code blocks */
382
+ --oh-shape-tight: var(--oh-radius-xs); /** Focus outlines on text links, inline code */
383
+ --oh-shape-pill: var(--oh-radius-full); /** Pills, radios, toggles, progress bars */
384
+ --oh-elevation-none: var(--oh-shadow-none);
385
+ --oh-elevation-soft: var(--oh-shadow-soft); /** Cards, raised elements */
386
+ --oh-elevation-medium: var(--oh-shadow-medium); /** Dropdowns, popovers */
387
+ --oh-elevation-strong: var(--oh-shadow-strong); /** Modals, dialogs */
388
+ --oh-elevation-glow: var(--oh-shadow-glow); /** Focus ring */
389
+ --oh-elevation-inset: var(--oh-shadow-inset); /** Inputs, wells */
390
+ --oh-elevation-surface-flat: var(--oh-shadow-layered-flat);
391
+ --oh-elevation-surface-raised: var(--oh-shadow-layered-raised);
392
+ --oh-elevation-surface-lifted: var(--oh-shadow-layered-lifted); /** Hovered */
393
+ --oh-elevation-surface-pressed: var(--oh-shadow-layered-pressed);
394
+ --oh-elevation-surface-focused: var(--oh-shadow-layered-focused); /** Sits under the focus glow */
395
+ --oh-elevation-surface-featured: var(--oh-shadow-layered-sunlit);
396
+ --oh-elevation-surface-featured-lifted: var(--oh-shadow-layered-sunlit-lifted);
397
+ --oh-elevation-surface-featured-focused: var(--oh-shadow-layered-sunlit-focused);
398
+ --oh-stroke-control: var(--oh-border-width-chunky); /** Controls and framed containers: buttons, fields, checkboxes, alerts, dialogs */
399
+ --oh-stroke-surface: var(--oh-border-width-1); /** Card edges */
400
+ --oh-stroke-divider: var(--oh-border-width-1); /** Lines between sections */
401
+ --oh-focus-ring-color: var(--oh-color-orange-900); /** The focus colour: outlines, focused control borders. Must stay opaque (4.7:1 on cream, WCAG 1.4.11) */
402
+ --oh-button-size-sm-padding-x: var(--oh-spacing-4);
403
+ --oh-button-size-sm-padding-y: var(--oh-spacing-2);
404
+ --oh-button-size-sm-gap: var(--oh-spacing-2);
405
+ --oh-button-size-md-padding-x: var(--oh-spacing-6);
406
+ --oh-button-size-md-padding-y: var(--oh-spacing-3);
407
+ --oh-button-size-md-gap: var(--oh-spacing-2);
408
+ --oh-button-size-lg-padding-x: var(--oh-spacing-8);
409
+ --oh-button-size-lg-padding-y: var(--oh-spacing-4);
410
+ --oh-button-size-lg-gap: var(--oh-spacing-2-5);
411
+ --oh-button-variant-secondary-background-hover: var(--oh-color-surface-hover);
412
+ --oh-button-variant-secondary-background-active: var(--oh-color-surface-active-pressed);
413
+ --oh-button-focus-glow-color: var(--oh-focus-glow-color);
414
+ --oh-input-base-line-height: var(--oh-typography-body-base-line-height);
415
+ --oh-input-size-md-padding-x: var(--oh-spacing-4);
416
+ --oh-input-size-md-padding-y: var(--oh-spacing-3);
417
+ --oh-card-base-padding: var(--oh-spacing-5);
418
+ --oh-card-interactive-border-color-hover: var(--oh-color-border-brand);
419
+ --oh-card-sunlit-border-color: var(--oh-color-border-brand);
420
+ --oh-card-sunlit-border-color-hover: var(--oh-color-border-brand-hover);
421
+ --oh-card-section-divider-color: var(--oh-color-border-divider);
422
+ --oh-card-section-header-gradient-start: var(--oh-color-surface-sheen);
423
+ --oh-badge-base-padding-x: var(--oh-spacing-2-5);
424
+ --oh-badge-base-padding-y: var(--oh-spacing-1);
425
+ --oh-modal-overlay: var(--oh-color-surface-backdrop);
426
+ --oh-button-base-font-family: var(--oh-typography-control-font-family);
427
+ --oh-button-base-font-weight: var(--oh-typography-control-font-weight);
428
+ --oh-button-base-letter-spacing: var(--oh-typography-control-letter-spacing);
429
+ --oh-button-base-border-radius: var(--oh-shape-control);
430
+ --oh-button-base-border-width: var(--oh-stroke-control);
431
+ --oh-button-base-transition-duration: var(--oh-motion-snappy);
432
+ --oh-button-base-transition-easing: var(--oh-motion-ease-playful);
433
+ --oh-button-size-sm-font-size: var(--oh-typography-control-font-size-sm);
434
+ --oh-button-size-md-font-size: var(--oh-typography-control-font-size-md);
435
+ --oh-button-size-lg-font-size: var(--oh-typography-control-font-size-lg);
436
+ --oh-button-variant-primary-background: var(--oh-color-brand-primary);
437
+ --oh-button-variant-primary-background-hover: var(--oh-color-brand-primary-hover);
438
+ --oh-button-variant-primary-background-active: var(--oh-color-brand-primary-active);
439
+ --oh-button-variant-primary-color: var(--oh-color-text-on-brand);
440
+ --oh-button-variant-primary-border-color: var(--oh-color-brand-primary);
441
+ --oh-button-variant-primary-shadow-color: var(--oh-shadow-primary);
442
+ --oh-button-variant-secondary-background: var(--oh-color-surface-base);
443
+ --oh-button-variant-secondary-color: var(--oh-color-text-primary);
444
+ --oh-button-variant-secondary-border-color: var(--oh-color-border-emphasis);
445
+ --oh-button-variant-secondary-shadow-color: var(--oh-shadow-secondary);
446
+ --oh-button-variant-accent-background: var(--oh-color-accent-default);
447
+ --oh-button-variant-accent-background-hover: var(--oh-color-accent-hover);
448
+ --oh-button-variant-accent-background-active: var(--oh-color-accent-active);
449
+ --oh-button-variant-accent-color: var(--oh-color-text-on-accent);
450
+ --oh-button-variant-accent-border-color: var(--oh-color-accent-default);
451
+ --oh-button-variant-accent-shadow-color: var(--oh-color-accent-shadow);
452
+ --oh-button-focus-ring-color: var(--oh-focus-ring-color);
453
+ --oh-input-base-font-family: var(--oh-typography-control-font-family);
454
+ --oh-input-base-font-size: var(--oh-typography-control-font-size-md);
455
+ --oh-input-base-border-radius: var(--oh-shape-control);
456
+ --oh-input-base-border-width: var(--oh-stroke-control);
457
+ --oh-input-base-transition-duration: var(--oh-motion-snappy);
458
+ --oh-input-base-transition-easing: var(--oh-motion-ease-gentle);
459
+ --oh-input-state-default-background: var(--oh-color-surface-base);
460
+ --oh-input-state-default-border-color: var(--oh-color-border-emphasis); /** WCAG 3:1 contrast for UI elements */
461
+ --oh-input-state-default-color: var(--oh-color-text-primary);
462
+ --oh-input-state-default-placeholder-color: var(--oh-color-text-secondary); /** WCAG readable placeholder */
463
+ --oh-input-state-default-shadow-color: var(--oh-shadow-secondary);
464
+ --oh-input-state-hover-border-color: var(--oh-color-border-hover);
465
+ --oh-input-state-focus-background: var(--oh-color-surface-highlight);
466
+ --oh-input-state-focus-border-color: var(--oh-focus-ring-color);
467
+ --oh-input-state-focus-focus-ring-color: var(--oh-focus-ring-color);
468
+ --oh-input-state-error-border-color: var(--oh-color-feedback-error);
469
+ --oh-input-state-error-background: var(--oh-color-feedback-error-subtle);
470
+ --oh-input-state-error-shadow-color: var(--oh-shadow-error);
471
+ --oh-card-base-background: var(--oh-color-surface-raised);
472
+ --oh-card-base-border-radius: var(--oh-shape-large);
473
+ --oh-card-base-border-width: var(--oh-stroke-surface);
474
+ --oh-card-base-border-color: var(--oh-color-border-default);
475
+ --oh-card-base-shadow: var(--oh-elevation-soft);
476
+ --oh-card-interactive-transition-duration: var(--oh-motion-gentle);
477
+ --oh-card-interactive-transition-easing: var(--oh-motion-ease-gentle);
478
+ --oh-card-interactive-background-hover: var(--oh-color-surface-base);
479
+ --oh-card-interactive-shadow-hover: var(--oh-elevation-medium);
480
+ --oh-card-raised-gradient-start: var(--oh-color-surface-highlight);
481
+ --oh-card-raised-gradient-mid: var(--oh-color-surface-base);
482
+ --oh-card-raised-gradient-end: var(--oh-color-surface-raised);
483
+ --oh-card-raised-border-color: var(--oh-color-border-default);
484
+ --oh-card-flat-gradient-start: var(--oh-color-surface-base);
485
+ --oh-card-flat-gradient-end: var(--oh-color-surface-raised);
486
+ --oh-card-flat-border-color: var(--oh-color-border-default);
487
+ --oh-card-sunlit-background: linear-gradient(180deg, var(--oh-color-surface-featured-start) 0%, var(--oh-color-surface-featured-mid) 30%, var(--oh-color-surface-featured-end) 100%);
488
+ --oh-card-sunlit-gradient-start: var(--oh-color-surface-featured-start);
489
+ --oh-card-sunlit-gradient-mid: var(--oh-color-surface-featured-mid);
490
+ --oh-card-sunlit-gradient-end: var(--oh-color-surface-featured-end);
491
+ --oh-card-sunlit-shadow: var(--oh-elevation-medium);
492
+ --oh-progress-inverse-fill: var(--oh-color-text-inverse);
493
+ --oh-badge-base-font-family: var(--oh-typography-label-font-family);
494
+ --oh-badge-base-font-size: var(--oh-typography-body-base-font-size);
495
+ --oh-badge-base-font-weight: var(--oh-typography-label-base-font-weight);
496
+ --oh-badge-base-letter-spacing: var(--oh-typography-label-base-letter-spacing);
497
+ --oh-badge-base-border-radius: var(--oh-shape-compact);
498
+ --oh-badge-variant-brand-background: var(--oh-color-brand-primary-subtle);
499
+ --oh-badge-variant-brand-color: var(--oh-color-brand-primary);
500
+ --oh-badge-variant-accent-background: var(--oh-color-accent-subtle);
501
+ --oh-badge-variant-accent-color: var(--oh-color-accent-default);
502
+ --oh-badge-variant-success-background: var(--oh-color-feedback-success-subtle);
503
+ --oh-badge-variant-success-color: var(--oh-color-feedback-success);
504
+ --oh-badge-variant-error-background: var(--oh-color-feedback-error-subtle);
505
+ --oh-badge-variant-error-color: var(--oh-color-feedback-error);
506
+ --oh-badge-variant-warning-background: var(--oh-color-feedback-warning-subtle);
507
+ --oh-badge-variant-warning-color: var(--oh-color-feedback-warning);
508
+ --oh-badge-variant-neutral-background: var(--oh-color-surface-inset);
509
+ --oh-badge-variant-neutral-color: var(--oh-color-text-secondary);
510
+ --oh-link-color: var(--oh-color-text-link);
511
+ --oh-link-color-hover: var(--oh-color-text-link-hover);
512
+ }