@krizaka/tokens 3.14.0 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/BRAND.md CHANGED
@@ -15,6 +15,8 @@ overrides). A product never re-invents its values: it imports its brand.
15
15
  | **Yasakia** (dating, talk first) | **Emerald → turquoise.** The accent is the turquoise (hue 174); the emerald (hue 152–156) is the mark's first stop and `accent-2`. | Green is the family's free colour and takes the opposite view of the red and pink of dating apps. `--kz-success` is emerald (hue 160): a primary button must never read as a success, so the accent sits 14° away on the turquoise (a test) and the emerald stays in the mark and the gradients. Dark: light turquoise under near-black text (11:1); light: deep turquoise under white (5.9:1). `info` stays blue. |
16
16
  | **Yororis** (a listening space) | **Sand → sage.** A warm neutral that slides into a soft grey green: calm. The accent is the sage (hue 98–100); the sand (hue 34–36) is the mark's first stop, the core's light and `accent-2`. | Apart from every other brand (Yasakia's emerald and turquoise, the blue, the orange, the violet) and from every status: the sage sits ≥ 60° from `--kz-success` (160) and `--kz-warning` (38). The sand shares the warning's hue family, so it is told apart by its chroma — at most half the warning's saturation (≤ 40 % vs 92 %, a test) — and it never fills a primary button alone. Dark: light sage under near-black text (8.6:1); light: deep sage under white (6.9:1). `info` stays blue. |
17
17
  | **Yomizaka** (documents, read and checked) | **Ink indigo** (藍, *ai*): the colour of writing and reading, a blue that leans to violet. The accent is the indigo (hue 240–242); the ink blue (hue 232) is the mark's first stop and `accent-2`. | The wheel is full, so the indigo is placed by test: ≥ 20° from the Krizaka blue (217, saturated) and from the Orochia violet (262, vivid), ≥ 60° from every other brand and every status. Dark: periwinkle under near-black text (6.3:1); light: deep indigo under white (8.7:1). `info` stays the Krizaka blue. |
18
+ | **Kachizaka** (predictions among friends, points only) | **Electric cobalt + victorious gold.** The **gold** (hue 48) carries the accent — the only gold of the family; the cobalt (hue 226) is `accent-2`, the section ground, the light theme's accent text and focus ring. | The cobalt alone is **not** distinct from the Krizaka blue (217: Δh 9°, OKLab ΔE 0.04 for the mark stop) — so it never leads; the pair does. Gold: ≥ 10° from warning (38), ≥ 20° from every brand accent (Orazaka 26 → 22°). Near-black text on gold and on cobalt in both themes (12.9:1 / 11.6:1 on the accent). `info` stays the Krizaka blue. |
19
+ | **Akinaza** (the shop OS, Québec) | **Laurentian forest green + warm copper.** The green (hue 130) carries the accent; the copper (hue 20–22, saturation ≤ 62 %) is `accent-2` and the mark's end. | Green ≥ 20° from Yororis' sage (98), Yasakia's emerald (152), success (160) and every accent. The copper sits 4–6° from Orazaka's orange but is a matte metal (≤ 65 % vs ≥ 90 %, a test) and never stands alone. Dark: light green under near-black (8.9:1); light: deep green under white (6.7:1). |
18
20
 
19
21
  ### Palette (the accent family)
20
22
 
@@ -99,9 +101,11 @@ after in Storybook, *Brand/Evolution*):
99
101
  | Yasakia | **Two voices**: two **solid** speech bubbles, mirrored, that overlap — the left a shade deeper, each tail pointing down and out. Where they overlap, what the two share once they have talked, is the bright core: a lens lit from above that breathes, set apart by a thin gap. The pair, two nodes, rides the dashed orbit. | New (3rd product, 2026-10). Emerald `hsl(156 92% 32%)` #079d61 → turquoise `hsl(178 90% 32%)` #089b96, mid-tones chosen so that every stop reads ≥ 3:1 on surfaces 0–2 in dark and light (a test): one mark for both themes. **2.9:** the first mark (a "Y" of two thin arms ending in heads) read as a plain thin "Y" at 16–24 px, weak next to Orochia; the bubbles are a filled glyph of Orochia's weight, readable in a nav chip, and say the product — talk first, both ways — without a heart. |
100
102
  | Yororis | **The hold**: two **filled** leaves — open hands — rise from one stem into a "Y" and cup a warm core that rests *inside* them (not on the junction): held, given room, listened to. A vein of light runs along each leaf (depth, like the serpent's scales); one node, the moment, rides the dashed orbit — it comes round, then it goes. The slowest breath of the family (4.2 s). | New (4th product, 2026-10). Chosen over a standing crane and a bowing crane (captures in the pull request): the only one that stays a clear "Y" with its core at 20 px. Sand `hsl(34 46% 44%)` #a4773d → sage `hsl(104 28% 42%)` #5d894d, every stop ≥ 3:1 on surfaces 0–2 in dark and light (a test); the core rises from the sand to a light sand #e6c993. |
101
103
  | Yomizaka | **The reading**: a **filled** page with the Krizaka cut at its upper-right corner, three lines of text in light, and a bright lens — the eye that reads — resting on its lower half, its handle running out of the page. A line of light scans the page from top to bottom (reading); one node, a page, rides the dashed orbit. | New (5th product, 2026-10). Ink `hsl(232 50% 55%)` #5362c6 → indigo `hsl(248 50% 58%)` #6d5ec9, every stop ≥ 3:1 on surfaces 0–2 in dark and light (a test); the lens is a pale indigo light. The cut corner is the house chamfer, so the page reads as Krizaka's at 20 px. |
104
+ | Kachizaka | **The sealed cup**: a filled trophy whose rim wears the Krizaka cut, two handles, a stem and a base; on the bowl a star in light — the seal of the scoring rules, locked at kick-off — breathes; one node, the ball, rides the orbit. | New (2026-10). Cobalt `hsl(226 80% 56%)` → gold `hsl(44 92% 33%)`, every stop ≥ 3:1 on surfaces 0–2 in dark and light (a test). Mascot: **the magpie** — it keeps the score (the falcon already watches: security). |
105
+ | Akinaza | **The open shop** (商い, *akinai*): a filled awning cut at its corner and scalloped, its stripes in light; the shop front, two windows and the open door — a warm light that breathes; one node, a coin, rides the orbit. | New (2026-10). Forest `hsl(140 48% 34%)` → copper `hsl(22 60% 46%)`, every stop ≥ 3:1 on surfaces 0–2 in dark and light (a test). Mascot: **the beaver**, the artisan — the flock's one figure without feathers. |
102
106
 
103
- Web: `KrizakaLogo`, `OrazakaLogo`, `OrochiaLogo`, `YasakiaLogo`, `YororisLogo`, `YomizakaLogo`, `ProductLogo id` (`@krizaka/ui`). Native: `KrizakaMark`,
104
- `OrazakaMark`, `OrochiaMark`, `YasakiaMark`, `YororisMark`, `YomizakaMark`, `ProductMark id` (`@krizaka/ui/native`). The geometry is shared
107
+ Web: `KrizakaLogo`, `OrazakaLogo`, `OrochiaLogo`, `YasakiaLogo`, `YororisLogo`, `YomizakaLogo`, `KachizakaLogo`, `AkinazaLogo`, `ProductLogo id` (`@krizaka/ui`). Native: `KrizakaMark`,
108
+ `OrazakaMark`, `OrochiaMark`, `YasakiaMark`, `YororisMark`, `YomizakaMark`, `KachizakaMark`, `AkinazaMark`, `ProductMark id` (`@krizaka/ui/native`). The geometry is shared
105
109
  (`packages/ui/src/marks/*-geometry.ts`); the emblem gradients are **brand tokens** — `$extensions["com.krizaka"].mark` of
106
110
  each `src/brands/<id>.brand.json`, exported as `marks.<id>` (`@krizaka/tokens`, `/native`) — read by the geometry, never
107
111
  copied. A mark is the same in both themes: its stops are chosen to read on dark and light pages.
package/README.md CHANGED
@@ -28,8 +28,8 @@ npm install @krizaka/tokens
28
28
  | `@krizaka/tokens/tokens.css` | Web (imported once, usually through `@krizaka/tailwind`) | The `--kz-*` custom properties. |
29
29
  | `@krizaka/tokens` | TS / JS on the web (canvas, charts, e-mails, inline styles) | `tokens` (`var(--kz-…)` references, camelCase keys), `values.dark` / `values.light` (raw CSS, aliases resolved), `TokenName`. |
30
30
  | `@krizaka/tokens/native` | React Native / Expo | `themes.dark` / `themes.light` (hex, `rgba()` when translucent), `radius` (dp), `typography`, `motion.ease`, type `Theme`; `brands.<id>` (ThemeProvider overrides); `marks.<id>` (the mark's emblem gradient, `[offset, #rrggbb]` stops). |
31
- | `@krizaka/tokens/brands/<id>.css` | A product app (`krizaka`, `orazaka`, `orochia`, `yasakia`, `yororis`, `yomizaka`), after the tokens | The brand's accent family and section gradient, dark and light. |
32
- | `@krizaka/tokens/brands/scoped.css` | A page showing several brands | `.brand-krizaka`, `.brand-orazaka`, `.brand-orochia`, `.brand-yasakia`, `.brand-yororis`, `.brand-yomizaka`. |
31
+ | `@krizaka/tokens/brands/<id>.css` | A product app (`krizaka`, `orazaka`, `orochia`, `yasakia`, `yororis`, `yomizaka`, `kachizaka`, `akinaza`), after the tokens | The brand's accent family and section gradient, dark and light. |
32
+ | `@krizaka/tokens/brands/scoped.css` | A page showing several brands | `.brand-krizaka`, `.brand-orazaka`, `.brand-orochia`, `.brand-yasakia`, `.brand-yororis`, `.brand-yomizaka`, `.brand-kachizaka`, `.brand-akinaza`. |
33
33
 
34
34
  **Brands:** one colour per brand, its marks, icons and page language are in [`BRAND.md`](./BRAND.md).
35
35
 
@@ -0,0 +1,46 @@
1
+ /* @krizaka/tokens — GÉNÉRÉ depuis src/brands/akinaza.brand.json par scripts/build.mjs : ne pas éditer.
2
+ Akinaza — le vert de la forêt laurentienne et le cuivre chaud. Le vert (130) porte l'accent : ≥ 20° de la sauge de Yororis (98), de l'émeraude de Yasakia (152), du statut succès (160) et de tous les accents (un test). Le cuivre (22) est le second temps (accent-2, le logo) : un métal mat, saturé à moins de 65 % — jamais l'orange vif d'Orazaka (26, 92 %), qu'il ne porte jamais seul. Dark : vert clair sous texte quasi noir ; light : vert profond sous texte blanc. info reste le bleu de Krizaka. Le logo est un dégradé forêt (140) → cuivre (22) de teinte moyenne, ≥ 3:1 sur les surfaces 0–2 des deux thèmes.
3
+ Importé après tokens.css (ou @krizaka/tailwind) : l'identité akinaza sur toute l'app, dans les deux thèmes. */
4
+
5
+ :root, .theme-dark {
6
+ --kz-accent: hsl(130 44% 58%);
7
+ --kz-accent-hover: hsl(130 48% 66%);
8
+ --kz-accent-soft: hsl(130 44% 58% / 0.12);
9
+ --kz-accent-text: hsl(130 50% 66%);
10
+ --kz-accent-2: hsl(22 62% 64%);
11
+ --kz-on-accent: hsl(140 20% 5%);
12
+ --kz-ring: var(--kz-accent);
13
+ --kz-info: hsl(217 92% 60%);
14
+ --kz-info-text: hsl(217 92% 68%);
15
+ --kz-brand-gradient-from: hsl(140 28% 9%);
16
+ --kz-brand-gradient-via: hsl(24 20% 8%);
17
+ --kz-brand-gradient-to: var(--kz-surface-0);
18
+ }
19
+
20
+ html.light {
21
+ --kz-accent: hsl(132 52% 27%);
22
+ --kz-accent-hover: hsl(132 55% 22%);
23
+ --kz-accent-soft: hsl(132 52% 27% / 0.08);
24
+ --kz-accent-text: hsl(132 52% 26%);
25
+ --kz-accent-2: hsl(20 62% 36%);
26
+ --kz-on-accent: hsl(0 0% 100%);
27
+ --kz-info: hsl(217 92% 50%);
28
+ --kz-info-text: hsl(217 92% 42%);
29
+ --kz-brand-gradient-from: hsl(130 45% 94%);
30
+ --kz-brand-gradient-via: hsl(26 60% 95%);
31
+ }
32
+
33
+ .theme-light {
34
+ --kz-accent: hsl(132 52% 27%);
35
+ --kz-accent-hover: hsl(132 55% 22%);
36
+ --kz-accent-soft: hsl(132 52% 27% / 0.08);
37
+ --kz-accent-text: hsl(132 52% 26%);
38
+ --kz-accent-2: hsl(20 62% 36%);
39
+ --kz-on-accent: hsl(0 0% 100%);
40
+ --kz-ring: var(--kz-accent);
41
+ --kz-info: hsl(217 92% 50%);
42
+ --kz-info-text: hsl(217 92% 42%);
43
+ --kz-brand-gradient-from: hsl(130 45% 94%);
44
+ --kz-brand-gradient-via: hsl(26 60% 95%);
45
+ --kz-brand-gradient-to: var(--kz-surface-0);
46
+ }
@@ -0,0 +1,47 @@
1
+ /* @krizaka/tokens — GÉNÉRÉ depuis src/brands/kachizaka.brand.json par scripts/build.mjs : ne pas éditer.
2
+ Kachizaka — le cobalt électrique et l'or de la victoire. L'or porte l'accent (boutons, sélection) : c'est la seule marque dorée de la famille (teinte 48, ≥ 10° du statut avertissement 38, ≥ 20° de l'orange d'Orazaka et de tous les autres accents — un test). Le cobalt (226) est le second temps : accent-2, le fond des sections, le texte d'accent en clair et l'anneau de focus en clair ; seul, il est trop proche du bleu de Krizaka (217, Δh 9°) pour porter l'identité — c'est le couple cobalt + or qui la porte. Texte quasi noir sur l'or et sur le cobalt, dans les deux thèmes. info reste le bleu de Krizaka. Le logo est un dégradé cobalt (226) → or (44) de teinte moyenne, ≥ 3:1 sur les surfaces 0–2 des deux thèmes.
3
+ Importé après tokens.css (ou @krizaka/tailwind) : l'identité kachizaka sur toute l'app, dans les deux thèmes. */
4
+
5
+ :root, .theme-dark {
6
+ --kz-accent: hsl(48 96% 56%);
7
+ --kz-accent-hover: hsl(48 98% 66%);
8
+ --kz-accent-soft: hsl(48 96% 56% / 0.12);
9
+ --kz-accent-text: hsl(48 96% 64%);
10
+ --kz-accent-2: hsl(226 92% 72%);
11
+ --kz-on-accent: hsl(230 30% 7%);
12
+ --kz-ring: hsl(48 96% 56%);
13
+ --kz-info: hsl(217 92% 60%);
14
+ --kz-info-text: hsl(217 92% 68%);
15
+ --kz-brand-gradient-from: hsl(226 42% 11%);
16
+ --kz-brand-gradient-via: hsl(232 26% 8%);
17
+ --kz-brand-gradient-to: var(--kz-surface-0);
18
+ }
19
+
20
+ html.light {
21
+ --kz-accent: hsl(48 96% 50%);
22
+ --kz-accent-hover: hsl(48 96% 44%);
23
+ --kz-accent-soft: hsl(46 96% 50% / 0.14);
24
+ --kz-accent-text: hsl(226 72% 40%);
25
+ --kz-accent-2: hsl(226 92% 68%);
26
+ --kz-on-accent: hsl(230 30% 7%);
27
+ --kz-ring: hsl(226 80% 46%);
28
+ --kz-info: hsl(217 92% 50%);
29
+ --kz-info-text: hsl(217 92% 42%);
30
+ --kz-brand-gradient-from: hsl(226 80% 95%);
31
+ --kz-brand-gradient-via: hsl(48 80% 95%);
32
+ }
33
+
34
+ .theme-light {
35
+ --kz-accent: hsl(48 96% 50%);
36
+ --kz-accent-hover: hsl(48 96% 44%);
37
+ --kz-accent-soft: hsl(46 96% 50% / 0.14);
38
+ --kz-accent-text: hsl(226 72% 40%);
39
+ --kz-accent-2: hsl(226 92% 68%);
40
+ --kz-on-accent: hsl(230 30% 7%);
41
+ --kz-ring: hsl(226 80% 46%);
42
+ --kz-info: hsl(217 92% 50%);
43
+ --kz-info-text: hsl(217 92% 42%);
44
+ --kz-brand-gradient-from: hsl(226 80% 95%);
45
+ --kz-brand-gradient-via: hsl(48 80% 95%);
46
+ --kz-brand-gradient-to: var(--kz-surface-0);
47
+ }
@@ -259,6 +259,92 @@ html .theme-dark .brand-yomizaka, html .brand-yomizaka.theme-dark {
259
259
  --kz-brand-gradient-to: var(--kz-surface-0);
260
260
  }
261
261
 
262
+ .brand-kachizaka {
263
+ --kz-accent: hsl(48 96% 56%);
264
+ --kz-accent-hover: hsl(48 98% 66%);
265
+ --kz-accent-soft: hsl(48 96% 56% / 0.12);
266
+ --kz-accent-text: hsl(48 96% 64%);
267
+ --kz-accent-2: hsl(226 92% 72%);
268
+ --kz-on-accent: hsl(230 30% 7%);
269
+ --kz-ring: hsl(48 96% 56%);
270
+ --kz-info: hsl(217 92% 60%);
271
+ --kz-info-text: hsl(217 92% 68%);
272
+ --kz-brand-gradient-from: hsl(226 42% 11%);
273
+ --kz-brand-gradient-via: hsl(232 26% 8%);
274
+ --kz-brand-gradient-to: var(--kz-surface-0);
275
+ }
276
+ html.light .brand-kachizaka, html .theme-light .brand-kachizaka, html .brand-kachizaka.theme-light {
277
+ --kz-accent: hsl(48 96% 50%);
278
+ --kz-accent-hover: hsl(48 96% 44%);
279
+ --kz-accent-soft: hsl(46 96% 50% / 0.14);
280
+ --kz-accent-text: hsl(226 72% 40%);
281
+ --kz-accent-2: hsl(226 92% 68%);
282
+ --kz-on-accent: hsl(230 30% 7%);
283
+ --kz-ring: hsl(226 80% 46%);
284
+ --kz-info: hsl(217 92% 50%);
285
+ --kz-info-text: hsl(217 92% 42%);
286
+ --kz-brand-gradient-from: hsl(226 80% 95%);
287
+ --kz-brand-gradient-via: hsl(48 80% 95%);
288
+ --kz-brand-gradient-to: var(--kz-surface-0);
289
+ }
290
+ html .theme-dark .brand-kachizaka, html .brand-kachizaka.theme-dark {
291
+ --kz-accent: hsl(48 96% 56%);
292
+ --kz-accent-hover: hsl(48 98% 66%);
293
+ --kz-accent-soft: hsl(48 96% 56% / 0.12);
294
+ --kz-accent-text: hsl(48 96% 64%);
295
+ --kz-accent-2: hsl(226 92% 72%);
296
+ --kz-on-accent: hsl(230 30% 7%);
297
+ --kz-ring: hsl(48 96% 56%);
298
+ --kz-info: hsl(217 92% 60%);
299
+ --kz-info-text: hsl(217 92% 68%);
300
+ --kz-brand-gradient-from: hsl(226 42% 11%);
301
+ --kz-brand-gradient-via: hsl(232 26% 8%);
302
+ --kz-brand-gradient-to: var(--kz-surface-0);
303
+ }
304
+
305
+ .brand-akinaza {
306
+ --kz-accent: hsl(130 44% 58%);
307
+ --kz-accent-hover: hsl(130 48% 66%);
308
+ --kz-accent-soft: hsl(130 44% 58% / 0.12);
309
+ --kz-accent-text: hsl(130 50% 66%);
310
+ --kz-accent-2: hsl(22 62% 64%);
311
+ --kz-on-accent: hsl(140 20% 5%);
312
+ --kz-ring: var(--kz-accent);
313
+ --kz-info: hsl(217 92% 60%);
314
+ --kz-info-text: hsl(217 92% 68%);
315
+ --kz-brand-gradient-from: hsl(140 28% 9%);
316
+ --kz-brand-gradient-via: hsl(24 20% 8%);
317
+ --kz-brand-gradient-to: var(--kz-surface-0);
318
+ }
319
+ html.light .brand-akinaza, html .theme-light .brand-akinaza, html .brand-akinaza.theme-light {
320
+ --kz-accent: hsl(132 52% 27%);
321
+ --kz-accent-hover: hsl(132 55% 22%);
322
+ --kz-accent-soft: hsl(132 52% 27% / 0.08);
323
+ --kz-accent-text: hsl(132 52% 26%);
324
+ --kz-accent-2: hsl(20 62% 36%);
325
+ --kz-on-accent: hsl(0 0% 100%);
326
+ --kz-ring: var(--kz-accent);
327
+ --kz-info: hsl(217 92% 50%);
328
+ --kz-info-text: hsl(217 92% 42%);
329
+ --kz-brand-gradient-from: hsl(130 45% 94%);
330
+ --kz-brand-gradient-via: hsl(26 60% 95%);
331
+ --kz-brand-gradient-to: var(--kz-surface-0);
332
+ }
333
+ html .theme-dark .brand-akinaza, html .brand-akinaza.theme-dark {
334
+ --kz-accent: hsl(130 44% 58%);
335
+ --kz-accent-hover: hsl(130 48% 66%);
336
+ --kz-accent-soft: hsl(130 44% 58% / 0.12);
337
+ --kz-accent-text: hsl(130 50% 66%);
338
+ --kz-accent-2: hsl(22 62% 64%);
339
+ --kz-on-accent: hsl(140 20% 5%);
340
+ --kz-ring: var(--kz-accent);
341
+ --kz-info: hsl(217 92% 60%);
342
+ --kz-info-text: hsl(217 92% 68%);
343
+ --kz-brand-gradient-from: hsl(140 28% 9%);
344
+ --kz-brand-gradient-via: hsl(24 20% 8%);
345
+ --kz-brand-gradient-to: var(--kz-surface-0);
346
+ }
347
+
262
348
  /* DEPRECATED — `.brand-yazakia` is `.brand-yasakia` (Yazakia was renamed Yasakia); kept for one minor version. */
263
349
  .brand-yazakia {
264
350
  --kz-accent: hsl(174 72% 50%);
package/dist/index.d.ts CHANGED
@@ -159,7 +159,7 @@ export interface TypeStep {
159
159
  export declare const typeScale: readonly TypeStep[];
160
160
 
161
161
  /** A Krizaka brand. */
162
- export type BrandId = "krizaka" | "orazaka" | "orochia" | "yasakia" | "yororis" | "yomizaka";
162
+ export type BrandId = "krizaka" | "orazaka" | "orochia" | "yasakia" | "yororis" | "yomizaka" | "kachizaka" | "akinaza";
163
163
  /** The roles a brand theme sets. */
164
164
  export type BrandRole = "accent" | "accentHover" | "accentSoft" | "accentText" | "accent2" | "onAccent" | "ring" | "info" | "infoText" | "brandGradientFrom" | "brandGradientVia" | "brandGradientTo";
165
165
  /** The brand themes: the accent family of each Krizaka brand, raw CSS per theme (aliases resolved). */
package/dist/index.js CHANGED
@@ -713,6 +713,66 @@ export const brands = /* @__PURE__ */ Object.freeze({
713
713
  "brandGradientVia": "hsl(244 50% 96%)",
714
714
  "brandGradientTo": "hsl(0 0% 98%)"
715
715
  }
716
+ },
717
+ "kachizaka": {
718
+ "dark": {
719
+ "accent": "hsl(48 96% 56%)",
720
+ "accentHover": "hsl(48 98% 66%)",
721
+ "accentSoft": "hsl(48 96% 56% / 0.12)",
722
+ "accentText": "hsl(48 96% 64%)",
723
+ "accent2": "hsl(226 92% 72%)",
724
+ "onAccent": "hsl(230 30% 7%)",
725
+ "ring": "hsl(48 96% 56%)",
726
+ "info": "hsl(217 92% 60%)",
727
+ "infoText": "hsl(217 92% 68%)",
728
+ "brandGradientFrom": "hsl(226 42% 11%)",
729
+ "brandGradientVia": "hsl(232 26% 8%)",
730
+ "brandGradientTo": "hsl(240 6% 5%)"
731
+ },
732
+ "light": {
733
+ "accent": "hsl(48 96% 50%)",
734
+ "accentHover": "hsl(48 96% 44%)",
735
+ "accentSoft": "hsl(46 96% 50% / 0.14)",
736
+ "accentText": "hsl(226 72% 40%)",
737
+ "accent2": "hsl(226 92% 68%)",
738
+ "onAccent": "hsl(230 30% 7%)",
739
+ "ring": "hsl(226 80% 46%)",
740
+ "info": "hsl(217 92% 50%)",
741
+ "infoText": "hsl(217 92% 42%)",
742
+ "brandGradientFrom": "hsl(226 80% 95%)",
743
+ "brandGradientVia": "hsl(48 80% 95%)",
744
+ "brandGradientTo": "hsl(0 0% 98%)"
745
+ }
746
+ },
747
+ "akinaza": {
748
+ "dark": {
749
+ "accent": "hsl(130 44% 58%)",
750
+ "accentHover": "hsl(130 48% 66%)",
751
+ "accentSoft": "hsl(130 44% 58% / 0.12)",
752
+ "accentText": "hsl(130 50% 66%)",
753
+ "accent2": "hsl(22 62% 64%)",
754
+ "onAccent": "hsl(140 20% 5%)",
755
+ "ring": "hsl(130 44% 58%)",
756
+ "info": "hsl(217 92% 60%)",
757
+ "infoText": "hsl(217 92% 68%)",
758
+ "brandGradientFrom": "hsl(140 28% 9%)",
759
+ "brandGradientVia": "hsl(24 20% 8%)",
760
+ "brandGradientTo": "hsl(240 6% 5%)"
761
+ },
762
+ "light": {
763
+ "accent": "hsl(132 52% 27%)",
764
+ "accentHover": "hsl(132 55% 22%)",
765
+ "accentSoft": "hsl(132 52% 27% / 0.08)",
766
+ "accentText": "hsl(132 52% 26%)",
767
+ "accent2": "hsl(20 62% 36%)",
768
+ "onAccent": "hsl(0 0% 100%)",
769
+ "ring": "hsl(132 52% 27%)",
770
+ "info": "hsl(217 92% 50%)",
771
+ "infoText": "hsl(217 92% 42%)",
772
+ "brandGradientFrom": "hsl(130 45% 94%)",
773
+ "brandGradientVia": "hsl(26 60% 95%)",
774
+ "brandGradientTo": "hsl(0 0% 98%)"
775
+ }
716
776
  }
717
777
  });
718
778
  /** The marks' emblem gradients: [offset, colour] stops, the same in both themes (raw CSS). */
@@ -780,5 +840,25 @@ export const marks = /* @__PURE__ */ Object.freeze({
780
840
  "100%",
781
841
  "hsl(248 50% 58%)"
782
842
  ]
843
+ ],
844
+ "kachizaka": [
845
+ [
846
+ "0%",
847
+ "hsl(226 80% 56%)"
848
+ ],
849
+ [
850
+ "100%",
851
+ "hsl(44 92% 33%)"
852
+ ]
853
+ ],
854
+ "akinaza": [
855
+ [
856
+ "0%",
857
+ "hsl(140 48% 34%)"
858
+ ],
859
+ [
860
+ "100%",
861
+ "hsl(22 60% 46%)"
862
+ ]
783
863
  ]
784
864
  });
package/dist/native.d.ts CHANGED
@@ -101,7 +101,7 @@ export declare const shadows: { readonly dark: Shadows; readonly light: Shadows
101
101
  export declare const cut: { readonly size: number };
102
102
 
103
103
  /** A Krizaka brand. */
104
- export type BrandId = "krizaka" | "orazaka" | "orochia" | "yasakia" | "yororis" | "yomizaka";
104
+ export type BrandId = "krizaka" | "orazaka" | "orochia" | "yasakia" | "yororis" | "yomizaka" | "kachizaka" | "akinaza";
105
105
  /** The colour roles a brand theme sets, per theme. */
106
106
  export type BrandTheme = { readonly dark: { readonly [R in "accent" | "accentHover" | "accentSoft" | "accentText" | "accent2" | "onAccent" | "ring" | "info" | "infoText" | "brandGradientFrom" | "brandGradientVia" | "brandGradientTo"]: string }; readonly light: { readonly [R in "accent" | "accentHover" | "accentSoft" | "accentText" | "accent2" | "onAccent" | "ring" | "info" | "infoText" | "brandGradientFrom" | "brandGradientVia" | "brandGradientTo"]: string } };
107
107
  /** The brand themes as ThemeProvider overrides (`overrides={brands.orazaka}`): the accent family per theme. */
package/dist/native.js CHANGED
@@ -427,6 +427,66 @@ export const brands = /* @__PURE__ */ Object.freeze({
427
427
  "brandGradientVia": "#f0f0fa",
428
428
  "brandGradientTo": "#fafafa"
429
429
  }
430
+ },
431
+ "kachizaka": {
432
+ "dark": {
433
+ "accent": "#fbcf23",
434
+ "accentHover": "#fddb53",
435
+ "accentSoft": "rgba(251,207,35,0.12)",
436
+ "accentText": "#fbd84b",
437
+ "accent2": "#7695f9",
438
+ "onAccent": "#0c0e17",
439
+ "ring": "#fbcf23",
440
+ "info": "#3b83f7",
441
+ "infoText": "#629cf8",
442
+ "brandGradientFrom": "#101628",
443
+ "brandGradientVia": "#0f111a",
444
+ "brandGradientTo": "#0c0c0e"
445
+ },
446
+ "light": {
447
+ "accent": "#fac905",
448
+ "accentHover": "#dcb104",
449
+ "accentSoft": "rgba(250,193,5,0.14)",
450
+ "accentText": "#1d3faf",
451
+ "accent2": "#6285f8",
452
+ "onAccent": "#0c0e17",
453
+ "ring": "#1743d3",
454
+ "info": "#0a64f5",
455
+ "infoText": "#0954ce",
456
+ "brandGradientFrom": "#e8edfc",
457
+ "brandGradientVia": "#fcf8e8",
458
+ "brandGradientTo": "#fafafa"
459
+ }
460
+ },
461
+ "akinaza": {
462
+ "dark": {
463
+ "accent": "#65c374",
464
+ "accentHover": "#7fd28d",
465
+ "accentSoft": "rgba(101,195,116,0.12)",
466
+ "accentText": "#7dd48b",
467
+ "accent2": "#dc946a",
468
+ "onAccent": "#0a0f0c",
469
+ "ring": "#65c374",
470
+ "info": "#3b83f7",
471
+ "infoText": "#629cf8",
472
+ "brandGradientFrom": "#111d15",
473
+ "brandGradientVia": "#181410",
474
+ "brandGradientTo": "#0c0c0e"
475
+ },
476
+ "light": {
477
+ "accent": "#21692f",
478
+ "accentHover": "#195726",
479
+ "accentSoft": "rgba(33,105,47,0.08)",
480
+ "accentText": "#20652e",
481
+ "accent2": "#954923",
482
+ "onAccent": "#ffffff",
483
+ "ring": "#21692f",
484
+ "info": "#0a64f5",
485
+ "infoText": "#0954ce",
486
+ "brandGradientFrom": "#e9f7eb",
487
+ "brandGradientVia": "#faf1eb",
488
+ "brandGradientTo": "#fafafa"
489
+ }
430
490
  }
431
491
  });
432
492
  /** The marks' emblem gradients: [offset, #rrggbb] stops, the same in both themes. */
@@ -494,5 +554,25 @@ export const marks = /* @__PURE__ */ Object.freeze({
494
554
  "100%",
495
555
  "#6d5ec9"
496
556
  ]
557
+ ],
558
+ "kachizaka": [
559
+ [
560
+ "0%",
561
+ "#355fe9"
562
+ ],
563
+ [
564
+ "100%",
565
+ "#a27807"
566
+ ]
567
+ ],
568
+ "akinaza": [
569
+ [
570
+ "0%",
571
+ "#2d8049"
572
+ ],
573
+ [
574
+ "100%",
575
+ "#bc632f"
576
+ ]
497
577
  ]
498
578
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@krizaka/tokens",
3
- "version": "3.14.0",
4
- "description": "The Krizaka semantic design tokens (--kz-*) and the brand themes (Krizaka, Orazaka, Orochia, Yasakia, Yororis, Yomizaka): one DTCG source compiled to CSS (dark, light, media invariants), typed constants and React Native themes.",
3
+ "version": "3.16.0",
4
+ "description": "The Krizaka semantic design tokens (--kz-*) and the brand themes (Krizaka, Orazaka, Orochia, Yasakia, Yororis, Yomizaka, Kachizaka, Akinaza): one DTCG source compiled to CSS (dark, light, media invariants), typed constants and React Native themes.",
5
5
  "keywords": [
6
6
  "krizaka",
7
7
  "design-tokens",
@@ -40,6 +40,8 @@
40
40
  "./brands/yazakia.css": "./dist/brands/yazakia.css",
41
41
  "./brands/yororis.css": "./dist/brands/yororis.css",
42
42
  "./brands/yomizaka.css": "./dist/brands/yomizaka.css",
43
+ "./brands/kachizaka.css": "./dist/brands/kachizaka.css",
44
+ "./brands/akinaza.css": "./dist/brands/akinaza.css",
43
45
  "./brands/scoped.css": "./dist/brands/scoped.css",
44
46
  "./native": {
45
47
  "types": "./dist/native.d.ts",
@@ -91,20 +93,20 @@
91
93
  {
92
94
  "name": "./brands/scoped.css",
93
95
  "path": "dist/brands/scoped.css",
94
- "limit": "1.3 kB",
96
+ "limit": "1.5 kB",
95
97
  "gzip": true,
96
98
  "rolldown": false
97
99
  },
98
100
  {
99
101
  "name": ".",
100
102
  "path": "dist/index.js",
101
- "limit": "3.9 kB",
103
+ "limit": "4.2 kB",
102
104
  "gzip": true
103
105
  },
104
106
  {
105
107
  "name": "./native",
106
108
  "path": "dist/native.js",
107
- "limit": "2.2 kB",
109
+ "limit": "2.5 kB",
108
110
  "gzip": true
109
111
  }
110
112
  ],
@@ -114,6 +116,6 @@
114
116
  "typecheck": "tsc --noEmit",
115
117
  "test": "vitest run",
116
118
  "size": "size-limit",
117
- "publint": "publint && attw --pack . --profile esm-only --exclude-entrypoints ./tokens.css ./brands/krizaka.css ./brands/orazaka.css ./brands/orochia.css ./brands/yasakia.css ./brands/yazakia.css ./brands/yororis.css ./brands/yomizaka.css ./brands/scoped.css"
119
+ "publint": "publint && attw --pack . --profile esm-only --exclude-entrypoints ./tokens.css ./brands/krizaka.css ./brands/orazaka.css ./brands/orochia.css ./brands/yasakia.css ./brands/yazakia.css ./brands/yororis.css ./brands/yomizaka.css ./brands/kachizaka.css ./brands/akinaza.css ./brands/scoped.css"
118
120
  }
119
121
  }