cozyclay 1.10.0 → 2.0.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 (275) hide show
  1. package/CHANGELOG.md +193 -0
  2. package/bin/agent/agent-routes.mjs +82 -72
  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/codex-auth.mjs +2 -1
  10. package/bin/cozyclay.mjs +38 -11
  11. package/bin/live/cli.mjs +22 -3
  12. package/bin/mcp-runtime.mjs +45 -20
  13. package/bin/telemetry-state.mjs +5 -2
  14. package/bin/update-check.mjs +15 -0
  15. package/dist/app/index.html +6 -6
  16. package/dist/assets/analytics-MVZOEW8O.js +1 -0
  17. package/dist/assets/app-BxBLC6GT.js +4876 -0
  18. package/dist/assets/app-CJdxvnrl.css +1 -0
  19. package/dist/assets/{demo-B-eg1CT8.js → demo-ByeYp-dY.js} +1 -1
  20. package/dist/assets/{first-shot-handoff-CGgnvNu8.js → first-shot-handoff-DgT28ZiV.js} +1 -1
  21. package/dist/assets/{landing-IbRp3FnQ.js → landing-BaXkpFip.js} +1 -1
  22. package/dist/assets/shot-prompt-CbqWcWYi.css +1 -0
  23. package/dist/assets/shot-prompt-hN0j_O-p.js +17 -0
  24. package/dist/assets/{ticket-BgIzOBOf.js → ticket-BcmsnHn5.js} +1 -1
  25. package/dist/assets/workflow-B5XZwVfe.js +179 -0
  26. package/dist/assets/workflow-DRdwoDBT.css +1 -0
  27. package/dist/cozyclay-package.json +1 -1
  28. package/dist/fonts/IBM-Plex-Sans-OFL.txt +92 -0
  29. package/dist/fonts/JetBrains-Mono-OFL.txt +93 -0
  30. package/dist/fonts/README.md +13 -9
  31. package/dist/fonts/ibm-plex-sans-400-latin.woff2 +0 -0
  32. package/dist/fonts/ibm-plex-sans-500-latin.woff2 +0 -0
  33. package/dist/fonts/ibm-plex-sans-600-latin.woff2 +0 -0
  34. package/dist/fonts/jetbrains-mono-400-latin.woff2 +0 -0
  35. package/dist/fonts/jetbrains-mono-500-latin.woff2 +0 -0
  36. package/dist/index.html +7 -7
  37. package/dist/privacy/index.html +13 -8
  38. package/dist/sitemap.xml +2 -2
  39. package/dist/workflow/index.html +5 -5
  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 +219 -376
  44. package/package.json +2 -1
  45. package/src/App.jsx +1275 -9086
  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/fix-collisions.js +10 -66
  51. package/src/ardy/ik-drag.js +101 -0
  52. package/src/ardy/ik-key-json.js +43 -0
  53. package/src/ardy/ik.js +97 -67
  54. package/src/ardy/physics-panel.css +2 -0
  55. package/src/ardy/physics-panel.jsx +17 -5
  56. package/src/ardy/platform-fit-panel.css +64 -0
  57. package/src/ardy/platform-fit-panel.jsx +40 -0
  58. package/src/ardy/platform-fit.js +326 -0
  59. package/src/ardy/playback.js +166 -20
  60. package/src/ardy/range-pin.js +299 -0
  61. package/src/ardy/timeline-coordinates.js +26 -0
  62. package/src/ardy/timeline.css +1214 -0
  63. package/src/ardy/timeline.jsx +152 -41
  64. package/src/ardy/waypoints.js +3 -3
  65. package/src/asset-pane.css +462 -0
  66. package/src/asset-pane.jsx +461 -232
  67. package/src/camera-tutorial.jsx +38 -18
  68. package/src/command-bus.js +349 -0
  69. package/src/commands/ai.js +31 -0
  70. package/src/commands/cast.js +140 -0
  71. package/src/commands/elements/character.js +13 -0
  72. package/src/commands/elements/motion.js +14 -0
  73. package/src/commands/elements/object.js +22 -0
  74. package/src/commands/elements/scene.js +16 -0
  75. package/src/commands/elements/shot.js +9 -0
  76. package/src/commands/elements/stage.js +11 -0
  77. package/src/commands/elements.js +155 -0
  78. package/src/commands/export.js +20 -0
  79. package/src/commands/index.js +40 -0
  80. package/src/commands/motion.js +231 -0
  81. package/src/commands/objects.js +174 -0
  82. package/src/commands/project.js +53 -0
  83. package/src/commands/scene.js +81 -0
  84. package/src/commands/shared.js +19 -0
  85. package/src/commands/shot.js +103 -0
  86. package/src/commands/stage.js +17 -0
  87. package/src/commands/view.js +42 -0
  88. package/src/document-store.js +144 -0
  89. package/src/domains/cast.js +1007 -0
  90. package/src/domains/motion.js +3219 -0
  91. package/src/domains/objects.js +932 -0
  92. package/src/domains/scenes.js +823 -0
  93. package/src/domains/shots.js +404 -0
  94. package/src/domains/stage.js +93 -0
  95. package/src/dualview.jsx +113 -57
  96. package/src/facing-marks.js +3 -0
  97. package/src/first-success-guide.jsx +14 -14
  98. package/src/grid-view.js +18 -5
  99. package/src/hierarchy-panel.css +386 -0
  100. package/src/hierarchy-panel.jsx +88 -19
  101. package/src/{fal-motion-client.js → i2v-motion-client.js} +13 -13
  102. package/src/i2v-motion-studio.jsx +180 -0
  103. package/src/ik-camera.js +3 -0
  104. package/src/main.jsx +6 -0
  105. package/src/motion/generation.js +105 -0
  106. package/src/motion-readiness-ui.jsx +4 -4
  107. package/src/motion-readiness.js +11 -0
  108. package/src/motion-trail.js +366 -9
  109. package/src/object-gizmo.jsx +7 -1
  110. package/src/panels/CameraPanel.jsx +60 -0
  111. package/src/panels/CharacterTransformPanel.jsx +48 -0
  112. package/src/panels/EnvironmentPanel.jsx +40 -0
  113. package/src/panels/Foldout.jsx +32 -0
  114. package/src/panels/LightPanel.jsx +24 -0
  115. package/src/panels/ObjectTransformPanel.jsx +554 -0
  116. package/src/panels/PosePanel.jsx +97 -0
  117. package/src/panels/ProjectPanel.jsx +33 -0
  118. package/src/panels/PromptBlocksPanel.jsx +442 -0
  119. package/src/panels/PropsPanel.jsx +70 -0
  120. package/src/panels/ReferenceImageField.jsx +91 -0
  121. package/src/panels/RigControlPanel.jsx +78 -0
  122. package/src/panels/RigPanel.jsx +37 -0
  123. package/src/panels/SubjectBox.jsx +47 -0
  124. package/src/panels/SubjectsPanel.jsx +39 -0
  125. package/src/panels/VideoCapturePanel.jsx +180 -0
  126. package/src/panels/details.css +1171 -0
  127. package/src/panels/motion.css +197 -0
  128. package/src/panels/pose.css +39 -0
  129. package/src/planview.jsx +60 -31
  130. package/src/posestudio.jsx +59 -4
  131. package/src/project-browser.css +1073 -0
  132. package/src/project-browser.jsx +288 -123
  133. package/src/range-pin-object-transform.js +19 -0
  134. package/src/range-pin-panel.css +518 -0
  135. package/src/range-pin-panel.jsx +344 -0
  136. package/src/result-modal.jsx +5 -5
  137. package/src/room.jsx +79 -51
  138. package/src/scenes.js +9 -8
  139. package/src/semantic-edit.js +2 -0
  140. package/src/settings-menu.jsx +39 -105
  141. package/src/shell/BottomDock.jsx +450 -0
  142. package/src/shell/DetailsSlot.jsx +513 -0
  143. package/src/shell/LibrarySlot.jsx +86 -0
  144. package/src/shell/MenuBar.jsx +601 -0
  145. package/src/shell/OutlinerSlot.jsx +50 -0
  146. package/src/shell/PreferencesDialog.jsx +538 -0
  147. package/src/shell/PreferencesSlot.jsx +40 -0
  148. package/src/shell/StatusBar.jsx +125 -0
  149. package/src/shell/StudioShell.jsx +92 -0
  150. package/src/shell/TopBar.jsx +129 -0
  151. package/src/shell/ViewportToolbar.jsx +656 -0
  152. package/src/shell/agent-glass.css +296 -0
  153. package/src/shell/dock.css +93 -0
  154. package/src/shell/glass-regions.css +985 -0
  155. package/src/shell/glass.css +687 -0
  156. package/src/shell/log-store.js +52 -0
  157. package/src/shell/mode.css +9 -0
  158. package/src/shell/preferences.css +651 -0
  159. package/src/shell/shell.css +282 -0
  160. package/src/shell/studio-shell-context.js +19 -0
  161. package/src/shell/topbar.css +435 -0
  162. package/src/shell/viewport.css +451 -0
  163. package/src/store/authored-intent.js +22 -0
  164. package/src/store/runtime-adapters.js +92 -0
  165. package/src/store/scene-stage.js +21 -0
  166. package/src/store/use-document-store.js +14 -0
  167. package/src/studio-actions.js +210 -0
  168. package/src/studio-agent-commands.js +38 -268
  169. package/src/studio-agent-context.js +38 -9
  170. package/src/studio-agent-motion.js +122 -378
  171. package/src/studio-agent-protocol.js +66 -30
  172. package/src/studio-app-binding.js +379 -0
  173. package/src/studio-contact-sheet.js +73 -0
  174. package/src/studio-elements.js +58 -51
  175. package/src/styles/themes.css +200 -0
  176. package/src/styles/tokens.css +69 -0
  177. package/src/styles.css +456 -1748
  178. package/src/theme.js +44 -0
  179. package/src/timeline-extent.js +16 -0
  180. package/src/timeline-fps.js +13 -0
  181. package/src/trail-key-conflicts.js +39 -0
  182. package/src/trail-pick.js +59 -0
  183. package/src/ui.jsx +8 -8
  184. package/src/use-case-question.jsx +66 -0
  185. package/src/workflow/AgentPanel.jsx +86 -71
  186. package/src/workflow/agent-client.js +12 -2
  187. package/src/workflow/agent-panel.css +34 -32
  188. package/src/workflow/cozy-scene-node.css +2 -0
  189. package/src/workflow/workflow.css +2 -0
  190. package/tools/ardy/bridge.mjs +164 -146
  191. package/tools/ardy/visual-qa.mjs +5 -5
  192. package/tools/bench/EXP3.md +61 -0
  193. package/tools/bench/cclay_bench_extract_incam.py +125 -0
  194. package/tools/bench/cclay_bench_extract_obs.py +204 -0
  195. package/tools/bench/cclay_bench_runner.py +42 -0
  196. package/tools/bench/cube-contact.mjs +162 -0
  197. package/tools/bench/exp3.mjs +152 -0
  198. package/tools/bench/extract-bench-lib.mjs +216 -0
  199. package/tools/bench/extract-bench.mjs +302 -0
  200. package/tools/bench/fal-generate.mjs +88 -0
  201. package/tools/bench/fit/README.md +189 -0
  202. package/tools/bench/fit/camera.mjs +59 -0
  203. package/tools/bench/fit/contact.mjs +419 -0
  204. package/tools/bench/fit/footlock.mjs +234 -0
  205. package/tools/bench/fit/motion.mjs +85 -0
  206. package/tools/bench/fit/pin.mjs +27 -0
  207. package/tools/bench/fit/remote.mjs +105 -0
  208. package/tools/bench/fit-bench.mjs +126 -0
  209. package/tools/bench/fit-sanity.mjs +45 -0
  210. package/tools/bench/metrics.mjs +313 -0
  211. package/tools/bench/obs/depth.mjs +258 -0
  212. package/tools/bench/obs/extrinsics.mjs +175 -0
  213. package/tools/bench/obs/fit_mannequin_betas.py +340 -0
  214. package/tools/bench/obs/ground.mjs +294 -0
  215. package/tools/bench/obs/heading.mjs +151 -0
  216. package/tools/bench/obs/ladder.mjs +555 -0
  217. package/tools/bench/obs/mannequin-betas.json +124 -0
  218. package/tools/bench/obs/remote.mjs +83 -0
  219. package/tools/bench/obs/rest_joints.py +52 -0
  220. package/tools/bench/obs/ybot-targets.mjs +49 -0
  221. package/tools/bench/obs-bench.mjs +520 -0
  222. package/tools/bench/score.mjs +343 -0
  223. package/tools/bench/summarize.mjs +86 -0
  224. package/tools/dev/pages/privacy.html +13 -8
  225. package/tools/gt-render/browser.mjs +159 -0
  226. package/tools/gt-render/camera-math.mjs +276 -0
  227. package/tools/gt-render/page.mjs +267 -0
  228. package/tools/gt-render/render.mjs +514 -0
  229. package/tools/gt-render/scene-box.mjs +31 -0
  230. package/tools/gt-render/take-transform.mjs +87 -0
  231. package/tools/qa/css-rule-usage.mjs +283 -0
  232. package/tools/qa/studio-control-count.mjs +70 -32
  233. package/tools/run-tests.mjs +60 -3
  234. package/tools/track/DESIGN.md +513 -0
  235. package/tools/track/backfill-provenance.mjs +116 -0
  236. package/tools/track/budget.mjs +8 -0
  237. package/tools/track/check-rig.mjs +209 -0
  238. package/tools/track/diagnostics.schema.json +60 -0
  239. package/tools/track/export-rig.mjs +256 -0
  240. package/tools/track/fallback.mjs +7 -0
  241. package/tools/track/fk-parity-fixture.mjs +161 -0
  242. package/tools/track/gate.mjs +349 -0
  243. package/tools/track/masks.mjs +318 -0
  244. package/tools/track/metrics.mjs +201 -0
  245. package/tools/track/publish-obs.mjs +108 -0
  246. package/tools/track/py/check_env.py +61 -0
  247. package/tools/track/py/eval_lr.py +229 -0
  248. package/tools/track/py/lr_viterbi.py +294 -0
  249. package/tools/track/py/masks.py +405 -0
  250. package/tools/track/py/objective.py +382 -0
  251. package/tools/track/py/rig.py +508 -0
  252. package/tools/track/py/scene.py +326 -0
  253. package/tools/track/py/test_joint_indices.py +123 -0
  254. package/tools/track/py/test_lr_viterbi.py +195 -0
  255. package/tools/track/py/test_masks.py +229 -0
  256. package/tools/track/py/test_rig.py +288 -0
  257. package/tools/track/py/test_scene.py +354 -0
  258. package/tools/track/py/test_track.py +328 -0
  259. package/tools/track/py/track.py +411 -0
  260. package/tools/track/remote.mjs +140 -0
  261. package/tools/track/rig-dump.mjs +227 -0
  262. package/tools/track/run-box-tests.mjs +14 -0
  263. package/tools/track/run-box.mjs +168 -0
  264. package/tools/track/setup-box.sh +59 -0
  265. package/tools/track/study-2d.mjs +728 -0
  266. package/dist/assets/analytics-B1hnH66c.js +0 -1
  267. package/dist/assets/app-Cu1cexZR.css +0 -1
  268. package/dist/assets/app-Dxdh8kds.js +0 -4861
  269. package/dist/assets/shot-prompt-C_g2BHVc.css +0 -1
  270. package/dist/assets/shot-prompt-HVJRP4Gr.js +0 -17
  271. package/dist/assets/workflow-CJd-PDtV.js +0 -179
  272. package/dist/assets/workflow-DsudxKHF.css +0 -1
  273. package/src/fal-motion-studio.jsx +0 -180
  274. package/src/scene-history.js +0 -129
  275. package/tools/ardy/__pycache__/cclay_gvhmr_worker.cpython-313.pyc +0 -0
package/src/styles.css CHANGED
@@ -1,37 +1,78 @@
1
- @font-face{font-family:Inter;font-style:normal;font-weight:400 800;font-display:swap;src:url(../fonts/inter-latin.woff2) format("woff2")}
1
+ @layer tokens, legacy, shell, regions;
2
2
 
3
+ @font-face {
4
+ font-family: "IBM Plex Sans";
5
+ font-style: normal;
6
+ font-weight: 400;
7
+ font-display: swap;
8
+ src: url("../fonts/ibm-plex-sans-400-latin.woff2") format("woff2");
9
+ }
10
+
11
+ @font-face {
12
+ font-family: "IBM Plex Sans";
13
+ font-style: normal;
14
+ font-weight: 500;
15
+ font-display: swap;
16
+ src: url("../fonts/ibm-plex-sans-500-latin.woff2") format("woff2");
17
+ }
18
+
19
+ @font-face {
20
+ font-family: "IBM Plex Sans";
21
+ font-style: normal;
22
+ font-weight: 600;
23
+ font-display: swap;
24
+ src: url("../fonts/ibm-plex-sans-600-latin.woff2") format("woff2");
25
+ }
26
+
27
+ @font-face {
28
+ font-family: "JetBrains Mono";
29
+ font-style: normal;
30
+ font-weight: 400;
31
+ font-display: swap;
32
+ src: url("../fonts/jetbrains-mono-400-latin.woff2") format("woff2");
33
+ }
34
+
35
+ @font-face {
36
+ font-family: "JetBrains Mono";
37
+ font-style: normal;
38
+ font-weight: 500;
39
+ font-display: swap;
40
+ src: url("../fonts/jetbrains-mono-500-latin.woff2") format("woff2");
41
+ }
42
+
43
+ @layer legacy {
3
44
  /* Cozy Clay uses one neutral grotesk family across its editing surfaces.
4
45
  Monospace is reserved for coordinates, frame values and machine status. */
5
46
 
6
47
  :root {
7
- --bg: #1e1e1e;
8
- --bg-grad: linear-gradient(145deg, #1e1e1e 0%, #1e1e1e 100%);
9
- --panel: #2c2c2c;
10
- --card: #383838;
11
- --card2: rgba(255, 255, 255, .04);
12
- --hover: rgba(255, 255, 255, .06);
13
- --line: #1a1a1a;
14
- --line2: #3c3c3c;
15
- --track: #3a3a3a;
16
- --fg: #d2d2d2;
17
- --muted: #9a9a9a;
18
- --muted2: #6f6f6f;
19
- --accent: #3a7cbf;
20
- --accent-2: #2d5c8a;
21
- --cyan: #5a9bd4;
22
- --accent-soft: rgba(45, 92, 138, .35);
23
- --accent-ring: rgba(58, 124, 191, .5);
24
- --on-accent: #ffffff;
25
- --grad: linear-gradient(103deg, #2d5c8a 0%, #2d5c8a 100%);
26
- --grad-soft: linear-gradient(103deg, #2d5c8a, #3a7cbf);
27
- --display: "Inter", "Pretendard", "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
28
- --sans: "Inter", "Pretendard", "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
29
- --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
30
- --radius: 2px;
48
+ --bg: var(--surface-0);
49
+ --bg-grad: var(--surface-0);
50
+ --panel: var(--surface-panel);
51
+ --card: var(--surface-raised);
52
+ --card2: var(--field);
53
+ --hover: var(--surface-active);
54
+ --line: var(--surface-0);
55
+ --line2: var(--row-divider);
56
+ --track: var(--surface-bar);
57
+ --fg: var(--text-1);
58
+ --muted: var(--text-2);
59
+ --muted2: var(--text-3);
60
+ --accent: var(--select);
61
+ --accent-2: var(--primary);
62
+ --cyan: var(--camera);
63
+ --accent-soft: var(--select-tint);
64
+ --accent-ring: var(--select-tint);
65
+ --on-accent: var(--text-selected);
66
+ --grad: var(--primary);
67
+ --grad-soft: var(--primary);
68
+ --display: var(--sans);
69
+ --sans: "IBM Plex Sans", "Pretendard", "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
70
+ --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
71
+ --radius: var(--r-1);
31
72
  --shadow: 0 1px 2px rgba(0, 0, 0, .4);
32
73
  --shadow-md: 0 5px 16px rgba(0, 0, 0, .5);
33
74
  --shadow-lg: 0 14px 34px rgba(0, 0, 0, .6);
34
- --glow: 0 0 0 1px rgba(58, 124, 191, .45);
75
+ --glow: 0 0 0 1px var(--select-tint);
35
76
  --ease: cubic-bezier(.22, .68, .2, 1);
36
77
  --spring: cubic-bezier(.34, 1.4, .5, 1);
37
78
  --fast: .14s;
@@ -56,41 +97,6 @@
56
97
  font-family: var(--sans);
57
98
  padding: 24px;
58
99
  }
59
- .crash-card {
60
- max-width: 440px;
61
- background: var(--panel);
62
- border: 1px solid var(--line2);
63
- border-radius: 10px;
64
- padding: 28px;
65
- color: var(--fg);
66
- text-align: center;
67
- }
68
- .crash-card h1 { font-size: 20px; font-weight: 700; margin-bottom: 12px; }
69
- .crash-card p { color: var(--muted); font-size: 14px; line-height: 1.6; margin-bottom: 14px; }
70
- .crash-card code {
71
- display: block;
72
- background: var(--card);
73
- border: 1px solid var(--line);
74
- border-radius: 6px;
75
- padding: 10px;
76
- font-family: var(--mono);
77
- font-size: 11px;
78
- color: #e08a7a;
79
- text-align: left;
80
- word-break: break-all;
81
- margin-bottom: 18px;
82
- }
83
- .crash-card button {
84
- background: var(--accent);
85
- color: #fff;
86
- border: 0;
87
- border-radius: 6px;
88
- padding: 9px 22px;
89
- font-size: 14px;
90
- font-weight: 600;
91
- cursor: pointer;
92
- }
93
- .crash-card button:hover { filter: brightness(1.12); }
94
100
 
95
101
  body,
96
102
  #root {
@@ -124,12 +130,12 @@ select {
124
130
  height: 11px;
125
131
  }
126
132
  ::-webkit-scrollbar-thumb {
127
- background: #4a4a4a;
133
+ background: var(--lg-4a4a4a, #4a4a4a);
128
134
  border-radius: 8px;
129
135
  border: 3px solid var(--panel);
130
136
  }
131
137
  ::-webkit-scrollbar-thumb:hover {
132
- background: #5c5c5c;
138
+ background: var(--lg-5c5c5c, #5c5c5c);
133
139
  }
134
140
  ::-webkit-scrollbar-track {
135
141
  background: rgba(231, 181, 87, .16);
@@ -164,29 +170,6 @@ select {
164
170
  animation-play-state: paused;
165
171
  }
166
172
 
167
- .logo {
168
- display: flex;
169
- align-items: center;
170
- justify-self: start;
171
- }
172
-
173
- .topbar-actions {
174
- grid-column: 3;
175
- justify-self: end;
176
- display: flex;
177
- align-items: center;
178
- gap: 6px;
179
- }
180
-
181
- .project-actions {
182
- display: inline-flex;
183
- align-items: center;
184
- gap: 5px;
185
- margin-right: 4px;
186
- padding-right: 10px;
187
- border-right: 1px solid var(--line2);
188
- }
189
-
190
173
  .topbar-action {
191
174
  min-height: 28px;
192
175
  padding: 3px 10px;
@@ -215,17 +198,6 @@ select {
215
198
  cursor: not-allowed;
216
199
  }
217
200
 
218
- .project-save-action {
219
- background: var(--accent);
220
- border-color: var(--accent);
221
- color: #20180d;
222
- }
223
-
224
- .project-save-action:hover:not(:disabled) {
225
- background: #f2c56d;
226
- border-color: #f2c56d;
227
- }
228
-
229
201
  .project-export-action.recording {
230
202
  border-color: #e87878;
231
203
  color: #ffb1b1;
@@ -384,84 +356,6 @@ select {
384
356
  box-shadow: 0 22px 80px rgba(0, 0, 0, .7);
385
357
  }
386
358
 
387
- .project-browser-intro {
388
- margin: -4px 0 2px;
389
- font-size: 12px;
390
- line-height: 1.55;
391
- color: var(--muted);
392
- }
393
-
394
- /* The first-run sheet gives a new author one obvious starting action and a
395
- * small mental model of the editor before the full studio is opened. */
396
- .beginner-start {
397
- display: grid;
398
- gap: 16px;
399
- padding: 16px;
400
- border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line2));
401
- border-radius: 12px;
402
- background: color-mix(in srgb, var(--accent) 7%, var(--panel));
403
- }
404
-
405
- .beginner-start-actions {
406
- display: flex;
407
- gap: 10px;
408
- align-items: center;
409
- }
410
-
411
- .beginner-create {
412
- min-height: 42px;
413
- padding-inline: 18px;
414
- font-size: 13px;
415
- }
416
-
417
- .beginner-open {
418
- min-height: 42px;
419
- }
420
-
421
- .beginner-step-grid {
422
- display: grid;
423
- grid-template-columns: repeat(3, minmax(0, 1fr));
424
- gap: 10px;
425
- }
426
-
427
- .beginner-step {
428
- display: grid;
429
- grid-template-columns: auto 1fr;
430
- column-gap: 8px;
431
- row-gap: 2px;
432
- padding: 10px;
433
- border: 1px solid var(--line2);
434
- border-radius: 9px;
435
- background: color-mix(in srgb, var(--panel) 82%, transparent);
436
- }
437
-
438
- .beginner-step b {
439
- grid-row: span 2;
440
- display: grid;
441
- place-items: center;
442
- width: 22px;
443
- height: 22px;
444
- border-radius: 50%;
445
- background: var(--accent);
446
- color: #fff;
447
- font-size: 11px;
448
- }
449
-
450
- .beginner-step strong {
451
- font-size: 12px;
452
- }
453
-
454
- .beginner-step span {
455
- font-size: 10.5px;
456
- line-height: 1.35;
457
- color: var(--muted);
458
- }
459
-
460
- @media (max-width: 620px) {
461
- .beginner-step-grid { grid-template-columns: 1fr; }
462
- .beginner-start-actions { flex-direction: column; align-items: stretch; }
463
- }
464
-
465
359
  .project-name-dialog-backdrop {
466
360
  position: fixed;
467
361
  inset: 0;
@@ -527,7 +421,7 @@ select {
527
421
  background: color-mix(in srgb, var(--panel) 96%, #101218);
528
422
  border: 1px solid var(--accent);
529
423
  border-radius: 14px;
530
- box-shadow: 0 18px 58px rgba(0, 0, 0, .58), 0 0 0 1px rgba(255, 255, 255, .04);
424
+ box-shadow: 0 18px 58px rgba(0, 0, 0, .58), 0 0 0 1px rgba(var(--lg-ink-rgb, 255,255,255), .04);
531
425
  animation: rise .28s var(--ease) both;
532
426
  }
533
427
 
@@ -737,13 +631,6 @@ select {
737
631
  }
738
632
  }
739
633
 
740
- .project-browser-head {
741
- display: flex;
742
- align-items: center;
743
- justify-content: space-between;
744
- font-size: 15px;
745
- }
746
-
747
634
  .project-browser-head .x {
748
635
  background: none;
749
636
  border: none;
@@ -759,85 +646,10 @@ select {
759
646
  gap: 6px;
760
647
  }
761
648
 
762
- .project-browser-section-head {
763
- display: flex;
764
- align-items: center;
765
- justify-content: space-between;
766
- font-size: 11px;
767
- font-weight: 700;
768
- letter-spacing: .06em;
769
- text-transform: uppercase;
770
- color: var(--muted);
771
- }
772
-
773
- .project-browser-section-head .row-actions {
774
- display: flex;
775
- gap: 6px;
776
- }
777
-
778
- .project-browser-section-head button {
779
- font-size: 10px;
780
- padding: 2px 8px;
781
- border-radius: 6px;
782
- border: 1px solid var(--line2);
783
- background: none;
784
- color: var(--fg);
785
- cursor: pointer;
786
- }
787
-
788
- .project-browser-empty {
789
- font-size: 11px;
790
- color: var(--muted2);
791
- padding: 8px 10px;
792
- background: var(--card2);
793
- border-radius: 8px;
794
- }
795
-
796
- .project-browser-list {
797
- list-style: none;
798
- margin: 0;
799
- padding: 0;
800
- display: flex;
801
- flex-direction: column;
802
- gap: 3px;
803
- }
804
-
805
- .project-browser-list li {
806
- display: flex;
807
- align-items: stretch;
808
- gap: 4px;
809
- }
810
-
811
- .project-browser-list li > button:first-child {
812
- flex: 1;
813
- display: flex;
814
- align-items: center;
815
- justify-content: space-between;
816
- gap: 10px;
817
- padding: 8px 10px;
818
- border: 1px solid var(--line);
819
- border-radius: 8px;
820
- background: var(--card2);
821
- color: var(--fg);
822
- font-size: 12px;
823
- cursor: pointer;
824
- text-align: left;
825
- }
826
-
827
- .project-browser-list li > button:first-child span {
828
- font-size: 10px;
829
- color: var(--muted2);
830
- flex: none;
831
- }
832
-
833
649
  .project-browser-list li.active > button:first-child {
834
650
  border-color: var(--accent);
835
651
  }
836
652
 
837
- .project-browser-list li > button:first-child:hover {
838
- border-color: var(--accent);
839
- }
840
-
841
653
  .project-browser-list .del {
842
654
  border: none;
843
655
  background: none;
@@ -847,12 +659,6 @@ select {
847
659
  font-size: 11px;
848
660
  }
849
661
 
850
- .project-browser-foot {
851
- display: flex;
852
- justify-content: space-between;
853
- gap: 8px;
854
- }
855
-
856
662
  .project-browser-foot .btn {
857
663
  flex: 1;
858
664
  }
@@ -860,19 +666,15 @@ select {
860
666
  .auto-color-hex {
861
667
  align-self: center;
862
668
  font-size: 10px;
863
- color: var(--fg-dim, #9a9a9a);
669
+ color: var(--fg-dim, var(--lg-9a9a9a, #9a9a9a));
864
670
  font-variant-numeric: tabular-nums;
865
671
  }
866
-
867
- .toolbar-balance {
868
- min-width: 0;
869
- }
870
672
  .wordmark {
871
673
  font-family: var(--display);
872
674
  font-weight: 750;
873
675
  font-size: 18px;
874
676
  line-height: 1;
875
- color: #d2d2d2;
677
+ color: var(--lg-d2d2d2, #d2d2d2);
876
678
  letter-spacing: -.045em;
877
679
  }
878
680
  .wordmark span {
@@ -918,118 +720,6 @@ select {
918
720
  text-decoration: underline;
919
721
  }
920
722
 
921
- .tagline {
922
- font-size: 12.5px;
923
- color: var(--muted);
924
- position: relative;
925
- padding-left: 17px;
926
- }
927
- .tagline:before {
928
- content: "";
929
- position: absolute;
930
- left: 0;
931
- top: 50%;
932
- transform: translateY(-50%);
933
- width: 1px;
934
- height: 18px;
935
- background: var(--line2);
936
- }
937
-
938
- .controls-menu {
939
- position: relative;
940
- justify-self: end;
941
- z-index: 20;
942
- }
943
-
944
- .controls-menu summary {
945
- height: 30px;
946
- display: flex;
947
- align-items: center;
948
- gap: 7px;
949
- padding: 0 10px 0 12px;
950
- border: 1px solid rgba(255, 255, 255, .24);
951
- border-radius: 6px;
952
- background: #2c2c2c;
953
- color: #52616b;
954
- font-size: 10px;
955
- font-weight: 700;
956
- letter-spacing: .02em;
957
- cursor: pointer;
958
- list-style: none;
959
- user-select: none;
960
- }
961
-
962
- .controls-menu summary::-webkit-details-marker {
963
- display: none;
964
- }
965
-
966
- .controls-menu summary span {
967
- font-size: 12px;
968
- line-height: 1;
969
- transition: transform var(--fast) var(--ease);
970
- }
971
-
972
- .controls-menu[open] summary {
973
- color: #d2d2d2;
974
- border-color: #3a7cbf;
975
- background: #383838;
976
- }
977
-
978
- .controls-menu[open] summary span {
979
- transform: rotate(180deg);
980
- }
981
-
982
- .controls-popover {
983
- position: absolute;
984
- top: calc(100% + 8px);
985
- right: 0;
986
- width: 250px;
987
- padding: 12px;
988
- border: 1px solid rgba(255, 255, 255, .24);
989
- border-radius: 8px;
990
- background: #2c2c2c;
991
- box-shadow: 0 12px 30px rgba(0, 0, 0, .16);
992
- }
993
-
994
- .controls-grid {
995
- display: grid;
996
- grid-template-columns: max-content 1fr;
997
- align-items: center;
998
- gap: 8px 12px;
999
- }
1000
-
1001
- .controls-grid kbd {
1002
- min-width: 46px;
1003
- padding: 3px 6px;
1004
- border: 1px solid rgba(255, 255, 255, .22);
1005
- border-bottom-width: 2px;
1006
- border-radius: 4px;
1007
- background: #232323;
1008
- color: #d2d2d2;
1009
- font: 650 9px var(--mono);
1010
- text-align: center;
1011
- }
1012
-
1013
- .controls-grid span,
1014
- .controls-popover p {
1015
- color: #9a9a9a;
1016
- font-size: 10.5px;
1017
- line-height: 1.35;
1018
- }
1019
-
1020
- .controls-popover p {
1021
- margin: 0;
1022
- }
1023
-
1024
- .controls-popover p strong {
1025
- display: block;
1026
- margin-bottom: 4px;
1027
- color: #d2d2d2;
1028
- font-size: 10px;
1029
- text-transform: uppercase;
1030
- letter-spacing: .08em;
1031
- }
1032
-
1033
723
  .main {
1034
724
  flex: 1;
1035
725
  display: flex;
@@ -1076,7 +766,7 @@ select {
1076
766
  height: 100%;
1077
767
  max-width: 100%;
1078
768
  max-height: 100%;
1079
- border: 1px solid rgba(255, 255, 255, .38);
769
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .38);
1080
770
  border-radius: 0;
1081
771
  overflow: hidden;
1082
772
  box-shadow: var(--shadow-md);
@@ -1209,7 +899,8 @@ select {
1209
899
  .app[data-tutorial-step="shot"] .tl-track.shots .tl-track-add,
1210
900
  .app[data-tutorial-step="rail"] .tl-track.shots .tl-shot-block:not(.selected),
1211
901
  .app[data-tutorial-step="rail"] .tl-rail-draw,
1212
- .app[data-tutorial-step="play"] .vp-look-through {
902
+ .app[data-tutorial-step="play"] .vp-look-through,
903
+ .app[data-tutorial-step="play"] .dock-shot-look {
1213
904
  animation: tutorial-spotlight 1.5s var(--ease) infinite;
1214
905
  box-shadow: 0 0 0 3px var(--accent);
1215
906
  }
@@ -1377,64 +1068,6 @@ select {
1377
1068
  position: static;
1378
1069
  }
1379
1070
 
1380
- .scene-loading {
1381
- position: absolute;
1382
- inset: auto 0 0 0;
1383
- z-index: 4;
1384
- display: flex;
1385
- flex-direction: column;
1386
- align-items: center;
1387
- gap: 8px;
1388
- padding: 0 0 26px;
1389
- pointer-events: none;
1390
- }
1391
- .scene-loading-bar {
1392
- width: 180px;
1393
- height: 2px;
1394
- border-radius: 2px;
1395
- overflow: hidden;
1396
- background: var(--track);
1397
- }
1398
- .scene-loading-bar span {
1399
- display: block;
1400
- height: 100%;
1401
- background: var(--accent);
1402
- transition: width .25s var(--ease);
1403
- }
1404
- .scene-loading-label {
1405
- font-size: 11px;
1406
- letter-spacing: .06em;
1407
- text-transform: uppercase;
1408
- color: var(--muted);
1409
- }
1410
-
1411
- .scene-error {
1412
- position: absolute;
1413
- top: 0;
1414
- right: 0;
1415
- bottom: 0;
1416
- left: 0;
1417
- z-index: 5;
1418
- display: flex;
1419
- flex-direction: column;
1420
- align-items: center;
1421
- justify-content: center;
1422
- gap: 10px;
1423
- text-align: center;
1424
- padding: 24px;
1425
- background: var(--bg);
1426
- }
1427
- .scene-error-title {
1428
- font-size: 15px;
1429
- font-weight: 600;
1430
- color: var(--fg);
1431
- }
1432
- .scene-error-hint {
1433
- font-size: 13px;
1434
- color: var(--muted);
1435
- max-width: 320px;
1436
- }
1437
-
1438
1071
  /* Composition guides (Blender's camera display guides): chrome over the shot
1439
1072
  frame, never over exported pixels. The SVG letterboxes itself via its
1440
1073
  viewBox, so no JS measures the frame rect. */
@@ -1451,7 +1084,7 @@ select {
1451
1084
  }
1452
1085
  .shot-guides line,
1453
1086
  .shot-guides rect {
1454
- stroke: rgba(255, 255, 255, .34);
1087
+ stroke: rgba(var(--lg-ink-rgb, 255,255,255), .34);
1455
1088
  stroke-width: 1px;
1456
1089
  fill: none;
1457
1090
  }
@@ -1463,7 +1096,7 @@ select {
1463
1096
  border: 0;
1464
1097
  padding: 1px 2px;
1465
1098
  background: none;
1466
- color: rgba(255, 255, 255, .5);
1099
+ color: rgba(var(--lg-ink-rgb, 255,255,255), .5);
1467
1100
  cursor: pointer;
1468
1101
  border-radius: 3px;
1469
1102
  }
@@ -1483,7 +1116,7 @@ select {
1483
1116
  position: absolute;
1484
1117
  width: 17px;
1485
1118
  height: 17px;
1486
- border: 1.5px solid rgba(255, 255, 255, .3);
1119
+ border: 1.5px solid rgba(var(--lg-ink-rgb, 255,255,255), .3);
1487
1120
  }
1488
1121
  .film-frame span:nth-child(1) {
1489
1122
  top: 0;
@@ -1518,27 +1151,11 @@ select {
1518
1151
  .caption,
1519
1152
  .viewmode {
1520
1153
  background: #0e0e108c;
1521
- border: 1px solid rgba(255, 255, 255, .1);
1154
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .1);
1522
1155
  backdrop-filter: blur(14px) saturate(1.2);
1523
1156
  -webkit-backdrop-filter: blur(14px) saturate(1.2);
1524
1157
  }
1525
1158
 
1526
- .hud {
1527
- position: absolute;
1528
- left: 16px;
1529
- top: 15px;
1530
- z-index: 6;
1531
- font-size: 11.5px;
1532
- color: #eeeef2;
1533
- padding: 6px 12px;
1534
- border-radius: 9px;
1535
- font-weight: 500;
1536
- display: flex;
1537
- align-items: center;
1538
- gap: 7px;
1539
- animation: rise var(--med) var(--ease) both;
1540
- }
1541
-
1542
1159
  .caption {
1543
1160
  position: absolute;
1544
1161
  left: 50%;
@@ -1563,86 +1180,11 @@ select {
1563
1180
  border-color: rgba(229, 72, 77, .5);
1564
1181
  color: #ffc9cb;
1565
1182
  }
1566
-
1567
- .viewmode {
1568
- position: static;
1569
- justify-self: center;
1570
- display: flex;
1571
- gap: 2px;
1572
- padding: 3px;
1573
- border-radius: 7px;
1574
- animation: none;
1575
- }
1576
- .viewmode button {
1577
- background: none;
1578
- border: none;
1579
- color: #dcdce2;
1580
- cursor: pointer;
1581
- height: 26px;
1582
- padding: 0 12px;
1583
- border-radius: 5px;
1584
- font-size: 10px;
1585
- font-weight: 700;
1586
- transition: all .16s var(--ease);
1587
- }
1588
- .viewmode button:hover {
1589
- color: #fff;
1590
- }
1591
- .viewmode button.active {
1592
- background: var(--grad);
1593
- color: #fff;
1594
- box-shadow: 0 3px 12px #3346ff66;
1595
- }
1596
-
1597
- .puck-label {
1598
- /* the plan board is a drag surface; a label that takes the pointer kills it */
1599
- pointer-events: none;
1600
- background: #0e0d10d9;
1601
- border: 1px solid var(--line2);
1602
- color: #fff;
1603
- padding: 3px 10px;
1604
- border-radius: 20px;
1605
- font-size: 11px;
1606
- font-weight: 600;
1607
- white-space: nowrap;
1608
- -webkit-user-select: none;
1609
- user-select: none;
1610
- font-family: var(--sans);
1611
- box-shadow: 0 2px 8px #0006;
1612
- }
1613
-
1614
- .pose-fab {
1615
- font-family: var(--sans);
1616
- font-size: 12.5px;
1617
- font-weight: 600;
1618
- color: #fff;
1619
- background: var(--grad);
1620
- border: none;
1621
- padding: 8px 16px;
1622
- border-radius: 22px;
1623
- cursor: pointer;
1624
- white-space: nowrap;
1625
- box-shadow: var(--glow), 0 4px 14px #0006;
1626
- transition: transform .14s var(--spring), box-shadow .15s ease;
1627
- animation: fabPop .28s var(--spring) both;
1628
- }
1629
- .pose-fab:hover {
1630
- transform: translateY(-2px) scale(1.03);
1631
- box-shadow: 0 10px 30px #3346ff80;
1632
- }
1633
- .pose-fab:active {
1634
- transform: scale(.96);
1635
- }
1636
-
1637
- .pose-bar {
1638
- display: flex;
1639
- gap: 8px;
1640
- }
1641
- .pose-btns {
1642
- display: flex;
1643
- flex-direction: column;
1644
- gap: 8px;
1645
- }
1183
+ .viewmode button.active {
1184
+ background: var(--grad);
1185
+ color: #fff;
1186
+ box-shadow: 0 3px 12px #3346ff66;
1187
+ }
1646
1188
  .pose-btns .btn.full {
1647
1189
  margin-top: 0;
1648
1190
  }
@@ -1751,54 +1293,9 @@ select {
1751
1293
  pointer-events: none;
1752
1294
  }
1753
1295
 
1754
- /* ARDY row: duration + seed side by side (Motion tab compacting). */
1755
- .ardy-row {
1756
- display: flex;
1757
- gap: 8px;
1758
- }
1759
-
1760
- .ardy-row > * {
1761
- flex: 1;
1762
- min-width: 0;
1763
- }
1764
-
1765
- /* Per-character motion layer status in the Motion tab. */
1766
- .gen-layers {
1767
- list-style: none;
1768
- margin: 0;
1769
- padding: 4px 6px;
1770
- display: flex;
1771
- flex-direction: column;
1772
- gap: 2px;
1773
- background: var(--card2, rgba(255,255,255,.04));
1774
- border: 1px solid var(--line);
1775
- border-radius: 8px;
1776
- }
1777
-
1778
- .gen-layers li {
1779
- display: flex;
1780
- align-items: center;
1781
- gap: 8px;
1782
- font-size: 11px;
1783
- color: var(--muted);
1784
- padding: 2px 4px;
1785
- border-radius: 5px;
1786
- }
1787
-
1788
1296
  .gen-layers li.active {
1789
1297
  color: var(--fg);
1790
- background: var(--hover, rgba(255,255,255,.06));
1791
- }
1792
-
1793
- .gen-layers-name {
1794
- font-weight: 700;
1795
- color: var(--cyan, #5a9bd4);
1796
- width: 22px;
1797
- flex: none;
1798
- }
1799
-
1800
- .gen-layers-state {
1801
- flex: 1;
1298
+ background: var(--hover, rgba(var(--lg-ink-rgb, 255,255,255),.06));
1802
1299
  }
1803
1300
 
1804
1301
  .gen-layers-state.running { color: #f5b453; }
@@ -1806,15 +1303,6 @@ select {
1806
1303
  .gen-layers-state.error { color: #e06c6c; }
1807
1304
  .gen-layers-state.loaded { color: #7bc98b; }
1808
1305
 
1809
- .gen-layers li button {
1810
- background: none;
1811
- border: none;
1812
- color: var(--muted2);
1813
- cursor: pointer;
1814
- font-size: 10px;
1815
- padding: 0 2px;
1816
- }
1817
-
1818
1306
  /* Timeline track owner chip: which character's layer a Prompts/2D Root
1819
1307
  track belongs to. */
1820
1308
  .tl-track-owner {
@@ -2110,7 +1598,7 @@ select {
2110
1598
  justify-content: space-between;
2111
1599
  gap: 10px;
2112
1600
  padding: 13px 14px 11px;
2113
- border-bottom: 1px solid rgba(255, 255, 255, .055);
1601
+ border-bottom: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .055);
2114
1602
  }
2115
1603
 
2116
1604
  .hierarchy-heading > div { min-width: 0; }
@@ -2137,16 +1625,6 @@ select {
2137
1625
  text-transform: uppercase;
2138
1626
  }
2139
1627
 
2140
- .hierarchy-frame-status {
2141
- flex: none;
2142
- padding: 3px 7px;
2143
- border: 1px solid rgba(126, 154, 255, .16);
2144
- border-radius: 999px;
2145
- background: rgba(87, 111, 221, .08);
2146
- color: #9aa9d8;
2147
- font-size: 8px;
2148
- }
2149
-
2150
1628
  /* Disclosures that keep a once-in-a-while control out of the permanent
2151
1629
  furniture: a summary you can read, a panel that opens where it stands. */
2152
1630
  .object-colors-pop > summary {
@@ -2171,7 +1649,7 @@ select {
2171
1649
  display: block;
2172
1650
  width: 22px;
2173
1651
  height: 22px;
2174
- border: 1px solid rgba(255, 255, 255, .28);
1652
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .28);
2175
1653
  border-radius: 6px;
2176
1654
  }
2177
1655
 
@@ -2263,10 +1741,10 @@ select {
2263
1741
  top: -7px;
2264
1742
  bottom: 13px;
2265
1743
  width: 1px;
2266
- background: rgba(255, 255, 255, .055);
1744
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .055);
2267
1745
  }
2268
1746
 
2269
- .hierarchy-row-wrap:hover { background: rgba(255, 255, 255, .045); }
1747
+ .hierarchy-row-wrap:hover { background: rgba(var(--lg-ink-rgb, 255,255,255), .045); }
2270
1748
 
2271
1749
  .hierarchy-row-wrap.selected {
2272
1750
  background: linear-gradient(90deg, rgba(70, 92, 230, .32), rgba(67, 93, 190, .12));
@@ -2364,7 +1842,7 @@ select {
2364
1842
  min-width: 16px;
2365
1843
  padding: 2px 4px;
2366
1844
  border-radius: 999px;
2367
- background: rgba(255, 255, 255, .065);
1845
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .065);
2368
1846
  color: #8f97a9;
2369
1847
  font-size: 7px;
2370
1848
  text-align: center;
@@ -2476,31 +1954,6 @@ select {
2476
1954
  line-height: 1.55;
2477
1955
  }
2478
1956
 
2479
- .inspector-status-grid {
2480
- display: grid;
2481
- /* `auto` let a long value push the row past the panel. Both tracks may now
2482
- shrink, and the value wraps instead of demanding a width nothing has. */
2483
- grid-template-columns: minmax(0, 1fr) minmax(0, auto);
2484
- gap: 7px 12px;
2485
- margin: 0 0 12px;
2486
- padding: 9px 10px;
2487
- border: 1px solid rgba(255, 255, 255, .06);
2488
- border-radius: 6px;
2489
- background: rgba(0, 0, 0, .12);
2490
- font-size: 8px;
2491
- }
2492
-
2493
- .inspector-status-grid span { color: var(--muted); min-width: 0; }
2494
- .inspector-status-grid b {
2495
- color: #c7cde0;
2496
- font-weight: 600;
2497
- min-width: 0;
2498
- /* An id or a path has no spaces to break at; break it anywhere rather than
2499
- let it decide the panel's width. */
2500
- overflow-wrap: anywhere;
2501
- text-align: right;
2502
- }
2503
-
2504
1957
  .inspector-list {
2505
1958
  display: grid;
2506
1959
  gap: 5px;
@@ -2514,9 +1967,9 @@ select {
2514
1967
  justify-content: space-between;
2515
1968
  gap: 10px;
2516
1969
  padding: 8px 9px;
2517
- border: 1px solid rgba(255, 255, 255, .065);
1970
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .065);
2518
1971
  border-radius: 5px;
2519
- background: rgba(255, 255, 255, .025);
1972
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .025);
2520
1973
  color: #aeb4c2;
2521
1974
  text-align: left;
2522
1975
  cursor: pointer;
@@ -2551,7 +2004,7 @@ select {
2551
2004
  position: relative;
2552
2005
  overflow: hidden;
2553
2006
  background: linear-gradient(180deg, #141417, #0b0b0d);
2554
- border: 1px solid rgba(255, 255, 255, .06);
2007
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .06);
2555
2008
  border-radius: 16px;
2556
2009
  padding: 17px 18px 19px;
2557
2010
  margin-bottom: 14px;
@@ -2872,10 +2325,6 @@ input[type=range]::-moz-range-thumb {
2872
2325
  .segmented button.active {
2873
2326
  color: #fff;
2874
2327
  }
2875
-
2876
- .sheet-checks {
2877
- margin-bottom: 4px;
2878
- }
2879
2328
  .sheet-checks .check {
2880
2329
  margin-top: 9px;
2881
2330
  }
@@ -2959,7 +2408,7 @@ input[type=range]::-moz-range-thumb {
2959
2408
  left: -60%;
2960
2409
  width: 45%;
2961
2410
  height: 100%;
2962
- background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .28), transparent);
2411
+ background: linear-gradient(100deg, transparent, rgba(var(--lg-ink-rgb, 255,255,255), .28), transparent);
2963
2412
  transform: skew(-18deg);
2964
2413
  transition: left .5s var(--ease);
2965
2414
  }
@@ -2979,43 +2428,6 @@ input[type=range]::-moz-range-thumb {
2979
2428
  }
2980
2429
  /* ------------------------------------------------------ ardy panel ------- */
2981
2430
 
2982
- .ardy-meta {
2983
- margin: 0 0 4px;
2984
- font-size: 11px;
2985
- color: var(--muted2);
2986
- letter-spacing: .04em;
2987
- }
2988
-
2989
- .ardy-hint {
2990
- margin: 0;
2991
- font-size: 11.5px;
2992
- line-height: 1.6;
2993
- color: var(--muted);
2994
- }
2995
-
2996
- .ardy-hint + .ardy-hint {
2997
- margin-top: 6px;
2998
- }
2999
-
3000
- .ardy-hint code,
3001
- .ardy-outcome code {
3002
- padding: 1px 6px;
3003
- border-radius: 6px;
3004
- background: var(--card2);
3005
- border: 1px solid var(--line);
3006
- color: #dcdce2;
3007
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
3008
- font-size: 11px;
3009
- word-break: break-all;
3010
- }
3011
-
3012
- .ardy-clamp {
3013
- display: block;
3014
- margin-top: 5px;
3015
- font-size: 10.5px;
3016
- color: var(--muted2);
3017
- }
3018
-
3019
2431
  .ardy-status {
3020
2432
  margin: 10px 0 0;
3021
2433
  font-size: 11.5px;
@@ -3028,45 +2440,6 @@ input[type=range]::-moz-range-thumb {
3028
2440
  color: var(--cyan);
3029
2441
  }
3030
2442
 
3031
- .ardy-report {
3032
- margin-top: 12px;
3033
- padding: 10px 12px;
3034
- border: 1px solid var(--line);
3035
- border-radius: 10px;
3036
- background: var(--card2);
3037
- animation: rise var(--med) var(--ease);
3038
- }
3039
-
3040
- .ardy-report-grid {
3041
- display: grid;
3042
- grid-template-columns: 1fr auto;
3043
- gap: 4px 12px;
3044
- font-size: 11.5px;
3045
- }
3046
-
3047
- .ardy-report-grid span {
3048
- color: var(--muted);
3049
- }
3050
-
3051
- .ardy-report-grid b {
3052
- color: var(--fg);
3053
- font-weight: 600;
3054
- font-variant-numeric: tabular-nums;
3055
- }
3056
-
3057
- .ardy-caveat {
3058
- margin: 8px 0 0;
3059
- font-size: 10.5px;
3060
- line-height: 1.55;
3061
- color: var(--muted2);
3062
- }
3063
-
3064
- .ardy-outcome {
3065
- margin: 10px 0 0;
3066
- font-size: 11.5px;
3067
- line-height: 1.6;
3068
- }
3069
-
3070
2443
  .ardy-outcome.done {
3071
2444
  color: var(--muted);
3072
2445
  }
@@ -3282,7 +2655,7 @@ input[type=range]::-moz-range-thumb {
3282
2655
  justify-content: space-between;
3283
2656
  gap: 8px;
3284
2657
  background: var(--card2);
3285
- border: 1px solid rgba(255, 255, 255, .08);
2658
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .08);
3286
2659
  color: var(--fg);
3287
2660
  border-radius: 10px;
3288
2661
  padding: 10px 12px;
@@ -3737,7 +3110,7 @@ input[type=range]::-moz-range-thumb {
3737
3110
  vector-effect: non-scaling-stroke;
3738
3111
  }
3739
3112
 
3740
- .sg-outside { fill: rgba(255, 255, 255, .05); }
3113
+ .sg-outside { fill: rgba(var(--lg-ink-rgb, 255,255,255), .05); }
3741
3114
 
3742
3115
  .sg-fill { fill: url(#sg-fade); }
3743
3116
 
@@ -3989,7 +3362,7 @@ input[type=range]::-moz-range-thumb {
3989
3362
  vector-effect: non-scaling-stroke;
3990
3363
  }
3991
3364
 
3992
- .sg-outside { fill: rgba(255, 255, 255, .04); }
3365
+ .sg-outside { fill: rgba(var(--lg-ink-rgb, 255,255,255), .04); }
3993
3366
 
3994
3367
  .sg-cut {
3995
3368
  stroke: #ffb454;
@@ -4301,7 +3674,7 @@ input[type=range]::-moz-range-thumb {
4301
3674
  font-size: 12px;
4302
3675
  font-variant-numeric: tabular-nums;
4303
3676
  color: var(--muted);
4304
- background: #101013;
3677
+ background: var(--lg-101013, #101013);
4305
3678
  border: 1px solid var(--line);
4306
3679
  border-radius: 6px;
4307
3680
  white-space: nowrap;
@@ -4391,7 +3764,7 @@ input[type=range]::-moz-range-thumb {
4391
3764
  display: grid;
4392
3765
  grid-template-columns: var(--tl-label-w) 1fr;
4393
3766
  height: auto;
4394
- background: #101013;
3767
+ background: var(--lg-101013, #101013);
4395
3768
  border-bottom: 1px solid var(--line);
4396
3769
  }
4397
3770
 
@@ -4465,7 +3838,7 @@ input[type=range]::-moz-range-thumb {
4465
3838
  height: auto;
4466
3839
  min-height: 18px;
4467
3840
  /* One continuous row separator across label + lane. */
4468
- border-bottom: 1px solid rgba(255, 255, 255, .06);
3841
+ border-bottom: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .06);
4469
3842
  }
4470
3843
 
4471
3844
  .tl-track-label {
@@ -4496,7 +3869,7 @@ input[type=range]::-moz-range-thumb {
4496
3869
  bottom: 0;
4497
3870
  left: calc(var(--tl-f) * 100%);
4498
3871
  width: 1px;
4499
- background: rgba(255, 255, 255, .03);
3872
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .03);
4500
3873
  pointer-events: none;
4501
3874
  }
4502
3875
 
@@ -4684,7 +4057,7 @@ input[type=range]::-moz-range-thumb {
4684
4057
  }
4685
4058
 
4686
4059
  .tl-chip-input::placeholder {
4687
- color: rgba(255, 255, 255, .72);
4060
+ color: rgba(var(--lg-ink-rgb, 255,255,255), .72);
4688
4061
  }
4689
4062
 
4690
4063
  .tl-chip-handle {
@@ -4694,7 +4067,7 @@ input[type=range]::-moz-range-thumb {
4694
4067
  width: 8px;
4695
4068
  padding: 0;
4696
4069
  border: 0;
4697
- background: rgba(255, 255, 255, .2);
4070
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .2);
4698
4071
  cursor: ew-resize;
4699
4072
  z-index: 2;
4700
4073
  }
@@ -4702,14 +4075,6 @@ input[type=range]::-moz-range-thumb {
4702
4075
  .tl-chip-handle.start { left: 0; }
4703
4076
  .tl-chip-handle.end { right: 0; }
4704
4077
 
4705
- .tl-chip-text {
4706
- flex: 1;
4707
- min-width: 0;
4708
- overflow: hidden;
4709
- text-overflow: ellipsis;
4710
- white-space: nowrap;
4711
- }
4712
-
4713
4078
  /* No motion prompt yet: identical frame 0..end geometry, visually quiet. */
4714
4079
  .tl-chip.empty {
4715
4080
  background: linear-gradient(103deg, #2a2d3a, #3b4050);
@@ -4761,27 +4126,8 @@ input[type=range]::-moz-range-thumb {
4761
4126
  text-align: center;
4762
4127
  }
4763
4128
 
4764
- .tl-shot-empty-add {
4765
- flex: none;
4766
- padding: 4px 8px;
4767
- border: 1px solid #735ba0;
4768
- border-radius: 4px;
4769
- background: rgba(80, 63, 109, .72);
4770
- color: #e7d9ff;
4771
- font: inherit;
4772
- font-style: normal;
4773
- cursor: pointer;
4774
- }
4775
-
4776
- .tl-shot-empty-add:hover,
4777
- .tl-shot-empty-add:focus-visible {
4778
- background: #5b467b;
4779
- border-color: #b79be8;
4780
- color: #fff;
4781
- }
4782
-
4783
4129
  .tl-shot-block.active {
4784
- border-color: #e7b557;
4130
+ border-color: var(--select);
4785
4131
  background: #503f6d;
4786
4132
  }
4787
4133
 
@@ -4881,8 +4227,8 @@ input[type=range]::-moz-range-thumb {
4881
4227
  width: 100%;
4882
4228
  height: 16px;
4883
4229
  padding: 0 3px;
4884
- border: 1px solid #e7b557;
4885
- background: #232323;
4230
+ border: 1px solid var(--select);
4231
+ background: var(--lg-232323, #232323);
4886
4232
  color: #fff;
4887
4233
  font: inherit;
4888
4234
  outline: 0;
@@ -4896,9 +4242,9 @@ input[type=range]::-moz-range-thumb {
4896
4242
  width: 14px;
4897
4243
  padding: 0;
4898
4244
  border: 0;
4899
- border-left: 2px solid #e7b557;
4245
+ border-left: 2px solid var(--select);
4900
4246
  background: transparent;
4901
- color: #e7b557;
4247
+ color: var(--select);
4902
4248
  font-size: 14px;
4903
4249
  line-height: 1;
4904
4250
  cursor: ew-resize;
@@ -4913,7 +4259,7 @@ input[type=range]::-moz-range-thumb {
4913
4259
  left: auto;
4914
4260
  right: 0;
4915
4261
  border-left: 0;
4916
- border-right: 2px solid #e7b557;
4262
+ border-right: 2px solid var(--select);
4917
4263
  }
4918
4264
 
4919
4265
  .tl-shot-actions {
@@ -4940,7 +4286,7 @@ input[type=range]::-moz-range-thumb {
4940
4286
  padding: 0 4px;
4941
4287
  border: 0;
4942
4288
  border-radius: 2px;
4943
- background: rgba(255, 255, 255, .12);
4289
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .12);
4944
4290
  color: inherit;
4945
4291
  font-size: 9px;
4946
4292
  line-height: 1;
@@ -4971,7 +4317,7 @@ input[type=range]::-moz-range-thumb {
4971
4317
 
4972
4318
  .tl-camera-block-state {
4973
4319
  padding: 1px 3px;
4974
- border: 1px solid rgba(255, 255, 255, .22);
4320
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .22);
4975
4321
  border-radius: 2px;
4976
4322
  background: rgba(0, 0, 0, .16);
4977
4323
  color: #d8ccef;
@@ -5014,27 +4360,6 @@ input[type=range]::-moz-range-thumb {
5014
4360
  display: none;
5015
4361
  }
5016
4362
  }
5017
- .tl-crane-point {
5018
- box-sizing: border-box;
5019
- position: absolute;
5020
- width: 18px;
5021
- height: 18px;
5022
- padding: 0;
5023
- transform: translate(-50%, -50%);
5024
- border: 2px solid #211b31;
5025
- border-radius: 50%;
5026
- background: #a78bfa;
5027
- box-shadow: 0 0 0 1px rgba(203, 183, 255, .65), 0 0 8px rgba(167, 139, 250, .9);
5028
- cursor: ns-resize;
5029
- pointer-events: auto;
5030
- z-index: 5;
5031
- }
5032
-
5033
- .tl-crane-point:hover,
5034
- .tl-crane-point:focus-visible {
5035
- outline: 2px solid #fff;
5036
- outline-offset: 1px;
5037
- }
5038
4363
 
5039
4364
  .tl-crane-point.selected {
5040
4365
  background: #ffb454;
@@ -5334,9 +4659,6 @@ input[type=range]::-moz-range-thumb {
5334
4659
  aspect-ratio: auto;
5335
4660
  max-height: none;
5336
4661
  }
5337
- .tagline {
5338
- display: none;
5339
- }
5340
4662
  .pose-studio {
5341
4663
  top: 15%;
5342
4664
  right: 8px;
@@ -5360,12 +4682,6 @@ input[type=range]::-moz-range-thumb {
5360
4682
  gap: 10px;
5361
4683
  height: 54px;
5362
4684
  }
5363
- .kbd-hint {
5364
- display: none;
5365
- }
5366
- .wordmark {
5367
- font-size: 22px;
5368
- }
5369
4685
  .viewport {
5370
4686
  min-height: 46vh;
5371
4687
  padding: 10px;
@@ -5644,14 +4960,6 @@ input[type=range]::-moz-range-thumb {
5644
4960
  width: 2px;
5645
4961
  }
5646
4962
 
5647
- .hierarchy-splitter {
5648
- position: relative;
5649
- z-index: 3;
5650
- height: 6px;
5651
- cursor: row-resize;
5652
- background: var(--panel);
5653
- }
5654
-
5655
4963
  .hierarchy-splitter:after,
5656
4964
  .timeline-splitter:after {
5657
4965
  left: 0;
@@ -5691,8 +4999,8 @@ input[type=range]::-moz-range-thumb {
5691
4999
  position: absolute;
5692
5000
  right: 5px;
5693
5001
  bottom: 5px;
5694
- border-right: 2px solid rgba(255, 255, 255, .72);
5695
- border-bottom: 2px solid rgba(255, 255, 255, .72);
5002
+ border-right: 2px solid rgba(var(--lg-ink-rgb, 255,255,255), .72);
5003
+ border-bottom: 2px solid rgba(var(--lg-ink-rgb, 255,255,255), .72);
5696
5004
  }
5697
5005
 
5698
5006
  .vp-inset-resize:before {
@@ -5710,11 +5018,6 @@ input[type=range]::-moz-range-thumb {
5710
5018
  user-select: none !important;
5711
5019
  }
5712
5020
 
5713
- body.resize-sidebar,
5714
- body.resize-sidebar * {
5715
- cursor: col-resize !important;
5716
- }
5717
-
5718
5021
  body.resize-hierarchy,
5719
5022
  body.resize-hierarchy *,
5720
5023
  body.resize-timeline,
@@ -5733,39 +5036,33 @@ input[type=range]::-moz-range-thumb {
5733
5036
  untouched so the production workflow remains familiar. */
5734
5037
 
5735
5038
  .panel.hierarchy-sidebar {
5736
- background: #282828;
5737
- border-color: rgba(255, 255, 255, .22);
5039
+ background: var(--surface-panel);
5040
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .22);
5738
5041
  }
5739
5042
 
5740
5043
  .hierarchy-pane {
5741
- background: #2c2c2c;
5742
- border-color: rgba(255, 255, 255, .22);
5044
+ background: var(--lg-2c2c2c, #2c2c2c);
5045
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .22);
5743
5046
  }
5744
5047
 
5745
5048
  .hierarchy-heading,
5746
5049
  .inspector-heading {
5747
- border-color: rgba(255, 255, 255, .14);
5748
- background: #232323;
5050
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .14);
5051
+ background: var(--lg-232323, #232323);
5749
5052
  }
5750
5053
 
5751
5054
  .hierarchy-heading strong,
5752
5055
  .inspector-heading strong {
5753
- color: #d2d2d2;
5056
+ color: var(--lg-d2d2d2, #d2d2d2);
5754
5057
  }
5755
5058
 
5756
5059
  .hierarchy-kicker,
5757
5060
  .inspector-heading > span {
5758
- color: #9a9a9a;
5759
- }
5760
-
5761
- .hierarchy-frame-status {
5762
- border-color: rgba(58, 124, 191, .35);
5763
- background: rgba(58, 124, 191, .09);
5764
- color: #5a9bd4;
5061
+ color: var(--lg-9a9a9a, #9a9a9a);
5765
5062
  }
5766
5063
 
5767
5064
  .hierarchy-row-wrap:before {
5768
- background: rgba(255, 255, 255, .13);
5065
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .13);
5769
5066
  }
5770
5067
 
5771
5068
  .hierarchy-row-wrap:hover {
@@ -5782,7 +5079,7 @@ input[type=range]::-moz-range-thumb {
5782
5079
  }
5783
5080
 
5784
5081
  .hierarchy-label {
5785
- color: #d2d2d2;
5082
+ color: var(--lg-d2d2d2, #d2d2d2);
5786
5083
  }
5787
5084
 
5788
5085
  .selected .hierarchy-label {
@@ -5794,8 +5091,8 @@ input[type=range]::-moz-range-thumb {
5794
5091
  }
5795
5092
 
5796
5093
  .hierarchy-badge {
5797
- background: rgba(255, 255, 255, .08);
5798
- color: #9a9a9a;
5094
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .08);
5095
+ color: var(--lg-9a9a9a, #9a9a9a);
5799
5096
  }
5800
5097
 
5801
5098
  .hierarchy-icon {
@@ -5814,12 +5111,12 @@ input[type=range]::-moz-range-thumb {
5814
5111
  .selected .hierarchy-icon { filter: brightness(1.25); }
5815
5112
 
5816
5113
  .inspector-scroll {
5817
- background: #282828;
5114
+ background: var(--surface-panel);
5818
5115
  }
5819
5116
 
5820
5117
  .card {
5821
- background: #2c2c2c;
5822
- border-color: rgba(255, 255, 255, .18);
5118
+ background: var(--lg-2c2c2c, #2c2c2c);
5119
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .18);
5823
5120
  border-radius: 8px;
5824
5121
  box-shadow: var(--shadow);
5825
5122
  }
@@ -5835,7 +5132,7 @@ input[type=range]::-moz-range-thumb {
5835
5132
  }
5836
5133
 
5837
5134
  .card h3 {
5838
- color: #9a9a9a;
5135
+ color: var(--lg-9a9a9a, #9a9a9a);
5839
5136
  }
5840
5137
 
5841
5138
  .card h3:before {
@@ -5851,62 +5148,52 @@ input[type=range]::-moz-range-thumb {
5851
5148
  .field label,
5852
5149
  .row,
5853
5150
  .readout {
5854
- color: #9a9a9a;
5151
+ color: var(--lg-9a9a9a, #9a9a9a);
5855
5152
  }
5856
5153
 
5857
5154
  .hint b,
5858
5155
  .ardy-hint code,
5859
5156
  .ardy-outcome code {
5860
- color: #d2d2d2;
5861
- }
5862
-
5863
- .inspector-status-grid,
5864
- .ardy-report {
5865
- border-color: rgba(255, 255, 255, .14);
5866
- background: rgba(255, 255, 255, .035);
5867
- }
5868
-
5869
- .inspector-status-grid b {
5870
- color: #d2d2d2;
5157
+ color: var(--lg-d2d2d2, #d2d2d2);
5871
5158
  }
5872
5159
 
5873
5160
  .inspector-list button {
5874
- border-color: rgba(255, 255, 255, .16);
5875
- background: rgba(255, 255, 255, .38);
5161
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .16);
5162
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .38);
5876
5163
  color: #3d4d58;
5877
5164
  }
5878
5165
 
5879
5166
  .inspector-list button:hover,
5880
5167
  .inspector-list button.active {
5881
5168
  border-color: rgba(58, 124, 191, .56);
5882
- background: #3c3c3c;
5883
- color: #d2d2d2;
5169
+ background: var(--lg-3c3c3c, #3c3c3c);
5170
+ color: var(--lg-d2d2d2, #d2d2d2);
5884
5171
  }
5885
5172
 
5886
5173
  .presets button {
5887
- background: #383838;
5888
- border-color: rgba(255, 255, 255, .16);
5174
+ background: var(--lg-383838, #383838);
5175
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .16);
5889
5176
  color: #3d4d58;
5890
5177
  border-radius: 6px;
5891
5178
  }
5892
5179
 
5893
5180
  .presets button:hover {
5894
- background: #3c3c3c;
5181
+ background: var(--lg-3c3c3c, #3c3c3c);
5895
5182
  border-color: rgba(58, 124, 191, .48);
5896
- color: #d2d2d2;
5183
+ color: var(--lg-d2d2d2, #d2d2d2);
5897
5184
  transform: none;
5898
5185
  }
5899
5186
 
5900
5187
  .presets button.active {
5901
5188
  border-color: #3a7cbf;
5902
5189
  background: #2d5c8a;
5903
- color: #d2d2d2;
5190
+ color: var(--lg-d2d2d2, #d2d2d2);
5904
5191
  box-shadow: 0 0 0 1px rgba(58, 124, 191, .16);
5905
5192
  }
5906
5193
 
5907
5194
  .row .val,
5908
5195
  .readout strong {
5909
- color: #d2d2d2;
5196
+ color: var(--lg-d2d2d2, #d2d2d2);
5910
5197
  }
5911
5198
 
5912
5199
  input[type=range] {
@@ -5914,13 +5201,13 @@ input[type=range] {
5914
5201
  }
5915
5202
 
5916
5203
  input[type=range]::-webkit-slider-thumb {
5917
- background: #2c2c2c;
5204
+ background: var(--lg-2c2c2c, #2c2c2c);
5918
5205
  border-color: #3a7cbf;
5919
5206
  box-shadow: 0 1px 2px rgba(0, 0, 0, .18);
5920
5207
  }
5921
5208
 
5922
5209
  input[type=range]::-moz-range-thumb {
5923
- background: #2c2c2c;
5210
+ background: var(--lg-2c2c2c, #2c2c2c);
5924
5211
  border-color: #3a7cbf;
5925
5212
  box-shadow: 0 1px 2px rgba(0, 0, 0, .18);
5926
5213
  }
@@ -5931,8 +5218,8 @@ input[type=range]::-moz-range-thumb {
5931
5218
  .field select,
5932
5219
  .dropdown .trigger {
5933
5220
  background-color: #323232;
5934
- border-color: rgba(255, 255, 255, .2);
5935
- color: #d2d2d2;
5221
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .2);
5222
+ color: var(--lg-d2d2d2, #d2d2d2);
5936
5223
  border-radius: 6px;
5937
5224
  box-shadow: none;
5938
5225
  }
@@ -5943,13 +5230,13 @@ input[type=range]::-moz-range-thumb {
5943
5230
  }
5944
5231
 
5945
5232
  .field select option {
5946
- background: #2c2c2c;
5947
- color: #d2d2d2;
5233
+ background: var(--lg-2c2c2c, #2c2c2c);
5234
+ color: var(--lg-d2d2d2, #d2d2d2);
5948
5235
  }
5949
5236
 
5950
5237
  .dropdown-menu {
5951
- background: #2c2c2c;
5952
- border-color: rgba(255, 255, 255, .24);
5238
+ background: var(--lg-2c2c2c, #2c2c2c);
5239
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .24);
5953
5240
  border-radius: 7px;
5954
5241
  box-shadow: var(--shadow-md);
5955
5242
  }
@@ -5960,8 +5247,8 @@ input[type=range]::-moz-range-thumb {
5960
5247
  }
5961
5248
 
5962
5249
  .dropdown-item:hover {
5963
- background: #3c3c3c;
5964
- color: #d2d2d2;
5250
+ background: var(--lg-3c3c3c, #3c3c3c);
5251
+ color: var(--lg-d2d2d2, #d2d2d2);
5965
5252
  }
5966
5253
 
5967
5254
  .dropdown-item.active {
@@ -5969,8 +5256,8 @@ input[type=range]::-moz-range-thumb {
5969
5256
  }
5970
5257
 
5971
5258
  .segmented {
5972
- background: #1e1e1e;
5973
- border-color: rgba(255, 255, 255, .18);
5259
+ background: var(--lg-1e1e1e, #1e1e1e);
5260
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .18);
5974
5261
  border-radius: 7px;
5975
5262
  }
5976
5263
 
@@ -5981,11 +5268,11 @@ input[type=range]::-moz-range-thumb {
5981
5268
  }
5982
5269
 
5983
5270
  .segmented button {
5984
- color: #9a9a9a;
5271
+ color: var(--lg-9a9a9a, #9a9a9a);
5985
5272
  }
5986
5273
 
5987
5274
  .segmented button:hover {
5988
- color: #d2d2d2;
5275
+ color: var(--lg-d2d2d2, #d2d2d2);
5989
5276
  }
5990
5277
 
5991
5278
  .segmented button.active {
@@ -5993,43 +5280,43 @@ input[type=range]::-moz-range-thumb {
5993
5280
  }
5994
5281
 
5995
5282
  .btn {
5996
- border-color: rgba(255, 255, 255, .24);
5997
- background: #383838;
5998
- color: #d2d2d2;
5283
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .24);
5284
+ background: var(--lg-383838, #383838);
5285
+ color: var(--lg-d2d2d2, #d2d2d2);
5999
5286
  border-radius: 6px;
6000
5287
  box-shadow: none;
6001
5288
  }
6002
5289
 
6003
5290
  .btn:hover {
6004
- background: #424242;
5291
+ background: var(--lg-424242, #424242);
6005
5292
  border-color: rgba(58, 124, 191, .55);
6006
5293
  box-shadow: none;
6007
5294
  transform: none;
6008
5295
  }
6009
5296
 
6010
5297
  .btn.ghost {
6011
- border-color: rgba(255, 255, 255, .18);
6012
- color: #9a9a9a;
5298
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .18);
5299
+ color: var(--lg-9a9a9a, #9a9a9a);
6013
5300
  }
6014
5301
 
6015
5302
  .btn.ghost:hover {
6016
- background: #3c3c3c;
6017
- color: #d2d2d2;
5303
+ background: var(--lg-3c3c3c, #3c3c3c);
5304
+ color: var(--lg-d2d2d2, #d2d2d2);
6018
5305
  }
6019
5306
 
6020
5307
  .btn.primary {
6021
- background: #3a7cbf;
6022
- border: 1px solid #397f91;
5308
+ background: var(--primary);
5309
+ border: 1px solid var(--primary);
6023
5310
  box-shadow: none;
6024
5311
  }
6025
5312
 
6026
5313
  .btn.primary:hover {
6027
- background: #3f91a7;
5314
+ background: var(--camera);
6028
5315
  box-shadow: none;
6029
5316
  }
6030
5317
 
6031
5318
  .vp-inset {
6032
- border: 1px solid rgba(255, 255, 255, .45);
5319
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .45);
6033
5320
  border-radius: 7px;
6034
5321
  box-shadow: 0 7px 20px rgba(0, 0, 0, .15);
6035
5322
  }
@@ -6053,28 +5340,15 @@ input[type=range]::-moz-range-thumb {
6053
5340
  .viewmode,
6054
5341
  .grid-toggle {
6055
5342
  background: rgba(255, 250, 241, .9);
6056
- border-color: rgba(255, 255, 255, .42);
6057
- color: #d2d2d2;
5343
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .42);
5344
+ color: var(--lg-d2d2d2, #d2d2d2);
6058
5345
  box-shadow: none;
6059
5346
  -webkit-backdrop-filter: blur(6px);
6060
5347
  backdrop-filter: blur(6px);
6061
5348
  }
6062
5349
 
6063
5350
  .vp-inset-tag {
6064
- color: #d2d2d2;
6065
- }
6066
-
6067
- .viewmode {
6068
- border-radius: 7px;
6069
- }
6070
-
6071
- .viewmode button {
6072
- color: #52616b;
6073
- border-radius: 5px;
6074
- }
6075
-
6076
- .viewmode button:hover {
6077
- color: #d2d2d2;
5351
+ color: var(--lg-d2d2d2, #d2d2d2);
6078
5352
  }
6079
5353
 
6080
5354
  .viewmode button.active {
@@ -6084,30 +5358,30 @@ input[type=range]::-moz-range-thumb {
6084
5358
  }
6085
5359
 
6086
5360
  .caption {
6087
- color: #d2d2d2;
5361
+ color: var(--lg-d2d2d2, #d2d2d2);
6088
5362
  }
6089
5363
 
6090
5364
  .grid-toggle.active {
6091
5365
  color: #5a9bd4;
6092
5366
  border-color: #3a7cbf;
6093
- background: #3c3c3c;
5367
+ background: var(--lg-3c3c3c, #3c3c3c);
6094
5368
  }
6095
5369
 
6096
5370
  .film-frame i:before,
6097
5371
  .film-frame i:after {
6098
- border-color: rgba(255, 255, 255, .72);
5372
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .72);
6099
5373
  }
6100
5374
 
6101
5375
  .toast,
6102
5376
  .modal,
6103
5377
  .promptbox {
6104
- background: #2c2c2c;
6105
- border-color: rgba(255, 255, 255, .24);
6106
- color: #d2d2d2;
5378
+ background: var(--lg-2c2c2c, #2c2c2c);
5379
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .24);
5380
+ color: var(--lg-d2d2d2, #d2d2d2);
6107
5381
  }
6108
5382
 
6109
5383
  .modal-overlay {
6110
- background: rgba(255, 255, 255, .3);
5384
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .3);
6111
5385
  }
6112
5386
 
6113
5387
  .modal:before {
@@ -6116,31 +5390,31 @@ input[type=range]::-moz-range-thumb {
6116
5390
  }
6117
5391
 
6118
5392
  .modal .x:hover {
6119
- color: #d2d2d2;
6120
- background: #1e1e1e;
5393
+ color: var(--lg-d2d2d2, #d2d2d2);
5394
+ background: var(--lg-1e1e1e, #1e1e1e);
6121
5395
  }
6122
5396
 
6123
5397
  .timeline {
6124
- background: #232323;
6125
- border-color: rgba(255, 255, 255, .22);
5398
+ background: var(--lg-232323, #232323);
5399
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .22);
6126
5400
  box-shadow: 0 -5px 14px rgba(0, 0, 0, .08);
6127
5401
  }
6128
5402
 
6129
5403
  .tl-head {
6130
- background: #282828;
6131
- border-color: rgba(255, 255, 255, .18);
5404
+ background: var(--surface-panel);
5405
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .18);
6132
5406
  }
6133
5407
 
6134
5408
  .tl-btn {
6135
- background: #2c2c2c;
6136
- color: #d2d2d2;
6137
- border-color: rgba(255, 255, 255, .27);
5409
+ background: var(--lg-2c2c2c, #2c2c2c);
5410
+ color: var(--lg-d2d2d2, #d2d2d2);
5411
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .27);
6138
5412
  border-bottom-width: 1px;
6139
5413
  border-radius: 5px;
6140
5414
  }
6141
5415
 
6142
5416
  .tl-btn:hover {
6143
- background: #3c3c3c;
5417
+ background: var(--lg-3c3c3c, #3c3c3c);
6144
5418
  border-color: #3a7cbf;
6145
5419
  }
6146
5420
 
@@ -6152,9 +5426,9 @@ input[type=range]::-moz-range-thumb {
6152
5426
  }
6153
5427
 
6154
5428
  .tl-readout {
6155
- background: #2c2c2c;
6156
- border-color: rgba(255, 255, 255, .18);
6157
- color: #9a9a9a;
5429
+ background: var(--lg-2c2c2c, #2c2c2c);
5430
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .18);
5431
+ color: var(--lg-9a9a9a, #9a9a9a);
6158
5432
  }
6159
5433
 
6160
5434
  .tl-readout b {
@@ -6162,31 +5436,31 @@ input[type=range]::-moz-range-thumb {
6162
5436
  }
6163
5437
 
6164
5438
  .tl-badge {
6165
- color: #e7b557;
5439
+ color: var(--select);
6166
5440
  background: rgba(231, 181, 87, .14);
6167
5441
  border-color: rgba(190, 134, 31, .46);
6168
5442
  }
6169
5443
 
6170
5444
  .tl-toggle:hover {
6171
- color: #d2d2d2;
6172
- background: #1e1e1e;
6173
- border-color: rgba(255, 255, 255, .2);
5445
+ color: var(--lg-d2d2d2, #d2d2d2);
5446
+ background: var(--lg-1e1e1e, #1e1e1e);
5447
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .2);
6174
5448
  }
6175
5449
 
6176
5450
  .tl-body,
6177
5451
  .tl-surface {
6178
- background: #282828;
5452
+ background: var(--surface-panel);
6179
5453
  }
6180
5454
 
6181
5455
  .tl-ruler {
6182
- background: #232323;
6183
- border-color: rgba(255, 255, 255, .18);
5456
+ background: var(--lg-232323, #232323);
5457
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .18);
6184
5458
  }
6185
5459
 
6186
5460
  .tl-ruler-label,
6187
5461
  .tl-track-label {
6188
- background: #282828;
6189
- border-color: rgba(255, 255, 255, .16);
5462
+ background: var(--surface-panel);
5463
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .16);
6190
5464
  color: #52616b;
6191
5465
  }
6192
5466
 
@@ -6195,36 +5469,36 @@ input[type=range]::-moz-range-thumb {
6195
5469
  }
6196
5470
 
6197
5471
  .tl-tick i {
6198
- background: rgba(255, 255, 255, .28);
5472
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .28);
6199
5473
  }
6200
5474
 
6201
5475
  .tl-track {
6202
- border-color: rgba(255, 255, 255, .1);
5476
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .1);
6203
5477
  }
6204
5478
 
6205
5479
  .tl-lane {
6206
- background-color: #282828;
5480
+ background-color: var(--surface-panel);
6207
5481
  }
6208
5482
 
6209
5483
  .tl-grid {
6210
- background: rgba(255, 255, 255, .075);
5484
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .075);
6211
5485
  }
6212
5486
 
6213
5487
  .tl-lane:hover {
6214
- background-color: #383838;
5488
+ background-color: var(--lg-383838, #383838);
6215
5489
  }
6216
5490
 
6217
5491
  .tl-frame-box {
6218
- background: #e7b557;
6219
- color: #d2d2d2;
5492
+ background: var(--select);
5493
+ color: var(--lg-d2d2d2, #d2d2d2);
6220
5494
  border: 1px solid #c58d29;
6221
5495
  border-radius: 5px;
6222
5496
  box-shadow: none;
6223
5497
  }
6224
5498
 
6225
5499
  .tl-track-add {
6226
- border-color: rgba(255, 255, 255, .24);
6227
- background: #2c2c2c;
5500
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .24);
5501
+ background: var(--lg-2c2c2c, #2c2c2c);
6228
5502
  color: #5a9bd4;
6229
5503
  }
6230
5504
 
@@ -6241,7 +5515,7 @@ input[type=range]::-moz-range-thumb {
6241
5515
  }
6242
5516
 
6243
5517
  .tl-chip.empty {
6244
- background: #424242;
5518
+ background: var(--lg-424242, #424242);
6245
5519
  color: #52616b;
6246
5520
  }
6247
5521
 
@@ -6250,12 +5524,12 @@ input[type=range]::-moz-range-thumb {
6250
5524
  }
6251
5525
 
6252
5526
  .tl-chip-handle {
6253
- background: rgba(255, 255, 255, .32);
5527
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .32);
6254
5528
  }
6255
5529
 
6256
5530
  .tl-marker {
6257
5531
  background: #6f9f86;
6258
- border-color: #2c2c2c;
5532
+ border-color: var(--lg-2c2c2c, #2c2c2c);
6259
5533
  box-shadow: 0 0 0 1px #5d8a73;
6260
5534
  }
6261
5535
 
@@ -6269,8 +5543,8 @@ input[type=range]::-moz-range-thumb {
6269
5543
  }
6270
5544
 
6271
5545
  .tl-marker.ik {
6272
- background: #d65f55;
6273
- border-color: #2c2c2c;
5546
+ background: var(--danger);
5547
+ border-color: var(--lg-2c2c2c, #2c2c2c);
6274
5548
  box-shadow: 0 0 0 1px #b54840;
6275
5549
  }
6276
5550
 
@@ -6280,7 +5554,7 @@ input[type=range]::-moz-range-thumb {
6280
5554
 
6281
5555
  .tl-ik-run {
6282
5556
  background: rgba(214, 95, 85, .42);
6283
- border-color: #2c2c2c;
5557
+ border-color: var(--lg-2c2c2c, #2c2c2c);
6284
5558
  box-shadow: 0 0 0 1px rgba(181, 72, 64, .5);
6285
5559
  }
6286
5560
 
@@ -6295,13 +5569,13 @@ input[type=range]::-moz-range-thumb {
6295
5569
  }
6296
5570
 
6297
5571
  .tl-ik-run-cap {
6298
- background: #d65f55;
6299
- border-color: #2c2c2c;
5572
+ background: var(--danger);
5573
+ border-color: var(--lg-2c2c2c, #2c2c2c);
6300
5574
  }
6301
5575
 
6302
5576
  .tl-ik-run-at {
6303
5577
  background: #f0a89f;
6304
- border-color: #2c2c2c;
5578
+ border-color: var(--lg-2c2c2c, #2c2c2c);
6305
5579
  box-shadow: 0 0 0 1px #b54840;
6306
5580
  }
6307
5581
 
@@ -6311,7 +5585,7 @@ input[type=range]::-moz-range-thumb {
6311
5585
 
6312
5586
  .tl-marker.cam {
6313
5587
  background: #9a7bd4;
6314
- border-color: #2c2c2c;
5588
+ border-color: var(--lg-2c2c2c, #2c2c2c);
6315
5589
  box-shadow: 0 0 0 1px #7b5cb0;
6316
5590
  }
6317
5591
 
@@ -6328,7 +5602,7 @@ input[type=range]::-moz-range-thumb {
6328
5602
  .tl-btn.ik.snap.on {
6329
5603
  color: #e58a80;
6330
5604
  background: rgba(214, 95, 85, .09);
6331
- border-color: #d65f55;
5605
+ border-color: var(--danger);
6332
5606
  box-shadow: none;
6333
5607
  }
6334
5608
 
@@ -6352,23 +5626,17 @@ input[type=range]::-moz-range-thumb {
6352
5626
  }
6353
5627
 
6354
5628
  .tl-wp-hint.warn {
6355
- color: #e7b557;
5629
+ color: var(--select);
6356
5630
  }
6357
5631
 
6358
5632
  .tl-playhead {
6359
- background: #e7b557;
5633
+ background: var(--select);
6360
5634
  box-shadow: none;
6361
5635
  width: 2px;
6362
5636
  }
6363
5637
 
6364
5638
  /* ----------------------------------------------- Cozy Clay typography ---- */
6365
5639
 
6366
- .tagline {
6367
- font-size: 12px;
6368
- font-weight: 480;
6369
- letter-spacing: -.005em;
6370
- }
6371
-
6372
5640
  .hierarchy-heading strong,
6373
5641
  .inspector-heading strong {
6374
5642
  font-family: var(--display);
@@ -6472,17 +5740,6 @@ input[type=range]::-moz-range-thumb {
6472
5740
  letter-spacing: -.015em;
6473
5741
  }
6474
5742
 
6475
- .kbd-hint {
6476
- font-size: 10.5px;
6477
- letter-spacing: -.015em;
6478
- }
6479
-
6480
- .kbd-hint b {
6481
- font-size: 9.5px;
6482
- font-weight: 650;
6483
- letter-spacing: -.02em;
6484
- }
6485
-
6486
5743
  .caption {
6487
5744
  font-size: 10px;
6488
5745
  font-weight: 650;
@@ -6554,7 +5811,7 @@ input[type=range]::-moz-range-thumb {
6554
5811
 
6555
5812
  .pose-studio {
6556
5813
  background: rgba(255, 250, 241, .96);
6557
- border-color: rgba(255, 255, 255, .24);
5814
+ border-color: rgba(var(--lg-ink-rgb, 255,255,255), .24);
6558
5815
  border-radius: 8px;
6559
5816
  box-shadow: var(--shadow-lg);
6560
5817
  backdrop-filter: blur(12px);
@@ -6612,35 +5869,6 @@ input[type=range]::-moz-range-thumb {
6612
5869
  flex-direction: column;
6613
5870
  }
6614
5871
 
6615
- .right-panel-tabs {
6616
- display: grid;
6617
- flex: none;
6618
- grid-template-columns: 1fr 1fr;
6619
- gap: 4px;
6620
- padding: 8px;
6621
- border-bottom: 1px solid var(--line);
6622
- background: var(--panel);
6623
- }
6624
-
6625
- .right-panel-tabs button {
6626
- height: 34px;
6627
- padding: 0 10px;
6628
- border: 1px solid transparent;
6629
- border-radius: 7px;
6630
- background: transparent;
6631
- color: var(--muted);
6632
- font: inherit;
6633
- font-size: 10px;
6634
- font-weight: 700;
6635
- letter-spacing: .03em;
6636
- cursor: pointer;
6637
- }
6638
-
6639
- .right-panel-tabs button:hover {
6640
- background: rgba(58, 124, 191, .08);
6641
- color: var(--fg);
6642
- }
6643
-
6644
5872
  .right-panel-tabs button.active {
6645
5873
  border-color: rgba(58, 124, 191, .42);
6646
5874
  background: #2d5c8a;
@@ -6654,19 +5882,6 @@ input[type=range]::-moz-range-thumb {
6654
5882
  min-height: 0;
6655
5883
  }
6656
5884
 
6657
- .right-panel-view {
6658
- /* Vertical scrolling belongs to the pane inside; the horizontal axis has to
6659
- be reachable here, because a wide row (a long id, a deep hierarchy path)
6660
- was otherwise clipped with no way to scroll to it. */
6661
- overflow: hidden auto;
6662
- flex: 1 1 0;
6663
- min-width: 0;
6664
- }
6665
-
6666
- .right-panel-view > [hidden] {
6667
- display: none !important;
6668
- }
6669
-
6670
5885
  .hierarchy-tab-pane,
6671
5886
  .hierarchy-tab-pane > .hierarchy-pane,
6672
5887
  .inspector-pane {
@@ -6682,20 +5897,11 @@ input[type=range]::-moz-range-thumb {
6682
5897
  /* window title strips stay visible in the Unity layout (the tabbed
6683
5898
  panel that hid them is gone) */
6684
5899
 
6685
- /* ------------------------------------------------- scene objects --- */
6686
- /* Create menu, gizmo tool switch and object swatches. The hierarchy's own
6687
- heading is hidden in the tabbed panel, so the create action gets its own
6688
- toolbar row above the tree. */
6689
-
6690
- .hierarchy-toolbar {
6691
- display: flex;
6692
- align-items: center;
6693
- justify-content: space-between;
6694
- gap: 8px;
6695
- padding: 8px 10px;
6696
- border-bottom: 1px solid var(--line);
6697
- }
6698
-
5900
+ /* ------------------------------------------------- scene objects --- */
5901
+ /* Create menu, gizmo tool switch and object swatches. The hierarchy's own
5902
+ heading is hidden in the tabbed panel, so the create action gets its own
5903
+ toolbar row above the tree. */
5904
+
6699
5905
  .add-object {
6700
5906
  position: relative;
6701
5907
  }
@@ -6782,7 +5988,7 @@ input[type=range]::-moz-range-thumb {
6782
5988
  flex: none;
6783
5989
  width: 12px;
6784
5990
  height: 12px;
6785
- border: 1px solid rgba(255, 255, 255, .25);
5991
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .25);
6786
5992
  border-radius: 3px;
6787
5993
  }
6788
5994
 
@@ -6799,15 +6005,6 @@ input[type=range]::-moz-range-thumb {
6799
6005
  box-shadow: none;
6800
6006
  }
6801
6007
 
6802
- .gizmo-modes kbd {
6803
- margin-left: 5px;
6804
- padding: 1px 4px;
6805
- border: 1px solid rgba(255, 255, 255, .2);
6806
- border-radius: 4px;
6807
- font-family: var(--mono);
6808
- font-size: 8px;
6809
- }
6810
-
6811
6008
  .object-colors {
6812
6009
  display: flex;
6813
6010
  gap: 6px;
@@ -6817,7 +6014,7 @@ input[type=range]::-moz-range-thumb {
6817
6014
  .object-color {
6818
6015
  width: 22px;
6819
6016
  height: 22px;
6820
- border: 1px solid rgba(255, 255, 255, .25);
6017
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .25);
6821
6018
  border-radius: 6px;
6822
6019
  cursor: pointer;
6823
6020
  }
@@ -6971,13 +6168,6 @@ input[type=range]::-moz-range-thumb {
6971
6168
  }
6972
6169
 
6973
6170
  /* ------------------------------------------------ camera move A→B ------ */
6974
- /* The move workspace: four small buttons in the field row, a derived slate
6975
- line underneath, and a two-up start/end pair in the result modal. */
6976
- .move-ab {
6977
- display: flex;
6978
- flex-wrap: wrap;
6979
- gap: 6px;
6980
- }
6981
6171
 
6982
6172
  .move-ab .btn {
6983
6173
  flex: 1;
@@ -7053,7 +6243,7 @@ input[type=range]::-moz-range-thumb {
7053
6243
  content — outside every hidden card — so it stays on screen for any
7054
6244
  selection, including an active object, which is exactly when saves fire.
7055
6245
  The one-shot toast announces each episode; this line persists until the
7056
- next successful write clears it. Pencil-red family (#d65f55), the light
6246
+ next successful write clears it. Pencil-red family (var(--danger)), the light
7057
6247
  theme's existing IK warning tone: a soft fill and border, not a shouting
7058
6248
  solid. */
7059
6249
  .scene-save-error {
@@ -7123,35 +6313,6 @@ input[type=range]::-moz-range-thumb {
7123
6313
  border-top: 1px solid var(--line);
7124
6314
  }
7125
6315
 
7126
- .bottom-window-tabs {
7127
- flex: none;
7128
- display: flex;
7129
- gap: 2px;
7130
- padding: 3px 8px 0;
7131
- border-bottom: 1px solid var(--line);
7132
- background: var(--panel);
7133
- }
7134
-
7135
- .bottom-window-tabs button {
7136
- height: 26px;
7137
- padding: 0 12px;
7138
- border: 1px solid transparent;
7139
- border-bottom: 0;
7140
- border-radius: 3px 3px 0 0;
7141
- background: transparent;
7142
- color: var(--muted);
7143
- font: inherit;
7144
- font-size: 10px;
7145
- font-weight: 700;
7146
- letter-spacing: .03em;
7147
- cursor: pointer;
7148
- }
7149
-
7150
- .bottom-window-tabs button:hover {
7151
- color: var(--fg);
7152
- background: var(--hover);
7153
- }
7154
-
7155
6316
  .bottom-window-tabs button.active {
7156
6317
  background: var(--bg);
7157
6318
  border-color: var(--line2);
@@ -7190,13 +6351,6 @@ input[type=range]::-moz-range-thumb {
7190
6351
  background: var(--panel);
7191
6352
  }
7192
6353
 
7193
- .assets-shelf {
7194
- display: grid;
7195
- grid-template-columns: 170px minmax(560px, 1fr) minmax(240px, .55fr);
7196
- align-items: start;
7197
- gap: 8px;
7198
- }
7199
-
7200
6354
  .assets-shelf:has(.asset-storage-manager) {
7201
6355
  display: block;
7202
6356
  }
@@ -7205,14 +6359,6 @@ input[type=range]::-moz-range-thumb {
7205
6359
  margin-bottom: 6px;
7206
6360
  }
7207
6361
 
7208
- .assets-shelf-toolbar {
7209
- display: flex;
7210
- align-items: center;
7211
- justify-content: flex-end;
7212
- grid-column: 1 / -1;
7213
- min-height: 24px;
7214
- }
7215
-
7216
6362
  .assets-manage-toggle,
7217
6363
  .asset-storage-undo,
7218
6364
  .asset-storage-cancel,
@@ -7429,74 +6575,6 @@ input[type=range]::-moz-range-thumb {
7429
6575
  cursor: pointer;
7430
6576
  }
7431
6577
 
7432
- .assets-section {
7433
- --asset-group: 90, 155, 212;
7434
- display: flex;
7435
- flex-direction: column;
7436
- gap: 4px;
7437
- min-width: 0;
7438
- padding: 5px;
7439
- border: 1px solid var(--line2);
7440
- border-radius: 6px;
7441
- background: linear-gradient(180deg, rgba(var(--asset-group), .075), rgba(var(--asset-group), .025) 42px);
7442
- }
7443
-
7444
- .assets-section:nth-of-type(1) {
7445
- --asset-group: 164, 126, 221;
7446
- }
7447
-
7448
- .assets-section:nth-of-type(2) {
7449
- --asset-group: 72, 174, 184;
7450
- }
7451
-
7452
- .assets-section:nth-of-type(3) {
7453
- --asset-group: 222, 159, 74;
7454
- }
7455
-
7456
- /* Section headings mirror the add-object popover's group headings: structure
7457
- over count — no badges, no search, just where each kind of card lives. */
7458
- .assets-section-title {
7459
- margin: 0 1px;
7460
- font-size: 10px;
7461
- font-weight: 600;
7462
- text-transform: uppercase;
7463
- letter-spacing: 0.08em;
7464
- color: var(--muted2);
7465
- }
7466
-
7467
- .assets-grid {
7468
- display: grid;
7469
- grid-template-columns: repeat(auto-fill, minmax(74px, 1fr));
7470
- gap: 6px;
7471
- }
7472
-
7473
- .asset-card {
7474
- display: flex;
7475
- flex-direction: column;
7476
- align-items: center;
7477
- justify-content: center;
7478
- gap: 3px;
7479
- min-width: 0;
7480
- min-height: 68px;
7481
- padding: 6px 4px 5px;
7482
- background: var(--panel2, #1d1d1f);
7483
- border: 1px solid var(--line);
7484
- border-radius: 5px;
7485
- color: var(--fg);
7486
- cursor: grab;
7487
- user-select: none;
7488
- touch-action: none;
7489
- }
7490
-
7491
- .asset-card:hover {
7492
- border-color: var(--accent);
7493
- background: var(--hover);
7494
- }
7495
-
7496
- .asset-card:active {
7497
- cursor: grabbing;
7498
- }
7499
-
7500
6578
  .asset-card-swatch {
7501
6579
  width: 30px;
7502
6580
  height: 30px;
@@ -7539,30 +6617,6 @@ input[type=range]::-moz-range-thumb {
7539
6617
  border: 1px solid #d8d2c4;
7540
6618
  }
7541
6619
 
7542
- .asset-card-label {
7543
- max-width: 100%;
7544
- overflow: hidden;
7545
- text-overflow: ellipsis;
7546
- white-space: nowrap;
7547
- font-size: 10px;
7548
- font-weight: 600;
7549
- }
7550
-
7551
- .asset-card-kind {
7552
- font-size: 9px;
7553
- color: var(--muted2);
7554
- }
7555
-
7556
- /* Imported-image cards wear the picture itself, letterboxed into the same
7557
- square the character swatch occupies so every card keeps one rhythm. */
7558
- .asset-card-thumb {
7559
- width: 30px;
7560
- height: 30px;
7561
- border-radius: 7px;
7562
- object-fit: contain;
7563
- background: var(--card2, #161618);
7564
- }
7565
-
7566
6620
  /* Placeholders while a scan or a decode is in flight — the grid never blocks
7567
6621
  on a thumbnail, and the empty message never races the scan. */
7568
6622
  .asset-card-thumb-skeleton,
@@ -7576,25 +6630,6 @@ input[type=range]::-moz-range-thumb {
7576
6630
  min-width: 84px;
7577
6631
  }
7578
6632
 
7579
- /* A card whose bytes failed to decode: visible so it can be deleted from
7580
- Manage storage, clearly marked so nobody drags a broken image on stage. */
7581
- .asset-card-failed {
7582
- opacity: .72;
7583
- border-color: #8a4a3a !important;
7584
- cursor: not-allowed;
7585
- }
7586
- .asset-card-failed .asset-card-kind { color: #e08a7a; }
7587
-
7588
- .asset-card-skeleton {
7589
- min-width: 0;
7590
- width: auto;
7591
- height: 68px;
7592
- padding: 0;
7593
- border: 1px solid var(--line);
7594
- border-radius: 5px;
7595
- background: var(--panel2, #1d1d1f);
7596
- }
7597
-
7598
6633
  @keyframes asset-skeleton {
7599
6634
  from {
7600
6635
  opacity: 0.35;
@@ -7617,26 +6652,7 @@ input[type=range]::-moz-range-thumb {
7617
6652
  line-height: 1.4;
7618
6653
  }
7619
6654
 
7620
- @media (max-width: 1180px) {
7621
- .assets-shelf {
7622
- grid-template-columns: 170px minmax(480px, 1fr);
7623
- }
7624
-
7625
- .assets-shelf-toolbar,
7626
- .assets-section:last-child {
7627
- grid-column: 1 / -1;
7628
- }
7629
- }
7630
-
7631
6655
  @media (max-width: 760px) {
7632
- .assets-shelf {
7633
- grid-template-columns: 1fr;
7634
- }
7635
-
7636
- .assets-shelf-toolbar,
7637
- .assets-section:last-child {
7638
- grid-column: auto;
7639
- }
7640
6656
 
7641
6657
  .asset-storage-list {
7642
6658
  grid-template-columns: 1fr;
@@ -7695,53 +6711,11 @@ input[type=range]::-moz-range-thumb {
7695
6711
  }
7696
6712
  }
7697
6713
 
7698
- /* top toolbar: Unity-style tool switch + snap toggle */
7699
- .editor-toolbar {
7700
- justify-self: center;
7701
- display: flex;
7702
- align-items: center;
7703
- gap: 8px;
7704
- }
7705
-
7706
- .tool-switch {
7707
- display: flex;
7708
- gap: 2px;
7709
- padding: 2px;
7710
- border: 1px solid var(--line);
7711
- border-radius: 5px;
7712
- background: var(--card2);
7713
- }
7714
-
7715
- .tool-switch button,
7716
- .snap-switch {
7717
- height: 24px;
7718
- padding: 0 10px;
7719
- border: 1px solid transparent;
7720
- border-radius: 3px;
7721
- background: transparent;
7722
- color: var(--muted);
7723
- font: inherit;
7724
- font-size: 10px;
7725
- font-weight: 700;
7726
- letter-spacing: .03em;
7727
- cursor: pointer;
7728
- }
7729
-
7730
- .tool-switch button:hover,
7731
- .snap-switch:hover {
7732
- color: var(--fg);
7733
- background: var(--hover);
7734
- }
7735
-
7736
6714
  .tool-switch button.active {
7737
6715
  background: var(--accent);
7738
6716
  color: var(--on-accent);
7739
6717
  }
7740
6718
 
7741
- .snap-switch {
7742
- border-color: var(--line);
7743
- }
7744
-
7745
6719
  .snap-switch.active {
7746
6720
  border-color: var(--accent);
7747
6721
  background: var(--accent-soft);
@@ -7811,47 +6785,12 @@ input[type=range]::-moz-range-thumb {
7811
6785
  background: var(--panel);
7812
6786
  border-bottom: 1px solid var(--line);
7813
6787
  }
7814
-
7815
- /* Workflow-first navigation: operators choose the department before the
7816
- toolbar reveals its controls. This keeps the existing tools available while
7817
- removing the cockpit effect of showing every control at once. */
7818
- .workflow-mode-switch {
7819
- flex: none;
7820
- display: flex;
7821
- align-items: stretch;
7822
- gap: 2px;
7823
- padding: 3px 4px;
7824
- border-right: 1px solid var(--line);
7825
- background: var(--panel);
7826
- }
7827
- .workflow-mode-switch button {
7828
- height: 21px;
7829
- min-width: 54px;
7830
- padding: 0 8px;
7831
- border: 1px solid transparent;
7832
- border-radius: 3px;
7833
- background: transparent;
7834
- color: var(--muted);
7835
- font: inherit;
7836
- font-size: 10px;
7837
- font-weight: 700;
7838
- cursor: pointer;
7839
- }
7840
- .workflow-mode-switch button:hover { color: var(--fg); background: var(--hover); }
7841
6788
  .workflow-mode-switch button.active {
7842
6789
  color: #fff;
7843
6790
  background: #2d5c8a;
7844
6791
  border-color: #4b8bc4;
7845
6792
  box-shadow: 0 0 0 1px rgba(75,139,196,.24);
7846
6793
  }
7847
- .workflow-toolbar-hint {
7848
- align-self: center;
7849
- padding: 0 10px;
7850
- color: #9fb7cc;
7851
- font-size: 10px;
7852
- font-weight: 600;
7853
- white-space: nowrap;
7854
- }
7855
6794
  /* Scene mode owns transform/grid tools; Camera mode owns framing controls.
7856
6795
  Motion mode intentionally leaves only its short instruction in the bar. */
7857
6796
  .app[data-workflow-mode="scene"] .workflow-camera-context { display: none; }
@@ -7908,15 +6847,15 @@ input[type=range]::-moz-range-thumb {
7908
6847
  }
7909
6848
 
7910
6849
  .btn {
7911
- background: #383838;
7912
- border: 1px solid #1a1a1a;
6850
+ background: var(--lg-383838, #383838);
6851
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
7913
6852
  color: var(--fg);
7914
6853
  transform: none;
7915
6854
  }
7916
6855
 
7917
6856
  .btn:hover {
7918
- background: #3f3f3f;
7919
- border-color: #1a1a1a;
6857
+ background: var(--lg-3f3f3f, #3f3f3f);
6858
+ border-color: var(--lg-1a1a1a, #1a1a1a);
7920
6859
  transform: none;
7921
6860
  box-shadow: none;
7922
6861
  }
@@ -7927,8 +6866,8 @@ input[type=range]::-moz-range-thumb {
7927
6866
 
7928
6867
  .btn.primary,
7929
6868
  .btn.primary:hover {
7930
- background: #2d5c8a;
7931
- border: 1px solid #1a1a1a;
6869
+ background: var(--camera);
6870
+ border: 1px solid var(--camera);
7932
6871
  box-shadow: none;
7933
6872
  transform: none;
7934
6873
  }
@@ -7948,20 +6887,20 @@ input[type=range]::-moz-range-thumb {
7948
6887
  }
7949
6888
 
7950
6889
  .presets button {
7951
- background: #383838;
7952
- border: 1px solid #1a1a1a;
6890
+ background: var(--lg-383838, #383838);
6891
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
7953
6892
  color: var(--fg);
7954
6893
  }
7955
6894
 
7956
6895
  .presets button:hover {
7957
- background: #3f3f3f;
6896
+ background: var(--lg-3f3f3f, #3f3f3f);
7958
6897
  transform: none;
7959
6898
  box-shadow: none;
7960
6899
  }
7961
6900
 
7962
6901
  .presets button.active {
7963
6902
  background: #2d5c8a;
7964
- border-color: #1a1a1a;
6903
+ border-color: var(--lg-1a1a1a, #1a1a1a);
7965
6904
  color: #fff;
7966
6905
  box-shadow: none;
7967
6906
  }
@@ -7972,8 +6911,8 @@ input[type=range]::-moz-range-thumb {
7972
6911
  .field textarea,
7973
6912
  .field select,
7974
6913
  .dropdown .trigger {
7975
- background-color: #2a2a2a;
7976
- border: 1px solid #1a1a1a;
6914
+ background-color: var(--lg-2a2a2a, #2a2a2a);
6915
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
7977
6916
  color: var(--fg);
7978
6917
  }
7979
6918
 
@@ -7987,8 +6926,8 @@ input[type=range]::-moz-range-thumb {
7987
6926
  }
7988
6927
 
7989
6928
  .dropdown-menu {
7990
- background: #2c2c2c;
7991
- border: 1px solid #1a1a1a;
6929
+ background: var(--lg-2c2c2c, #2c2c2c);
6930
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
7992
6931
  box-shadow: 0 4px 12px rgba(0, 0, 0, .5);
7993
6932
  }
7994
6933
 
@@ -8019,7 +6958,7 @@ input[type=range]::-moz-range-thumb {
8019
6958
  }
8020
6959
 
8021
6960
  .foldout-head:hover {
8022
- background: #383838;
6961
+ background: var(--lg-383838, #383838);
8023
6962
  }
8024
6963
 
8025
6964
  .foldout-body {
@@ -8029,7 +6968,7 @@ input[type=range]::-moz-range-thumb {
8029
6968
  /* range slider: thin flat track, small square knob */
8030
6969
  input[type=range] {
8031
6970
  height: 4px;
8032
- background: #1e1e1e;
6971
+ background: var(--lg-1e1e1e, #1e1e1e);
8033
6972
  border-radius: 0;
8034
6973
  }
8035
6974
 
@@ -8037,8 +6976,8 @@ input[type=range]::-webkit-slider-thumb {
8037
6976
  width: 12px;
8038
6977
  height: 12px;
8039
6978
  border-radius: 2px;
8040
- background: #c4c4c4;
8041
- border: 1px solid #1a1a1a;
6979
+ background: var(--lg-c4c4c4, #c4c4c4);
6980
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
8042
6981
  box-shadow: none;
8043
6982
  }
8044
6983
 
@@ -8056,15 +6995,15 @@ input[type=range]::-moz-range-thumb {
8056
6995
  width: 12px;
8057
6996
  height: 12px;
8058
6997
  border-radius: 2px;
8059
- background: #c4c4c4;
8060
- border: 1px solid #1a1a1a;
6998
+ background: var(--lg-c4c4c4, #c4c4c4);
6999
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
8061
7000
  box-shadow: none;
8062
7001
  }
8063
7002
 
8064
7003
  /* segmented control: flat Unity toggle strip */
8065
7004
  .segmented {
8066
- background: #2a2a2a;
8067
- border: 1px solid #1a1a1a;
7005
+ background: var(--lg-2a2a2a, #2a2a2a);
7006
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
8068
7007
  padding: 2px;
8069
7008
  }
8070
7009
 
@@ -8076,8 +7015,8 @@ input[type=range]::-moz-range-thumb {
8076
7015
 
8077
7016
  /* modal & toast: flat editor dialogs */
8078
7017
  .modal {
8079
- background: #2c2c2c;
8080
- border: 1px solid #1a1a1a;
7018
+ background: var(--lg-2c2c2c, #2c2c2c);
7019
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
8081
7020
  box-shadow: 0 8px 30px rgba(0, 0, 0, .6);
8082
7021
  }
8083
7022
 
@@ -8086,15 +7025,15 @@ input[type=range]::-moz-range-thumb {
8086
7025
  }
8087
7026
 
8088
7027
  .toast {
8089
- background: #2c2c2c;
8090
- border: 1px solid #1a1a1a;
7028
+ background: var(--lg-2c2c2c, #2c2c2c);
7029
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
8091
7030
  box-shadow: 0 4px 12px rgba(0, 0, 0, .5);
8092
7031
  }
8093
7032
 
8094
7033
  /* pose studio: flat docked window */
8095
7034
  .pose-studio {
8096
7035
  background: rgba(44, 44, 44, .97);
8097
- border: 1px solid #1a1a1a;
7036
+ border: 1px solid var(--lg-1a1a1a, #1a1a1a);
8098
7037
  border-radius: 2px;
8099
7038
  box-shadow: 0 8px 30px rgba(0, 0, 0, .6);
8100
7039
  backdrop-filter: none;
@@ -8119,25 +7058,12 @@ input[type=range]::-moz-range-thumb {
8119
7058
  -webkit-backdrop-filter: none;
8120
7059
  }
8121
7060
 
8122
- /* tool palette icons */
8123
- .tool-switch button {
8124
- display: inline-flex;
8125
- align-items: center;
8126
- gap: 6px;
8127
- }
8128
-
8129
- .tool-icon {
8130
- width: 13px;
8131
- height: 13px;
8132
- flex: none;
8133
- }
8134
-
8135
7061
  /* ------------------------------------------- Unity inspector density ------ */
8136
7062
  /* Compact property rows: no card boxes, thin section dividers, label column
8137
7063
  on the left, value on the right — Unity Inspector metrics. */
8138
7064
 
8139
7065
  .inspector-sidebar .inspector-pane {
8140
- background: #2c2c2c;
7066
+ background: var(--lg-2c2c2c, #2c2c2c);
8141
7067
  }
8142
7068
 
8143
7069
  .inspector-heading {
@@ -8146,8 +7072,8 @@ input[type=range]::-moz-range-thumb {
8146
7072
  gap: 8px;
8147
7073
  height: 28px;
8148
7074
  padding: 0 12px;
8149
- border-bottom: 1px solid #1a1a1a;
8150
- background: #282828;
7075
+ border-bottom: 1px solid var(--lg-1a1a1a, #1a1a1a);
7076
+ background: var(--surface-panel);
8151
7077
  }
8152
7078
 
8153
7079
  .inspector-heading > span {
@@ -8162,7 +7088,7 @@ input[type=range]::-moz-range-thumb {
8162
7088
 
8163
7089
  .inspector-scroll {
8164
7090
  padding: 0;
8165
- background: #2c2c2c;
7091
+ background: var(--lg-2c2c2c, #2c2c2c);
8166
7092
  }
8167
7093
 
8168
7094
  .inspector-scroll > .card {
@@ -8174,7 +7100,7 @@ input[type=range]::-moz-range-thumb {
8174
7100
  .card {
8175
7101
  background: transparent;
8176
7102
  border: 0;
8177
- border-bottom: 1px solid #232323;
7103
+ border-bottom: 1px solid var(--lg-232323, #232323);
8178
7104
  border-radius: 0;
8179
7105
  padding: 0 0 8px;
8180
7106
  }
@@ -8192,7 +7118,7 @@ input[type=range]::-moz-range-thumb {
8192
7118
  }
8193
7119
 
8194
7120
  .foldout-head:hover {
8195
- background: rgba(255, 255, 255, .04);
7121
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .04);
8196
7122
  }
8197
7123
 
8198
7124
  .foldout-arrow {
@@ -8235,7 +7161,7 @@ input[type=range] {
8235
7161
  .multimodel-card {
8236
7162
  padding: 8px;
8237
7163
  border: 1px solid rgba(58, 124, 191, .38);
8238
- background: linear-gradient(180deg, rgba(58, 124, 191, .12), rgba(255, 255, 255, .025));
7164
+ background: linear-gradient(180deg, rgba(58, 124, 191, .12), rgba(var(--lg-ink-rgb, 255,255,255), .025));
8239
7165
  border-radius: 3px;
8240
7166
  }
8241
7167
 
@@ -8292,7 +7218,7 @@ input[type=range] {
8292
7218
  .multimodel-input-block {
8293
7219
  margin-top: 9px;
8294
7220
  padding: 8px;
8295
- border: 1px solid rgba(255, 255, 255, .1);
7221
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .1);
8296
7222
  background: rgba(0, 0, 0, .12);
8297
7223
  }
8298
7224
 
@@ -8437,7 +7363,7 @@ input[type=range] {
8437
7363
  height: 44px;
8438
7364
  object-fit: cover;
8439
7365
  background: #000;
8440
- border: 1px solid rgba(255, 255, 255, .12);
7366
+ border: 1px solid rgba(var(--lg-ink-rgb, 255,255,255), .12);
8441
7367
  }
8442
7368
 
8443
7369
  .multimodel-receipt-body {
@@ -8636,7 +7562,7 @@ input[type=range] {
8636
7562
  .subject-box {
8637
7563
  padding: 6px 8px 8px;
8638
7564
  border-radius: 2px;
8639
- background: #282828;
7565
+ background: var(--surface-panel);
8640
7566
  }
8641
7567
 
8642
7568
  .sb-name,
@@ -8673,112 +7599,40 @@ input[type=range] {
8673
7599
  margin-top: 6px;
8674
7600
  }
8675
7601
 
8676
- .ardy-report,
8677
- .inspector-status-grid {
8678
- padding: 6px 8px;
8679
- border-radius: 2px;
8680
- font-size: 10px;
8681
- }
8682
-
8683
7602
  .inspector-list button {
8684
7603
  padding: 4px 8px;
8685
7604
  font-size: 11px;
8686
- border-radius: 2px;
8687
- }
8688
-
8689
- /* object transform sections: gizmo-modes as compact 3-way strip */
8690
- .presets.gizmo-modes {
8691
- grid-template-columns: 1fr 1fr 1fr;
8692
- }
8693
-
8694
- .presets.gizmo-modes button {
8695
- padding: 0 4px;
8696
- }
8697
-
8698
- .presets.gizmo-modes kbd {
8699
- font-size: 8px;
8700
- padding: 0 3px;
8701
- border-radius: 2px;
8702
- }
8703
-
8704
- .object-colors {
8705
- gap: 4px;
8706
- margin: 4px 0 8px;
8707
- }
8708
-
8709
- .object-color {
8710
- width: 18px;
8711
- height: 18px;
8712
- border-radius: 2px;
8713
- }
8714
-
8715
- /* ------------------------------------------------ Unity scene title bar --- */
8716
- /* View tabs and their context tools share one uninterrupted horizontal bar. */
8717
- .editor-toolbar.scene-tools {
8718
- position: static;
8719
- flex: 1;
8720
- height: 27px;
8721
- display: flex;
8722
- justify-content: flex-start;
8723
- gap: 0;
8724
- min-width: 0;
8725
- overflow-x: auto;
8726
- overflow-y: hidden;
8727
- scrollbar-width: none;
8728
- background: var(--panel);
8729
- }
8730
-
8731
- .editor-toolbar.scene-tools::-webkit-scrollbar { display: none; }
8732
-
8733
- .editor-toolbar.scene-tools .tool-switch {
8734
- flex: none;
8735
- border: 0;
8736
- border-radius: 0;
8737
- padding: 0;
8738
- background: transparent;
7605
+ border-radius: 2px;
8739
7606
  }
8740
7607
 
8741
- /* Direct manipulation and numeric fields share the Transform concept. Keep
8742
- the name visible beside the icon-only tool buttons so the beginner path has
8743
- one vocabulary for both ways of editing a selection. */
8744
- .editor-toolbar.scene-tools .transform-toolbar-label {
8745
- align-self: center;
8746
- flex: none;
8747
- padding: 0 8px;
8748
- color: var(--muted);
8749
- font-size: 9px;
8750
- font-weight: 700;
8751
- letter-spacing: .04em;
8752
- text-transform: uppercase;
7608
+ /* object transform sections: gizmo-modes as compact 3-way strip */
7609
+ .presets.gizmo-modes {
7610
+ grid-template-columns: 1fr 1fr 1fr;
8753
7611
  }
8754
7612
 
8755
- .editor-toolbar.scene-tools .tool-switch button,
8756
- .editor-toolbar.scene-tools .snap-switch {
8757
- height: 26px;
8758
- border-radius: 0;
8759
- border: 0;
8760
- border-right: 1px solid var(--line);
8761
- background: transparent;
7613
+ .presets.gizmo-modes button {
7614
+ padding: 0 4px;
8762
7615
  }
8763
7616
 
8764
- .editor-toolbar.scene-tools .tool-switch button {
8765
- width: 29px;
8766
- padding: 0;
8767
- gap: 0;
8768
- font-size: 0;
8769
- justify-content: center;
7617
+ .presets.gizmo-modes kbd {
7618
+ font-size: 8px;
7619
+ padding: 0 3px;
7620
+ border-radius: 2px;
8770
7621
  }
8771
7622
 
8772
- .editor-toolbar.scene-tools .tool-switch .tool-icon {
8773
- width: 14px;
8774
- height: 14px;
7623
+ .object-colors {
7624
+ gap: 4px;
7625
+ margin: 4px 0 8px;
8775
7626
  }
8776
7627
 
8777
- .editor-toolbar.scene-tools .snap-switch {
8778
- padding: 0 6px;
8779
- font-size: 8px;
7628
+ .object-color {
7629
+ width: 18px;
7630
+ height: 18px;
7631
+ border-radius: 2px;
8780
7632
  }
8781
7633
 
7634
+ /* ------------------------------------------------ Unity scene title bar --- */
7635
+
8782
7636
  .editor-toolbar.scene-tools .tool-switch button.active {
8783
7637
  background: #2d5c8a;
8784
7638
  color: #fff;
@@ -8789,16 +7643,6 @@ input[type=range] {
8789
7643
  color: var(--fg);
8790
7644
  }
8791
7645
 
8792
- .viewport-toolbar-separator {
8793
- flex: 0 0 1px;
8794
- align-self: stretch;
8795
- background: var(--line);
8796
- }
8797
-
8798
- .editor-toolbar.scene-tools .settings-separator {
8799
- margin-left: auto;
8800
- }
8801
-
8802
7646
  .viewport-toolbar-field,
8803
7647
  .viewport-fov-control {
8804
7648
  flex: none;
@@ -8847,29 +7691,6 @@ input[type=range] {
8847
7691
  font-size: 9px;
8848
7692
  }
8849
7693
 
8850
- .viewport-toolbar-spacer {
8851
- display: none;
8852
- }
8853
-
8854
- .editor-toolbar.scene-tools > button {
8855
- flex: none;
8856
- height: 26px;
8857
- padding: 0 6px;
8858
- border: 0;
8859
- border-right: 1px solid var(--line);
8860
- background: transparent;
8861
- color: #bdbdbd;
8862
- font: inherit;
8863
- font-size: 9px;
8864
- cursor: pointer;
8865
- white-space: nowrap;
8866
- }
8867
-
8868
- .editor-toolbar.scene-tools > button:hover {
8869
- background: #363636;
8870
- color: #fff;
8871
- }
8872
-
8873
7694
  /* The studio's one Export menu (#165, moved to the topbar in #193). It reuses
8874
7695
  the project menu's popover so the studio has a single dropdown language;
8875
7696
  the trigger is a plain .topbar-action. The panel stays fixed to the viewport
@@ -8904,15 +7725,6 @@ input[type=range] {
8904
7725
  z-index: 80;
8905
7726
  }
8906
7727
 
8907
- .export-trigger-state {
8908
- font-size: 10px;
8909
- color: var(--muted2);
8910
- }
8911
-
8912
- .export-trigger-state[data-phase="failed"] {
8913
- color: var(--fg);
8914
- }
8915
-
8916
7728
  .export-status {
8917
7729
  padding: 10px;
8918
7730
  margin-bottom: 6px;
@@ -9248,7 +8060,7 @@ input[type=range] {
9248
8060
 
9249
8061
  .hierarchy-row-wrap:before {
9250
8062
  left: -9px;
9251
- background: rgba(255, 255, 255, .07);
8063
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .07);
9252
8064
  }
9253
8065
 
9254
8066
  .hierarchy-icon {
@@ -9265,8 +8077,8 @@ input[type=range] {
9265
8077
  .inspector-heading {
9266
8078
  height: 26px;
9267
8079
  padding: 0 10px;
9268
- background: #2c2c2c;
9269
- border-bottom: 1px solid #1a1a1a;
8080
+ background: var(--lg-2c2c2c, #2c2c2c);
8081
+ border-bottom: 1px solid var(--lg-1a1a1a, #1a1a1a);
9270
8082
  }
9271
8083
 
9272
8084
  .hierarchy-heading strong,
@@ -9345,13 +8157,6 @@ input[type=range] {
9345
8157
  color: var(--muted);
9346
8158
  }
9347
8159
 
9348
- .ardy-clamp {
9349
- white-space: nowrap;
9350
- overflow: hidden;
9351
- text-overflow: ellipsis;
9352
- display: block;
9353
- }
9354
-
9355
8160
  /* ------------------------------------------- Unity component sections ----- */
9356
8161
  /* HDRP inspector: foldout triangle + component chip + bold title, a rule
9357
8162
  under the header while open, and content indented beneath it. */
@@ -9385,7 +8190,7 @@ input[type=range] {
9385
8190
  order: 0;
9386
8191
  width: 12px;
9387
8192
  font-size: 8px;
9388
- color: #c4c4c4;
8193
+ color: var(--lg-c4c4c4, #c4c4c4);
9389
8194
  }
9390
8195
 
9391
8196
  .foldout-title {
@@ -9394,7 +8199,7 @@ input[type=range] {
9394
8199
 
9395
8200
  /* open sections get the header rule and indented body */
9396
8201
  .card.foldout.open .foldout-head {
9397
- border-bottom: 1px solid #232323;
8202
+ border-bottom: 1px solid var(--lg-232323, #232323);
9398
8203
  }
9399
8204
 
9400
8205
  .card.foldout {
@@ -9403,7 +8208,7 @@ input[type=range] {
9403
8208
  }
9404
8209
 
9405
8210
  .card.foldout.open {
9406
- border-bottom: 1px solid #232323;
8211
+ border-bottom: 1px solid var(--lg-232323, #232323);
9407
8212
  }
9408
8213
 
9409
8214
  .foldout-body {
@@ -9418,13 +8223,13 @@ input[type=range] {
9418
8223
  }
9419
8224
 
9420
8225
  ::-webkit-scrollbar-thumb {
9421
- background: #4a4a4a;
8226
+ background: var(--lg-4a4a4a, #4a4a4a);
9422
8227
  border-radius: 4px;
9423
8228
  border: none;
9424
8229
  }
9425
8230
 
9426
8231
  ::-webkit-scrollbar-thumb:hover {
9427
- background: #5c5c5c;
8232
+ background: var(--lg-5c5c5c, #5c5c5c);
9428
8233
  }
9429
8234
 
9430
8235
  ::-webkit-scrollbar-track {
@@ -9556,8 +8361,8 @@ input[type=range] {
9556
8361
  display: flex;
9557
8362
  justify-content: flex-end;
9558
8363
  padding: 6px 12px;
9559
- border-top: 1px solid #1a1a1a;
9560
- background: #282828;
8364
+ border-top: 1px solid var(--lg-1a1a1a, #1a1a1a);
8365
+ background: var(--surface-panel);
9561
8366
  }
9562
8367
 
9563
8368
  .inspector-footer span {
@@ -9608,7 +8413,7 @@ input[type=range] {
9608
8413
  height: 10px;
9609
8414
  border: 1px solid #8a8a8a;
9610
8415
  border-radius: 2px;
9611
- background: rgba(255, 255, 255, .05);
8416
+ background: rgba(var(--lg-ink-rgb, 255,255,255), .05);
9612
8417
  box-shadow: none;
9613
8418
  transform: none;
9614
8419
  }
@@ -9619,7 +8424,7 @@ input[type=range] {
9619
8424
  .hierarchy-icon.motion,
9620
8425
  .hierarchy-icon.clip,
9621
8426
  .hierarchy-icon.prompt { border-color: #3a7cbf; background: rgba(58, 124, 191, .18); }
9622
- .hierarchy-icon.key { border-color: #d65f55; background: rgba(214, 95, 85, .16); transform: rotate(45deg) scale(.78); }
8427
+ .hierarchy-icon.key { border-color: var(--danger); background: rgba(214, 95, 85, .16); transform: rotate(45deg) scale(.78); }
9623
8428
  .hierarchy-icon.rig,
9624
8429
  .hierarchy-icon.bone { border-radius: 50%; border-color: #8a759d; background: rgba(138, 117, 157, .16); }
9625
8430
  .hierarchy-icon.path { width: 12px; height: 5px; border-radius: 999px; border-color: #6f9f86; background: rgba(111, 159, 134, .16); }
@@ -9768,7 +8573,7 @@ input[type=range] {
9768
8573
  padding: 12px 13px;
9769
8574
  border: 1px solid var(--line2);
9770
8575
  border-left: 3px solid var(--accent);
9771
- background: #282828;
8576
+ background: var(--surface-panel);
9772
8577
  }
9773
8578
 
9774
8579
  .result-next h4 {
@@ -9935,17 +8740,17 @@ input[type=range] {
9935
8740
 
9936
8741
  .props-drop[data-drop="over"],
9937
8742
  .hierarchy-row-wrap[data-drop="over"] {
9938
- border-color: var(--accent, #e7b557);
8743
+ border-color: var(--accent, var(--select));
9939
8744
  background: rgba(231, 181, 87, 0.1);
9940
8745
  }
9941
8746
 
9942
8747
  .hierarchy-row-wrap[data-drop="over"] {
9943
- border: 1px dashed var(--accent, #e7b557);
8748
+ border: 1px dashed var(--accent, var(--select));
9944
8749
  border-radius: 3px;
9945
8750
  }
9946
8751
 
9947
8752
  .viewport[data-drop="over"] {
9948
- outline: 2px dashed var(--accent, #e7b557);
8753
+ outline: 2px dashed var(--accent, var(--select));
9949
8754
  outline-offset: -6px;
9950
8755
  }
9951
8756
 
@@ -10097,8 +8902,8 @@ input[type=range] {
10097
8902
  justify-content: center;
10098
8903
  gap: 10px;
10099
8904
  padding: 24px;
10100
- background: var(--bg, #1e1e1e);
10101
- color: var(--fg, #d2d2d2);
8905
+ background: var(--bg, var(--lg-1e1e1e, #1e1e1e));
8906
+ color: var(--fg, var(--lg-d2d2d2, #d2d2d2));
10102
8907
  text-align: center;
10103
8908
  }
10104
8909
  .crash-screen h1 {
@@ -10107,17 +8912,17 @@ input[type=range] {
10107
8912
  }
10108
8913
  .crash-screen p {
10109
8914
  margin: 0;
10110
- color: var(--muted, #9a9a9a);
8915
+ color: var(--muted, var(--lg-9a9a9a, #9a9a9a));
10111
8916
  max-width: 52ch;
10112
8917
  }
10113
8918
  .crash-screen .crash-detail {
10114
8919
  max-width: min(72ch, 90vw);
10115
8920
  overflow: auto;
10116
8921
  padding: 10px 14px;
10117
- border: 1px solid var(--line2, #3c3c3c);
8922
+ border: 1px solid var(--line2, var(--lg-3c3c3c, #3c3c3c));
10118
8923
  border-radius: 6px;
10119
- background: var(--panel, #2c2c2c);
10120
- color: var(--muted, #9a9a9a);
8924
+ background: var(--panel, var(--lg-2c2c2c, #2c2c2c));
8925
+ color: var(--muted, var(--lg-9a9a9a, #9a9a9a));
10121
8926
  font-size: 12px;
10122
8927
  text-align: left;
10123
8928
  white-space: pre-wrap;
@@ -10125,10 +8930,10 @@ input[type=range] {
10125
8930
  .crash-screen button,
10126
8931
  .gl-lost-card button {
10127
8932
  padding: 6px 16px;
10128
- border: 1px solid var(--line2, #3c3c3c);
8933
+ border: 1px solid var(--line2, var(--lg-3c3c3c, #3c3c3c));
10129
8934
  border-radius: 6px;
10130
- background: var(--card, #383838);
10131
- color: var(--fg, #d2d2d2);
8935
+ background: var(--card, var(--lg-383838, #383838));
8936
+ color: var(--fg, var(--lg-d2d2d2, #d2d2d2));
10132
8937
  cursor: pointer;
10133
8938
  }
10134
8939
  .gl-lost-overlay {
@@ -10147,47 +8952,21 @@ input[type=range] {
10147
8952
  gap: 8px;
10148
8953
  max-width: 46ch;
10149
8954
  padding: 18px 22px;
10150
- border: 1px solid var(--line2, #3c3c3c);
8955
+ border: 1px solid var(--line2, var(--lg-3c3c3c, #3c3c3c));
10151
8956
  border-radius: 8px;
10152
- background: var(--panel, #2c2c2c);
10153
- color: var(--fg, #d2d2d2);
8957
+ background: var(--panel, var(--lg-2c2c2c, #2c2c2c));
8958
+ color: var(--fg, var(--lg-d2d2d2, #d2d2d2));
10154
8959
  text-align: center;
10155
8960
  }
10156
8961
  .gl-lost-card p {
10157
8962
  margin: 0;
10158
- color: var(--muted, #9a9a9a);
8963
+ color: var(--muted, var(--lg-9a9a9a, #9a9a9a));
10159
8964
  font-size: 12px;
10160
8965
  }
10161
-
10162
- /* ------------------------------------------- preserve (inpainting) -------- */
10163
- /* The "keep the current take" strength, in the Prompt Blocks panel. Same shape
10164
- as .trail-falloff-row — flat range plus a tabular readout — and, since round 2
10165
- allows preserving across a drawn root path, it has no disabled state left:
10166
- every state the control can be in is now a WORKING one, explained by the hint
10167
- lines under it rather than by graying.
10168
- Appended at the end on purpose: the global input[type=range] rules further up
10169
- the cascade (the Unity density and widget-material passes) would otherwise
10170
- win over anything written beside the trail row. */
10171
- .preserve-strength-row {
10172
- display: flex;
10173
- align-items: center;
10174
- gap: 8px;
10175
- }
10176
- .preserve-strength-row input[type="range"] {
10177
- flex: 1;
10178
- min-width: 0;
10179
- }
10180
8966
  .preserve-strength-value {
10181
8967
  font-variant-numeric: tabular-nums;
10182
8968
  opacity: .8;
10183
8969
  }
10184
- /* Both poles on one line, each at the end it describes. */
10185
- .preserve-strength-scale {
10186
- display: flex;
10187
- justify-content: space-between;
10188
- gap: 8px;
10189
- margin-top: 3px;
10190
- }
10191
8970
  /* Which limbs the grouped mask will actually free. It reads as a continuation
10192
8971
  of the slider, not as a new paragraph, so it sits tighter to the row above
10193
8972
  and one step quieter than the hint it borrows its voice from. */
@@ -10269,7 +9048,7 @@ input[type=range] {
10269
9048
  gap: 6px;
10270
9049
  margin-top: 8px;
10271
9050
  padding-left: 8px;
10272
- border-left: 2px solid var(--line2, #3c3c3c);
9051
+ border-left: 2px solid var(--line2, var(--lg-3c3c3c, #3c3c3c));
10273
9052
  }
10274
9053
  /* Two bounds on one line, reading as a single range rather than two fields —
10275
9054
  same flat shape as .preserve-strength-row. */
@@ -10303,12 +9082,6 @@ input[type=range] {
10303
9082
  font-variant-numeric: tabular-nums;
10304
9083
  white-space: nowrap;
10305
9084
  }
10306
- /* Wave 2 has not landed: the mode is fully usable, only the send is waiting.
10307
- Stated in the panel's own quiet voice rather than by disabling the tool. */
10308
- .line-edit-pending {
10309
- margin-top: 2px;
10310
- opacity: .85;
10311
- }
10312
9085
 
10313
9086
  /* The view moved out from under a committed edit. A STATUS, not an error: the
10314
9087
  edit is intact and still on its way to the box, so this reads like the
@@ -10390,39 +9163,6 @@ input[type=range] {
10390
9163
  background: var(--panel);
10391
9164
  }
10392
9165
 
10393
- /* The two primaries. They sit first and they sit together, so the choice reads
10394
- as a pair — block the scene, or refine what is already blocked — rather than
10395
- as two unrelated buttons that happen to be nearby. */
10396
- .take-modes {
10397
- display: flex;
10398
- align-items: flex-start;
10399
- gap: 8px;
10400
- }
10401
-
10402
- .take-mode {
10403
- display: flex;
10404
- flex-direction: column;
10405
- gap: 1px;
10406
- }
10407
-
10408
- .take-mode-btn {
10409
- height: 26px;
10410
- padding: 0 14px;
10411
- border: 1px solid var(--line2);
10412
- border-radius: 3px;
10413
- background: var(--bg);
10414
- color: var(--fg);
10415
- font: inherit;
10416
- font-size: 11px;
10417
- font-weight: 700;
10418
- letter-spacing: .02em;
10419
- cursor: pointer;
10420
- }
10421
-
10422
- .take-mode-btn:hover {
10423
- background: var(--hover);
10424
- }
10425
-
10426
9166
  .take-mode-btn.active {
10427
9167
  border-color: var(--accent);
10428
9168
  box-shadow: inset 0 -2px var(--accent);
@@ -10437,36 +9177,6 @@ input[type=range] {
10437
9177
  cursor: not-allowed;
10438
9178
  }
10439
9179
 
10440
- .take-mode-hint,
10441
- .take-mode-reason {
10442
- font-size: 10px;
10443
- line-height: 1.3;
10444
- max-width: 26ch;
10445
- color: var(--muted);
10446
- }
10447
-
10448
- .take-mode-reason {
10449
- color: var(--warn, #ff9c6e);
10450
- opacity: .9;
10451
- }
10452
-
10453
- /* The Scene entry's actions, revealed inline instead of in a popup: the strip
10454
- is already the place the artist is looking. */
10455
- .take-scene-menu {
10456
- display: flex;
10457
- flex-wrap: wrap;
10458
- align-items: flex-start;
10459
- gap: 6px 10px;
10460
- padding-left: 10px;
10461
- border-left: 1px solid var(--line2);
10462
- }
10463
-
10464
- .take-scene-action {
10465
- display: flex;
10466
- flex-direction: column;
10467
- gap: 1px;
10468
- }
10469
-
10470
9180
  .take-scene-menu .btn {
10471
9181
  height: 26px;
10472
9182
  padding: 0 10px;
@@ -10474,75 +9184,12 @@ input[type=range] {
10474
9184
  white-space: nowrap;
10475
9185
  }
10476
9186
 
10477
- .take-scene-advanced {
10478
- min-width: 220px;
10479
- font-size: 11px;
10480
- }
10481
-
10482
- .take-scene-advanced > summary {
10483
- cursor: pointer;
10484
- color: var(--muted);
10485
- font-size: 10px;
10486
- font-weight: 700;
10487
- letter-spacing: .03em;
10488
- }
10489
-
10490
- .take-scene-advanced > summary:hover {
10491
- color: var(--fg);
10492
- }
10493
-
10494
9187
  .take-recipe-summary {
10495
9188
  margin-top: 4px;
10496
9189
  opacity: .8;
10497
9190
  font-variant-numeric: tabular-nums;
10498
9191
  }
10499
9192
 
10500
- /* The version strip. Numbered because the numbers are what the artist says out
10501
- loud ("go back to v2"); the label rides underneath so a chip explains what it
10502
- is without a hover, and the current take is the one with the accent under it. */
10503
- .take-version-strip {
10504
- display: flex;
10505
- flex-wrap: wrap;
10506
- align-items: center;
10507
- gap: 4px;
10508
- margin-left: auto;
10509
- }
10510
-
10511
- .take-version-chip {
10512
- display: flex;
10513
- flex-direction: column;
10514
- align-items: center;
10515
- gap: 0;
10516
- min-width: 34px;
10517
- max-width: 120px;
10518
- padding: 2px 7px;
10519
- border: 1px solid var(--line2);
10520
- border-radius: 3px;
10521
- background: var(--bg);
10522
- color: var(--muted);
10523
- font: inherit;
10524
- cursor: pointer;
10525
- }
10526
-
10527
- .take-version-chip:hover {
10528
- background: var(--hover);
10529
- color: var(--fg);
10530
- }
10531
-
10532
- .take-version-chip b {
10533
- font-size: 11px;
10534
- font-variant-numeric: tabular-nums;
10535
- }
10536
-
10537
- .take-version-chip small {
10538
- max-width: 100%;
10539
- overflow: hidden;
10540
- text-overflow: ellipsis;
10541
- white-space: nowrap;
10542
- font-size: 9px;
10543
- opacity: .75;
10544
- }
10545
-
10546
9193
  .take-version-chip.current {
10547
9194
  border-color: var(--accent);
10548
9195
  color: var(--fg);
@@ -10577,36 +9224,10 @@ input[type=range] {
10577
9224
  bottom: 12px;
10578
9225
  right: 12px;
10579
9226
  }
10580
-
10581
- /* Make the title-bar hierarchy legible: manipulation tools, view toggles,
10582
- and camera settings read as three groups instead of one long button row. */
10583
- .editor-toolbar.scene-tools .tool-switch {
10584
- margin: 2px 4px 2px 3px;
10585
- height: 23px;
10586
- border: 1px solid var(--line2);
10587
- border-radius: 3px;
10588
- background: rgba(0, 0, 0, .14);
10589
- }
10590
- .editor-toolbar.scene-tools .tool-switch button {
10591
- height: 21px;
10592
- border-right: 0;
10593
- }
10594
- .editor-toolbar.scene-tools .tool-switch button + button {
10595
- border-left: 1px solid var(--line);
10596
- }
10597
- .editor-toolbar.scene-tools > .snap-switch {
10598
- margin: 2px 0;
10599
- height: 23px;
10600
- border: 1px solid var(--line2);
10601
- border-radius: 3px;
10602
- }
10603
9227
  .editor-toolbar.scene-tools .viewport-toolbar-field,
10604
9228
  .editor-toolbar.scene-tools .viewport-fov-control {
10605
9229
  background: rgba(0, 0, 0, .08);
10606
9230
  }
10607
- .editor-toolbar.scene-tools .settings-separator {
10608
- margin-left: 5px;
10609
- }
10610
9231
 
10611
9232
  /* Splitters are deliberately wider than their 1px visual rule so the
10612
9233
  cursor can reliably find them; the accent appears on hover/focus. */
@@ -10807,6 +9428,23 @@ input[type=range] {
10807
9428
  width: clamp(220px, calc(50% - 92px), 360px);
10808
9429
  }
10809
9430
 
9431
+ /* The floating shell covers the full-bleed viewport with panels. Keep the
9432
+ instructions inside its open stage, clear of the tool rail and dock. */
9433
+ .app[data-shell="glass"]:not([data-embed-mode]) .camera-tutorial {
9434
+ top: calc(var(--shell-view-top, 52px) + 12px);
9435
+ left: calc(var(--shell-center-left) + 64px);
9436
+ width: min(430px, calc(100% - var(--shell-center-left) - var(--shell-center-right) - 128px));
9437
+ }
9438
+ .app[data-shell="glass"][data-tutorial-step="rail"] .camera-tutorial,
9439
+ .app[data-shell="glass"] .camera-tutorial[data-previewing="1"] {
9440
+ top: auto;
9441
+ bottom: calc(var(--shell-center-bottom) + 12px);
9442
+ }
9443
+ .app[data-shell="glass"]:not([data-embed-mode]) .tutorial-cue {
9444
+ left: calc((var(--shell-center-left) + 100% - var(--shell-center-right)) / 2);
9445
+ bottom: calc(var(--shell-center-bottom) + 18px);
9446
+ }
9447
+
10810
9448
  .camera-tutorial-steps {
10811
9449
  display: flex;
10812
9450
  flex-wrap: wrap;
@@ -11454,59 +10092,129 @@ input[type=range] {
11454
10092
  .agent-toast { padding: 8px 12px; border-bottom: 1px solid var(--line); background: var(--accent-soft); color: var(--fg); font-size: 11px; }
11455
10093
 
11456
10094
  /* Fal H3 Studio motion launch slice (#380). */
11457
- .fal-motion-card { margin-top: 12px; padding: 14px; border: 1px solid var(--line, #313747); border-radius: 10px; background: rgba(21, 25, 35, .72); font-size: 13px; }
11458
- .fal-motion-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: -14px -14px 0; padding: 8px 14px; background: #151923; border-radius: 10px 10px 0 0; font-size: 12px; }
11459
- .fal-motion-head span { color: var(--muted, #a7afc2); font-size: 12px; }
11460
- .fal-motion-mode-tabs { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 10px; }
11461
- .fal-motion-mode-tabs button { min-height: 34px; padding: 6px 8px; border: 1px solid #343b4d; border-radius: 6px; background: #11151e; color: var(--muted, #a7afc2); font: inherit; font-size: 13px; cursor: pointer; }
11462
- .fal-motion-mode-tabs button.active { border-color: #7dd3fc; background: rgba(42, 77, 100, .32); color: #e6f7ff; }
11463
- .fal-motion-mode-hint { margin-top: 6px; }
11464
- .fal-motion-stepper { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; margin-top: 10px; }
11465
- .fal-motion-stepper span { display: flex; align-items: center; gap: 5px; min-width: 0; padding: 6px 7px; border: 1px solid #343b4d; border-radius: 6px; color: var(--muted, #a7afc2); font-size: 11px; }
11466
- .fal-motion-stepper span.active { border-color: #e1b45b; background: rgba(120, 85, 27, .22); color: #ffe7aa; }
11467
- .fal-motion-stepper span.done { border-color: #3e8d62; color: #9fe6b8; }
11468
- .fal-motion-stepper b { font-size: 12px; }
11469
- .fal-motion-segmentation-row { display: flex; align-items: center; gap: 6px; margin-top: 7px; }
11470
- .fal-motion-segmentation-row .fal-motion-segmentation { flex: 1; margin: 0; }
11471
- .fal-motion-flat-cta { flex: none; min-height: 32px !important; padding: 5px 10px !important; font-size: 12px !important; }
11472
- .fal-motion-pose-row, .fal-motion-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
11473
- .fal-motion-pose-row .btn, .fal-motion-actions .btn { min-height: 36px; padding: 7px 12px; font-size: 13px; }
11474
- .fal-motion-pose-row .btn.active { border-color: #7dd3fc; color: #d7f3ff; }
11475
- .fal-motion-capture-status { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 10px; }
11476
- .fal-motion-capture-slot { display: flex; flex-direction: column; gap: 4px; min-width: 0; padding: 9px; border: 1px solid #343b4d; border-radius: 7px; background: #11151e; }
11477
- .fal-motion-capture-slot.captured { border-color: #3e8d62; background: rgba(35, 83, 54, .22); }
11478
- .fal-motion-capture-slot strong { color: var(--fg, #eef3ff); font-size: 13px; }
11479
- .fal-motion-capture-slot.captured strong { color: #9fe6b8; }
11480
- .fal-motion-capture-slot span { overflow: hidden; color: var(--muted, #a7afc2); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
11481
- .fal-motion-slot-action { align-self: flex-start; padding: 0; border: 0; background: transparent; color: #b8dfff; font: inherit; font-size: 11px; cursor: pointer; text-decoration: underline; }
11482
- .fal-motion-camera-status { margin: 8px 0 0; color: var(--muted, #a7afc2); font-size: 11px; }
11483
- .fal-motion-camera-status.ready { color: #9fe6b8; }
11484
- .fal-motion-camera-actions { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 5px; }
11485
- .fal-motion-camera-actions .btn { min-height: 30px !important; padding: 4px 9px !important; font-size: 12px !important; }
11486
- .fal-motion-thumbs { display: flex; gap: 8px; margin-top: 8px; min-height: 0; }
11487
- .fal-motion-thumbs figure { margin: 0; min-width: 0; }
11488
- .fal-motion-thumbs img { display: block; width: 148px; height: 84px; object-fit: cover; border-radius: 5px; border: 1px solid #42506a; background: #0c0f16; }
11489
- .fal-motion-thumbs figcaption { margin-top: 4px; color: var(--muted, #a7afc2); font-size: 11px; }
11490
- .fal-motion-instruction { width: 100%; min-height: 64px; margin-top: 10px; padding: 9px; resize: vertical; border: 1px solid #343b4d; border-radius: 6px; background: #11151e; color: inherit; font: inherit; font-size: 13px; }
11491
- .fal-motion-prompt-note { margin-top: 8px; padding: 5px 6px; border-left: 2px solid #42506a; background: rgba(17, 21, 30, .65); }
11492
- .fal-motion-inline-error { margin-top: 8px; }
11493
- .fal-motion-segmentation.ready { color: #9fe6b8; }
11494
- .fal-motion-video { display: block; width: 100%; margin-top: 10px; border-radius: 7px; background: #090b10; }
11495
- .fal-motion-duration-row { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
11496
- .fal-motion-duration-row .btn { min-height: 32px; padding: 5px 12px; font-size: 12px; }
11497
- .fal-motion-duration-row .btn.active { border-color: #7dd3fc; background: rgba(42, 77, 100, .32); color: #e6f7ff; }
11498
- .fal-motion-prompt-edit { margin-top: 10px; }
11499
- .fal-motion-prompt-edit summary { cursor: pointer; color: var(--muted, #a7afc2); font-size: 12px; }
11500
- .fal-motion-prompt-override { min-height: 88px; margin-top: 6px; font-family: ui-monospace, monospace; font-size: 12px; }
11501
- .fal-motion-open-row { margin-top: 12px; }
11502
- .fal-motion-open { width: 100%; min-height: 40px; font-size: 14px; }
11503
- .modal.fal-motion-modal { width: min(920px, 96vw); }
11504
- .fal-motion-modal-body { display: grid; grid-template-columns: minmax(280px, 1fr) minmax(320px, 1.1fr); gap: 18px; }
11505
- .fal-motion-modal .fal-motion-thumbs { flex-direction: column; }
11506
- .fal-motion-modal .fal-motion-thumbs img { width: 100%; height: auto; }
11507
- @media (max-width: 700px) { .fal-motion-modal-body { grid-template-columns: 1fr; } }
11508
- .agent-fal-action { color: #6d4aff; border-color: color-mix(in srgb, #6d4aff 35%, var(--line) 65%); }
11509
- .agent-fal-action:disabled { opacity: .45; }
10095
+ .i2v-motion-card { margin-top: 12px; padding: 14px; border: 1px solid var(--line, #313747); border-radius: 10px; background: rgba(21, 25, 35, .72); font-size: 13px; }
10096
+ .i2v-motion-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: -14px -14px 0; padding: 8px 14px; background: #151923; border-radius: 10px 10px 0 0; font-size: 12px; }
10097
+ .i2v-motion-head span { color: var(--muted, #a7afc2); font-size: 12px; }
10098
+ .i2v-motion-mode-tabs { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 10px; }
10099
+ .i2v-motion-mode-tabs button { min-height: 34px; padding: 6px 8px; border: 1px solid #343b4d; border-radius: 6px; background: var(--lg-11151e, #11151e); color: var(--muted, #a7afc2); font: inherit; font-size: 13px; cursor: pointer; }
10100
+ .i2v-motion-mode-tabs button.active { border-color: #7dd3fc; background: rgba(42, 77, 100, .32); color: #e6f7ff; }
10101
+ .i2v-motion-mode-hint { margin-top: 6px; }
10102
+ .i2v-motion-stepper { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; margin-top: 10px; }
10103
+ .i2v-motion-stepper span { display: flex; align-items: center; gap: 5px; min-width: 0; padding: 6px 7px; border: 1px solid #343b4d; border-radius: 6px; color: var(--muted, #a7afc2); font-size: 11px; }
10104
+ .i2v-motion-stepper span.active { border-color: #e1b45b; background: rgba(120, 85, 27, .22); color: #ffe7aa; }
10105
+ .i2v-motion-stepper span.done { border-color: #3e8d62; color: #9fe6b8; }
10106
+ .i2v-motion-stepper b { font-size: 12px; }
10107
+ .i2v-motion-segmentation-row { display: flex; align-items: center; gap: 6px; margin-top: 7px; }
10108
+ .i2v-motion-segmentation-row .i2v-motion-segmentation { flex: 1; margin: 0; }
10109
+ .i2v-motion-flat-cta { flex: none; min-height: 32px !important; padding: 5px 10px !important; font-size: 12px !important; }
10110
+ .i2v-motion-pose-row, .i2v-motion-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
10111
+ .i2v-motion-pose-row .btn, .i2v-motion-actions .btn { min-height: 36px; padding: 7px 12px; font-size: 13px; }
10112
+ .i2v-motion-pose-row .btn.active { border-color: #7dd3fc; color: #d7f3ff; }
10113
+ .i2v-motion-capture-status { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 10px; }
10114
+ .i2v-motion-capture-slot { display: flex; flex-direction: column; gap: 4px; min-width: 0; padding: 9px; border: 1px solid #343b4d; border-radius: 7px; background: var(--lg-11151e, #11151e); }
10115
+ .i2v-motion-capture-slot.captured { border-color: #3e8d62; background: rgba(35, 83, 54, .22); }
10116
+ .i2v-motion-capture-slot strong { color: var(--fg, #eef3ff); font-size: 13px; }
10117
+ .i2v-motion-capture-slot.captured strong { color: #9fe6b8; }
10118
+ .i2v-motion-capture-slot span { overflow: hidden; color: var(--muted, #a7afc2); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
10119
+ .i2v-motion-slot-action { align-self: flex-start; padding: 0; border: 0; background: transparent; color: #b8dfff; font: inherit; font-size: 11px; cursor: pointer; text-decoration: underline; }
10120
+ .i2v-motion-camera-status { margin: 8px 0 0; color: var(--muted, #a7afc2); font-size: 11px; }
10121
+ .i2v-motion-camera-status.ready { color: #9fe6b8; }
10122
+ .i2v-motion-camera-actions { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 5px; }
10123
+ .i2v-motion-camera-actions .btn { min-height: 30px !important; padding: 4px 9px !important; font-size: 12px !important; }
10124
+ .i2v-motion-thumbs { display: flex; gap: 8px; margin-top: 8px; min-height: 0; }
10125
+ .i2v-motion-thumbs figure { margin: 0; min-width: 0; }
10126
+ .i2v-motion-thumbs img { display: block; width: 148px; height: 84px; object-fit: cover; border-radius: 5px; border: 1px solid #42506a; background: #0c0f16; }
10127
+ .i2v-motion-thumbs figcaption { margin-top: 4px; color: var(--muted, #a7afc2); font-size: 11px; }
10128
+ .i2v-motion-instruction { width: 100%; min-height: 64px; margin-top: 10px; padding: 9px; resize: vertical; border: 1px solid #343b4d; border-radius: 6px; background: var(--lg-11151e, #11151e); color: inherit; font: inherit; font-size: 13px; }
10129
+ .i2v-motion-inline-error { margin-top: 8px; }
10130
+ .i2v-motion-segmentation.ready { color: #9fe6b8; }
10131
+ .i2v-motion-video { display: block; width: 100%; margin-top: 10px; border-radius: 7px; background: #090b10; }
10132
+ .i2v-motion-duration-row { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
10133
+ .i2v-motion-duration-row .btn { min-height: 32px; padding: 5px 12px; font-size: 12px; }
10134
+ .i2v-motion-duration-row .btn.active { border-color: #7dd3fc; background: rgba(42, 77, 100, .32); color: #e6f7ff; }
10135
+ .i2v-motion-prompt-edit { margin-top: 10px; }
10136
+ .i2v-motion-prompt-edit summary { cursor: pointer; color: var(--muted, #a7afc2); font-size: 12px; }
10137
+ .i2v-motion-prompt-override { min-height: 88px; margin-top: 6px; font-family: ui-monospace, monospace; font-size: 12px; }
10138
+ .i2v-motion-open-row { margin-top: 12px; }
10139
+ .i2v-motion-open { width: 100%; min-height: 40px; font-size: 14px; }
10140
+ .modal.i2v-motion-modal { width: min(920px, 96vw); }
10141
+ .i2v-motion-modal-body { display: grid; grid-template-columns: minmax(280px, 1fr) minmax(320px, 1.1fr); gap: 18px; }
10142
+ .i2v-motion-modal .i2v-motion-thumbs { flex-direction: column; }
10143
+ .i2v-motion-modal .i2v-motion-thumbs img { width: 100%; height: auto; }
10144
+ @media (max-width: 700px) { .i2v-motion-modal-body { grid-template-columns: 1fr; } }
10145
+ .agent-i2v-action { color: #6d4aff; border-color: color-mix(in srgb, #6d4aff 35%, var(--line) 65%); }
10146
+ .agent-i2v-action:disabled { opacity: .45; }
11510
10147
  .result-motion-video { width: 100%; max-height: 420px; background: #090b10; }
11511
10148
  .result-motion-meta { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; color: var(--muted, #a7afc2); font-size: 11px; }
11512
10149
  .result-motion-meta span { padding: 3px 6px; border: 1px solid var(--line, #313747); border-radius: 999px; }
10150
+
10151
+ /* ------------------------------------------- use-case question (#466) ----- */
10152
+ /* One optional, non-modal question after the first successful export. Same
10153
+ surface as the bottom toasts, parked bottom-right so it never covers them. */
10154
+ .use-case-ask {
10155
+ position: fixed;
10156
+ z-index: 42;
10157
+ right: 16px;
10158
+ bottom: 76px;
10159
+ width: min(300px, calc(100vw - 32px));
10160
+ padding: 10px 12px;
10161
+ border: 1px solid var(--line2);
10162
+ border-radius: 6px;
10163
+ background: var(--panel);
10164
+ box-shadow: var(--shadow-md);
10165
+ color: var(--fg);
10166
+ font-size: 11px;
10167
+ }
10168
+
10169
+ .use-case-ask-head {
10170
+ display: flex;
10171
+ align-items: center;
10172
+ justify-content: space-between;
10173
+ gap: 8px;
10174
+ }
10175
+
10176
+ .use-case-ask-prompt {
10177
+ margin: 6px 0 8px;
10178
+ }
10179
+
10180
+ .use-case-ask-choices {
10181
+ display: flex;
10182
+ flex-wrap: wrap;
10183
+ gap: 6px;
10184
+ }
10185
+
10186
+ .use-case-ask-choices button {
10187
+ padding: 4px 8px;
10188
+ border: 1px solid var(--line2);
10189
+ border-radius: 4px;
10190
+ background: transparent;
10191
+ color: var(--fg);
10192
+ font-size: 11px;
10193
+ cursor: pointer;
10194
+ }
10195
+
10196
+ .use-case-ask-choices button:hover {
10197
+ border-color: var(--accent);
10198
+ background: var(--accent-soft);
10199
+ }
10200
+
10201
+ .use-case-ask-close {
10202
+ padding: 0 4px;
10203
+ border: 0;
10204
+ background: transparent;
10205
+ color: var(--muted);
10206
+ font-size: 14px;
10207
+ line-height: 1;
10208
+ cursor: pointer;
10209
+ }
10210
+
10211
+ .use-case-ask button:focus-visible {
10212
+ outline: 2px solid var(--cyan);
10213
+ outline-offset: 1px;
10214
+ }
10215
+
10216
+ .use-case-ask .use-case-ask-note {
10217
+ margin: 8px 0 0;
10218
+ color: var(--muted);
10219
+ }
10220
+ }