@krizaka/ui 2.8.0 → 2.10.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 (423) hide show
  1. package/README.md +73 -5
  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/blocks.css +247 -0
  12. package/dist/catalogue-page.d.ts +34 -0
  13. package/dist/catalogue-page.js +26 -0
  14. package/dist/catalogue-page.js.map +1 -0
  15. package/dist/changelog-page.d.ts +50 -0
  16. package/dist/changelog-page.js +27 -0
  17. package/dist/changelog-page.js.map +1 -0
  18. package/dist/choice-grid.d.ts +84 -0
  19. package/dist/choice-grid.js +141 -0
  20. package/dist/choice-grid.js.map +1 -0
  21. package/dist/chunk-555LWYIN.js +11 -0
  22. package/dist/chunk-555LWYIN.js.map +1 -0
  23. package/dist/chunk-AZPKXP3O.js +36 -0
  24. package/dist/chunk-AZPKXP3O.js.map +1 -0
  25. package/dist/{chunk-NOVUREEC.js → chunk-JZPVUJIX.js} +25 -3
  26. package/dist/chunk-JZPVUJIX.js.map +1 -0
  27. package/dist/chunk-KNBYZGSQ.js +11 -0
  28. package/dist/chunk-KNBYZGSQ.js.map +1 -0
  29. package/dist/chunk-VCAAHCHL.js +17 -0
  30. package/dist/chunk-VCAAHCHL.js.map +1 -0
  31. package/dist/code-block.js +23 -44
  32. package/dist/code-block.js.map +1 -1
  33. package/dist/component-page.d.ts +41 -0
  34. package/dist/component-page.js +17 -0
  35. package/dist/component-page.js.map +1 -0
  36. package/dist/contact-page.d.ts +31 -0
  37. package/dist/contact-page.js +26 -0
  38. package/dist/contact-page.js.map +1 -0
  39. package/dist/continue-prompt.d.ts +48 -0
  40. package/dist/continue-prompt.js +200 -0
  41. package/dist/continue-prompt.js.map +1 -0
  42. package/dist/dashboard-layout.d.ts +139 -0
  43. package/dist/dashboard-layout.js +68 -0
  44. package/dist/dashboard-layout.js.map +1 -0
  45. package/dist/detail-layout.d.ts +126 -0
  46. package/dist/detail-layout.js +48 -0
  47. package/dist/detail-layout.js.map +1 -0
  48. package/dist/docs-article-page.d.ts +54 -0
  49. package/dist/docs-article-page.js +29 -0
  50. package/dist/docs-article-page.js.map +1 -0
  51. package/dist/docs-hub-page.d.ts +72 -0
  52. package/dist/docs-hub-page.js +45 -0
  53. package/dist/docs-hub-page.js.map +1 -0
  54. package/dist/docs-layout.d.ts +78 -0
  55. package/dist/docs-layout.js +60 -0
  56. package/dist/docs-layout.js.map +1 -0
  57. package/dist/error-page.d.ts +22 -0
  58. package/dist/error-page.js +23 -0
  59. package/dist/error-page.js.map +1 -0
  60. package/dist/gallery-page.d.ts +50 -0
  61. package/dist/gallery-page.js +30 -0
  62. package/dist/gallery-page.js.map +1 -0
  63. package/dist/{geometry-CXrAW34x.d.ts → geometry-CbOU4rtL.d.ts} +4 -4
  64. package/dist/goal-gauge.d.ts +38 -0
  65. package/dist/goal-gauge.js +53 -0
  66. package/dist/goal-gauge.js.map +1 -0
  67. package/dist/how-it-works-page.d.ts +48 -0
  68. package/dist/how-it-works-page.js +28 -0
  69. package/dist/how-it-works-page.js.map +1 -0
  70. package/dist/index.d.ts +16 -6
  71. package/dist/index.js +115 -24
  72. package/dist/index.js.map +1 -1
  73. package/dist/landing-page.d.ts +58 -0
  74. package/dist/landing-page.js +42 -0
  75. package/dist/landing-page.js.map +1 -0
  76. package/dist/landscape.d.ts +41 -0
  77. package/dist/landscape.js +836 -0
  78. package/dist/landscape.js.map +1 -0
  79. package/dist/legal-page.d.ts +34 -0
  80. package/dist/legal-page.js +18 -0
  81. package/dist/legal-page.js.map +1 -0
  82. package/dist/longform-page.d.ts +42 -0
  83. package/dist/longform-page.js +29 -0
  84. package/dist/longform-page.js.map +1 -0
  85. package/dist/marketing-layout.d.ts +60 -0
  86. package/dist/marketing-layout.js +25 -0
  87. package/dist/marketing-layout.js.map +1 -0
  88. package/dist/mascot-quote.d.ts +4 -4
  89. package/dist/mascot-quote.js +23 -1
  90. package/dist/mascot-quote.js.map +1 -1
  91. package/dist/mascot-state.d.ts +2 -2
  92. package/dist/mascot-state.js +1 -1
  93. package/dist/mascot-state.js.map +1 -1
  94. package/dist/mascots.d.ts +18 -5
  95. package/dist/mascots.js +87 -2
  96. package/dist/mascots.js.map +1 -1
  97. package/dist/native.d.ts +88 -11
  98. package/dist/native.js +640 -297
  99. package/dist/native.js.map +1 -1
  100. package/dist/pricing-page.d.ts +62 -0
  101. package/dist/pricing-page.js +71 -0
  102. package/dist/pricing-page.js.map +1 -0
  103. package/dist/product-page.d.ts +83 -0
  104. package/dist/product-page.js +60 -0
  105. package/dist/product-page.js.map +1 -0
  106. package/dist/profile-card.d.ts +85 -0
  107. package/dist/profile-card.js +87 -0
  108. package/dist/profile-card.js.map +1 -0
  109. package/dist/promise-card.d.ts +28 -0
  110. package/dist/promise-card.js +29 -0
  111. package/dist/promise-card.js.map +1 -0
  112. package/dist/scroll-stage.d.ts +603 -0
  113. package/dist/scroll-stage.js +59 -0
  114. package/dist/scroll-stage.js.map +1 -0
  115. package/dist/settings-layout.d.ts +154 -0
  116. package/dist/settings-layout.js +57 -0
  117. package/dist/settings-layout.js.map +1 -0
  118. package/dist/split-view.d.ts +106 -0
  119. package/dist/split-view.js +41 -0
  120. package/dist/split-view.js.map +1 -0
  121. package/dist/stage-banner.d.ts +34 -0
  122. package/dist/stage-banner.js +26 -0
  123. package/dist/stage-banner.js.map +1 -0
  124. package/dist/status-page.d.ts +42 -0
  125. package/dist/status-page.js +28 -0
  126. package/dist/status-page.js.map +1 -0
  127. package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
  128. package/dist/story.css +432 -0
  129. package/package.json +478 -10
  130. package/registry/achievement.json +322 -0
  131. package/registry/action-bar.json +1 -1
  132. package/registry/alert.json +1 -1
  133. package/registry/app-shell.json +451 -0
  134. package/registry/argument-card.json +1 -1
  135. package/registry/audio-player.json +1 -1
  136. package/registry/auth-layout.json +230 -0
  137. package/registry/avatar.json +1 -1
  138. package/registry/badge.json +1 -1
  139. package/registry/button.json +5 -5
  140. package/registry/card-grid.json +5 -5
  141. package/registry/card.json +3 -3
  142. package/registry/catalogue-page.json +240 -0
  143. package/registry/changelog-page.json +226 -0
  144. package/registry/checkbox.json +1 -1
  145. package/registry/chip-link.json +1 -1
  146. package/registry/chip.json +1 -1
  147. package/registry/choice-grid.json +318 -0
  148. package/registry/code-block.json +1 -1
  149. package/registry/combobox.json +1 -1
  150. package/registry/command.json +1 -1
  151. package/registry/component-page.json +227 -0
  152. package/registry/confirm-button.json +3 -3
  153. package/registry/contact-page.json +212 -0
  154. package/registry/continue-prompt.json +312 -0
  155. package/registry/countdown.json +1 -1
  156. package/registry/cta-panel.json +1 -1
  157. package/registry/dashboard-layout.json +273 -0
  158. package/registry/data-table.json +1 -1
  159. package/registry/date-picker.json +1 -1
  160. package/registry/decision-list.json +1 -1
  161. package/registry/detail-layout.json +233 -0
  162. package/registry/dialog.json +1 -1
  163. package/registry/docs-article-page.json +242 -0
  164. package/registry/docs-hub-page.json +270 -0
  165. package/registry/docs-layout.json +148 -0
  166. package/registry/dropdown-menu.json +3 -3
  167. package/registry/empty-state.json +1 -1
  168. package/registry/error-page.json +183 -0
  169. package/registry/examples/achievement/arcade.d.ts +4 -0
  170. package/registry/examples/achievement/arcade.js +15 -0
  171. package/registry/examples/achievement/arcade.tsx +12 -0
  172. package/registry/examples/achievement/milestones.d.ts +4 -0
  173. package/registry/examples/achievement/milestones.js +15 -0
  174. package/registry/examples/achievement/milestones.tsx +12 -0
  175. package/registry/examples/app-shell/admin-console.d.ts +4 -0
  176. package/registry/examples/app-shell/admin-console.js +52 -0
  177. package/registry/examples/app-shell/admin-console.tsx +64 -0
  178. package/registry/examples/app-shell/basic.d.ts +4 -0
  179. package/registry/examples/app-shell/basic.js +37 -0
  180. package/registry/examples/app-shell/basic.tsx +31 -0
  181. package/registry/examples/app-shell/orochia-studio.d.ts +4 -0
  182. package/registry/examples/app-shell/orochia-studio.js +89 -0
  183. package/registry/examples/app-shell/orochia-studio.tsx +101 -0
  184. package/registry/examples/auth-layout/onboarding.d.ts +4 -0
  185. package/registry/examples/auth-layout/onboarding.js +56 -0
  186. package/registry/examples/auth-layout/onboarding.tsx +47 -0
  187. package/registry/examples/auth-layout/sign-in.d.ts +4 -0
  188. package/registry/examples/auth-layout/sign-in.js +55 -0
  189. package/registry/examples/auth-layout/sign-in.tsx +47 -0
  190. package/registry/examples/auth-layout/verify.d.ts +4 -0
  191. package/registry/examples/auth-layout/verify.js +23 -0
  192. package/registry/examples/auth-layout/verify.tsx +19 -0
  193. package/registry/examples/catalogue-page/components.d.ts +4 -0
  194. package/registry/examples/catalogue-page/components.js +33 -0
  195. package/registry/examples/catalogue-page/components.tsx +36 -0
  196. package/registry/examples/changelog-page/releases.d.ts +4 -0
  197. package/registry/examples/changelog-page/releases.js +44 -0
  198. package/registry/examples/changelog-page/releases.tsx +39 -0
  199. package/registry/examples/choice-grid/line-up.d.ts +4 -0
  200. package/registry/examples/choice-grid/line-up.js +37 -0
  201. package/registry/examples/choice-grid/line-up.tsx +32 -0
  202. package/registry/examples/choice-grid/plans.d.ts +4 -0
  203. package/registry/examples/choice-grid/plans.js +28 -0
  204. package/registry/examples/choice-grid/plans.tsx +24 -0
  205. package/registry/examples/component-page/button.d.ts +4 -0
  206. package/registry/examples/component-page/button.js +33 -0
  207. package/registry/examples/component-page/button.tsx +30 -0
  208. package/registry/examples/contact-page/team.d.ts +4 -0
  209. package/registry/examples/contact-page/team.js +39 -0
  210. package/registry/examples/contact-page/team.tsx +38 -0
  211. package/registry/examples/continue-prompt/arcade.d.ts +4 -0
  212. package/registry/examples/continue-prompt/arcade.js +28 -0
  213. package/registry/examples/continue-prompt/arcade.tsx +25 -0
  214. package/registry/examples/continue-prompt/offer.d.ts +4 -0
  215. package/registry/examples/continue-prompt/offer.js +24 -0
  216. package/registry/examples/continue-prompt/offer.tsx +19 -0
  217. package/registry/examples/dashboard-layout/orazaka-eric.d.ts +4 -0
  218. package/registry/examples/dashboard-layout/orazaka-eric.js +58 -0
  219. package/registry/examples/dashboard-layout/orazaka-eric.tsx +80 -0
  220. package/registry/examples/dashboard-layout/widgets.d.ts +4 -0
  221. package/registry/examples/dashboard-layout/widgets.js +17 -0
  222. package/registry/examples/dashboard-layout/widgets.tsx +22 -0
  223. package/registry/examples/detail-layout/job.d.ts +4 -0
  224. package/registry/examples/detail-layout/job.js +25 -0
  225. package/registry/examples/detail-layout/job.tsx +20 -0
  226. package/registry/examples/detail-layout/video.d.ts +4 -0
  227. package/registry/examples/detail-layout/video.js +44 -0
  228. package/registry/examples/detail-layout/video.tsx +53 -0
  229. package/registry/examples/docs-article-page/cli.d.ts +4 -0
  230. package/registry/examples/docs-article-page/cli.js +33 -0
  231. package/registry/examples/docs-article-page/cli.tsx +38 -0
  232. package/registry/examples/docs-hub-page/krizaka.d.ts +4 -0
  233. package/registry/examples/docs-hub-page/krizaka.js +46 -0
  234. package/registry/examples/docs-hub-page/krizaka.tsx +37 -0
  235. package/registry/examples/docs-layout/page.d.ts +4 -0
  236. package/registry/examples/docs-layout/page.js +26 -0
  237. package/registry/examples/docs-layout/page.tsx +30 -0
  238. package/registry/examples/error-page/not-found.d.ts +4 -0
  239. package/registry/examples/error-page/not-found.js +24 -0
  240. package/registry/examples/error-page/not-found.tsx +19 -0
  241. package/registry/examples/gallery-page/made-here.d.ts +4 -0
  242. package/registry/examples/gallery-page/made-here.js +34 -0
  243. package/registry/examples/gallery-page/made-here.tsx +32 -0
  244. package/registry/examples/goal-gauge/arcade.d.ts +4 -0
  245. package/registry/examples/goal-gauge/arcade.js +11 -0
  246. package/registry/examples/goal-gauge/arcade.tsx +10 -0
  247. package/registry/examples/goal-gauge/challenge.d.ts +4 -0
  248. package/registry/examples/goal-gauge/challenge.js +11 -0
  249. package/registry/examples/goal-gauge/challenge.tsx +10 -0
  250. package/registry/examples/goal-gauge/drain.d.ts +4 -0
  251. package/registry/examples/goal-gauge/drain.js +11 -0
  252. package/registry/examples/goal-gauge/drain.tsx +10 -0
  253. package/registry/examples/goal-gauge/native/default.d.ts +4 -0
  254. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  255. package/registry/examples/goal-gauge/native/default.js +15 -0
  256. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  257. package/registry/examples/goal-gauge/native/default.tsx +12 -0
  258. package/registry/examples/how-it-works-page/orazaka.d.ts +4 -0
  259. package/registry/examples/how-it-works-page/orazaka.js +30 -0
  260. package/registry/examples/how-it-works-page/orazaka.tsx +26 -0
  261. package/registry/examples/landing-page/krizaka.d.ts +4 -0
  262. package/registry/examples/landing-page/krizaka.js +44 -0
  263. package/registry/examples/landing-page/krizaka.tsx +44 -0
  264. package/registry/examples/landscape/backdrop.d.ts +4 -0
  265. package/registry/examples/landscape/backdrop.js +14 -0
  266. package/registry/examples/landscape/backdrop.tsx +11 -0
  267. package/registry/examples/landscape/brand.d.ts +4 -0
  268. package/registry/examples/landscape/brand.js +11 -0
  269. package/registry/examples/landscape/brand.tsx +10 -0
  270. package/registry/examples/legal-page/privacy.d.ts +4 -0
  271. package/registry/examples/legal-page/privacy.js +24 -0
  272. package/registry/examples/legal-page/privacy.tsx +19 -0
  273. package/registry/examples/longform-page/story.d.ts +4 -0
  274. package/registry/examples/longform-page/story.js +38 -0
  275. package/registry/examples/longform-page/story.tsx +35 -0
  276. package/registry/examples/marketing-layout/basic.d.ts +4 -0
  277. package/registry/examples/marketing-layout/basic.js +31 -0
  278. package/registry/examples/marketing-layout/basic.tsx +28 -0
  279. package/registry/examples/marketing-layout/docs-hub.d.ts +4 -0
  280. package/registry/examples/marketing-layout/docs-hub.js +37 -0
  281. package/registry/examples/marketing-layout/docs-hub.tsx +44 -0
  282. package/registry/examples/marketing-layout/pricing.d.ts +4 -0
  283. package/registry/examples/marketing-layout/pricing.js +45 -0
  284. package/registry/examples/marketing-layout/pricing.tsx +55 -0
  285. package/registry/examples/marketing-layout/product-page.d.ts +4 -0
  286. package/registry/examples/marketing-layout/product-page.js +79 -0
  287. package/registry/examples/marketing-layout/product-page.tsx +83 -0
  288. package/registry/examples/mascots/crane.d.ts +4 -0
  289. package/registry/examples/mascots/crane.js +19 -0
  290. package/registry/examples/mascots/crane.tsx +18 -0
  291. package/registry/examples/mascots/flock.tsx +2 -1
  292. package/registry/examples/mascots/native/crane.d.ts +4 -0
  293. package/registry/examples/mascots/native/crane.dark.png +0 -0
  294. package/registry/examples/mascots/native/crane.js +21 -0
  295. package/registry/examples/mascots/native/crane.light.png +0 -0
  296. package/registry/examples/mascots/native/crane.tsx +18 -0
  297. package/registry/examples/mascots/native/phoenix.d.ts +4 -0
  298. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  299. package/registry/examples/mascots/native/phoenix.js +21 -0
  300. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  301. package/registry/examples/mascots/native/phoenix.tsx +18 -0
  302. package/registry/examples/mascots/phoenix.d.ts +4 -0
  303. package/registry/examples/mascots/phoenix.js +14 -0
  304. package/registry/examples/mascots/phoenix.tsx +11 -0
  305. package/registry/examples/pricing-page/credits.d.ts +4 -0
  306. package/registry/examples/pricing-page/credits.js +41 -0
  307. package/registry/examples/pricing-page/credits.tsx +33 -0
  308. package/registry/examples/product-page/orazaka.d.ts +4 -0
  309. package/registry/examples/product-page/orazaka.js +44 -0
  310. package/registry/examples/product-page/orazaka.tsx +36 -0
  311. package/registry/examples/profile-card/arcade.d.ts +4 -0
  312. package/registry/examples/profile-card/arcade.js +25 -0
  313. package/registry/examples/profile-card/arcade.tsx +19 -0
  314. package/registry/examples/profile-card/creator.d.ts +4 -0
  315. package/registry/examples/profile-card/creator.js +31 -0
  316. package/registry/examples/profile-card/creator.tsx +26 -0
  317. package/registry/examples/profile-card/match.d.ts +4 -0
  318. package/registry/examples/profile-card/match.js +25 -0
  319. package/registry/examples/profile-card/match.tsx +19 -0
  320. package/registry/examples/profile-card/native/default.d.ts +4 -0
  321. package/registry/examples/profile-card/native/default.dark.png +0 -0
  322. package/registry/examples/profile-card/native/default.js +27 -0
  323. package/registry/examples/profile-card/native/default.light.png +0 -0
  324. package/registry/examples/profile-card/native/default.tsx +22 -0
  325. package/registry/examples/promise-card/arcade.d.ts +4 -0
  326. package/registry/examples/promise-card/arcade.js +25 -0
  327. package/registry/examples/promise-card/arcade.tsx +19 -0
  328. package/registry/examples/promise-card/guarantee.d.ts +4 -0
  329. package/registry/examples/promise-card/guarantee.js +23 -0
  330. package/registry/examples/promise-card/guarantee.tsx +17 -0
  331. package/registry/examples/scroll-stage/arcade.d.ts +4 -0
  332. package/registry/examples/scroll-stage/arcade.js +16 -0
  333. package/registry/examples/scroll-stage/arcade.tsx +15 -0
  334. package/registry/examples/scroll-stage/chapters.d.ts +4 -0
  335. package/registry/examples/scroll-stage/chapters.js +25 -0
  336. package/registry/examples/scroll-stage/chapters.tsx +22 -0
  337. package/registry/examples/settings-layout/account.d.ts +4 -0
  338. package/registry/examples/settings-layout/account.js +51 -0
  339. package/registry/examples/settings-layout/account.tsx +50 -0
  340. package/registry/examples/settings-layout/sections.d.ts +4 -0
  341. package/registry/examples/settings-layout/sections.js +27 -0
  342. package/registry/examples/settings-layout/sections.tsx +24 -0
  343. package/registry/examples/split-view/empty.d.ts +4 -0
  344. package/registry/examples/split-view/empty.js +19 -0
  345. package/registry/examples/split-view/empty.tsx +13 -0
  346. package/registry/examples/split-view/messages.d.ts +4 -0
  347. package/registry/examples/split-view/messages.js +49 -0
  348. package/registry/examples/split-view/messages.tsx +52 -0
  349. package/registry/examples/stage-banner/round.d.ts +4 -0
  350. package/registry/examples/stage-banner/round.js +14 -0
  351. package/registry/examples/stage-banner/round.tsx +11 -0
  352. package/registry/examples/stage-banner/steps.d.ts +4 -0
  353. package/registry/examples/stage-banner/steps.js +14 -0
  354. package/registry/examples/stage-banner/steps.tsx +11 -0
  355. package/registry/examples/status-page/building.d.ts +4 -0
  356. package/registry/examples/status-page/building.js +29 -0
  357. package/registry/examples/status-page/building.tsx +25 -0
  358. package/registry/examples/status-page/operational.d.ts +4 -0
  359. package/registry/examples/status-page/operational.js +26 -0
  360. package/registry/examples/status-page/operational.tsx +20 -0
  361. package/registry/field.json +1 -1
  362. package/registry/file-upload.json +1 -1
  363. package/registry/filter-bar.json +1 -1
  364. package/registry/gallery-page.json +256 -0
  365. package/registry/glow-card.json +1 -1
  366. package/registry/goal-gauge.json +322 -0
  367. package/registry/how-it-works-page.json +242 -0
  368. package/registry/image-cropper.json +1 -1
  369. package/registry/index.json +621 -5
  370. package/registry/iso.json +1 -1
  371. package/registry/kbd.json +1 -1
  372. package/registry/landing-page.json +242 -0
  373. package/registry/landscape.json +189 -0
  374. package/registry/legal-page.json +199 -0
  375. package/registry/link-card.json +1 -1
  376. package/registry/loader.json +1 -1
  377. package/registry/longform-page.json +213 -0
  378. package/registry/marketing-layout.json +172 -0
  379. package/registry/marquee.json +1 -1
  380. package/registry/mascot-quote.json +6 -6
  381. package/registry/mascot-state.json +34 -34
  382. package/registry/mascots.json +140 -23
  383. package/registry/media-capture.json +1 -1
  384. package/registry/meter.json +1 -1
  385. package/registry/nav-bar.json +1 -1
  386. package/registry/number-ticker.json +1 -1
  387. package/registry/page-header.json +1 -1
  388. package/registry/page-hero.json +3 -3
  389. package/registry/page.json +5 -5
  390. package/registry/pagination.json +1 -1
  391. package/registry/pointer-light.json +1 -1
  392. package/registry/popover.json +1 -1
  393. package/registry/pricing-page.json +245 -0
  394. package/registry/product-page.json +319 -0
  395. package/registry/profile-card.json +501 -0
  396. package/registry/progress.json +1 -1
  397. package/registry/promise-card.json +228 -0
  398. package/registry/radio-group.json +1 -1
  399. package/registry/scroll-stage.json +197 -0
  400. package/registry/search-field.json +1 -1
  401. package/registry/section-backdrop.json +1 -1
  402. package/registry/separator.json +1 -1
  403. package/registry/settings-layout.json +231 -0
  404. package/registry/skeleton.json +1 -1
  405. package/registry/slider.json +1 -1
  406. package/registry/slot.json +1 -1
  407. package/registry/spinner.json +1 -1
  408. package/registry/split-view.json +233 -0
  409. package/registry/stage-banner.json +221 -0
  410. package/registry/stat.json +1 -1
  411. package/registry/status-page.json +263 -0
  412. package/registry/stepper.json +1 -1
  413. package/registry/switch.json +1 -1
  414. package/registry/tabs.json +1 -1
  415. package/registry/tag-input.json +1 -1
  416. package/registry/terminal-replay.json +1 -1
  417. package/registry/theme.json +1 -1
  418. package/registry/toast.json +1 -1
  419. package/registry/toc.json +1 -1
  420. package/registry/tooltip.json +1 -1
  421. package/registry/video-player.json +1 -1
  422. package/registry/video-trimmer.json +1 -1
  423. package/dist/chunk-NOVUREEC.js.map +0 -1
package/dist/native.js CHANGED
@@ -176,6 +176,16 @@ var marks = /* @__PURE__ */ Object.freeze({
176
176
  "100%",
177
177
  "#089b96"
178
178
  ]
179
+ ],
180
+ "yororis": [
181
+ [
182
+ "0%",
183
+ "#a4773d"
184
+ ],
185
+ [
186
+ "100%",
187
+ "#5d894d"
188
+ ]
179
189
  ]
180
190
  });
181
191
 
@@ -719,8 +729,88 @@ var styles8 = StyleSheet8.create({
719
729
  action: { marginTop: 8, flexDirection: "row", flexWrap: "wrap", justifyContent: "center", gap: 8 }
720
730
  });
721
731
 
732
+ // src/native/goal-gauge.tsx
733
+ import { Animated as Animated4, StyleSheet as StyleSheet9, View as View6 } from "react-native";
734
+
735
+ // src/native/story-motion.ts
736
+ import * as React7 from "react";
737
+ import { AccessibilityInfo as AccessibilityInfo2, Animated as Animated3, Easing } from "react-native";
738
+ function useEntrance(animated, delay = 0, duration = 700) {
739
+ const [value] = React7.useState(() => new Animated3.Value(animated ? 0 : 1));
740
+ React7.useEffect(() => {
741
+ if (!animated) return;
742
+ let cancelled = false;
743
+ void AccessibilityInfo2.isReduceMotionEnabled().then((reduce) => {
744
+ if (cancelled) return;
745
+ if (reduce) value.setValue(1);
746
+ else Animated3.timing(value, { toValue: 1, duration, delay, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();
747
+ });
748
+ return () => {
749
+ cancelled = true;
750
+ };
751
+ }, [animated, delay, duration, value]);
752
+ return value;
753
+ }
754
+
755
+ // src/native/goal-gauge.tsx
756
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
757
+ function Cell({ lit, animate, order, animated, arcade }) {
758
+ const { theme } = useTheme();
759
+ const t = useEntrance(animated && animate, 300 + order * 100, 350);
760
+ const spentOpacity = arcade ? 0.14 : 1;
761
+ const opacity = !animate ? 1 : lit ? t.interpolate({ inputRange: [0, 1], outputRange: [0.25, 1] }) : t.interpolate({ inputRange: [0, 1], outputRange: [1, arcade ? 0.14 : 1] });
762
+ const color = lit || arcade ? theme.accent : theme.surface3;
763
+ return /* @__PURE__ */ jsx10(
764
+ Animated4.View,
765
+ {
766
+ style: [styles9.cell, arcade ? styles9.cellArcade : null, { backgroundColor: color, opacity: lit || animate ? opacity : spentOpacity }]
767
+ }
768
+ );
769
+ }
770
+ function GoalGauge({ label, segments, value, valueText, mode = "fill", showLabel = true, variant = "default", animated = true, style, ...props }) {
771
+ const { theme } = useTheme();
772
+ const total = Math.max(1, Math.round(segments));
773
+ const lit = Math.min(total, Math.max(0, Math.round(value ?? total)));
774
+ const words = valueText ?? `${lit} / ${total}`;
775
+ const arcade = variant === "arcade";
776
+ return /* @__PURE__ */ jsxs7(
777
+ View6,
778
+ {
779
+ accessible: true,
780
+ role: "meter",
781
+ "aria-label": label,
782
+ "aria-valuemin": 0,
783
+ "aria-valuemax": total,
784
+ "aria-valuenow": lit,
785
+ "aria-valuetext": words,
786
+ ...props,
787
+ style: [styles9.root, style],
788
+ children: [
789
+ showLabel ? /* @__PURE__ */ jsxs7(View6, { "aria-hidden": true, style: [styles9.head, arcade ? styles9.headArcade : null], children: [
790
+ /* @__PURE__ */ jsx10(Txt, { variant: arcade ? "mono" : "caption", tone: "secondary", children: arcade ? label.toUpperCase() : label }),
791
+ arcade ? null : /* @__PURE__ */ jsx10(Txt, { variant: "caption", children: words })
792
+ ] }) : null,
793
+ /* @__PURE__ */ jsx10(View6, { "aria-hidden": true, style: [styles9.cells, arcade ? [styles9.cellsArcade, { borderColor: theme.borderSubtle, backgroundColor: theme.surface1 }] : null], children: Array.from({ length: total }, (_, i) => {
794
+ const on = i < lit;
795
+ const animate = mode === "fill" ? on : !on;
796
+ return /* @__PURE__ */ jsx10(Cell, { lit: on, animate, order: mode === "fill" ? i : i - lit, animated, arcade }, i);
797
+ }) })
798
+ ]
799
+ }
800
+ );
801
+ }
802
+ var styles9 = StyleSheet9.create({
803
+ root: { alignSelf: "stretch", gap: 8 },
804
+ head: { flexDirection: "row", justifyContent: "space-between", alignItems: "baseline", gap: 12 },
805
+ headArcade: { justifyContent: "center" },
806
+ cells: { flexDirection: "row", gap: 4 },
807
+ cellsArcade: { padding: 3, borderWidth: 1, borderRadius: 4, transform: [{ skewX: "-14deg" }] },
808
+ cell: { flex: 1, height: 8, borderRadius: 4 },
809
+ cellArcade: { height: 10, borderRadius: 1 }
810
+ });
811
+
722
812
  // src/native/KrizakaMark.tsx
723
- import { View as View6 } from "react-native";
813
+ import { View as View7 } from "react-native";
724
814
  import Svg2, { Circle, Defs as Defs2, G as Group, LinearGradient as LinearGradient2, Path, RadialGradient, Stop as Stop2 } from "react-native-svg";
725
815
 
726
816
  // src/marks/krizaka-geometry.ts
@@ -743,24 +833,24 @@ var KRIZAKA = {
743
833
  };
744
834
 
745
835
  // src/native/mark-motion.ts
746
- import { useEffect as useEffect4, useState as useState6 } from "react";
747
- import { AccessibilityInfo as AccessibilityInfo2, Animated as Animated3, Easing } from "react-native";
836
+ import { useEffect as useEffect5, useState as useState7 } from "react";
837
+ import { AccessibilityInfo as AccessibilityInfo3, Animated as Animated5, Easing as Easing2 } from "react-native";
748
838
  var markA11y = (title) => title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
749
839
  function useMarkMotion(size, animated, spinMs = 3e4) {
750
- const [spin] = useState6(() => new Animated3.Value(0));
751
- const [pulse] = useState6(() => new Animated3.Value(0));
752
- useEffect4(() => {
840
+ const [spin] = useState7(() => new Animated5.Value(0));
841
+ const [pulse] = useState7(() => new Animated5.Value(0));
842
+ useEffect5(() => {
753
843
  if (!animated) return;
754
844
  let loops = [];
755
845
  let cancelled = false;
756
- void AccessibilityInfo2.isReduceMotionEnabled().then((reduce) => {
846
+ void AccessibilityInfo3.isReduceMotionEnabled().then((reduce) => {
757
847
  if (reduce || cancelled) return;
758
848
  loops = [
759
- Animated3.loop(Animated3.timing(spin, { toValue: 1, duration: spinMs, easing: Easing.linear, useNativeDriver: true })),
760
- Animated3.loop(
761
- Animated3.sequence([
762
- Animated3.timing(pulse, { toValue: 1, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),
763
- Animated3.timing(pulse, { toValue: 0, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true })
849
+ Animated5.loop(Animated5.timing(spin, { toValue: 1, duration: spinMs, easing: Easing2.linear, useNativeDriver: true })),
850
+ Animated5.loop(
851
+ Animated5.sequence([
852
+ Animated5.timing(pulse, { toValue: 1, duration: 1600, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true }),
853
+ Animated5.timing(pulse, { toValue: 0, duration: 1600, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true })
764
854
  ])
765
855
  )
766
856
  ];
@@ -772,7 +862,7 @@ function useMarkMotion(size, animated, spinMs = 3e4) {
772
862
  };
773
863
  }, [animated, spin, pulse, spinMs]);
774
864
  return {
775
- Animated: Animated3,
865
+ Animated: Animated5,
776
866
  layer: { position: "absolute", width: size, height: size },
777
867
  spinStyle: { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] },
778
868
  pulseStyle: { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }
@@ -780,39 +870,39 @@ function useMarkMotion(size, animated, spinMs = 3e4) {
780
870
  }
781
871
 
782
872
  // src/native/KrizakaMark.tsx
783
- import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
873
+ import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
784
874
  function KrizakaMark({ size = 48, animated = true, title, neutral }) {
785
875
  const { theme } = useTheme();
786
- const { Animated: Animated10, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
876
+ const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
787
877
  const id = useSvgId("kzm");
788
878
  const viewBox = size < 48 ? KRIZAKA.croppedViewBox : KRIZAKA.viewBox;
789
879
  const stroke = neutral ?? theme.textMuted;
790
- const blue = /* @__PURE__ */ jsx10(LinearGradient2, { id: `${id}b`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.blue.x1 + KRIZAKA.offset, y1: KRIZAKA.blue.y1 + KRIZAKA.offset, x2: KRIZAKA.blue.x2 + KRIZAKA.offset, y2: KRIZAKA.blue.y2 + KRIZAKA.offset, children: KRIZAKA.blue.stops.map(([offset, color]) => /* @__PURE__ */ jsx10(Stop2, { offset, stopColor: color }, offset)) });
791
- const dot = (c) => /* @__PURE__ */ jsxs7(Fragment2, { children: [
792
- /* @__PURE__ */ jsx10(Circle, { cx: c.cx, cy: c.cy, r: c.r, fill: `url(#${id}b)` }),
793
- /* @__PURE__ */ jsx10(Circle, { cx: c.cx, cy: c.cy, r: c.inner, fill: KRIZAKA.highlight })
880
+ const blue = /* @__PURE__ */ jsx11(LinearGradient2, { id: `${id}b`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.blue.x1 + KRIZAKA.offset, y1: KRIZAKA.blue.y1 + KRIZAKA.offset, x2: KRIZAKA.blue.x2 + KRIZAKA.offset, y2: KRIZAKA.blue.y2 + KRIZAKA.offset, children: KRIZAKA.blue.stops.map(([offset, color]) => /* @__PURE__ */ jsx11(Stop2, { offset, stopColor: color }, offset)) });
881
+ const dot = (c) => /* @__PURE__ */ jsxs8(Fragment2, { children: [
882
+ /* @__PURE__ */ jsx11(Circle, { cx: c.cx, cy: c.cy, r: c.r, fill: `url(#${id}b)` }),
883
+ /* @__PURE__ */ jsx11(Circle, { cx: c.cx, cy: c.cy, r: c.inner, fill: KRIZAKA.highlight })
794
884
  ] });
795
- return /* @__PURE__ */ jsxs7(View6, { style: { width: size, height: size }, ...markA11y(title), children: [
796
- /* @__PURE__ */ jsxs7(Svg2, { viewBox, style: layer, children: [
797
- /* @__PURE__ */ jsxs7(Defs2, { children: [
798
- /* @__PURE__ */ jsxs7(RadialGradient, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
799
- /* @__PURE__ */ jsx10(Stop2, { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
800
- /* @__PURE__ */ jsx10(Stop2, { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: 0 })
885
+ return /* @__PURE__ */ jsxs8(View7, { style: { width: size, height: size }, ...markA11y(title), children: [
886
+ /* @__PURE__ */ jsxs8(Svg2, { viewBox, style: layer, children: [
887
+ /* @__PURE__ */ jsxs8(Defs2, { children: [
888
+ /* @__PURE__ */ jsxs8(RadialGradient, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
889
+ /* @__PURE__ */ jsx11(Stop2, { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
890
+ /* @__PURE__ */ jsx11(Stop2, { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: 0 })
801
891
  ] }),
802
- /* @__PURE__ */ jsxs7(LinearGradient2, { id: `${id}i`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.ink.x1 + KRIZAKA.offset, y1: KRIZAKA.ink.y1 + KRIZAKA.offset, x2: KRIZAKA.ink.x2 + KRIZAKA.offset, y2: KRIZAKA.ink.y2 + KRIZAKA.offset, children: [
803
- /* @__PURE__ */ jsx10(Stop2, { offset: "0%", stopColor: theme.textSecondary }),
804
- /* @__PURE__ */ jsx10(Stop2, { offset: "100%", stopColor: theme.textPrimary })
892
+ /* @__PURE__ */ jsxs8(LinearGradient2, { id: `${id}i`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.ink.x1 + KRIZAKA.offset, y1: KRIZAKA.ink.y1 + KRIZAKA.offset, x2: KRIZAKA.ink.x2 + KRIZAKA.offset, y2: KRIZAKA.ink.y2 + KRIZAKA.offset, children: [
893
+ /* @__PURE__ */ jsx11(Stop2, { offset: "0%", stopColor: theme.textSecondary }),
894
+ /* @__PURE__ */ jsx11(Stop2, { offset: "100%", stopColor: theme.textPrimary })
805
895
  ] }),
806
896
  blue
807
897
  ] }),
808
- size >= 48 ? /* @__PURE__ */ jsx10(Circle, { cx: 200, cy: 200, r: 190, fill: `url(#${id}g)` }) : null,
809
- /* @__PURE__ */ jsx10(Circle, { cx: 200, cy: 200, r: KRIZAKA.ring.r, stroke, strokeWidth: KRIZAKA.ring.width, opacity: 0.35, fill: "none" }),
810
- /* @__PURE__ */ jsx10(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: /* @__PURE__ */ jsx10(Path, { d: KRIZAKA.shield, stroke: `url(#${id}i)`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
898
+ size >= 48 ? /* @__PURE__ */ jsx11(Circle, { cx: 200, cy: 200, r: 190, fill: `url(#${id}g)` }) : null,
899
+ /* @__PURE__ */ jsx11(Circle, { cx: 200, cy: 200, r: KRIZAKA.ring.r, stroke, strokeWidth: KRIZAKA.ring.width, opacity: 0.35, fill: "none" }),
900
+ /* @__PURE__ */ jsx11(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: /* @__PURE__ */ jsx11(Path, { d: KRIZAKA.shield, stroke: `url(#${id}i)`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
811
901
  ] }),
812
- /* @__PURE__ */ jsx10(Animated10.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx10(Svg2, { viewBox, style: layer, children: /* @__PURE__ */ jsx10(Circle, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
813
- /* @__PURE__ */ jsx10(Animated10.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs7(Svg2, { viewBox, style: layer, children: [
814
- /* @__PURE__ */ jsx10(Defs2, { children: blue }),
815
- /* @__PURE__ */ jsxs7(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
902
+ /* @__PURE__ */ jsx11(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx11(Svg2, { viewBox, style: layer, children: /* @__PURE__ */ jsx11(Circle, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
903
+ /* @__PURE__ */ jsx11(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs8(Svg2, { viewBox, style: layer, children: [
904
+ /* @__PURE__ */ jsx11(Defs2, { children: blue }),
905
+ /* @__PURE__ */ jsxs8(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
816
906
  dot(KRIZAKA.node),
817
907
  dot(KRIZAKA.core)
818
908
  ] })
@@ -821,12 +911,12 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
821
911
  }
822
912
 
823
913
  // src/native/mascot-state.tsx
824
- import * as React8 from "react";
825
- import { AccessibilityInfo as AccessibilityInfo4, Animated as Animated5, Easing as Easing3, StyleSheet as StyleSheet9, View as View8 } from "react-native";
914
+ import * as React9 from "react";
915
+ import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated7, Easing as Easing4, StyleSheet as StyleSheet10, View as View9 } from "react-native";
826
916
 
827
917
  // src/native/mascots.tsx
828
- import { useEffect as useEffect5, useState as useState7 } from "react";
829
- import { AccessibilityInfo as AccessibilityInfo3, Animated as Animated4, Easing as Easing2, View as View7 } from "react-native";
918
+ import { useEffect as useEffect6, useState as useState8 } from "react";
919
+ import { AccessibilityInfo as AccessibilityInfo4, Animated as Animated6, Easing as Easing3, View as View8 } from "react-native";
830
920
  import Svg3, { Circle as Circle2, Defs as Defs3, Ellipse, G, LinearGradient as LinearGradient3, Path as Path2, Rect as Rect2, Stop as Stop3 } from "react-native-svg";
831
921
 
832
922
  // src/mascots/geometry.ts
@@ -928,6 +1018,26 @@ var BIRDS = {
928
1018
  details: ["M43 40 C42 28 51 22 60 22 C69 22 78 28 77 40 C76 50 68 55 60 55 C52 55 44 50 43 40 Z"],
929
1019
  beak: "M55 44 C55 40 65 40 65 44 C65 50 62 54 60 55 C58 54 55 50 55 44 Z",
930
1020
  eyes: { at: [[51, 36], [69, 36]], white: 4.6, pupil: 2.4 }
1021
+ },
1022
+ /**
1023
+ * The crane — the one that listens: posed, unhurried, drawn in one line. A tall wader seen in profile, standing still
1024
+ * on two straight legs, the neck a single stroke up to a small head with its crown (the detail colour) and a long,
1025
+ * straight beak; the folded wings low on its back. The flamingo bends and answers; the crane stands and listens.
1026
+ */
1027
+ crane: {
1028
+ shadow: [62, 110, 20, 3],
1029
+ legs: ["M56 87 L55 108 M51 108 L59 108", "M67 87 L68 108 M64 108 L73 108"],
1030
+ body: "M40 66 C38 54 84 54 86 68 C88 82 76 88 62 88 C48 88 40 80 40 66 Z",
1031
+ belly: "M48 70 C48 62 78 62 79 70 C80 79 72 84 63 84 C54 84 48 79 48 70 Z",
1032
+ wings: [
1033
+ { d: "M44 62 C33 68 35 82 49 83 C45 76 45 69 44 62 Z", pivot: [44, 62] },
1034
+ { d: "M82 62 C93 67 96 82 80 84 C83 76 83 69 82 62 Z", pivot: [82, 62] }
1035
+ ],
1036
+ neck: { d: "M52 62 C48 47 52 37 48 26", width: 6 },
1037
+ head: { cx: 47, cy: 21, r: 8.5 },
1038
+ details: ["M41 16.5 C42 11 52 11 53 16.5 C50 14.6 44 14.6 41 16.5 Z"],
1039
+ beak: "M40.5 18.5 L19 22.5 L40.5 25.5 Z",
1040
+ eyes: { at: [[45.5, 19.5]], white: 2.8, pupil: 1.6 }
931
1041
  }
932
1042
  };
933
1043
  var MOOD_PARTS = {
@@ -956,24 +1066,26 @@ var OWN_PALETTES = {
956
1066
  duck: { from: "#f43f5e", to: "#be123c", wing: "#db2777", detail: "#9f1239", beak: "#fbbf24", eye: "#1f2937" },
957
1067
  flamingo: { from: "#f9a8d4", to: "#db2777", wing: "#ec4899", detail: "#be185d", beak: "#fbbf24", eye: "#1f2937" },
958
1068
  pigeon: { from: "#22d3ee", to: "#6366f1", wing: "#a855f7", detail: "#4338ca", beak: "#f59e0b", eye: "#1f2937" },
959
- lovebird: { from: "#6ee7b7", to: "#059669", wing: "#047857", detail: "#fb7185", beak: "#f97316", eye: "#1f2937" }
1069
+ lovebird: { from: "#6ee7b7", to: "#059669", wing: "#047857", detail: "#fb7185", beak: "#f97316", eye: "#1f2937" },
1070
+ // The sandhill crane (grue du Canada): sand-grey plumage, its red crown, dark legs and beak.
1071
+ crane: { from: "#ebe3d6", to: "#9c8f80", wing: "#7d7266", detail: "#dc2626", beak: "#44403c", eye: "#1f2937" }
960
1072
  };
961
1073
  var LIGHT = "#ffffff";
962
1074
  var SHADE = "#000000";
963
1075
  var PARCEL = ["#f59e0b", "#d97706", "#b45309"];
964
1076
 
965
1077
  // src/native/mascots.tsx
966
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
1078
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
967
1079
  function useBob(animated) {
968
- const [y] = useState7(() => new Animated4.Value(0));
969
- useEffect5(() => {
1080
+ const [y] = useState8(() => new Animated6.Value(0));
1081
+ useEffect6(() => {
970
1082
  if (!animated) return;
971
1083
  let loop;
972
1084
  let cancelled = false;
973
- void AccessibilityInfo3.isReduceMotionEnabled().then((reduce) => {
1085
+ void AccessibilityInfo4.isReduceMotionEnabled().then((reduce) => {
974
1086
  if (reduce || cancelled) return;
975
- const step = (toValue) => Animated4.timing(y, { toValue, duration: 1800, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true });
976
- loop = Animated4.loop(Animated4.sequence([step(-2.5), step(0)]));
1087
+ const step = (toValue) => Animated6.timing(y, { toValue, duration: 1800, easing: Easing3.inOut(Easing3.ease), useNativeDriver: true });
1088
+ loop = Animated6.loop(Animated6.sequence([step(-2.5), step(0)]));
977
1089
  loop.start();
978
1090
  });
979
1091
  return () => {
@@ -997,62 +1109,62 @@ function Mascot({ bird = "owl", mood = "welcome", tone: tone2 = "brand", size =
997
1109
  const look3 = mood === "thinking" ? 1.4 : 0;
998
1110
  const rot = (deg, [x, y]) => `rotate(${deg} ${x} ${y})`;
999
1111
  const [wl, wr] = g.wings;
1000
- return /* @__PURE__ */ jsx11(View7, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx11(Animated4.View, { style: { transform: [{ translateY: bob }] }, children: /* @__PURE__ */ jsxs8(Svg3, { width: size, height: size, viewBox: "0 0 120 120", children: [
1001
- /* @__PURE__ */ jsx11(Defs3, { children: /* @__PURE__ */ jsxs8(LinearGradient3, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
1002
- /* @__PURE__ */ jsx11(Stop3, { offset: "0%", stopColor: p.from }),
1003
- /* @__PURE__ */ jsx11(Stop3, { offset: "100%", stopColor: p.to })
1112
+ return /* @__PURE__ */ jsx12(View8, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx12(Animated6.View, { style: { transform: [{ translateY: bob }] }, children: /* @__PURE__ */ jsxs9(Svg3, { width: size, height: size, viewBox: "0 0 120 120", children: [
1113
+ /* @__PURE__ */ jsx12(Defs3, { children: /* @__PURE__ */ jsxs9(LinearGradient3, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
1114
+ /* @__PURE__ */ jsx12(Stop3, { offset: "0%", stopColor: p.from }),
1115
+ /* @__PURE__ */ jsx12(Stop3, { offset: "100%", stopColor: p.to })
1004
1116
  ] }) }),
1005
- /* @__PURE__ */ jsx11(Ellipse, { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
1006
- mood === "empty" && /* @__PURE__ */ jsx11(Path2, { d: MOOD_PARTS.tray, stroke: outline, strokeWidth: 1.6, strokeDasharray: "3 3", fill: "none" }),
1007
- g.legs.map((d) => /* @__PURE__ */ jsx11(Path2, { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round", fill: "none" }, d)),
1008
- g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx11(Path2, { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx11(Path2, { d, stroke: outline, strokeWidth: 1.4, fill: "none" }, d)),
1009
- g.parcel?.map((d, i) => /* @__PURE__ */ jsx11(Path2, { d, fill: PARCEL[i], ...line }, d)),
1010
- /* @__PURE__ */ jsx11(Path2, { d: g.body, fill: body, ...line }),
1011
- /* @__PURE__ */ jsx11(Path2, { d: g.belly, fill: LIGHT, opacity: 0.28 }),
1117
+ /* @__PURE__ */ jsx12(Ellipse, { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
1118
+ mood === "empty" && /* @__PURE__ */ jsx12(Path2, { d: MOOD_PARTS.tray, stroke: outline, strokeWidth: 1.6, strokeDasharray: "3 3", fill: "none" }),
1119
+ g.legs.map((d) => /* @__PURE__ */ jsx12(Path2, { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round", fill: "none" }, d)),
1120
+ g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx12(Path2, { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx12(Path2, { d, stroke: outline, strokeWidth: 1.4, fill: "none" }, d)),
1121
+ g.parcel?.map((d, i) => /* @__PURE__ */ jsx12(Path2, { d, fill: PARCEL[i], ...line }, d)),
1122
+ /* @__PURE__ */ jsx12(Path2, { d: g.body, fill: body, ...line }),
1123
+ /* @__PURE__ */ jsx12(Path2, { d: g.belly, fill: LIGHT, opacity: 0.28 }),
1012
1124
  [wl, wr].map((w, i) => {
1013
1125
  const turn = mood === "success" ? i === 0 ? 28 : -28 : mood === "welcome" && i === 1 ? -20 : 0;
1014
- return /* @__PURE__ */ jsxs8(G, { transform: turn ? rot(turn, w.pivot) : void 0, children: [
1015
- /* @__PURE__ */ jsx11(Path2, { d: w.d, fill: p.wing, ...line }),
1016
- /* @__PURE__ */ jsx11(Path2, { d: w.d, fill: SHADE, opacity: 0.16 })
1126
+ return /* @__PURE__ */ jsxs9(G, { transform: turn ? rot(turn, w.pivot) : void 0, children: [
1127
+ /* @__PURE__ */ jsx12(Path2, { d: w.d, fill: p.wing, ...line }),
1128
+ /* @__PURE__ */ jsx12(Path2, { d: w.d, fill: SHADE, opacity: 0.16 })
1017
1129
  ] }, i);
1018
1130
  }),
1019
- g.neck && /* @__PURE__ */ jsx11(Path2, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
1020
- g.head.r > 0 && /* @__PURE__ */ jsx11(Circle2, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
1021
- g.details.map((d) => /* @__PURE__ */ jsx11(Path2, { d, fill: p.detail, ...line }, d)),
1022
- g.visor && /* @__PURE__ */ jsx11(Rect2, { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: theme.surface0, ...line }),
1131
+ g.neck && /* @__PURE__ */ jsx12(Path2, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
1132
+ g.head.r > 0 && /* @__PURE__ */ jsx12(Circle2, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
1133
+ g.details.map((d) => /* @__PURE__ */ jsx12(Path2, { d, fill: p.detail, ...line }, d)),
1134
+ g.visor && /* @__PURE__ */ jsx12(Rect2, { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: theme.surface0, ...line }),
1023
1135
  g.eyes.at.map(
1024
- (at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs8(G, { children: [
1025
- /* @__PURE__ */ jsx11(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1026
- /* @__PURE__ */ jsx11(Circle2, { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
1027
- /* @__PURE__ */ jsx11(Path2, { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
1028
- ] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */ jsx11(Path2, { d: mood === "success" ? archEye(at, eyeR * 0.85) : lidEye(at, eyeR * 0.8), stroke: g.visor ? p.eye : outline, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i) : /* @__PURE__ */ jsxs8(G, { children: [
1029
- g.eyes.white > 0 && /* @__PURE__ */ jsx11(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1030
- /* @__PURE__ */ jsx11(Circle2, { cx: at[0] + look3, cy: at[1] - look3, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE })
1136
+ (at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs9(G, { children: [
1137
+ /* @__PURE__ */ jsx12(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1138
+ /* @__PURE__ */ jsx12(Circle2, { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
1139
+ /* @__PURE__ */ jsx12(Path2, { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
1140
+ ] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */ jsx12(Path2, { d: mood === "success" ? archEye(at, eyeR * 0.85) : lidEye(at, eyeR * 0.8), stroke: g.visor ? p.eye : outline, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i) : /* @__PURE__ */ jsxs9(G, { children: [
1141
+ g.eyes.white > 0 && /* @__PURE__ */ jsx12(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1142
+ /* @__PURE__ */ jsx12(Circle2, { cx: at[0] + look3, cy: at[1] - look3, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE })
1031
1143
  ] }, i)
1032
1144
  ),
1033
- g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx11(Circle2, { cx: x, cy: y, r: 6.5, fill: "none", stroke: outline, strokeWidth: 1.3 }, x)),
1034
- mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */ jsx11(Path2, { d: brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1), stroke: outline, strokeWidth: 2, strokeLinecap: "round" }, i)),
1035
- /* @__PURE__ */ jsx11(Path2, { d: g.beak, fill: p.beak, ...line }),
1036
- mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */ jsx11(Circle2, { cx, cy, r, fill: theme.textSecondary, opacity: 0.5 + i * 0.25 }, cx)),
1037
- (mood === "success" || mood === "error") && /* @__PURE__ */ jsx11(Circle2, { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: mood === "success" ? theme.success : theme.danger }),
1038
- mood === "success" && /* @__PURE__ */ jsx11(Path2, { d: MOOD_PARTS.check, stroke: theme.surface0, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
1039
- mood === "error" && /* @__PURE__ */ jsx11(Path2, { d: MOOD_PARTS.bang.line, stroke: theme.surface0, strokeWidth: 2.8, strokeLinecap: "round" }),
1040
- mood === "error" && /* @__PURE__ */ jsx11(Circle2, { cx: MOOD_PARTS.bang.dot[0], cy: MOOD_PARTS.bang.dot[1], r: 1.6, fill: theme.surface0 })
1145
+ g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx12(Circle2, { cx: x, cy: y, r: 6.5, fill: "none", stroke: outline, strokeWidth: 1.3 }, x)),
1146
+ mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */ jsx12(Path2, { d: brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1), stroke: outline, strokeWidth: 2, strokeLinecap: "round" }, i)),
1147
+ /* @__PURE__ */ jsx12(Path2, { d: g.beak, fill: p.beak, ...line }),
1148
+ mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */ jsx12(Circle2, { cx, cy, r, fill: theme.textSecondary, opacity: 0.5 + i * 0.25 }, cx)),
1149
+ (mood === "success" || mood === "error") && /* @__PURE__ */ jsx12(Circle2, { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: mood === "success" ? theme.success : theme.danger }),
1150
+ mood === "success" && /* @__PURE__ */ jsx12(Path2, { d: MOOD_PARTS.check, stroke: theme.surface0, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
1151
+ mood === "error" && /* @__PURE__ */ jsx12(Path2, { d: MOOD_PARTS.bang.line, stroke: theme.surface0, strokeWidth: 2.8, strokeLinecap: "round" }),
1152
+ mood === "error" && /* @__PURE__ */ jsx12(Circle2, { cx: MOOD_PARTS.bang.dot[0], cy: MOOD_PARTS.bang.dot[1], r: 1.6, fill: theme.surface0 })
1041
1153
  ] }) }) });
1042
1154
  }
1043
1155
 
1044
1156
  // src/native/mascot-state.tsx
1045
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1157
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1046
1158
  var SIZE = { sm: 64, md: 96, lg: 128 };
1047
1159
  function useArrival(animated) {
1048
- const [value] = React8.useState(() => new Animated5.Value(animated ? 0 : 1));
1049
- React8.useEffect(() => {
1160
+ const [value] = React9.useState(() => new Animated7.Value(animated ? 0 : 1));
1161
+ React9.useEffect(() => {
1050
1162
  if (!animated) return;
1051
1163
  let cancelled = false;
1052
- void AccessibilityInfo4.isReduceMotionEnabled().then((reduce) => {
1164
+ void AccessibilityInfo5.isReduceMotionEnabled().then((reduce) => {
1053
1165
  if (cancelled) return;
1054
1166
  if (reduce) value.setValue(1);
1055
- else Animated5.timing(value, { toValue: 1, duration: 420, easing: Easing3.out(Easing3.cubic), useNativeDriver: true }).start();
1167
+ else Animated7.timing(value, { toValue: 1, duration: 420, easing: Easing4.out(Easing4.cubic), useNativeDriver: true }).start();
1056
1168
  });
1057
1169
  return () => {
1058
1170
  cancelled = true;
@@ -1063,30 +1175,30 @@ function useArrival(animated) {
1063
1175
  function MascotState({ bird = "owl", mood = "empty", title, description, action, size = "md", layout = "stacked", tone: tone2, animated = true, style, ...props }) {
1064
1176
  const opacity = useArrival(animated);
1065
1177
  const inline = layout === "inline";
1066
- return /* @__PURE__ */ jsxs9(
1067
- Animated5.View,
1178
+ return /* @__PURE__ */ jsxs10(
1179
+ Animated7.View,
1068
1180
  {
1069
1181
  role: mood === "error" ? "alert" : "status",
1070
1182
  accessibilityLiveRegion: mood === "error" ? "assertive" : "polite",
1071
1183
  "aria-busy": mood === "thinking" ? true : void 0,
1072
1184
  ...props,
1073
- style: [inline ? styles9.inline : styles9.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style],
1185
+ style: [inline ? styles10.inline : styles10.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style],
1074
1186
  children: [
1075
- /* @__PURE__ */ jsx12(Mascot, { bird, mood, tone: tone2, size: SIZE[size], animated }),
1076
- /* @__PURE__ */ jsxs9(View8, { style: inline ? styles9.wordsInline : styles9.words, children: [
1077
- /* @__PURE__ */ jsx12(Txt, { variant: "label", role: "heading", style: inline ? null : styles9.center, children: title }),
1078
- description ? /* @__PURE__ */ jsx12(Txt, { tone: "secondary", style: inline ? null : styles9.center, children: description }) : null,
1079
- action ? /* @__PURE__ */ jsx12(View8, { style: [styles9.action, inline ? null : styles9.actionCentred], children: action }) : null
1187
+ /* @__PURE__ */ jsx13(Mascot, { bird, mood, tone: tone2, size: SIZE[size], animated }),
1188
+ /* @__PURE__ */ jsxs10(View9, { style: inline ? styles10.wordsInline : styles10.words, children: [
1189
+ /* @__PURE__ */ jsx13(Txt, { variant: "label", role: "heading", style: inline ? null : styles10.center, children: title }),
1190
+ description ? /* @__PURE__ */ jsx13(Txt, { tone: "secondary", style: inline ? null : styles10.center, children: description }) : null,
1191
+ action ? /* @__PURE__ */ jsx13(View9, { style: [styles10.action, inline ? null : styles10.actionCentred], children: action }) : null
1080
1192
  ] })
1081
1193
  ]
1082
1194
  }
1083
1195
  );
1084
1196
  }
1085
- var ErrorState = (props) => /* @__PURE__ */ jsx12(MascotState, { mood: "error", ...props });
1086
- var SuccessState = (props) => /* @__PURE__ */ jsx12(MascotState, { mood: "success", ...props });
1087
- var LoadingState = (props) => /* @__PURE__ */ jsx12(MascotState, { mood: "thinking", ...props });
1088
- var WelcomeState = (props) => /* @__PURE__ */ jsx12(MascotState, { mood: "welcome", ...props });
1089
- var styles9 = StyleSheet9.create({
1197
+ var ErrorState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "error", ...props });
1198
+ var SuccessState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "success", ...props });
1199
+ var LoadingState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "thinking", ...props });
1200
+ var WelcomeState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "welcome", ...props });
1201
+ var styles10 = StyleSheet10.create({
1090
1202
  stacked: { alignItems: "center", justifyContent: "center", gap: 12, paddingVertical: 40, paddingHorizontal: 24 },
1091
1203
  inline: { flexDirection: "row", alignItems: "center", gap: 16 },
1092
1204
  words: { alignItems: "center", gap: 6 },
@@ -1097,7 +1209,7 @@ var styles9 = StyleSheet9.create({
1097
1209
  });
1098
1210
 
1099
1211
  // src/native/OrazakaMark.tsx
1100
- import { View as View9 } from "react-native";
1212
+ import { View as View10 } from "react-native";
1101
1213
  import Svg4, { Circle as Circle3, Defs as Defs4, LinearGradient as LinearGradient4, Path as Path3, RadialGradient as RadialGradient2, Stop as Stop4 } from "react-native-svg";
1102
1214
 
1103
1215
  // src/marks/orazaka-geometry.ts
@@ -1127,40 +1239,40 @@ var ORAZAKA = {
1127
1239
  };
1128
1240
 
1129
1241
  // src/native/OrazakaMark.tsx
1130
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1242
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1131
1243
  function OrazakaMark({ size = 48, animated = true, title, neutral }) {
1132
1244
  const { theme } = useTheme();
1133
- const { Animated: Animated10, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1245
+ const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1134
1246
  const id = useSvgId("ozm");
1135
1247
  const viewBox = size < 48 ? ORAZAKA.croppedViewBox : ORAZAKA.viewBox;
1136
1248
  const stroke = neutral ?? theme.textMuted;
1137
- const gradient = /* @__PURE__ */ jsx13(LinearGradient4, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: ORAZAKA.gradient.x1, y1: ORAZAKA.gradient.y1, x2: ORAZAKA.gradient.x2, y2: ORAZAKA.gradient.y2, children: ORAZAKA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx13(Stop4, { offset, stopColor: color }, offset)) });
1249
+ const gradient = /* @__PURE__ */ jsx14(LinearGradient4, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: ORAZAKA.gradient.x1, y1: ORAZAKA.gradient.y1, x2: ORAZAKA.gradient.x2, y2: ORAZAKA.gradient.y2, children: ORAZAKA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx14(Stop4, { offset, stopColor: color }, offset)) });
1138
1250
  const fill = `url(#${id}a)`;
1139
- return /* @__PURE__ */ jsxs10(View9, { style: { width: size, height: size }, ...markA11y(title), children: [
1140
- /* @__PURE__ */ jsxs10(Svg4, { viewBox, style: layer, children: [
1141
- /* @__PURE__ */ jsx13(Defs4, { children: /* @__PURE__ */ jsxs10(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1142
- /* @__PURE__ */ jsx13(Stop4, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
1143
- /* @__PURE__ */ jsx13(Stop4, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
1251
+ return /* @__PURE__ */ jsxs11(View10, { style: { width: size, height: size }, ...markA11y(title), children: [
1252
+ /* @__PURE__ */ jsxs11(Svg4, { viewBox, style: layer, children: [
1253
+ /* @__PURE__ */ jsx14(Defs4, { children: /* @__PURE__ */ jsxs11(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1254
+ /* @__PURE__ */ jsx14(Stop4, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
1255
+ /* @__PURE__ */ jsx14(Stop4, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
1144
1256
  ] }) }),
1145
- size >= 48 ? /* @__PURE__ */ jsx13(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
1146
- /* @__PURE__ */ jsx13(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke, strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
1147
- /* @__PURE__ */ jsx13(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
1257
+ size >= 48 ? /* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
1258
+ /* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke, strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
1259
+ /* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
1148
1260
  ] }),
1149
- /* @__PURE__ */ jsx13(Animated10.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs10(Svg4, { viewBox, style: layer, children: [
1150
- /* @__PURE__ */ jsx13(Defs4, { children: gradient }),
1151
- ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx13(Path3, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
1261
+ /* @__PURE__ */ jsx14(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs11(Svg4, { viewBox, style: layer, children: [
1262
+ /* @__PURE__ */ jsx14(Defs4, { children: gradient }),
1263
+ ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx14(Path3, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
1152
1264
  ] }) }),
1153
- /* @__PURE__ */ jsx13(Animated10.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs10(Svg4, { viewBox, style: layer, children: [
1154
- /* @__PURE__ */ jsx13(Defs4, { children: gradient }),
1155
- /* @__PURE__ */ jsx13(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
1156
- /* @__PURE__ */ jsx13(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
1265
+ /* @__PURE__ */ jsx14(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs11(Svg4, { viewBox, style: layer, children: [
1266
+ /* @__PURE__ */ jsx14(Defs4, { children: gradient }),
1267
+ /* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
1268
+ /* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
1157
1269
  ] }) })
1158
1270
  ] });
1159
1271
  }
1160
1272
 
1161
1273
  // src/native/OrochiaMark.tsx
1162
- import { useEffect as useEffect7, useState as useState9 } from "react";
1163
- import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated6, Easing as Easing4, View as View10 } from "react-native";
1274
+ import { useEffect as useEffect8, useState as useState10 } from "react";
1275
+ import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated8, Easing as Easing5, View as View11 } from "react-native";
1164
1276
  import Svg5, { Circle as Circle4, Defs as Defs5, Ellipse as Ellipse2, G as Group2, LinearGradient as LinearGradient5, Path as Path4, RadialGradient as RadialGradient3, Stop as Stop5 } from "react-native-svg";
1165
1277
 
1166
1278
  // src/marks/orochia-geometry.ts
@@ -1188,25 +1300,25 @@ var OROCHIA = {
1188
1300
  };
1189
1301
 
1190
1302
  // src/native/OrochiaMark.tsx
1191
- import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1303
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1192
1304
  var CENTER = OROCHIA.offset + 180;
1193
1305
  function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }) {
1194
1306
  const { theme } = useTheme();
1195
1307
  const neutral = neutralProp ?? theme.textMuted;
1196
- const [spin] = useState9(() => new Animated6.Value(0));
1197
- const [pulse] = useState9(() => new Animated6.Value(0));
1198
- useEffect7(() => {
1308
+ const [spin] = useState10(() => new Animated8.Value(0));
1309
+ const [pulse] = useState10(() => new Animated8.Value(0));
1310
+ useEffect8(() => {
1199
1311
  if (!animated) return;
1200
1312
  let loops = [];
1201
1313
  let cancelled = false;
1202
- void AccessibilityInfo5.isReduceMotionEnabled().then((reduce) => {
1314
+ void AccessibilityInfo6.isReduceMotionEnabled().then((reduce) => {
1203
1315
  if (reduce || cancelled) return;
1204
1316
  loops = [
1205
- Animated6.loop(Animated6.timing(spin, { toValue: 1, duration: 3e4, easing: Easing4.linear, useNativeDriver: true })),
1206
- Animated6.loop(
1207
- Animated6.sequence([
1208
- Animated6.timing(pulse, { toValue: 1, duration: 1600, easing: Easing4.inOut(Easing4.ease), useNativeDriver: true }),
1209
- Animated6.timing(pulse, { toValue: 0, duration: 1600, easing: Easing4.inOut(Easing4.ease), useNativeDriver: true })
1317
+ Animated8.loop(Animated8.timing(spin, { toValue: 1, duration: 3e4, easing: Easing5.linear, useNativeDriver: true })),
1318
+ Animated8.loop(
1319
+ Animated8.sequence([
1320
+ Animated8.timing(pulse, { toValue: 1, duration: 1600, easing: Easing5.inOut(Easing5.ease), useNativeDriver: true }),
1321
+ Animated8.timing(pulse, { toValue: 0, duration: 1600, easing: Easing5.inOut(Easing5.ease), useNativeDriver: true })
1210
1322
  ])
1211
1323
  )
1212
1324
  ];
@@ -1220,44 +1332,44 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
1220
1332
  const viewBox = size < 48 ? OROCHIA.croppedViewBox : OROCHIA.viewBox;
1221
1333
  const layer = { position: "absolute", width: size, height: size };
1222
1334
  const a11y = title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
1223
- const bodyGradient = /* @__PURE__ */ jsx14(LinearGradient5, { id: "body", gradientUnits: "userSpaceOnUse", x1: OROCHIA.body.x1 + OROCHIA.offset, y1: OROCHIA.body.y1 + OROCHIA.offset, x2: OROCHIA.body.x2 + OROCHIA.offset, y2: OROCHIA.body.y2 + OROCHIA.offset, children: OROCHIA.body.stops.map(([offset, color]) => /* @__PURE__ */ jsx14(Stop5, { offset, stopColor: color }, offset)) });
1224
- return /* @__PURE__ */ jsxs11(View10, { style: { width: size, height: size }, ...a11y, children: [
1225
- /* @__PURE__ */ jsxs11(Svg5, { viewBox, style: layer, children: [
1226
- /* @__PURE__ */ jsx14(Defs5, { children: /* @__PURE__ */ jsxs11(RadialGradient3, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
1227
- /* @__PURE__ */ jsx14(Stop5, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
1228
- /* @__PURE__ */ jsx14(Stop5, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
1335
+ const bodyGradient = /* @__PURE__ */ jsx15(LinearGradient5, { id: "body", gradientUnits: "userSpaceOnUse", x1: OROCHIA.body.x1 + OROCHIA.offset, y1: OROCHIA.body.y1 + OROCHIA.offset, x2: OROCHIA.body.x2 + OROCHIA.offset, y2: OROCHIA.body.y2 + OROCHIA.offset, children: OROCHIA.body.stops.map(([offset, color]) => /* @__PURE__ */ jsx15(Stop5, { offset, stopColor: color }, offset)) });
1336
+ return /* @__PURE__ */ jsxs12(View11, { style: { width: size, height: size }, ...a11y, children: [
1337
+ /* @__PURE__ */ jsxs12(Svg5, { viewBox, style: layer, children: [
1338
+ /* @__PURE__ */ jsx15(Defs5, { children: /* @__PURE__ */ jsxs12(RadialGradient3, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
1339
+ /* @__PURE__ */ jsx15(Stop5, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
1340
+ /* @__PURE__ */ jsx15(Stop5, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
1229
1341
  ] }) }),
1230
- /* @__PURE__ */ jsx14(Circle4, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
1231
- /* @__PURE__ */ jsx14(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
1342
+ /* @__PURE__ */ jsx15(Circle4, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
1343
+ /* @__PURE__ */ jsx15(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
1232
1344
  ] }),
1233
- /* @__PURE__ */ jsx14(Animated6.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx14(Svg5, { viewBox, style: layer, children: /* @__PURE__ */ jsx14(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
1234
- /* @__PURE__ */ jsxs11(Svg5, { viewBox, style: layer, children: [
1235
- /* @__PURE__ */ jsx14(Defs5, { children: bodyGradient }),
1236
- /* @__PURE__ */ jsxs11(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1237
- /* @__PURE__ */ jsx14(Path4, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
1238
- /* @__PURE__ */ jsx14(Path4, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
1239
- /* @__PURE__ */ jsx14(Path4, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
1240
- /* @__PURE__ */ jsx14(Path4, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
1241
- /* @__PURE__ */ jsx14(Ellipse2, { cx: OROCHIA.head.cx, cy: OROCHIA.head.cy, rx: OROCHIA.head.rx, ry: OROCHIA.head.ry, rotation: OROCHIA.head.rotate, origin: `${OROCHIA.head.cx}, ${OROCHIA.head.cy}`, fill: "url(#body)" }),
1242
- /* @__PURE__ */ jsx14(Path4, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
1345
+ /* @__PURE__ */ jsx15(Animated8.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx15(Svg5, { viewBox, style: layer, children: /* @__PURE__ */ jsx15(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
1346
+ /* @__PURE__ */ jsxs12(Svg5, { viewBox, style: layer, children: [
1347
+ /* @__PURE__ */ jsx15(Defs5, { children: bodyGradient }),
1348
+ /* @__PURE__ */ jsxs12(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1349
+ /* @__PURE__ */ jsx15(Path4, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
1350
+ /* @__PURE__ */ jsx15(Path4, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
1351
+ /* @__PURE__ */ jsx15(Path4, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
1352
+ /* @__PURE__ */ jsx15(Path4, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
1353
+ /* @__PURE__ */ jsx15(Ellipse2, { cx: OROCHIA.head.cx, cy: OROCHIA.head.cy, rx: OROCHIA.head.rx, ry: OROCHIA.head.ry, rotation: OROCHIA.head.rotate, origin: `${OROCHIA.head.cx}, ${OROCHIA.head.cy}`, fill: "url(#body)" }),
1354
+ /* @__PURE__ */ jsx15(Path4, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
1243
1355
  ] })
1244
1356
  ] }),
1245
- /* @__PURE__ */ jsx14(Animated6.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs11(Svg5, { viewBox, style: layer, children: [
1246
- /* @__PURE__ */ jsx14(Defs5, { children: /* @__PURE__ */ jsx14(LinearGradient5, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx14(Stop5, { offset, stopColor: color }, offset)) }) }),
1247
- /* @__PURE__ */ jsxs11(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1248
- /* @__PURE__ */ jsx14(Circle4, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
1249
- /* @__PURE__ */ jsx14(Path4, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
1357
+ /* @__PURE__ */ jsx15(Animated8.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs12(Svg5, { viewBox, style: layer, children: [
1358
+ /* @__PURE__ */ jsx15(Defs5, { children: /* @__PURE__ */ jsx15(LinearGradient5, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx15(Stop5, { offset, stopColor: color }, offset)) }) }),
1359
+ /* @__PURE__ */ jsxs12(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1360
+ /* @__PURE__ */ jsx15(Circle4, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
1361
+ /* @__PURE__ */ jsx15(Path4, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
1250
1362
  ] })
1251
1363
  ] }) })
1252
1364
  ] });
1253
1365
  }
1254
1366
 
1255
1367
  // src/native/pagination.tsx
1256
- import { Pressable as Pressable4, StyleSheet as StyleSheet10, Text as Text6, View as View11 } from "react-native";
1368
+ import { Pressable as Pressable4, StyleSheet as StyleSheet11, Text as Text6, View as View12 } from "react-native";
1257
1369
  import Svg6, { Path as Path5 } from "react-native-svg";
1258
- import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1370
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1259
1371
  function Chevron({ direction, color }) {
1260
- return /* @__PURE__ */ jsx15(Svg6, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx15(Path5, { d: direction === "left" ? "m15 6-6 6 6 6" : "m9 6 6 6-6 6" }) });
1372
+ return /* @__PURE__ */ jsx16(Svg6, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx16(Path5, { d: direction === "left" ? "m15 6-6 6 6 6" : "m9 6 6 6-6 6" }) });
1261
1373
  }
1262
1374
  function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, onPrevious, onNext, status, disabled, labels, style }) {
1263
1375
  const { theme, radius: radius3 } = useTheme();
@@ -1266,7 +1378,7 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
1266
1378
  const current = Math.min(Math.max(1, page), count);
1267
1379
  const canPrevious = !disabled && (paged ? current > 1 : Boolean(hasPrevious));
1268
1380
  const canNext = !disabled && (paged ? current < count : Boolean(hasNext));
1269
- const button = (direction, enabled, onPress, label) => /* @__PURE__ */ jsx15(
1381
+ const button = (direction, enabled, onPress, label) => /* @__PURE__ */ jsx16(
1270
1382
  Pressable4,
1271
1383
  {
1272
1384
  role: "button",
@@ -1276,50 +1388,125 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
1276
1388
  hitSlop: 6,
1277
1389
  onPress,
1278
1390
  style: ({ pressed }) => [
1279
- styles10.button,
1391
+ styles11.button,
1280
1392
  { borderRadius: radius3.sm, borderColor: theme.borderDefault, backgroundColor: theme.surface1, opacity: enabled ? pressed ? 0.8 : 1 : 0.4 }
1281
1393
  ],
1282
- children: /* @__PURE__ */ jsx15(Chevron, { direction, color: theme.textPrimary })
1394
+ children: /* @__PURE__ */ jsx16(Chevron, { direction, color: theme.textPrimary })
1283
1395
  }
1284
1396
  );
1285
1397
  const text = status ?? (paged ? labels.compact(current, count) : null);
1286
- return /* @__PURE__ */ jsxs12(View11, { role: "navigation", style: [styles10.row, style], children: [
1398
+ return /* @__PURE__ */ jsxs13(View12, { role: "navigation", style: [styles11.row, style], children: [
1287
1399
  button("left", canPrevious, paged ? () => onPageChange?.(current - 1) : onPrevious, labels.previous),
1288
- text ? /* @__PURE__ */ jsx15(Text6, { "aria-live": "polite", style: [styles10.status, { color: theme.textSecondary }], children: text }) : null,
1400
+ text ? /* @__PURE__ */ jsx16(Text6, { "aria-live": "polite", style: [styles11.status, { color: theme.textSecondary }], children: text }) : null,
1289
1401
  button("right", canNext, paged ? () => onPageChange?.(current + 1) : onNext, labels.next)
1290
1402
  ] });
1291
1403
  }
1292
- var styles10 = StyleSheet10.create({
1404
+ var styles11 = StyleSheet11.create({
1293
1405
  row: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", gap: 12 },
1294
- button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth: StyleSheet10.hairlineWidth },
1406
+ button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth: StyleSheet11.hairlineWidth },
1295
1407
  status: { fontSize: 13, fontWeight: "600", fontVariant: ["tabular-nums"] }
1296
1408
  });
1297
1409
 
1298
- // src/native/YazakiaMark.tsx
1299
- import { View as View12 } from "react-native";
1410
+ // src/native/phoenix.tsx
1411
+ import { useEffect as useEffect9, useState as useState11 } from "react";
1412
+ import { AccessibilityInfo as AccessibilityInfo7, Animated as Animated9, Easing as Easing6, View as View13 } from "react-native";
1300
1413
  import Svg7, { Circle as Circle5, Defs as Defs6, LinearGradient as LinearGradient6, Path as Path6, RadialGradient as RadialGradient4, Stop as Stop6 } from "react-native-svg";
1301
1414
 
1415
+ // src/mascots/phoenix-geometry.ts
1416
+ var PHOENIX = {
1417
+ wingL: "M56 62 C40 40 22 36 8 40 C22 46 30 56 34 70 C40 64 48 62 56 62 Z",
1418
+ wingR: "M64 62 C80 40 98 36 112 40 C98 46 90 56 86 70 C80 64 72 62 64 62 Z",
1419
+ tailL: "M52 66 C46 82 40 94 30 104 C44 98 52 90 58 78 Z",
1420
+ tailR: "M68 66 C74 82 80 94 90 104 C76 98 68 90 62 78 Z",
1421
+ body: "M60 34 L68 60 L60 82 L52 60 Z",
1422
+ crest: "M60 34 L56 24 M60 34 L64 24"
1423
+ };
1424
+ var PHOENIX_PALETTES = {
1425
+ own: {
1426
+ left: ["#c084fc", "#7c3aed"],
1427
+ right: ["#fde68a", "#f59e0b"],
1428
+ core: ["#fff7ed", "#fb923c"],
1429
+ body: "#1f1530",
1430
+ edge: "#e9d5ff",
1431
+ crest: "#fbbf24"
1432
+ }
1433
+ };
1434
+
1435
+ // src/native/phoenix.tsx
1436
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1437
+ function useFloat(animated) {
1438
+ const [y] = useState11(() => new Animated9.Value(0));
1439
+ useEffect9(() => {
1440
+ if (!animated) return;
1441
+ let loop;
1442
+ let cancelled = false;
1443
+ void AccessibilityInfo7.isReduceMotionEnabled().then((reduce) => {
1444
+ if (reduce || cancelled) return;
1445
+ const step = (toValue) => Animated9.timing(y, { toValue, duration: 2500, easing: Easing6.inOut(Easing6.ease), useNativeDriver: true });
1446
+ loop = Animated9.loop(Animated9.sequence([step(-6), step(0)]));
1447
+ loop.start();
1448
+ });
1449
+ return () => {
1450
+ cancelled = true;
1451
+ loop?.stop();
1452
+ };
1453
+ }, [animated, y]);
1454
+ return y;
1455
+ }
1456
+ function Phoenix({ tone: tone2 = "own", size = 120, animated = true, title, style }) {
1457
+ const { theme } = useTheme();
1458
+ const id = useSvgId("kzp");
1459
+ const y = useFloat(animated);
1460
+ const p = tone2 === "brand" ? { left: [theme.accent2, theme.accent], right: [theme.accent, theme.accent2], core: ["#ffffff", theme.accent], body: theme.surface3, edge: theme.borderStrong, crest: theme.accent } : PHOENIX_PALETTES.own;
1461
+ return /* @__PURE__ */ jsx17(View13, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx17(Animated9.View, { style: { transform: [{ translateY: y }] }, children: /* @__PURE__ */ jsxs14(Svg7, { width: size, height: size, viewBox: "0 0 120 120", children: [
1462
+ /* @__PURE__ */ jsxs14(Defs6, { children: [
1463
+ /* @__PURE__ */ jsxs14(LinearGradient6, { id: `${id}l`, x1: "1", y1: "0", x2: "0", y2: "1", children: [
1464
+ /* @__PURE__ */ jsx17(Stop6, { offset: "0%", stopColor: p.left[0] }),
1465
+ /* @__PURE__ */ jsx17(Stop6, { offset: "100%", stopColor: p.left[1] })
1466
+ ] }),
1467
+ /* @__PURE__ */ jsxs14(LinearGradient6, { id: `${id}r`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
1468
+ /* @__PURE__ */ jsx17(Stop6, { offset: "0%", stopColor: p.right[0] }),
1469
+ /* @__PURE__ */ jsx17(Stop6, { offset: "100%", stopColor: p.right[1] })
1470
+ ] }),
1471
+ /* @__PURE__ */ jsxs14(RadialGradient4, { id: `${id}c`, children: [
1472
+ /* @__PURE__ */ jsx17(Stop6, { offset: "0%", stopColor: p.core[0] }),
1473
+ /* @__PURE__ */ jsx17(Stop6, { offset: "100%", stopColor: p.core[1], stopOpacity: 0 })
1474
+ ] })
1475
+ ] }),
1476
+ /* @__PURE__ */ jsx17(Path6, { d: PHOENIX.wingL, fill: `url(#${id}l)` }),
1477
+ /* @__PURE__ */ jsx17(Path6, { d: PHOENIX.wingR, fill: `url(#${id}r)` }),
1478
+ /* @__PURE__ */ jsx17(Path6, { d: PHOENIX.tailL, fill: `url(#${id}l)`, opacity: 0.7 }),
1479
+ /* @__PURE__ */ jsx17(Path6, { d: PHOENIX.tailR, fill: `url(#${id}r)`, opacity: 0.7 }),
1480
+ /* @__PURE__ */ jsx17(Path6, { d: PHOENIX.body, fill: p.body, stroke: p.edge, strokeOpacity: 0.5 }),
1481
+ /* @__PURE__ */ jsx17(Circle5, { cx: 60, cy: 58, r: 12, fill: `url(#${id}c)` }),
1482
+ /* @__PURE__ */ jsx17(Circle5, { cx: 60, cy: 58, r: 3.5, fill: "#ffffff" }),
1483
+ /* @__PURE__ */ jsx17(Path6, { d: PHOENIX.crest, stroke: p.crest, strokeWidth: 2, strokeLinecap: "round" })
1484
+ ] }) }) });
1485
+ }
1486
+
1487
+ // src/native/YazakiaMark.tsx
1488
+ import React12 from "react";
1489
+ import { View as View14 } from "react-native";
1490
+ import Svg8, { Circle as Circle6, Defs as Defs7, LinearGradient as LinearGradient7, Path as Path7, RadialGradient as RadialGradient5, Stop as Stop7 } from "react-native-svg";
1491
+
1302
1492
  // src/marks/yazakia-geometry.ts
1303
1493
  var turquoise = marks.yazakia[marks.yazakia.length - 1][1];
1304
1494
  var YAZAKIA = {
1305
1495
  viewBox: "0 0 400 400",
1306
1496
  croppedViewBox: "80 80 240 240",
1307
1497
  center: 200,
1308
- /** The two arms, from each head to the core, mirrored around x = 200. */
1309
- arms: ["M128 126 C130 178 168 206 200 214", "M272 126 C270 178 232 206 200 214"],
1310
- /** The stem, from the core down. */
1311
- stem: "M200 214 L200 280",
1312
- /** The width of the arms and the stem: the weight of Orochia's body. */
1313
- stroke: 36,
1314
- /** The two heads, at the ends of the arms. */
1315
- heads: [
1316
- { cx: 128, cy: 124, r: 28 },
1317
- { cx: 272, cy: 124, r: 28 }
1498
+ /** The two voices, left then right: each a bubble (cut around the lens) and its tail. */
1499
+ voices: [
1500
+ { body: "M191.9 109 A80 80 0 1 0 191.9 259 A87 87 0 0 1 191.9 109 Z", tail: "M98 230 Q104 268 88 294 Q122 288 144 262 L130 200 Z" },
1501
+ { body: "M208.1 109 A80 80 0 1 1 208.1 259 A87 87 0 0 0 208.1 109 Z", tail: "M302 230 Q296 268 312 294 Q278 288 256 262 L270 200 Z" }
1318
1502
  ],
1503
+ /** The left voice, a shade deeper: the depth between the two. */
1504
+ shade: { color: "#000", opacity: 0.22 },
1505
+ /** Where the bubbles overlap: the core, lit from above. */
1506
+ lens: { d: "M200 112.6 A80 80 0 0 1 200 255.4 A80 80 0 0 1 200 112.6 Z", y1: 112.6, y2: 255.4 },
1319
1507
  gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yazakia },
1320
- /** Where the arms meet: the core that breathes. */
1321
- core: { cx: 200, cy: 214, r: 24, inner: 8.5 },
1322
- highlight: "#f0fdfa",
1508
+ /** The light on the lens: bright at the top, fading down. */
1509
+ highlight: { color: "#f0fdfa", from: 0.75, to: 0.2 },
1323
1510
  /** The pair: two nodes on the orbit, opposite each other, that turn with it. */
1324
1511
  pair: { r: 8, at: [[40, 200], [360, 200]] },
1325
1512
  glow: { color: turquoise, opacity: 0.16 },
@@ -1330,58 +1517,210 @@ var YAZAKIA = {
1330
1517
  };
1331
1518
 
1332
1519
  // src/native/YazakiaMark.tsx
1333
- import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1520
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1334
1521
  function YazakiaMark({ size = 48, animated = true, title, neutral }) {
1335
1522
  const { theme } = useTheme();
1336
- const { Animated: Animated10, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1523
+ const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1337
1524
  const id = useSvgId("yzm");
1338
1525
  const viewBox = size < 48 ? YAZAKIA.croppedViewBox : YAZAKIA.viewBox;
1339
1526
  const stroke = neutral ?? theme.textMuted;
1340
- const gradient = /* @__PURE__ */ jsx16(LinearGradient6, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YAZAKIA.gradient.x1, y1: YAZAKIA.gradient.y1, x2: YAZAKIA.gradient.x2, y2: YAZAKIA.gradient.y2, children: YAZAKIA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx16(Stop6, { offset, stopColor: color }, offset)) });
1527
+ const gradient = /* @__PURE__ */ jsx18(LinearGradient7, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YAZAKIA.gradient.x1, y1: YAZAKIA.gradient.y1, x2: YAZAKIA.gradient.x2, y2: YAZAKIA.gradient.y2, children: YAZAKIA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx18(Stop7, { offset, stopColor: color }, offset)) });
1528
+ const fill = `url(#${id}a)`;
1529
+ return /* @__PURE__ */ jsxs15(View14, { style: { width: size, height: size }, ...markA11y(title), children: [
1530
+ /* @__PURE__ */ jsxs15(Svg8, { viewBox, style: layer, children: [
1531
+ /* @__PURE__ */ jsxs15(Defs7, { children: [
1532
+ /* @__PURE__ */ jsxs15(RadialGradient5, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1533
+ /* @__PURE__ */ jsx18(Stop7, { offset: "0%", stopColor: YAZAKIA.glow.color, stopOpacity: YAZAKIA.glow.opacity }),
1534
+ /* @__PURE__ */ jsx18(Stop7, { offset: "100%", stopColor: YAZAKIA.glow.color, stopOpacity: 0 })
1535
+ ] }),
1536
+ gradient
1537
+ ] }),
1538
+ size >= 48 ? /* @__PURE__ */ jsx18(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: 190, fill: `url(#${id}g)` }) : null,
1539
+ /* @__PURE__ */ jsx18(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.ring.r, stroke, strokeWidth: YAZAKIA.ring.width, opacity: 0.35, fill: "none" }),
1540
+ YAZAKIA.voices.map((v, i) => /* @__PURE__ */ jsxs15(React12.Fragment, { children: [
1541
+ /* @__PURE__ */ jsx18(Path7, { d: v.body, fill }),
1542
+ /* @__PURE__ */ jsx18(Path7, { d: v.tail, fill }),
1543
+ i === 0 ? /* @__PURE__ */ jsx18(Path7, { d: `${v.body} ${v.tail}`, fill: YAZAKIA.shade.color, opacity: YAZAKIA.shade.opacity }) : null
1544
+ ] }, v.body))
1545
+ ] }),
1546
+ /* @__PURE__ */ jsx18(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs15(Svg8, { viewBox, style: layer, children: [
1547
+ /* @__PURE__ */ jsx18(Defs7, { children: gradient }),
1548
+ /* @__PURE__ */ jsx18(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.orbit.r, stroke, strokeWidth: YAZAKIA.orbit.width, strokeDasharray: YAZAKIA.orbit.dash, opacity: 0.6, fill: "none" }),
1549
+ YAZAKIA.pair.at.map(([cx, cy]) => /* @__PURE__ */ jsx18(Circle6, { cx, cy, r: YAZAKIA.pair.r, fill }, cx))
1550
+ ] }) }),
1551
+ /* @__PURE__ */ jsx18(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs15(Svg8, { viewBox, style: layer, children: [
1552
+ /* @__PURE__ */ jsxs15(Defs7, { children: [
1553
+ gradient,
1554
+ /* @__PURE__ */ jsxs15(LinearGradient7, { id: `${id}l`, gradientUnits: "userSpaceOnUse", x1: 0, y1: YAZAKIA.lens.y1, x2: 0, y2: YAZAKIA.lens.y2, children: [
1555
+ /* @__PURE__ */ jsx18(Stop7, { offset: "0%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.from }),
1556
+ /* @__PURE__ */ jsx18(Stop7, { offset: "100%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.to })
1557
+ ] })
1558
+ ] }),
1559
+ /* @__PURE__ */ jsx18(Path7, { d: YAZAKIA.lens.d, fill }),
1560
+ /* @__PURE__ */ jsx18(Path7, { d: YAZAKIA.lens.d, fill: `url(#${id}l)` })
1561
+ ] }) })
1562
+ ] });
1563
+ }
1564
+
1565
+ // src/native/YororisMark.tsx
1566
+ import { View as View15 } from "react-native";
1567
+ import Svg9, { Circle as Circle7, Defs as Defs8, LinearGradient as LinearGradient8, Path as Path8, RadialGradient as RadialGradient6, Stop as Stop8 } from "react-native-svg";
1568
+
1569
+ // src/marks/yororis-geometry.ts
1570
+ var sand = marks.yororis[0][1];
1571
+ var sage = marks.yororis[marks.yororis.length - 1][1];
1572
+ var YORORIS = {
1573
+ viewBox: "0 0 400 400",
1574
+ croppedViewBox: "80 80 240 240",
1575
+ center: 200,
1576
+ /** The two leaves — open hands, mirrored around x = 200 — filled, rising from the stem. */
1577
+ leaves: [
1578
+ "M200 262 C142 256 104 206 110 122 C138 130 154 152 160 180 C168 218 182 238 204 246 Z",
1579
+ "M200 262 C258 256 296 206 290 122 C262 130 246 152 240 180 C232 218 218 238 196 246 Z"
1580
+ ],
1581
+ /** A vein of light along each leaf (dashed, it drifts slowly when animated). */
1582
+ veins: "M122 142 C128 196 156 232 192 248 M278 142 C272 196 244 232 208 248",
1583
+ vein: { color: "#fbf6ea", opacity: 0.45, width: 3, dash: "2 14" },
1584
+ /** The stem, from the junction down. */
1585
+ stem: "M200 244 L200 312",
1586
+ stroke: 30,
1587
+ gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yororis },
1588
+ /** The core's warm light: from the mark's sand (below) to a light sand (above). */
1589
+ coreGradient: { stops: [["0%", sand], ["100%", "#e6c993"]] },
1590
+ /** The core, held in the hollow of the leaves (not on the junction): the one who is listened to. It breathes. */
1591
+ core: { cx: 200, cy: 184, r: 32, inner: 11 },
1592
+ highlight: "#fbf6ea",
1593
+ /** The moment: one node on the orbit, that turns with it. */
1594
+ moment: { r: 9, at: [200, 40] },
1595
+ glow: { color: sage, opacity: 0.18 },
1596
+ /** The core's breathing shadow (web), in the core's warm sand. */
1597
+ pulse: { color: sand, low: 0.3, high: 0.6 },
1598
+ orbit: { r: 160, dash: "8 8", width: 1.5 },
1599
+ ring: { r: 134, width: 1 }
1600
+ };
1601
+
1602
+ // src/native/YororisMark.tsx
1603
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1604
+ function YororisMark({ size = 48, animated = true, title, neutral }) {
1605
+ const { theme } = useTheme();
1606
+ const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, 36e3);
1607
+ const id = useSvgId("yrm");
1608
+ const viewBox = size < 48 ? YORORIS.croppedViewBox : YORORIS.viewBox;
1609
+ const stroke = neutral ?? theme.textMuted;
1610
+ const gradient = /* @__PURE__ */ jsx19(LinearGradient8, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YORORIS.gradient.x1, y1: YORORIS.gradient.y1, x2: YORORIS.gradient.x2, y2: YORORIS.gradient.y2, children: YORORIS.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx19(Stop8, { offset, stopColor: color }, offset)) });
1341
1611
  const fill = `url(#${id}a)`;
1342
- return /* @__PURE__ */ jsxs13(View12, { style: { width: size, height: size }, ...markA11y(title), children: [
1343
- /* @__PURE__ */ jsxs13(Svg7, { viewBox, style: layer, children: [
1344
- /* @__PURE__ */ jsxs13(Defs6, { children: [
1345
- /* @__PURE__ */ jsxs13(RadialGradient4, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1346
- /* @__PURE__ */ jsx16(Stop6, { offset: "0%", stopColor: YAZAKIA.glow.color, stopOpacity: YAZAKIA.glow.opacity }),
1347
- /* @__PURE__ */ jsx16(Stop6, { offset: "100%", stopColor: YAZAKIA.glow.color, stopOpacity: 0 })
1612
+ return /* @__PURE__ */ jsxs16(View15, { style: { width: size, height: size }, ...markA11y(title), children: [
1613
+ /* @__PURE__ */ jsxs16(Svg9, { viewBox, style: layer, children: [
1614
+ /* @__PURE__ */ jsxs16(Defs8, { children: [
1615
+ /* @__PURE__ */ jsxs16(RadialGradient6, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1616
+ /* @__PURE__ */ jsx19(Stop8, { offset: "0%", stopColor: YORORIS.glow.color, stopOpacity: YORORIS.glow.opacity }),
1617
+ /* @__PURE__ */ jsx19(Stop8, { offset: "100%", stopColor: YORORIS.glow.color, stopOpacity: 0 })
1348
1618
  ] }),
1349
1619
  gradient
1350
1620
  ] }),
1351
- size >= 48 ? /* @__PURE__ */ jsx16(Circle5, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: 190, fill: `url(#${id}g)` }) : null,
1352
- /* @__PURE__ */ jsx16(Circle5, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.ring.r, stroke, strokeWidth: YAZAKIA.ring.width, opacity: 0.35, fill: "none" }),
1353
- YAZAKIA.arms.map((d) => /* @__PURE__ */ jsx16(Path6, { d, stroke: fill, strokeWidth: YAZAKIA.stroke, strokeLinecap: "round", fill: "none" }, d)),
1354
- /* @__PURE__ */ jsx16(Path6, { d: YAZAKIA.stem, stroke: fill, strokeWidth: YAZAKIA.stroke, strokeLinecap: "round", fill: "none" }),
1355
- YAZAKIA.heads.map((h) => /* @__PURE__ */ jsx16(Circle5, { cx: h.cx, cy: h.cy, r: h.r, fill }, h.cx))
1621
+ size >= 48 ? /* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: 190, fill: `url(#${id}g)` }) : null,
1622
+ /* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke, strokeWidth: YORORIS.ring.width, opacity: 0.35, fill: "none" }),
1623
+ /* @__PURE__ */ jsx19(Path8, { d: YORORIS.stem, stroke: fill, strokeWidth: YORORIS.stroke, strokeLinecap: "round", fill: "none" }),
1624
+ YORORIS.leaves.map((d) => /* @__PURE__ */ jsx19(Path8, { d, fill }, d)),
1625
+ /* @__PURE__ */ jsx19(Path8, { d: YORORIS.veins, stroke: YORORIS.vein.color, strokeOpacity: YORORIS.vein.opacity, strokeWidth: YORORIS.vein.width, strokeLinecap: "round", strokeDasharray: YORORIS.vein.dash, fill: "none" })
1356
1626
  ] }),
1357
- /* @__PURE__ */ jsx16(Animated10.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs13(Svg7, { viewBox, style: layer, children: [
1358
- /* @__PURE__ */ jsx16(Defs6, { children: gradient }),
1359
- /* @__PURE__ */ jsx16(Circle5, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.orbit.r, stroke, strokeWidth: YAZAKIA.orbit.width, strokeDasharray: YAZAKIA.orbit.dash, opacity: 0.6, fill: "none" }),
1360
- YAZAKIA.pair.at.map(([cx, cy]) => /* @__PURE__ */ jsx16(Circle5, { cx, cy, r: YAZAKIA.pair.r, fill }, cx))
1627
+ /* @__PURE__ */ jsx19(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs16(Svg9, { viewBox, style: layer, children: [
1628
+ /* @__PURE__ */ jsx19(Defs8, { children: gradient }),
1629
+ /* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.orbit.r, stroke, strokeWidth: YORORIS.orbit.width, strokeDasharray: YORORIS.orbit.dash, opacity: 0.6, fill: "none" }),
1630
+ /* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.moment.at[0], cy: YORORIS.moment.at[1], r: YORORIS.moment.r, fill })
1361
1631
  ] }) }),
1362
- /* @__PURE__ */ jsx16(Animated10.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs13(Svg7, { viewBox, style: layer, children: [
1363
- /* @__PURE__ */ jsx16(Defs6, { children: gradient }),
1364
- /* @__PURE__ */ jsx16(Circle5, { cx: YAZAKIA.core.cx, cy: YAZAKIA.core.cy, r: YAZAKIA.core.r, fill }),
1365
- /* @__PURE__ */ jsx16(Circle5, { cx: YAZAKIA.core.cx, cy: YAZAKIA.core.cy, r: YAZAKIA.core.inner, fill: YAZAKIA.highlight })
1632
+ /* @__PURE__ */ jsx19(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs16(Svg9, { viewBox, style: layer, children: [
1633
+ /* @__PURE__ */ jsx19(Defs8, { children: /* @__PURE__ */ jsx19(LinearGradient8, { id: `${id}c`, x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: YORORIS.coreGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx19(Stop8, { offset, stopColor: color }, offset)) }) }),
1634
+ /* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: `url(#${id}c)` }),
1635
+ /* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
1366
1636
  ] }) })
1367
1637
  ] });
1368
1638
  }
1369
1639
 
1370
1640
  // src/native/ProductMark.tsx
1371
- import { jsx as jsx17 } from "react/jsx-runtime";
1641
+ import { jsx as jsx20 } from "react/jsx-runtime";
1372
1642
  function ProductMark({ id, ...props }) {
1373
- if (id === "krizaka") return /* @__PURE__ */ jsx17(KrizakaMark, { ...props });
1374
- if (id === "orazaka") return /* @__PURE__ */ jsx17(OrazakaMark, { ...props });
1375
- if (id === "yazakia") return /* @__PURE__ */ jsx17(YazakiaMark, { ...props });
1376
- return /* @__PURE__ */ jsx17(OrochiaMark, { ...props });
1643
+ if (id === "krizaka") return /* @__PURE__ */ jsx20(KrizakaMark, { ...props });
1644
+ if (id === "orazaka") return /* @__PURE__ */ jsx20(OrazakaMark, { ...props });
1645
+ if (id === "yazakia") return /* @__PURE__ */ jsx20(YazakiaMark, { ...props });
1646
+ if (id === "yororis") return /* @__PURE__ */ jsx20(YororisMark, { ...props });
1647
+ return /* @__PURE__ */ jsx20(OrochiaMark, { ...props });
1648
+ }
1649
+
1650
+ // src/native/profile-card.tsx
1651
+ import * as React13 from "react";
1652
+ import { Animated as Animated10, StyleSheet as StyleSheet12, View as View16 } from "react-native";
1653
+ import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
1654
+ var ratioOf = (value, max = 100) => Math.min(1, Math.max(0, value / (max || 1)));
1655
+ function Bar({ label, ratio, words, animated, delay }) {
1656
+ const { theme } = useTheme();
1657
+ const t = useEntrance(animated, delay, 900);
1658
+ const [width, setWidth] = React13.useState(0);
1659
+ const translateX = t.interpolate({ inputRange: [0, 1], outputRange: [-width * ratio, 0] });
1660
+ return /* @__PURE__ */ jsx21(
1661
+ View16,
1662
+ {
1663
+ accessible: true,
1664
+ role: "meter",
1665
+ "aria-label": label,
1666
+ "aria-valuemin": 0,
1667
+ "aria-valuemax": 100,
1668
+ "aria-valuenow": Math.round(ratio * 100),
1669
+ "aria-valuetext": words,
1670
+ onLayout: (e) => setWidth(e.nativeEvent.layout.width),
1671
+ style: [styles12.track, { backgroundColor: theme.surface3 }],
1672
+ children: /* @__PURE__ */ jsx21(Animated10.View, { style: [styles12.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }] })
1673
+ }
1674
+ );
1377
1675
  }
1676
+ function ProfileCard({ visual, name, statLabel, value = 100, valueText, stats, caption, children, animated = true, style, ...props }) {
1677
+ const { theme, radius: radius3 } = useTheme();
1678
+ const ratio = ratioOf(value);
1679
+ return /* @__PURE__ */ jsxs17(View16, { ...props, style: [styles12.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style], children: [
1680
+ /* @__PURE__ */ jsx21(View16, { "aria-hidden": true, style: [styles12.disc, { backgroundColor: theme.surface2, borderColor: theme.accentSoft }], children: visual }),
1681
+ /* @__PURE__ */ jsxs17(View16, { style: styles12.head, children: [
1682
+ /* @__PURE__ */ jsx21(Txt, { variant: "title", style: styles12.name, children: name }),
1683
+ statLabel ? /* @__PURE__ */ jsxs17(Txt, { variant: "caption", tone: "secondary", children: [
1684
+ statLabel,
1685
+ " ",
1686
+ /* @__PURE__ */ jsx21(Txt, { variant: "caption", children: valueText ?? `${Math.round(ratio * 100)} %` })
1687
+ ] }) : null
1688
+ ] }),
1689
+ statLabel ? /* @__PURE__ */ jsx21(Bar, { label: statLabel, ratio, words: valueText ?? `${Math.round(ratio * 100)} %`, animated, delay: 200 }) : null,
1690
+ stats?.map((s, i) => {
1691
+ const r = ratioOf(s.value, s.max);
1692
+ const words = s.valueText ?? `${Math.round(r * 100)} %`;
1693
+ return /* @__PURE__ */ jsxs17(View16, { style: styles12.stat, children: [
1694
+ /* @__PURE__ */ jsxs17(View16, { "aria-hidden": true, style: styles12.statHead, children: [
1695
+ /* @__PURE__ */ jsx21(Txt, { variant: "caption", tone: "secondary", children: s.label }),
1696
+ /* @__PURE__ */ jsx21(Txt, { variant: "caption", children: words })
1697
+ ] }),
1698
+ /* @__PURE__ */ jsx21(Bar, { label: s.label, ratio: r, words, animated, delay: 320 + i * 120 })
1699
+ ] }, s.label);
1700
+ }),
1701
+ caption ? /* @__PURE__ */ jsx21(Txt, { variant: "caption", tone: "secondary", style: styles12.caption, children: caption }) : null,
1702
+ children ? /* @__PURE__ */ jsx21(View16, { style: styles12.extra, children }) : null
1703
+ ] });
1704
+ }
1705
+ var styles12 = StyleSheet12.create({
1706
+ root: { alignItems: "center", gap: 12, padding: 20, borderWidth: StyleSheet12.hairlineWidth },
1707
+ disc: { width: 104, height: 104, borderRadius: 52, borderWidth: 1, alignItems: "center", justifyContent: "center", overflow: "hidden" },
1708
+ head: { flexDirection: "row", alignSelf: "stretch", alignItems: "center", justifyContent: "space-between", gap: 8 },
1709
+ name: { flexShrink: 1, fontSize: 17 },
1710
+ track: { alignSelf: "stretch", height: 6, borderRadius: 3, overflow: "hidden" },
1711
+ fill: { height: "100%", borderRadius: 3 },
1712
+ stat: { alignSelf: "stretch", gap: 5 },
1713
+ statHead: { flexDirection: "row", justifyContent: "space-between", gap: 8 },
1714
+ caption: { textAlign: "center" },
1715
+ extra: { flexDirection: "row", flexWrap: "wrap", justifyContent: "center", gap: 8, alignSelf: "stretch" }
1716
+ });
1378
1717
 
1379
1718
  // src/native/progress.tsx
1380
- import * as React10 from "react";
1381
- import { Animated as Animated7, Easing as Easing5, StyleSheet as StyleSheet11, View as View13 } from "react-native";
1382
- import Svg8, { Circle as Circle6, Defs as Defs7, LinearGradient as LinearGradient7, Rect as Rect3, Stop as Stop7 } from "react-native-svg";
1383
- import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
1384
- var AnimatedCircle = Animated7.createAnimatedComponent(Circle6);
1719
+ import * as React14 from "react";
1720
+ import { Animated as Animated11, Easing as Easing7, StyleSheet as StyleSheet13, View as View17 } from "react-native";
1721
+ import Svg10, { Circle as Circle8, Defs as Defs9, LinearGradient as LinearGradient9, Rect as Rect3, Stop as Stop9 } from "react-native-svg";
1722
+ import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
1723
+ var AnimatedCircle = Animated11.createAnimatedComponent(Circle8);
1385
1724
  var BAR = { sm: 4, md: 8, lg: 12 };
1386
1725
  var RING = { sm: 40, md: 80, lg: 144 };
1387
1726
  var STROKE = { sm: 12, md: 9, lg: 7 };
@@ -1392,21 +1731,21 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1392
1731
  const known = typeof value === "number" && Number.isFinite(value);
1393
1732
  const ratio = known ? Math.min(1, Math.max(0, value / (max || 1))) : 0;
1394
1733
  const percent = Math.round(ratio * 100);
1395
- const [progress] = React10.useState(() => new Animated7.Value(ratio));
1396
- const [spin] = React10.useState(() => new Animated7.Value(0));
1397
- const [track, setTrack] = React10.useState(0);
1398
- React10.useEffect(() => {
1734
+ const [progress] = React14.useState(() => new Animated11.Value(ratio));
1735
+ const [spin] = React14.useState(() => new Animated11.Value(0));
1736
+ const [track, setTrack] = React14.useState(0);
1737
+ React14.useEffect(() => {
1399
1738
  if (reduce) {
1400
1739
  progress.setValue(ratio);
1401
1740
  return;
1402
1741
  }
1403
- const animation = Animated7.timing(progress, { toValue: ratio, duration: 700, easing: Easing5.out(Easing5.cubic), useNativeDriver: false });
1742
+ const animation = Animated11.timing(progress, { toValue: ratio, duration: 700, easing: Easing7.out(Easing7.cubic), useNativeDriver: false });
1404
1743
  animation.start();
1405
1744
  return () => animation.stop();
1406
1745
  }, [ratio, reduce, progress]);
1407
- React10.useEffect(() => {
1746
+ React14.useEffect(() => {
1408
1747
  if (known || reduce) return;
1409
- const loop = Animated7.loop(Animated7.timing(spin, { toValue: 1, duration: 1200, easing: Easing5.linear, useNativeDriver: true }));
1748
+ const loop = Animated11.loop(Animated11.timing(spin, { toValue: 1, duration: 1200, easing: Easing7.linear, useNativeDriver: true }));
1410
1749
  loop.start();
1411
1750
  return () => {
1412
1751
  loop.stop();
@@ -1422,9 +1761,9 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1422
1761
  "aria-valuenow": known ? Math.min(max, Math.max(0, value)) : void 0,
1423
1762
  "aria-valuetext": known ? valueText ?? `${percent}%` : valueText
1424
1763
  };
1425
- const gradient = /* @__PURE__ */ jsx18(Defs7, { children: /* @__PURE__ */ jsxs14(LinearGradient7, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
1426
- /* @__PURE__ */ jsx18(Stop7, { offset: "0", stopColor: theme.accent }),
1427
- /* @__PURE__ */ jsx18(Stop7, { offset: "1", stopColor: theme.accent2 })
1764
+ const gradient = /* @__PURE__ */ jsx22(Defs9, { children: /* @__PURE__ */ jsxs18(LinearGradient9, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
1765
+ /* @__PURE__ */ jsx22(Stop9, { offset: "0", stopColor: theme.accent }),
1766
+ /* @__PURE__ */ jsx22(Stop9, { offset: "1", stopColor: theme.accent2 })
1428
1767
  ] }) });
1429
1768
  if (variant === "ring") {
1430
1769
  const side = RING[size];
@@ -1433,11 +1772,11 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1433
1772
  const circumference = 2 * Math.PI * r;
1434
1773
  const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;
1435
1774
  const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] });
1436
- return /* @__PURE__ */ jsxs14(View13, { ...a11y, style: [styles11.ring, { width: side, height: side }, style], children: [
1437
- /* @__PURE__ */ jsx18(Animated7.View, { style: [StyleSheet11.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs14(Svg8, { width: side, height: side, viewBox: "0 0 100 100", children: [
1775
+ return /* @__PURE__ */ jsxs18(View17, { ...a11y, style: [styles13.ring, { width: side, height: side }, style], children: [
1776
+ /* @__PURE__ */ jsx22(Animated11.View, { style: [StyleSheet13.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs18(Svg10, { width: side, height: side, viewBox: "0 0 100 100", children: [
1438
1777
  gradient,
1439
- /* @__PURE__ */ jsx18(Circle6, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
1440
- /* @__PURE__ */ jsx18(
1778
+ /* @__PURE__ */ jsx22(Circle8, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
1779
+ /* @__PURE__ */ jsx22(
1441
1780
  AnimatedCircle,
1442
1781
  {
1443
1782
  cx: 50,
@@ -1457,48 +1796,48 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1457
1796
  }
1458
1797
  const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) : "40%";
1459
1798
  const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });
1460
- return /* @__PURE__ */ jsx18(
1461
- View13,
1799
+ return /* @__PURE__ */ jsx22(
1800
+ View17,
1462
1801
  {
1463
1802
  ...a11y,
1464
1803
  onLayout: known ? void 0 : (event) => setTrack(event.nativeEvent.layout.width),
1465
- style: [styles11.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style],
1466
- children: /* @__PURE__ */ jsx18(Animated7.View, { style: [styles11.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs14(Svg8, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
1804
+ style: [styles13.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style],
1805
+ children: /* @__PURE__ */ jsx22(Animated11.View, { style: [styles13.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs18(Svg10, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
1467
1806
  gradient,
1468
- /* @__PURE__ */ jsx18(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
1807
+ /* @__PURE__ */ jsx22(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
1469
1808
  ] }) })
1470
1809
  }
1471
1810
  );
1472
1811
  }
1473
- var styles11 = StyleSheet11.create({
1812
+ var styles13 = StyleSheet13.create({
1474
1813
  ring: { alignItems: "center", justifyContent: "center" },
1475
1814
  bar: { width: "100%", overflow: "hidden", borderRadius: 9999 },
1476
1815
  fill: { height: "100%", overflow: "hidden", borderRadius: 9999 }
1477
1816
  });
1478
1817
 
1479
1818
  // src/native/search-field.tsx
1480
- import * as React11 from "react";
1481
- import { Pressable as Pressable5, StyleSheet as StyleSheet12, TextInput, View as View14 } from "react-native";
1482
- import Svg9, { Circle as Circle7, Path as Path7 } from "react-native-svg";
1483
- import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
1819
+ import * as React15 from "react";
1820
+ import { Pressable as Pressable5, StyleSheet as StyleSheet14, TextInput, View as View18 } from "react-native";
1821
+ import Svg11, { Circle as Circle9, Path as Path9 } from "react-native-svg";
1822
+ import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
1484
1823
  function SearchField({ label, value, defaultValue = "", onValueChange, onSearch, debounce = 300, onSubmit, clearLabel, style, placeholder, ...props }) {
1485
1824
  const { theme, radius: radius3 } = useTheme();
1486
- const [own, setOwn] = React11.useState(defaultValue);
1825
+ const [own, setOwn] = React15.useState(defaultValue);
1487
1826
  const query = value ?? own;
1488
- const timer2 = React11.useRef(void 0);
1489
- React11.useEffect(() => () => clearTimeout(timer2.current), []);
1827
+ const timer2 = React15.useRef(void 0);
1828
+ React15.useEffect(() => () => clearTimeout(timer2.current), []);
1490
1829
  const change = (next) => {
1491
1830
  if (value === void 0) setOwn(next);
1492
1831
  onValueChange?.(next);
1493
1832
  clearTimeout(timer2.current);
1494
1833
  if (onSearch) timer2.current = setTimeout(() => onSearch(next), debounce);
1495
1834
  };
1496
- return /* @__PURE__ */ jsxs15(View14, { style: [styles12.frame, { borderRadius: radius3.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style], children: [
1497
- /* @__PURE__ */ jsxs15(Svg9, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2, strokeLinecap: "round", "aria-hidden": true, children: [
1498
- /* @__PURE__ */ jsx19(Circle7, { cx: 11, cy: 11, r: 7 }),
1499
- /* @__PURE__ */ jsx19(Path7, { d: "m20 20-3.5-3.5" })
1835
+ return /* @__PURE__ */ jsxs19(View18, { style: [styles14.frame, { borderRadius: radius3.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style], children: [
1836
+ /* @__PURE__ */ jsxs19(Svg11, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2, strokeLinecap: "round", "aria-hidden": true, children: [
1837
+ /* @__PURE__ */ jsx23(Circle9, { cx: 11, cy: 11, r: 7 }),
1838
+ /* @__PURE__ */ jsx23(Path9, { d: "m20 20-3.5-3.5" })
1500
1839
  ] }),
1501
- /* @__PURE__ */ jsx19(
1840
+ /* @__PURE__ */ jsx23(
1502
1841
  TextInput,
1503
1842
  {
1504
1843
  role: "searchbox",
@@ -1516,33 +1855,33 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
1516
1855
  onSearch?.(query);
1517
1856
  onSubmit?.(query);
1518
1857
  },
1519
- style: [styles12.input, { color: theme.textPrimary }],
1858
+ style: [styles14.input, { color: theme.textPrimary }],
1520
1859
  ...props
1521
1860
  }
1522
1861
  ),
1523
- query ? /* @__PURE__ */ jsx19(Pressable5, { role: "button", "aria-label": clearLabel, hitSlop: 10, onPress: () => change(""), style: styles12.clear, children: /* @__PURE__ */ jsx19(Svg9, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2.4, strokeLinecap: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx19(Path7, { d: "M18 6 6 18M6 6l12 12" }) }) }) : null
1862
+ query ? /* @__PURE__ */ jsx23(Pressable5, { role: "button", "aria-label": clearLabel, hitSlop: 10, onPress: () => change(""), style: styles14.clear, children: /* @__PURE__ */ jsx23(Svg11, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2.4, strokeLinecap: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx23(Path9, { d: "M18 6 6 18M6 6l12 12" }) }) }) : null
1524
1863
  ] });
1525
1864
  }
1526
- var styles12 = StyleSheet12.create({
1527
- frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet12.hairlineWidth },
1865
+ var styles14 = StyleSheet14.create({
1866
+ frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet14.hairlineWidth },
1528
1867
  input: { flex: 1, height: "100%", fontSize: 15, paddingVertical: 0 },
1529
1868
  clear: { width: 32, height: 32, alignItems: "center", justifyContent: "center" }
1530
1869
  });
1531
1870
 
1532
1871
  // src/native/segmented.tsx
1533
- import { Pressable as Pressable6, StyleSheet as StyleSheet13, Text as Text7, View as View15 } from "react-native";
1534
- import { jsx as jsx20 } from "react/jsx-runtime";
1872
+ import { Pressable as Pressable6, StyleSheet as StyleSheet15, Text as Text7, View as View19 } from "react-native";
1873
+ import { jsx as jsx24 } from "react/jsx-runtime";
1535
1874
  function Segmented({ options, value, onValueChange, size = "md", "aria-label": label, style }) {
1536
1875
  const { theme, radius: radius3 } = useTheme();
1537
- return /* @__PURE__ */ jsx20(
1538
- View15,
1876
+ return /* @__PURE__ */ jsx24(
1877
+ View19,
1539
1878
  {
1540
1879
  role: "tablist",
1541
1880
  "aria-label": label,
1542
- style: [styles13.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
1881
+ style: [styles15.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
1543
1882
  children: options.map((option) => {
1544
1883
  const selected = option.value === value;
1545
- return /* @__PURE__ */ jsx20(
1884
+ return /* @__PURE__ */ jsx24(
1546
1885
  Pressable6,
1547
1886
  {
1548
1887
  role: "tab",
@@ -1553,12 +1892,12 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
1553
1892
  if (!selected) onValueChange(option.value);
1554
1893
  },
1555
1894
  style: [
1556
- styles13.segment,
1895
+ styles15.segment,
1557
1896
  { borderRadius: radius3.sm },
1558
1897
  selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,
1559
- option.disabled ? styles13.disabled : null
1898
+ option.disabled ? styles15.disabled : null
1560
1899
  ],
1561
- children: /* @__PURE__ */ jsx20(Text7, { numberOfLines: 1, style: [styles13.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
1900
+ children: /* @__PURE__ */ jsx24(Text7, { numberOfLines: 1, style: [styles15.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
1562
1901
  },
1563
1902
  option.value
1564
1903
  );
@@ -1566,17 +1905,17 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
1566
1905
  }
1567
1906
  );
1568
1907
  }
1569
- var styles13 = StyleSheet13.create({
1570
- track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet13.hairlineWidth },
1571
- segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet13.hairlineWidth, borderColor: "transparent" },
1908
+ var styles15 = StyleSheet15.create({
1909
+ track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet15.hairlineWidth },
1910
+ segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet15.hairlineWidth, borderColor: "transparent" },
1572
1911
  label: { fontWeight: "600" },
1573
1912
  disabled: { opacity: 0.4 }
1574
1913
  });
1575
1914
 
1576
1915
  // src/native/skeleton.tsx
1577
- import * as React12 from "react";
1578
- import { Animated as Animated8 } from "react-native";
1579
- import { jsx as jsx21 } from "react/jsx-runtime";
1916
+ import * as React16 from "react";
1917
+ import { Animated as Animated12 } from "react-native";
1918
+ import { jsx as jsx25 } from "react/jsx-runtime";
1580
1919
  var SHAPE = {
1581
1920
  text: { width: "100%", height: 12, radius: 4 },
1582
1921
  circle: { width: 40, height: 40, radius: 9999 },
@@ -1585,13 +1924,13 @@ var SHAPE = {
1585
1924
  function Skeleton({ shape = "text", width, height, style, testID }) {
1586
1925
  const { theme } = useTheme();
1587
1926
  const reduce = useReducedMotion();
1588
- const [opacity] = React12.useState(() => new Animated8.Value(1));
1589
- React12.useEffect(() => {
1927
+ const [opacity] = React16.useState(() => new Animated12.Value(1));
1928
+ React16.useEffect(() => {
1590
1929
  if (reduce) return;
1591
- const loop = Animated8.loop(
1592
- Animated8.sequence([
1593
- Animated8.timing(opacity, { toValue: 0.5, duration: 900, useNativeDriver: true }),
1594
- Animated8.timing(opacity, { toValue: 1, duration: 900, useNativeDriver: true })
1930
+ const loop = Animated12.loop(
1931
+ Animated12.sequence([
1932
+ Animated12.timing(opacity, { toValue: 0.5, duration: 900, useNativeDriver: true }),
1933
+ Animated12.timing(opacity, { toValue: 1, duration: 900, useNativeDriver: true })
1595
1934
  ])
1596
1935
  );
1597
1936
  loop.start();
@@ -1602,8 +1941,8 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
1602
1941
  }, [reduce, opacity]);
1603
1942
  const s = SHAPE[shape];
1604
1943
  const side = shape === "circle" ? width ?? height ?? s.width : void 0;
1605
- return /* @__PURE__ */ jsx21(
1606
- Animated8.View,
1944
+ return /* @__PURE__ */ jsx25(
1945
+ Animated12.View,
1607
1946
  {
1608
1947
  testID,
1609
1948
  "aria-hidden": true,
@@ -1617,10 +1956,10 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
1617
1956
 
1618
1957
  // src/native/spinner.tsx
1619
1958
  import { ActivityIndicator as ActivityIndicator2 } from "react-native";
1620
- import { jsx as jsx22 } from "react/jsx-runtime";
1959
+ import { jsx as jsx26 } from "react/jsx-runtime";
1621
1960
  function Spinner({ label, size = "md", ...props }) {
1622
1961
  const { theme } = useTheme();
1623
- return /* @__PURE__ */ jsx22(
1962
+ return /* @__PURE__ */ jsx26(
1624
1963
  ActivityIndicator2,
1625
1964
  {
1626
1965
  accessible: true,
@@ -1635,9 +1974,9 @@ function Spinner({ label, size = "md", ...props }) {
1635
1974
  }
1636
1975
 
1637
1976
  // src/native/toast.tsx
1638
- import * as React13 from "react";
1639
- import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated9, Pressable as Pressable7, StyleSheet as StyleSheet14, Text as Text8, View as View16 } from "react-native";
1640
- import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
1977
+ import * as React17 from "react";
1978
+ import { AccessibilityInfo as AccessibilityInfo8, Animated as Animated13, Pressable as Pressable7, StyleSheet as StyleSheet16, Text as Text8, View as View20 } from "react-native";
1979
+ import { Fragment as Fragment3, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1641
1980
  var items = [];
1642
1981
  var listeners2 = /* @__PURE__ */ new Set();
1643
1982
  var counter = 0;
@@ -1672,30 +2011,30 @@ var toast = Object.assign(show, {
1672
2011
  function ToastView({ item, closeLabel, duration }) {
1673
2012
  const { theme, radius: radius3 } = useTheme();
1674
2013
  const reduce = useReducedMotion();
1675
- const [enter] = React13.useState(() => new Animated9.Value(reduce ? 1 : 0));
1676
- React13.useEffect(() => {
2014
+ const [enter] = React17.useState(() => new Animated13.Value(reduce ? 1 : 0));
2015
+ React17.useEffect(() => {
1677
2016
  if (reduce) enter.setValue(1);
1678
- else Animated9.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();
2017
+ else Animated13.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();
1679
2018
  }, [enter, reduce]);
1680
- React13.useEffect(() => {
1681
- AccessibilityInfo6.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);
2019
+ React17.useEffect(() => {
2020
+ AccessibilityInfo8.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);
1682
2021
  }, [item.title, item.description]);
1683
2022
  const ms = item.duration ?? duration;
1684
- React13.useEffect(() => {
2023
+ React17.useEffect(() => {
1685
2024
  if (!Number.isFinite(ms)) return;
1686
2025
  const timer2 = setTimeout(() => dismiss(item.id), ms);
1687
2026
  return () => clearTimeout(timer2);
1688
2027
  }, [item.id, ms]);
1689
2028
  const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? "default"];
1690
- const text = /* @__PURE__ */ jsxs16(Fragment3, { children: [
1691
- item.icon ? /* @__PURE__ */ jsx23(View16, { "aria-hidden": true, children: item.icon }) : null,
1692
- /* @__PURE__ */ jsxs16(View16, { style: styles14.content, children: [
1693
- /* @__PURE__ */ jsx23(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
1694
- item.description ? /* @__PURE__ */ jsx23(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
2029
+ const text = /* @__PURE__ */ jsxs20(Fragment3, { children: [
2030
+ item.icon ? /* @__PURE__ */ jsx27(View20, { "aria-hidden": true, children: item.icon }) : null,
2031
+ /* @__PURE__ */ jsxs20(View20, { style: styles16.content, children: [
2032
+ /* @__PURE__ */ jsx27(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
2033
+ item.description ? /* @__PURE__ */ jsx27(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
1695
2034
  ] })
1696
2035
  ] });
1697
- const body = /* @__PURE__ */ jsxs16(Fragment3, { children: [
1698
- item.onPress ? /* @__PURE__ */ jsx23(
2036
+ const body = /* @__PURE__ */ jsxs20(Fragment3, { children: [
2037
+ item.onPress ? /* @__PURE__ */ jsx27(
1699
2038
  Pressable7,
1700
2039
  {
1701
2040
  role: "button",
@@ -1703,11 +2042,11 @@ function ToastView({ item, closeLabel, duration }) {
1703
2042
  item.onPress?.();
1704
2043
  dismiss(item.id);
1705
2044
  },
1706
- style: ({ pressed }) => [styles14.main, { opacity: pressed ? 0.8 : 1 }],
2045
+ style: ({ pressed }) => [styles16.main, { opacity: pressed ? 0.8 : 1 }],
1707
2046
  children: text
1708
2047
  }
1709
- ) : /* @__PURE__ */ jsx23(View16, { style: styles14.main, children: text }),
1710
- item.action ? /* @__PURE__ */ jsx23(
2048
+ ) : /* @__PURE__ */ jsx27(View20, { style: styles16.main, children: text }),
2049
+ item.action ? /* @__PURE__ */ jsx27(
1711
2050
  Pressable7,
1712
2051
  {
1713
2052
  role: "button",
@@ -1715,33 +2054,33 @@ function ToastView({ item, closeLabel, duration }) {
1715
2054
  item.action?.onPress();
1716
2055
  dismiss(item.id);
1717
2056
  },
1718
- style: [styles14.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
1719
- children: /* @__PURE__ */ jsx23(Text8, { style: [styles14.actionLabel, { color: theme.onAccent }], children: item.action.label })
2057
+ style: [styles16.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
2058
+ children: /* @__PURE__ */ jsx27(Text8, { style: [styles16.actionLabel, { color: theme.onAccent }], children: item.action.label })
1720
2059
  }
1721
2060
  ) : null,
1722
- /* @__PURE__ */ jsx23(Pressable7, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles14.close, children: /* @__PURE__ */ jsx23(Text8, { style: [styles14.cross, { color: theme.textSecondary }], children: "\xD7" }) })
2061
+ /* @__PURE__ */ jsx27(Pressable7, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles16.close, children: /* @__PURE__ */ jsx27(Text8, { style: [styles16.cross, { color: theme.textSecondary }], children: "\xD7" }) })
1723
2062
  ] });
1724
2063
  const frame = [
1725
- styles14.toast,
2064
+ styles16.toast,
1726
2065
  { backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius3.lg, shadowColor: theme.scrimStrong }
1727
2066
  ];
1728
2067
  const motion3 = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }] };
1729
- return /* @__PURE__ */ jsx23(Animated9.View, { "aria-live": "polite", style: motion3, children: /* @__PURE__ */ jsx23(View16, { style: frame, children: body }) });
2068
+ return /* @__PURE__ */ jsx27(Animated13.View, { "aria-live": "polite", style: motion3, children: /* @__PURE__ */ jsx27(View20, { style: frame, children: body }) });
1730
2069
  }
1731
2070
  function Toaster({ closeLabel, position = "top", offset = 12, duration = 6e3, max = 3 }) {
1732
- const all = React13.useSyncExternalStore(subscribe2, snapshot, snapshot);
2071
+ const all = React17.useSyncExternalStore(subscribe2, snapshot, snapshot);
1733
2072
  const shown = all.slice(-max);
1734
2073
  if (shown.length === 0) return null;
1735
- return /* @__PURE__ */ jsx23(View16, { pointerEvents: "box-none", style: [styles14.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx23(ToastView, { item, closeLabel, duration }, item.id)) });
2074
+ return /* @__PURE__ */ jsx27(View20, { pointerEvents: "box-none", style: [styles16.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx27(ToastView, { item, closeLabel, duration }, item.id)) });
1736
2075
  }
1737
- var styles14 = StyleSheet14.create({
2076
+ var styles16 = StyleSheet16.create({
1738
2077
  stack: { position: "absolute", left: 12, right: 12, gap: 8, zIndex: 100 },
1739
2078
  toast: {
1740
2079
  flexDirection: "row",
1741
2080
  alignItems: "center",
1742
2081
  gap: 10,
1743
2082
  padding: 12,
1744
- borderWidth: StyleSheet14.hairlineWidth,
2083
+ borderWidth: StyleSheet16.hairlineWidth,
1745
2084
  borderLeftWidth: 4,
1746
2085
  shadowOpacity: 0.3,
1747
2086
  shadowRadius: 16,
@@ -1774,6 +2113,7 @@ export {
1774
2113
  Countdown,
1775
2114
  EmptyState,
1776
2115
  ErrorState,
2116
+ GoalGauge,
1777
2117
  IconButton,
1778
2118
  KrizakaMark,
1779
2119
  LoadingState,
@@ -1782,7 +2122,9 @@ export {
1782
2122
  OrazakaMark,
1783
2123
  OrochiaMark,
1784
2124
  Pagination,
2125
+ Phoenix,
1785
2126
  ProductMark,
2127
+ ProfileCard,
1786
2128
  Progress,
1787
2129
  SearchField,
1788
2130
  Segmented,
@@ -1794,6 +2136,7 @@ export {
1794
2136
  Txt,
1795
2137
  WelcomeState,
1796
2138
  YazakiaMark,
2139
+ YororisMark,
1797
2140
  alpha,
1798
2141
  splitDuration,
1799
2142
  textStyles,