@orange-halo/tokens 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Orange Halo Dark Theme
3
+ * Auto-generated - do not edit directly
4
+ * WCAG AA compliant color contrast ratios
5
+ */
6
+
7
+ [data-theme='dark'] {
8
+ /* Honey gold (5.2:1 on walnut) */
9
+ --oh-color-brand-primary: #e8a838;
10
+ --oh-color-brand-primary-hover: #f0b848;
11
+ --oh-color-brand-primary-active: #d4922c;
12
+ --oh-color-brand-primary-subtle: #3d3229;
13
+ --oh-color-brand-primary-muted: #4a3d32;
14
+ --oh-color-brand-highlight: #f0c860;
15
+ --oh-color-brand-highlight-subtle: #3d3829;
16
+ /* Light teal (4.8:1) */
17
+ --oh-color-accent-default: #7aa3a4;
18
+ --oh-color-accent-hover: #8fb4b5;
19
+ --oh-color-accent-subtle: #2a3636;
20
+ --oh-color-accent-muted: #344242;
21
+ /* Light green (5.0:1) */
22
+ --oh-color-feedback-success: #7ab87c;
23
+ --oh-color-feedback-success-subtle: #2a3629;
24
+ /* Light red (5.0:1 on base, 5.0:1 on raised) */
25
+ --oh-color-feedback-error: #e08f8d;
26
+ --oh-color-feedback-error-subtle: #3d2a29;
27
+ /* Light amber (5.4:1) */
28
+ --oh-color-feedback-warning: #e8b050;
29
+ --oh-color-feedback-warning-subtle: #3d3529;
30
+ --oh-color-feedback-info: #7aa3a4;
31
+ --oh-color-feedback-info-subtle: #2a3636;
32
+ /* Deep walnut */
33
+ --oh-color-surface-base: #2a2420;
34
+ /* Warm dark card */
35
+ --oh-color-surface-raised: #3d3229;
36
+ /* Slightly warmer than raised — use with gradient overlay */
37
+ --oh-color-surface-sunlit: #44382c;
38
+ /* Darker inset */
39
+ --oh-color-surface-inset: #1f1a17;
40
+ /* Flips to warm white in dark */
41
+ --oh-color-surface-white: #f5f0e8;
42
+ --oh-color-surface-overlay: rgba(15, 12, 10, 0.7);
43
+ /* Distinct hover — lighter than raised */
44
+ --oh-color-surface-hover: #4a3f33;
45
+ --oh-color-surface-active-pressed: #352e28;
46
+ --oh-color-surface-disabled: #352e28;
47
+ /* 3.7:1 on base, 3.0:1 on raised — passes WCAG 1.4.11 */
48
+ --oh-color-border-default: #8a7a68;
49
+ /* Decorative dividers only — below 3:1, not for UI component boundaries */
50
+ --oh-color-border-subtle: #6b5d4d;
51
+ /* 4.9:1 on base, 4.0:1 on raised — inputs, secondary buttons */
52
+ --oh-color-border-emphasis: #a09080;
53
+ --oh-color-border-focus: #e8a838;
54
+ --oh-color-border-brand: rgba(232, 168, 56, 0.3);
55
+ /* Warm white (12.4:1) */
56
+ --oh-color-text-primary: #f5f0e8;
57
+ /* Dune (6.8:1) */
58
+ --oh-color-text-secondary: #c9c1b4;
59
+ --oh-color-text-disabled: #6b5d4d;
60
+ --oh-color-text-inverse: #2a2420;
61
+ --oh-color-text-link: #e8a838;
62
+ --oh-color-text-link-hover: #f0b848;
63
+ /* Dark text on light brand bg (7.5:1) */
64
+ --oh-color-text-on-brand: #2a2420;
65
+ /* Dark text on light accent bg (5.8:1) */
66
+ --oh-color-text-on-accent: #2a2420;
67
+ --oh-focus-ring-color: rgba(232, 168, 56, 0.4);
68
+ --oh-focus-glow-color: rgba(232, 168, 56, 0.2);
69
+ --oh-shadow-inset: inset 0 1px 3px rgba(0, 0, 0, 0.3);
70
+ --oh-shadow-soft: 0 2px 8px rgba(0, 0, 0, 0.25);
71
+ --oh-shadow-medium: 0 4px 16px rgba(0, 0, 0, 0.3);
72
+ /* Chunky input shadow */
73
+ --oh-shadow-chunky-inset: inset 3px 3px 0 0 rgba(0, 0, 0, 0.2);
74
+ }
75
+
76
+ /* Automatic dark mode based on system preference */
77
+ @media (prefers-color-scheme: dark) {
78
+ :root:not([data-theme='light']) {
79
+ --oh-color-brand-primary: #e8a838;
80
+ --oh-color-brand-primary-hover: #f0b848;
81
+ --oh-color-brand-primary-active: #d4922c;
82
+ --oh-color-brand-primary-subtle: #3d3229;
83
+ --oh-color-brand-primary-muted: #4a3d32;
84
+ --oh-color-brand-highlight: #f0c860;
85
+ --oh-color-brand-highlight-subtle: #3d3829;
86
+ --oh-color-accent-default: #7aa3a4;
87
+ --oh-color-accent-hover: #8fb4b5;
88
+ --oh-color-accent-subtle: #2a3636;
89
+ --oh-color-accent-muted: #344242;
90
+ --oh-color-feedback-success: #7ab87c;
91
+ --oh-color-feedback-success-subtle: #2a3629;
92
+ --oh-color-feedback-error: #e08f8d;
93
+ --oh-color-feedback-error-subtle: #3d2a29;
94
+ --oh-color-feedback-warning: #e8b050;
95
+ --oh-color-feedback-warning-subtle: #3d3529;
96
+ --oh-color-feedback-info: #7aa3a4;
97
+ --oh-color-feedback-info-subtle: #2a3636;
98
+ --oh-color-surface-base: #2a2420;
99
+ --oh-color-surface-raised: #3d3229;
100
+ --oh-color-surface-sunlit: #44382c;
101
+ --oh-color-surface-inset: #1f1a17;
102
+ --oh-color-surface-white: #f5f0e8;
103
+ --oh-color-surface-overlay: rgba(15, 12, 10, 0.7);
104
+ --oh-color-surface-hover: #4a3f33;
105
+ --oh-color-surface-active-pressed: #352e28;
106
+ --oh-color-surface-disabled: #352e28;
107
+ --oh-color-border-default: #8a7a68;
108
+ --oh-color-border-subtle: #6b5d4d;
109
+ --oh-color-border-emphasis: #a09080;
110
+ --oh-color-border-focus: #e8a838;
111
+ --oh-color-border-brand: rgba(232, 168, 56, 0.3);
112
+ --oh-color-text-primary: #f5f0e8;
113
+ --oh-color-text-secondary: #c9c1b4;
114
+ --oh-color-text-disabled: #6b5d4d;
115
+ --oh-color-text-inverse: #2a2420;
116
+ --oh-color-text-link: #e8a838;
117
+ --oh-color-text-link-hover: #f0b848;
118
+ --oh-color-text-on-brand: #2a2420;
119
+ --oh-color-text-on-accent: #2a2420;
120
+ --oh-focus-ring-color: rgba(232, 168, 56, 0.4);
121
+ --oh-focus-glow-color: rgba(232, 168, 56, 0.2);
122
+ --oh-shadow-inset: inset 0 1px 3px rgba(0, 0, 0, 0.3);
123
+ --oh-shadow-soft: 0 2px 8px rgba(0, 0, 0, 0.25);
124
+ --oh-shadow-medium: 0 4px 16px rgba(0, 0, 0, 0.3);
125
+ --oh-shadow-chunky-inset: inset 3px 3px 0 0 rgba(0, 0, 0, 0.2);
126
+ }
127
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Orange Halo Light Theme
3
+ * Auto-generated - do not edit directly
4
+ * WCAG AA compliant color contrast ratios
5
+ */
6
+
7
+ :root, [data-theme='light'] {
8
+ --oh-color-brand-primary: #c54300;
9
+ --oh-color-brand-primary-hover: #9e3500;
10
+ --oh-color-brand-primary-active: #9e3500;
11
+ --oh-color-brand-primary-subtle: #fff3e0;
12
+ --oh-color-brand-primary-muted: #ffe0b2;
13
+ --oh-color-brand-highlight: #e8a838;
14
+ --oh-color-brand-highlight-subtle: #fdf3d4;
15
+ --oh-color-accent-default: #5f8a8b;
16
+ --oh-color-accent-hover: #4d7172;
17
+ --oh-color-accent-subtle: #f0f6f6;
18
+ --oh-color-accent-muted: #e0ebeb;
19
+ --oh-color-feedback-success: #4a8a4c;
20
+ --oh-color-feedback-success-subtle: #f0f7f1;
21
+ --oh-color-feedback-error: #b54540;
22
+ --oh-color-feedback-error-subtle: #fdf4f3;
23
+ --oh-color-feedback-warning: #8c5e1c;
24
+ --oh-color-feedback-warning-subtle: #fefaee;
25
+ --oh-color-feedback-info: #4d7172;
26
+ --oh-color-feedback-info-subtle: #f0f6f6;
27
+ --oh-color-surface-base: #faf7f2;
28
+ --oh-color-surface-raised: #f5f0e8;
29
+ --oh-color-surface-sunlit: #faf7f2;
30
+ --oh-color-surface-inset: #ede8df;
31
+ --oh-color-surface-overlay: rgba(61, 50, 41, 0.4);
32
+ --oh-color-surface-disabled: #e2dcd2;
33
+ --oh-color-border-default: #e2dcd2;
34
+ --oh-color-border-subtle: #ede8df;
35
+ --oh-color-border-emphasis: #c9c1b4;
36
+ --oh-color-border-focus: #c54300;
37
+ --oh-color-border-brand: rgba(197, 67, 0, 0.25);
38
+ --oh-color-text-primary: #3d3229;
39
+ --oh-color-text-secondary: #6b5d4d;
40
+ --oh-color-text-disabled: #c9c1b4;
41
+ --oh-color-text-inverse: #faf7f2;
42
+ --oh-color-text-link: #c54300;
43
+ --oh-color-text-link-hover: #9e3500;
44
+ --oh-focus-ring-color: rgba(197, 67, 0, 0.35);
45
+ --oh-focus-glow-color: rgba(197, 67, 0, 0.15);
46
+ }
@@ -0,0 +1,399 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ :root {
6
+ --oh-color-orange-50: #fff3e0;
7
+ --oh-color-orange-100: #ffe0b2;
8
+ --oh-color-orange-200: #ffcc80;
9
+ --oh-color-orange-300: #ffb74d;
10
+ --oh-color-orange-400: #ffa726;
11
+ --oh-color-orange-500: #ff9800;
12
+ --oh-color-orange-600: #fb8c00;
13
+ --oh-color-orange-700: #f57c00;
14
+ --oh-color-orange-800: #ef6c00;
15
+ --oh-color-orange-900: #c54300; /** Primary brand — WCAG AA (4.5:1) */
16
+ --oh-color-orange-950: #9e3500; /** Hover/active state — WCAG AA (7.2:1) */
17
+ --oh-color-honey-50: #fefaee;
18
+ --oh-color-honey-100: #fdf3d4;
19
+ --oh-color-honey-200: #fbe7a8;
20
+ --oh-color-honey-300: #f8d56f;
21
+ --oh-color-honey-400: #e8a838; /** Signature honey */
22
+ --oh-color-honey-500: #d4922c;
23
+ --oh-color-honey-600: #b87a24;
24
+ --oh-color-honey-700: #8c5e1c; /** WCAG AA (5.2:1) */
25
+ --oh-color-honey-800: #6b4815;
26
+ --oh-color-terracotta-50: #fbf5f0;
27
+ --oh-color-terracotta-100: #f5e8de;
28
+ --oh-color-terracotta-200: #e8cdbf;
29
+ --oh-color-terracotta-300: #d4a88f;
30
+ --oh-color-terracotta-400: #bf8060;
31
+ --oh-color-terracotta-500: #a0522d; /** Signature terracotta — WCAG AA (5.3:1) */
32
+ --oh-color-terracotta-600: #8b4726;
33
+ --oh-color-terracotta-700: #6f3920;
34
+ --oh-color-terracotta-800: #5a2f1a;
35
+ --oh-color-terracotta-900: #452414;
36
+ --oh-color-eucalyptus-50: #f0f6f6;
37
+ --oh-color-eucalyptus-100: #e0ebeb;
38
+ --oh-color-eucalyptus-200: #c2d7d7;
39
+ --oh-color-eucalyptus-300: #9ebebe;
40
+ --oh-color-eucalyptus-400: #7aa3a4;
41
+ --oh-color-eucalyptus-500: #5f8a8b; /** Signature eucalyptus — WCAG AA (4.5:1) */
42
+ --oh-color-eucalyptus-600: #4d7172;
43
+ --oh-color-eucalyptus-700: #3f5c5d; /** WCAG AA (6.2:1) */
44
+ --oh-color-eucalyptus-800: #344a4b;
45
+ --oh-color-eucalyptus-900: #2a3c3d;
46
+ --oh-color-warm-cream: #faf7f2; /** Base background — warm off-white */
47
+ --oh-color-warm-linen: #f5f0e8; /** Raised surface */
48
+ --oh-color-warm-parchment: #ede8df; /** Inset surface */
49
+ --oh-color-warm-sand: #e2dcd2; /** Borders, dividers */
50
+ --oh-color-warm-dune: #c9c1b4; /** Muted elements */
51
+ --oh-color-warm-driftwood: #6b5d4d; /** Secondary text — WCAG AA (4.8:1) */
52
+ --oh-color-warm-bark: #52463a; /** Emphasis text (6.8:1) */
53
+ --oh-color-warm-walnut: #3d3229; /** Primary text — WCAG AA (8.2:1) */
54
+ --oh-color-green-50: #f0f7f1;
55
+ --oh-color-green-100: #d9edd9;
56
+ --oh-color-green-500: #5a9a5c;
57
+ --oh-color-green-600: #4a8a4c; /** WCAG AA (4.5:1) */
58
+ --oh-color-green-700: #3d7340;
59
+ --oh-color-red-50: #fdf4f3;
60
+ --oh-color-red-100: #f9e0dc;
61
+ --oh-color-red-500: #c75450;
62
+ --oh-color-red-600: #b54540; /** WCAG AA (4.8:1) */
63
+ --oh-color-red-700: #943836; /** Hover/active state */
64
+ --oh-color-blue-50: #eef4f9;
65
+ --oh-color-blue-100: #d6e4f0;
66
+ --oh-color-blue-200: #a0b4c8;
67
+ --oh-color-blue-300: #7a9ab8;
68
+ --oh-color-blue-400: #5a82a8;
69
+ --oh-color-blue-500: #3d5a80; /** Signature blue — WCAG AA (5.5:1) */
70
+ --oh-color-blue-600: #354f70; /** Hover state */
71
+ --oh-color-blue-700: #2e4460; /** Active state */
72
+ --oh-color-blue-800: #253850;
73
+ --oh-color-white: #ffffff; /** Pure white for inputs/highlights */
74
+ --oh-color-surface-overlay: rgba(61, 50, 41, 0.4); /** Modal backdrop — warm */
75
+ --oh-color-surface-hover: #fff4e6; /** Warm hover tint */
76
+ --oh-color-surface-active-pressed: #f0ebe3; /** Active/pressed surface */
77
+ --oh-color-border-brand: rgba(197, 67, 0, 0.25); /** Brand-tinted border */
78
+ --oh-font-family-sans: 'Bricolage Grotesque', 'General Sans', -apple-system, BlinkMacSystemFont, sans-serif;
79
+ --oh-font-family-display: 'Bricolage Grotesque', 'General Sans', sans-serif;
80
+ --oh-font-family-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
81
+ --oh-font-size-xs: 0.75rem; /** 12px */
82
+ --oh-font-size-sm: 0.875rem; /** 14px */
83
+ --oh-font-size-base: 1rem; /** 16px */
84
+ --oh-font-size-lg: 1.125rem; /** 18px */
85
+ --oh-font-size-xl: 1.25rem; /** 20px */
86
+ --oh-font-size-2xl: 1.625rem; /** 26px */
87
+ --oh-font-size-3xl: 2rem; /** 32px */
88
+ --oh-font-size-4xl: 2.625rem; /** 42px */
89
+ --oh-font-size-5xl: 3.25rem; /** 52px */
90
+ --oh-font-weight-normal: 400;
91
+ --oh-font-weight-medium: 500;
92
+ --oh-font-weight-semibold: 600;
93
+ --oh-font-weight-bold: 700;
94
+ --oh-font-line-height-none: 1;
95
+ --oh-font-line-height-tight: 1.25;
96
+ --oh-font-line-height-snug: 1.35;
97
+ --oh-font-line-height-normal: 1.5;
98
+ --oh-font-line-height-relaxed: 1.65;
99
+ --oh-font-line-height-loose: 1.8;
100
+ --oh-font-letter-spacing-tighter: -0.02em;
101
+ --oh-font-letter-spacing-tight: -0.01em;
102
+ --oh-font-letter-spacing-normal: 0;
103
+ --oh-font-letter-spacing-wide: 0.01em;
104
+ --oh-font-letter-spacing-wider: 0.02em;
105
+ --oh-spacing-0: 0;
106
+ --oh-spacing-1: 0.25rem; /** 4px */
107
+ --oh-spacing-2: 0.5rem; /** 8px */
108
+ --oh-spacing-3: 0.75rem; /** 12px */
109
+ --oh-spacing-4: 1rem; /** 16px */
110
+ --oh-spacing-5: 1.25rem; /** 20px */
111
+ --oh-spacing-6: 1.5rem; /** 24px */
112
+ --oh-spacing-7: 1.75rem; /** 28px */
113
+ --oh-spacing-8: 2rem; /** 32px */
114
+ --oh-spacing-10: 2.5rem; /** 40px */
115
+ --oh-spacing-12: 3rem; /** 48px */
116
+ --oh-spacing-16: 4rem; /** 64px */
117
+ --oh-spacing-20: 5rem; /** 80px */
118
+ --oh-spacing-px: 1px;
119
+ --oh-spacing-0-5: 0.125rem; /** 2px */
120
+ --oh-spacing-1-5: 0.375rem; /** 6px */
121
+ --oh-spacing-2-5: 0.625rem; /** 10px */
122
+ --oh-spacing-3-5: 0.875rem; /** 14px */
123
+ --oh-radius-none: 0;
124
+ --oh-radius-xs: 4px; /** Small details, chips */
125
+ --oh-radius-sm: 6px; /** Buttons, inputs */
126
+ --oh-radius-md: 10px; /** Cards, panels */
127
+ --oh-radius-lg: 14px; /** Modals, large containers */
128
+ --oh-radius-xl: 20px; /** Hero elements */
129
+ --oh-radius-full: 9999px; /** Avatars, pills */
130
+ --oh-shadow-none: none;
131
+ --oh-shadow-soft: 0 2px 8px rgba(61, 50, 41, 0.06), 0 1px 3px rgba(61, 50, 41, 0.08); /** Cards, raised elements */
132
+ --oh-shadow-medium: 0 4px 16px rgba(61, 50, 41, 0.08), 0 2px 6px rgba(61, 50, 41, 0.06); /** Dropdowns, popovers */
133
+ --oh-shadow-strong: 0 8px 24px rgba(61, 50, 41, 0.10), 0 4px 8px rgba(61, 50, 41, 0.06); /** Modals, dialogs */
134
+ --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 */
135
+ --oh-shadow-inset: inset 0 1px 3px rgba(61, 50, 41, 0.08); /** Inputs, wells */
136
+ --oh-shadow-chunky-primary: #e8c4a0; /** Warm peach for primary buttons */
137
+ --oh-shadow-chunky-secondary: #d4c4b0; /** Neutral tan for secondary/form elements */
138
+ --oh-shadow-chunky-accent: #a0b4c8; /** Cool blue-gray for accent buttons */
139
+ --oh-shadow-chunky-error: rgba(181, 69, 64, 0.3); /** Error state shadow */
140
+ --oh-gradient-sunlit: linear-gradient(180deg, #FAF7F2 0%, #F5EFE4 100%); /** Gentle warmth for surfaces */
141
+ --oh-gradient-warm: linear-gradient(135deg, #C54300 0%, #FF9800 100%); /** Brand emphasis */
142
+ --oh-gradient-nostalgic: linear-gradient(180deg, #F5F0E8 0%, #EDE8DF 100%); /** Subtle retro depth */
143
+ --oh-motion-duration-quick: 100ms; /** Micro-interactions (color shifts) */
144
+ --oh-motion-duration-snappy: 150ms; /** Button/input transitions */
145
+ --oh-motion-duration-gentle: 200ms; /** Standard interactions (hover, focus) */
146
+ --oh-motion-duration-relaxed: 300ms; /** Larger transitions (panels) */
147
+ --oh-motion-duration-slow: 400ms; /** Emphasis animations */
148
+ --oh-motion-easing-gentle: cubic-bezier(0.4, 0, 0.2, 1); /** Default — smooth and natural */
149
+ --oh-motion-easing-out: cubic-bezier(0, 0, 0.2, 1); /** Enters and reveals */
150
+ --oh-motion-easing-in: cubic-bezier(0.4, 0, 1, 1); /** Exits */
151
+ --oh-motion-easing-playful: cubic-bezier(0.34, 1.3, 0.64, 1); /** Celebrations — slight overshoot */
152
+ --oh-border-width-0: 0;
153
+ --oh-border-width-1: 1px;
154
+ --oh-border-width-2: 2px;
155
+ --oh-z-index-0: 0;
156
+ --oh-z-index-10: 10;
157
+ --oh-z-index-20: 20;
158
+ --oh-z-index-dropdown: 1000;
159
+ --oh-z-index-sticky: 1100;
160
+ --oh-z-index-modal: 1200;
161
+ --oh-z-index-popover: 1300;
162
+ --oh-z-index-tooltip: 1400;
163
+ --oh-focus-ring-width: 3px;
164
+ --oh-focus-ring-color: rgba(197, 67, 0, 0.35);
165
+ --oh-focus-glow-color: rgba(197, 67, 0, 0.15);
166
+ --oh-button-base-border-width: 2.5px;
167
+ --oh-button-size-sm-min-height: 36px;
168
+ --oh-button-size-md-min-height: 44px;
169
+ --oh-button-size-lg-min-height: 52px;
170
+ --oh-button-focus-ring-width: 3px;
171
+ --oh-input-base-border-width: 2.5px;
172
+ --oh-input-size-md-min-height: 48px;
173
+ --oh-link-text-decoration: underline;
174
+ --oh-link-text-decoration-hover: none;
175
+ --oh-color-brand-primary: var(--oh-color-orange-900); /** Primary brand action — WCAG AA */
176
+ --oh-color-brand-primary-hover: var(--oh-color-orange-950); /** Hover state */
177
+ --oh-color-brand-primary-active: var(--oh-color-orange-950); /** Active/pressed state */
178
+ --oh-color-brand-primary-subtle: var(--oh-color-orange-50); /** Subtle tint */
179
+ --oh-color-brand-primary-muted: var(--oh-color-orange-100); /** Background tint */
180
+ --oh-color-brand-highlight: var(--oh-color-honey-400); /** Golden accent */
181
+ --oh-color-brand-highlight-subtle: var(--oh-color-honey-100);
182
+ --oh-color-accent-default: var(--oh-color-blue-500); /** Signature blue accent */
183
+ --oh-color-accent-hover: var(--oh-color-blue-600);
184
+ --oh-color-accent-active: var(--oh-color-blue-700);
185
+ --oh-color-accent-subtle: var(--oh-color-blue-50);
186
+ --oh-color-accent-muted: var(--oh-color-blue-100);
187
+ --oh-color-accent-shadow: var(--oh-color-blue-200); /** Chunky shadow for accent */
188
+ --oh-color-feedback-success: var(--oh-color-green-600);
189
+ --oh-color-feedback-success-subtle: var(--oh-color-green-50);
190
+ --oh-color-feedback-success-muted: var(--oh-color-green-100);
191
+ --oh-color-feedback-error: var(--oh-color-red-600);
192
+ --oh-color-feedback-error-hover: var(--oh-color-red-700); /** Error hover/active state */
193
+ --oh-color-feedback-error-subtle: var(--oh-color-red-50);
194
+ --oh-color-feedback-error-muted: var(--oh-color-red-100);
195
+ --oh-color-feedback-error-shadow: var(--oh-shadow-chunky-error); /** Error shadow color */
196
+ --oh-color-feedback-warning: var(--oh-color-honey-700);
197
+ --oh-color-feedback-warning-subtle: var(--oh-color-honey-50);
198
+ --oh-color-feedback-warning-muted: var(--oh-color-honey-100);
199
+ --oh-color-feedback-info: var(--oh-color-blue-500);
200
+ --oh-color-feedback-info-subtle: var(--oh-color-blue-50);
201
+ --oh-color-feedback-info-muted: var(--oh-color-blue-100);
202
+ --oh-color-surface-base: var(--oh-color-warm-cream); /** Page background — warm off-white */
203
+ --oh-color-surface-raised: var(--oh-color-warm-linen); /** Cards, panels — slight lift */
204
+ --oh-color-surface-sunlit: var(--oh-color-warm-cream); /** Featured — use with gradient */
205
+ --oh-color-surface-inset: var(--oh-color-warm-parchment); /** Inputs, wells — pressed in */
206
+ --oh-color-surface-white: var(--oh-color-white); /** Pure white for focus/highlight states */
207
+ --oh-color-surface-disabled: var(--oh-color-warm-sand); /** Quiet disabled */
208
+ --oh-color-border-default: var(--oh-color-warm-sand); /** Standard border */
209
+ --oh-color-border-subtle: var(--oh-color-warm-parchment); /** Subtle dividers */
210
+ --oh-color-border-emphasis: var(--oh-color-warm-driftwood); /** Strong border for form elements */
211
+ --oh-color-border-hover: var(--oh-color-terracotta-600); /** Hover border — darker for feedback */
212
+ --oh-color-border-focus: var(--oh-color-orange-900); /** Focus ring — warm orange */
213
+ --oh-color-border-focus-inner: var(--oh-color-orange-900); /** Inner focus ring */
214
+ --oh-color-border-disabled: var(--oh-color-warm-parchment);
215
+ --oh-color-text-primary: var(--oh-color-warm-walnut); /** Primary text — warm brown */
216
+ --oh-color-text-secondary: var(--oh-color-warm-driftwood); /** Secondary text */
217
+ --oh-color-text-disabled: var(--oh-color-warm-dune); /** Disabled text */
218
+ --oh-color-text-inverse: var(--oh-color-warm-cream); /** On dark backgrounds */
219
+ --oh-color-text-link: var(--oh-color-orange-900); /** Link text */
220
+ --oh-color-text-link-hover: var(--oh-color-orange-950); /** Link hover */
221
+ --oh-color-text-brand: var(--oh-color-orange-900);
222
+ --oh-color-text-on-brand: var(--oh-color-white); /** Light text on dark brand bg */
223
+ --oh-color-text-on-accent: var(--oh-color-white); /** Light text on dark accent bg */
224
+ --oh-spacing-layout-page: var(--oh-spacing-6);
225
+ --oh-spacing-layout-section: var(--oh-spacing-12);
226
+ --oh-spacing-layout-stack: var(--oh-spacing-5);
227
+ --oh-spacing-layout-inline: var(--oh-spacing-4);
228
+ --oh-spacing-component-xs: var(--oh-spacing-1-5);
229
+ --oh-spacing-component-sm: var(--oh-spacing-2-5);
230
+ --oh-spacing-component-md: var(--oh-spacing-3-5);
231
+ --oh-spacing-component-lg: var(--oh-spacing-5);
232
+ --oh-spacing-component-xl: var(--oh-spacing-7);
233
+ --oh-shadow-primary: var(--oh-shadow-chunky-primary); /** Primary buttons */
234
+ --oh-shadow-secondary: var(--oh-shadow-chunky-secondary); /** Secondary/form elements */
235
+ --oh-shadow-accent: var(--oh-shadow-chunky-accent); /** Accent buttons */
236
+ --oh-shadow-error: var(--oh-shadow-chunky-error); /** Error state */
237
+ --oh-motion-quick: var(--oh-motion-duration-quick);
238
+ --oh-motion-snappy: var(--oh-motion-duration-snappy);
239
+ --oh-motion-gentle: var(--oh-motion-duration-gentle);
240
+ --oh-motion-relaxed: var(--oh-motion-duration-relaxed);
241
+ --oh-motion-slow: var(--oh-motion-duration-slow);
242
+ --oh-motion-ease-gentle: var(--oh-motion-easing-gentle);
243
+ --oh-motion-ease-out: var(--oh-motion-easing-out);
244
+ --oh-motion-ease-playful: var(--oh-motion-easing-playful);
245
+ --oh-typography-heading-font-family: var(--oh-font-family-display);
246
+ --oh-typography-heading-h1-font-size: var(--oh-font-size-4xl);
247
+ --oh-typography-heading-h1-font-weight: var(--oh-font-weight-bold);
248
+ --oh-typography-heading-h1-line-height: var(--oh-font-line-height-tight);
249
+ --oh-typography-heading-h1-letter-spacing: var(--oh-font-letter-spacing-tighter);
250
+ --oh-typography-heading-h2-font-size: var(--oh-font-size-3xl);
251
+ --oh-typography-heading-h2-font-weight: var(--oh-font-weight-semibold);
252
+ --oh-typography-heading-h2-line-height: var(--oh-font-line-height-tight);
253
+ --oh-typography-heading-h2-letter-spacing: var(--oh-font-letter-spacing-tight);
254
+ --oh-typography-heading-h3-font-size: var(--oh-font-size-2xl);
255
+ --oh-typography-heading-h3-font-weight: var(--oh-font-weight-semibold);
256
+ --oh-typography-heading-h3-line-height: var(--oh-font-line-height-snug);
257
+ --oh-typography-heading-h3-letter-spacing: var(--oh-font-letter-spacing-tight);
258
+ --oh-typography-heading-h4-font-size: var(--oh-font-size-xl);
259
+ --oh-typography-heading-h4-font-weight: var(--oh-font-weight-medium);
260
+ --oh-typography-heading-h4-line-height: var(--oh-font-line-height-snug);
261
+ --oh-typography-heading-h4-letter-spacing: var(--oh-font-letter-spacing-normal);
262
+ --oh-typography-heading-h5-font-size: var(--oh-font-size-lg);
263
+ --oh-typography-heading-h5-font-weight: var(--oh-font-weight-medium);
264
+ --oh-typography-heading-h5-line-height: var(--oh-font-line-height-normal);
265
+ --oh-typography-heading-h6-font-size: var(--oh-font-size-base);
266
+ --oh-typography-heading-h6-font-weight: var(--oh-font-weight-medium);
267
+ --oh-typography-heading-h6-line-height: var(--oh-font-line-height-normal);
268
+ --oh-typography-body-font-family: var(--oh-font-family-sans);
269
+ --oh-typography-body-lg-font-size: var(--oh-font-size-lg);
270
+ --oh-typography-body-lg-font-weight: var(--oh-font-weight-normal);
271
+ --oh-typography-body-lg-line-height: var(--oh-font-line-height-relaxed);
272
+ --oh-typography-body-base-font-size: var(--oh-font-size-base);
273
+ --oh-typography-body-base-font-weight: var(--oh-font-weight-normal);
274
+ --oh-typography-body-base-line-height: var(--oh-font-line-height-normal);
275
+ --oh-typography-body-sm-font-size: var(--oh-font-size-sm);
276
+ --oh-typography-body-sm-font-weight: var(--oh-font-weight-normal);
277
+ --oh-typography-body-sm-line-height: var(--oh-font-line-height-normal);
278
+ --oh-typography-body-sm-letter-spacing: var(--oh-font-letter-spacing-wide);
279
+ --oh-typography-body-xs-font-size: var(--oh-font-size-xs);
280
+ --oh-typography-body-xs-font-weight: var(--oh-font-weight-normal);
281
+ --oh-typography-body-xs-line-height: var(--oh-font-line-height-normal);
282
+ --oh-typography-body-xs-letter-spacing: var(--oh-font-letter-spacing-wide);
283
+ --oh-typography-label-font-family: var(--oh-font-family-sans);
284
+ --oh-typography-label-base-font-size: var(--oh-font-size-sm);
285
+ --oh-typography-label-base-font-weight: var(--oh-font-weight-medium);
286
+ --oh-typography-label-base-line-height: var(--oh-font-line-height-normal); /** 1.5 for WCAG 1.4.12 */
287
+ --oh-typography-label-base-letter-spacing: var(--oh-font-letter-spacing-wide);
288
+ --oh-typography-label-sm-font-size: var(--oh-font-size-xs);
289
+ --oh-typography-label-sm-font-weight: var(--oh-font-weight-medium);
290
+ --oh-typography-label-sm-line-height: var(--oh-font-line-height-normal); /** 1.5 for WCAG 1.4.12 */
291
+ --oh-typography-label-sm-letter-spacing: var(--oh-font-letter-spacing-wide);
292
+ --oh-typography-code-font-family: var(--oh-font-family-mono);
293
+ --oh-typography-code-font-size: var(--oh-font-size-sm);
294
+ --oh-typography-code-line-height: var(--oh-font-line-height-normal);
295
+ --oh-shape-interactive: var(--oh-radius-sm); /** Buttons, inputs (6px) */
296
+ --oh-shape-container: var(--oh-radius-md); /** Cards, panels (10px) */
297
+ --oh-shape-large: var(--oh-radius-lg); /** Modals (14px) */
298
+ --oh-shape-small: var(--oh-radius-xs); /** Chips, tags (4px) */
299
+ --oh-shape-pill: var(--oh-radius-full); /** Badges, avatars */
300
+ --oh-elevation-none: var(--oh-shadow-none);
301
+ --oh-elevation-soft: var(--oh-shadow-soft); /** Cards, raised elements */
302
+ --oh-elevation-medium: var(--oh-shadow-medium); /** Dropdowns, popovers */
303
+ --oh-elevation-strong: var(--oh-shadow-strong); /** Modals, dialogs */
304
+ --oh-elevation-glow: var(--oh-shadow-glow); /** Focus ring */
305
+ --oh-elevation-inset: var(--oh-shadow-inset); /** Inputs, wells */
306
+ --oh-button-base-font-weight: var(--oh-font-weight-medium);
307
+ --oh-button-base-letter-spacing: var(--oh-font-letter-spacing-wide);
308
+ --oh-button-base-border-radius: var(--oh-radius-md);
309
+ --oh-button-size-sm-font-size: var(--oh-font-size-sm);
310
+ --oh-button-size-sm-padding-x: var(--oh-spacing-3);
311
+ --oh-button-size-sm-padding-y: var(--oh-spacing-2);
312
+ --oh-button-size-sm-gap: var(--oh-spacing-1-5);
313
+ --oh-button-size-md-font-size: var(--oh-font-size-sm);
314
+ --oh-button-size-md-padding-x: var(--oh-spacing-4);
315
+ --oh-button-size-md-padding-y: var(--oh-spacing-2-5);
316
+ --oh-button-size-md-gap: var(--oh-spacing-2);
317
+ --oh-button-size-lg-font-size: var(--oh-font-size-base);
318
+ --oh-button-size-lg-padding-x: var(--oh-spacing-6);
319
+ --oh-button-size-lg-padding-y: var(--oh-spacing-3-5);
320
+ --oh-button-size-lg-gap: var(--oh-spacing-2-5);
321
+ --oh-button-variant-secondary-background-active: var(--oh-color-surface-active-pressed);
322
+ --oh-button-focus-ring-color: var(--oh-focus-ring-color);
323
+ --oh-button-focus-glow-color: var(--oh-focus-glow-color);
324
+ --oh-input-base-font-family: var(--oh-font-family-sans);
325
+ --oh-input-base-font-size: var(--oh-font-size-lg);
326
+ --oh-input-base-line-height: var(--oh-font-line-height-normal);
327
+ --oh-input-base-border-radius: var(--oh-radius-md);
328
+ --oh-input-size-md-padding-x: var(--oh-spacing-4);
329
+ --oh-input-size-md-padding-y: var(--oh-spacing-3);
330
+ --oh-card-base-border-width: var(--oh-border-width-1);
331
+ --oh-card-base-padding: var(--oh-spacing-5);
332
+ --oh-card-interactive-background-hover: var(--oh-color-warm-cream);
333
+ --oh-card-interactive-border-color-hover: var(--oh-color-border-brand);
334
+ --oh-card-sunlit-background: var(--oh-gradient-sunlit);
335
+ --oh-card-sunlit-border-color: var(--oh-color-border-brand);
336
+ --oh-badge-base-font-family: var(--oh-font-family-sans);
337
+ --oh-badge-base-font-size: var(--oh-font-size-xs);
338
+ --oh-badge-base-font-weight: var(--oh-font-weight-medium);
339
+ --oh-badge-base-letter-spacing: var(--oh-font-letter-spacing-wide);
340
+ --oh-badge-base-padding-x: var(--oh-spacing-2-5);
341
+ --oh-badge-base-padding-y: var(--oh-spacing-1);
342
+ --oh-badge-variant-neutral-background: var(--oh-color-warm-parchment);
343
+ --oh-button-base-font-family: var(--oh-typography-label-font-family);
344
+ --oh-button-base-transition-duration: var(--oh-motion-snappy);
345
+ --oh-button-base-transition-easing: var(--oh-motion-ease-playful);
346
+ --oh-button-variant-primary-background: var(--oh-color-brand-primary);
347
+ --oh-button-variant-primary-background-hover: var(--oh-color-brand-primary-hover);
348
+ --oh-button-variant-primary-background-active: var(--oh-color-brand-primary-active);
349
+ --oh-button-variant-primary-color: var(--oh-color-surface-white);
350
+ --oh-button-variant-primary-border-color: var(--oh-color-brand-primary);
351
+ --oh-button-variant-primary-shadow-color: var(--oh-shadow-primary);
352
+ --oh-button-variant-secondary-background: var(--oh-color-surface-base);
353
+ --oh-button-variant-secondary-background-hover: var(--oh-color-surface-white);
354
+ --oh-button-variant-secondary-color: var(--oh-color-text-primary);
355
+ --oh-button-variant-secondary-border-color: var(--oh-color-border-emphasis);
356
+ --oh-button-variant-secondary-shadow-color: var(--oh-shadow-secondary);
357
+ --oh-button-variant-accent-background: var(--oh-color-accent-default);
358
+ --oh-button-variant-accent-background-hover: var(--oh-color-accent-hover);
359
+ --oh-button-variant-accent-background-active: var(--oh-color-accent-active);
360
+ --oh-button-variant-accent-color: var(--oh-color-surface-white);
361
+ --oh-button-variant-accent-border-color: var(--oh-color-accent-default);
362
+ --oh-button-variant-accent-shadow-color: var(--oh-color-accent-shadow);
363
+ --oh-input-base-transition-duration: var(--oh-motion-snappy);
364
+ --oh-input-base-transition-easing: var(--oh-motion-ease-gentle);
365
+ --oh-input-state-default-background: var(--oh-color-surface-base);
366
+ --oh-input-state-default-border-color: var(--oh-color-border-emphasis); /** WCAG 3:1 contrast for UI elements */
367
+ --oh-input-state-default-color: var(--oh-color-text-primary);
368
+ --oh-input-state-default-placeholder-color: var(--oh-color-text-secondary); /** WCAG readable placeholder */
369
+ --oh-input-state-default-shadow-color: var(--oh-shadow-secondary);
370
+ --oh-input-state-hover-border-color: var(--oh-color-border-hover);
371
+ --oh-input-state-focus-background: var(--oh-color-surface-white);
372
+ --oh-input-state-focus-border-color: var(--oh-color-border-focus);
373
+ --oh-input-state-focus-focus-ring-color: var(--oh-color-border-focus-inner);
374
+ --oh-input-state-error-border-color: var(--oh-color-feedback-error);
375
+ --oh-input-state-error-background: var(--oh-color-feedback-error-subtle);
376
+ --oh-input-state-error-shadow-color: var(--oh-shadow-error);
377
+ --oh-card-base-background: var(--oh-color-surface-raised);
378
+ --oh-card-base-border-radius: var(--oh-shape-container);
379
+ --oh-card-base-border-color: var(--oh-color-border-default);
380
+ --oh-card-base-shadow: var(--oh-elevation-soft);
381
+ --oh-card-interactive-transition-duration: var(--oh-motion-gentle);
382
+ --oh-card-interactive-transition-easing: var(--oh-motion-ease-gentle);
383
+ --oh-card-interactive-shadow-hover: var(--oh-elevation-medium);
384
+ --oh-card-sunlit-shadow: var(--oh-elevation-medium);
385
+ --oh-badge-base-border-radius: var(--oh-shape-pill);
386
+ --oh-badge-variant-brand-background: var(--oh-color-brand-primary-subtle);
387
+ --oh-badge-variant-brand-color: var(--oh-color-brand-primary);
388
+ --oh-badge-variant-accent-background: var(--oh-color-accent-subtle);
389
+ --oh-badge-variant-accent-color: var(--oh-color-accent-default);
390
+ --oh-badge-variant-success-background: var(--oh-color-feedback-success-subtle);
391
+ --oh-badge-variant-success-color: var(--oh-color-feedback-success);
392
+ --oh-badge-variant-error-background: var(--oh-color-feedback-error-subtle);
393
+ --oh-badge-variant-error-color: var(--oh-color-feedback-error);
394
+ --oh-badge-variant-warning-background: var(--oh-color-feedback-warning-subtle);
395
+ --oh-badge-variant-warning-color: var(--oh-color-feedback-warning);
396
+ --oh-badge-variant-neutral-color: var(--oh-color-text-secondary);
397
+ --oh-link-color: var(--oh-color-text-link);
398
+ --oh-link-color-hover: var(--oh-color-text-link-hover);
399
+ }