Primitive, status badges, AI-aware micro, safety banners, avatars. Tutto ciò che attraversa l'intera app e non può variare da una pagina all'altra.
6 intent canonici × 4 size × stati hover/focus/loading/disabled. Il primary vira a --domain-color in hover quando un dominio è attivo.
primary · default · outline · ghost · success · destructive
Hover primary → vira a oklch(0.58 0.18 217). Soft = --domain-soft.
Sempre aria-label. Default --bg-3.
Input shape coerente con i bottoni — stessi raggi, stessa altezza (36px default). Focus ring colorato per dominio.
default · with-prefix + suffix · error · disabled
Stati: empty · checked · indeterminate · on · off
I 5 colori stage-* sono il vocabolario unico di stato. gray=idle · blue=in-progress · amber=warning · emerald=success · rose=error/lost.
Ogni testo generato porta un EngineBadge con tooltip ricca su confidence, tokens, costo, latenza, modello. Indigo è la tinta neutra dell'AI.
Il mittente dice "interessante ma ora non ho budget, riparliamo a settembre" — segnale positivo posticipato, non rifiuto.
SafetyGateBanner è persistente quando EMAIL_SEND_MODE != live o LLM_CALL_MODE != live. Mai in produzione live.
Avatar in fallback usano iniziali in Fraunces. Variant with-mesh prende --domain-soft + --domain-color quando una scope è attiva.