@krizaka/ui 2.8.0 → 2.9.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.
Files changed (293) hide show
  1. package/README.md +33 -1
  2. package/dist/achievement.d.ts +54 -0
  3. package/dist/achievement.js +73 -0
  4. package/dist/achievement.js.map +1 -0
  5. package/dist/app-shell.d.ts +203 -0
  6. package/dist/app-shell.js +137 -0
  7. package/dist/app-shell.js.map +1 -0
  8. package/dist/auth-layout.d.ts +136 -0
  9. package/dist/auth-layout.js +75 -0
  10. package/dist/auth-layout.js.map +1 -0
  11. package/dist/choice-grid.d.ts +84 -0
  12. package/dist/choice-grid.js +141 -0
  13. package/dist/choice-grid.js.map +1 -0
  14. package/dist/chunk-555LWYIN.js +11 -0
  15. package/dist/chunk-555LWYIN.js.map +1 -0
  16. package/dist/chunk-AZPKXP3O.js +36 -0
  17. package/dist/chunk-AZPKXP3O.js.map +1 -0
  18. package/dist/chunk-VCAAHCHL.js +17 -0
  19. package/dist/chunk-VCAAHCHL.js.map +1 -0
  20. package/dist/code-block.js +23 -44
  21. package/dist/code-block.js.map +1 -1
  22. package/dist/continue-prompt.d.ts +48 -0
  23. package/dist/continue-prompt.js +200 -0
  24. package/dist/continue-prompt.js.map +1 -0
  25. package/dist/dashboard-layout.d.ts +139 -0
  26. package/dist/dashboard-layout.js +68 -0
  27. package/dist/dashboard-layout.js.map +1 -0
  28. package/dist/detail-layout.d.ts +126 -0
  29. package/dist/detail-layout.js +48 -0
  30. package/dist/detail-layout.js.map +1 -0
  31. package/dist/docs-layout.d.ts +78 -0
  32. package/dist/docs-layout.js +60 -0
  33. package/dist/docs-layout.js.map +1 -0
  34. package/dist/goal-gauge.d.ts +38 -0
  35. package/dist/goal-gauge.js +53 -0
  36. package/dist/goal-gauge.js.map +1 -0
  37. package/dist/index.d.ts +5 -4
  38. package/dist/index.js +22 -19
  39. package/dist/index.js.map +1 -1
  40. package/dist/landscape.d.ts +41 -0
  41. package/dist/landscape.js +836 -0
  42. package/dist/landscape.js.map +1 -0
  43. package/dist/marketing-layout.d.ts +60 -0
  44. package/dist/marketing-layout.js +25 -0
  45. package/dist/marketing-layout.js.map +1 -0
  46. package/dist/mascots.d.ts +14 -1
  47. package/dist/mascots.js +86 -1
  48. package/dist/mascots.js.map +1 -1
  49. package/dist/native.d.ts +73 -3
  50. package/dist/native.js +530 -296
  51. package/dist/native.js.map +1 -1
  52. package/dist/profile-card.d.ts +85 -0
  53. package/dist/profile-card.js +87 -0
  54. package/dist/profile-card.js.map +1 -0
  55. package/dist/promise-card.d.ts +28 -0
  56. package/dist/promise-card.js +29 -0
  57. package/dist/promise-card.js.map +1 -0
  58. package/dist/scroll-stage.d.ts +603 -0
  59. package/dist/scroll-stage.js +59 -0
  60. package/dist/scroll-stage.js.map +1 -0
  61. package/dist/settings-layout.d.ts +154 -0
  62. package/dist/settings-layout.js +57 -0
  63. package/dist/settings-layout.js.map +1 -0
  64. package/dist/split-view.d.ts +106 -0
  65. package/dist/split-view.js +41 -0
  66. package/dist/split-view.js.map +1 -0
  67. package/dist/stage-banner.d.ts +34 -0
  68. package/dist/stage-banner.js +26 -0
  69. package/dist/stage-banner.js.map +1 -0
  70. package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
  71. package/dist/story.css +432 -0
  72. package/package.json +250 -8
  73. package/registry/achievement.json +322 -0
  74. package/registry/action-bar.json +1 -1
  75. package/registry/alert.json +1 -1
  76. package/registry/app-shell.json +451 -0
  77. package/registry/argument-card.json +1 -1
  78. package/registry/audio-player.json +1 -1
  79. package/registry/auth-layout.json +230 -0
  80. package/registry/avatar.json +1 -1
  81. package/registry/badge.json +1 -1
  82. package/registry/button.json +5 -5
  83. package/registry/card-grid.json +5 -5
  84. package/registry/card.json +3 -3
  85. package/registry/checkbox.json +1 -1
  86. package/registry/chip-link.json +1 -1
  87. package/registry/chip.json +1 -1
  88. package/registry/choice-grid.json +318 -0
  89. package/registry/code-block.json +1 -1
  90. package/registry/combobox.json +1 -1
  91. package/registry/command.json +1 -1
  92. package/registry/confirm-button.json +3 -3
  93. package/registry/continue-prompt.json +312 -0
  94. package/registry/countdown.json +1 -1
  95. package/registry/cta-panel.json +1 -1
  96. package/registry/dashboard-layout.json +273 -0
  97. package/registry/data-table.json +1 -1
  98. package/registry/date-picker.json +1 -1
  99. package/registry/decision-list.json +1 -1
  100. package/registry/detail-layout.json +233 -0
  101. package/registry/dialog.json +1 -1
  102. package/registry/docs-layout.json +148 -0
  103. package/registry/dropdown-menu.json +3 -3
  104. package/registry/empty-state.json +1 -1
  105. package/registry/examples/achievement/arcade.d.ts +4 -0
  106. package/registry/examples/achievement/arcade.js +15 -0
  107. package/registry/examples/achievement/arcade.tsx +12 -0
  108. package/registry/examples/achievement/milestones.d.ts +4 -0
  109. package/registry/examples/achievement/milestones.js +15 -0
  110. package/registry/examples/achievement/milestones.tsx +12 -0
  111. package/registry/examples/app-shell/admin-console.d.ts +4 -0
  112. package/registry/examples/app-shell/admin-console.js +52 -0
  113. package/registry/examples/app-shell/admin-console.tsx +64 -0
  114. package/registry/examples/app-shell/basic.d.ts +4 -0
  115. package/registry/examples/app-shell/basic.js +37 -0
  116. package/registry/examples/app-shell/basic.tsx +31 -0
  117. package/registry/examples/app-shell/orochia-studio.d.ts +4 -0
  118. package/registry/examples/app-shell/orochia-studio.js +89 -0
  119. package/registry/examples/app-shell/orochia-studio.tsx +101 -0
  120. package/registry/examples/auth-layout/onboarding.d.ts +4 -0
  121. package/registry/examples/auth-layout/onboarding.js +56 -0
  122. package/registry/examples/auth-layout/onboarding.tsx +47 -0
  123. package/registry/examples/auth-layout/sign-in.d.ts +4 -0
  124. package/registry/examples/auth-layout/sign-in.js +55 -0
  125. package/registry/examples/auth-layout/sign-in.tsx +47 -0
  126. package/registry/examples/auth-layout/verify.d.ts +4 -0
  127. package/registry/examples/auth-layout/verify.js +23 -0
  128. package/registry/examples/auth-layout/verify.tsx +19 -0
  129. package/registry/examples/choice-grid/line-up.d.ts +4 -0
  130. package/registry/examples/choice-grid/line-up.js +37 -0
  131. package/registry/examples/choice-grid/line-up.tsx +32 -0
  132. package/registry/examples/choice-grid/plans.d.ts +4 -0
  133. package/registry/examples/choice-grid/plans.js +28 -0
  134. package/registry/examples/choice-grid/plans.tsx +24 -0
  135. package/registry/examples/continue-prompt/arcade.d.ts +4 -0
  136. package/registry/examples/continue-prompt/arcade.js +28 -0
  137. package/registry/examples/continue-prompt/arcade.tsx +25 -0
  138. package/registry/examples/continue-prompt/offer.d.ts +4 -0
  139. package/registry/examples/continue-prompt/offer.js +24 -0
  140. package/registry/examples/continue-prompt/offer.tsx +19 -0
  141. package/registry/examples/dashboard-layout/orazaka-eric.d.ts +4 -0
  142. package/registry/examples/dashboard-layout/orazaka-eric.js +58 -0
  143. package/registry/examples/dashboard-layout/orazaka-eric.tsx +80 -0
  144. package/registry/examples/dashboard-layout/widgets.d.ts +4 -0
  145. package/registry/examples/dashboard-layout/widgets.js +17 -0
  146. package/registry/examples/dashboard-layout/widgets.tsx +22 -0
  147. package/registry/examples/detail-layout/job.d.ts +4 -0
  148. package/registry/examples/detail-layout/job.js +25 -0
  149. package/registry/examples/detail-layout/job.tsx +20 -0
  150. package/registry/examples/detail-layout/video.d.ts +4 -0
  151. package/registry/examples/detail-layout/video.js +44 -0
  152. package/registry/examples/detail-layout/video.tsx +53 -0
  153. package/registry/examples/docs-layout/page.d.ts +4 -0
  154. package/registry/examples/docs-layout/page.js +26 -0
  155. package/registry/examples/docs-layout/page.tsx +30 -0
  156. package/registry/examples/goal-gauge/arcade.d.ts +4 -0
  157. package/registry/examples/goal-gauge/arcade.js +11 -0
  158. package/registry/examples/goal-gauge/arcade.tsx +10 -0
  159. package/registry/examples/goal-gauge/challenge.d.ts +4 -0
  160. package/registry/examples/goal-gauge/challenge.js +11 -0
  161. package/registry/examples/goal-gauge/challenge.tsx +10 -0
  162. package/registry/examples/goal-gauge/drain.d.ts +4 -0
  163. package/registry/examples/goal-gauge/drain.js +11 -0
  164. package/registry/examples/goal-gauge/drain.tsx +10 -0
  165. package/registry/examples/goal-gauge/native/default.d.ts +4 -0
  166. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  167. package/registry/examples/goal-gauge/native/default.js +15 -0
  168. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  169. package/registry/examples/goal-gauge/native/default.tsx +12 -0
  170. package/registry/examples/landscape/backdrop.d.ts +4 -0
  171. package/registry/examples/landscape/backdrop.js +14 -0
  172. package/registry/examples/landscape/backdrop.tsx +11 -0
  173. package/registry/examples/landscape/brand.d.ts +4 -0
  174. package/registry/examples/landscape/brand.js +11 -0
  175. package/registry/examples/landscape/brand.tsx +10 -0
  176. package/registry/examples/marketing-layout/basic.d.ts +4 -0
  177. package/registry/examples/marketing-layout/basic.js +31 -0
  178. package/registry/examples/marketing-layout/basic.tsx +28 -0
  179. package/registry/examples/marketing-layout/docs-hub.d.ts +4 -0
  180. package/registry/examples/marketing-layout/docs-hub.js +37 -0
  181. package/registry/examples/marketing-layout/docs-hub.tsx +44 -0
  182. package/registry/examples/marketing-layout/pricing.d.ts +4 -0
  183. package/registry/examples/marketing-layout/pricing.js +45 -0
  184. package/registry/examples/marketing-layout/pricing.tsx +55 -0
  185. package/registry/examples/marketing-layout/product-page.d.ts +4 -0
  186. package/registry/examples/marketing-layout/product-page.js +79 -0
  187. package/registry/examples/marketing-layout/product-page.tsx +83 -0
  188. package/registry/examples/mascots/native/phoenix.d.ts +4 -0
  189. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  190. package/registry/examples/mascots/native/phoenix.js +21 -0
  191. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  192. package/registry/examples/mascots/native/phoenix.tsx +18 -0
  193. package/registry/examples/mascots/phoenix.d.ts +4 -0
  194. package/registry/examples/mascots/phoenix.js +14 -0
  195. package/registry/examples/mascots/phoenix.tsx +11 -0
  196. package/registry/examples/profile-card/arcade.d.ts +4 -0
  197. package/registry/examples/profile-card/arcade.js +25 -0
  198. package/registry/examples/profile-card/arcade.tsx +19 -0
  199. package/registry/examples/profile-card/creator.d.ts +4 -0
  200. package/registry/examples/profile-card/creator.js +31 -0
  201. package/registry/examples/profile-card/creator.tsx +26 -0
  202. package/registry/examples/profile-card/match.d.ts +4 -0
  203. package/registry/examples/profile-card/match.js +25 -0
  204. package/registry/examples/profile-card/match.tsx +19 -0
  205. package/registry/examples/profile-card/native/default.d.ts +4 -0
  206. package/registry/examples/profile-card/native/default.dark.png +0 -0
  207. package/registry/examples/profile-card/native/default.js +27 -0
  208. package/registry/examples/profile-card/native/default.light.png +0 -0
  209. package/registry/examples/profile-card/native/default.tsx +22 -0
  210. package/registry/examples/promise-card/arcade.d.ts +4 -0
  211. package/registry/examples/promise-card/arcade.js +25 -0
  212. package/registry/examples/promise-card/arcade.tsx +19 -0
  213. package/registry/examples/promise-card/guarantee.d.ts +4 -0
  214. package/registry/examples/promise-card/guarantee.js +23 -0
  215. package/registry/examples/promise-card/guarantee.tsx +17 -0
  216. package/registry/examples/scroll-stage/arcade.d.ts +4 -0
  217. package/registry/examples/scroll-stage/arcade.js +16 -0
  218. package/registry/examples/scroll-stage/arcade.tsx +15 -0
  219. package/registry/examples/scroll-stage/chapters.d.ts +4 -0
  220. package/registry/examples/scroll-stage/chapters.js +25 -0
  221. package/registry/examples/scroll-stage/chapters.tsx +22 -0
  222. package/registry/examples/settings-layout/account.d.ts +4 -0
  223. package/registry/examples/settings-layout/account.js +51 -0
  224. package/registry/examples/settings-layout/account.tsx +50 -0
  225. package/registry/examples/settings-layout/sections.d.ts +4 -0
  226. package/registry/examples/settings-layout/sections.js +27 -0
  227. package/registry/examples/settings-layout/sections.tsx +24 -0
  228. package/registry/examples/split-view/empty.d.ts +4 -0
  229. package/registry/examples/split-view/empty.js +19 -0
  230. package/registry/examples/split-view/empty.tsx +13 -0
  231. package/registry/examples/split-view/messages.d.ts +4 -0
  232. package/registry/examples/split-view/messages.js +49 -0
  233. package/registry/examples/split-view/messages.tsx +52 -0
  234. package/registry/examples/stage-banner/round.d.ts +4 -0
  235. package/registry/examples/stage-banner/round.js +14 -0
  236. package/registry/examples/stage-banner/round.tsx +11 -0
  237. package/registry/examples/stage-banner/steps.d.ts +4 -0
  238. package/registry/examples/stage-banner/steps.js +14 -0
  239. package/registry/examples/stage-banner/steps.tsx +11 -0
  240. package/registry/field.json +1 -1
  241. package/registry/file-upload.json +1 -1
  242. package/registry/filter-bar.json +1 -1
  243. package/registry/glow-card.json +1 -1
  244. package/registry/goal-gauge.json +322 -0
  245. package/registry/image-cropper.json +1 -1
  246. package/registry/index.json +317 -5
  247. package/registry/iso.json +1 -1
  248. package/registry/kbd.json +1 -1
  249. package/registry/landscape.json +189 -0
  250. package/registry/link-card.json +1 -1
  251. package/registry/loader.json +1 -1
  252. package/registry/marketing-layout.json +172 -0
  253. package/registry/marquee.json +1 -1
  254. package/registry/mascot-quote.json +1 -1
  255. package/registry/mascot-state.json +1 -1
  256. package/registry/mascots.json +104 -7
  257. package/registry/media-capture.json +1 -1
  258. package/registry/meter.json +1 -1
  259. package/registry/nav-bar.json +1 -1
  260. package/registry/number-ticker.json +1 -1
  261. package/registry/page-header.json +1 -1
  262. package/registry/page-hero.json +3 -3
  263. package/registry/page.json +5 -5
  264. package/registry/pagination.json +1 -1
  265. package/registry/pointer-light.json +1 -1
  266. package/registry/popover.json +1 -1
  267. package/registry/profile-card.json +501 -0
  268. package/registry/progress.json +1 -1
  269. package/registry/promise-card.json +228 -0
  270. package/registry/radio-group.json +1 -1
  271. package/registry/scroll-stage.json +197 -0
  272. package/registry/search-field.json +1 -1
  273. package/registry/section-backdrop.json +1 -1
  274. package/registry/separator.json +1 -1
  275. package/registry/settings-layout.json +231 -0
  276. package/registry/skeleton.json +1 -1
  277. package/registry/slider.json +1 -1
  278. package/registry/slot.json +1 -1
  279. package/registry/spinner.json +1 -1
  280. package/registry/split-view.json +233 -0
  281. package/registry/stage-banner.json +221 -0
  282. package/registry/stat.json +1 -1
  283. package/registry/stepper.json +1 -1
  284. package/registry/switch.json +1 -1
  285. package/registry/tabs.json +1 -1
  286. package/registry/tag-input.json +1 -1
  287. package/registry/terminal-replay.json +1 -1
  288. package/registry/theme.json +1 -1
  289. package/registry/toast.json +1 -1
  290. package/registry/toc.json +1 -1
  291. package/registry/tooltip.json +1 -1
  292. package/registry/video-player.json +1 -1
  293. package/registry/video-trimmer.json +1 -1
@@ -0,0 +1,55 @@
1
+ import { Badge } from "@krizaka/ui/badge";
2
+ import { Button } from "@krizaka/ui/button";
3
+ import { GlowCard } from "@krizaka/ui/glow-card";
4
+ import { Meter } from "@krizaka/ui/meter";
5
+ import { Section } from "@krizaka/ui/page";
6
+ import { PageHero } from "@krizaka/ui/page-hero";
7
+
8
+ const PLANS = [
9
+ { id: "community", name: "Community", price: "Free", unit: "self-hosted", points: ["Every feature", "Your hardware", "Community support"] },
10
+ { id: "workspace", name: "Workspace", price: "€29", unit: "per month · 12,000 credits", points: ["Packs & Studios", "Shared workspaces", "Email support"], featured: true },
11
+ { id: "sovereign", name: "Sovereign", price: "Custom", unit: "on your servers", points: ["Installation with you", "Law 25 review", "A named engineer"] },
12
+ ];
13
+
14
+ // TEMPLATE — pricing and credits: the plans side by side (the featured one lit by its turning ring), what a credit buys,
15
+ // and the credits left for a signed-in visitor. On a phone the plans stack, the featured one first in the reading order
16
+ // it already has; every action is the cut button, the featured one primary.
17
+ export default function MarketingLayoutPricing() {
18
+ return (
19
+ <div className="w-full">
20
+ <PageHero eyebrow="Pricing" title="Pay once for what was done" lead="Credits buy answers, images and minutes of video — never a seat you do not use." align="center" backdrop="plain" />
21
+ <Section aria-label="Plans" spacing="sm">
22
+ <ul className="grid gap-4 md:grid-cols-3">
23
+ {PLANS.map((p) => (
24
+ <li key={p.id} className="flex">
25
+ <GlowCard alive={p.featured} className="flex w-full flex-col gap-4">
26
+ <div className="flex items-center justify-between gap-2">
27
+ <h2 className="font-display text-lg font-bold text-fg">{p.name}</h2>
28
+ {p.featured && <Badge tone="accent">Most chosen</Badge>}
29
+ </div>
30
+ <p>
31
+ <span className="font-display text-4xl font-extrabold text-fg">{p.price}</span>
32
+ <span className="mt-1 block text-sm text-fg-secondary">{p.unit}</span>
33
+ </p>
34
+ <ul className="flex flex-col gap-2 text-sm text-fg-secondary">
35
+ {p.points.map((x) => (
36
+ <li key={x}>— {x}</li>
37
+ ))}
38
+ </ul>
39
+ <Button variant={p.featured ? "primary" : "secondary"} shape="cut" className="mt-auto w-full">
40
+ Choose {p.name}
41
+ </Button>
42
+ </GlowCard>
43
+ </li>
44
+ ))}
45
+ </ul>
46
+ </Section>
47
+ <Section id="credits" title="Your credits" headingSize="sm" spacing="sm" divider>
48
+ <div className="max-w-md">
49
+ <Meter label="Credits this month" value={3800} max={12000} valueText="3,800 of 12,000 used" thresholds={{ low: 0.7, high: 0.9 }} showLabel />
50
+ <p className="mt-3 text-sm text-fg-secondary">One credit ≈ one chat answer · 4 credits an image · 30 a minute of video.</p>
51
+ </div>
52
+ </Section>
53
+ </div>
54
+ );
55
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,79 @@
1
+ "use client";
2
+
3
+ // registry/examples/marketing-layout/product-page.tsx
4
+ import { ProductLogo } from "@krizaka/ui";
5
+ import { ActionBar } from "@krizaka/ui/action-bar";
6
+ import { ArgumentCard } from "@krizaka/ui/argument-card";
7
+ import { Button } from "@krizaka/ui/button";
8
+ import { CardGrid } from "@krizaka/ui/card-grid";
9
+ import { CtaPanel } from "@krizaka/ui/cta-panel";
10
+ import { DecisionList } from "@krizaka/ui/decision-list";
11
+ import { MarketingLayout } from "@krizaka/ui/marketing-layout";
12
+ import { MascotQuote } from "@krizaka/ui/mascot-quote";
13
+ import { Mascot } from "@krizaka/ui/mascots";
14
+ import { NavBar } from "@krizaka/ui/nav-bar";
15
+ import { Facts, Section } from "@krizaka/ui/page";
16
+ import { PageHero } from "@krizaka/ui/page-hero";
17
+ import { jsx, jsxs } from "react/jsx-runtime";
18
+ var WHY = [
19
+ { id: "local", title: "Local inference", hook: "Elsewhere, every prompt crosses the ocean.", bird: "falcon" },
20
+ { id: "paid", title: "Paid once", hook: "Elsewhere, you pay per token, forever.", bird: "flamingo" },
21
+ { id: "asked", title: "Agents that ask", hook: "Elsewhere, an agent acts first and apologises later.", bird: "pigeon" }
22
+ ];
23
+ var DECISIONS = [
24
+ { id: "local", chose: "Local models by default.", refused: "A hosted API as the default path.", because: "A prompt that never leaves cannot leak.", cost: "You need a GPU, or patience on a CPU." },
25
+ { id: "telemetry", chose: "Zero telemetry.", refused: "Anonymous usage statistics.", because: "Anonymous rarely stays anonymous.", cost: "You tell us what breaks." }
26
+ ];
27
+ var labels = { chose: "We chose", refused: "We refused", because: "Because", cost: "What it costs you" };
28
+ function MarketingLayoutProductPage() {
29
+ return /* @__PURE__ */ jsx("div", { className: "brand-orazaka", children: /* @__PURE__ */ jsxs(
30
+ MarketingLayout,
31
+ {
32
+ skipLabel: "Skip to content",
33
+ header: /* @__PURE__ */ jsxs(NavBar.Root, { label: "Main", compactAfter: false, className: "max-w-(--kz-page-max,72rem)", children: [
34
+ /* @__PURE__ */ jsxs(NavBar.Brand, { href: "#home", children: [
35
+ /* @__PURE__ */ jsx(ProductLogo, { id: "orazaka", size: 22, animated: false }),
36
+ " Orazaka"
37
+ ] }),
38
+ /* @__PURE__ */ jsxs(NavBar.Items, { children: [
39
+ /* @__PURE__ */ jsx(NavBar.Link, { href: "#why", active: true, children: "Why" }),
40
+ /* @__PURE__ */ jsx(NavBar.Link, { href: "#decisions", children: "Decisions" })
41
+ ] })
42
+ ] }),
43
+ children: [
44
+ /* @__PURE__ */ jsxs(
45
+ PageHero,
46
+ {
47
+ eyebrow: "Sovereign AI \xB7 open source",
48
+ title: "The AI that never leaves home",
49
+ lead: "Chat, image, voice and video on your own server \u2014 one governed pipeline, nothing sent anywhere.",
50
+ aside: /* @__PURE__ */ jsx(Mascot, { bird: "owl", mood: "welcome", size: 112 }),
51
+ children: [
52
+ /* @__PURE__ */ jsx(Facts, { items: [{ label: "Apache-2.0", tone: "ok" }, { label: "Law 25 \xB7 GDPR" }] }),
53
+ /* @__PURE__ */ jsx(Button, { variant: "primary", size: "lg", shape: "cut", shimmer: true, children: "Install in three commands" })
54
+ ]
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsx(Section, { id: "why", eyebrow: "Why", title: "Three traps it removes", children: /* @__PURE__ */ jsx(CardGrid, { min: 260, fit: "fit", reveal: false, children: WHY.map((w) => /* @__PURE__ */ jsx(
58
+ ArgumentCard,
59
+ {
60
+ id: `why-${w.id}`,
61
+ title: w.title,
62
+ mark: /* @__PURE__ */ jsx(Mascot, { bird: w.bird, size: 40, animated: false }),
63
+ hook: { label: "The trap", text: w.hook },
64
+ more: { href: `#${w.id}`, label: "Details" }
65
+ },
66
+ w.id
67
+ )) }) }),
68
+ /* @__PURE__ */ jsxs(Section, { id: "decisions", eyebrow: "Decisions", title: "What we chose, and what it costs you", divider: true, children: [
69
+ /* @__PURE__ */ jsx(DecisionList, { decisions: DECISIONS, labels, reveal: false }),
70
+ /* @__PURE__ */ jsx("div", { className: "mt-8", children: /* @__PURE__ */ jsx(MascotQuote, { variant: "callout", bird: "owl", label: "The owl's promise", children: "Every personal record stays in Qu\xE9bec, and you can read who touched it." }) })
71
+ ] }),
72
+ /* @__PURE__ */ jsx(Section, { spacing: "sm", "aria-labelledby": "product-cta", children: /* @__PURE__ */ jsx(CtaPanel, { id: "product-cta", title: "Ready to run it at home?", body: "Three commands, then your first private answer.", children: /* @__PURE__ */ jsx(ActionBar, { primaryFirst: true, size: "lg", label: "Get started", actions: [{ href: "#install", label: "Install" }, { href: "#contact", label: "Talk to us" }] }) }) })
73
+ ]
74
+ }
75
+ ) });
76
+ }
77
+ export {
78
+ MarketingLayoutProductPage as default
79
+ };
@@ -0,0 +1,83 @@
1
+ import { ProductLogo } from "@krizaka/ui";
2
+ import { ActionBar } from "@krizaka/ui/action-bar";
3
+ import { ArgumentCard } from "@krizaka/ui/argument-card";
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { CardGrid } from "@krizaka/ui/card-grid";
6
+ import { CtaPanel } from "@krizaka/ui/cta-panel";
7
+ import { DecisionList } from "@krizaka/ui/decision-list";
8
+ import { MarketingLayout } from "@krizaka/ui/marketing-layout";
9
+ import { MascotQuote } from "@krizaka/ui/mascot-quote";
10
+ import { Mascot } from "@krizaka/ui/mascots";
11
+ import { NavBar } from "@krizaka/ui/nav-bar";
12
+ import { Facts, Section } from "@krizaka/ui/page";
13
+ import { PageHero } from "@krizaka/ui/page-hero";
14
+
15
+ const WHY = [
16
+ { id: "local", title: "Local inference", hook: "Elsewhere, every prompt crosses the ocean.", bird: "falcon" as const },
17
+ { id: "paid", title: "Paid once", hook: "Elsewhere, you pay per token, forever.", bird: "flamingo" as const },
18
+ { id: "asked", title: "Agents that ask", hook: "Elsewhere, an agent acts first and apologises later.", bird: "pigeon" as const },
19
+ ];
20
+ const DECISIONS = [
21
+ { id: "local", chose: "Local models by default.", refused: "A hosted API as the default path.", because: "A prompt that never leaves cannot leak.", cost: "You need a GPU, or patience on a CPU." },
22
+ { id: "telemetry", chose: "Zero telemetry.", refused: "Anonymous usage statistics.", because: "Anonymous rarely stays anonymous.", cost: "You tell us what breaks." },
23
+ ];
24
+ const labels = { chose: "We chose", refused: "We refused", because: "Because", cost: "What it costs you" };
25
+
26
+ // TEMPLATE — a product page (Orazaka): the hero with its facts and its main action (cut, shimmer), the reasons as compact
27
+ // argument cards (the bird in the corner), the decisions with their cost, the owl's promise, the closing call. On a
28
+ // phone the hero's bird goes above the title, the cards stack, the decisions' three parts stack under the choice.
29
+ export default function MarketingLayoutProductPage() {
30
+ return (
31
+ <div className="brand-orazaka">
32
+ <MarketingLayout
33
+ skipLabel="Skip to content"
34
+ header={
35
+ <NavBar.Root label="Main" compactAfter={false} className="max-w-(--kz-page-max,72rem)">
36
+ <NavBar.Brand href="#home"><ProductLogo id="orazaka" size={22} animated={false} /> Orazaka</NavBar.Brand>
37
+ <NavBar.Items>
38
+ <NavBar.Link href="#why" active>Why</NavBar.Link>
39
+ <NavBar.Link href="#decisions">Decisions</NavBar.Link>
40
+ </NavBar.Items>
41
+ </NavBar.Root>
42
+ }
43
+ >
44
+ <PageHero
45
+ eyebrow="Sovereign AI · open source"
46
+ title="The AI that never leaves home"
47
+ lead="Chat, image, voice and video on your own server — one governed pipeline, nothing sent anywhere."
48
+ aside={<Mascot bird="owl" mood="welcome" size={112} />}
49
+ >
50
+ <Facts items={[{ label: "Apache-2.0", tone: "ok" }, { label: "Law 25 · GDPR" }]} />
51
+ <Button variant="primary" size="lg" shape="cut" shimmer>Install in three commands</Button>
52
+ </PageHero>
53
+ <Section id="why" eyebrow="Why" title="Three traps it removes">
54
+ <CardGrid min={260} fit="fit" reveal={false}>
55
+ {WHY.map((w) => (
56
+ <ArgumentCard
57
+ key={w.id}
58
+ id={`why-${w.id}`}
59
+ title={w.title}
60
+ mark={<Mascot bird={w.bird} size={40} animated={false} />}
61
+ hook={{ label: "The trap", text: w.hook }}
62
+ more={{ href: `#${w.id}`, label: "Details" }}
63
+ />
64
+ ))}
65
+ </CardGrid>
66
+ </Section>
67
+ <Section id="decisions" eyebrow="Decisions" title="What we chose, and what it costs you" divider>
68
+ <DecisionList decisions={DECISIONS} labels={labels} reveal={false} />
69
+ <div className="mt-8">
70
+ <MascotQuote variant="callout" bird="owl" label="The owl's promise">
71
+ Every personal record stays in Québec, and you can read who touched it.
72
+ </MascotQuote>
73
+ </div>
74
+ </Section>
75
+ <Section spacing="sm" aria-labelledby="product-cta">
76
+ <CtaPanel id="product-cta" title="Ready to run it at home?" body="Three commands, then your first private answer.">
77
+ <ActionBar primaryFirst size="lg" label="Get started" actions={[{ href: "#install", label: "Install" }, { href: "#contact", label: "Talk to us" }]} />
78
+ </CtaPanel>
79
+ </Section>
80
+ </MarketingLayout>
81
+ </div>
82
+ );
83
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,21 @@
1
+ "use client";
2
+
3
+ // registry/examples/mascots/native/phoenix.tsx
4
+ import { Phoenix, Txt } from "@krizaka/ui/native";
5
+ import { View } from "react-native";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function NativeMascotPhoenix() {
8
+ return /* @__PURE__ */ jsxs(View, { style: { flexDirection: "row", gap: 20, alignItems: "flex-end" }, children: [
9
+ /* @__PURE__ */ jsxs(View, { style: { alignItems: "center", gap: 4 }, children: [
10
+ /* @__PURE__ */ jsx(Phoenix, { size: 88, animated: false }),
11
+ /* @__PURE__ */ jsx(Txt, { variant: "caption", children: "own" })
12
+ ] }),
13
+ /* @__PURE__ */ jsxs(View, { style: { alignItems: "center", gap: 4 }, children: [
14
+ /* @__PURE__ */ jsx(Phoenix, { size: 88, tone: "brand", animated: false }),
15
+ /* @__PURE__ */ jsx(Txt, { variant: "caption", children: "brand" })
16
+ ] })
17
+ ] });
18
+ }
19
+ export {
20
+ NativeMascotPhoenix as default
21
+ };
@@ -0,0 +1,18 @@
1
+ import { Phoenix, Txt } from "@krizaka/ui/native";
2
+ import { View } from "react-native";
3
+
4
+ // The comeback: the phoenix in its own colours, then in the app's accent.
5
+ export default function NativeMascotPhoenix() {
6
+ return (
7
+ <View style={{ flexDirection: "row", gap: 20, alignItems: "flex-end" }}>
8
+ <View style={{ alignItems: "center", gap: 4 }}>
9
+ <Phoenix size={88} animated={false} />
10
+ <Txt variant="caption">own</Txt>
11
+ </View>
12
+ <View style={{ alignItems: "center", gap: 4 }}>
13
+ <Phoenix size={88} tone="brand" animated={false} />
14
+ <Txt variant="caption">brand</Txt>
15
+ </View>
16
+ </View>
17
+ );
18
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,14 @@
1
+ "use client";
2
+
3
+ // registry/examples/mascots/phoenix.tsx
4
+ import { Phoenix } from "@krizaka/ui/mascots";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function MascotPhoenix() {
7
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-end gap-8", children: [
8
+ /* @__PURE__ */ jsx(Phoenix, { size: 112, title: "The phoenix" }),
9
+ /* @__PURE__ */ jsx(Phoenix, { size: 112, tone: "brand", title: "The phoenix in the brand's colours" })
10
+ ] });
11
+ }
12
+ export {
13
+ MascotPhoenix as default
14
+ };
@@ -0,0 +1,11 @@
1
+ import { Phoenix } from "@krizaka/ui/mascots";
2
+
3
+ // The phoenix stands for a comeback — a relaunch, a recovered account: its own colours, then the product's accent.
4
+ export default function MascotPhoenix() {
5
+ return (
6
+ <div className="flex flex-wrap items-end gap-8">
7
+ <Phoenix size={112} title="The phoenix" />
8
+ <Phoenix size={112} tone="brand" title="The phoenix in the brand's colours" />
9
+ </div>
10
+ );
11
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,25 @@
1
+ "use client";
2
+
3
+ // registry/examples/profile-card/arcade.tsx
4
+ import { ProductLogo } from "@krizaka/ui";
5
+ import { Emblem } from "@krizaka/ui/achievement";
6
+ import { ProfileCard } from "@krizaka/ui/profile-card";
7
+ import { jsx } from "react/jsx-runtime";
8
+ function ProfileCardArcade() {
9
+ return /* @__PURE__ */ jsx(
10
+ ProfileCard,
11
+ {
12
+ variant: "arcade",
13
+ brand: "orazaka",
14
+ nameAs: "p",
15
+ visual: /* @__PURE__ */ jsx(ProductLogo, { id: "orazaka", size: 120, animated: false }),
16
+ icon: /* @__PURE__ */ jsx(Emblem, { kind: "mirror", size: 16 }),
17
+ name: "Mirror clan",
18
+ statLabel: "Data kept at home",
19
+ caption: "\u014Dr\u0101re + zaka"
20
+ }
21
+ );
22
+ }
23
+ export {
24
+ ProfileCardArcade as default
25
+ };
@@ -0,0 +1,19 @@
1
+ import { ProductLogo } from "@krizaka/ui";
2
+ import { Emblem } from "@krizaka/ui/achievement";
3
+ import { ProfileCard } from "@krizaka/ui/profile-card";
4
+
5
+ // The arcade flavour: the brand's light, a ring and a breathing aura, a skewed gauge — for a told page, not a dashboard.
6
+ export default function ProfileCardArcade() {
7
+ return (
8
+ <ProfileCard
9
+ variant="arcade"
10
+ brand="orazaka"
11
+ nameAs="p"
12
+ visual={<ProductLogo id="orazaka" size={120} animated={false} />}
13
+ icon={<Emblem kind="mirror" size={16} />}
14
+ name="Mirror clan"
15
+ statLabel="Data kept at home"
16
+ caption="ōrāre + zaka"
17
+ />
18
+ );
19
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,31 @@
1
+ "use client";
2
+
3
+ // registry/examples/profile-card/creator.tsx
4
+ import { Avatar } from "@krizaka/ui/avatar";
5
+ import { Button } from "@krizaka/ui/button";
6
+ import { ProfileCard } from "@krizaka/ui/profile-card";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ function ProfileCardCreator() {
9
+ return /* @__PURE__ */ jsxs(
10
+ ProfileCard,
11
+ {
12
+ visual: /* @__PURE__ */ jsx(Avatar, { fallback: "EM", size: "xl" }),
13
+ visualSize: 96,
14
+ name: "Elena Marchetti",
15
+ statLabel: "Profile complete",
16
+ value: 80,
17
+ stats: [
18
+ { label: "Challenges met", value: 12, max: 15, valueText: "12 of 15" },
19
+ { label: "Replies within a day", value: 94 }
20
+ ],
21
+ caption: "Dance and street fashion \xB7 Montr\xE9al",
22
+ children: [
23
+ /* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", children: "Follow" }),
24
+ /* @__PURE__ */ jsx(Button, { size: "sm", children: "Message" })
25
+ ]
26
+ }
27
+ );
28
+ }
29
+ export {
30
+ ProfileCardCreator as default
31
+ };
@@ -0,0 +1,26 @@
1
+ import { Avatar } from "@krizaka/ui/avatar";
2
+ import { Button } from "@krizaka/ui/button";
3
+ import { ProfileCard } from "@krizaka/ui/profile-card";
4
+
5
+ // A creator at a glance: the headline gauge, the stats with their values in words, the actions under them.
6
+ export default function ProfileCardCreator() {
7
+ return (
8
+ <ProfileCard
9
+ visual={<Avatar fallback="EM" size="xl" />}
10
+ visualSize={96}
11
+ name="Elena Marchetti"
12
+ statLabel="Profile complete"
13
+ value={80}
14
+ stats={[
15
+ { label: "Challenges met", value: 12, max: 15, valueText: "12 of 15" },
16
+ { label: "Replies within a day", value: 94 },
17
+ ]}
18
+ caption="Dance and street fashion · Montréal"
19
+ >
20
+ <Button variant="primary" size="sm">
21
+ Follow
22
+ </Button>
23
+ <Button size="sm">Message</Button>
24
+ </ProfileCard>
25
+ );
26
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,25 @@
1
+ "use client";
2
+
3
+ // registry/examples/profile-card/match.tsx
4
+ import { Avatar } from "@krizaka/ui/avatar";
5
+ import { ProfileCard } from "@krizaka/ui/profile-card";
6
+ import { jsx } from "react/jsx-runtime";
7
+ function ProfileCardMatch() {
8
+ return /* @__PURE__ */ jsx(
9
+ ProfileCard,
10
+ {
11
+ brand: "yazakia",
12
+ visual: /* @__PURE__ */ jsx(Avatar, { fallback: "AR", size: "xl" }),
13
+ visualSize: 88,
14
+ name: "Alex, 29",
15
+ stats: [
16
+ { label: "Interests in common", value: 4, max: 6, valueText: "4 of 6" },
17
+ { label: "Answers that match", value: 7, max: 10, valueText: "7 of 10" }
18
+ ],
19
+ caption: "You both answered \u201Ca slow Sunday market\u201D first."
20
+ }
21
+ );
22
+ }
23
+ export {
24
+ ProfileCardMatch as default
25
+ };
@@ -0,0 +1,19 @@
1
+ import { Avatar } from "@krizaka/ui/avatar";
2
+ import { ProfileCard } from "@krizaka/ui/profile-card";
3
+
4
+ // A match in a dating app: what you share, in words — never a score alone.
5
+ export default function ProfileCardMatch() {
6
+ return (
7
+ <ProfileCard
8
+ brand="yazakia"
9
+ visual={<Avatar fallback="AR" size="xl" />}
10
+ visualSize={88}
11
+ name="Alex, 29"
12
+ stats={[
13
+ { label: "Interests in common", value: 4, max: 6, valueText: "4 of 6" },
14
+ { label: "Answers that match", value: 7, max: 10, valueText: "7 of 10" },
15
+ ]}
16
+ caption="You both answered “a slow Sunday market” first."
17
+ />
18
+ );
19
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,27 @@
1
+ "use client";
2
+
3
+ // registry/examples/profile-card/native/default.tsx
4
+ import { Avatar, Button, ProfileCard } from "@krizaka/ui/native";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function NativeProfileCardDefault() {
7
+ return /* @__PURE__ */ jsx(
8
+ ProfileCard,
9
+ {
10
+ visual: /* @__PURE__ */ jsx(Avatar, { fallback: "EM", size: "xl" }),
11
+ name: "Elena Marchetti",
12
+ statLabel: "Profile complete",
13
+ value: 80,
14
+ stats: [
15
+ { label: "Challenges met", value: 12, max: 15, valueText: "12 of 15" },
16
+ { label: "Replies within a day", value: 94 }
17
+ ],
18
+ caption: "Dance and street fashion \xB7 Montr\xE9al",
19
+ animated: false,
20
+ style: { width: 300 },
21
+ children: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", label: "Follow" })
22
+ }
23
+ );
24
+ }
25
+ export {
26
+ NativeProfileCardDefault as default
27
+ };
@@ -0,0 +1,22 @@
1
+ import { Avatar, Button, ProfileCard } from "@krizaka/ui/native";
2
+
3
+ // A creator at a glance on mobile: the headline gauge, two stats in words, one action.
4
+ export default function NativeProfileCardDefault() {
5
+ return (
6
+ <ProfileCard
7
+ visual={<Avatar fallback="EM" size="xl" />}
8
+ name="Elena Marchetti"
9
+ statLabel="Profile complete"
10
+ value={80}
11
+ stats={[
12
+ { label: "Challenges met", value: 12, max: 15, valueText: "12 of 15" },
13
+ { label: "Replies within a day", value: 94 },
14
+ ]}
15
+ caption="Dance and street fashion · Montréal"
16
+ animated={false}
17
+ style={{ width: 300 }}
18
+ >
19
+ <Button variant="primary" size="sm" label="Follow" />
20
+ </ProfileCard>
21
+ );
22
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,25 @@
1
+ "use client";
2
+
3
+ // registry/examples/promise-card/arcade.tsx
4
+ import { Mascot } from "@krizaka/ui/mascots";
5
+ import { PromiseCard } from "@krizaka/ui/promise-card";
6
+ import { jsx } from "react/jsx-runtime";
7
+ function PromiseCardArcade() {
8
+ return /* @__PURE__ */ jsx(
9
+ PromiseCard,
10
+ {
11
+ variant: "arcade",
12
+ brand: "orochia",
13
+ className: "w-[30rem] max-w-full",
14
+ label: "Special move",
15
+ promise: "90 % to the creator. On every sale.",
16
+ keys: ["\u2192", "\u2193", "\u2198", "P+K"],
17
+ bearer: /* @__PURE__ */ jsx(Mascot, { bird: "flamingo", mood: "success", size: 48, animated: false }),
18
+ bearerLabel: "In the corner",
19
+ bearerName: "The flamingo \xB7 gets paid"
20
+ }
21
+ );
22
+ }
23
+ export {
24
+ PromiseCardArcade as default
25
+ };
@@ -0,0 +1,19 @@
1
+ import { Mascot } from "@krizaka/ui/mascots";
2
+ import { PromiseCard } from "@krizaka/ui/promise-card";
3
+
4
+ // The special move of a told page: the input lights key by key, then the move lands, carried by the clan's bird.
5
+ export default function PromiseCardArcade() {
6
+ return (
7
+ <PromiseCard
8
+ variant="arcade"
9
+ brand="orochia"
10
+ className="w-[30rem] max-w-full"
11
+ label="Special move"
12
+ promise="90 % to the creator. On every sale."
13
+ keys={["→", "↓", "↘", "P+K"]}
14
+ bearer={<Mascot bird="flamingo" mood="success" size={48} animated={false} />}
15
+ bearerLabel="In the corner"
16
+ bearerName="The flamingo · gets paid"
17
+ />
18
+ );
19
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,23 @@
1
+ "use client";
2
+
3
+ // registry/examples/promise-card/guarantee.tsx
4
+ import { Mascot } from "@krizaka/ui/mascots";
5
+ import { PromiseCard } from "@krizaka/ui/promise-card";
6
+ import { jsx } from "react/jsx-runtime";
7
+ function PromiseCardGuarantee() {
8
+ return /* @__PURE__ */ jsx(
9
+ PromiseCard,
10
+ {
11
+ className: "w-[30rem] max-w-full",
12
+ label: "Our promise",
13
+ promise: "Your documents never leave your servers.",
14
+ keys: ["\u2318", "K"],
15
+ bearer: /* @__PURE__ */ jsx(Mascot, { bird: "owl", mood: "success", size: 48, animated: false }),
16
+ bearerLabel: "Kept by",
17
+ bearerName: "The owl \xB7 reads, and keeps it in the house"
18
+ }
19
+ );
20
+ }
21
+ export {
22
+ PromiseCardGuarantee as default
23
+ };