comparison design_system/src/styles/themes.css @ 258:60a876c4587a

[ui] Add semantic primitive ownership Build a layered Zenbu token and sizing system, make authored controls use native-underneath primitives, migrate mrjunejune without imposing visual surfaces, and document/enforce HTML ownership in the catalog and wiki. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Wed, 05 Aug 2026 05:25:40 -0700
parents 30c2196d03d4
children 667156fcd3e3
comparison
equal deleted inserted replaced
257:609d3c6aff4e 258:60a876c4587a
16 --zen-color-info: var(--zen-color-blue-600); 16 --zen-color-info: var(--zen-color-blue-600);
17 --zen-color-success: var(--zen-color-green-600); 17 --zen-color-success: var(--zen-color-green-600);
18 --zen-color-warning: var(--zen-color-orange-600); 18 --zen-color-warning: var(--zen-color-orange-600);
19 --zen-color-danger: var(--zen-color-red-600); 19 --zen-color-danger: var(--zen-color-red-600);
20 --zen-color-focus: var(--zen-color-violet-600); 20 --zen-color-focus: var(--zen-color-violet-600);
21 --zen-font-sans: var(
22 --zen-font-editorial,
23 ui-rounded,
24 system-ui,
25 sans-serif
26 );
27 } 21 }
28 22
29 :root[data-zen-theme="ink"] { 23 :root[data-zen-theme="ink"] {
30 color-scheme: dark; 24 color-scheme: dark;
31 --zen-color-canvas: var(--zen-color-neutral-950); 25 --zen-color-canvas: var(--zen-color-neutral-950);
50 --zen-color-on-warning: var(--zen-color-neutral-950); 44 --zen-color-on-warning: var(--zen-color-neutral-950);
51 --zen-color-on-danger: var(--zen-color-neutral-950); 45 --zen-color-on-danger: var(--zen-color-neutral-950);
52 --zen-color-focus: var(--zen-color-violet-300); 46 --zen-color-focus: var(--zen-color-violet-300);
53 --zen-color-on-accent: var(--zen-color-neutral-950); 47 --zen-color-on-accent: var(--zen-color-neutral-950);
54 --zen-color-text-inverse: var(--zen-color-neutral-950); 48 --zen-color-text-inverse: var(--zen-color-neutral-950);
55 --zen-font-sans: var(
56 --zen-font-editorial,
57 ui-rounded,
58 system-ui,
59 sans-serif
60 );
61 } 49 }
62 50
63 :root[data-zen-theme="playful"] { 51 :root[data-zen-theme="playful"] {
64 color-scheme: light; 52 color-scheme: light;
65 --zen-color-canvas: var(--zen-color-rose-100); 53 --zen-color-canvas: var(--zen-color-rose-100);
81 --zen-color-danger: var(--zen-color-rose-600); 69 --zen-color-danger: var(--zen-color-rose-600);
82 --zen-color-on-success: var(--zen-color-neutral-50); 70 --zen-color-on-success: var(--zen-color-neutral-50);
83 --zen-color-on-warning: var(--zen-color-neutral-50); 71 --zen-color-on-warning: var(--zen-color-neutral-50);
84 --zen-color-focus: var(--zen-color-violet-500); 72 --zen-color-focus: var(--zen-color-violet-500);
85 --zen-color-on-accent: var(--zen-color-blue-950); 73 --zen-color-on-accent: var(--zen-color-blue-950);
86 --zen-font-sans: var(
87 --zen-font-playful,
88 ui-rounded,
89 system-ui,
90 sans-serif
91 );
92 --zen-radius-sm: 0.65rem; 74 --zen-radius-sm: 0.65rem;
93 --zen-radius-md: 1rem; 75 --zen-radius-md: 1rem;
94 --zen-radius-lg: 1.5rem; 76 --zen-radius-lg: 1.5rem;
95 } 77 }
78
79 :root[data-zen-theme="paper"] {
80 --zenbu-sys-font-family-ui: var(
81 --zenbu-font-editorial,
82 var(--zenbu-ref-font-family-sans)
83 );
84 --zenbu-sys-font-family-content: var(--zenbu-sys-font-family-ui);
85 --zenbu-sys-color-surface-page: var(--zenbu-ref-color-neutral-100);
86 --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-neutral-100);
87 --zenbu-sys-color-surface-default: var(--zenbu-ref-color-neutral-50);
88 --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-neutral-200);
89 --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-50);
90 --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-neutral-200);
91 --zenbu-sys-color-text-primary: var(--zenbu-ref-color-neutral-950);
92 --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-neutral-700);
93 --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-neutral-500);
94 --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-neutral-300);
95 --zenbu-sys-color-border-default: var(--zenbu-ref-color-neutral-500);
96 --zenbu-sys-color-border-strong: var(--zenbu-ref-color-neutral-800);
97 --zenbu-sys-color-action-primary-background: var(--zenbu-ref-color-amber-300);
98 --zenbu-sys-color-action-primary-background-hover: var(--zenbu-ref-color-amber-100);
99 --zenbu-sys-color-action-primary-background-pressed: var(--zenbu-ref-color-warning-600);
100 --zenbu-sys-color-action-primary-foreground: var(--zenbu-ref-color-neutral-950);
101 --zenbu-sys-color-text-link: var(--zenbu-ref-color-brand-600);
102 --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-focus);
103 }
104
105 :root[data-zen-theme="ink"],
106 :root[data-zen-theme="dark"] {
107 --zenbu-sys-font-family-ui: var(
108 --zenbu-font-editorial,
109 var(--zenbu-ref-font-family-sans)
110 );
111 --zenbu-sys-font-family-content: var(--zenbu-sys-font-family-ui);
112 --zenbu-sys-color-surface-page: var(--zenbu-ref-color-neutral-950);
113 --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-neutral-950);
114 --zenbu-sys-color-surface-default: var(--zenbu-ref-color-neutral-900);
115 --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-neutral-800);
116 --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-800);
117 --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-neutral-950);
118 --zenbu-sys-color-text-primary: var(--zenbu-ref-color-neutral-50);
119 --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-neutral-300);
120 --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-neutral-400);
121 --zenbu-sys-color-text-inverse: var(--zenbu-ref-color-neutral-950);
122 --zenbu-sys-color-text-link: var(--zenbu-ref-color-brand-300);
123 --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-neutral-700);
124 --zenbu-sys-color-border-default: var(--zenbu-ref-color-neutral-600);
125 --zenbu-sys-color-border-strong: var(--zenbu-ref-color-neutral-200);
126 --zenbu-sys-color-action-primary-background: var(--zenbu-ref-color-amber-300);
127 --zenbu-sys-color-action-primary-background-hover: var(--zenbu-ref-color-amber-100);
128 --zenbu-sys-color-action-primary-background-pressed: var(--zenbu-ref-color-warning-600);
129 --zenbu-sys-color-action-primary-foreground: var(--zenbu-ref-color-neutral-950);
130 --zenbu-sys-color-action-danger-background: var(--zenbu-ref-color-danger-300);
131 --zenbu-sys-color-action-danger-background-hover: var(--zenbu-ref-color-danger-500);
132 --zenbu-sys-color-action-danger-background-pressed: var(--zenbu-ref-color-danger-600);
133 --zenbu-sys-color-action-danger-foreground: var(--zenbu-ref-color-neutral-950);
134 --zenbu-sys-color-focus-inner: var(--zenbu-ref-color-neutral-950);
135 --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-neutral-50);
136 --zenbu-sys-color-info-background: var(--zenbu-ref-color-neutral-800);
137 --zenbu-sys-color-info-foreground: var(--zenbu-ref-color-brand-300);
138 --zenbu-sys-color-success-background: var(--zenbu-ref-color-neutral-800);
139 --zenbu-sys-color-success-foreground: var(--zenbu-ref-color-success-300);
140 --zenbu-sys-color-warning-background: var(--zenbu-ref-color-neutral-800);
141 --zenbu-sys-color-warning-foreground: var(--zenbu-ref-color-warning-300);
142 --zenbu-sys-color-danger-background: var(--zenbu-ref-color-neutral-800);
143 --zenbu-sys-color-danger-foreground: var(--zenbu-ref-color-danger-300);
144 }
145
146 :root[data-zen-theme="playful"] {
147 --zenbu-sys-font-family-ui: var(
148 --zenbu-font-playful,
149 var(--zenbu-ref-font-family-sans)
150 );
151 --zenbu-sys-font-family-content: var(--zenbu-sys-font-family-ui);
152 --zenbu-sys-color-surface-page: var(--zenbu-ref-color-rose-100);
153 --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-rose-100);
154 --zenbu-sys-color-surface-default: var(--zenbu-ref-color-amber-50);
155 --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-orange-100);
156 --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-50);
157 --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-violet-100);
158 --zenbu-sys-color-text-primary: var(--zenbu-ref-color-blue-900);
159 --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-violet-700);
160 --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-blue-600);
161 --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-rose-300);
162 --zenbu-sys-color-border-default: var(--zenbu-ref-color-violet-500);
163 --zenbu-sys-color-border-strong: var(--zenbu-ref-color-violet-700);
164 --zenbu-sys-color-action-primary-background: var(--zenbu-ref-color-orange-300);
165 --zenbu-sys-color-action-primary-background-hover: var(--zenbu-ref-color-amber-300);
166 --zenbu-sys-color-action-primary-background-pressed: var(--zenbu-ref-color-warning-600);
167 --zenbu-sys-color-action-primary-foreground: var(--zenbu-ref-color-blue-950);
168 --zenbu-sys-color-text-link: var(--zenbu-ref-color-blue-600);
169 --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-violet-500);
170 --zenbu-sys-radius-control-small: var(--zenbu-ref-radius-2);
171 --zenbu-sys-radius-control: var(--zenbu-ref-radius-4);
172 --zenbu-sys-radius-container: var(--zenbu-ref-radius-5);
173 }
174
175 @media (prefers-color-scheme: dark) {
176 :root:not([data-zen-theme]) {
177 --zenbu-sys-color-surface-page: var(--zenbu-ref-color-neutral-950);
178 --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-neutral-950);
179 --zenbu-sys-color-surface-default: var(--zenbu-ref-color-neutral-900);
180 --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-neutral-800);
181 --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-800);
182 --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-neutral-950);
183 --zenbu-sys-color-text-primary: var(--zenbu-ref-color-neutral-50);
184 --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-neutral-300);
185 --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-neutral-400);
186 --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-neutral-700);
187 --zenbu-sys-color-border-default: var(--zenbu-ref-color-neutral-600);
188 --zenbu-sys-color-border-strong: var(--zenbu-ref-color-neutral-200);
189 --zenbu-sys-color-text-link: var(--zenbu-ref-color-brand-300);
190 --zenbu-sys-color-focus-inner: var(--zenbu-ref-color-neutral-950);
191 --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-neutral-50);
192 }
193 }
194
195 @media (forced-colors: active) {
196 :root,
197 :root[data-zen-theme],
198 :root:not([data-zen-theme]) {
199 --zenbu-sys-color-surface-page: Canvas;
200 --zenbu-sys-color-surface-canvas: Canvas;
201 --zenbu-sys-color-surface-default: Canvas;
202 --zenbu-sys-color-surface-subtle: Canvas;
203 --zenbu-sys-color-surface-raised: Canvas;
204 --zenbu-sys-color-surface-overlay: Canvas;
205 --zenbu-sys-color-surface-sunken: Canvas;
206 --zenbu-sys-color-text-primary: CanvasText;
207 --zenbu-sys-color-text-secondary: CanvasText;
208 --zenbu-sys-color-text-tertiary: GrayText;
209 --zenbu-sys-color-text-disabled: GrayText;
210 --zenbu-sys-color-text-link: LinkText;
211 --zenbu-sys-color-border-subtle: CanvasText;
212 --zenbu-sys-color-border-default: CanvasText;
213 --zenbu-sys-color-border-strong: CanvasText;
214 --zenbu-sys-color-action-primary-background: Highlight;
215 --zenbu-sys-color-action-primary-background-hover: Highlight;
216 --zenbu-sys-color-action-primary-background-pressed: Highlight;
217 --zenbu-sys-color-action-primary-foreground: HighlightText;
218 --zenbu-sys-color-action-primary-border: Highlight;
219 --zenbu-sys-color-focus-inner: Canvas;
220 --zenbu-sys-color-focus-outer: CanvasText;
221 --zenbu-sys-shadow-subtle: none;
222 --zenbu-sys-shadow-raised: none;
223 --zenbu-sys-shadow-overlay: none;
224 --zenbu-sys-shadow-dialog: none;
225 }
226 }