Mercurial
diff 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 |
line wrap: on
line diff
--- a/design_system/src/styles/themes.css Tue Aug 04 16:49:11 2026 -0700 +++ b/design_system/src/styles/themes.css Wed Aug 05 05:25:40 2026 -0700 @@ -18,12 +18,6 @@ --zen-color-warning: var(--zen-color-orange-600); --zen-color-danger: var(--zen-color-red-600); --zen-color-focus: var(--zen-color-violet-600); - --zen-font-sans: var( - --zen-font-editorial, - ui-rounded, - system-ui, - sans-serif - ); } :root[data-zen-theme="ink"] { @@ -52,12 +46,6 @@ --zen-color-focus: var(--zen-color-violet-300); --zen-color-on-accent: var(--zen-color-neutral-950); --zen-color-text-inverse: var(--zen-color-neutral-950); - --zen-font-sans: var( - --zen-font-editorial, - ui-rounded, - system-ui, - sans-serif - ); } :root[data-zen-theme="playful"] { @@ -83,13 +71,156 @@ --zen-color-on-warning: var(--zen-color-neutral-50); --zen-color-focus: var(--zen-color-violet-500); --zen-color-on-accent: var(--zen-color-blue-950); - --zen-font-sans: var( - --zen-font-playful, - ui-rounded, - system-ui, - sans-serif - ); --zen-radius-sm: 0.65rem; --zen-radius-md: 1rem; --zen-radius-lg: 1.5rem; } + +:root[data-zen-theme="paper"] { + --zenbu-sys-font-family-ui: var( + --zenbu-font-editorial, + var(--zenbu-ref-font-family-sans) + ); + --zenbu-sys-font-family-content: var(--zenbu-sys-font-family-ui); + --zenbu-sys-color-surface-page: var(--zenbu-ref-color-neutral-100); + --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-neutral-100); + --zenbu-sys-color-surface-default: var(--zenbu-ref-color-neutral-50); + --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-neutral-200); + --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-50); + --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-neutral-200); + --zenbu-sys-color-text-primary: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-neutral-700); + --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-neutral-500); + --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-neutral-300); + --zenbu-sys-color-border-default: var(--zenbu-ref-color-neutral-500); + --zenbu-sys-color-border-strong: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-action-primary-background: var(--zenbu-ref-color-amber-300); + --zenbu-sys-color-action-primary-background-hover: var(--zenbu-ref-color-amber-100); + --zenbu-sys-color-action-primary-background-pressed: var(--zenbu-ref-color-warning-600); + --zenbu-sys-color-action-primary-foreground: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-text-link: var(--zenbu-ref-color-brand-600); + --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-focus); +} + +:root[data-zen-theme="ink"], +:root[data-zen-theme="dark"] { + --zenbu-sys-font-family-ui: var( + --zenbu-font-editorial, + var(--zenbu-ref-font-family-sans) + ); + --zenbu-sys-font-family-content: var(--zenbu-sys-font-family-ui); + --zenbu-sys-color-surface-page: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-surface-default: var(--zenbu-ref-color-neutral-900); + --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-text-primary: var(--zenbu-ref-color-neutral-50); + --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-neutral-300); + --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-neutral-400); + --zenbu-sys-color-text-inverse: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-text-link: var(--zenbu-ref-color-brand-300); + --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-neutral-700); + --zenbu-sys-color-border-default: var(--zenbu-ref-color-neutral-600); + --zenbu-sys-color-border-strong: var(--zenbu-ref-color-neutral-200); + --zenbu-sys-color-action-primary-background: var(--zenbu-ref-color-amber-300); + --zenbu-sys-color-action-primary-background-hover: var(--zenbu-ref-color-amber-100); + --zenbu-sys-color-action-primary-background-pressed: var(--zenbu-ref-color-warning-600); + --zenbu-sys-color-action-primary-foreground: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-action-danger-background: var(--zenbu-ref-color-danger-300); + --zenbu-sys-color-action-danger-background-hover: var(--zenbu-ref-color-danger-500); + --zenbu-sys-color-action-danger-background-pressed: var(--zenbu-ref-color-danger-600); + --zenbu-sys-color-action-danger-foreground: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-focus-inner: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-neutral-50); + --zenbu-sys-color-info-background: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-info-foreground: var(--zenbu-ref-color-brand-300); + --zenbu-sys-color-success-background: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-success-foreground: var(--zenbu-ref-color-success-300); + --zenbu-sys-color-warning-background: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-warning-foreground: var(--zenbu-ref-color-warning-300); + --zenbu-sys-color-danger-background: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-danger-foreground: var(--zenbu-ref-color-danger-300); +} + +:root[data-zen-theme="playful"] { + --zenbu-sys-font-family-ui: var( + --zenbu-font-playful, + var(--zenbu-ref-font-family-sans) + ); + --zenbu-sys-font-family-content: var(--zenbu-sys-font-family-ui); + --zenbu-sys-color-surface-page: var(--zenbu-ref-color-rose-100); + --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-rose-100); + --zenbu-sys-color-surface-default: var(--zenbu-ref-color-amber-50); + --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-orange-100); + --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-50); + --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-violet-100); + --zenbu-sys-color-text-primary: var(--zenbu-ref-color-blue-900); + --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-violet-700); + --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-blue-600); + --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-rose-300); + --zenbu-sys-color-border-default: var(--zenbu-ref-color-violet-500); + --zenbu-sys-color-border-strong: var(--zenbu-ref-color-violet-700); + --zenbu-sys-color-action-primary-background: var(--zenbu-ref-color-orange-300); + --zenbu-sys-color-action-primary-background-hover: var(--zenbu-ref-color-amber-300); + --zenbu-sys-color-action-primary-background-pressed: var(--zenbu-ref-color-warning-600); + --zenbu-sys-color-action-primary-foreground: var(--zenbu-ref-color-blue-950); + --zenbu-sys-color-text-link: var(--zenbu-ref-color-blue-600); + --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-violet-500); + --zenbu-sys-radius-control-small: var(--zenbu-ref-radius-2); + --zenbu-sys-radius-control: var(--zenbu-ref-radius-4); + --zenbu-sys-radius-container: var(--zenbu-ref-radius-5); +} + +@media (prefers-color-scheme: dark) { + :root:not([data-zen-theme]) { + --zenbu-sys-color-surface-page: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-surface-canvas: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-surface-default: var(--zenbu-ref-color-neutral-900); + --zenbu-sys-color-surface-subtle: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-surface-raised: var(--zenbu-ref-color-neutral-800); + --zenbu-sys-color-surface-sunken: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-text-primary: var(--zenbu-ref-color-neutral-50); + --zenbu-sys-color-text-secondary: var(--zenbu-ref-color-neutral-300); + --zenbu-sys-color-text-tertiary: var(--zenbu-ref-color-neutral-400); + --zenbu-sys-color-border-subtle: var(--zenbu-ref-color-neutral-700); + --zenbu-sys-color-border-default: var(--zenbu-ref-color-neutral-600); + --zenbu-sys-color-border-strong: var(--zenbu-ref-color-neutral-200); + --zenbu-sys-color-text-link: var(--zenbu-ref-color-brand-300); + --zenbu-sys-color-focus-inner: var(--zenbu-ref-color-neutral-950); + --zenbu-sys-color-focus-outer: var(--zenbu-ref-color-neutral-50); + } +} + +@media (forced-colors: active) { + :root, + :root[data-zen-theme], + :root:not([data-zen-theme]) { + --zenbu-sys-color-surface-page: Canvas; + --zenbu-sys-color-surface-canvas: Canvas; + --zenbu-sys-color-surface-default: Canvas; + --zenbu-sys-color-surface-subtle: Canvas; + --zenbu-sys-color-surface-raised: Canvas; + --zenbu-sys-color-surface-overlay: Canvas; + --zenbu-sys-color-surface-sunken: Canvas; + --zenbu-sys-color-text-primary: CanvasText; + --zenbu-sys-color-text-secondary: CanvasText; + --zenbu-sys-color-text-tertiary: GrayText; + --zenbu-sys-color-text-disabled: GrayText; + --zenbu-sys-color-text-link: LinkText; + --zenbu-sys-color-border-subtle: CanvasText; + --zenbu-sys-color-border-default: CanvasText; + --zenbu-sys-color-border-strong: CanvasText; + --zenbu-sys-color-action-primary-background: Highlight; + --zenbu-sys-color-action-primary-background-hover: Highlight; + --zenbu-sys-color-action-primary-background-pressed: Highlight; + --zenbu-sys-color-action-primary-foreground: HighlightText; + --zenbu-sys-color-action-primary-border: Highlight; + --zenbu-sys-color-focus-inner: Canvas; + --zenbu-sys-color-focus-outer: CanvasText; + --zenbu-sys-shadow-subtle: none; + --zenbu-sys-shadow-raised: none; + --zenbu-sys-shadow-overlay: none; + --zenbu-sys-shadow-dialog: none; + } +}