Krizaka
Documentation

Orazaka UI — Foundations

The palette, both modes and their contrasts, the product tokens, the typography, the icons and the product rules — read from the kit's tokens at every build.

Orazaka Orange. Calm obsidian surfaces — the platform's, the krizaka.com values — and the orange of the Orazaka mark as the accent, from the Orazaka brand of @krizaka/tokens. Five named themes sit beside it, orthogonal to dark and light. A theme is a set of token values: theme.css overrides the --kz-* roles, so every @krizaka/ui primitive wears Orazaka without a class of its own.

Palette

Every role as an app resolves it: the platform, then the brand, then the kit. The roles the product sets are marked.

RoleOrazaka Orange — darkOrazaka Orange — lightSet by
--kz-surface-0#0c0c0e#fafafaPlatform
--kz-surface-1#161618#ffffffPlatform
--kz-surface-2#1f1f23#f1f1f3Platform
--kz-surface-3#2a2a2d#e4e4e7Platform
--kz-border-defaulthsl(0 0% 100% / 0.10)hsl(240 6% 0% / 0.10)Platform
--kz-text-primary#f5f5f5#18181bPlatform
--kz-text-secondary#a0a0a7#64646dPlatform
--kz-text-muted#73737d#808089Platform
--kz-accentThe Orazaka orange: primary actions, the active state, the sent bubble.#f67e23#b45309Brand
--kz-accent-hoverThe accent under the pointer.#f79245#964608Brand
--kz-accent-softAn orange wash behind an active item or a pipeline chip.hsl(26 92% 55% / 0.12)hsl(26 90.5% 37.1% / 0.08)Brand
--kz-accent-textThe orange as text: links, active labels — AA on every surface.#f78c3b#9b4808Brand
--kz-accent-2The second stop of the buttons' gradient.#f59e0b#a45904Brand
--kz-on-accentText on the accent: near-black in dark, white in light.#0c0c0e#ffffffBrand
--kz-ringThe focus ring, in the accent.#f67e23#b45309Brand
--kz-success#10b77f#10b77fPlatform
--kz-warning#f59f0a#f59f0aPlatform
--kz-danger#ef4343#ef4343Platform
--kz-infoBlue, not orange: an orange "info" would read as a warning.#3b83f7#0a64f5Brand

Contrasts

The pairs every Krizaka theme is held to (WCAG 2.2): text on every surface, text on the accent, the accent as text, the focus ring.

PairDarkLightMinimum
text-primary on surface-017.93:1Passes AA16.97:1Passes AA4.5:1
text-secondary on surface-07.52:1Passes AA5.61:1Passes AA4.5:1
text-muted on surface-04.17:1Passes AA3.75:1Passes AA3:1
accent-text on surface-08.16:1Passes AA6.05:1Passes AA4.5:1
text-primary on surface-116.58:1Passes AA17.72:1Passes AA4.5:1
text-secondary on surface-16.95:1Passes AA5.86:1Passes AA4.5:1
text-muted on surface-13.85:1Passes AA3.91:1Passes AA3:1
accent-text on surface-17.55:1Passes AA6.32:1Passes AA4.5:1
text-primary on surface-215.07:1Passes AA15.71:1Passes AA4.5:1
text-secondary on surface-26.32:1Passes AA5.19:1Passes AA4.5:1
text-muted on surface-23.50:1Passes AA3.47:1Passes AA3:1
accent-text on surface-26.86:1Passes AA5.60:1Passes AA4.5:1
text-primary on surface-313.13:1Passes AA13.96:1Passes AA4.5:1
text-secondary on surface-35.51:1Passes AA4.62:1Passes AA4.5:1
text-muted on surface-33.05:1Passes AA3.08:1Passes AA3:1
accent-text on surface-35.98:1Passes AA4.98:1Passes AA4.5:1
on-accent on accent7.38:1Passes AA5.02:1Passes AA4.5:1
on-accent on accent-hover8.52:1Passes AA6.61:1Passes AA4.5:1
on-accent on accent-29.10:1Passes AA5.24:1Passes AA4.5:1
ring on surface-07.38:1Passes AA4.81:1Passes AA3:1

Named themes

Chosen by the person, orthogonal to dark and light: each one sets every role, so it reads the same in either mode. Live, with the kit's components.

  • Electric BlueAnswered locally3 contracts cited · 0 bytes left the network

    .theme-electric — The 2.x identity, kept for the users who chose it.

    20 of 20 pairs at AA · lowest 3.05:1

  • Deep VioletAnswered locally3 contracts cited · 0 bytes left the network

    .theme-custom — A violet night theme.

    20 of 20 pairs at AA · lowest 3.37:1

  • Neon MatrixAnswered locally3 contracts cited · 0 bytes left the network

    .theme-cyberpunk — Neon green text on violet black, magenta accent.

    20 of 20 pairs at AA · lowest 3.37:1

  • Warm ParchmentAnswered locally3 contracts cited · 0 bytes left the network

    .theme-solarized — A light theme on parchment surfaces.

    20 of 20 pairs at AA · lowest 3.36:1

  • Obsidian RazorAnswered locally3 contracts cited · 0 bytes left the network

    .theme-krizaka — Pitch-black surfaces, zero radius, a cold-steel accent.

    20 of 20 pairs at AA · lowest 3.34:1

Product tokens

What the roles cannot say, prefixed with the product's name — never generic.

TokenValueUse
--orazaka-grid-colorhsl(0 0% 100% / 0.02)The faint grid behind the console and the landing sections.
--orazaka-accent-glow0 0 0 3px color-mix(in oklab, var(--kz-accent) 12%, transparent)The soft accent halo around a focused composer or card.
--orazaka-space-cardclamp(1rem, 0.8rem + 0.8vw, 1.5rem)The fluid padding of a card.
--orazaka-space-sectionclamp(1.5rem, 1.2rem + 1.2vw, 2.5rem)The fluid gap between sections.

Type scale

--text-xsclamp(0.6875rem, 0.65rem + 0.15vw, 0.75rem)
--text-smclamp(0.8125rem, 0.77rem + 0.18vw, 0.875rem)
--text-baseclamp(0.875rem, 0.83rem + 0.2vw, 1rem)
--text-lgclamp(1.125rem, 1.05rem + 0.3vw, 1.25rem)
--text-xlclamp(1.5rem, 1.3rem + 0.8vw, 2rem)
--text-2xlclamp(1.75rem, 1.5rem + 1vw, 2.5rem)
--text-displayclamp(2rem, 1.6rem + 1.6vw, 3rem)
--text-primaryvar(--kz-text-primary)
--text-secondaryvar(--kz-text-secondary)
--text-mutedvar(--kz-text-muted)

Typography

RoleFamilyTokenUse
DisplayOutfit--kz-font-displayHeadings and figures (h1, h2, .text-display) — Krizaka Display when the app loads it.
BodyInter--kz-font-sansInterface and reading text.
MonoJetBrains Mono--kz-font-monoData tables, console nodes, prompt streams, model names.

Icons and marks

  • OrazakaLogo (@krizaka/ui) — The brand mark, in the brand's orange — never a placeholder icon.
  • Icon (@krizaka/orazaka-design-system) — The icon registry: every icon of an Orazaka screen, one typed name per concept; no app imports an icon library.
  • SentinelMini (@krizaka/orazaka-design-system) — The Sentinel, the guardian of the pipeline, at 24 px.

Product rules

What every screen of the product respects — each rule quoted from the contract that states it.

  • Sovereign by designLocal-first: AI inference runs on the organisation's machines, never in an unsolicited cloud; no network dependency is introduced without being asked. The showcases say it: answered locally, nothing left the network.Orazaka AGENTS.md §0 and §13
  • The browser never reaches the engineA web page never calls the router or the model runtime directly: all browser traffic goes through the app's server routes (the BFF).Orazaka AGENTS.md §8
  • A persona, not an adminExamples, showcases and recordings speak as a named person with a real need (Eric, finance lead), in a fictional but believable workspace — never an admin account or an internal label.orazaka-ui-kit AGENTS.md
  • Input locks while the engine worksText entry surfaces lock while sending or generating: textareas, menus, attachments and submit buttons are disabled (ERR-126).ui_standards §5
  • Every state, every sizeEvery interactive element has hover, active, focus and disabled states; mobile-first layouts with touch targets of at least 44 px; an aria-label on every icon-only button.ui_standards §1 and §3
  • No hard-coded words or coloursNo JSX text: every string comes from the translation dictionary (room for +30 % in French). Colours are roles: no inline hex, no palette class.ui_standards §1 and §3

React Native

The mobile app has its own React Native components and takes the same tokens from @krizaka/orazaka-shared — the Orazaka orange of @krizaka/tokens/native.

import { themes, tokens } from "@krizaka/orazaka-shared";

const t = themes[colorScheme === "light" ? "light" : "dark"];
// t.accent, t.surface1, t.textPrimary…

On this page