@openpalm/ui 0.11.0-rc.2

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 (329) hide show
  1. package/README.md +129 -0
  2. package/build/.openpalm-ui-version +1 -0
  3. package/build/client/_app/immutable/assets/0.BK7X4bPu.css +1 -0
  4. package/build/client/_app/immutable/assets/0.BK7X4bPu.css.br +0 -0
  5. package/build/client/_app/immutable/assets/0.BK7X4bPu.css.gz +0 -0
  6. package/build/client/_app/immutable/assets/4.D9MwgTDo.css +1 -0
  7. package/build/client/_app/immutable/assets/4.D9MwgTDo.css.br +0 -0
  8. package/build/client/_app/immutable/assets/4.D9MwgTDo.css.gz +0 -0
  9. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css +1 -0
  10. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css.br +0 -0
  11. package/build/client/_app/immutable/assets/5.Cj0Mk9Gn.css.gz +0 -0
  12. package/build/client/_app/immutable/assets/6.DJenXolA.css +1 -0
  13. package/build/client/_app/immutable/assets/6.DJenXolA.css.br +0 -0
  14. package/build/client/_app/immutable/assets/6.DJenXolA.css.gz +0 -0
  15. package/build/client/_app/immutable/assets/7.BHUsSUvX.css +1 -0
  16. package/build/client/_app/immutable/assets/7.BHUsSUvX.css.br +0 -0
  17. package/build/client/_app/immutable/assets/7.BHUsSUvX.css.gz +0 -0
  18. package/build/client/_app/immutable/assets/8.DjrHy5wu.css +1 -0
  19. package/build/client/_app/immutable/assets/8.DjrHy5wu.css.br +0 -0
  20. package/build/client/_app/immutable/assets/8.DjrHy5wu.css.gz +0 -0
  21. package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css +1 -0
  22. package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css.br +0 -0
  23. package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css.gz +0 -0
  24. package/build/client/_app/immutable/assets/VoiceProfileSelector.Dp7tWdKe.css +1 -0
  25. package/build/client/_app/immutable/assets/VoiceProfileSelector.Dp7tWdKe.css.br +0 -0
  26. package/build/client/_app/immutable/assets/VoiceProfileSelector.Dp7tWdKe.css.gz +0 -0
  27. package/build/client/_app/immutable/chunks/BuFlayix.js +1 -0
  28. package/build/client/_app/immutable/chunks/BuFlayix.js.br +0 -0
  29. package/build/client/_app/immutable/chunks/BuFlayix.js.gz +0 -0
  30. package/build/client/_app/immutable/chunks/BwTF6U35.js +3 -0
  31. package/build/client/_app/immutable/chunks/BwTF6U35.js.br +0 -0
  32. package/build/client/_app/immutable/chunks/BwTF6U35.js.gz +0 -0
  33. package/build/client/_app/immutable/chunks/C8qMxft1.js +1 -0
  34. package/build/client/_app/immutable/chunks/C8qMxft1.js.br +0 -0
  35. package/build/client/_app/immutable/chunks/C8qMxft1.js.gz +0 -0
  36. package/build/client/_app/immutable/chunks/Cb_i8bV9.js +1 -0
  37. package/build/client/_app/immutable/chunks/Cb_i8bV9.js.br +0 -0
  38. package/build/client/_app/immutable/chunks/Cb_i8bV9.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/CzXGhlNF.js +1 -0
  40. package/build/client/_app/immutable/chunks/CzXGhlNF.js.br +0 -0
  41. package/build/client/_app/immutable/chunks/CzXGhlNF.js.gz +0 -0
  42. package/build/client/_app/immutable/chunks/DYskO3Sk.js +5 -0
  43. package/build/client/_app/immutable/chunks/DYskO3Sk.js.br +0 -0
  44. package/build/client/_app/immutable/chunks/DYskO3Sk.js.gz +0 -0
  45. package/build/client/_app/immutable/chunks/ak2ISc8B.js +1 -0
  46. package/build/client/_app/immutable/chunks/ak2ISc8B.js.br +0 -0
  47. package/build/client/_app/immutable/chunks/ak2ISc8B.js.gz +0 -0
  48. package/build/client/_app/immutable/chunks/kNaey6uv.js +1 -0
  49. package/build/client/_app/immutable/chunks/kNaey6uv.js.br +0 -0
  50. package/build/client/_app/immutable/chunks/kNaey6uv.js.gz +0 -0
  51. package/build/client/_app/immutable/chunks/os2NZ37U.js +1 -0
  52. package/build/client/_app/immutable/chunks/os2NZ37U.js.br +1 -0
  53. package/build/client/_app/immutable/chunks/os2NZ37U.js.gz +0 -0
  54. package/build/client/_app/immutable/chunks/xihTtKlq.js +1 -0
  55. package/build/client/_app/immutable/chunks/xihTtKlq.js.br +1 -0
  56. package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
  57. package/build/client/_app/immutable/entry/app.C_eSlUyi.js +2 -0
  58. package/build/client/_app/immutable/entry/app.C_eSlUyi.js.br +0 -0
  59. package/build/client/_app/immutable/entry/app.C_eSlUyi.js.gz +0 -0
  60. package/build/client/_app/immutable/entry/start.BAta_Cih.js +1 -0
  61. package/build/client/_app/immutable/entry/start.BAta_Cih.js.br +0 -0
  62. package/build/client/_app/immutable/entry/start.BAta_Cih.js.gz +0 -0
  63. package/build/client/_app/immutable/nodes/0.Bi_of0So.js +1 -0
  64. package/build/client/_app/immutable/nodes/0.Bi_of0So.js.br +0 -0
  65. package/build/client/_app/immutable/nodes/0.Bi_of0So.js.gz +0 -0
  66. package/build/client/_app/immutable/nodes/1.qjZsjpWC.js +1 -0
  67. package/build/client/_app/immutable/nodes/1.qjZsjpWC.js.br +0 -0
  68. package/build/client/_app/immutable/nodes/1.qjZsjpWC.js.gz +0 -0
  69. package/build/client/_app/immutable/nodes/2.ojh8oE7F.js +1 -0
  70. package/build/client/_app/immutable/nodes/2.ojh8oE7F.js.br +0 -0
  71. package/build/client/_app/immutable/nodes/2.ojh8oE7F.js.gz +0 -0
  72. package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js +1 -0
  73. package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js.br +0 -0
  74. package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js.gz +0 -0
  75. package/build/client/_app/immutable/nodes/4.BYtA2xx-.js +19 -0
  76. package/build/client/_app/immutable/nodes/4.BYtA2xx-.js.br +0 -0
  77. package/build/client/_app/immutable/nodes/4.BYtA2xx-.js.gz +0 -0
  78. package/build/client/_app/immutable/nodes/5.ChSoAFFd.js +4 -0
  79. package/build/client/_app/immutable/nodes/5.ChSoAFFd.js.br +0 -0
  80. package/build/client/_app/immutable/nodes/5.ChSoAFFd.js.gz +0 -0
  81. package/build/client/_app/immutable/nodes/6.BRG0vYmH.js +1 -0
  82. package/build/client/_app/immutable/nodes/6.BRG0vYmH.js.br +0 -0
  83. package/build/client/_app/immutable/nodes/6.BRG0vYmH.js.gz +0 -0
  84. package/build/client/_app/immutable/nodes/7.BVvy1f_p.js +15 -0
  85. package/build/client/_app/immutable/nodes/7.BVvy1f_p.js.br +0 -0
  86. package/build/client/_app/immutable/nodes/7.BVvy1f_p.js.gz +0 -0
  87. package/build/client/_app/immutable/nodes/8.Cb4MWMah.js +2 -0
  88. package/build/client/_app/immutable/nodes/8.Cb4MWMah.js.br +0 -0
  89. package/build/client/_app/immutable/nodes/8.Cb4MWMah.js.gz +0 -0
  90. package/build/client/_app/version.json +1 -0
  91. package/build/client/_app/version.json.br +0 -0
  92. package/build/client/_app/version.json.gz +0 -0
  93. package/build/client/banner.png +0 -0
  94. package/build/client/fu-128.png +0 -0
  95. package/build/client/fu.png +0 -0
  96. package/build/client/logo-128.png +0 -0
  97. package/build/client/logo.png +0 -0
  98. package/build/client/setup/wizard.css +1639 -0
  99. package/build/client/setup/wizard.css.br +0 -0
  100. package/build/client/setup/wizard.css.gz +0 -0
  101. package/build/client/wizard-128.png +0 -0
  102. package/build/client/wizard.png +0 -0
  103. package/build/env.js +94 -0
  104. package/build/handler.js +1494 -0
  105. package/build/index.js +345 -0
  106. package/build/server/chunks/0-Dk6RRhi2.js +9 -0
  107. package/build/server/chunks/0-Dk6RRhi2.js.map +1 -0
  108. package/build/server/chunks/1-CWcY3PRs.js +9 -0
  109. package/build/server/chunks/1-CWcY3PRs.js.map +1 -0
  110. package/build/server/chunks/2-C2y4ydWU.js +9 -0
  111. package/build/server/chunks/2-C2y4ydWU.js.map +1 -0
  112. package/build/server/chunks/3-BgeGdVvT.js +23 -0
  113. package/build/server/chunks/3-BgeGdVvT.js.map +1 -0
  114. package/build/server/chunks/4-DeAt_mYc.js +9 -0
  115. package/build/server/chunks/4-DeAt_mYc.js.map +1 -0
  116. package/build/server/chunks/5-qTXiNPEM.js +9 -0
  117. package/build/server/chunks/5-qTXiNPEM.js.map +1 -0
  118. package/build/server/chunks/6-C444Mr69.js +9 -0
  119. package/build/server/chunks/6-C444Mr69.js.map +1 -0
  120. package/build/server/chunks/7-Dg_sVly5.js +9 -0
  121. package/build/server/chunks/7-Dg_sVly5.js.map +1 -0
  122. package/build/server/chunks/8-CF5kn4AY.js +9 -0
  123. package/build/server/chunks/8-CF5kn4AY.js.map +1 -0
  124. package/build/server/chunks/AuthGate-keg7G6rX.js +707 -0
  125. package/build/server/chunks/AuthGate-keg7G6rX.js.map +1 -0
  126. package/build/server/chunks/_helpers-B_lb4-jB.js +74 -0
  127. package/build/server/chunks/_helpers-B_lb4-jB.js.map +1 -0
  128. package/build/server/chunks/_layout.svelte-B93aaRP_.js +11 -0
  129. package/build/server/chunks/_layout.svelte-B93aaRP_.js.map +1 -0
  130. package/build/server/chunks/_layout.svelte-BNWepgTx.js +58 -0
  131. package/build/server/chunks/_layout.svelte-BNWepgTx.js.map +1 -0
  132. package/build/server/chunks/_page.svelte-BP2EdQl3.js +5 -0
  133. package/build/server/chunks/_page.svelte-BP2EdQl3.js.map +1 -0
  134. package/build/server/chunks/_page.svelte-BdYSYjmj.js +67 -0
  135. package/build/server/chunks/_page.svelte-BdYSYjmj.js.map +1 -0
  136. package/build/server/chunks/_page.svelte-BiKY57wg.js +533 -0
  137. package/build/server/chunks/_page.svelte-BiKY57wg.js.map +1 -0
  138. package/build/server/chunks/_page.svelte-CtX_8pMq.js +5528 -0
  139. package/build/server/chunks/_page.svelte-CtX_8pMq.js.map +1 -0
  140. package/build/server/chunks/_page.svelte-D0gMlmzQ.js +104 -0
  141. package/build/server/chunks/_page.svelte-D0gMlmzQ.js.map +1 -0
  142. package/build/server/chunks/_page.svelte-DwMiUmq6.js +107 -0
  143. package/build/server/chunks/_page.svelte-DwMiUmq6.js.map +1 -0
  144. package/build/server/chunks/_server.ts-0FuXkx70.js +56 -0
  145. package/build/server/chunks/_server.ts-0FuXkx70.js.map +1 -0
  146. package/build/server/chunks/_server.ts-33LuQvHu.js +19 -0
  147. package/build/server/chunks/_server.ts-33LuQvHu.js.map +1 -0
  148. package/build/server/chunks/_server.ts-5Q0J3F4-.js +55 -0
  149. package/build/server/chunks/_server.ts-5Q0J3F4-.js.map +1 -0
  150. package/build/server/chunks/_server.ts-AJk0xBLJ.js +46 -0
  151. package/build/server/chunks/_server.ts-AJk0xBLJ.js.map +1 -0
  152. package/build/server/chunks/_server.ts-AQe1PIYE.js +68 -0
  153. package/build/server/chunks/_server.ts-AQe1PIYE.js.map +1 -0
  154. package/build/server/chunks/_server.ts-B0N2Nj7L.js +44 -0
  155. package/build/server/chunks/_server.ts-B0N2Nj7L.js.map +1 -0
  156. package/build/server/chunks/_server.ts-BDBJ6fxs.js +67 -0
  157. package/build/server/chunks/_server.ts-BDBJ6fxs.js.map +1 -0
  158. package/build/server/chunks/_server.ts-BEeaI665.js +79 -0
  159. package/build/server/chunks/_server.ts-BEeaI665.js.map +1 -0
  160. package/build/server/chunks/_server.ts-BM4QuGQf.js +53 -0
  161. package/build/server/chunks/_server.ts-BM4QuGQf.js.map +1 -0
  162. package/build/server/chunks/_server.ts-BSIZMZVn.js +50 -0
  163. package/build/server/chunks/_server.ts-BSIZMZVn.js.map +1 -0
  164. package/build/server/chunks/_server.ts-BV-6Mum8.js +54 -0
  165. package/build/server/chunks/_server.ts-BV-6Mum8.js.map +1 -0
  166. package/build/server/chunks/_server.ts-BdnJF23z.js +44 -0
  167. package/build/server/chunks/_server.ts-BdnJF23z.js.map +1 -0
  168. package/build/server/chunks/_server.ts-Bfy4RFhe.js +41 -0
  169. package/build/server/chunks/_server.ts-Bfy4RFhe.js.map +1 -0
  170. package/build/server/chunks/_server.ts-Bhh33s6N.js +149 -0
  171. package/build/server/chunks/_server.ts-Bhh33s6N.js.map +1 -0
  172. package/build/server/chunks/_server.ts-BiSuK8jN.js +41 -0
  173. package/build/server/chunks/_server.ts-BiSuK8jN.js.map +1 -0
  174. package/build/server/chunks/_server.ts-BjiyoKWK.js +41 -0
  175. package/build/server/chunks/_server.ts-BjiyoKWK.js.map +1 -0
  176. package/build/server/chunks/_server.ts-BnEeEd9g.js +57 -0
  177. package/build/server/chunks/_server.ts-BnEeEd9g.js.map +1 -0
  178. package/build/server/chunks/_server.ts-Bq2dkWvj.js +33 -0
  179. package/build/server/chunks/_server.ts-Bq2dkWvj.js.map +1 -0
  180. package/build/server/chunks/_server.ts-Br16AqpO.js +82 -0
  181. package/build/server/chunks/_server.ts-Br16AqpO.js.map +1 -0
  182. package/build/server/chunks/_server.ts-BsZrddQT.js +200 -0
  183. package/build/server/chunks/_server.ts-BsZrddQT.js.map +1 -0
  184. package/build/server/chunks/_server.ts-Btbzy89u.js +65 -0
  185. package/build/server/chunks/_server.ts-Btbzy89u.js.map +1 -0
  186. package/build/server/chunks/_server.ts-BudQlGOx.js +70 -0
  187. package/build/server/chunks/_server.ts-BudQlGOx.js.map +1 -0
  188. package/build/server/chunks/_server.ts-BxPYakCb.js +59 -0
  189. package/build/server/chunks/_server.ts-BxPYakCb.js.map +1 -0
  190. package/build/server/chunks/_server.ts-ByyRcwFy.js +79 -0
  191. package/build/server/chunks/_server.ts-ByyRcwFy.js.map +1 -0
  192. package/build/server/chunks/_server.ts-C7rtn3mH.js +103 -0
  193. package/build/server/chunks/_server.ts-C7rtn3mH.js.map +1 -0
  194. package/build/server/chunks/_server.ts-C88qd-ju.js +46 -0
  195. package/build/server/chunks/_server.ts-C88qd-ju.js.map +1 -0
  196. package/build/server/chunks/_server.ts-CD6LeslU.js +55 -0
  197. package/build/server/chunks/_server.ts-CD6LeslU.js.map +1 -0
  198. package/build/server/chunks/_server.ts-CDlWxA5S.js +60 -0
  199. package/build/server/chunks/_server.ts-CDlWxA5S.js.map +1 -0
  200. package/build/server/chunks/_server.ts-CGqrfNlv.js +514 -0
  201. package/build/server/chunks/_server.ts-CGqrfNlv.js.map +1 -0
  202. package/build/server/chunks/_server.ts-CGwYZUuw.js +759 -0
  203. package/build/server/chunks/_server.ts-CGwYZUuw.js.map +1 -0
  204. package/build/server/chunks/_server.ts-CHVs0yya.js +54 -0
  205. package/build/server/chunks/_server.ts-CHVs0yya.js.map +1 -0
  206. package/build/server/chunks/_server.ts-CMEY6oQe.js +121 -0
  207. package/build/server/chunks/_server.ts-CMEY6oQe.js.map +1 -0
  208. package/build/server/chunks/_server.ts-CS73tiTY.js +63 -0
  209. package/build/server/chunks/_server.ts-CS73tiTY.js.map +1 -0
  210. package/build/server/chunks/_server.ts-CWwgmo8z.js +33 -0
  211. package/build/server/chunks/_server.ts-CWwgmo8z.js.map +1 -0
  212. package/build/server/chunks/_server.ts-CXzZeGlQ.js +55 -0
  213. package/build/server/chunks/_server.ts-CXzZeGlQ.js.map +1 -0
  214. package/build/server/chunks/_server.ts-C_kseo_y.js +72 -0
  215. package/build/server/chunks/_server.ts-C_kseo_y.js.map +1 -0
  216. package/build/server/chunks/_server.ts-Cbk-UThV.js +73 -0
  217. package/build/server/chunks/_server.ts-Cbk-UThV.js.map +1 -0
  218. package/build/server/chunks/_server.ts-CboRRTK1.js +139 -0
  219. package/build/server/chunks/_server.ts-CboRRTK1.js.map +1 -0
  220. package/build/server/chunks/_server.ts-CgD8-EFl.js +52 -0
  221. package/build/server/chunks/_server.ts-CgD8-EFl.js.map +1 -0
  222. package/build/server/chunks/_server.ts-Ci-q0BiD.js +79 -0
  223. package/build/server/chunks/_server.ts-Ci-q0BiD.js.map +1 -0
  224. package/build/server/chunks/_server.ts-Cn7ahHlk.js +44 -0
  225. package/build/server/chunks/_server.ts-Cn7ahHlk.js.map +1 -0
  226. package/build/server/chunks/_server.ts-Cy36-qGT.js +60 -0
  227. package/build/server/chunks/_server.ts-Cy36-qGT.js.map +1 -0
  228. package/build/server/chunks/_server.ts-CyFZ9OZQ.js +97 -0
  229. package/build/server/chunks/_server.ts-CyFZ9OZQ.js.map +1 -0
  230. package/build/server/chunks/_server.ts-D-UAqhor.js +33 -0
  231. package/build/server/chunks/_server.ts-D-UAqhor.js.map +1 -0
  232. package/build/server/chunks/_server.ts-D1cb1hmF.js +90 -0
  233. package/build/server/chunks/_server.ts-D1cb1hmF.js.map +1 -0
  234. package/build/server/chunks/_server.ts-D33gvU5B.js +65 -0
  235. package/build/server/chunks/_server.ts-D33gvU5B.js.map +1 -0
  236. package/build/server/chunks/_server.ts-DDwiNChJ.js +88 -0
  237. package/build/server/chunks/_server.ts-DDwiNChJ.js.map +1 -0
  238. package/build/server/chunks/_server.ts-DEnxvwcJ.js +46 -0
  239. package/build/server/chunks/_server.ts-DEnxvwcJ.js.map +1 -0
  240. package/build/server/chunks/_server.ts-DHXmcRrP.js +41 -0
  241. package/build/server/chunks/_server.ts-DHXmcRrP.js.map +1 -0
  242. package/build/server/chunks/_server.ts-DQxY-pHZ.js +64 -0
  243. package/build/server/chunks/_server.ts-DQxY-pHZ.js.map +1 -0
  244. package/build/server/chunks/_server.ts-DXNJ2LJu.js +83 -0
  245. package/build/server/chunks/_server.ts-DXNJ2LJu.js.map +1 -0
  246. package/build/server/chunks/_server.ts-Dbly1Fe-.js +96 -0
  247. package/build/server/chunks/_server.ts-Dbly1Fe-.js.map +1 -0
  248. package/build/server/chunks/_server.ts-DffjWMNC.js +53 -0
  249. package/build/server/chunks/_server.ts-DffjWMNC.js.map +1 -0
  250. package/build/server/chunks/_server.ts-Di-8UJYw.js +40 -0
  251. package/build/server/chunks/_server.ts-Di-8UJYw.js.map +1 -0
  252. package/build/server/chunks/_server.ts-DsEzCr9k.js +109 -0
  253. package/build/server/chunks/_server.ts-DsEzCr9k.js.map +1 -0
  254. package/build/server/chunks/_server.ts-DwXd92Ow.js +63 -0
  255. package/build/server/chunks/_server.ts-DwXd92Ow.js.map +1 -0
  256. package/build/server/chunks/_server.ts-DwjjO7L5.js +41 -0
  257. package/build/server/chunks/_server.ts-DwjjO7L5.js.map +1 -0
  258. package/build/server/chunks/_server.ts-DyEbcQS0.js +62 -0
  259. package/build/server/chunks/_server.ts-DyEbcQS0.js.map +1 -0
  260. package/build/server/chunks/_server.ts-HxcM6xQA.js +70 -0
  261. package/build/server/chunks/_server.ts-HxcM6xQA.js.map +1 -0
  262. package/build/server/chunks/_server.ts-JItoNB1Z.js +57 -0
  263. package/build/server/chunks/_server.ts-JItoNB1Z.js.map +1 -0
  264. package/build/server/chunks/_server.ts-KpT_vKKo.js +77 -0
  265. package/build/server/chunks/_server.ts-KpT_vKKo.js.map +1 -0
  266. package/build/server/chunks/_server.ts-WbY7XmtT.js +157 -0
  267. package/build/server/chunks/_server.ts-WbY7XmtT.js.map +1 -0
  268. package/build/server/chunks/_server.ts-Yy0BWsSd.js +70 -0
  269. package/build/server/chunks/_server.ts-Yy0BWsSd.js.map +1 -0
  270. package/build/server/chunks/_server.ts-b9yNYKW6.js +49 -0
  271. package/build/server/chunks/_server.ts-b9yNYKW6.js.map +1 -0
  272. package/build/server/chunks/_server.ts-bAJXjaCc.js +42 -0
  273. package/build/server/chunks/_server.ts-bAJXjaCc.js.map +1 -0
  274. package/build/server/chunks/_server.ts-cwRl-tZ-.js +40 -0
  275. package/build/server/chunks/_server.ts-cwRl-tZ-.js.map +1 -0
  276. package/build/server/chunks/_server.ts-hMTx0DC3.js +159 -0
  277. package/build/server/chunks/_server.ts-hMTx0DC3.js.map +1 -0
  278. package/build/server/chunks/_server.ts-l_HoZ2_I.js +163 -0
  279. package/build/server/chunks/_server.ts-l_HoZ2_I.js.map +1 -0
  280. package/build/server/chunks/_server.ts-uLRX2uy0.js +107 -0
  281. package/build/server/chunks/_server.ts-uLRX2uy0.js.map +1 -0
  282. package/build/server/chunks/_server.ts-uWfb47S6.js +204 -0
  283. package/build/server/chunks/_server.ts-uWfb47S6.js.map +1 -0
  284. package/build/server/chunks/addon-helpers-Bnj3aKJ2.js +49 -0
  285. package/build/server/chunks/addon-helpers-Bnj3aKJ2.js.map +1 -0
  286. package/build/server/chunks/chunk-CLZ62Ad-.js +18 -0
  287. package/build/server/chunks/chunk-CLZ62Ad-.js.map +1 -0
  288. package/build/server/chunks/coercion-TNFJisCC.js +34 -0
  289. package/build/server/chunks/coercion-TNFJisCC.js.map +1 -0
  290. package/build/server/chunks/config-CEYPfvQh.js +121 -0
  291. package/build/server/chunks/config-CEYPfvQh.js.map +1 -0
  292. package/build/server/chunks/dev-DjANv7AF.js +4389 -0
  293. package/build/server/chunks/dev-DjANv7AF.js.map +1 -0
  294. package/build/server/chunks/docker-sGFTjRfy.js +20 -0
  295. package/build/server/chunks/docker-sGFTjRfy.js.map +1 -0
  296. package/build/server/chunks/endpoints-L7Wjvq44.js +340 -0
  297. package/build/server/chunks/endpoints-L7Wjvq44.js.map +1 -0
  298. package/build/server/chunks/environment-BnT49Gi3.js +36 -0
  299. package/build/server/chunks/environment-BnT49Gi3.js.map +1 -0
  300. package/build/server/chunks/error.svelte-PJnhZZCy.js +16 -0
  301. package/build/server/chunks/error.svelte-PJnhZZCy.js.map +1 -0
  302. package/build/server/chunks/exports-D1quPX8S.js +124 -0
  303. package/build/server/chunks/exports-D1quPX8S.js.map +1 -0
  304. package/build/server/chunks/helpers-5jd3ccud.js +226 -0
  305. package/build/server/chunks/helpers-5jd3ccud.js.map +1 -0
  306. package/build/server/chunks/hooks.server-Al9-eO5K.js +82 -0
  307. package/build/server/chunks/hooks.server-Al9-eO5K.js.map +1 -0
  308. package/build/server/chunks/http-D5xo_m60.js +31 -0
  309. package/build/server/chunks/http-D5xo_m60.js.map +1 -0
  310. package/build/server/chunks/internal-CJBOAkaQ.js +1544 -0
  311. package/build/server/chunks/internal-CJBOAkaQ.js.map +1 -0
  312. package/build/server/chunks/serial-queue-D9FEpYVv.js +22 -0
  313. package/build/server/chunks/serial-queue-D9FEpYVv.js.map +1 -0
  314. package/build/server/chunks/setup-deploy-UKTSVAC0.js +529 -0
  315. package/build/server/chunks/setup-deploy-UKTSVAC0.js.map +1 -0
  316. package/build/server/chunks/src-FpMyngcw.js +14064 -0
  317. package/build/server/chunks/src-FpMyngcw.js.map +1 -0
  318. package/build/server/chunks/state-BI-lJPhE.js +203 -0
  319. package/build/server/chunks/state-BI-lJPhE.js.map +1 -0
  320. package/build/server/chunks/utils-BSRjJDrZ.js +150 -0
  321. package/build/server/chunks/utils-BSRjJDrZ.js.map +1 -0
  322. package/build/server/chunks/voice-state.svelte-CQp8u0bn.js +437 -0
  323. package/build/server/chunks/voice-state.svelte-CQp8u0bn.js.map +1 -0
  324. package/build/server/index.js +4359 -0
  325. package/build/server/index.js.map +1 -0
  326. package/build/server/manifest.js +570 -0
  327. package/build/server/manifest.js.map +1 -0
  328. package/build/shims.js +32 -0
  329. package/package.json +61 -0
@@ -0,0 +1,1639 @@
1
+ /* =========================================================================
2
+ OpenPalm Setup Wizard — Standalone CSS
3
+ ========================================================================= */
4
+
5
+ /* ── CSS Custom Properties (Design Tokens) ─────────────────────────────── */
6
+ :root {
7
+ /* Spacing scale */
8
+ --space-1: 4px;
9
+ --space-2: 8px;
10
+ --space-3: 12px;
11
+ --space-4: 16px;
12
+ --space-5: 20px;
13
+ --space-6: 24px;
14
+ --space-7: 28px;
15
+ --space-8: 32px;
16
+
17
+ /* Typography */
18
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
19
+ --font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', Consolas, monospace;
20
+ --text-xs: 0.75rem;
21
+ --text-sm: 0.8125rem;
22
+ --text-base: 0.875rem;
23
+ --text-lg: 1.125rem;
24
+ --text-xl: 1.25rem;
25
+ --text-2xl: 1.5rem;
26
+ --font-medium: 500;
27
+ --font-semibold: 600;
28
+ --font-bold: 700;
29
+ --leading-tight: 1.25;
30
+
31
+ /* Radii */
32
+ --radius-sm: 6px;
33
+ --radius-md: 8px;
34
+ --radius-lg: 12px;
35
+ --radius-full: 9999px;
36
+
37
+ /* Colors */
38
+ --color-bg: #ffffff;
39
+ --color-bg-secondary: #f8f9fb;
40
+ --color-text: #1a1a1a;
41
+ --color-text-secondary: #6b7280;
42
+ --color-text-tertiary: #9ca3af;
43
+ --color-border: #e5e7eb;
44
+ --color-border-hover: #adb5bd;
45
+ --color-primary: #ff9d00;
46
+ --color-primary-hover: #e68a00;
47
+ --color-primary-subtle: rgba(255, 157, 0, 0.1);
48
+ --color-success: #2f9e44;
49
+ --color-success-bg: rgba(64, 192, 87, 0.1);
50
+ --color-success-border: rgba(64, 192, 87, 0.25);
51
+ --color-danger: #dc2626;
52
+ --color-error: #dc2626;
53
+
54
+ /* Additional colors from reference design */
55
+ --color-blue: #2563EB;
56
+ --color-blue-soft: #EFF6FF;
57
+ --color-teal: #0d9488;
58
+ --color-teal-soft: #f0fdfa;
59
+ --color-purple: #7c3aed;
60
+ --color-purple-soft: #f5f3ff;
61
+ --color-red-soft: #fef2f2;
62
+ --color-green-soft: #f0fdf4;
63
+ --color-yellow: #FFD21E;
64
+ --color-yellow-soft: #FFF3C4;
65
+ --color-yellow-dark: #F59E0B;
66
+
67
+ /* Transitions */
68
+ --transition-fast: 0.15s ease;
69
+ }
70
+
71
+ /* ── Reset / Base ──────────────────────────────────────────────────────── */
72
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
73
+
74
+ body {
75
+ font-family: var(--font-sans);
76
+ font-size: var(--text-base);
77
+ color: var(--color-text);
78
+ background: var(--color-bg-secondary);
79
+ line-height: 1.5;
80
+ -webkit-font-smoothing: antialiased;
81
+ -moz-osx-font-smoothing: grayscale;
82
+ }
83
+
84
+ /* ── Page Layout ───────────────────────────────────────────────────────── */
85
+ .setup-page {
86
+ min-height: 100vh;
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: center;
90
+ /* flex instead of grid+place-items avoids the grid column being sized to the
91
+ card's max-width, which caused the card to exceed the viewport width on
92
+ narrow screens (< 720px). */
93
+ padding: var(--space-6);
94
+ background:
95
+ radial-gradient(ellipse 80% 60% at 15% 10%, rgba(255, 157, 0, 0.06) 0%, transparent 60%),
96
+ radial-gradient(ellipse 60% 50% at 85% 90%, rgba(99, 102, 241, 0.05) 0%, transparent 55%),
97
+ #f8f9fb;
98
+ position: relative;
99
+ /* Only clip horizontally (to hide the decorative radial-gradient bleed).
100
+ overflow:hidden was clipping the card vertically on short viewports. */
101
+ overflow-x: hidden;
102
+ overflow-y: auto;
103
+ }
104
+
105
+ /* ── Wizard Card ───────────────────────────────────────────────────────── */
106
+ .wizard-card {
107
+ width: 100%;
108
+ max-width: min(100%, 720px);
109
+ /* Cap height so the card never taller than the viewport minus the page
110
+ padding (2 × 24px). The body scrolls internally; step-actions sticks
111
+ at the bottom of the visible card area, not at the bottom of the
112
+ full scroll-height. Use calc() so it responds to any viewport height. */
113
+ max-height: calc(100vh - 48px);
114
+ background: var(--color-bg);
115
+ border: 1px solid rgba(0, 0, 0, 0.08);
116
+ border-radius: 20px;
117
+ box-shadow:
118
+ 0 0 0 1px rgba(0, 0, 0, 0.04),
119
+ 0 4px 6px -1px rgba(0, 0, 0, 0.06),
120
+ 0 16px 40px -8px rgba(0, 0, 0, 0.1);
121
+ padding: 0;
122
+ position: relative;
123
+ z-index: 1;
124
+ min-height: 520px;
125
+ display: flex;
126
+ flex-direction: column;
127
+ animation: card-enter 0.45s cubic-bezier(0.16, 1, 0.3, 1) both;
128
+ }
129
+
130
+ @keyframes card-enter {
131
+ from { opacity: 0; transform: translateY(16px) scale(0.98); }
132
+ to { opacity: 1; transform: translateY(0) scale(1); }
133
+ }
134
+
135
+ @keyframes fadeIn {
136
+ from { opacity: 0; transform: translateY(6px); }
137
+ to { opacity: 1; transform: translateY(0); }
138
+ }
139
+
140
+ @media (prefers-reduced-motion: reduce) {
141
+ .wizard-card { animation: none; }
142
+ }
143
+
144
+ .wizard-header {
145
+ padding: var(--space-6) var(--space-8) var(--space-5);
146
+ border-bottom: 1px solid var(--color-border);
147
+ display: flex;
148
+ align-items: center;
149
+ gap: 10px;
150
+ }
151
+
152
+ .hdr-logo {
153
+ width: 30px;
154
+ height: 30px;
155
+ border-radius: 8px;
156
+ background: var(--color-primary);
157
+ display: grid;
158
+ place-items: center;
159
+ font-weight: 700;
160
+ font-size: 12px;
161
+ color: #1a1a1a;
162
+ flex-shrink: 0;
163
+ }
164
+
165
+ .wizard-header h1 {
166
+ font-size: 15px;
167
+ font-weight: var(--font-semibold);
168
+ color: var(--color-text);
169
+ letter-spacing: -0.01em;
170
+ line-height: 1.1;
171
+ }
172
+
173
+ .hdr-suffix {
174
+ color: var(--color-text-tertiary);
175
+ font-weight: 400;
176
+ margin-left: 4px;
177
+ }
178
+
179
+ .wizard-body {
180
+ padding: var(--space-6) var(--space-8) var(--space-8);
181
+ flex: 1;
182
+ display: flex;
183
+ flex-direction: column;
184
+ min-height: 0;
185
+ }
186
+
187
+ /* ── Segmented Progress Bar ───────────────────────────────────────────── */
188
+ .prog-bar {
189
+ margin-bottom: var(--space-6);
190
+ }
191
+
192
+ .prog-segments {
193
+ display: flex;
194
+ gap: 3px;
195
+ margin-bottom: 6px;
196
+ }
197
+
198
+ .prog-seg {
199
+ flex: 1;
200
+ height: 3px;
201
+ border-radius: 2px;
202
+ background: var(--color-border);
203
+ transition: background 0.3s;
204
+ }
205
+
206
+ .prog-seg.on {
207
+ background: var(--color-primary-hover);
208
+ }
209
+
210
+ .prog-labels {
211
+ display: flex;
212
+ gap: 3px;
213
+ }
214
+
215
+ .prog-lbl {
216
+ flex: 1;
217
+ font-size: 11px;
218
+ font-weight: var(--font-medium);
219
+ color: var(--color-text-tertiary);
220
+ transition: color 0.3s;
221
+ cursor: pointer;
222
+ }
223
+
224
+ .prog-lbl.on {
225
+ color: var(--color-text-secondary);
226
+ }
227
+
228
+ .prog-lbl.active {
229
+ color: var(--color-text);
230
+ font-weight: var(--font-semibold);
231
+ }
232
+
233
+ /* ── Step Content ──────────────────────────────────────────────────────── */
234
+ .step-content {
235
+ display: flex;
236
+ flex-direction: column;
237
+ flex: 1;
238
+ /* Make step-content the scroll container so sticky step-actions works.
239
+ wizard-body provides the flex layout; step-content scrolls internally. */
240
+ overflow-y: auto;
241
+ min-height: 0;
242
+ animation: fadeIn 0.25s ease;
243
+ }
244
+
245
+ .step-content h2 {
246
+ font-size: var(--text-2xl);
247
+ font-weight: var(--font-bold);
248
+ color: var(--color-text);
249
+ margin-bottom: var(--space-2);
250
+ letter-spacing: -0.01em;
251
+ }
252
+
253
+ .step-description {
254
+ font-size: var(--text-sm);
255
+ color: var(--color-text-secondary);
256
+ margin-bottom: var(--space-6);
257
+ line-height: 1.5;
258
+ }
259
+
260
+ /* ── Welcome Hero ──────────────────────────────────────────────────────── */
261
+ .welcome-hero {
262
+ text-align: center;
263
+ padding: 40px 0 24px;
264
+ animation: fadeIn 0.25s ease;
265
+ }
266
+
267
+ .welcome-icon {
268
+ font-size: 48px;
269
+ margin-bottom: var(--space-4);
270
+ }
271
+
272
+ .welcome-hero h2 {
273
+ font-size: 28px;
274
+ text-align: center;
275
+ }
276
+
277
+ .welcome-subtitle {
278
+ max-width: 380px;
279
+ margin: 8px auto 28px;
280
+ font-size: var(--text-sm);
281
+ color: var(--color-text-secondary);
282
+ line-height: 1.5;
283
+ }
284
+
285
+ .welcome-pills {
286
+ display: flex;
287
+ gap: 8px;
288
+ justify-content: center;
289
+ flex-wrap: wrap;
290
+ margin-bottom: var(--space-8);
291
+ }
292
+
293
+ .pill {
294
+ font-size: 13px;
295
+ color: var(--color-text-secondary);
296
+ background: var(--color-bg);
297
+ border: 1px solid var(--color-border);
298
+ padding: 5px 14px;
299
+ border-radius: 100px;
300
+ }
301
+
302
+ /* ── Step Actions ──────────────────────────────────────────────────────── */
303
+ .step-actions {
304
+ display: flex;
305
+ justify-content: flex-end;
306
+ align-items: center;
307
+ gap: var(--space-3);
308
+ /* Stick to the bottom of the visible wizard-body scroll area. This keeps
309
+ nav buttons permanently in view on content-heavy steps (providers,
310
+ models, voice, options, review) where the step-content scroll height
311
+ exceeds the body's client height.
312
+ NOTE: negative margins break sticky in most browsers, so the separator
313
+ is achieved with a box-shadow inset rather than a border-top + bleed. */
314
+ position: sticky;
315
+ bottom: 0;
316
+ background: var(--color-bg);
317
+ padding-top: var(--space-5);
318
+ padding-bottom: var(--space-2);
319
+ /* Use inset box-shadow as top separator — avoids needing negative-margin
320
+ bleed that would break sticky positioning. */
321
+ box-shadow: 0 -1px 0 var(--color-border);
322
+ }
323
+
324
+ .nav-info {
325
+ font-size: var(--text-xs);
326
+ color: var(--color-text-tertiary);
327
+ margin-right: auto;
328
+ margin-left: var(--space-2);
329
+ }
330
+
331
+ .nav-info b {
332
+ color: var(--color-success);
333
+ font-weight: var(--font-semibold);
334
+ }
335
+
336
+ /* ── Buttons ───────────────────────────────────────────────────────────── */
337
+ .btn {
338
+ display: inline-flex;
339
+ align-items: center;
340
+ gap: var(--space-2);
341
+ padding: 10px 24px;
342
+ font-family: var(--font-sans);
343
+ font-size: var(--text-sm);
344
+ font-weight: var(--font-bold);
345
+ line-height: 1.4;
346
+ border: 1.5px solid transparent;
347
+ border-radius: var(--radius-full);
348
+ cursor: pointer;
349
+ transition: all 0.2s ease;
350
+ white-space: nowrap;
351
+ justify-content: center;
352
+ text-decoration: none;
353
+ }
354
+
355
+ .btn:disabled {
356
+ opacity: 0.45;
357
+ cursor: not-allowed;
358
+ }
359
+
360
+ .btn-primary {
361
+ background: var(--color-primary);
362
+ color: #1a1a1a;
363
+ border-color: transparent;
364
+ box-shadow: 0 1px 3px rgba(255, 157, 0, 0.3), 0 4px 12px rgba(255, 157, 0, 0.2);
365
+ }
366
+
367
+ .btn-primary:hover:not(:disabled) {
368
+ background: var(--color-primary-hover);
369
+ box-shadow: 0 2px 6px rgba(255, 157, 0, 0.4), 0 8px 20px rgba(255, 157, 0, 0.25);
370
+ transform: translateY(-1px);
371
+ }
372
+
373
+ .btn-primary:active:not(:disabled) {
374
+ transform: translateY(0);
375
+ box-shadow: 0 1px 4px rgba(255, 157, 0, 0.2);
376
+ transition-duration: 0.1s;
377
+ }
378
+
379
+ .btn-primary-lg {
380
+ background: var(--color-primary);
381
+ color: #1a1a1a;
382
+ border-color: transparent;
383
+ padding: 12px 32px;
384
+ font-size: 15px;
385
+ font-weight: var(--font-bold);
386
+ border-radius: var(--radius-lg);
387
+ box-shadow: 0 1px 3px rgba(255, 157, 0, 0.3), 0 4px 12px rgba(255, 157, 0, 0.2);
388
+ display: inline-flex;
389
+ align-items: center;
390
+ gap: var(--space-2);
391
+ font-family: var(--font-sans);
392
+ line-height: 1.4;
393
+ cursor: pointer;
394
+ transition: all 0.2s ease;
395
+ white-space: nowrap;
396
+ justify-content: center;
397
+ text-decoration: none;
398
+ border: none;
399
+ }
400
+
401
+ .btn-primary-lg:hover {
402
+ background: var(--color-primary-hover);
403
+ box-shadow: 0 2px 6px rgba(255, 157, 0, 0.4), 0 8px 20px rgba(255, 157, 0, 0.25);
404
+ transform: translateY(-1px);
405
+ }
406
+
407
+ .btn-secondary {
408
+ background: var(--color-bg);
409
+ color: var(--color-text);
410
+ border-color: var(--color-border-hover);
411
+ }
412
+
413
+ .btn-secondary:hover:not(:disabled) {
414
+ background: var(--color-bg-secondary);
415
+ border-color: var(--color-text-secondary);
416
+ }
417
+
418
+ .btn-outline {
419
+ background: transparent;
420
+ color: var(--color-primary);
421
+ border-color: var(--color-primary);
422
+ }
423
+
424
+ .btn-outline:hover:not(:disabled) {
425
+ background: var(--color-primary-subtle);
426
+ }
427
+
428
+ /* ── Form Fields ───────────────────────────────────────────────────────── */
429
+ .field-group {
430
+ margin-bottom: var(--space-5);
431
+ }
432
+
433
+ .field-group--compact {
434
+ margin-bottom: 0;
435
+ }
436
+
437
+ .field-group label {
438
+ display: block;
439
+ font-size: var(--text-sm);
440
+ font-weight: var(--font-semibold);
441
+ color: var(--color-text);
442
+ margin-bottom: var(--space-2);
443
+ }
444
+
445
+ .field-group input,
446
+ .field-group select {
447
+ width: 100%;
448
+ height: 44px;
449
+ border: 1.5px solid var(--color-border);
450
+ border-radius: var(--radius-lg);
451
+ padding: 0 14px;
452
+ background: var(--color-bg);
453
+ color: var(--color-text);
454
+ font-family: var(--font-sans);
455
+ font-size: var(--text-base);
456
+ transition: all 0.2s ease;
457
+ }
458
+
459
+ .field-group input::placeholder {
460
+ color: var(--color-text-tertiary);
461
+ }
462
+
463
+ .field-group input:hover,
464
+ .field-group select:hover {
465
+ border-color: var(--color-border-hover);
466
+ }
467
+
468
+ .field-group input:focus,
469
+ .field-group select:focus {
470
+ outline: none;
471
+ border-color: var(--color-primary);
472
+ box-shadow: 0 0 0 4px var(--color-primary-subtle);
473
+ }
474
+
475
+ .field-hint {
476
+ margin-top: var(--space-2);
477
+ font-size: var(--text-xs);
478
+ color: var(--color-text-secondary);
479
+ line-height: 1.5;
480
+ }
481
+
482
+ .field-hint--accent {
483
+ color: var(--color-primary-hover);
484
+ font-weight: var(--font-medium);
485
+ }
486
+
487
+ .field-error {
488
+ margin: 0 0 var(--space-3);
489
+ padding: var(--space-2) var(--space-3);
490
+ background: #fef2f2;
491
+ border: 1px solid #fecaca;
492
+ border-radius: var(--radius-md);
493
+ color: #dc2626;
494
+ font-size: var(--text-sm);
495
+ font-weight: var(--font-medium);
496
+ }
497
+
498
+ .field-warn {
499
+ margin-top: var(--space-2);
500
+ font-size: var(--text-xs);
501
+ color: #b45309;
502
+ line-height: 1.5;
503
+ }
504
+
505
+ .field-warning {
506
+ margin: 0 0 var(--space-3);
507
+ padding: var(--space-2) var(--space-3);
508
+ background: #fffbeb;
509
+ border: 1px solid #fde68a;
510
+ border-radius: var(--radius-md);
511
+ color: #92400e;
512
+ font-size: var(--text-sm);
513
+ font-weight: var(--font-medium);
514
+ }
515
+
516
+ /* ── Provider Card Grid ──────────────────────────────────────────────── */
517
+ .provider-grid {
518
+ display: flex;
519
+ flex-direction: column;
520
+ gap: var(--space-5);
521
+ margin-bottom: var(--space-4);
522
+ }
523
+
524
+ .provider-group-header {
525
+ display: flex;
526
+ align-items: baseline;
527
+ gap: var(--space-3);
528
+ margin-bottom: var(--space-2);
529
+ padding-bottom: var(--space-2);
530
+ border-bottom: 1px solid var(--color-border);
531
+ }
532
+
533
+ .provider-group-label {
534
+ font-size: var(--text-base);
535
+ font-weight: var(--font-semibold);
536
+ color: var(--color-fg);
537
+ margin: 0;
538
+ }
539
+
540
+ .provider-group-desc {
541
+ font-size: var(--text-sm);
542
+ color: var(--color-fg-muted);
543
+ }
544
+
545
+ .provider-group-cards {
546
+ display: grid;
547
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
548
+ gap: 8px;
549
+ }
550
+
551
+ /* ── Provider Cards ──────────────────────────────────────────────────── */
552
+ .pcard {
553
+ background: var(--color-bg);
554
+ border: 1.5px solid var(--color-border);
555
+ border-radius: var(--radius-lg);
556
+ padding: 14px;
557
+ cursor: pointer;
558
+ transition: all 0.15s;
559
+ }
560
+
561
+ .pcard:hover {
562
+ border-color: var(--color-border-hover);
563
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
564
+ }
565
+
566
+ .pcard.selected {
567
+ border-color: var(--color-primary-hover);
568
+ background: var(--color-primary-subtle);
569
+ }
570
+
571
+ .pcard.verified {
572
+ border-color: var(--color-success);
573
+ background: var(--color-success-bg);
574
+ }
575
+
576
+ .pcard.wide {
577
+ grid-column: 1 / -1;
578
+ }
579
+
580
+ .pcard-header {
581
+ display: flex;
582
+ align-items: center;
583
+ gap: 10px;
584
+ }
585
+
586
+ .pcard-icon {
587
+ width: 36px;
588
+ height: 36px;
589
+ border-radius: var(--radius-md);
590
+ background: var(--color-bg-secondary);
591
+ border: 1px solid var(--color-border);
592
+ display: grid;
593
+ place-items: center;
594
+ font-size: 18px;
595
+ flex-shrink: 0;
596
+ }
597
+
598
+ .pcard-info {
599
+ flex: 1;
600
+ min-width: 0;
601
+ }
602
+
603
+ .pcard-name {
604
+ font-size: var(--text-sm);
605
+ font-weight: var(--font-semibold);
606
+ display: flex;
607
+ align-items: center;
608
+ gap: 6px;
609
+ flex-wrap: wrap;
610
+ }
611
+
612
+ .pcard-desc {
613
+ font-size: var(--text-xs);
614
+ color: var(--color-text-tertiary);
615
+ margin-top: 1px;
616
+ overflow: hidden;
617
+ text-overflow: ellipsis;
618
+ white-space: nowrap;
619
+ }
620
+
621
+ .pcard-check {
622
+ width: 18px;
623
+ height: 18px;
624
+ border-radius: 6px;
625
+ border: 2px solid var(--color-border);
626
+ flex-shrink: 0;
627
+ display: grid;
628
+ place-items: center;
629
+ font-size: 11px;
630
+ color: white;
631
+ transition: all 0.15s;
632
+ }
633
+
634
+ .pcard.selected .pcard-check {
635
+ background: var(--color-primary-hover);
636
+ border-color: var(--color-primary-hover);
637
+ }
638
+
639
+ .pcard.verified .pcard-check {
640
+ background: var(--color-success);
641
+ border-color: var(--color-success);
642
+ }
643
+
644
+ /* ── Badges ──────────────────────────────────────────────────────────── */
645
+ .badge {
646
+ font-size: 10px;
647
+ font-weight: var(--font-semibold);
648
+ letter-spacing: 0.04em;
649
+ text-transform: uppercase;
650
+ padding: 1px 6px;
651
+ border-radius: 4px;
652
+ }
653
+
654
+ .badge-cloud { background: var(--color-blue-soft); color: var(--color-blue); }
655
+ .badge-local { background: var(--color-teal-soft); color: var(--color-teal); }
656
+ .badge-hybrid { background: var(--color-purple-soft); color: var(--color-purple); }
657
+
658
+ /* ── Verification Status ─────────────────────────────────────────────── */
659
+ .vs {
660
+ font-size: var(--text-sm);
661
+ flex-shrink: 0;
662
+ margin-left: 2px;
663
+ }
664
+
665
+ .vs-ok { color: var(--color-success); }
666
+ .vs-err { color: var(--color-error); }
667
+ .vs-wait { color: var(--color-primary-hover); animation: blink 1.2s ease infinite; }
668
+
669
+ @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } }
670
+
671
+ /* ── Inline Auth Panel ───────────────────────────────────────────────── */
672
+ .pcard-auth {
673
+ margin-top: var(--space-3);
674
+ padding-top: var(--space-3);
675
+ border-top: 1px solid var(--color-border);
676
+ animation: fadeIn 0.2s ease;
677
+ }
678
+
679
+ .auth-row {
680
+ display: flex;
681
+ gap: 6px;
682
+ margin-bottom: var(--space-2);
683
+ }
684
+
685
+ .auth-row input {
686
+ flex: 1;
687
+ min-width: 0;
688
+ padding: 9px 12px;
689
+ border-radius: var(--radius-md);
690
+ border: 1.5px solid var(--color-border);
691
+ background: var(--color-bg);
692
+ color: var(--color-text);
693
+ font-size: 13px;
694
+ font-family: var(--font-mono);
695
+ outline: none;
696
+ transition: border-color 0.15s;
697
+ }
698
+
699
+ .auth-row input:focus {
700
+ border-color: var(--color-primary);
701
+ }
702
+
703
+ .auth-row input::placeholder {
704
+ color: var(--color-text-tertiary);
705
+ }
706
+
707
+ .auth-btn {
708
+ display: inline-flex;
709
+ align-items: center;
710
+ justify-content: center;
711
+ gap: 5px;
712
+ padding: 9px 14px;
713
+ border-radius: var(--radius-md);
714
+ border: none;
715
+ font-family: var(--font-sans);
716
+ font-size: 13px;
717
+ font-weight: var(--font-semibold);
718
+ cursor: pointer;
719
+ transition: all 0.15s;
720
+ white-space: nowrap;
721
+ }
722
+
723
+ .auth-btn:hover:not(:disabled) { filter: brightness(0.95); }
724
+ .auth-btn:disabled { opacity: 0.35; cursor: not-allowed; }
725
+ .auth-btn-verify { background: var(--color-primary); color: #1a1a1a; }
726
+ .auth-btn-verified { background: var(--color-success-bg); color: var(--color-success); border: 1px solid var(--color-success-border); }
727
+ .auth-btn-detect { background: var(--color-teal); color: white; }
728
+ .auth-btn-detected { background: var(--color-teal-soft); color: var(--color-teal); border: 1px solid #99f6e4; }
729
+
730
+ /* ── Auth Feedback ───────────────────────────────────────────────────── */
731
+ .auth-feedback {
732
+ margin-top: var(--space-2);
733
+ padding: var(--space-2) var(--space-3);
734
+ border-radius: var(--radius-md);
735
+ font-size: var(--text-xs);
736
+ animation: fadeIn 0.2s;
737
+ }
738
+
739
+ .auth-feedback-ok {
740
+ background: var(--color-green-soft);
741
+ border: 1px solid #bbf7d0;
742
+ color: #15803d;
743
+ }
744
+
745
+ .auth-feedback-err {
746
+ background: var(--color-red-soft);
747
+ border: 1px solid #fecaca;
748
+ color: #b91c1c;
749
+ }
750
+
751
+ /* ── Ollama Mode Prompt ──────────────────────────────────────────────── */
752
+ .ollama-mode-prompt {
753
+ background: var(--color-bg-secondary);
754
+ border: 1px solid var(--color-border);
755
+ border-radius: var(--radius-lg);
756
+ padding: 14px;
757
+ text-align: center;
758
+ }
759
+
760
+ .ollama-mode-prompt p {
761
+ font-size: 13px;
762
+ color: var(--color-text-secondary);
763
+ margin-bottom: 10px;
764
+ }
765
+
766
+ .ollama-mode-buttons {
767
+ display: flex;
768
+ gap: 8px;
769
+ justify-content: center;
770
+ }
771
+
772
+ .ollama-mode-btn {
773
+ display: inline-flex;
774
+ align-items: center;
775
+ justify-content: center;
776
+ gap: 5px;
777
+ padding: 9px 18px;
778
+ border-radius: var(--radius-md);
779
+ border: none;
780
+ font-family: var(--font-sans);
781
+ font-size: 13px;
782
+ font-weight: var(--font-semibold);
783
+ cursor: pointer;
784
+ transition: all 0.15s;
785
+ white-space: nowrap;
786
+ }
787
+
788
+ .ollama-mode-btn:hover { filter: brightness(0.95); }
789
+ .ollama-mode-btn-detect { background: var(--color-teal); color: white; }
790
+ .ollama-mode-btn-stack { background: var(--color-bg); color: var(--color-text-secondary); border: 1px solid var(--color-border); }
791
+ .ollama-mode-btn-stack:hover { border-color: var(--color-border-hover); color: var(--color-text); }
792
+
793
+ /* ── Advanced Toggle ─────────────────────────────────────────────────── */
794
+ .adv-toggle {
795
+ grid-column: 1 / -1;
796
+ display: flex;
797
+ align-items: center;
798
+ gap: 8px;
799
+ padding: 8px 0;
800
+ cursor: pointer;
801
+ color: var(--color-text-tertiary);
802
+ font-size: 13px;
803
+ font-weight: var(--font-medium);
804
+ user-select: none;
805
+ border: none;
806
+ background: none;
807
+ width: 100%;
808
+ }
809
+
810
+ .adv-toggle:hover { color: var(--color-text-secondary); }
811
+ .adv-toggle::before, .adv-toggle::after {
812
+ content: '';
813
+ flex: 1;
814
+ height: 1px;
815
+ background: var(--color-border);
816
+ }
817
+
818
+ .adv-toggle .arr {
819
+ display: inline-block;
820
+ transition: transform 0.2s;
821
+ font-size: 10px;
822
+ margin-left: 2px;
823
+ }
824
+
825
+ .adv-toggle.open .arr { transform: rotate(90deg); }
826
+
827
+ /* ── Model Groups ────────────────────────────────────────────────────── */
828
+ .model-group {
829
+ background: var(--color-bg);
830
+ border: 1.5px solid var(--color-border);
831
+ border-radius: var(--radius-lg);
832
+ padding: var(--space-4);
833
+ margin-bottom: 10px;
834
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
835
+ /* Constrain model option lists so each group shows ~5 options before
836
+ scrolling, rather than expanding to show all 100+ models and pushing
837
+ the step-actions button 600px below the visible area. */
838
+ display: flex;
839
+ flex-direction: column;
840
+ }
841
+
842
+ /* The list of .model-opt rows within a group scrolls independently */
843
+ .model-group .model-filter-row ~ .model-opt,
844
+ .model-group > .model-opt {
845
+ /* Handled via the scroll container below */
846
+ }
847
+
848
+ /* Wrap the scrollable option list so only options scroll, not the header */
849
+ .model-opts-scroll {
850
+ max-height: 220px;
851
+ overflow-y: auto;
852
+ /* Subtle inner shadow indicates there is more content to scroll */
853
+ mask-image: linear-gradient(to bottom, black calc(100% - 24px), transparent 100%);
854
+ -webkit-mask-image: linear-gradient(to bottom, black calc(100% - 24px), transparent 100%);
855
+ }
856
+
857
+ .model-group-header {
858
+ display: flex;
859
+ align-items: center;
860
+ gap: 8px;
861
+ margin-bottom: 2px;
862
+ }
863
+
864
+ .model-group-title {
865
+ font-size: var(--text-sm);
866
+ font-weight: var(--font-bold);
867
+ }
868
+
869
+ .model-group-tag {
870
+ font-size: 10px;
871
+ font-weight: var(--font-semibold);
872
+ padding: 1px 6px;
873
+ border-radius: 4px;
874
+ letter-spacing: 0.04em;
875
+ text-transform: uppercase;
876
+ }
877
+
878
+ .model-group-tag-required {
879
+ background: var(--color-primary-subtle);
880
+ color: var(--color-primary-hover);
881
+ }
882
+
883
+ .model-group-tag-optional {
884
+ background: var(--color-teal-soft);
885
+ color: var(--color-teal);
886
+ }
887
+
888
+ .model-group-desc {
889
+ font-size: var(--text-xs);
890
+ color: var(--color-text-tertiary);
891
+ margin-bottom: var(--space-3);
892
+ }
893
+
894
+ /* ── Model Search Filter ──────────────────────────────────────────── */
895
+ .model-filter-row {
896
+ margin-bottom: 6px;
897
+ }
898
+ .model-filter-input {
899
+ width: 100%;
900
+ padding: 8px 12px;
901
+ border: 1px solid var(--color-border);
902
+ border-radius: var(--radius-md);
903
+ font-size: 0.85rem;
904
+ background: var(--color-surface);
905
+ color: var(--color-text-primary);
906
+ outline: none;
907
+ transition: border-color 0.15s;
908
+ }
909
+ .model-filter-input:focus {
910
+ border-color: var(--color-primary);
911
+ }
912
+ .model-filter-input::placeholder {
913
+ color: var(--color-text-tertiary);
914
+ }
915
+ .model-opt-filtered {
916
+ display: none !important;
917
+ }
918
+
919
+ /* ── Model Option (radio-style) ──────────────────────────────────────── */
920
+ .model-opt {
921
+ display: flex;
922
+ align-items: center;
923
+ gap: 10px;
924
+ padding: 10px 12px;
925
+ border-radius: var(--radius-md);
926
+ cursor: pointer;
927
+ transition: all 0.1s;
928
+ margin-bottom: 2px;
929
+ border: 1.5px solid transparent;
930
+ }
931
+
932
+ .model-opt:hover { background: var(--color-bg-secondary); }
933
+
934
+ .model-opt.on {
935
+ background: var(--color-primary-subtle);
936
+ border-color: #fde68a;
937
+ }
938
+
939
+ .model-opt-dot {
940
+ width: 16px;
941
+ height: 16px;
942
+ border-radius: 50%;
943
+ border: 2px solid var(--color-border);
944
+ flex-shrink: 0;
945
+ display: grid;
946
+ place-items: center;
947
+ }
948
+
949
+ .model-opt.on .model-opt-dot {
950
+ border-color: var(--color-primary-hover);
951
+ }
952
+
953
+ .model-opt-dot-inner {
954
+ width: 7px;
955
+ height: 7px;
956
+ border-radius: 50%;
957
+ background: transparent;
958
+ }
959
+
960
+ .model-opt.on .model-opt-dot-inner {
961
+ background: var(--color-primary-hover);
962
+ }
963
+
964
+ .model-opt-name {
965
+ font-size: 13px;
966
+ color: var(--color-text-secondary);
967
+ }
968
+
969
+ .model-opt.on .model-opt-name {
970
+ color: var(--color-text);
971
+ font-weight: var(--font-medium);
972
+ }
973
+
974
+ .model-opt-meta {
975
+ font-size: 11px;
976
+ color: var(--color-text-tertiary);
977
+ margin-top: 1px;
978
+ }
979
+
980
+ .model-opt-badge {
981
+ font-size: 9px;
982
+ font-weight: var(--font-semibold);
983
+ padding: 1px 6px;
984
+ border-radius: 4px;
985
+ letter-spacing: 0.04em;
986
+ text-transform: uppercase;
987
+ margin-left: auto;
988
+ flex-shrink: 0;
989
+ }
990
+
991
+ .model-opt-badge-top {
992
+ background: var(--color-primary-subtle);
993
+ color: var(--color-primary-hover);
994
+ }
995
+
996
+ .model-opt-badge-auto {
997
+ background: var(--color-blue-soft);
998
+ color: var(--color-blue);
999
+ }
1000
+
1001
+ /* ── Review Summary ──────────────────────────────────────────────────── */
1002
+ .review-card {
1003
+ background: var(--color-bg);
1004
+ border: 1.5px solid var(--color-border);
1005
+ border-radius: var(--radius-lg);
1006
+ padding: 18px;
1007
+ margin-bottom: var(--space-4);
1008
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
1009
+ }
1010
+
1011
+ .review-card-title {
1012
+ font-size: 11px;
1013
+ font-weight: var(--font-semibold);
1014
+ letter-spacing: 0.06em;
1015
+ text-transform: uppercase;
1016
+ color: var(--color-text-tertiary);
1017
+ margin-bottom: 8px;
1018
+ display: flex;
1019
+ justify-content: space-between;
1020
+ align-items: center;
1021
+ }
1022
+
1023
+ .review-row {
1024
+ display: flex;
1025
+ align-items: center;
1026
+ justify-content: space-between;
1027
+ padding: 6px 0;
1028
+ border-bottom: 1px solid var(--color-bg-secondary);
1029
+ font-size: 13px;
1030
+ }
1031
+
1032
+ .review-row:last-child { border-bottom: none; }
1033
+
1034
+ .review-row-label {
1035
+ color: var(--color-text-secondary);
1036
+ }
1037
+
1038
+ .review-row-value {
1039
+ font-family: var(--font-mono);
1040
+ font-size: var(--text-xs);
1041
+ color: var(--color-text);
1042
+ text-align: right;
1043
+ /* Raised from 240px — model names like
1044
+ "adrienbrault/nous-hermes2theta-llama3-8b:q4_K_M (Ollama)" are 404px wide
1045
+ and were always truncated. 60% of the row gives the value enough room
1046
+ while keeping the label readable. */
1047
+ max-width: 60%;
1048
+ overflow: hidden;
1049
+ text-overflow: ellipsis;
1050
+ white-space: nowrap;
1051
+ }
1052
+
1053
+ .review-row-value-ok {
1054
+ color: var(--color-success);
1055
+ font-family: var(--font-sans);
1056
+ }
1057
+
1058
+ .review-json-toggle {
1059
+ margin-bottom: var(--space-3);
1060
+ }
1061
+
1062
+ .btn-json-toggle {
1063
+ background: none;
1064
+ border: 1px solid var(--color-border);
1065
+ border-radius: var(--radius-md);
1066
+ color: var(--color-text-secondary);
1067
+ font-size: var(--text-xs);
1068
+ font-weight: var(--font-medium);
1069
+ padding: 6px 12px;
1070
+ cursor: pointer;
1071
+ transition: all 0.15s;
1072
+ font-family: var(--font-sans);
1073
+ }
1074
+
1075
+ .btn-json-toggle:hover {
1076
+ border-color: var(--color-border-hover);
1077
+ color: var(--color-text);
1078
+ }
1079
+
1080
+ .review-json pre {
1081
+ background: var(--color-bg-secondary);
1082
+ border: 1px solid var(--color-border);
1083
+ border-radius: var(--radius-lg);
1084
+ padding: 14px;
1085
+ font-family: var(--font-mono);
1086
+ font-size: 11px;
1087
+ line-height: 1.6;
1088
+ color: var(--color-text-secondary);
1089
+ white-space: pre;
1090
+ overflow-x: auto;
1091
+ max-height: 360px;
1092
+ margin-bottom: var(--space-3);
1093
+ }
1094
+
1095
+ /* ── Legacy Review Grid (kept for backward compat / tests) ───────────── */
1096
+ .review-grid {
1097
+ display: flex;
1098
+ flex-direction: column;
1099
+ background: var(--color-bg-secondary);
1100
+ border: 1px solid var(--color-border);
1101
+ border-radius: var(--radius-lg);
1102
+ overflow: hidden;
1103
+ margin-bottom: var(--space-2);
1104
+ }
1105
+
1106
+ .review-section-header {
1107
+ display: flex;
1108
+ justify-content: space-between;
1109
+ align-items: center;
1110
+ padding: 8px var(--space-4);
1111
+ background: rgba(0, 0, 0, 0.04);
1112
+ font-size: var(--text-xs);
1113
+ font-weight: var(--font-semibold);
1114
+ color: var(--color-text-secondary);
1115
+ text-transform: uppercase;
1116
+ letter-spacing: 0.5px;
1117
+ border-bottom: 1px solid var(--color-border);
1118
+ }
1119
+
1120
+ .review-edit-btn {
1121
+ background: none;
1122
+ border: none;
1123
+ color: var(--color-primary);
1124
+ font-size: var(--text-xs);
1125
+ font-weight: var(--font-medium);
1126
+ cursor: pointer;
1127
+ padding: 2px 8px;
1128
+ border-radius: var(--radius-md);
1129
+ transition: all 0.15s ease;
1130
+ text-transform: none;
1131
+ letter-spacing: normal;
1132
+ }
1133
+
1134
+ .review-edit-btn:hover { background: var(--color-primary-subtle); color: var(--color-primary-hover); }
1135
+
1136
+ .review-item {
1137
+ display: flex;
1138
+ justify-content: space-between;
1139
+ align-items: baseline;
1140
+ gap: var(--space-4);
1141
+ padding: 10px var(--space-4);
1142
+ border-bottom: 1px solid var(--color-border);
1143
+ }
1144
+
1145
+ .review-item:last-child { border-bottom: none; }
1146
+ .review-item:nth-child(even) { background: rgba(0, 0, 0, 0.03); }
1147
+
1148
+ .review-label {
1149
+ font-size: var(--text-sm);
1150
+ color: var(--color-text-secondary);
1151
+ flex-shrink: 0;
1152
+ min-width: 140px;
1153
+ }
1154
+
1155
+ .review-label--muted { color: var(--color-text-tertiary); font-style: italic; }
1156
+
1157
+ .review-value {
1158
+ font-size: var(--text-sm);
1159
+ color: var(--color-text);
1160
+ text-align: right;
1161
+ word-break: break-all;
1162
+ font-weight: var(--font-medium);
1163
+ }
1164
+
1165
+ .review-value.mono { font-family: var(--font-mono); font-size: 0.8rem; }
1166
+
1167
+ .install-error { margin-top: var(--space-3); color: var(--color-danger); font-size: var(--text-sm); }
1168
+
1169
+ /* ── Optional Add-ons ──────────────────────────────────────────────────── */
1170
+ .addon-row {
1171
+ border: 1px solid var(--color-border);
1172
+ border-radius: var(--radius-md);
1173
+ margin-bottom: var(--space-3);
1174
+ overflow: hidden;
1175
+ }
1176
+
1177
+ .addon-row--active { border-color: var(--color-primary); }
1178
+
1179
+ .addon-toggle-row {
1180
+ display: flex;
1181
+ align-items: flex-start;
1182
+ gap: var(--space-3);
1183
+ padding: var(--space-3) var(--space-4);
1184
+ }
1185
+
1186
+ .addon-toggle-label {
1187
+ display: flex;
1188
+ align-items: center;
1189
+ gap: var(--space-2);
1190
+ cursor: pointer;
1191
+ flex-shrink: 0;
1192
+ }
1193
+
1194
+ .addon-label-text { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-text); }
1195
+ .addon-help { font-size: var(--text-xs); color: var(--color-text-secondary); line-height: 1.4; padding-top: 2px; }
1196
+
1197
+ /* ── Reranking & Field Layout ──────────────────────────────────────────── */
1198
+ .reranking-options {
1199
+ padding: var(--space-2) var(--space-4) var(--space-3);
1200
+ border-left: 2px solid var(--color-border);
1201
+ margin-left: var(--space-4);
1202
+ margin-bottom: var(--space-3);
1203
+ }
1204
+
1205
+ .field-select {
1206
+ width: 100%;
1207
+ padding: var(--space-2) var(--space-3);
1208
+ border: 1px solid var(--color-border);
1209
+ border-radius: var(--radius-md);
1210
+ background: var(--color-bg);
1211
+ font-size: var(--text-sm);
1212
+ font-family: var(--font-sans);
1213
+ color: var(--color-text);
1214
+ }
1215
+
1216
+ .field-row {
1217
+ display: flex;
1218
+ gap: var(--space-4);
1219
+ }
1220
+
1221
+ .field-group-half {
1222
+ flex: 1;
1223
+ min-width: 0;
1224
+ }
1225
+
1226
+ /* ── Deploy Screen ─────────────────────────────────────────────────────── */
1227
+ .deploy-header { text-align: center; margin-bottom: var(--space-6); }
1228
+
1229
+ .deploy-progress-summary {
1230
+ margin-bottom: var(--space-5);
1231
+ padding: var(--space-4);
1232
+ border: 1px solid var(--color-border);
1233
+ border-radius: var(--radius-lg);
1234
+ background: var(--color-bg-secondary);
1235
+ }
1236
+
1237
+ .deploy-progress-meta {
1238
+ display: flex;
1239
+ justify-content: space-between;
1240
+ align-items: center;
1241
+ gap: var(--space-3);
1242
+ margin-bottom: var(--space-3);
1243
+ }
1244
+
1245
+ .deploy-progress-label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); }
1246
+ .deploy-progress-value { font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-primary-hover); }
1247
+ .deploy-progress-value--error { color: var(--color-danger); }
1248
+
1249
+ .deploy-progress-bar {
1250
+ height: 10px;
1251
+ border-radius: 999px;
1252
+ overflow: hidden;
1253
+ background: var(--color-bg);
1254
+ border: 1px solid var(--color-border);
1255
+ }
1256
+
1257
+ .deploy-progress-bar--error { background: #fef2f2; border-color: rgba(220, 38, 38, 0.24); }
1258
+
1259
+ .deploy-progress-fill {
1260
+ height: 100%;
1261
+ border-radius: inherit;
1262
+ background: linear-gradient(90deg, #ffb020 0%, #2f9e44 100%);
1263
+ transition: width 0.4s ease;
1264
+ }
1265
+
1266
+ .deploy-progress-fill--error { background: linear-gradient(90deg, #f59e0b 0%, #dc2626 100%); }
1267
+
1268
+ .deploy-progress-note { margin: var(--space-3) 0 0; font-size: var(--text-xs); color: var(--color-text-secondary); line-height: 1.5; }
1269
+
1270
+ .deploy-services { display: flex; flex-direction: column; gap: var(--space-3); margin-bottom: var(--space-6); }
1271
+
1272
+ .deploy-service-row {
1273
+ display: grid;
1274
+ grid-template-columns: 28px 1fr 120px;
1275
+ align-items: center;
1276
+ gap: var(--space-3);
1277
+ padding: var(--space-3) var(--space-4);
1278
+ background: var(--color-bg);
1279
+ border: 1px solid var(--color-border);
1280
+ border-radius: var(--radius-md);
1281
+ }
1282
+
1283
+ .deploy-service-indicator { display: flex; align-items: center; justify-content: center; }
1284
+ .deploy-check,
1285
+ .deploy-warning,
1286
+ .deploy-spinner { display: flex; align-items: center; justify-content: center; }
1287
+ .deploy-service-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
1288
+ .deploy-service-name { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-text); }
1289
+ .deploy-service-status { font-size: var(--text-xs); color: var(--color-text-tertiary); }
1290
+
1291
+ .deploy-service-bar { height: 6px; background: var(--color-bg-secondary); border-radius: 3px; overflow: hidden; }
1292
+ .deploy-bar-fill { height: 100%; border-radius: 3px; transition: all 0.4s ease; }
1293
+ .deploy-bar-fill.indeterminate { width: 40%; background: var(--color-primary); animation: indeterminate-bar 1.5s ease-in-out infinite; }
1294
+ .deploy-bar-fill.ready { width: 72%; background: #ffb020; animation: none; }
1295
+ .deploy-bar-fill.stopped { width: 72%; background: #d97706; animation: none; opacity: 0.9; }
1296
+ .deploy-bar-fill.complete { width: 100%; background: var(--color-success); animation: none; }
1297
+
1298
+ @keyframes indeterminate-bar { 0% { transform: translateX(-100%); } 50% { transform: translateX(150%); } 100% { transform: translateX(-100%); } }
1299
+ @media (prefers-reduced-motion: reduce) { .deploy-bar-fill.indeterminate { animation: none; width: 100%; opacity: 0.5; } }
1300
+
1301
+ .deploy-done { text-align: center; margin-top: var(--space-4); }
1302
+
1303
+ /* Deploy failure card */
1304
+ .deploy-failure-card {
1305
+ margin-bottom: var(--space-5);
1306
+ padding: var(--space-4);
1307
+ border-radius: var(--radius-lg);
1308
+ border: 1px solid rgba(220, 38, 38, 0.18);
1309
+ background: linear-gradient(180deg, rgba(254, 242, 242, 0.96) 0%, rgba(255, 251, 251, 0.99) 100%);
1310
+ }
1311
+
1312
+ .deploy-failure-header { margin-bottom: var(--space-2); }
1313
+ .deploy-failure-kicker { display: inline-block; margin-bottom: var(--space-1); font-size: var(--text-xs); font-weight: var(--font-semibold); text-transform: uppercase; letter-spacing: 0.06em; color: #b91c1c; }
1314
+ .deploy-failure-header h3 { margin: 0; font-size: var(--text-lg); color: var(--color-text); }
1315
+ .deploy-failure-summary { margin: 0 0 var(--space-3); font-size: var(--text-sm); color: var(--color-text-secondary); line-height: 1.55; }
1316
+
1317
+ /* Deploy tips */
1318
+ .deploy-tips {
1319
+ margin-top: var(--space-5);
1320
+ padding: var(--space-4);
1321
+ border-radius: var(--radius-lg);
1322
+ border: 1px solid rgba(255, 176, 32, 0.28);
1323
+ background: linear-gradient(180deg, rgba(255, 248, 235, 0.95) 0%, rgba(255, 253, 247, 0.95) 100%);
1324
+ }
1325
+
1326
+ .deploy-tips-header { margin-bottom: var(--space-3); }
1327
+ .deploy-tips-kicker { display: inline-block; font-size: var(--text-xs); font-weight: var(--font-semibold); text-transform: uppercase; letter-spacing: 0.06em; color: #a16207; margin-bottom: var(--space-1); }
1328
+ .deploy-tips h3 { margin: 0; font-size: var(--text-base); color: var(--color-text); }
1329
+ .deploy-tips ul { margin: 0; padding-left: 1.1rem; display: grid; gap: var(--space-2); }
1330
+ .deploy-tips li { font-size: var(--text-sm); color: var(--color-text-secondary); line-height: 1.5; }
1331
+
1332
+ /* Deploy error details */
1333
+ .deploy-error-details {
1334
+ margin-top: var(--space-3);
1335
+ padding: var(--space-3);
1336
+ border: 1px solid var(--color-border);
1337
+ border-radius: var(--radius-md);
1338
+ background: var(--color-bg-secondary);
1339
+ }
1340
+
1341
+ .deploy-error-details summary { cursor: pointer; font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); }
1342
+ .deploy-error-details pre { margin: var(--space-3) 0 0; white-space: pre-wrap; word-break: break-word; font-size: var(--text-xs); color: var(--color-text-secondary); line-height: 1.5; }
1343
+
1344
+ /* ── Spinner ───────────────────────────────────────────────────────────── */
1345
+ .spinner {
1346
+ display: inline-block;
1347
+ width: 14px;
1348
+ height: 14px;
1349
+ border: 2px solid currentColor;
1350
+ border-right-color: transparent;
1351
+ border-radius: 50%;
1352
+ animation: spin 0.6s linear infinite;
1353
+ }
1354
+
1355
+ @keyframes spin { to { transform: rotate(360deg); } }
1356
+ @media (prefers-reduced-motion: reduce) { .spinner { animation: none; } }
1357
+
1358
+ /* ── Loading State ─────────────────────────────────────────────────────── */
1359
+ .loading-state { display: flex; justify-content: center; align-items: center; padding: var(--space-8); }
1360
+
1361
+ /* ── Done State ────────────────────────────────────────────────────────── */
1362
+ .done-state { text-align: center; padding: var(--space-4) 0; }
1363
+ .done-icon { display: inline-block; margin-bottom: var(--space-4); }
1364
+ .done-state h2 { font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-text); margin-bottom: var(--space-2); }
1365
+ .done-subtitle { font-size: var(--text-sm); color: var(--color-text-secondary); margin-bottom: var(--space-5); }
1366
+
1367
+ .service-list {
1368
+ list-style: none;
1369
+ display: flex;
1370
+ flex-wrap: wrap;
1371
+ gap: var(--space-2);
1372
+ justify-content: center;
1373
+ margin-bottom: var(--space-6);
1374
+ }
1375
+
1376
+ .service-list li {
1377
+ font-size: var(--text-sm);
1378
+ background: var(--color-success-bg);
1379
+ color: var(--color-text);
1380
+ border: 1px solid var(--color-success-border);
1381
+ padding: var(--space-2) var(--space-4);
1382
+ border-radius: var(--radius-md);
1383
+ display: flex;
1384
+ align-items: center;
1385
+ gap: var(--space-2);
1386
+ width: 100%;
1387
+ justify-content: flex-start;
1388
+ }
1389
+
1390
+ .service-list {
1391
+ flex-direction: column;
1392
+ align-items: stretch;
1393
+ max-width: 420px;
1394
+ margin-left: auto;
1395
+ margin-right: auto;
1396
+ }
1397
+
1398
+ .deploy-svc-name {
1399
+ font-weight: var(--font-semibold);
1400
+ min-width: 130px;
1401
+ }
1402
+
1403
+ .deploy-svc-link {
1404
+ font-family: var(--font-mono);
1405
+ font-size: var(--text-xs);
1406
+ color: var(--color-accent);
1407
+ text-decoration: none;
1408
+ }
1409
+
1410
+ .deploy-svc-link:hover {
1411
+ text-decoration: underline;
1412
+ }
1413
+
1414
+ .deploy-svc-status {
1415
+ font-size: var(--text-xs);
1416
+ color: var(--color-success);
1417
+ margin-left: auto;
1418
+ }
1419
+
1420
+ /* ── Voice Hint ───────────────────────────────────────────────────────── */
1421
+ .voice-hint {
1422
+ font-size: var(--text-sm);
1423
+ color: var(--color-text-secondary);
1424
+ background: var(--color-bg-secondary);
1425
+ border: 1px solid var(--color-border);
1426
+ border-radius: var(--radius-md);
1427
+ padding: var(--space-3) var(--space-4);
1428
+ margin-bottom: var(--space-4);
1429
+ line-height: 1.5;
1430
+ }
1431
+
1432
+ /* ── Options Sections ─────────────────────────────────────────────────── */
1433
+ .options-section {
1434
+ margin-bottom: var(--space-5);
1435
+ }
1436
+
1437
+ .options-section-title {
1438
+ font-size: var(--text-base);
1439
+ font-weight: var(--font-bold);
1440
+ color: var(--color-text);
1441
+ margin-bottom: var(--space-1);
1442
+ }
1443
+
1444
+ .options-section-desc {
1445
+ font-size: var(--text-xs);
1446
+ color: var(--color-text-secondary);
1447
+ margin-bottom: var(--space-3);
1448
+ line-height: 1.5;
1449
+ }
1450
+
1451
+ /* ── Toggle Card Grid ─────────────────────────────────────────────────── */
1452
+ .toggle-grid {
1453
+ display: flex;
1454
+ flex-direction: column;
1455
+ gap: 6px;
1456
+ }
1457
+
1458
+ .toggle-card {
1459
+ background: var(--color-bg);
1460
+ border: 1.5px solid var(--color-border);
1461
+ border-radius: var(--radius-md);
1462
+ padding: 10px 14px;
1463
+ cursor: pointer;
1464
+ transition: all 0.15s;
1465
+ }
1466
+
1467
+ .toggle-card:hover {
1468
+ border-color: var(--color-border-hover);
1469
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
1470
+ }
1471
+
1472
+ .toggle-card.on {
1473
+ border-color: var(--color-primary-hover);
1474
+ background: var(--color-primary-subtle);
1475
+ }
1476
+
1477
+ .toggle-card.locked {
1478
+ cursor: default;
1479
+ opacity: 0.85;
1480
+ }
1481
+
1482
+ .toggle-card.locked:hover {
1483
+ box-shadow: none;
1484
+ }
1485
+
1486
+ .toggle-card-header {
1487
+ display: flex;
1488
+ align-items: center;
1489
+ gap: 10px;
1490
+ }
1491
+
1492
+ .toggle-card-icon {
1493
+ width: 32px;
1494
+ height: 32px;
1495
+ border-radius: var(--radius-sm);
1496
+ background: var(--color-bg-secondary);
1497
+ border: 1px solid var(--color-border);
1498
+ display: grid;
1499
+ place-items: center;
1500
+ font-size: 16px;
1501
+ flex-shrink: 0;
1502
+ }
1503
+
1504
+ .toggle-card-info {
1505
+ flex: 1;
1506
+ min-width: 0;
1507
+ }
1508
+
1509
+ .toggle-card-name {
1510
+ font-size: var(--text-sm);
1511
+ font-weight: var(--font-semibold);
1512
+ display: flex;
1513
+ align-items: center;
1514
+ gap: 6px;
1515
+ flex-wrap: wrap;
1516
+ }
1517
+
1518
+ .toggle-card-desc {
1519
+ font-size: var(--text-xs);
1520
+ color: var(--color-text-tertiary);
1521
+ margin-top: 1px;
1522
+ overflow: hidden;
1523
+ text-overflow: ellipsis;
1524
+ white-space: nowrap;
1525
+ }
1526
+
1527
+ .toggle-card-switch {
1528
+ flex-shrink: 0;
1529
+ }
1530
+
1531
+ /* ── Toggle Track (iOS-style) ─────────────────────────────────────────── */
1532
+ .toggle-track {
1533
+ width: 36px;
1534
+ height: 20px;
1535
+ border-radius: 10px;
1536
+ background: var(--color-border);
1537
+ position: relative;
1538
+ transition: background 0.2s;
1539
+ }
1540
+
1541
+ .toggle-track.on {
1542
+ background: var(--color-primary-hover);
1543
+ }
1544
+
1545
+ .toggle-track.locked {
1546
+ background: var(--color-success);
1547
+ }
1548
+
1549
+ .toggle-thumb {
1550
+ width: 16px;
1551
+ height: 16px;
1552
+ border-radius: 50%;
1553
+ background: white;
1554
+ position: absolute;
1555
+ top: 2px;
1556
+ left: 2px;
1557
+ transition: transform 0.2s;
1558
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
1559
+ }
1560
+
1561
+ .toggle-track.on .toggle-thumb,
1562
+ .toggle-track.locked .toggle-thumb {
1563
+ transform: translateX(16px);
1564
+ }
1565
+
1566
+ /* ── Channel Credential Expansion ─────────────────────────────────────── */
1567
+ .toggle-card.wide {
1568
+ grid-column: 1 / -1;
1569
+ }
1570
+
1571
+ .toggle-card .pcard-auth {
1572
+ margin-top: var(--space-3);
1573
+ padding-top: var(--space-3);
1574
+ border-top: 1px solid var(--color-border);
1575
+ animation: fadeIn 0.2s ease;
1576
+ }
1577
+
1578
+ .channel-cred-label {
1579
+ display: block;
1580
+ font-size: var(--text-xs);
1581
+ font-weight: var(--font-semibold);
1582
+ color: var(--color-text-secondary);
1583
+ margin-bottom: 4px;
1584
+ }
1585
+
1586
+ .channel-cred-required {
1587
+ color: var(--color-error, #ef4444);
1588
+ }
1589
+
1590
+ /* ── Hidden utility ────────────────────────────────────────────────────── */
1591
+ .hidden { display: none !important; }
1592
+
1593
+ /* ── Responsive ────────────────────────────────────────────────────────── */
1594
+ @media (min-width: 900px) {
1595
+ .wizard-card { max-width: 800px; }
1596
+ }
1597
+
1598
+ @media (min-width: 1200px) {
1599
+ /* On wide displays give the card more room so the provider grid and
1600
+ model lists don't feel cramped with 400px of empty gutter on each side. */
1601
+ .wizard-card { max-width: 920px; }
1602
+ }
1603
+
1604
+ @media (max-width: 540px) {
1605
+ /* Reduce page padding so the card has more usable width on phones */
1606
+ .setup-page { padding: var(--space-3); }
1607
+ .wizard-card {
1608
+ max-height: calc(100vh - 24px);
1609
+ min-height: 0;
1610
+ border-radius: 16px;
1611
+ }
1612
+ .wizard-header { padding: var(--space-4) var(--space-5) var(--space-3); }
1613
+ .wizard-body { padding: var(--space-4) var(--space-5) var(--space-4); }
1614
+ /* No margin compensation needed — step-actions no longer uses negative margins */
1615
+ }
1616
+
1617
+ @media (max-width: 480px) {
1618
+ .review-item { flex-direction: column; align-items: flex-start; }
1619
+ .review-value { text-align: left; }
1620
+ .deploy-service-row { grid-template-columns: 28px 1fr; }
1621
+ .deploy-service-bar { display: none; }
1622
+ }
1623
+
1624
+ .rerun-banner {
1625
+ display: flex;
1626
+ align-items: center;
1627
+ justify-content: space-between;
1628
+ padding: 8px 16px;
1629
+ background: var(--color-surface, #f0f4ff);
1630
+ border-bottom: 1px solid var(--color-border, #dde3f0);
1631
+ font-size: 0.8rem;
1632
+ color: var(--color-text-secondary, #555);
1633
+ }
1634
+ .rerun-back-link {
1635
+ color: var(--color-primary, #4f6ef7);
1636
+ text-decoration: none;
1637
+ font-weight: 500;
1638
+ }
1639
+ .rerun-back-link:hover { text-decoration: underline; }