cozyclay 1.9.0 → 2.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 (286) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/bin/agent/agent-routes.mjs +74 -70
  3. package/bin/agent/agent-runner.mjs +10 -3
  4. package/bin/agent/motion-runtime.mjs +32 -260
  5. package/bin/agent/providers.mjs +46 -3
  6. package/bin/agent/session-store.mjs +41 -5
  7. package/bin/agent/studio-prompt.mjs +1 -1
  8. package/bin/agent/studio-tools.mjs +48 -11
  9. package/bin/cozyclay.mjs +26 -8
  10. package/bin/live/cli.mjs +22 -3
  11. package/bin/mcp-runtime.mjs +35 -20
  12. package/bin/telemetry-state.mjs +5 -2
  13. package/bin/update-check.mjs +15 -0
  14. package/dist/app/index.html +6 -6
  15. package/dist/assets/analytics-MVZOEW8O.js +1 -0
  16. package/dist/assets/app-C1sdVbg4.css +1 -0
  17. package/dist/assets/app-CA55tcI3.js +4876 -0
  18. package/dist/assets/{demo-B-eg1CT8.js → demo-ByeYp-dY.js} +1 -1
  19. package/dist/assets/{first-shot-handoff-CGgnvNu8.js → first-shot-handoff-DgT28ZiV.js} +1 -1
  20. package/dist/assets/{landing-IbRp3FnQ.js → landing-BaXkpFip.js} +1 -1
  21. package/dist/assets/shot-prompt-CbqWcWYi.css +1 -0
  22. package/dist/assets/shot-prompt-Yrt99wZx.js +17 -0
  23. package/dist/assets/{ticket-BgIzOBOf.js → ticket-BcmsnHn5.js} +1 -1
  24. package/dist/assets/workflow-DRdwoDBT.css +1 -0
  25. package/dist/assets/workflow-dNPGY9xz.js +179 -0
  26. package/dist/cozyclay-package.json +1 -1
  27. package/dist/fonts/IBM-Plex-Sans-OFL.txt +92 -0
  28. package/dist/fonts/JetBrains-Mono-OFL.txt +93 -0
  29. package/dist/fonts/README.md +13 -9
  30. package/dist/fonts/ibm-plex-sans-400-latin.woff2 +0 -0
  31. package/dist/fonts/ibm-plex-sans-500-latin.woff2 +0 -0
  32. package/dist/fonts/ibm-plex-sans-600-latin.woff2 +0 -0
  33. package/dist/fonts/jetbrains-mono-400-latin.woff2 +0 -0
  34. package/dist/fonts/jetbrains-mono-500-latin.woff2 +0 -0
  35. package/dist/index.html +7 -7
  36. package/dist/privacy/index.html +13 -8
  37. package/dist/sitemap.xml +6 -6
  38. package/dist/workflow/index.html +5 -5
  39. package/mcp/LIVE-PROTOCOL.md +1 -1
  40. package/mcp/live-hub.mjs +35 -93
  41. package/mcp/mesh-file.mjs +48 -0
  42. package/mcp/server.mjs +6 -77
  43. package/mcp/tool-handlers.mjs +224 -377
  44. package/package.json +2 -1
  45. package/src/App.jsx +1273 -9075
  46. package/src/analytics.js +393 -9
  47. package/src/app-context.js +211 -0
  48. package/src/app-stage.jsx +25 -24
  49. package/src/ardy/auto-fix-panel.css +108 -0
  50. package/src/ardy/collision-blockers.js +9 -3
  51. package/src/ardy/fix-collisions.js +10 -66
  52. package/src/ardy/ground.js +4 -4
  53. package/src/ardy/ik-drag.js +101 -0
  54. package/src/ardy/ik-key-json.js +43 -0
  55. package/src/ardy/ik.js +122 -76
  56. package/src/ardy/physics-panel.css +2 -0
  57. package/src/ardy/physics-panel.jsx +17 -5
  58. package/src/ardy/platform-fit-panel.css +64 -0
  59. package/src/ardy/platform-fit-panel.jsx +40 -0
  60. package/src/ardy/platform-fit.js +326 -0
  61. package/src/ardy/playback.js +166 -20
  62. package/src/ardy/range-pin.js +299 -0
  63. package/src/ardy/timeline-coordinates.js +26 -0
  64. package/src/ardy/timeline.css +1199 -0
  65. package/src/ardy/timeline.jsx +149 -41
  66. package/src/ardy/waypoints.js +2 -2
  67. package/src/asset-pane.css +462 -0
  68. package/src/asset-pane.jsx +461 -232
  69. package/src/command-bus.js +349 -0
  70. package/src/commands/ai.js +31 -0
  71. package/src/commands/cast.js +140 -0
  72. package/src/commands/elements/character.js +13 -0
  73. package/src/commands/elements/motion.js +14 -0
  74. package/src/commands/elements/object.js +22 -0
  75. package/src/commands/elements/scene.js +16 -0
  76. package/src/commands/elements/shot.js +9 -0
  77. package/src/commands/elements/stage.js +11 -0
  78. package/src/commands/elements.js +155 -0
  79. package/src/commands/export.js +20 -0
  80. package/src/commands/index.js +40 -0
  81. package/src/commands/motion.js +231 -0
  82. package/src/commands/objects.js +174 -0
  83. package/src/commands/project.js +53 -0
  84. package/src/commands/scene.js +81 -0
  85. package/src/commands/shared.js +19 -0
  86. package/src/commands/shot.js +103 -0
  87. package/src/commands/stage.js +17 -0
  88. package/src/commands/view.js +42 -0
  89. package/src/document-store.js +144 -0
  90. package/src/domains/cast.js +1007 -0
  91. package/src/domains/motion.js +3219 -0
  92. package/src/domains/objects.js +932 -0
  93. package/src/domains/scenes.js +817 -0
  94. package/src/domains/shots.js +404 -0
  95. package/src/domains/stage.js +93 -0
  96. package/src/dualview.jsx +113 -57
  97. package/src/facing-marks.js +3 -0
  98. package/src/first-success-guide.jsx +14 -14
  99. package/src/grid-view.js +18 -5
  100. package/src/hierarchy-model.js +24 -16
  101. package/src/hierarchy-panel.css +386 -0
  102. package/src/hierarchy-panel.jsx +150 -21
  103. package/src/{fal-motion-client.js → i2v-motion-client.js} +13 -13
  104. package/src/i2v-motion-studio.jsx +180 -0
  105. package/src/ik-camera.js +3 -0
  106. package/src/main.jsx +6 -0
  107. package/src/motion/generation.js +105 -0
  108. package/src/motion-readiness-ui.jsx +4 -4
  109. package/src/motion-readiness.js +11 -0
  110. package/src/motion-trail.js +366 -9
  111. package/src/object-gizmo.jsx +7 -1
  112. package/src/otio.js +2 -1
  113. package/src/panels/CameraPanel.jsx +60 -0
  114. package/src/panels/CharacterTransformPanel.jsx +48 -0
  115. package/src/panels/EnvironmentPanel.jsx +40 -0
  116. package/src/panels/Foldout.jsx +32 -0
  117. package/src/panels/LightPanel.jsx +24 -0
  118. package/src/panels/ObjectTransformPanel.jsx +554 -0
  119. package/src/panels/PosePanel.jsx +97 -0
  120. package/src/panels/ProjectPanel.jsx +33 -0
  121. package/src/panels/PromptBlocksPanel.jsx +442 -0
  122. package/src/panels/PropsPanel.jsx +70 -0
  123. package/src/panels/ReferenceImageField.jsx +91 -0
  124. package/src/panels/RigControlPanel.jsx +78 -0
  125. package/src/panels/RigPanel.jsx +37 -0
  126. package/src/panels/SubjectBox.jsx +47 -0
  127. package/src/panels/SubjectsPanel.jsx +39 -0
  128. package/src/panels/VideoCapturePanel.jsx +180 -0
  129. package/src/panels/details.css +1171 -0
  130. package/src/panels/motion.css +197 -0
  131. package/src/panels/pose.css +39 -0
  132. package/src/planview.jsx +60 -31
  133. package/src/posestudio.jsx +59 -4
  134. package/src/project-browser.css +1073 -0
  135. package/src/project-browser.jsx +284 -123
  136. package/src/range-pin-object-transform.js +19 -0
  137. package/src/range-pin-panel.css +518 -0
  138. package/src/range-pin-panel.jsx +344 -0
  139. package/src/result-modal.jsx +5 -5
  140. package/src/room.jsx +79 -51
  141. package/src/scene-objects.js +37 -1
  142. package/src/scenes.js +5 -0
  143. package/src/semantic-edit.js +2 -0
  144. package/src/settings-menu.jsx +39 -105
  145. package/src/shell/BottomDock.jsx +450 -0
  146. package/src/shell/DetailsSlot.jsx +513 -0
  147. package/src/shell/LibrarySlot.jsx +86 -0
  148. package/src/shell/MenuBar.jsx +601 -0
  149. package/src/shell/OutlinerSlot.jsx +50 -0
  150. package/src/shell/PreferencesDialog.jsx +538 -0
  151. package/src/shell/PreferencesSlot.jsx +40 -0
  152. package/src/shell/StatusBar.jsx +125 -0
  153. package/src/shell/StudioShell.jsx +92 -0
  154. package/src/shell/TopBar.jsx +129 -0
  155. package/src/shell/ViewportToolbar.jsx +656 -0
  156. package/src/shell/agent-glass.css +296 -0
  157. package/src/shell/dock.css +93 -0
  158. package/src/shell/glass-regions.css +985 -0
  159. package/src/shell/glass.css +687 -0
  160. package/src/shell/log-store.js +52 -0
  161. package/src/shell/mode.css +9 -0
  162. package/src/shell/preferences.css +651 -0
  163. package/src/shell/shell.css +282 -0
  164. package/src/shell/studio-shell-context.js +19 -0
  165. package/src/shell/topbar.css +435 -0
  166. package/src/shell/viewport.css +451 -0
  167. package/src/store/authored-intent.js +22 -0
  168. package/src/store/runtime-adapters.js +92 -0
  169. package/src/store/scene-stage.js +21 -0
  170. package/src/store/use-document-store.js +14 -0
  171. package/src/studio-actions.js +210 -0
  172. package/src/studio-agent-commands.js +41 -271
  173. package/src/studio-agent-context.js +39 -10
  174. package/src/studio-agent-motion.js +122 -373
  175. package/src/studio-agent-protocol.js +67 -31
  176. package/src/studio-app-binding.js +379 -0
  177. package/src/studio-contact-sheet.js +73 -0
  178. package/src/studio-elements.js +58 -51
  179. package/src/styles/themes.css +200 -0
  180. package/src/styles/tokens.css +69 -0
  181. package/src/styles.css +460 -1742
  182. package/src/theme.js +44 -0
  183. package/src/timeline-extent.js +16 -0
  184. package/src/trail-key-conflicts.js +39 -0
  185. package/src/trail-pick.js +59 -0
  186. package/src/ui.jsx +8 -8
  187. package/src/use-case-question.jsx +66 -0
  188. package/src/workflow/AgentPanel.jsx +82 -69
  189. package/src/workflow/agent-client.js +12 -2
  190. package/src/workflow/agent-panel.css +34 -32
  191. package/src/workflow/cozy-scene-node.css +2 -0
  192. package/src/workflow/workflow.css +2 -0
  193. package/tools/ardy/__pycache__/cclay_gvhmr_worker.cpython-313.pyc +0 -0
  194. package/tools/ardy/bridge.mjs +164 -146
  195. package/tools/ardy/visual-qa.mjs +5 -5
  196. package/tools/bench/EXP3.md +61 -0
  197. package/tools/bench/cclay_bench_extract_incam.py +125 -0
  198. package/tools/bench/cclay_bench_extract_obs.py +204 -0
  199. package/tools/bench/cclay_bench_runner.py +42 -0
  200. package/tools/bench/cube-contact.mjs +162 -0
  201. package/tools/bench/exp3.mjs +152 -0
  202. package/tools/bench/extract-bench-lib.mjs +216 -0
  203. package/tools/bench/extract-bench.mjs +302 -0
  204. package/tools/bench/fal-generate.mjs +88 -0
  205. package/tools/bench/fit/README.md +189 -0
  206. package/tools/bench/fit/camera.mjs +59 -0
  207. package/tools/bench/fit/contact.mjs +419 -0
  208. package/tools/bench/fit/footlock.mjs +234 -0
  209. package/tools/bench/fit/motion.mjs +85 -0
  210. package/tools/bench/fit/pin.mjs +27 -0
  211. package/tools/bench/fit/remote.mjs +105 -0
  212. package/tools/bench/fit-bench.mjs +126 -0
  213. package/tools/bench/fit-sanity.mjs +45 -0
  214. package/tools/bench/metrics.mjs +313 -0
  215. package/tools/bench/obs/depth.mjs +258 -0
  216. package/tools/bench/obs/extrinsics.mjs +175 -0
  217. package/tools/bench/obs/fit_mannequin_betas.py +340 -0
  218. package/tools/bench/obs/ground.mjs +294 -0
  219. package/tools/bench/obs/heading.mjs +151 -0
  220. package/tools/bench/obs/ladder.mjs +555 -0
  221. package/tools/bench/obs/mannequin-betas.json +124 -0
  222. package/tools/bench/obs/remote.mjs +83 -0
  223. package/tools/bench/obs/rest_joints.py +52 -0
  224. package/tools/bench/obs/ybot-targets.mjs +49 -0
  225. package/tools/bench/obs-bench.mjs +520 -0
  226. package/tools/bench/score.mjs +343 -0
  227. package/tools/bench/summarize.mjs +86 -0
  228. package/tools/dev/pages/privacy.html +13 -8
  229. package/tools/gt-render/browser.mjs +159 -0
  230. package/tools/gt-render/camera-math.mjs +276 -0
  231. package/tools/gt-render/page.mjs +267 -0
  232. package/tools/gt-render/render.mjs +514 -0
  233. package/tools/gt-render/scene-box.mjs +31 -0
  234. package/tools/gt-render/take-transform.mjs +87 -0
  235. package/tools/morphgs/assets/gen_truth.py +39 -0
  236. package/tools/morphgs/assets/mesh_ori_rig.txt +27 -0
  237. package/tools/morphgs/assets/playback-check.mjs +30 -0
  238. package/tools/morphgs/demo-gate.sh +26 -0
  239. package/tools/morphgs/fbx2morphgs.mjs +68 -0
  240. package/tools/morphgs/morphgs-to-cskel27.mjs +105 -0
  241. package/tools/morphgs/patches/preprocess_src-none-mode.patch +76 -0
  242. package/tools/morphgs/setup-on-cluster.sh +126 -0
  243. package/tools/qa/css-rule-usage.mjs +283 -0
  244. package/tools/qa/studio-control-count.mjs +70 -32
  245. package/tools/run-tests.mjs +134 -12
  246. package/tools/track/DESIGN.md +513 -0
  247. package/tools/track/backfill-provenance.mjs +116 -0
  248. package/tools/track/budget.mjs +8 -0
  249. package/tools/track/check-rig.mjs +209 -0
  250. package/tools/track/diagnostics.schema.json +60 -0
  251. package/tools/track/export-rig.mjs +256 -0
  252. package/tools/track/fallback.mjs +7 -0
  253. package/tools/track/fk-parity-fixture.mjs +161 -0
  254. package/tools/track/gate.mjs +349 -0
  255. package/tools/track/masks.mjs +318 -0
  256. package/tools/track/metrics.mjs +201 -0
  257. package/tools/track/publish-obs.mjs +108 -0
  258. package/tools/track/py/check_env.py +61 -0
  259. package/tools/track/py/eval_lr.py +229 -0
  260. package/tools/track/py/lr_viterbi.py +294 -0
  261. package/tools/track/py/masks.py +405 -0
  262. package/tools/track/py/objective.py +382 -0
  263. package/tools/track/py/rig.py +508 -0
  264. package/tools/track/py/scene.py +326 -0
  265. package/tools/track/py/test_joint_indices.py +123 -0
  266. package/tools/track/py/test_lr_viterbi.py +195 -0
  267. package/tools/track/py/test_masks.py +229 -0
  268. package/tools/track/py/test_rig.py +288 -0
  269. package/tools/track/py/test_scene.py +354 -0
  270. package/tools/track/py/test_track.py +328 -0
  271. package/tools/track/py/track.py +411 -0
  272. package/tools/track/remote.mjs +140 -0
  273. package/tools/track/rig-dump.mjs +227 -0
  274. package/tools/track/run-box-tests.mjs +14 -0
  275. package/tools/track/run-box.mjs +168 -0
  276. package/tools/track/setup-box.sh +59 -0
  277. package/tools/track/study-2d.mjs +728 -0
  278. package/dist/assets/analytics-B1hnH66c.js +0 -1
  279. package/dist/assets/app-BWusbqgO.js +0 -4861
  280. package/dist/assets/app-qKDo4PBX.css +0 -1
  281. package/dist/assets/shot-prompt-CHUtw6af.js +0 -17
  282. package/dist/assets/shot-prompt-C_g2BHVc.css +0 -1
  283. package/dist/assets/workflow-CVwzMhz2.js +0 -179
  284. package/dist/assets/workflow-DsudxKHF.css +0 -1
  285. package/src/fal-motion-studio.jsx +0 -180
  286. package/src/scene-history.js +0 -129
@@ -0,0 +1,1073 @@
1
+ /* v2 start / project regions. Every selector is rooted so this screen wins
2
+ over the legacy project-browser rules in styles.css without editing them. */
3
+
4
+ .v2-start-screen {
5
+ position: fixed;
6
+ inset: var(--start-inset, 0);
7
+ z-index: var(--start-z-index, 200);
8
+ display: flex;
9
+ overflow: hidden;
10
+ background: var(--surface-0, #070708);
11
+ color: var(--text-1, #e4e4e7);
12
+ font-family: var(--sans, 'IBM Plex Sans'), system-ui, sans-serif;
13
+ font-size: var(--start-ui-size, 12px);
14
+ -webkit-font-smoothing: antialiased;
15
+ }
16
+
17
+ .v2-start-screen *,
18
+ .v2-project-name-dialog-backdrop *,
19
+ .v2-first-success-guide * {
20
+ box-sizing: border-box;
21
+ }
22
+
23
+ .v2-start-screen button,
24
+ .v2-start-screen input,
25
+ .v2-start-screen select,
26
+ .v2-project-name-dialog-backdrop button,
27
+ .v2-project-name-dialog-backdrop input,
28
+ .v2-first-success-guide button {
29
+ font: inherit;
30
+ }
31
+
32
+ .v2-start-screen button,
33
+ .v2-project-name-dialog-backdrop button,
34
+ .v2-first-success-guide button {
35
+ cursor: pointer;
36
+ }
37
+
38
+ .v2-start-screen button:focus-visible,
39
+ .v2-start-screen input:focus-visible,
40
+ .v2-start-screen select:focus-visible,
41
+ .v2-project-name-dialog-backdrop button:focus-visible,
42
+ .v2-project-name-dialog-backdrop input:focus-visible,
43
+ .v2-first-success-guide button:focus-visible {
44
+ outline: var(--start-focus-width, 2px) solid var(--select, #e8a33d);
45
+ outline-offset: var(--start-focus-offset, 2px);
46
+ }
47
+
48
+ /* Legacy rules use `.project-browser-backdrop.startup` and
49
+ `.project-browser.startup`. These selectors intentionally carry one more
50
+ class than the legacy rules so the v2 shell stays full-bleed regardless of
51
+ stylesheet load order. */
52
+ .v2-start-screen.project-browser-backdrop,
53
+ .v2-start-screen.project-browser-backdrop.startup {
54
+ align-items: stretch;
55
+ justify-content: stretch;
56
+ pointer-events: auto;
57
+ background: var(--surface-0, #070708);
58
+ }
59
+
60
+ .v2-start-screen .v2-start-window.project-browser,
61
+ .v2-start-screen .v2-start-window.project-browser.startup {
62
+ width: var(--start-window-width, 100%);
63
+ max-width: var(--start-window-max-width, none);
64
+ height: var(--start-window-height, 100%);
65
+ max-height: var(--start-window-max-height, none);
66
+ min-width: var(--start-window-min-width, 0);
67
+ min-height: var(--start-window-min-height, 0);
68
+ flex: 1 1 auto;
69
+ gap: 0;
70
+ padding: 0;
71
+ border: 0;
72
+ border-radius: 0;
73
+ box-shadow: none;
74
+ overflow: hidden;
75
+ display: flex;
76
+ flex-direction: row;
77
+ background: var(--surface-0, #070708);
78
+ }
79
+
80
+ /* --------------------------------------------------------------- layout --- */
81
+
82
+ .v2-start-screen .v2-start-nav {
83
+ width: var(--start-nav-width, 232px);
84
+ min-width: var(--start-nav-width, 232px);
85
+ flex: 0 0 var(--start-nav-width, 232px);
86
+ display: flex;
87
+ flex-direction: column;
88
+ background: var(--surface-bar, #121214);
89
+ }
90
+
91
+ .v2-start-screen .v2-start-brand {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: var(--start-brand-gap, 10px);
95
+ padding: var(--start-brand-pad-top, 24px) var(--start-brand-pad-x, 20px) var(--start-brand-pad-bottom, 28px);
96
+ color: var(--text-1, #e4e4e7);
97
+ }
98
+
99
+ .v2-start-screen .v2-start-brand strong {
100
+ font-size: var(--start-brand-size, 14px);
101
+ font-weight: 600;
102
+ }
103
+
104
+ .v2-start-screen .v2-start-brand-mark {
105
+ width: var(--start-brand-mark, 26px);
106
+ height: var(--start-brand-mark, 26px);
107
+ flex: 0 0 var(--start-brand-mark, 26px);
108
+ border-radius: var(--r-2, 6px);
109
+ background: var(--select, #e8a33d);
110
+ }
111
+
112
+ .v2-start-screen .v2-start-nav-list {
113
+ display: flex;
114
+ flex-direction: column;
115
+ gap: var(--start-nav-gap, 2px);
116
+ padding: 0 var(--sp-1, 8px);
117
+ }
118
+
119
+ .v2-start-screen .v2-start-nav-item {
120
+ width: var(--start-nav-item-width, 100%);
121
+ height: var(--start-nav-item-height, 32px);
122
+ display: flex;
123
+ align-items: center;
124
+ padding: 0 var(--sp-2, 12px);
125
+ border: 0;
126
+ border-radius: var(--r-1, 4px);
127
+ background: var(--transparent, transparent);
128
+ color: var(--text-2, #9b9ba1);
129
+ text-align: left;
130
+ }
131
+
132
+ .v2-start-screen .v2-start-nav-item:hover {
133
+ background: var(--surface-raised, #1e1e21);
134
+ color: var(--text-1, #e4e4e7);
135
+ }
136
+
137
+ .v2-start-screen .v2-start-nav-item.active {
138
+ background: var(--surface-raised, #1e1e21);
139
+ color: var(--text-selected, #fff);
140
+ font-weight: 500;
141
+ }
142
+
143
+ .v2-start-screen .v2-start-version {
144
+ margin-top: auto;
145
+ padding: var(--sp-3, 16px) var(--start-version-pad-x, 20px);
146
+ color: var(--text-off, #4f4f55);
147
+ font-family: var(--mono, 'JetBrains Mono'), ui-monospace, monospace;
148
+ font-size: var(--start-version-size, 10.5px);
149
+ }
150
+
151
+ .v2-start-screen .v2-start-main {
152
+ min-width: var(--start-main-min-width, 0);
153
+ min-height: var(--start-main-min-height, 0);
154
+ flex: 1 1 auto;
155
+ display: flex;
156
+ flex-direction: column;
157
+ gap: var(--start-main-gap, 28px);
158
+ overflow: auto;
159
+ padding: var(--start-main-pad-y, 32px) var(--start-main-pad-x, 36px);
160
+ background: var(--surface-panel, #151517);
161
+ }
162
+
163
+ .v2-start-screen .v2-start-main-head {
164
+ display: flex;
165
+ flex-direction: column;
166
+ gap: var(--sp-3, 16px);
167
+ }
168
+
169
+ .v2-start-screen .v2-start-title-row {
170
+ display: flex;
171
+ align-items: center;
172
+ justify-content: space-between;
173
+ min-height: var(--start-title-row-height, 24px);
174
+ }
175
+
176
+ .v2-start-screen .v2-start-title-row h1 {
177
+ margin: 0;
178
+ color: var(--text-selected, #fff);
179
+ font-size: var(--start-title-size, 20px);
180
+ font-weight: 600;
181
+ line-height: 1.2;
182
+ }
183
+
184
+ .v2-start-screen .v2-start-close {
185
+ width: var(--h-control, 28px);
186
+ height: var(--h-control, 28px);
187
+ padding: 0;
188
+ border: 0;
189
+ background: var(--transparent, transparent);
190
+ color: var(--text-2, #9b9ba1);
191
+ font-size: var(--start-close-size, 18px);
192
+ line-height: 1;
193
+ }
194
+
195
+ .v2-start-screen .v2-start-close:hover {
196
+ color: var(--text-1, #e4e4e7);
197
+ }
198
+
199
+ .v2-start-screen .v2-start-tabs {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: var(--start-tab-gap, 20px);
203
+ min-height: var(--start-tab-height, 24px);
204
+ }
205
+
206
+ .v2-start-screen .v2-start-tab {
207
+ height: var(--start-tab-height, 24px);
208
+ padding: 0 0 var(--start-tab-underline-space, 8px);
209
+ border: 0;
210
+ border-bottom: var(--start-active-width, 1.5px) solid var(--transparent, transparent);
211
+ background: var(--transparent, transparent);
212
+ color: var(--text-3, #636369);
213
+ white-space: nowrap;
214
+ }
215
+
216
+ .v2-start-screen .v2-start-tab:hover,
217
+ .v2-start-screen .v2-start-tab.active {
218
+ border-bottom-color: var(--select, #e8a33d);
219
+ color: var(--text-selected, #fff);
220
+ }
221
+
222
+ .v2-start-screen .v2-start-template-grid {
223
+ display: grid;
224
+ grid-template-columns: repeat(4, minmax(0, 1fr));
225
+ gap: var(--sp-3, 16px);
226
+ }
227
+
228
+ .v2-start-screen .v2-start-template {
229
+ min-width: var(--start-template-min-width, 0);
230
+ display: flex;
231
+ flex-direction: column;
232
+ gap: var(--sp-2, 12px);
233
+ padding: 0;
234
+ border: 0;
235
+ background: var(--transparent, transparent);
236
+ color: var(--text-1, #e4e4e7);
237
+ text-align: left;
238
+ }
239
+
240
+ .v2-start-screen .v2-start-template-art {
241
+ position: relative;
242
+ width: var(--start-template-art-width, 100%);
243
+ aspect-ratio: 16 / 10;
244
+ overflow: hidden;
245
+ border-radius: var(--r-2, 6px);
246
+ background: var(--surface-raised, #1e1e21);
247
+ box-shadow: inset 0 0 0 var(--start-border-width, 1px) var(--transparent, transparent);
248
+ }
249
+
250
+ .v2-start-screen .v2-start-template-art::before,
251
+ .v2-start-screen .v2-start-template-art::after {
252
+ content: "";
253
+ position: absolute;
254
+ display: block;
255
+ background: var(--surface-active, #26262a);
256
+ }
257
+
258
+ .v2-start-screen .v2-start-template-art::before {
259
+ left: var(--start-art-block-left, 12%);
260
+ bottom: var(--start-art-block-bottom, 16%);
261
+ width: var(--start-art-block-width, 36%);
262
+ height: var(--start-art-block-height, 48%);
263
+ }
264
+
265
+ .v2-start-screen .v2-start-template-art::after {
266
+ right: var(--start-art-block-right, 12%);
267
+ bottom: var(--start-art-block-bottom, 16%);
268
+ width: var(--start-art-small-width, 20%);
269
+ height: var(--start-art-small-height, 24%);
270
+ background: var(--field, #0f0f11);
271
+ }
272
+
273
+ .v2-start-screen .v2-start-template-art.sample::before {
274
+ width: var(--start-sample-block-width, 54%);
275
+ height: var(--start-sample-block-height, 28%);
276
+ background: var(--primary, #7258a0);
277
+ }
278
+
279
+ .v2-start-screen .v2-start-template-art.sample::after {
280
+ width: var(--start-sample-small-width, 10%);
281
+ height: var(--start-sample-small-height, 52%);
282
+ background: var(--camera, #a78bfa);
283
+ }
284
+
285
+ .v2-start-screen .v2-start-template.selected .v2-start-template-art {
286
+ box-shadow: inset 0 0 0 var(--start-selected-width, 1.5px) var(--select, #e8a33d);
287
+ }
288
+
289
+ .v2-start-screen .v2-start-template:hover .v2-start-template-art {
290
+ box-shadow: inset 0 0 0 var(--start-hover-width, 1px) var(--text-3, #636369);
291
+ }
292
+
293
+ .v2-start-screen .v2-start-template.selected:hover .v2-start-template-art {
294
+ box-shadow: inset 0 0 0 var(--start-selected-width, 1.5px) var(--select, #e8a33d);
295
+ }
296
+
297
+ .v2-start-screen .v2-start-template-code {
298
+ position: absolute;
299
+ left: var(--sp-1, 8px);
300
+ bottom: var(--sp-1, 8px);
301
+ color: var(--text-off, #4f4f55);
302
+ font-family: var(--mono, 'JetBrains Mono'), ui-monospace, monospace;
303
+ font-size: var(--start-code-size, 10px);
304
+ }
305
+
306
+ .v2-start-screen .v2-start-template-copy {
307
+ display: flex;
308
+ flex-direction: column;
309
+ gap: var(--start-copy-gap, 3px);
310
+ min-width: var(--start-template-copy-min-width, 0);
311
+ padding: 0 var(--start-copy-pad-x, 2px);
312
+ }
313
+
314
+ .v2-start-screen .v2-start-template-copy strong {
315
+ overflow: hidden;
316
+ color: var(--text-1, #e4e4e7);
317
+ font-size: var(--start-template-title-size, 12px);
318
+ font-weight: 500;
319
+ text-overflow: ellipsis;
320
+ white-space: nowrap;
321
+ }
322
+
323
+ .v2-start-screen .v2-start-template-copy span {
324
+ overflow: hidden;
325
+ color: var(--text-3, #636369);
326
+ font-size: var(--start-template-meta-size, 11px);
327
+ line-height: 1.35;
328
+ text-overflow: ellipsis;
329
+ white-space: nowrap;
330
+ }
331
+
332
+ /* --------------------------------------------------------------- recent --- */
333
+
334
+ .v2-start-screen .v2-start-recent-block,
335
+ .v2-start-screen .v2-start-recent-page {
336
+ display: flex;
337
+ flex-direction: column;
338
+ gap: var(--sp-1, 8px);
339
+ }
340
+
341
+ .v2-start-screen .v2-start-recent-page {
342
+ flex: 1 1 auto;
343
+ }
344
+
345
+ .v2-start-screen .v2-start-recent-heading {
346
+ display: flex;
347
+ align-items: center;
348
+ justify-content: space-between;
349
+ min-height: var(--h-row, 24px);
350
+ color: var(--text-2, #9b9ba1);
351
+ font-size: var(--start-section-title-size, 12px);
352
+ font-weight: 500;
353
+ }
354
+
355
+ .v2-start-screen .v2-start-recent-actions {
356
+ display: flex;
357
+ align-items: center;
358
+ gap: var(--sp-1, 8px);
359
+ }
360
+
361
+ .v2-start-screen .v2-start-recent-actions button,
362
+ .v2-start-screen .v2-start-file-button,
363
+ .v2-start-screen .v2-start-learn-action {
364
+ padding: 0;
365
+ border: 0;
366
+ background: var(--transparent, transparent);
367
+ color: var(--camera, #a78bfa);
368
+ font-size: var(--start-secondary-size, 11px);
369
+ }
370
+
371
+ .v2-start-screen .v2-start-recent-actions button:hover,
372
+ .v2-start-screen .v2-start-file-button:hover,
373
+ .v2-start-screen .v2-start-learn-action:hover {
374
+ color: var(--text-1, #e4e4e7);
375
+ }
376
+
377
+ .v2-start-screen .v2-start-recent-list {
378
+ display: flex;
379
+ flex-direction: column;
380
+ }
381
+
382
+ .v2-start-screen .v2-start-recent-row {
383
+ min-height: var(--start-recent-row-height, 40px);
384
+ display: flex;
385
+ align-items: center;
386
+ border-top: var(--start-border-width, 1px) solid var(--row-divider, #1d1d20);
387
+ }
388
+
389
+ .v2-start-screen .v2-start-recent-row.active {
390
+ background: var(--select-tint, rgba(232,163,61,.14));
391
+ }
392
+
393
+ .v2-start-screen .v2-start-recent-open {
394
+ width: var(--start-recent-open-width, 100%);
395
+ min-width: var(--start-recent-open-min-width, 0);
396
+ height: var(--start-recent-row-height, 40px);
397
+ display: grid;
398
+ grid-template-columns: minmax(0, 1fr) var(--start-recent-date-width, 120px) var(--start-recent-count-width, 60px);
399
+ align-items: center;
400
+ gap: var(--sp-2, 12px);
401
+ padding: 0;
402
+ border: 0;
403
+ background: var(--transparent, transparent);
404
+ color: var(--text-row, #c9c9ce);
405
+ text-align: left;
406
+ }
407
+
408
+ .v2-start-screen .v2-start-recent-open:hover strong {
409
+ color: var(--text-selected, #fff);
410
+ }
411
+
412
+ .v2-start-screen .v2-start-recent-open strong {
413
+ overflow: hidden;
414
+ font-size: var(--start-recent-name-size, 12px);
415
+ font-weight: 400;
416
+ text-overflow: ellipsis;
417
+ white-space: nowrap;
418
+ }
419
+
420
+ .v2-start-screen .v2-start-recent-open span,
421
+ .v2-start-screen .v2-start-recent-open small {
422
+ overflow: hidden;
423
+ color: var(--text-3, #636369);
424
+ font-size: var(--start-recent-meta-size, 11px);
425
+ text-overflow: ellipsis;
426
+ white-space: nowrap;
427
+ }
428
+
429
+ .v2-start-screen .v2-start-recent-open small {
430
+ font-family: var(--mono, 'JetBrains Mono'), ui-monospace, monospace;
431
+ text-align: right;
432
+ }
433
+
434
+ .v2-start-screen .v2-start-recent-remove {
435
+ width: var(--h-row, 24px);
436
+ height: var(--h-row, 24px);
437
+ flex: 0 0 var(--h-row, 24px);
438
+ padding: 0;
439
+ border: 0;
440
+ background: var(--transparent, transparent);
441
+ color: var(--text-off, #4f4f55);
442
+ font-size: var(--start-remove-size, 14px);
443
+ }
444
+
445
+ .v2-start-screen .v2-start-recent-remove:hover {
446
+ color: var(--danger, #e5484d);
447
+ }
448
+
449
+ .v2-start-screen .v2-start-empty {
450
+ margin: 0;
451
+ padding: var(--sp-2, 12px) 0;
452
+ color: var(--text-3, #636369);
453
+ font-size: var(--start-empty-size, 11px);
454
+ }
455
+
456
+ .v2-start-screen .v2-start-empty.compact {
457
+ padding: var(--sp-1, 8px) 0;
458
+ }
459
+
460
+ .v2-start-screen .v2-start-file-actions {
461
+ margin-top: auto;
462
+ padding-top: var(--sp-1, 8px);
463
+ }
464
+
465
+ .v2-start-screen .v2-start-learn {
466
+ max-width: var(--start-learn-max-width, 520px);
467
+ display: flex;
468
+ flex-direction: column;
469
+ align-items: flex-start;
470
+ gap: var(--sp-2, 12px);
471
+ padding-top: var(--sp-3, 16px);
472
+ }
473
+
474
+ .v2-start-screen .v2-start-learn strong {
475
+ color: var(--text-1, #e4e4e7);
476
+ font-size: var(--start-learn-title-size, 15px);
477
+ font-weight: 600;
478
+ }
479
+
480
+ .v2-start-screen .v2-start-learn p {
481
+ margin: 0;
482
+ color: var(--text-2, #9b9ba1);
483
+ font-size: var(--start-learn-copy-size, 12px);
484
+ line-height: 1.55;
485
+ }
486
+
487
+ /* --------------------------------------------------------------- preview --- */
488
+
489
+ .v2-start-screen .v2-start-preview {
490
+ width: var(--start-preview-width, 340px);
491
+ min-width: var(--start-preview-width, 340px);
492
+ flex: 0 0 var(--start-preview-width, 340px);
493
+ display: flex;
494
+ flex-direction: column;
495
+ overflow: hidden;
496
+ background: var(--surface-bar, #121214);
497
+ }
498
+
499
+ .v2-start-screen .v2-start-preview-art {
500
+ position: relative;
501
+ width: var(--start-preview-art-width, 100%);
502
+ aspect-ratio: 16 / 9;
503
+ display: flex;
504
+ align-items: flex-end;
505
+ justify-content: flex-start;
506
+ padding: var(--sp-1, 8px);
507
+ background: var(--surface-raised, #1e1e21);
508
+ }
509
+
510
+ .v2-start-screen .v2-start-preview-art::before,
511
+ .v2-start-screen .v2-start-preview-art::after {
512
+ content: "";
513
+ position: absolute;
514
+ display: block;
515
+ background: var(--surface-active, #26262a);
516
+ }
517
+
518
+ .v2-start-screen .v2-start-preview-art::before {
519
+ left: var(--preview-block-left, 14%);
520
+ bottom: var(--preview-block-bottom, 16%);
521
+ width: var(--preview-block-width, 34%);
522
+ height: var(--preview-block-height, 50%);
523
+ }
524
+
525
+ .v2-start-screen .v2-start-preview-art::after {
526
+ right: var(--preview-block-right, 14%);
527
+ bottom: var(--preview-block-bottom, 16%);
528
+ width: var(--preview-small-width, 18%);
529
+ height: var(--preview-small-height, 28%);
530
+ background: var(--primary, #7258a0);
531
+ }
532
+
533
+ .v2-start-screen .v2-start-preview-art.sample::before {
534
+ width: var(--preview-sample-width, 58%);
535
+ height: var(--preview-sample-height, 30%);
536
+ background: var(--camera, #a78bfa);
537
+ }
538
+
539
+ .v2-start-screen .v2-start-preview-art span {
540
+ position: relative;
541
+ z-index: var(--start-art-label-layer, 1);
542
+ color: var(--text-off, #4f4f55);
543
+ font-family: var(--mono, 'JetBrains Mono'), ui-monospace, monospace;
544
+ font-size: var(--start-preview-label-size, 10.5px);
545
+ }
546
+
547
+ .v2-start-screen .v2-start-preview-copy {
548
+ display: flex;
549
+ flex-direction: column;
550
+ gap: var(--start-preview-copy-gap, 6px);
551
+ padding: var(--start-preview-copy-pad-y, 20px) var(--start-preview-copy-pad-x, 20px) var(--sp-1, 8px);
552
+ }
553
+
554
+ .v2-start-screen .v2-start-preview-copy strong {
555
+ color: var(--text-selected, #fff);
556
+ font-size: var(--start-preview-title-size, 15px);
557
+ font-weight: 600;
558
+ }
559
+
560
+ .v2-start-screen .v2-start-preview-copy span {
561
+ color: var(--text-2, #9b9ba1);
562
+ font-size: var(--start-preview-copy-size, 11.5px);
563
+ line-height: 1.55;
564
+ }
565
+
566
+ .v2-start-screen .v2-start-project-form {
567
+ min-height: var(--start-form-min-height, 0);
568
+ display: flex;
569
+ flex-direction: column;
570
+ gap: var(--start-form-gap, 14px);
571
+ padding: var(--start-form-pad-y, 4px) var(--start-form-pad-x, 20px);
572
+ }
573
+
574
+ .v2-start-screen .v2-start-field {
575
+ display: flex;
576
+ flex-direction: column;
577
+ gap: var(--start-field-gap, 6px);
578
+ color: var(--text-3, #636369);
579
+ font-size: var(--start-field-label-size, 11px);
580
+ }
581
+
582
+ .v2-start-screen .v2-start-field input,
583
+ .v2-start-screen .v2-start-field select,
584
+ .v2-start-screen .v2-start-location {
585
+ width: var(--start-field-width, 100%);
586
+ height: var(--start-field-height, 30px);
587
+ min-height: var(--start-field-height, 30px);
588
+ display: flex;
589
+ align-items: center;
590
+ justify-content: space-between;
591
+ padding: 0 var(--start-field-pad-x, 10px);
592
+ border: 0;
593
+ border-radius: var(--r-1, 4px);
594
+ background: var(--field-deep, #0c0c0d);
595
+ color: var(--text-1, #e4e4e7);
596
+ font-size: var(--start-field-value-size, 12px);
597
+ text-align: left;
598
+ }
599
+
600
+ .v2-start-screen .v2-start-field input:focus,
601
+ .v2-start-screen .v2-start-field select:focus,
602
+ .v2-start-screen .v2-start-location:focus {
603
+ outline: var(--start-focus-width, 2px) solid var(--select, #e8a33d);
604
+ outline-offset: var(--start-focus-offset, 1px);
605
+ }
606
+
607
+ .v2-start-screen .v2-start-select-wrap {
608
+ position: relative;
609
+ width: var(--start-field-width, 100%);
610
+ height: var(--start-field-height, 30px);
611
+ display: block;
612
+ }
613
+
614
+ .v2-start-screen .v2-start-select-wrap::after {
615
+ content: "⌄";
616
+ position: absolute;
617
+ right: var(--sp-2, 12px);
618
+ top: 50%;
619
+ transform: translateY(-50%);
620
+ pointer-events: none;
621
+ color: var(--text-off, #4f4f55);
622
+ font-size: var(--start-caret-size, 10px);
623
+ }
624
+
625
+ .v2-start-screen .v2-start-field select {
626
+ appearance: none;
627
+ background-color: var(--field-deep, #0c0c0d);
628
+ background-image: none;
629
+ padding-right: var(--start-select-pad-right, 28px);
630
+ }
631
+
632
+ .v2-start-screen .v2-start-location:disabled {
633
+ cursor: default;
634
+ opacity: var(--start-disabled-opacity, .72);
635
+ }
636
+
637
+ .v2-start-screen .v2-start-location > span:first-child {
638
+ overflow: hidden;
639
+ text-overflow: ellipsis;
640
+ white-space: nowrap;
641
+ }
642
+
643
+ .v2-start-screen .v2-start-location > span:last-child {
644
+ margin-left: var(--sp-1, 8px);
645
+ color: var(--text-off, #4f4f55);
646
+ }
647
+
648
+ .v2-start-screen .v2-start-location-status {
649
+ margin: calc(var(--sp-1, 8px) * -1) 0 0;
650
+ color: var(--text-3, #636369);
651
+ font-size: var(--start-status-size, 10.5px);
652
+ line-height: 1.4;
653
+ }
654
+
655
+ .v2-start-screen .v2-start-location-status button {
656
+ margin-left: var(--sp-1, 8px);
657
+ padding: 0;
658
+ border: 0;
659
+ background: var(--transparent, transparent);
660
+ color: var(--camera, #a78bfa);
661
+ font-size: inherit;
662
+ }
663
+
664
+ .v2-start-screen .v2-start-preview-actions {
665
+ margin-top: auto;
666
+ display: flex;
667
+ justify-content: flex-end;
668
+ gap: var(--sp-1, 8px);
669
+ padding: var(--sp-3, 16px) 0;
670
+ }
671
+
672
+ .v2-start-screen .v2-start-cancel,
673
+ .v2-start-screen .v2-start-create {
674
+ height: var(--h-control, 28px);
675
+ min-height: var(--h-control, 28px);
676
+ padding: 0 var(--start-action-pad-x, 16px);
677
+ border: 0;
678
+ border-radius: var(--r-1, 4px);
679
+ font-size: var(--start-action-size, 12px);
680
+ font-weight: 500;
681
+ }
682
+
683
+ .v2-start-screen .v2-start-cancel {
684
+ background: var(--transparent, transparent);
685
+ color: var(--text-2, #9b9ba1);
686
+ }
687
+
688
+ .v2-start-screen .v2-start-cancel:hover {
689
+ color: var(--text-1, #e4e4e7);
690
+ }
691
+
692
+ .v2-start-screen .v2-start-create {
693
+ background: var(--primary, #7258a0);
694
+ color: var(--text-selected, #fff);
695
+ }
696
+
697
+ .v2-start-screen .v2-start-create:hover:not(:disabled) {
698
+ background: var(--camera, #a78bfa);
699
+ color: var(--on-select, #1a1204);
700
+ }
701
+
702
+ .v2-start-screen .v2-start-create:disabled {
703
+ cursor: not-allowed;
704
+ opacity: var(--start-disabled-opacity, .45);
705
+ }
706
+
707
+ /* ---------------------------------------------------------- name dialog --- */
708
+
709
+ .v2-project-name-dialog-backdrop {
710
+ position: fixed;
711
+ inset: var(--start-inset, 0);
712
+ z-index: var(--start-dialog-z-index, 260);
713
+ display: flex;
714
+ align-items: center;
715
+ justify-content: center;
716
+ background: var(--overlay, rgba(12,12,13,.78));
717
+ }
718
+
719
+ .v2-project-name-dialog-backdrop .v2-project-name-dialog {
720
+ width: var(--name-dialog-width, 360px);
721
+ max-width: var(--name-dialog-max-width, 88vw);
722
+ display: flex;
723
+ flex-direction: column;
724
+ gap: var(--sp-2, 12px);
725
+ padding: var(--sp-3, 16px);
726
+ background: var(--surface-panel, #151517);
727
+ border: var(--start-border-width, 1px) solid var(--row-divider, #1d1d20);
728
+ border-radius: var(--r-2, 6px);
729
+ box-shadow: 0 var(--name-dialog-shadow-y, 20px) var(--name-dialog-shadow-blur, 70px) var(--overlay, rgba(12,12,13,.78));
730
+ color: var(--text-1, #e4e4e7);
731
+ }
732
+
733
+ .v2-project-name-dialog-backdrop .v2-project-name-dialog > strong {
734
+ font-size: var(--name-dialog-title-size, 15px);
735
+ font-weight: 600;
736
+ }
737
+
738
+ .v2-project-name-dialog-backdrop .v2-project-name-dialog label {
739
+ display: flex;
740
+ flex-direction: column;
741
+ gap: var(--start-field-gap, 6px);
742
+ color: var(--text-3, #636369);
743
+ font-size: var(--start-field-label-size, 11px);
744
+ }
745
+
746
+ .v2-project-name-dialog-backdrop .v2-project-name-dialog input {
747
+ width: var(--start-field-width, 100%);
748
+ height: var(--h-control, 28px);
749
+ padding: 0 var(--start-field-pad-x, 10px);
750
+ border: 0;
751
+ border-radius: var(--r-1, 4px);
752
+ background: var(--field-deep, #0c0c0d);
753
+ color: var(--text-1, #e4e4e7);
754
+ }
755
+
756
+ .v2-project-name-dialog-backdrop .v2-project-name-dialog-actions {
757
+ display: flex;
758
+ justify-content: flex-end;
759
+ gap: var(--sp-1, 8px);
760
+ padding-top: var(--sp-1, 8px);
761
+ }
762
+
763
+ .v2-project-name-dialog-backdrop .v2-dialog-secondary,
764
+ .v2-project-name-dialog-backdrop .v2-dialog-primary {
765
+ height: var(--h-control, 28px);
766
+ min-height: var(--h-control, 28px);
767
+ padding: 0 var(--start-action-pad-x, 16px);
768
+ border: 0;
769
+ border-radius: var(--r-1, 4px);
770
+ }
771
+
772
+ .v2-project-name-dialog-backdrop .v2-dialog-secondary {
773
+ background: var(--transparent, transparent);
774
+ color: var(--text-2, #9b9ba1);
775
+ }
776
+
777
+ .v2-project-name-dialog-backdrop .v2-dialog-primary {
778
+ background: var(--primary, #7258a0);
779
+ color: var(--text-selected, #fff);
780
+ }
781
+
782
+ /* ------------------------------------------------------- first-success --- */
783
+
784
+ /* The card sits in the viewport's bottom-left corner, just above the Content
785
+ dock, so the Outliner and Inspector column on the right stays uncovered.
786
+ The offsets follow the shell grid in shell/shell.css: a 44px top bar, the
787
+ dock row (--shell-dock-height), a 24px status bar, and 1px gaps; the
788
+ viewport's own 32px toolbar caps the height from above. */
789
+ .v2-first-success-guide {
790
+ --guide-topbar-h: 44px;
791
+ --guide-statusbar-h: 24px;
792
+ --guide-grid-gap: 1px;
793
+ --guide-vp-toolbar-h: 32px;
794
+ --guide-dock-h: var(--shell-dock-height, var(--shell-dock-default, 0px));
795
+ --guide-right-col: var(--shell-right-width, var(--shell-right-default, 0px));
796
+ position: fixed;
797
+ left: var(--sp-2, 12px);
798
+ bottom: calc(var(--guide-statusbar-h) + var(--guide-dock-h) + 2 * var(--guide-grid-gap) + var(--sp-2, 12px));
799
+ z-index: var(--guide-z-index, 70);
800
+ width: min(var(--guide-width, 330px), calc(100vw - var(--guide-right-col) - var(--guide-grid-gap) - 2 * var(--sp-2, 12px)));
801
+ max-height: calc(100vh - var(--guide-topbar-h) - var(--guide-vp-toolbar-h) - var(--guide-dock-h) - var(--guide-statusbar-h) - 3 * var(--guide-grid-gap) - 3 * var(--sp-2, 12px));
802
+ overflow-y: auto;
803
+ display: flex;
804
+ flex-direction: column;
805
+ padding: var(--sp-3, 16px);
806
+ background: var(--surface-panel, #151517);
807
+ border: var(--start-border-width, 1px) solid var(--primary, #7258a0);
808
+ border-radius: var(--r-2, 6px);
809
+ box-shadow: 0 var(--guide-shadow-y, 18px) var(--guide-shadow-blur, 58px) var(--overlay, rgba(12,12,13,.78));
810
+ color: var(--text-1, #e4e4e7);
811
+ animation: none;
812
+ }
813
+
814
+ .v2-first-success-guide .v2-first-success-guide-head {
815
+ display: flex;
816
+ align-items: flex-start;
817
+ justify-content: space-between;
818
+ gap: var(--sp-2, 12px);
819
+ }
820
+
821
+ .v2-first-success-guide .v2-first-success-guide-head > div {
822
+ display: flex;
823
+ flex-direction: column;
824
+ gap: var(--start-guide-head-gap, 4px);
825
+ }
826
+
827
+ .v2-first-success-guide .v2-first-success-guide-head strong {
828
+ font-size: var(--guide-title-size, 15px);
829
+ font-weight: 600;
830
+ }
831
+
832
+ .v2-first-success-guide .v2-first-success-guide-head span {
833
+ color: var(--camera, #a78bfa);
834
+ font-size: var(--guide-step-size, 10px);
835
+ font-weight: 500;
836
+ }
837
+
838
+ .v2-first-success-guide .v2-first-success-guide-close {
839
+ width: var(--h-control, 28px);
840
+ height: var(--h-control, 28px);
841
+ padding: 0;
842
+ border: 0;
843
+ background: var(--transparent, transparent);
844
+ color: var(--text-2, #9b9ba1);
845
+ font-size: var(--guide-close-size, 18px);
846
+ line-height: 1;
847
+ }
848
+
849
+ .v2-first-success-guide .v2-first-success-guide-close:hover {
850
+ color: var(--text-1, #e4e4e7);
851
+ }
852
+
853
+ .v2-first-success-guide .v2-first-success-guide-intro {
854
+ margin: var(--sp-2, 12px) 0 var(--sp-1, 8px);
855
+ color: var(--text-2, #9b9ba1);
856
+ font-size: var(--guide-copy-size, 11.5px);
857
+ line-height: 1.45;
858
+ }
859
+
860
+ .v2-first-success-guide .v2-first-success-guide-steps {
861
+ display: flex;
862
+ flex-direction: column;
863
+ gap: var(--guide-step-gap, 4px);
864
+ margin: 0 0 var(--sp-2, 12px);
865
+ padding: 0;
866
+ list-style: none;
867
+ }
868
+
869
+ .v2-first-success-guide .v2-first-success-guide-steps li {
870
+ display: flex;
871
+ align-items: flex-start;
872
+ gap: var(--sp-1, 8px);
873
+ padding: var(--sp-1, 8px);
874
+ border: var(--start-border-width, 1px) solid var(--transparent, transparent);
875
+ border-radius: var(--r-1, 4px);
876
+ color: var(--text-2, #9b9ba1);
877
+ font-size: var(--guide-copy-size, 11.5px);
878
+ line-height: 1.35;
879
+ }
880
+
881
+ .v2-first-success-guide .v2-first-success-guide-steps li.current {
882
+ background: var(--select-tint, rgba(232,163,61,.14));
883
+ border-color: var(--select, #e8a33d);
884
+ color: var(--text-1, #e4e4e7);
885
+ }
886
+
887
+ .v2-first-success-guide .v2-first-success-guide-steps li.done {
888
+ color: var(--text-1, #e4e4e7);
889
+ opacity: var(--guide-done-opacity, .72);
890
+ }
891
+
892
+ .v2-first-success-guide .v2-first-success-guide-steps li strong,
893
+ .v2-first-success-guide .v2-first-success-guide-steps li span {
894
+ display: block;
895
+ }
896
+
897
+ .v2-first-success-guide .v2-first-success-guide-steps li span {
898
+ margin-top: var(--guide-hint-margin, 3px);
899
+ color: var(--text-2, #9b9ba1);
900
+ font-size: var(--guide-hint-size, 10.5px);
901
+ }
902
+
903
+ .v2-first-success-guide .v2-first-success-guide-step-mark {
904
+ width: var(--guide-mark-size, 18px);
905
+ height: var(--guide-mark-size, 18px);
906
+ flex: 0 0 var(--guide-mark-size, 18px);
907
+ display: inline-flex;
908
+ align-items: center;
909
+ justify-content: center;
910
+ margin-top: var(--guide-mark-offset, 1px);
911
+ border: var(--start-border-width, 1px) solid var(--text-off, #4f4f55);
912
+ border-radius: 50%;
913
+ font-size: var(--guide-mark-text-size, 10px);
914
+ font-weight: 600;
915
+ }
916
+
917
+ .v2-first-success-guide .v2-first-success-guide-steps li.current .v2-first-success-guide-step-mark {
918
+ border-color: var(--select, #e8a33d);
919
+ color: var(--select, #e8a33d);
920
+ }
921
+
922
+ .v2-first-success-guide .v2-first-success-guide-steps li.done .v2-first-success-guide-step-mark {
923
+ border-color: var(--ok, #4fbf7a);
924
+ color: var(--ok, #4fbf7a);
925
+ }
926
+
927
+ .v2-first-success-guide .v2-first-success-guide-next {
928
+ width: var(--guide-action-width, 100%);
929
+ height: var(--h-control, 28px);
930
+ min-height: var(--h-control, 28px);
931
+ border: 0;
932
+ border-radius: var(--r-1, 4px);
933
+ background: var(--primary, #7258a0);
934
+ color: var(--text-selected, #fff);
935
+ font-weight: 500;
936
+ }
937
+
938
+ .v2-first-success-guide .v2-first-success-guide-next:hover {
939
+ background: var(--camera, #a78bfa);
940
+ color: var(--on-select, #1a1204);
941
+ }
942
+
943
+ .v2-first-success-guide .v2-first-success-guide-skip {
944
+ width: var(--guide-action-width, 100%);
945
+ margin-top: var(--sp-1, 8px);
946
+ padding: var(--guide-skip-pad, 3px);
947
+ border: 0;
948
+ background: var(--transparent, transparent);
949
+ color: var(--text-2, #9b9ba1);
950
+ font-size: var(--guide-skip-size, 10px);
951
+ }
952
+
953
+ .v2-first-success-guide .v2-first-success-guide-skip:hover {
954
+ color: var(--text-1, #e4e4e7);
955
+ }
956
+
957
+ .v2-first-success-guide .v2-first-success-guide-complete {
958
+ display: flex;
959
+ align-items: center;
960
+ flex-direction: column;
961
+ gap: var(--sp-1, 8px);
962
+ padding-top: var(--sp-3, 16px);
963
+ text-align: center;
964
+ }
965
+
966
+ .v2-first-success-guide .v2-first-success-guide-check {
967
+ width: var(--guide-check-size, 38px);
968
+ height: var(--guide-check-size, 38px);
969
+ display: grid;
970
+ place-items: center;
971
+ border-radius: 50%;
972
+ background: var(--select-tint, rgba(232,163,61,.14));
973
+ color: var(--ok, #4fbf7a);
974
+ font-size: var(--guide-check-text-size, 22px);
975
+ font-weight: 600;
976
+ }
977
+
978
+ .v2-first-success-guide .v2-first-success-guide-complete p {
979
+ margin: 0 0 var(--sp-1, 8px);
980
+ color: var(--text-2, #9b9ba1);
981
+ font-size: var(--guide-copy-size, 11.5px);
982
+ line-height: 1.5;
983
+ }
984
+
985
+ .v2-start-screen .v2-start-preview .v2-start-create {
986
+ background: var(--primary, #7258a0);
987
+ color: var(--text-selected, #fff);
988
+ }
989
+
990
+ .v2-start-screen .v2-start-preview .v2-start-create:hover:not(:disabled) {
991
+ background: var(--camera, #a78bfa);
992
+ color: var(--on-select, #1a1204);
993
+ }
994
+
995
+ .v2-start-screen .v2-start-preview .v2-start-create:disabled {
996
+ cursor: not-allowed;
997
+ opacity: var(--start-disabled-opacity, .45);
998
+ }
999
+
1000
+ @media (max-width: 900px) {
1001
+ .v2-start-screen .v2-start-nav {
1002
+ width: var(--start-nav-width-compact, 188px);
1003
+ min-width: var(--start-nav-width-compact, 188px);
1004
+ flex-basis: var(--start-nav-width-compact, 188px);
1005
+ }
1006
+
1007
+ .v2-start-screen .v2-start-preview {
1008
+ width: var(--start-preview-width-compact, 300px);
1009
+ min-width: var(--start-preview-width-compact, 300px);
1010
+ flex-basis: var(--start-preview-width-compact, 300px);
1011
+ }
1012
+
1013
+ .v2-start-screen .v2-start-main {
1014
+ padding-inline: var(--sp-3, 16px);
1015
+ }
1016
+ }
1017
+
1018
+ @media (max-width: 700px) {
1019
+ .v2-start-screen {
1020
+ overflow: auto;
1021
+ }
1022
+
1023
+ .v2-start-screen .v2-start-window {
1024
+ min-height: var(--start-mobile-min-height, 100%);
1025
+ flex-direction: column;
1026
+ }
1027
+
1028
+ .v2-start-screen .v2-start-nav {
1029
+ width: var(--start-mobile-nav-width, 100%);
1030
+ min-width: var(--start-mobile-nav-width, 100%);
1031
+ flex-basis: auto;
1032
+ }
1033
+
1034
+ .v2-start-screen .v2-start-brand {
1035
+ padding: var(--sp-2, 12px) var(--sp-3, 16px);
1036
+ }
1037
+
1038
+ .v2-start-screen .v2-start-nav-list {
1039
+ flex-direction: row;
1040
+ overflow-x: auto;
1041
+ padding-inline: var(--sp-2, 12px);
1042
+ }
1043
+
1044
+ .v2-start-screen .v2-start-nav-item {
1045
+ width: auto;
1046
+ flex: 0 0 auto;
1047
+ }
1048
+
1049
+ .v2-start-screen .v2-start-version {
1050
+ display: none;
1051
+ }
1052
+
1053
+ .v2-start-screen .v2-start-main {
1054
+ min-height: var(--start-mobile-main-min-height, 420px);
1055
+ padding: var(--sp-3, 16px);
1056
+ }
1057
+
1058
+ .v2-start-screen .v2-start-template-grid {
1059
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1060
+ }
1061
+
1062
+ .v2-start-screen .v2-start-preview {
1063
+ width: var(--start-mobile-preview-width, 100%);
1064
+ min-width: var(--start-mobile-preview-width, 100%);
1065
+ flex-basis: auto;
1066
+ }
1067
+
1068
+ .v2-first-success-guide {
1069
+ right: var(--guide-mobile-edge, 10px);
1070
+ bottom: var(--guide-mobile-bottom, 202px);
1071
+ width: min(var(--guide-width, 330px), calc(100vw - var(--guide-mobile-width-edge, 20px)));
1072
+ }
1073
+ }