Orochia UI — Fondations
La palette, les deux modes et leurs contrastes, les tokens produit, la typographie, les icônes et les règles produit — lus dans les tokens du kit à chaque build.
Obsidian Velvet Noir. Dark-first obsidian surfaces, a velvet violet accent and a sensual magenta second accent, with Outfit for display. The light theme, Luminous Ivory, is first-class. A theme is a set of token values: theme.css overrides the --kz-* roles of @krizaka/tokens, so every @krizaka/ui primitive wears Orochia without a class of its own.
Palette
Chaque rôle tel qu'une app le résout : la plateforme, puis la marque, puis le kit. Les rôles que le produit fixe sont signalés.
| Rôle | Obsidian Velvet Noir | Luminous Ivory | Fixé par |
|---|---|---|---|
--kz-surface-0Obsidian: the page, near-black with a blue cast. | #060709 | #f8fafc | |
--kz-surface-1Panels and cards on the page. | #0c0e14 | #ffffff | |
--kz-surface-2Raised surfaces: inputs, menus, a card's footer. | #121520 | #f1f1f3 | |
--kz-surface-3The highest surface: hovered rows, chips. | #1a1e2c | #e4e4e7 | |
--kz-border-defaultCard and input edges, tinted towards the obsidian. | #1f2438 | hsl(240 6% 0% / 0.10) | |
--kz-text-primary | #f5f5f5 | #18181b | |
--kz-text-secondary | #a0a0a7 | #64646d | |
--kz-text-muted | #73737d | #808089 | |
--kz-accentVelvet violet: the primary action, the active state, links. | #7c3aed | #7c3aed | |
--kz-accent-hoverThe accent under the pointer: deeper. | #6d28d9 | #6d28d9 | |
--kz-accent-softA violet wash behind an active item. | rgb(139 92 246 / 0.12) | rgb(124 58 237 / 0.08) | |
--kz-accent-text | #a78bfa | #6d28d9 | |
--kz-accent-2Sensual magenta: the second stop of the signature gradient (`from-accent to-accent-2`). | #db2777 | #db2777 | |
--kz-on-accent | #ffffff | #ffffff | |
--kz-ringThe focus ring: a light violet that stands out on obsidian. | #a78bfa | #7c3aed | |
--kz-success | #10b77f | #10b77f | |
--kz-warning | #f59f0a | #f59f0a | |
--kz-danger | #ef4343 | #ef4343 | |
--kz-info | #7c3aed | #7c3aed |
Contrastes
Les paires que tout thème Krizaka respecte (WCAG 2.2) : le texte sur chaque surface, le texte sur l'accent, l'accent en texte, l'anneau de focus.
| Paire | Sombre | Clair | Minimum |
|---|---|---|---|
text-primary sur surface-0 | 18.48:1Conforme AA | 16.93:1Conforme AA | 4.5:1 |
text-secondary sur surface-0 | 7.75:1Conforme AA | 5.60:1Conforme AA | 4.5:1 |
text-muted sur surface-0 | 4.30:1Conforme AA | 3.74:1Conforme AA | 3:1 |
accent-text sur surface-0 | 7.40:1Conforme AA | 6.79:1Conforme AA | 4.5:1 |
text-primary sur surface-1 | 17.70:1Conforme AA | 17.72:1Conforme AA | 4.5:1 |
text-secondary sur surface-1 | 7.42:1Conforme AA | 5.86:1Conforme AA | 4.5:1 |
text-muted sur surface-1 | 4.11:1Conforme AA | 3.91:1Conforme AA | 3:1 |
accent-text sur surface-1 | 7.09:1Conforme AA | 7.10:1Conforme AA | 4.5:1 |
text-primary sur surface-2 | 16.69:1Conforme AA | 15.71:1Conforme AA | 4.5:1 |
text-secondary sur surface-2 | 7.00:1Conforme AA | 5.19:1Conforme AA | 4.5:1 |
text-muted sur surface-2 | 3.88:1Conforme AA | 3.47:1Conforme AA | 3:1 |
accent-text sur surface-2 | 6.69:1Conforme AA | 6.30:1Conforme AA | 4.5:1 |
text-primary sur surface-3 | 15.21:1Conforme AA | 13.96:1Conforme AA | 4.5:1 |
text-secondary sur surface-3 | 6.38:1Conforme AA | 4.62:1Conforme AA | 4.5:1 |
text-muted sur surface-3 | 3.54:1Conforme AA | 3.08:1Conforme AA | 3:1 |
accent-text sur surface-3 | 6.10:1Conforme AA | 5.60:1Conforme AA | 4.5:1 |
on-accent sur accent | 5.70:1Conforme AA | 5.70:1Conforme AA | 4.5:1 |
on-accent sur accent-hover | 7.10:1Conforme AA | 7.10:1Conforme AA | 4.5:1 |
on-accent sur accent-2 | 4.60:1Conforme AA | 4.60:1Conforme AA | 4.5:1 |
ring sur surface-0 | 7.40:1Conforme AA | 5.45:1Conforme AA | 3:1 |
Tokens produit
Ce que les rôles ne savent pas dire, préfixé du nom du produit — jamais générique.
| Token | Valeur | Usage |
|---|---|---|
--orochia-story-ring | linear-gradient(135deg, var(--kz-accent), var(--kz-accent-2)) | The ring around a creator's avatar when they have a story — `bg-story-ring`. |
--orochia-glow-accent | 0 0 25px -5px color-mix(in oklab, var(--kz-accent) 40%, transparent) | A violet glow under a featured card — `shadow-glow-primary`. |
--orochia-glow-accent-2 | 0 0 25px -5px color-mix(in oklab, var(--kz-accent-2) 40%, transparent) | A magenta glow, for the second accent — `shadow-glow-accent`. |
Typographie
| Rôle | Famille | Token | Usage |
|---|---|---|---|
| Display | Outfit | --kz-font-display | Headings, prices, counters — set by theme.css. |
| Body | Plus Jakarta Sans | --kz-font-sans | Interface and reading text — loaded by the web app (next/font, in the repository); the platform default is Inter. |
| Mono | JetBrains Mono | --kz-font-mono | Amounts aligned in tables, codes — the platform's. |
Icônes et marques
OrochiaLogo(@krizaka/ui) — The brand mark — the serpent and the flame, animated; never a placeholder icon. It stops under reduced motion.@krizaka/icons(@krizaka/icons) — Every interface icon (<Name>Icon, the Krizaka signature);lucide-reactis being retired screen by screen.SocialIcon(@krizaka/orochia-design-system) — The networks a creator links from their profile.
Règles produit
Ce que chaque écran du produit respecte — chaque règle citée depuis le contrat qui l'énonce.
- Never "live"Orochia has no live streaming: no screen, badge or message says "live". An auction is open, a challenge takes pledges —
StatusBadgereplacedLiveBadgefor that reason.orochia-design-system AGENTS.md §3 - 18+, checked by the serverThe date of birth is checked 18+ by the server at registration; adult ratings are veiled for visitors whose age the server has not checked; only verified creators upload.Orochia AGENTS.md §3 (absolute invariants)
- The address is the stateEvery place a person can be is a URL they can copy, share and reload: tabs, settings sections, filters, detail views. Tabs are links — never
useStatealone.Orochia AGENTS.md §6 - Quick actions where the thing is shownEdit a photo on the photo, a cover on the cover, a title on the title. Settings pages are for preferences.Orochia AGENTS.md §6
- Words come from the appComponents take their words as props; every string lives in the app's messages. Destructive actions confirm with a second tap (
ConfirmButton), neverwindow.confirm.orochia-design-system AGENTS.md §3 - Roles only, both themesNo raw palette colour, no
light:/dark:, no[var(--…)]: surfaces, text and accents use the roles, which change with the theme. Every hover and focus reads in both themes.Orochia AGENTS.md §6
React Native
The mobile app (Expo) takes the theme, not the components: nativeTheme is the @krizaka/tokens native roles with the Orochia overrides — the same values as theme.css (a test keeps them equal).
import { nativeTheme, gradientStops } from "@krizaka/orochia-design-system/tokens";
const t = nativeTheme[colorScheme === "light" ? "light" : "dark"];
// t.surface0, t.textPrimary, t.accent, t.accent2…