@almadar/shell-web 0.0.0-stage → 1.0.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 (266) hide show
  1. package/bundling.d.mts +18 -0
  2. package/bundling.mjs +28 -0
  3. package/dist/ArbitraryClassCompiler-CO_iASBn.d.ts +195 -0
  4. package/dist/AvlGlyph-EPJKFEO3.js +6 -0
  5. package/dist/AvlStateMachine-RKZIKNGC.js +9 -0
  6. package/dist/AvlTransitionDetail-63SD6GZF.js +11 -0
  7. package/dist/AvlTransitionExplainer-ZBTLOM3T.js +12 -0
  8. package/dist/BehaviorView-YS5G4GNB.js +11 -0
  9. package/dist/Canvas3DHost-BkZQB5l2.d.ts +552 -0
  10. package/dist/EventBusProvider-BFFHfN4O.d.ts +296 -0
  11. package/dist/FileTree-BCFnBEuQ.d.ts +254 -0
  12. package/dist/FlowCanvas-3JRMNJLV.css +1756 -0
  13. package/dist/FlowCanvas-AUMTWMNG.js +26 -0
  14. package/dist/GameAudioProvider-ceM_n0ey.d.ts +90 -0
  15. package/dist/KaTeX_AMS-Regular-CYEKBG2K.woff +0 -0
  16. package/dist/KaTeX_AMS-Regular-JKX5W2C4.ttf +0 -0
  17. package/dist/KaTeX_AMS-Regular-U6PRYMIZ.woff2 +0 -0
  18. package/dist/KaTeX_Caligraphic-Bold-5QL5CMTE.woff2 +0 -0
  19. package/dist/KaTeX_Caligraphic-Bold-WZ3QSGD3.woff +0 -0
  20. package/dist/KaTeX_Caligraphic-Bold-ZTS3R3HK.ttf +0 -0
  21. package/dist/KaTeX_Caligraphic-Regular-3LKEU76G.woff +0 -0
  22. package/dist/KaTeX_Caligraphic-Regular-A7XRTZ5Q.ttf +0 -0
  23. package/dist/KaTeX_Caligraphic-Regular-KX5MEWCF.woff2 +0 -0
  24. package/dist/KaTeX_Fraktur-Bold-2QVFK6NQ.woff2 +0 -0
  25. package/dist/KaTeX_Fraktur-Bold-T4SWXBMT.woff +0 -0
  26. package/dist/KaTeX_Fraktur-Bold-WGHVTYOR.ttf +0 -0
  27. package/dist/KaTeX_Fraktur-Regular-2PEIFJSJ.woff2 +0 -0
  28. package/dist/KaTeX_Fraktur-Regular-5U4OPH2X.ttf +0 -0
  29. package/dist/KaTeX_Fraktur-Regular-PQMHCIK6.woff +0 -0
  30. package/dist/KaTeX_Main-Bold-2GA4IZIN.woff +0 -0
  31. package/dist/KaTeX_Main-Bold-W5FBVCZM.ttf +0 -0
  32. package/dist/KaTeX_Main-Bold-YP5VVQRP.woff2 +0 -0
  33. package/dist/KaTeX_Main-BoldItalic-4P4C7HJH.woff +0 -0
  34. package/dist/KaTeX_Main-BoldItalic-N4V3DX7S.woff2 +0 -0
  35. package/dist/KaTeX_Main-BoldItalic-ODMLBJJQ.ttf +0 -0
  36. package/dist/KaTeX_Main-Italic-I43T2HSR.ttf +0 -0
  37. package/dist/KaTeX_Main-Italic-RELBIK7M.woff2 +0 -0
  38. package/dist/KaTeX_Main-Italic-SASNQFN2.woff +0 -0
  39. package/dist/KaTeX_Main-Regular-ARRPAO67.woff2 +0 -0
  40. package/dist/KaTeX_Main-Regular-P5I74A2A.woff +0 -0
  41. package/dist/KaTeX_Main-Regular-W74P5G27.ttf +0 -0
  42. package/dist/KaTeX_Math-BoldItalic-6EBV3DK5.woff +0 -0
  43. package/dist/KaTeX_Math-BoldItalic-K4WTGH3J.woff2 +0 -0
  44. package/dist/KaTeX_Math-BoldItalic-VB447A4D.ttf +0 -0
  45. package/dist/KaTeX_Math-Italic-6KGCHLFN.woff2 +0 -0
  46. package/dist/KaTeX_Math-Italic-KKK3USB2.woff +0 -0
  47. package/dist/KaTeX_Math-Italic-SON4MRCA.ttf +0 -0
  48. package/dist/KaTeX_SansSerif-Bold-RRNVJFFW.woff2 +0 -0
  49. package/dist/KaTeX_SansSerif-Bold-STQ6RXC7.ttf +0 -0
  50. package/dist/KaTeX_SansSerif-Bold-X5M5EMOD.woff +0 -0
  51. package/dist/KaTeX_SansSerif-Italic-HMPFTM52.woff2 +0 -0
  52. package/dist/KaTeX_SansSerif-Italic-PSN4QKYX.woff +0 -0
  53. package/dist/KaTeX_SansSerif-Italic-WTBAZBGY.ttf +0 -0
  54. package/dist/KaTeX_SansSerif-Regular-2TL3USAE.ttf +0 -0
  55. package/dist/KaTeX_SansSerif-Regular-OQCII6EP.woff +0 -0
  56. package/dist/KaTeX_SansSerif-Regular-XIQ62X4E.woff2 +0 -0
  57. package/dist/KaTeX_Script-Regular-72OLXYNA.ttf +0 -0
  58. package/dist/KaTeX_Script-Regular-A5IFOEBS.woff +0 -0
  59. package/dist/KaTeX_Script-Regular-APUWIHLP.woff2 +0 -0
  60. package/dist/KaTeX_Size1-Regular-4HRHTS65.woff +0 -0
  61. package/dist/KaTeX_Size1-Regular-5LRUTBFT.woff2 +0 -0
  62. package/dist/KaTeX_Size1-Regular-7K6AASVL.ttf +0 -0
  63. package/dist/KaTeX_Size2-Regular-222HN3GT.ttf +0 -0
  64. package/dist/KaTeX_Size2-Regular-K5ZHAIS6.woff +0 -0
  65. package/dist/KaTeX_Size2-Regular-LELKET5D.woff2 +0 -0
  66. package/dist/KaTeX_Size3-Regular-TLFPAHDE.woff +0 -0
  67. package/dist/KaTeX_Size3-Regular-UFCO6WCA.ttf +0 -0
  68. package/dist/KaTeX_Size3-Regular-WQRQ47UD.woff2 +0 -0
  69. package/dist/KaTeX_Size4-Regular-7PGNVPQK.ttf +0 -0
  70. package/dist/KaTeX_Size4-Regular-CDMV7U5C.woff2 +0 -0
  71. package/dist/KaTeX_Size4-Regular-PKMWZHNC.woff +0 -0
  72. package/dist/KaTeX_Typewriter-Regular-3F5K6SQ6.ttf +0 -0
  73. package/dist/KaTeX_Typewriter-Regular-MJMFSK64.woff +0 -0
  74. package/dist/KaTeX_Typewriter-Regular-VBYJ4NRC.woff2 +0 -0
  75. package/dist/KernelEngineContext-CcxGYtlr.d.ts +33 -0
  76. package/dist/LayersPanel-M2LHWUFF.js +6 -0
  77. package/dist/ModuleCard-QHDGK5XK.js +7 -0
  78. package/dist/OrbInspector-MHLJ6OEE.css +1756 -0
  79. package/dist/OrbInspector-QCPEPUPH.js +26 -0
  80. package/dist/Select-B-iDdnvE.d.ts +185 -0
  81. package/dist/ServerBridge-Bqsj-lOU.d.ts +124 -0
  82. package/dist/ThemeContext-DJmO59xd.d.ts +147 -0
  83. package/dist/UISlotContext-Dl_ewwCI.d.ts +79 -0
  84. package/dist/UISlotRenderer-C7WWOK43.js +26 -0
  85. package/dist/UISlotRenderer-KVFO6J7R.css +1756 -0
  86. package/dist/auth/browser/index.d.ts +2 -0
  87. package/dist/auth/browser/index.js +2 -0
  88. package/dist/auth/react/index.d.ts +56 -0
  89. package/dist/auth/react/index.js +157 -0
  90. package/dist/avl/index.css +1756 -0
  91. package/dist/avl/index.d.ts +2248 -0
  92. package/dist/avl/index.js +2693 -0
  93. package/dist/avl-3d-context-BycmO6tG.d.ts +201 -0
  94. package/dist/avl-schema-parser-CtJxJ9KU.d.ts +132 -0
  95. package/dist/avl-zoom-state-CKMVuBFg.d.ts +17 -0
  96. package/dist/chunk-3BBUBJFF.js +339 -0
  97. package/dist/chunk-3S54FWRC.js +131 -0
  98. package/dist/chunk-3VZ36ZKO.js +775 -0
  99. package/dist/chunk-4T3P43NS.js +1133 -0
  100. package/dist/chunk-4YXBKHHM.js +11488 -0
  101. package/dist/chunk-57DC34LY.js +525 -0
  102. package/dist/chunk-5QTYQTPS.js +15 -0
  103. package/dist/chunk-A2LR6VQQ.js +349 -0
  104. package/dist/chunk-AB3X7QTE.js +505 -0
  105. package/dist/chunk-AE7VCQB6.js +561 -0
  106. package/dist/chunk-AGXD77SL.js +98 -0
  107. package/dist/chunk-AU7O65OX.js +66 -0
  108. package/dist/chunk-CPLN6NBQ.js +701 -0
  109. package/dist/chunk-DZBQA2OW.js +176 -0
  110. package/dist/chunk-E6KA4J6N.js +227 -0
  111. package/dist/chunk-EOWMARUB.js +16 -0
  112. package/dist/chunk-G7DCAZ22.js +19 -0
  113. package/dist/chunk-GFXCPUMX.js +1334 -0
  114. package/dist/chunk-HH5KSMH5.js +311 -0
  115. package/dist/chunk-ILQXJ2AR.js +280 -0
  116. package/dist/chunk-ILZ7ORX7.js +432 -0
  117. package/dist/chunk-K4MOPSEL.js +674 -0
  118. package/dist/chunk-LHP2TK7O.js +47587 -0
  119. package/dist/chunk-P4ZFUQFF.js +93 -0
  120. package/dist/chunk-PCR37T3U.js +296 -0
  121. package/dist/chunk-PRXQGGCO.js +580 -0
  122. package/dist/chunk-REXYVBUO.js +191 -0
  123. package/dist/chunk-ROICKAU7.js +24 -0
  124. package/dist/chunk-SP5CDJ6K.js +338 -0
  125. package/dist/chunk-TUPZWTRE.js +1051 -0
  126. package/dist/chunk-TXAUOLWZ.js +490 -0
  127. package/dist/chunk-TZZBINQY.js +82 -0
  128. package/dist/chunk-UTDC2NEA.js +14 -0
  129. package/dist/chunk-UU57VNS2.js +1053 -0
  130. package/dist/chunk-UXLE3IPR.js +421 -0
  131. package/dist/chunk-VO2TTLS5.js +94 -0
  132. package/dist/chunk-X3DMMX27.js +11 -0
  133. package/dist/chunk-YHMRX6YA.js +455 -0
  134. package/dist/components/index.css +1756 -0
  135. package/dist/components/index.d.ts +11299 -0
  136. package/dist/components/index.js +1110 -0
  137. package/dist/context/index.d.ts +8 -0
  138. package/dist/context/index.js +8 -0
  139. package/dist/core.d.ts +2599 -0
  140. package/dist/core.js +3 -0
  141. package/dist/design-classes/index.cjs +431 -0
  142. package/dist/design-classes/index.d.cts +165 -0
  143. package/dist/design-classes/index.d.ts +165 -0
  144. package/dist/design-classes/index.js +399 -0
  145. package/dist/emojiItems-QGSNAABW.js +20 -0
  146. package/dist/fx-CmQjnHmT.d.ts +371 -0
  147. package/dist/hooks/index.d.ts +971 -0
  148. package/dist/hooks/index.js +8 -0
  149. package/dist/index.d.ts +408 -0
  150. package/dist/index.js +178 -0
  151. package/dist/katexPlugin-FA7NX4PE.css +1161 -0
  152. package/dist/katexPlugin-NCDKOOQY.js +2 -0
  153. package/dist/kernel-client-TZKGHJRY.js +516 -0
  154. package/dist/kernel-wire-wNdAPfhJ.d.ts +88 -0
  155. package/dist/lib/index.d.ts +602 -0
  156. package/dist/lib/index.js +1289 -0
  157. package/dist/paintDispatch-CuJLsr9Y.d.ts +688 -0
  158. package/dist/parseLessonSegments-GpCeMrb2.d.ts +334 -0
  159. package/dist/perf-CKiBKbkw.d.ts +22 -0
  160. package/dist/perf-Dr28-AgT.d.ts +57 -0
  161. package/dist/prism-X5YWKXO5.js +136 -0
  162. package/dist/providers/index.css +1756 -0
  163. package/dist/providers/index.d.ts +355 -0
  164. package/dist/providers/index.js +29 -0
  165. package/dist/renderer/index.d.ts +465 -0
  166. package/dist/renderer/index.js +4 -0
  167. package/dist/runtime/index.css +1756 -0
  168. package/dist/runtime/index.d.ts +239 -0
  169. package/dist/runtime/index.js +28 -0
  170. package/dist/slot-host-CPzrxLo9.d.ts +48 -0
  171. package/dist/ssr/index.cjs +9739 -0
  172. package/dist/ssr/index.d.cts +464 -0
  173. package/dist/ssr/index.d.ts +464 -0
  174. package/dist/ssr/index.js +9703 -0
  175. package/dist/storage/browser/index.d.ts +1 -0
  176. package/dist/storage/browser/index.js +2 -0
  177. package/dist/test-support.d.ts +42 -0
  178. package/dist/test-support.js +181 -0
  179. package/dist/themeTokens-CRd8AEDF.d.ts +125 -0
  180. package/dist/three/index.css +503 -0
  181. package/dist/three/index.d.ts +1185 -0
  182. package/dist/three/index.js +3908 -0
  183. package/dist/useUISlots-CiobNFGb.d.ts +211 -0
  184. package/dist/verification-C5pTeMJv.d.ts +66 -0
  185. package/dist/verificationRegistry-CVrcxG1s.d.ts +122 -0
  186. package/dist/wrapCallbackForEvent-B9QLbhxX.d.ts +19 -0
  187. package/index.css +199 -0
  188. package/package.json +273 -3
  189. package/src/core/lib/band-shapes.json +7 -0
  190. package/src/core/locales/ar.json +1276 -0
  191. package/src/core/locales/en.json +1276 -0
  192. package/src/core/locales/index.ts +54 -0
  193. package/src/core/locales/sl.json +1276 -0
  194. package/src/core/tokens/native-tokens.json +369 -0
  195. package/tailwind-compile.cjs +29 -0
  196. package/tailwind-preset.cjs +1020 -0
  197. package/themes/_base.css +451 -0
  198. package/themes/_contract.md +307 -0
  199. package/themes/_fonts-kenney.css +11 -0
  200. package/themes/_fonts.css +12 -0
  201. package/themes/_foundation.css +105 -0
  202. package/themes/_head.css +22 -0
  203. package/themes/_presets.css +67 -0
  204. package/themes/almadar-heritage.css +455 -0
  205. package/themes/almadar-website.css +269 -0
  206. package/themes/almadar.css +269 -0
  207. package/themes/aqua.css +455 -0
  208. package/themes/arabesque.css +459 -0
  209. package/themes/art-deco.css +457 -0
  210. package/themes/art-nouveau.css +459 -0
  211. package/themes/atelier.css +463 -0
  212. package/themes/bauhaus.css +461 -0
  213. package/themes/bloomberg-dense.css +463 -0
  214. package/themes/blueprint.css +457 -0
  215. package/themes/clay.css +449 -0
  216. package/themes/comic.css +453 -0
  217. package/themes/constructivist.css +457 -0
  218. package/themes/corporate.css +449 -0
  219. package/themes/cyberpunk.css +453 -0
  220. package/themes/frutiger-aero.css +458 -0
  221. package/themes/game-adventure.css +201 -0
  222. package/themes/game-rpg.css +203 -0
  223. package/themes/game-sci-fi.css +201 -0
  224. package/themes/game-ui-pack.css +200 -0
  225. package/themes/gazette.css +449 -0
  226. package/themes/glass.css +457 -0
  227. package/themes/gothic.css +453 -0
  228. package/themes/index.css +21 -0
  229. package/themes/ink-wash.css +459 -0
  230. package/themes/kawaii.css +459 -0
  231. package/themes/kflow.css +310 -0
  232. package/themes/kiosk.css +449 -0
  233. package/themes/linear-clean.css +463 -0
  234. package/themes/luxury.css +451 -0
  235. package/themes/mac-classic.css +455 -0
  236. package/themes/material.css +463 -0
  237. package/themes/memphis.css +453 -0
  238. package/themes/mid-century.css +455 -0
  239. package/themes/minimalist.css +449 -0
  240. package/themes/mudcloth.css +459 -0
  241. package/themes/nata.css +310 -0
  242. package/themes/neon.css +453 -0
  243. package/themes/neumorphic.css +451 -0
  244. package/themes/newsprint.css +455 -0
  245. package/themes/notion-editorial.css +463 -0
  246. package/themes/orb.css +465 -0
  247. package/themes/pixel.css +449 -0
  248. package/themes/prism.css +309 -0
  249. package/themes/rawi.css +310 -0
  250. package/themes/retro.css +452 -0
  251. package/themes/risograph.css +463 -0
  252. package/themes/scandi.css +469 -0
  253. package/themes/sketch.css +455 -0
  254. package/themes/solarpunk.css +469 -0
  255. package/themes/steampunk.css +451 -0
  256. package/themes/swiss.css +455 -0
  257. package/themes/terminal.css +466 -0
  258. package/themes/trait-wars.css +487 -0
  259. package/themes/ukiyo-e.css +459 -0
  260. package/themes/vaporwave.css +455 -0
  261. package/themes/victorian.css +453 -0
  262. package/themes/wabi-sabi.css +459 -0
  263. package/themes/win95.css +455 -0
  264. package/themes/wireframe.css +439 -0
  265. package/themes/zine.css +455 -0
  266. package/README.md +0 -3
@@ -0,0 +1,451 @@
1
+ /**
2
+ * _base.css — Shared Typography + Density base
3
+ *
4
+ * Lifted from `atelier.css` so the editorial type rhythm and generous
5
+ * 10pt spacing scale are the default across every theme that doesn't
6
+ * deliberately opt out. Themes can still override any token by declaring
7
+ * it in their own [data-theme="..."] block — that selector is more
8
+ * specific than :root and wins via the CSS cascade.
9
+ *
10
+ * Personality themes that DO opt out today (keep their own typography
11
+ * and/or density): terminal (monospace), wireframe (chunky), neon (tight
12
+ * glow), kiosk (oversized), gazette (serif), minimalist (compact),
13
+ * trait-wars (gamer). All others inherit from this file.
14
+ *
15
+ * Loaded FIRST in themes/index.css so individual theme blocks override
16
+ * cleanly. The contract reference is `themes/_contract.md`.
17
+ */
18
+ :root {
19
+ /* ----------------------------------------------------------------
20
+ * Typography
21
+ * ----------------------------------------------------------------
22
+ * Inter for body + UI, JetBrains Mono for code, optional display
23
+ * family for hero numerics. Mid-weight 500 reads as confident but
24
+ * not heavy; tight letter-spacing + 1.625 line-height give the
25
+ * editorial feel.
26
+ */
27
+ --font-family:
28
+ "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
29
+ --font-family-display:
30
+ "Söhne", "Inter Display", -apple-system, BlinkMacSystemFont, sans-serif;
31
+ --font-family-body:
32
+ "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
33
+ --font-family-mono:
34
+ "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
35
+
36
+ --font-weight-normal: 400;
37
+ --font-weight-medium: 500;
38
+ --font-weight-bold: 700;
39
+ --letter-spacing: -0.02em;
40
+ --line-height: 1.625;
41
+
42
+ /* Type scale */
43
+ --text-xs: 12px;
44
+ --leading-xs: 18px;
45
+ --text-sm: 14px;
46
+ --leading-sm: 22px;
47
+ --text-base: 16px;
48
+ --leading-base: 26px;
49
+ --text-lg: 20px;
50
+ --leading-lg: 30px;
51
+ --text-xl: 24px;
52
+ --leading-xl: 32px;
53
+ --text-2xl: 32px;
54
+ --leading-2xl: 38px;
55
+ --text-3xl: 40px;
56
+ --leading-3xl: 44px;
57
+ --text-4xl: 52px;
58
+ --leading-4xl: 56px;
59
+ --text-display-1: 64px;
60
+ --leading-display-1: 68px;
61
+ --text-display-2: 80px;
62
+ --leading-display-2: 84px;
63
+
64
+ /* Intent mapping — what component variants resolve to. */
65
+ --intent-heading-major-size: var(--text-3xl);
66
+ --intent-heading-major-weight: var(--font-weight-bold);
67
+ --intent-heading-major-leading: var(--leading-3xl);
68
+ --intent-heading-minor-size: var(--text-xl);
69
+ --intent-heading-minor-weight: var(--font-weight-bold);
70
+ --intent-heading-minor-leading: var(--leading-xl);
71
+ --intent-body-emphasis-size: var(--text-base);
72
+ --intent-body-emphasis-weight: var(--font-weight-medium);
73
+ --intent-body-emphasis-leading: var(--leading-base);
74
+ --intent-body-default-size: var(--text-base);
75
+ --intent-body-default-weight: var(--font-weight-normal);
76
+ --intent-body-default-leading: var(--leading-base);
77
+ --intent-body-quiet-size: var(--text-sm);
78
+ --intent-body-quiet-weight: var(--font-weight-normal);
79
+ --intent-body-quiet-leading: var(--leading-sm);
80
+ --intent-caption-size: var(--text-xs);
81
+ --intent-caption-weight: var(--font-weight-medium);
82
+ --intent-caption-leading: var(--leading-xs);
83
+ --intent-numeric-size: var(--text-4xl);
84
+ --intent-numeric-weight: var(--font-weight-bold);
85
+ --intent-numeric-leading: var(--leading-4xl);
86
+ --intent-numeric-family: var(--font-family-display);
87
+
88
+ /* ----------------------------------------------------------------
89
+ * Density — generous 10pt rhythm
90
+ * ----------------------------------------------------------------
91
+ * Slightly larger than Tailwind defaults so cards / dialogs / rows
92
+ * read as airy without feeling sparse. Per-element heights tuned to
93
+ * comfortable click targets (44px md is also the iOS HIG minimum).
94
+ */
95
+ --space-0: 0px;
96
+ --space-1: 4px;
97
+ --space-2: 6px;
98
+ --space-3: 10px;
99
+ --space-4: 14px;
100
+ --space-5: 20px;
101
+ --space-6: 28px;
102
+ --space-7: 36px;
103
+ --space-8: 44px;
104
+ --space-9: 52px;
105
+ --space-10: 60px;
106
+ --space-11: 68px;
107
+ --space-12: 80px;
108
+
109
+ --button-height-sm: 36px;
110
+ --button-height-md: 44px;
111
+ --button-height-lg: 56px;
112
+ --input-height-sm: 36px;
113
+ --input-height-md: 44px;
114
+ --input-height-lg: 56px;
115
+ --row-height-compact: 48px;
116
+ --row-height-normal: 64px;
117
+ --row-height-spacious: 80px;
118
+
119
+ --card-padding-sm: 20px;
120
+ --card-padding-md: 28px;
121
+ --card-padding-lg: 40px;
122
+ --dialog-padding: 40px;
123
+ --section-gap: 64px;
124
+
125
+ /* ----------------------------------------------------------------
126
+ * Motion — duration & easing axis
127
+ * ----------------------------------------------------------------
128
+ * Base values for the motion axis. Per-theme blocks override these to
129
+ * restyle timing without touching keyframes. The legacy --transition-*
130
+ * aliases are kept as fallbacks for themes that haven't migrated.
131
+ * ---------------------------------------------------------------- */
132
+ --duration-instant: 0ms;
133
+ --duration-fast: var(--transition-fast, 150ms);
134
+ --duration-normal: var(--transition-normal, 250ms);
135
+ --duration-slow: var(--transition-slow, 400ms);
136
+ --duration-dramatic: 600ms;
137
+ --easing-linear: linear;
138
+ --easing-standard: var(--transition-timing, cubic-bezier(0.4, 0, 0.2, 1));
139
+ --easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
140
+ --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
141
+ /* Master on/off. Set `off` to collapse EVERY motion to instant without
142
+ * relying on prefers-reduced-motion (programmatic opt-out for themes). */
143
+ --motion-enable: on;
144
+
145
+ /* ----------------------------------------------------------------
146
+ * Motion — keyframe endpoints
147
+ * ----------------------------------------------------------------
148
+ * The "shape" of every built-in transition. Duration/easing come from
149
+ * --duration-* / --easing-*. Override any of these in a theme block to
150
+ * restyle the motion — e.g. a minimal theme sets
151
+ * --motion-modal-enter-from-transform: none for a pure fade. Each surface
152
+ * has enter + exit endpoints so <Presence> can animate both directions.
153
+ * ---------------------------------------------------------------- */
154
+ --motion-overlay-from-opacity: 0;
155
+ --motion-overlay-enter-from-opacity: var(--motion-overlay-from-opacity);
156
+ --motion-overlay-exit-to-opacity: var(--motion-overlay-from-opacity);
157
+
158
+ --motion-modal-enter-from-opacity: 0;
159
+ --motion-modal-enter-from-transform: scale(0.96) translateY(8px);
160
+ --motion-modal-enter-to-opacity: 1;
161
+ --motion-modal-enter-to-transform: translateZ(0);
162
+ --motion-modal-exit-from-opacity: 1;
163
+ --motion-modal-exit-from-transform: translateZ(0);
164
+ --motion-modal-exit-to-opacity: 0;
165
+ --motion-modal-exit-to-transform: scale(0.92) translateY(16px);
166
+
167
+ --motion-slide-up-from-opacity: 0;
168
+ --motion-slide-up-from-transform: translateY(16px);
169
+
170
+ /* Drawer / SidePanel — horizontal slide. transform sign is flipped per
171
+ * side by the component via a CSS var override (--motion-drawer-sign). */
172
+ --motion-drawer-sign: 1;
173
+ --motion-drawer-enter-from-opacity: 0;
174
+ --motion-drawer-enter-from-transform: translateX(calc(100% * var(--motion-drawer-sign)));
175
+ --motion-drawer-enter-to-opacity: 1;
176
+ --motion-drawer-enter-to-transform: translateZ(0);
177
+ --motion-drawer-exit-from-opacity: 1;
178
+ --motion-drawer-exit-from-transform: translateZ(0);
179
+ --motion-drawer-exit-to-opacity: 0;
180
+ --motion-drawer-exit-to-transform: translateX(calc(100% * var(--motion-drawer-sign)));
181
+
182
+ /* Popover — small scale + fade from the trigger origin. */
183
+ --motion-popover-enter-from-opacity: 0;
184
+ --motion-popover-enter-from-transform: scale(0.95);
185
+ --motion-popover-enter-to-opacity: 1;
186
+ --motion-popover-enter-to-transform: scale(1);
187
+ --motion-popover-exit-from-opacity: 1;
188
+ --motion-popover-exit-from-transform: scale(1);
189
+ --motion-popover-exit-to-opacity: 0;
190
+ --motion-popover-exit-to-transform: scale(0.95);
191
+
192
+ /* Toast — slide up + fade (bottom-origin notification). */
193
+ --motion-toast-enter-from-opacity: 0;
194
+ --motion-toast-enter-from-transform: translateY(16px);
195
+ --motion-toast-enter-to-opacity: 1;
196
+ --motion-toast-enter-to-transform: translateZ(0);
197
+ --motion-toast-exit-from-opacity: 1;
198
+ --motion-toast-exit-from-transform: translateZ(0);
199
+ --motion-toast-exit-to-opacity: 0;
200
+ --motion-toast-exit-to-transform: translateY(16px);
201
+
202
+ /* Generic fade — default for arbitrary component enter/leave (<Presence>). */
203
+ --motion-fade-enter-from-opacity: 0;
204
+ --motion-fade-enter-to-opacity: 1;
205
+ --motion-fade-exit-from-opacity: 1;
206
+ --motion-fade-exit-to-opacity: 0;
207
+
208
+ /* Page / route transition — the routed subtree animates on navigation. */
209
+ --motion-page-enter-from-opacity: 0;
210
+ --motion-page-enter-from-transform: translateY(8px);
211
+ --motion-page-enter-to-opacity: 1;
212
+ --motion-page-enter-to-transform: translateZ(0);
213
+ --motion-page-exit-from-opacity: 1;
214
+ --motion-page-exit-from-transform: translateZ(0);
215
+ --motion-page-exit-to-opacity: 0;
216
+ --motion-page-exit-to-transform: translateY(-8px);
217
+
218
+ /* ----------------------------------------------------------------
219
+ * Element entry — how a rendered element animates in when it mounts.
220
+ * --motion-enter-default is the keyframe every slot's content plays when
221
+ * it changes (`none` = off); a render-ui node's own `enter` overrides it.
222
+ * The shape tokens restyle what each named entry looks like; timing is
223
+ * the `enter` intent (--duration-normal / --easing-emphasized).
224
+ * ---------------------------------------------------------------- */
225
+ --motion-enter-default: almadar-enter-fade;
226
+ /* A busy control shows its spinner only once its action outlasts this
227
+ * (under it the action reads as instant — no flash on fast actions). */
228
+ --motion-busy-delay: 300ms;
229
+ /* An empty slot awaiting its server render shows the compiler-predicted
230
+ * skeleton (`block`) or nothing (`none`), fading in after the busy delay. */
231
+ --awaiting-skeleton-display: none;
232
+ --motion-enter-stagger: 40ms;
233
+ --motion-enter-rise-from-transform: translateY(12px);
234
+ --motion-enter-scale-from-transform: scale(0.96);
235
+ --motion-enter-slide-sign: 1;
236
+ --motion-enter-slide-from-transform: translateX(calc(16px * var(--motion-enter-slide-sign)));
237
+
238
+ /* ----------------------------------------------------------------
239
+ * Skeleton shimmer — the loading-placeholder sweep. A theme may set
240
+ * --skeleton-base / --skeleton-highlight to restyle the tone; unset, the
241
+ * shimmer paints the active theme's --color-muted / --color-surface
242
+ * (resolved at `.almadar-shimmer`, not here — a :root alias would freeze
243
+ * the root theme's colors for every [data-theme] subtree).
244
+ * ---------------------------------------------------------------- */
245
+ --duration-shimmer: 1.5s;
246
+ }
247
+
248
+ [dir="rtl"] {
249
+ --motion-enter-slide-sign: -1;
250
+ }
251
+
252
+ @keyframes almadar-enter-fade {
253
+ from { opacity: 0; }
254
+ }
255
+ @keyframes almadar-enter-rise {
256
+ from { opacity: 0; transform: var(--motion-enter-rise-from-transform); }
257
+ }
258
+ @keyframes almadar-enter-scale {
259
+ from { opacity: 0; transform: var(--motion-enter-scale-from-transform); }
260
+ }
261
+ @keyframes almadar-enter-slide {
262
+ from { opacity: 0; transform: var(--motion-enter-slide-from-transform); }
263
+ }
264
+
265
+ /* Busy control: the label gives way to the spinner only after --motion-busy-delay. */
266
+ @keyframes almadar-busy-hide {
267
+ to { visibility: hidden; }
268
+ }
269
+ @keyframes almadar-busy-show {
270
+ from { opacity: 0; }
271
+ to { opacity: 1; }
272
+ }
273
+ .almadar-busy-content {
274
+ animation: almadar-busy-hide 0s linear var(--motion-busy-delay, 300ms) forwards;
275
+ }
276
+ .almadar-busy-indicator {
277
+ opacity: 0;
278
+ animation: almadar-busy-show var(--duration-fast, 150ms) var(--easing-standard, ease) var(--motion-busy-delay, 300ms) forwards;
279
+ }
280
+
281
+ /* A row whose own action is in flight: dims after --motion-busy-delay, never re-clickable. */
282
+ @keyframes almadar-row-pending {
283
+ to { opacity: 0.55; }
284
+ }
285
+ [data-row-pending="true"] {
286
+ pointer-events: none;
287
+ animation: almadar-row-pending var(--duration-fast, 150ms) var(--easing-standard, ease) var(--motion-busy-delay, 300ms) forwards;
288
+ }
289
+
290
+ /* Awaiting-server skeleton: theme-switched, appears only once the round trip outlasts --motion-busy-delay. */
291
+ .almadar-awaiting-skeleton {
292
+ display: var(--awaiting-skeleton-display, none);
293
+ opacity: 0;
294
+ animation: almadar-busy-show var(--duration-fast, 150ms) var(--easing-standard, ease) var(--motion-busy-delay, 300ms) forwards;
295
+ }
296
+
297
+ /* Slot content: plays the theme's default entry (restarted when the content changes). */
298
+ .almadar-enter-slot {
299
+ animation-name: var(--motion-enter-default, none);
300
+ }
301
+ .almadar-enter-slot,
302
+ .almadar-enter-fade,
303
+ .almadar-enter-rise,
304
+ .almadar-enter-scale,
305
+ .almadar-enter-slide {
306
+ animation-duration: var(--duration-normal, 250ms);
307
+ animation-timing-function: var(--easing-emphasized, cubic-bezier(0.2, 0, 0, 1));
308
+ animation-fill-mode: both;
309
+ animation-delay: calc(var(--enter-index, 0) * var(--motion-enter-stagger, 40ms));
310
+ }
311
+ .almadar-enter-fade { animation-name: almadar-enter-fade; }
312
+ .almadar-enter-rise { animation-name: almadar-enter-rise; }
313
+ .almadar-enter-scale { animation-name: almadar-enter-scale; }
314
+ .almadar-enter-slide { animation-name: almadar-enter-slide; }
315
+ .almadar-enter-delay-1 { --enter-index: 1; }
316
+ .almadar-enter-delay-2 { --enter-index: 2; }
317
+ .almadar-enter-delay-3 { --enter-index: 3; }
318
+ .almadar-enter-delay-4 { --enter-index: 4; }
319
+ .almadar-enter-delay-5 { --enter-index: 5; }
320
+ .almadar-enter-delay-6 { --enter-index: 6; }
321
+ .almadar-enter-delay-7 { --enter-index: 7; }
322
+ .almadar-enter-delay-8 { --enter-index: 8; }
323
+
324
+ /* SVG atom motion (`lib/svgMotion.ts`). One dash period of the `8 6` dash per loop. */
325
+ @keyframes almadar-svg-flow-dash {
326
+ from { stroke-dashoffset: 14; }
327
+ to { stroke-dashoffset: 0; }
328
+ }
329
+ .almadar-svg-flow-dash {
330
+ animation: almadar-svg-flow-dash 1s linear infinite;
331
+ }
332
+ @keyframes almadar-svg-pulse-ring {
333
+ from { transform: scale(0.6); opacity: 0.3; }
334
+ to { transform: scale(1); opacity: 0; }
335
+ }
336
+ .almadar-svg-pulse-ring {
337
+ transform-box: fill-box;
338
+ transform-origin: center;
339
+ animation: almadar-svg-pulse-ring 2s ease-out infinite;
340
+ }
341
+ @keyframes almadar-svg-pulse-expand {
342
+ from { transform: scale(0.3); opacity: 0.4; }
343
+ to { transform: scale(1); opacity: 0; }
344
+ }
345
+ .almadar-svg-pulse-expand {
346
+ transform-box: fill-box;
347
+ transform-origin: center;
348
+ animation: almadar-svg-pulse-expand 2s ease-out infinite;
349
+ }
350
+
351
+ /* The shimmer gradient background. Pair with the `animate-shimmer` utility
352
+ * (defined in tailwind-preset) which sweeps background-position. */
353
+ .almadar-shimmer {
354
+ background-image: linear-gradient(
355
+ 90deg,
356
+ var(--skeleton-base, var(--color-muted)) 0%,
357
+ var(--skeleton-highlight, var(--color-surface)) 50%,
358
+ var(--skeleton-base, var(--color-muted)) 100%
359
+ );
360
+ background-size: 200% 100%;
361
+ background-repeat: no-repeat;
362
+ }
363
+
364
+ /* ----------------------------------------------------------------
365
+ * Reduced motion — the canonical accessibility kill-switch.
366
+ * Collapses EVERY animation/transition to ~instant regardless of which
367
+ * surface or theme is active. Themes/apps must NOT re-raise durations
368
+ * under this media query. (Supersedes per-app overrides like kflow.css.)
369
+ * ---------------------------------------------------------------- */
370
+ @media (prefers-reduced-motion: reduce) {
371
+ :root {
372
+ --motion-enable: off;
373
+ }
374
+ *, *::before, *::after {
375
+ animation-duration: 0.01ms !important;
376
+ animation-iteration-count: 1 !important;
377
+ transition-duration: 0.01ms !important;
378
+ scroll-behavior: auto !important;
379
+ }
380
+ }
381
+
382
+ /* The `dock` slot (a right panel that pushes the page) sets this inset while open. */
383
+ body {
384
+ padding-inline-end: var(--almadar-dock-inset, 0px);
385
+ }
386
+
387
+ /* A `dock` inside a contained preview pushes that preview, not the page. */
388
+ .ui-slot-renderer {
389
+ padding-inline-end: var(--almadar-dock-contained-inset, 0px);
390
+ }
391
+
392
+ /* --------------------------------------------------------------------
393
+ * Drawing surfaces — canvas, chart, diagram, game board, 3D scene.
394
+ * Defaults derived from each theme's own tokens, so a theme that sets no
395
+ * `diagram`/`scene` axis still draws in its own palette, border weight,
396
+ * faces and corners. Declared on every theme scope (not only :root): a
397
+ * var() alias resolves where it is declared, so a :root-only default would
398
+ * freeze the root theme's colors inside a [data-theme] subtree.
399
+ * -------------------------------------------------------------------- */
400
+ :root,
401
+ [data-theme],
402
+ [data-orbital-theme] {
403
+ --surface-diagram: var(--color-card);
404
+
405
+ --color-diagram-ink: var(--color-foreground);
406
+ --color-diagram-label: var(--color-muted-foreground);
407
+ --color-diagram-guide: var(--color-muted-foreground);
408
+ --color-diagram-axis: var(--color-foreground);
409
+ --color-diagram-grid: var(--color-border);
410
+ --color-diagram-highlight: var(--color-primary);
411
+ --color-diagram-fill: var(--color-muted);
412
+
413
+ /* A categorical palette carries no status meaning: the theme's primary
414
+ * turned around the hue wheel at its own lightness and chroma. */
415
+ --color-series-1: var(--color-primary);
416
+ --color-series-2: oklch(from var(--color-primary) clamp(0.45, l, 0.72) max(c, 0.12) calc(h + 45));
417
+ --color-series-3: oklch(from var(--color-primary) clamp(0.45, l, 0.72) max(c, 0.12) calc(h + 90));
418
+ --color-series-4: oklch(from var(--color-primary) clamp(0.45, l, 0.72) max(c, 0.12) calc(h + 135));
419
+ --color-series-5: oklch(from var(--color-primary) clamp(0.45, l, 0.72) max(c, 0.12) calc(h + 180));
420
+ --color-series-6: oklch(from var(--color-primary) clamp(0.45, l, 0.72) max(c, 0.12) calc(h + 225));
421
+ --color-series-7: oklch(from var(--color-primary) clamp(0.45, l, 0.72) max(c, 0.12) calc(h + 270));
422
+ --color-series-8: oklch(from var(--color-primary) clamp(0.45, l, 0.72) max(c, 0.12) calc(h + 315));
423
+
424
+ --diagram-stroke-thin: var(--border-hairline, var(--border-width-thin, 1px));
425
+ --diagram-stroke-normal: calc(var(--border-standard, var(--border-width, 1px)) * 1.5);
426
+ --diagram-stroke-bold: calc(var(--border-heavy, var(--border-width-thick, 2px)) * 1.5);
427
+ --diagram-line-cap: round;
428
+ --diagram-line-join: round;
429
+ --diagram-dash: 6 4;
430
+ --diagram-dot: 1 4;
431
+ --diagram-fill-style: tint;
432
+ --diagram-fill-opacity: 0.18;
433
+ --diagram-roughness: 0;
434
+ --diagram-glow: 0;
435
+ --diagram-shadow: none;
436
+ --diagram-marker: triangle;
437
+ --diagram-label-font: body;
438
+ --diagram-label-size: sm;
439
+ --diagram-label-weight: var(--font-weight-medium, 500);
440
+ --diagram-label-case: none;
441
+ --diagram-corner: var(--radius-sm, 4px);
442
+
443
+ --material-roughness: 0.6;
444
+ --material-metalness: 0;
445
+ --material-flat: 0;
446
+ --material-outline: 0;
447
+ --light-ambient: 0.55;
448
+ --light-key: 1;
449
+ --light-key-color: #ffffff;
450
+ --scene-fog: 0;
451
+ }