Design-Tokens
Design-Tokens sind die semantischen Variablen, die alle visuellen Werte in der Anwendung tragen. Komponenten referenzieren sie; Themes überschreiben sie; nichts ist festkodiert.
Der Token-Vertrag
Jedes Token ist eine CSS-Custom-Property mit dem Präfix --st-, und jeder
Token-Name ist Teil des versionierten Vertrags in @neotavern/theme-sdk. Der
Host liefert Standardwerte für Hell- und Dunkelmodus, sodass jedes Token
immer aufgelöst wird, auch wenn ein Theme keines definiert.
Die kanonischen Token-Gruppen sind:
- Textfarben —
color-text-primary,color-text-secondary,color-text-muted,color-text-inverse,color-text-link. - Oberflächen —
color-surface-primary,color-surface-secondary,color-surface-tertiary,color-surface-overlay,color-surface-canvas,color-surface-elevated. - Akzent und Status —
color-accent,color-accent-hover,color-accent-text,color-accent-soft,color-accent-soft-text,color-border,color-border-strong,color-success,color-warning,color-danger,color-info. - Chat-Nachrichten-Markdown —
color-message-quote,color-message-emphasis,color-message-code,color-message-code-bg. - Typografie —
font-ui,font-mono,font-size-2xsbisfont-size-2xl,line-height-body,font-weight-normalbisfont-weight-bold. - Abstände —
space-2xsbisspace-3xl. - Radien und Rahmen —
radius-control,radius-card,radius-overlay,radius-panel,radius-round,radius-inset,border-width. - Elevation —
shadow-card,shadow-soft,shadow-focus,shadow-overlay. - Ebenen (Z-Index) —
layer-base,layer-raised,layer-panel,layer-plugin-overlay,layer-plugin-chrome,layer-dropdown,layer-modal,layer-notification. - Bewegung —
motion-duration-fast,motion-duration-normal,motion-duration-slow,motion-easing-standard,effect-glass-blur. - Steuerelementgrößen —
control-height,control-height-large,control-height-sm,control-height-xs,control-height-2xs,control-hit-min,switch-width,switch-height,switch-thumb-size,menu-min-width,dialog-max-width,dialog-max-height,textarea-min-height,spinner-size. - Panel- und Inhaltsgrößen —
size-panel-max-height,size-content-max-height,size-chat-column-max. - Ansichtsfenster-Limits —
overlay-width-limit,overlay-height-limit,dialog-sheet-height. - Scrollbalken —
scrollbar-width,scrollbar-radius,scrollbar-track-bg,scrollbar-thumb-bg,scrollbar-thumb-hover-bg,scrollbar-fade-duration,scrollbar-fade-easing,scrollbar-hide-delay. - App-Shell-Größen —
shell-rail-width,shell-panel-width,shell-panel-min-width,shell-panel-max-width. - Chat-Fläche —
chat-wallpaper-image,chat-wallpaper-position,chat-wallpaper-size,chat-wallpaper-overlay,chat-wallpaper-blur,custom-wallpaper-overlay-alpha. - Chat-Typografie-Metriken —
chat-markdown-column-width,chat-message-block,chat-message-inline. - Benutzerverstellbare Regler —
custom-glass-blur,custom-ui-opacity.
Tokens überschreiben
Ein Theme überschreibt eine beliebige Teilmenge der Namen. Werte werden
validiert: Sie müssen sichere, nicht leere CSS-Werte sein, und Konstrukte
wie {, } und ; werden abgelehnt.
{
"tokens": {
"dark": {
"color-accent": "#e38a62",
"shadow-card": "0 1px 2px rgba(0, 0, 0, 0.35)"
}
}
}
Wenn der Benutzer einen Chat-Hintergrund wählt, setzt die Anwendung eine bereichsgebundene Custom-Property für das Wallpaper-Bild auf der Arbeitsbereich-Wurzel; Position, Größe, Overlay und Unschärfe bleiben die Tokens des Themes.
Auflösungsregeln
Tokens werden in dieser Reihenfolge aufgelöst, wobei spätere gewinnen:
- Integrierte Standardwerte für den aktiven Modus.
- Die Eltern-Theme-Kette, Wurzel zuerst.
- Das Theme selbst.
Der Dunkelmodus fällt auf die Hell-Tokens des Themes zurück, wenn keine
Dunkel-Überschreibung existiert, sodass ein nur-helles Theme auch im
Dunkelmodus funktioniert. Die Funktionen resolveTokens und
buildThemeVariables in @neotavern/theme-sdk implementieren das, und der Host
schreibt das Ergebnis als CSS-Variablen auf document.documentElement.
Was Komponenten nicht festkodieren dürfen
Der Stilvertrag verbietet festkodierte Werte überall in der integrierten Oberfläche, und dieselben Regeln gelten für das, worauf ein Theme sich nicht verlassen darf:
- Numerisches
font-weight,font-sizein px und rohesborder-radiusin px. - Numerische
z-index-Werte — verwenden Sie dielayer-*-Tokens. - Steuerelementgrößen wie
40px,44px,52px,32pxund36px. !importantin Theme-CSS, außer in der Ebene für Barrierefreiheitspräferenzen.- Layout-Regeln: Koordinaten, Grid- und Flex-Schemata, Breakpoints und
Bereichsreihenfolge sind nicht Teil des Token-Vertrags. Breakpoints
kommen aus dem Registry (
VIEWPORT_BREAKPOINTSundCONTAINER_BREAKPOINTS), und das Verschieben von Shell-Bereichen liegt außerhalb des Rahmens von v1.
Inhaltsgeometrie wie das Grid-Schema von Kartenlisten ist eine explizite
Ausnahme: Sie wird nicht vom Token-Vertrag abgedeckt. Alles, was ein Theme
zum Umgestalten braucht, ist über Tokens, Hooks und das deklarative
Shell-Layout verfügbar. Die generierte
Theme-SDK-Referenz dokumentiert die exakte
TokenName-Liste.