@dailies-studio/shot-editor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/assets/index-B7notge7.css +1 -0
  2. package/dist/assets/index-BBE6Ta9L.js +52 -0
  3. package/dist/index.html +13 -0
  4. package/package.json +45 -0
  5. package/src/api.ts +289 -0
  6. package/src/app/App.tsx +394 -0
  7. package/src/audio/index.tsx +74 -0
  8. package/src/audio/preview.ts +364 -0
  9. package/src/bridge.ts +45 -0
  10. package/src/bridgeTypes.ts +582 -0
  11. package/src/channels.ts +40 -0
  12. package/src/main.tsx +15 -0
  13. package/src/panels/ResizeHandle.tsx +113 -0
  14. package/src/panels/agent/AgentPanel.tsx +478 -0
  15. package/src/panels/agent/agent.css +322 -0
  16. package/src/panels/export/ExportDialog.tsx +284 -0
  17. package/src/panels/files/FilePanel.tsx +564 -0
  18. package/src/panels/files/McpSection.tsx +66 -0
  19. package/src/panels/files/icons.tsx +118 -0
  20. package/src/panels/header/DocSwitcher.tsx +85 -0
  21. package/src/panels/header/Header.tsx +132 -0
  22. package/src/panels/header/HistoryControls.tsx +20 -0
  23. package/src/panels/header/StatusBadges.tsx +49 -0
  24. package/src/panels/header/TransportBar.tsx +86 -0
  25. package/src/panels/header/ZoomControls.tsx +38 -0
  26. package/src/panels/help/HelpSection.tsx +190 -0
  27. package/src/panels/inspector/FramingRows.tsx +69 -0
  28. package/src/panels/inspector/InspectorPanel.tsx +178 -0
  29. package/src/panels/inspector/MarkerSection.tsx +63 -0
  30. package/src/panels/inspector/ParamRow.tsx +71 -0
  31. package/src/panels/inspector/animate/BlockTiming.tsx +341 -0
  32. package/src/panels/inspector/animate/DuringBlocks.tsx +85 -0
  33. package/src/panels/inspector/animate/InOutPresets.tsx +57 -0
  34. package/src/panels/inspector/animate/ResolvedChannels.tsx +150 -0
  35. package/src/panels/inspector/animate/ShotSection.tsx +126 -0
  36. package/src/panels/inspector/animate/useBlocks.ts +43 -0
  37. package/src/panels/inspector/design/AlignRow.tsx +63 -0
  38. package/src/panels/inspector/design/AppearanceSection.tsx +49 -0
  39. package/src/panels/inspector/design/ClonerSection.tsx +142 -0
  40. package/src/panels/inspector/design/ComponentSection.tsx +94 -0
  41. package/src/panels/inspector/design/CornerSection.tsx +52 -0
  42. package/src/panels/inspector/design/FillSection.tsx +89 -0
  43. package/src/panels/inspector/design/HtmlSection.tsx +50 -0
  44. package/src/panels/inspector/design/InstanceSection.tsx +302 -0
  45. package/src/panels/inspector/design/MediaSection.tsx +251 -0
  46. package/src/panels/inspector/design/MeshSection.tsx +172 -0
  47. package/src/panels/inspector/design/ShadowSection.tsx +73 -0
  48. package/src/panels/inspector/design/StrokeSection.tsx +85 -0
  49. package/src/panels/inspector/design/TransformSection.tsx +91 -0
  50. package/src/panels/inspector/design/TypographySection.tsx +170 -0
  51. package/src/panels/inspector/scene/CameraSection.tsx +59 -0
  52. package/src/panels/inspector/scene/EffectsSection.tsx +123 -0
  53. package/src/panels/inspector/scene/SceneSection.tsx +71 -0
  54. package/src/panels/inspector/scene/TransitionSection.tsx +136 -0
  55. package/src/panels/inspector/useDocWrite.ts +268 -0
  56. package/src/panels/material/MaterialPicker.tsx +172 -0
  57. package/src/panels/stage/StageMenu.tsx +38 -0
  58. package/src/panels/stage/StagePanel.tsx +131 -0
  59. package/src/panels/timeline/AudioLane.tsx +340 -0
  60. package/src/panels/timeline/BlockRow.tsx +242 -0
  61. package/src/panels/timeline/ChannelRow.tsx +266 -0
  62. package/src/panels/timeline/LifespanRow.tsx +165 -0
  63. package/src/panels/timeline/MarkerLane.tsx +146 -0
  64. package/src/panels/timeline/SceneStrip.tsx +145 -0
  65. package/src/panels/timeline/TimelineDock.tsx +488 -0
  66. package/src/panels/timeline/model.ts +641 -0
  67. package/src/panels/timeline/snap.ts +191 -0
  68. package/src/panels/toolbar/AddMenu.tsx +230 -0
  69. package/src/panels/toolbar/CameraViewBar.tsx +70 -0
  70. package/src/panels/toolbar/ShadingBar.tsx +42 -0
  71. package/src/panels/toolbar/ToolDockBar.tsx +110 -0
  72. package/src/panels/toolbar/ViewModeBar.tsx +49 -0
  73. package/src/shotTokens.css +131 -0
  74. package/src/stage/FrustumGizmo.tsx +184 -0
  75. package/src/stage/GridPlane.tsx +274 -0
  76. package/src/stage/MoveGizmo.tsx +411 -0
  77. package/src/stage/PerfHud.tsx +206 -0
  78. package/src/stage/SplitRenderer.tsx +511 -0
  79. package/src/stage/StageApp.tsx +3423 -0
  80. package/src/stage/StageTools.tsx +581 -0
  81. package/src/stage/bridgeClient.ts +278 -0
  82. package/src/stage/feed.ts +243 -0
  83. package/src/stage/frustumGeometry.ts +172 -0
  84. package/src/stage/gizmoMath.ts +494 -0
  85. package/src/stage/handles.ts +151 -0
  86. package/src/stage/instanceModules.ts +152 -0
  87. package/src/stage/interactions/move.ts +172 -0
  88. package/src/stage/interactions/panZoom.ts +60 -0
  89. package/src/stage/isolation.ts +155 -0
  90. package/src/stage/main.tsx +110 -0
  91. package/src/stage/modalState.ts +427 -0
  92. package/src/stage/overlays/Overlays.tsx +1046 -0
  93. package/src/stage/panes.ts +121 -0
  94. package/src/stage/penState.ts +112 -0
  95. package/src/stage/project.ts +402 -0
  96. package/src/stage/shading.ts +55 -0
  97. package/src/stage/tokenColor.ts +26 -0
  98. package/src/stage/view.ts +182 -0
  99. package/src/stage/workingView.ts +636 -0
  100. package/src/state/agentActions.ts +203 -0
  101. package/src/state/clientId.ts +25 -0
  102. package/src/state/context.tsx +33 -0
  103. package/src/state/insert.ts +507 -0
  104. package/src/state/keymap.ts +560 -0
  105. package/src/state/menu.ts +141 -0
  106. package/src/state/panelSize.ts +26 -0
  107. package/src/state/renderEvents.ts +100 -0
  108. package/src/state/store.ts +4094 -0
  109. package/src/state/triangles.ts +70 -0
  110. package/src/state/types.ts +384 -0
  111. package/src/styles.css +2948 -0
  112. package/src/tools.ts +181 -0
@@ -0,0 +1 @@
1
+ .agent-panel{position:relative;display:flex;flex-direction:column;height:100%;min-width:0}.agent-title{display:flex;align-items:center;gap:6px}.agent-title-label{flex:none}.agent-models{display:flex;gap:2px;flex:1;min-width:0}.agent-setup{padding:8px;border-bottom:1px solid var(--border);flex:none;display:flex;flex-direction:column;gap:6px}.agent-setup-blurb{margin:0;color:var(--text-2);font-size:12px;line-height:1.5}.agent-setup-row{display:flex;gap:4px}.agent-key-input{flex:1;min-width:0;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-1);padding:4px 6px;font:var(--mono)}.agent-transcript{flex:1;min-height:0;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:6px}.agent-msg{border-radius:var(--radius);padding:5px 8px;font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.agent-msg-user{background:var(--accent-soft);color:var(--text-1);align-self:flex-end;max-width:90%}.agent-msg-assistant{background:var(--bg-2);color:var(--text-1)}.agent-msg-error{background:var(--bg-2);color:var(--danger)}.agent-msg-info{color:var(--text-3);font-style:italic}.agent-tool{color:var(--text-3);font:var(--mono);font-size:11px;padding-left:8px}.agent-tool:before{content:"⚙ "}.agent-thinking{animation:agent-pulse 1.2s ease-in-out infinite}@keyframes agent-pulse{50%{opacity:.4}}.agent-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-1);overflow:hidden;flex:none}.agent-card-applied{border-color:var(--accent)}.agent-card-head{display:flex;align-items:center;gap:6px;padding:4px 6px;border-bottom:1px solid var(--border);background:var(--bg-2)}.agent-card-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-1)}.agent-card:not(.agent-card-canvas) .agent-card-path{font:var(--mono)}.agent-card-status{flex:none;font-size:11px;text-transform:uppercase;letter-spacing:.04em}.agent-card-status.is-applied{color:var(--accent)}.agent-card-status.is-stale,.agent-card-status.is-failed{color:var(--danger)}.agent-card-status.is-applying{color:var(--text-2)}.agent-card-meta{display:flex;align-items:center;flex-wrap:wrap;gap:4px;padding:4px 8px;font-size:11px;color:var(--text-3)}.agent-card-doc{color:var(--text-2);font:var(--mono);font-size:11px}.agent-card-count:before{content:"· "}.agent-tree{margin:0;padding:4px 0;max-height:260px;overflow:auto;font:var(--mono);font-size:11px;line-height:1.45;color:var(--text-2)}.agent-tree-line{padding:0 8px;white-space:pre}.agent-diff{margin:0;padding:4px 0;max-height:260px;overflow:auto;font:var(--mono);font-size:11px;line-height:1.45}.agent-diff>div{padding:0 8px;white-space:pre}.agent-diff-add{background:#40a06029;color:#7fd79f}.agent-diff-del{background:#c8484824;color:#e79a9a}.agent-diff-hunk{color:var(--text-3)}.agent-diff-ctx{color:var(--text-2)}.agent-card-note{padding:4px 8px;color:var(--text-3);font-size:11px}.agent-card-error{margin:0;white-space:normal}.agent-card-warning{color:var(--warn, #e0a33e);white-space:normal}.agent-strip{flex:none;display:flex;align-items:center;gap:8px}.agent-strip-msg{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-cost{flex:none;padding:2px 8px;color:var(--text-3);font-size:11px;text-align:right}.agent-composer{display:flex;align-items:flex-end;gap:4px;padding:8px;border-top:1px solid var(--border);flex:none;flex-wrap:wrap}.agent-pin{flex:0 0 100%;color:var(--text-3);font-size:11px}.agent-input{flex:1;min-width:0;resize:none;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-1);padding:5px 7px;font:inherit;font-size:12px;line-height:1.4}.agent-input:focus{outline:1px solid var(--accent)}:root{--bg-0: #0b0b0d;--bg-1: #141417;--bg-2: #1d1d21;--bg-3: #27272d;--border: #28282e;--border-strong: #3a3a42;--text-1: #f0f0f4;--text-2: #a4a4af;--text-3: #6e6e7a;--accent: #f43f5e;--accent-soft: #f43f5e33;--kf: #e8c34a;--spring: #a3e635;--warn: #ffb454;--danger: #ff5c69;--danger-bg: #2a1518;--danger-border: #5c2a31;--space-0: 0;--space-1: 2px;--space-2: 4px;--space-3: 6px;--space-4: 8px;--space-5: 10px;--space-6: 12px;--space-7: 16px;--space-8: 24px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 10px;--radius-xl: 16px;--radius: var(--radius-md);--control-radius: var(--radius-lg);--text-2xs: 9px;--text-xs: 10px;--text-sm: 11px;--text-md: 12px;--text-lg: 13px;--weight-regular: 400;--weight-medium: 500;--weight-semibold: 600;--tracking-caps: .05em;--font: 12px/1.45 system-ui, "Segoe UI", sans-serif;--mono: 11px/1.4 ui-monospace, Consolas, monospace;--control-h: 28px;--row-h: 28px;--section-header-h: 32px;--label-w: 64px;--slider-fill: color-mix(in srgb, var(--accent) 24%, transparent);--slider-thumb: var(--accent);--shadow-1: 0 1px 2px #0006;--shadow-2: 0 4px 12px #0008;--shadow-popover: 0 8px 28px -4px #000a, 0 2px 6px #0007;--ring-width: 2px;--ring-color: var(--accent-soft);--focus-ring: 0 0 0 var(--ring-width) var(--ring-color);--dur-fast: 80ms;--dur-med: .14s;--ease: cubic-bezier(.2, 0, 0, 1);--z-panel: 2;--z-dock: 3;--z-overlay: 10;--z-menu: 1000;--z-dialog: 1100;--panel-radius: var(--radius-xl);--panel-shadow: 0 8px 32px -8px #000c, 0 2px 8px #0008;--panel-bg: color-mix(in srgb, var(--bg-1) 92%, transparent);--panel-blur: 12px;--panel-gutter: var(--space-4);--dock-h-default: 240px;--dock-h-min: 120px;--dock-h-collapsed: 0px;--panel-w-left: 248px;--panel-w-inspector: 300px;--resize-hit: 6px;--canvas-bg: #0f0f11;--stage-guide: #ff9f2e;--stage-ruler-guide: #19b9d4;--stage-draw: #33c27f;--stage-selection: var(--accent);--stage-selection-soft: color-mix(in srgb, var(--accent) 55%, transparent);--stage-selection-fill: color-mix(in srgb, var(--accent) 8%, transparent);--stage-draw-fill: color-mix(in srgb, var(--stage-draw) 8%, transparent);--stage-handle: var(--text-1);--stage-artboard-shadow: 0 2px 16px #0006;--surface-app: var(--bg-0);--surface-panel: var(--bg-1);--surface-inset: var(--bg-2);--surface-hover: var(--bg-3);--control-bg: var(--bg-2);--control-bg-hover: var(--bg-3);--control-border: var(--border);--control-border-hover: var(--border-strong);--control-border-focus: var(--accent);--text-primary: var(--text-1);--text-secondary: var(--text-2);--text-tertiary: var(--text-3);--divider: var(--border);--divider-strong: var(--border-strong)}:root[data-theme=light]{--bg-0: #f5f5f7;--bg-1: #ffffff;--bg-2: #f0f0f3;--bg-3: #e6e6ea;--border: #e2e2e8;--border-strong: #cfcfd8;--text-1: #1c1c22;--text-2: #5b5b68;--text-3: #8a8a97;--accent-soft: #f43f5e26;--shadow-1: 0 1px 2px #0000001a;--shadow-2: 0 4px 12px #00000024;--shadow-popover: 0 8px 28px -4px #00000033, 0 2px 6px #0000001f;--canvas-bg: #e9e9ee;--danger-bg: #fdecee;--danger-border: #f3c2c8;--stage-artboard-shadow: 0 2px 16px #00000026}:root{color-scheme:dark}:root[data-theme=light]{color-scheme:light}button,input,select,textarea{font:inherit;color:inherit}.btn{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;background:var(--control-bg);border:1px solid transparent;border-radius:var(--radius);color:var(--text-1);cursor:pointer;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.btn:hover:not(:disabled){background:var(--control-bg-hover)}.btn:disabled{opacity:.45;cursor:default}.btn.is-icon{padding:4px}.btn.is-active{background:var(--accent-soft);color:var(--accent)}.btn.is-danger:hover:not(:disabled){border-color:var(--danger);color:var(--danger)}.btn.is-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.is-primary:hover:not(:disabled){background:var(--accent);border-color:var(--accent);filter:brightness(1.12)}.btn.is-primary.is-danger,.btn.is-primary.is-danger:hover:not(:disabled){background:var(--danger);border-color:var(--danger);color:#fff}.select{height:var(--control-h);padding:0 var(--space-4);background:var(--control-bg);border:1px solid transparent;border-radius:var(--control-radius);max-width:100%;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}.text-input{height:var(--control-h);padding:0 var(--space-5);background:var(--control-bg);border:1px solid transparent;border-radius:var(--control-radius);width:100%;min-width:0;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}textarea.text-input{height:auto;padding:var(--space-3) var(--space-5)}.text-input:hover,.select:hover{background:var(--control-bg-hover)}.text-input:focus,.select:focus{outline:none;background:var(--control-bg);border-color:var(--control-border-focus);box-shadow:var(--focus-ring)}.numfield{position:relative;display:inline-flex;align-items:center;gap:var(--space-2);min-width:0;height:var(--control-h);padding:0 var(--space-5);background:var(--control-bg);border:1px solid transparent;border-radius:var(--control-radius);overflow:hidden;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}.numfield:hover:not(.is-disabled){background:var(--control-bg-hover)}.numfield:focus-within{background:var(--control-bg);border-color:var(--control-border-focus);box-shadow:var(--focus-ring)}.numfield-fill{position:absolute;top:0;bottom:0;left:0;background:var(--slider-fill);border-right:2px solid var(--slider-thumb);pointer-events:none}.numfield-label{position:relative;flex:1 1 auto;min-width:14px;color:var(--text-2);cursor:ew-resize;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:none}.numfield-input{position:relative;flex:1 1 36px;min-width:24px;padding:0;background:none;border:none;text-align:right;color:var(--text-1);user-select:text}.numfield-input:focus{outline:none}.numfield-unit{position:relative;color:var(--text-3);flex:none;cursor:ew-resize;user-select:none}.numfield.is-disabled{opacity:.45}.numfield.is-disabled .numfield-label,.numfield.is-disabled .numfield-unit{cursor:default}.badge{display:inline-block;padding:0 5px;border-radius:var(--radius-sm);font-size:var(--text-xs);line-height:16px;background:var(--bg-3);color:var(--text-2);white-space:nowrap}.chevron{transition:transform var(--dur-fast) var(--ease)}.chevron.is-open{transform:rotate(90deg)}.popover{background:var(--surface-inset);border:1px solid var(--border-strong);border-radius:var(--radius-xl);box-shadow:var(--shadow-popover)}.popover-float{z-index:var(--z-menu)}.panel-crash{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2);margin:var(--space-2);padding:var(--space-3);border:1px solid var(--danger);border-radius:var(--radius-md);background:var(--bg-2)}.panel-crash-title{color:var(--danger);font-weight:600}.panel-crash-message{color:var(--text-secondary);font-size:var(--text-xs);white-space:pre-wrap;overflow-wrap:anywhere}.insp-section{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-6) var(--space-7);border-bottom:1px solid var(--divider)}.insp-heading{display:flex;align-items:center;gap:var(--space-3);min-height:var(--section-header-h);font-size:var(--text-md);font-weight:var(--weight-semibold);letter-spacing:0;color:var(--text-primary)}.insp-row{display:flex;align-items:center;gap:var(--space-3);min-height:var(--row-h)}.insp-row.is-align-start{align-items:flex-start}.insp-label{flex:none;width:var(--label-w);color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.insp-label.is-icon{width:auto;min-width:14px;display:inline-flex;align-items:center;justify-content:center;color:var(--text-tertiary)}.insp-control{flex:1;min-width:0;display:flex;align-items:center;gap:var(--space-2)}.insp-num{flex:1;min-width:0}.insp-vec{flex:1;min-width:0;display:flex;gap:4px}.insp-vec .numfield{flex:1;min-width:0}.insp-grid{flex:1;min-width:0;display:grid;grid-template-columns:repeat(var(--insp-cols, 2),minmax(0,1fr));gap:var(--space-2)}.insp-grid .numfield{min-width:0}.insp-dim{color:var(--text-tertiary);font:var(--mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.insp-inline-error{color:var(--danger);font-size:var(--text-xs);white-space:normal;user-select:text}.insp-notice{font-size:var(--text-xs);white-space:normal;user-select:text;color:var(--text-tertiary)}.insp-notice.is-warn{color:var(--warn)}.insp-textarea{resize:vertical;min-height:44px}.insp-color{flex:none;width:30px;height:var(--control-h);padding:1px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);cursor:pointer}.insp-check{accent-color:var(--accent);margin:0}.insp-section-headrow{display:flex;align-items:center;gap:var(--space-2)}.insp-section-header{flex:1;min-width:0;display:flex;align-items:center;gap:var(--space-3);height:var(--section-header-h);padding:0;background:none;border:none;cursor:pointer;font-size:var(--text-md);font-weight:var(--weight-semibold);letter-spacing:0;color:var(--text-primary)}.insp-section-header.is-static{cursor:default}.insp-section-header:hover:not(.is-static) .insp-section-disclosure{color:var(--text-secondary)}.insp-section-disclosure{flex:none;order:2;margin-left:auto;color:var(--text-tertiary)}.insp-section-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.insp-section-actions{flex:none;display:flex;align-items:center;gap:var(--space-1);opacity:0;transition:opacity var(--dur-fast) var(--ease)}.insp-section:hover .insp-section-actions,.insp-section-actions:focus-within{opacity:1}.insp-section-body{display:flex;flex-direction:column;gap:var(--space-3);padding-top:var(--space-3)}.insp-composite{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:4px}.insp-composite-toggle{cursor:pointer}.insp-composite-toggle:disabled{cursor:default;opacity:.55}.insp-composite-editor{align-self:stretch;display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg-2)}.insp-composite-curve{display:block;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius)}.insp-composite-curve polyline{fill:none;stroke:var(--accent);stroke-width:1.5}.insp-composite-point{display:flex;flex-direction:column;gap:2px;padding-bottom:2px;border-bottom:1px solid var(--border)}.insp-composite-point .numfield,.insp-composite-handles .numfield{flex:1;min-width:0}.insp-gradient-preview{height:14px;border:1px solid var(--border);border-radius:var(--radius)}.segmented{display:inline-flex;flex:1;min-width:0;padding:2px;gap:2px;background:var(--control-bg);border-radius:var(--control-radius)}.segmented-item,.segmented-item:first-child,.segmented-item:last-child,.segmented-item:only-child{flex:1 1 0;min-width:0;min-height:calc(var(--control-h) - 8px);justify-content:center;margin-left:0;padding:1px 6px;background:transparent;border-radius:calc(var(--control-radius) - 2px);color:var(--text-2)}.segmented-item:hover:not(:disabled){background:color-mix(in srgb,var(--text-1) 6%,transparent);color:var(--text-1)}.segmented-item.is-active,.segmented-item.is-active:hover:not(:disabled){position:relative;z-index:1;background:var(--accent);color:#fff;box-shadow:var(--shadow-1)}.toggle{flex:none;width:32px;height:18px;padding:0;border:none;border-radius:999px;background:var(--bg-3);cursor:pointer;position:relative;transition:background var(--dur-fast) var(--ease)}.toggle:hover:not(:disabled):not(.is-on){background:var(--border-strong)}.toggle.is-on{background:var(--accent)}.toggle:disabled{opacity:.45;cursor:default}.toggle-knob{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:var(--text-1);box-shadow:var(--shadow-1);transition:transform var(--dur-fast) var(--ease)}.toggle.is-on .toggle-knob{transform:translate(14px);background:#fff}.combobox-trigger{display:inline-flex;align-items:center;gap:var(--space-2);width:100%;text-align:left;cursor:pointer}.combobox-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.combobox-caret{flex:none;color:var(--text-3);transform:rotate(90deg)}.combobox-pop{padding:var(--space-2);max-height:280px;display:flex;flex-direction:column;gap:var(--space-2)}.combobox-search{display:flex;align-items:center;gap:var(--space-2);position:relative}.combobox-search-icon{position:absolute;left:6px;color:var(--text-3);pointer-events:none}.combobox-search .text-input{padding-left:22px}.combobox-list{list-style:none;margin:0;padding:0;overflow:auto;min-width:0}.combobox-option{padding:3px 8px;border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.combobox-option.is-active{background:var(--surface-hover)}.combobox-option.is-selected{color:var(--accent)}.combobox-empty{padding:4px 8px;color:var(--text-3)}.angle-dial{flex:none;cursor:grab;touch-action:none}.angle-dial:active{cursor:grabbing}.angle-dial.is-disabled{opacity:.45;cursor:default}.angle-dial-ring{fill:var(--control-bg);stroke:var(--control-border);stroke-width:1}.angle-dial:hover .angle-dial-ring{stroke:var(--control-border-hover)}.angle-dial-arm{stroke:var(--accent);stroke-width:1.2}.angle-dial-handle{fill:var(--accent)}.colorpicker-swatch,.colorpicker-alpha{background-image:linear-gradient(45deg,#808080 25%,transparent 25%),linear-gradient(-45deg,#808080 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#808080 75%),linear-gradient(-45deg,transparent 75%,#808080 75%);background-size:8px 8px;background-position:0 0,0 4px,4px -4px,-4px 0}.colorpicker-swatch{padding:0;overflow:hidden;position:relative}.colorpicker-swatch-fill{position:absolute;inset:0}.colorpicker-pop{width:252px;padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}.colorpicker-sv{position:relative;width:100%;height:140px;border-radius:var(--radius);cursor:crosshair;touch-action:none;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent)}.colorpicker-sv-thumb,.colorpicker-slider-thumb{position:absolute;width:12px;height:12px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #0008;transform:translate(-50%,-50%);pointer-events:none}.colorpicker-hue,.colorpicker-alpha{position:relative;height:12px;border-radius:999px;cursor:ew-resize;touch-action:none}.colorpicker-hue{background:linear-gradient(to right,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.colorpicker-alpha-bar{position:absolute;inset:0;border-radius:999px}.colorpicker-hue .colorpicker-slider-thumb,.colorpicker-alpha .colorpicker-slider-thumb{top:50%}.colorpicker-fields{display:grid;grid-template-columns:1fr auto auto auto auto;gap:var(--space-2);align-items:center}.colorpicker-hex{min-width:0}.colorpicker-ch{min-width:0;padding:0 var(--space-3)}.colorpicker-ch .numfield-input{min-width:20px}.colorpicker-swatches{display:grid;grid-template-columns:repeat(12,1fr);gap:3px}.colorpicker-swatch-chip{aspect-ratio:1;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;padding:0}.colorpicker-swatch-chip:hover{border-color:var(--text-2)}.topbar{flex:1;min-width:0;display:flex;align-items:center;gap:8px}.topbar-tabs{display:flex;flex:none;padding:2px;gap:2px;background:var(--control-bg);border-radius:var(--control-radius)}.topbar-tabs .btn{text-decoration:none;margin-left:0;padding:2px 10px;background:transparent;border-radius:calc(var(--control-radius) - 2px);color:var(--text-2)}.topbar-tabs .btn:hover:not(:disabled){background:color-mix(in srgb,var(--text-1) 6%,transparent);color:var(--text-1)}.topbar-tabs .btn.is-active,.topbar-tabs .btn.is-active:hover:not(:disabled){position:relative;background:var(--accent);color:#fff;box-shadow:var(--shadow-1)}.topbar-rest{flex:1;min-width:0;display:flex;align-items:center;gap:8px;justify-content:flex-end}.menu{min-width:168px;max-width:320px;max-height:70vh;overflow:auto;padding:var(--space-2);background:var(--bg-2);border:1px solid var(--border-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow-popover);z-index:var(--z-menu);outline:none}.menu-item{display:flex;align-items:center;gap:var(--space-6);min-height:var(--control-h);padding:0 var(--space-4);border-radius:var(--radius-md);color:var(--text-primary);cursor:default;user-select:none}.menu-item.is-active{background:var(--accent);color:#fff}.menu-item.is-danger{color:var(--danger)}.menu-item.is-danger.is-active{background:var(--danger);color:#fff}.menu-item.is-disabled{color:var(--text-tertiary)}.menu-item.is-disabled.is-active{background:transparent;color:var(--text-tertiary)}.menu-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-shortcut{flex:none;color:var(--text-tertiary);font-size:var(--text-xs)}.menu-item.is-active .menu-shortcut{color:#ffffffb8}.menu-caret{flex:none;color:var(--text-tertiary)}.menu-item.is-active .menu-caret{color:inherit}.menu-separator{height:1px;margin:var(--space-1) var(--space-2);background:var(--divider)}.dialog-overlay{position:fixed;inset:0;z-index:var(--z-dialog);display:flex;align-items:center;justify-content:center;padding:var(--space-8);background:#000000a6}.dialog{width:320px;max-width:100%;max-height:100%;display:flex;flex-direction:column;gap:var(--space-5);padding:var(--space-6);background:var(--surface-panel);border:1px solid var(--border-strong);border-radius:var(--radius-xl);box-shadow:var(--shadow-2);outline:none}.dialog-title{font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--text-primary)}.dialog-body{display:flex;flex-direction:column;gap:var(--space-4);min-height:0;overflow:auto;color:var(--text-secondary)}.dialog-message{margin:0;white-space:normal}.dialog-field{display:flex;flex-direction:column;gap:var(--space-2)}.dialog-label{color:var(--text-secondary)}.dialog-error{color:var(--danger);font-size:var(--text-xs)}.dialog-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3)}:root{--font-ui: system-ui, "Segoe UI", sans-serif;--bg: #000000;--panel: #0c0c0e;--panel-raised: #141417;--control: #1b1b1f;--control-hover: #26262c;--input-bg: #1b1b1f;--border: #232328;--border-soft: #1a1a1e;--text: #f2f2f5;--text-dim: #8e8e97;--text-faint: #5d5d66;--accent: #0a84ff;--accent-hover: #3d9dff;--accent-soft: rgba(10, 132, 255, .16);--accent-quiet: rgba(10, 132, 255, .12);--accent-warm: #f5a524;--danger: #ff4d4f;--danger-text: #ff8a8c;--warn: #f5a524;--guide: #f5a524;--frame-border: rgba(255, 255, 255, .22);--marquee: var(--accent);--frustum: #eab308;--grid: #2a2a31;--axis-x: #ef4444;--axis-y: #22c55e;--axis-z: #3b82f6;--stage-divider: var(--border);--block-in: #38bdf8;--block-during: #a78bfa;--block-out: #f472b6;--scene-bar: #34d399;--playhead: var(--accent);--audio-clip: #2dd4bf;--audio-line: #fef08a;--marker: #f97316;--marker-pin: #ffffff}:root{--control-bg: var(--control);--control-bg-hover: var(--control-hover);--control-border: transparent;--control-border-hover: var(--border);--control-border-focus: var(--accent);--control-radius: 8px;--control-h: 30px;--panel-bg: var(--panel);--divider: var(--border-soft);--focus-ring: 0 0 0 3px var(--accent-soft);--label-w: 76px;--slider-fill: rgba(255, 255, 255, .05);--slider-thumb: rgba(255, 255, 255, .14);--shadow-panel: 0 12px 40px rgba(0, 0, 0, .55), 0 2px 8px rgba(0, 0, 0, .4);--panel-radius: 12px;--rail-w: 232px;--inspector-w: 288px}.shell.is-rail-collapsed{--rail-w: 0px}.shell.is-inspector-collapsed{--inspector-w: 0px}.shell.is-rail-collapsed>.left-rail,.shell.is-inspector-collapsed>.inspector,.shell.is-inspector-collapsed>.agent-panel{display:none}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}.shell{position:relative;height:100%}.stage-frame{position:fixed;inset:0;width:100%;height:100%;border:0;display:block}.shell-header,.left-rail,.inspector,.agent-panel,.timeline-dock,.tool-dock,.view-mode-bar,.camera-view-bar,.tool-flyout,.overlay-message{background:var(--panel);border:1px solid var(--border);border-radius:var(--panel-radius);box-shadow:var(--shadow-panel)}.btn,.shell-header button,.dock-head button,.export-dialog button{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;padding:0 10px;font:inherit;font-weight:500;color:var(--text);background:var(--control);border:1px solid transparent;border-radius:8px;cursor:pointer;white-space:nowrap;transition:background .12s ease,color .12s ease,border-color .12s ease}.btn:hover:not(:disabled),.shell-header button:hover:not(:disabled),.dock-head button:hover:not(:disabled),.export-dialog button:hover:not(:disabled){background:var(--control-hover)}.btn:disabled,.shell-header button:disabled,.export-dialog button:disabled{opacity:.35;cursor:default}.btn.is-icon,.shell-header button.is-icon{width:28px;padding:0;font-size:13px}.btn.is-primary,.shell-header button.is-primary{background:var(--accent);border-color:transparent;color:#fff}.btn.is-primary:hover:not(:disabled){background:var(--accent-hover)}.btn.is-active,.btn[aria-pressed=true]{background:var(--accent-soft);color:#cfe4ff}.btn.is-danger{color:var(--danger-text)}.btn:focus-visible,.shell-header button:focus-visible{outline:none;box-shadow:var(--focus-ring)}.shell-header{position:fixed;top:12px;left:12px;right:12px;z-index:10;display:flex;align-items:center;gap:8px;height:48px;padding:0 10px}.shell-header-spacer{flex:1}.doc-switcher{display:flex;gap:6px;align-items:center}.doc-switcher-select,.doc-switcher-input,.select{appearance:none;-webkit-appearance:none;height:30px;min-width:156px;padding:0 28px 0 10px;font:inherit;font-weight:500;color:var(--text);background-color:var(--control);background-image:linear-gradient(45deg,transparent 50%,var(--text-dim) 50%),linear-gradient(135deg,var(--text-dim) 50%,transparent 50%);background-position:calc(100% - 15px) 13px,calc(100% - 10px) 13px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;border:1px solid transparent;border-radius:8px;cursor:pointer}.doc-switcher-input{background-image:none;padding-right:10px;cursor:text}.doc-switcher-select:hover,.doc-switcher-input:hover{background-color:var(--control-hover)}.doc-switcher-select:focus-visible,.doc-switcher-input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.doc-switcher-select option{background:var(--panel-raised);color:var(--text)}.history-controls,.zoom-controls,.status-badges,.transport{display:flex;align-items:center;gap:4px}.transport{gap:8px;margin-left:4px}.transport-scrub{appearance:none;-webkit-appearance:none;width:240px;height:18px;background:transparent;cursor:pointer}.transport-scrub::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:var(--control)}.transport-scrub::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:12px;height:12px;margin-top:-4px;border-radius:999px;background:#fff;border:0;box-shadow:0 1px 3px #0009}.transport-scrub::-moz-range-track{height:4px;border-radius:999px;background:var(--control)}.transport-scrub::-moz-range-thumb{width:12px;height:12px;border:0;border-radius:999px;background:#fff}.transport-scrub:focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:999px}.transport-play{min-width:40px}.transport-readout,.zoom-readout,.dock-readout{font-variant-numeric:tabular-nums;color:var(--text-dim)}.transport-readout{min-width:64px}.zoom-readout{min-width:48px;text-align:center}.badge{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:999px;border:1px solid var(--border);color:var(--text-dim);white-space:nowrap}.badge-quiet{color:var(--text-faint);border-color:transparent}.badge-warn{border-color:#f5a52466;color:var(--warn)}.badge-error{border-color:#ff4d4f73;color:var(--danger-text)}.overlay-strip{position:fixed;left:50%;transform:translate(-50%);bottom:76px;z-index:20;display:flex;flex-direction:column;gap:6px;pointer-events:none;max-width:560px}.overlay-message{pointer-events:auto;display:flex;gap:10px;align-items:flex-start;padding:10px 12px;line-height:1.5;border-color:#ff4d4f80}.overlay-message button{font:inherit;font-size:14px;color:var(--text-dim);background:transparent;border:0;cursor:pointer;padding:0}.overlay-message button:hover{color:var(--text)}.empty-state{position:fixed;inset:0;z-index:5;display:grid;place-content:center;text-align:center;gap:6px;pointer-events:none;color:var(--text-faint)}.empty-state h1{font-size:20px;font-weight:600;margin:0;color:var(--text-dim)}.empty-state p{margin:0}.left-rail{position:fixed;top:72px;left:12px;bottom:12px;width:var(--rail-w);z-index:10;overflow:auto;display:flex;flex-direction:column;padding:10px}.left-rail:empty{display:none}.left-rail>*{flex-shrink:0}.help-section{margin-top:auto;padding-top:12px}.help-summary{cursor:pointer;user-select:none;list-style:none;margin:0}.help-summary::-webkit-details-marker{display:none}.help-summary:before{content:"▸ "}.help-section[open]>.help-summary:before{content:"▾ "}.help-basics{list-style:disc;margin:6px 0;padding:0 4px 0 18px;color:var(--text-dim);font-size:11px;line-height:1.5}.help-basics li+li{margin-top:4px}.help-rows{list-style:none;margin:0 0 4px;padding:0 4px}.help-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:2px 0;color:var(--text-dim);font-size:11px}.help-row kbd,.help-note code{font:inherit;font-size:10px;color:var(--text);background:var(--control);border-radius:5px;padding:1px 5px;white-space:nowrap}.help-note{margin:0 0 6px;padding:0 4px;color:var(--text-faint);font-size:11px;line-height:1.45}.help-command{display:flex;align-items:flex-start;gap:6px;margin:0 0 6px;padding:0 4px}.help-command code{flex:1;font-size:10px;line-height:1.5;color:var(--text);background:var(--control);border-radius:5px;padding:4px 6px;word-break:break-all}.help-command button{font:inherit;font-size:10px;color:var(--text-dim);background:var(--control);border:0;border-radius:6px;padding:3px 7px;cursor:pointer;white-space:nowrap}.file-search{margin-bottom:4px}.file-search input{width:100%;height:30px;font:inherit;color:var(--text);background:var(--control);border:1px solid transparent;border-radius:8px;padding:0 10px}.file-search input::placeholder{color:var(--text-faint)}.file-search input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.file-section-label{margin:14px 0 6px;padding:0 4px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.07em;font-size:10px;font-weight:600}.scene-list,.layer-list,.layer-children{list-style:none;margin:0;padding:0}.layer-children{padding-left:12px}.scene-row,.layer-name{font:inherit;font-weight:500;color:var(--text);background:transparent;border:0;padding:0 8px;height:28px;width:100%;text-align:left;cursor:pointer;border-radius:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scene-row{display:flex;align-items:center;gap:6px;padding-left:6px}.row-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-row:hover,.layer-row:hover{background:var(--control)}.scene-row.is-current{background:var(--accent-soft);color:#cfe4ff}.layer-row{display:flex;align-items:center;gap:2px;padding-right:4px;border-radius:7px}.layer-row.is-selected{background:var(--accent-soft)}.layer-row.is-selected .layer-name{color:#cfe4ff}.layer-kind{flex:none;width:16px;display:inline-flex;align-items:center;justify-content:center;color:var(--accent);user-select:none}.layer-kind svg{width:14px;height:14px}.layer-toggle{display:inline-flex;align-items:center;justify-content:center;color:var(--text-dim);background:transparent;border:0;cursor:pointer;border-radius:5px;padding:2px;flex:none;width:14px}.layer-toggle svg{width:10px;height:10px;transition:transform 80ms ease}.layer-toggle.is-open svg{transform:rotate(90deg)}.layer-toggle:hover{color:var(--text);background:var(--control-hover)}.layer-toggle-spacer{flex:none;width:14px}.layer-flag{display:inline-flex;align-items:center;justify-content:center;color:var(--text-dim);background:transparent;border:0;cursor:pointer;opacity:0;border-radius:5px;padding:3px 4px;flex:none}.layer-flag svg{width:13px;height:13px}.layer-row:hover .layer-flag,.layer-flag[aria-pressed=true],.layer-flag:focus-visible{opacity:.75}.layer-flag:hover{opacity:1!important;background:var(--control-hover)}.layer-rename{flex:1;min-width:0;font:inherit;color:var(--text);background:var(--input-bg);border:1px solid var(--accent);border-radius:6px;padding:3px 6px}.layer-rename:focus{outline:none;box-shadow:var(--focus-ring)}.mcp-section{margin-top:4px}.panel-title{font-weight:600;color:var(--text);margin:0 0 6px;padding:0 4px}.panel-empty{color:var(--text-faint);padding:8px 4px;line-height:1.5}.rail-resize,.dock-resize,.split-resize{z-index:12;touch-action:none;background:transparent;transition:background .12s ease}.rail-resize:hover,.dock-resize:hover,.split-resize:hover{background:var(--accent-soft)}.split-resize{position:fixed;top:128px;bottom:calc(var(--dock-h) + 24px);left:var(--split-x);width:8px;margin-left:-4px;cursor:col-resize}.rail-resize{position:fixed;top:72px;bottom:12px;left:calc(var(--rail-w) + 12px);width:8px;margin-left:-4px;cursor:col-resize}.dock-resize{position:absolute;top:0;left:0;right:0;height:8px;cursor:row-resize;border-top-left-radius:var(--panel-radius);border-top-right-radius:var(--panel-radius)}.panel-toggles{display:flex;align-items:center;gap:2px;padding:0 4px}.btn-icon{min-width:28px;padding:0 6px;justify-content:center}.control-strip{position:fixed;top:72px;left:calc(var(--rail-w) + 24px);right:calc(var(--inspector-w) + 24px);z-index:12;display:flex;align-items:flex-start;flex-wrap:wrap;gap:8px;pointer-events:none}.control-strip>*{pointer-events:auto}.tool-dock{display:flex;align-items:center;gap:2px;padding:5px;border-radius:12px}.view-mode-bar{display:flex;align-items:center;gap:2px;padding:4px;border-radius:10px}.camera-view-bar{display:flex;align-items:center;gap:4px;padding:4px;border-radius:10px}.camera-view-bar .btn.is-armed{background:#eab3082e;border-color:#eab30880;color:var(--frustum)}.tool-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;font:inherit;font-size:14px;color:var(--text-dim);background:transparent;border:0;border-radius:8px;cursor:pointer;transition:background .12s ease,color .12s ease}.tool-button:hover{background:var(--control);color:var(--text)}.tool-button.is-armed{background:var(--accent-soft);color:#cfe4ff}.tool-button.tool-animate[aria-pressed=true]{background:#f5a52429;color:var(--accent-warm)}.tool-separator{width:1px;align-self:stretch;margin:4px;background:var(--border)}.tool-flyout-anchor{position:relative}.tool-flyout{position:absolute;bottom:calc(100% + 8px);left:0;display:flex;flex-direction:column;gap:2px;padding:5px;border-radius:10px;white-space:nowrap;z-index:1}.tool-flyout .tool-button{width:auto;min-width:32px;justify-content:flex-start;gap:8px;padding:0 10px}.tool-flyout .tool-button:disabled{opacity:.4;cursor:default}.timeline-dock{position:fixed;left:calc(var(--rail-w) + 24px);right:calc(var(--inspector-w) + 24px);bottom:12px;z-index:11;display:flex;flex-direction:column;max-height:var(--dock-h, 42vh);overflow:hidden}.timeline-dock.is-collapsed{max-height:none}.dock-head{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;border-bottom:1px solid var(--border-soft);flex:none}.dock-collapse{font:inherit;color:var(--text-dim);background:transparent;border:0;cursor:pointer;padding:2px 4px;border-radius:5px}.dock-collapse:hover{color:var(--text);background:var(--control)}.dock-title{color:var(--text-dim);font-weight:500}.dock-play,.dock-fit{font:inherit;color:var(--text-dim);background:transparent;border:0;cursor:pointer;padding:2px 6px;border-radius:5px}.dock-play:hover,.dock-fit:hover{color:var(--text);background:var(--control)}.dock-time{font:var(--mono);font-size:12px;color:var(--text);min-width:56px}.dock-span{font:var(--mono);font-size:11px;color:var(--text-faint)}.dock-mute{font:inherit;font-size:11px;color:var(--text-dim);background:transparent;border:0;cursor:pointer;padding:2px 4px;border-radius:5px;margin-left:auto}.dock-mute:hover,.dock-mute[aria-pressed=true]{color:var(--text);background:var(--control)}.dock-volume{width:72px;accent-color:var(--accent)}.dock-readout{color:var(--text-faint)}.dock-body{display:flex;flex-direction:column;min-height:0}.dock-body[hidden]{display:none}.dock-scroll{overflow:auto;min-height:0;padding-bottom:6px}.dock-ruler{position:relative;height:24px}.tl-ruler{position:relative;height:100%;overflow:hidden;cursor:ew-resize}.tl-tick{position:absolute;top:0;bottom:0;padding-left:6px;font:var(--mono);font-size:10px;line-height:20px;color:var(--text-faint);pointer-events:none;white-space:nowrap}.tl-tick:before{content:"";position:absolute;left:0;bottom:4px;width:1px;height:6px;background:var(--border)}.dock-playhead,.scene-cut{position:absolute;top:50%;width:9px;height:9px;padding:0;transform:translate(-50%,-50%) rotate(45deg);border:1px solid var(--text-faint);border-radius:1px;background:var(--panel);cursor:pointer;z-index:3}.scene-cut:hover{border-color:var(--text)}.scene-cut.is-blend{border-color:var(--accent);background:var(--accent)}.scene-playhead{position:absolute;top:0;bottom:0;width:2px;background:var(--playhead);pointer-events:none;z-index:4}.dock-ruler .dock-playhead:after{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:9px;height:9px;border-radius:3px;background:var(--playhead)}.dock-tracks{display:flex;flex-direction:column;position:relative}.dock-overlay{position:absolute;top:0;bottom:0;right:0;pointer-events:none;z-index:3}.dock-boundary{position:absolute;top:0;bottom:0;width:1px;background:var(--border)}.dock-snap-guide{position:absolute;top:0;bottom:0;width:1px;background:var(--accent);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 30%,transparent)}.dock-scene-group+.dock-scene-group{border-top:1px solid var(--border)}.scene-strip{display:flex;align-items:stretch;height:26px;border-bottom:1px solid var(--border);flex:none}.scene-strip-label{display:flex;align-items:center;gap:6px;padding-left:10px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.06em;font-size:10px;font-weight:600;flex:none}.scene-strip-add{font:inherit;font-size:13px;line-height:1;color:var(--text-faint);background:transparent;border:0;padding:2px 6px;border-radius:4px;cursor:pointer}.scene-strip-add:hover{color:var(--text);background:var(--control)}.scene-strip-lane{position:relative;flex:1}.scene-bar{position:absolute;top:4px;bottom:4px;display:flex;align-items:center;padding:0 8px;border-radius:6px;background:color-mix(in srgb,var(--scene-bar) 14%,transparent);border:1px solid color-mix(in srgb,var(--scene-bar) 55%,transparent);color:color-mix(in srgb,var(--scene-bar) 45%,#ffffff);cursor:pointer;overflow:hidden}.scene-bar:hover{background:color-mix(in srgb,var(--scene-bar) 22%,transparent)}.scene-bar.is-current{border-color:var(--scene-bar);background:color-mix(in srgb,var(--scene-bar) 26%,transparent);color:#fff}.scene-bar-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}.scene-trim{position:absolute;right:0;top:0;bottom:0;width:7px;cursor:col-resize}.lifespan-row{display:flex;align-items:stretch;height:28px;border-bottom:1px solid var(--border-soft);contain:layout paint}.lifespan-row.is-selected{background:var(--accent-quiet)}.lifespan-label-cell{display:flex;align-items:center;flex:none;overflow:hidden}.lifespan-disclosure{font:inherit;font-size:9px;line-height:1;color:var(--text-faint);background:transparent;border:0;padding:4px;cursor:pointer;flex:none}.lifespan-disclosure:hover{color:var(--text)}.lifespan-name{font:inherit;color:var(--text-dim);background:transparent;border:0;text-align:left;padding:0 6px;cursor:pointer;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lifespan-name:hover,.lifespan-row.is-selected .lifespan-name{color:var(--text)}.lifespan-lane{position:relative;flex:1}.lifespan-bar{position:absolute;top:5px;bottom:5px;display:flex;align-items:center;padding:0 10px;border-radius:7px;background:color-mix(in srgb,var(--text) 10%,transparent);border:1px solid color-mix(in srgb,var(--text) 22%,transparent);color:var(--text-dim);cursor:grab;overflow:hidden;white-space:nowrap}.lifespan-bar:hover{background:color-mix(in srgb,var(--text) 16%,transparent)}.lifespan-bar.is-selected{background:color-mix(in srgb,var(--accent) 22%,transparent);border-color:var(--accent);color:#fff}.lifespan-bar-name{overflow:hidden;text-overflow:ellipsis;pointer-events:none;font-weight:500}.lifespan-handle{position:absolute;top:0;bottom:0;width:8px;cursor:col-resize}.lifespan-handle-in{left:0}.lifespan-handle-out{right:0}.block-row{display:flex;align-items:stretch;height:26px;border-bottom:1px solid var(--border-soft);contain:layout paint}.block-row.is-selected{background:var(--accent-quiet)}.block-row-label-cell{display:flex;align-items:stretch;flex:none;overflow:hidden}.block-row-label{font:inherit;color:var(--text-dim);background:transparent;border:0;text-align:left;padding:0 10px;cursor:pointer;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.block-row-add{font:inherit;font-size:11px;color:var(--text-faint);background:transparent;border:0;padding:0 8px;cursor:pointer;flex:none;white-space:nowrap;opacity:0;transition:opacity .12s ease,color .12s ease}.block-row:hover .block-row-add,.block-row-add:focus-visible{opacity:1}.block-row-add:hover,.block-row-label:hover,.block-row.is-selected .block-row-label{color:var(--text)}.block-row-lane{position:relative;flex:1}.block-bar{position:absolute;top:4px;bottom:4px;display:flex;align-items:center;padding:0 8px;border-radius:6px;background:color-mix(in srgb,var(--block-during) 14%,transparent);border:1px solid color-mix(in srgb,var(--block-during) 60%,transparent);color:color-mix(in srgb,var(--block-during) 40%,#ffffff);cursor:grab;overflow:visible;white-space:nowrap;transition:background .12s ease}.block-bar:hover{background:color-mix(in srgb,var(--block-during) 24%,transparent)}.block-bar.slot-in{background:color-mix(in srgb,var(--block-in) 14%,transparent);border-color:color-mix(in srgb,var(--block-in) 60%,transparent);color:color-mix(in srgb,var(--block-in) 40%,#ffffff)}.block-bar.slot-in:hover{background:color-mix(in srgb,var(--block-in) 24%,transparent)}.block-bar.slot-out{background:color-mix(in srgb,var(--block-out) 14%,transparent);border-color:color-mix(in srgb,var(--block-out) 60%,transparent);color:color-mix(in srgb,var(--block-out) 40%,#ffffff)}.block-bar.slot-out:hover{background:color-mix(in srgb,var(--block-out) 24%,transparent)}.block-bar.is-selected{outline:1px solid #fff;outline-offset:1px;color:#fff}.block-bar.is-clipped{opacity:.5;border-style:dashed}.block-dead{position:absolute;top:0;bottom:0;pointer-events:none;background:repeating-linear-gradient(-45deg,color-mix(in srgb,var(--text) 16%,transparent) 0 3px,transparent 3px 6px)}.block-label{overflow:hidden;text-overflow:ellipsis;pointer-events:none;font-weight:500}.block-handle{position:absolute;top:0;bottom:0;width:7px;cursor:col-resize}.block-handle-in{left:-1px}.block-handle-out{right:-1px}.block-spring-tail{position:absolute;right:-18px;top:50%;width:18px;border-top:1px dashed currentColor;opacity:.6}.channel-row{display:flex;align-items:stretch;height:20px;border-bottom:1px solid var(--border-soft)}.channel-label-cell{display:flex;align-items:center;gap:6px;flex:none;overflow:hidden}.channel-name{color:var(--text-faint);font-size:10px;white-space:nowrap}.channel-value{margin-left:auto;padding-right:8px;color:var(--text-dim);font-size:10px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.channel-lane{position:relative;flex:1}.channel-span{position:absolute;top:0;bottom:0;--slot: var(--block-during);cursor:grab}.channel-span.slot-in{--slot: var(--block-in)}.channel-span.slot-out{--slot: var(--block-out)}.channel-connector{position:absolute;left:0;right:0;top:50%;border-top:1px solid color-mix(in srgb,var(--slot) 55%,transparent);pointer-events:none}.channel-span:hover .channel-connector{border-top-color:var(--slot)}.channel-key{position:absolute;top:50%;width:9px;height:9px;transform:translate(-50%,-50%) rotate(45deg);background:var(--slot);border:1px solid color-mix(in srgb,var(--slot) 55%,#000);border-radius:1px;cursor:col-resize}.channel-key:hover{background:color-mix(in srgb,var(--slot) 70%,#fff)}.channel-key-in{left:0}.channel-key-out{left:100%}.channel-span.is-selected .channel-key{background:#fff;border-color:#fff}.channel-span.is-selected .channel-connector{border-top-color:var(--slot)}.channel-span.is-clipped .channel-key{opacity:.55}.channel-dead{position:absolute;top:50%;border-top:1px dashed color-mix(in srgb,var(--text) 45%,transparent);pointer-events:none}.channel-spring-tail{position:absolute;left:100%;top:50%;width:14px;border-top:1px dashed color-mix(in srgb,var(--slot) 70%,transparent);pointer-events:none}.channel-empty-hint{display:flex;align-items:center;padding-left:10px;color:var(--text-faint);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.audio-lane{display:flex;align-items:stretch;position:relative;height:38px;border-top:1px solid var(--border);background:color-mix(in srgb,var(--audio-clip) 4%,transparent)}.audio-lane.is-over{background:color-mix(in srgb,var(--audio-clip) 14%,transparent);outline:1px dashed var(--audio-clip);outline-offset:-1px}.audio-label-cell{display:flex;align-items:center;gap:6px;flex:none;padding-left:8px;overflow:hidden}.audio-lane-name{color:var(--text-dim);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.audio-add{font:inherit;color:var(--text-dim);background:var(--control);border:0;border-radius:5px;padding:1px 7px;margin-right:6px;cursor:pointer;flex:none}.audio-add:hover:not(:disabled){color:var(--text);background:var(--control-hover)}.audio-track{position:relative;flex:1}.audio-empty{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-faint);pointer-events:none;white-space:nowrap}.audio-clip{position:absolute;top:5px;bottom:5px;border-radius:6px;background:color-mix(in srgb,var(--audio-clip) 16%,transparent);border:1px solid color-mix(in srgb,var(--audio-clip) 65%,transparent);color:color-mix(in srgb,var(--audio-clip) 35%,#ffffff);cursor:grab;overflow:hidden}.audio-clip:hover{background:color-mix(in srgb,var(--audio-clip) 26%,transparent)}.audio-clip.is-muted{opacity:.45;border-style:dashed}.audio-wave,.audio-fade-curve{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.audio-fade-curve polyline{stroke:var(--audio-line);stroke-width:1;vector-effect:non-scaling-stroke}.audio-clip-name{position:absolute;left:8px;top:1px;pointer-events:none;font-weight:500;max-width:calc(100% - 46px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audio-gain-band{position:absolute;left:0;right:0;height:9px;margin-bottom:-4px;cursor:ns-resize}.audio-gain-band:after{content:"";position:absolute;left:0;right:0;top:4px;height:1px;background:var(--audio-line);opacity:.8}.audio-handle{position:absolute;top:0;bottom:0;width:7px;cursor:col-resize}.audio-handle-in{left:-1px}.audio-handle-out{right:-1px}.audio-fade{position:absolute;top:-1px;width:11px;height:11px;margin-left:-5px;border-radius:50%;cursor:ew-resize;background:color-mix(in srgb,var(--audio-line) 70%,transparent)}.audio-clip-buttons{position:absolute;right:2px;top:1px;display:flex;gap:2px}.audio-clip-btn{font:inherit;font-size:10px;line-height:1;color:var(--text-dim);background:transparent;border:0;padding:2px 3px;border-radius:4px;cursor:pointer}.audio-clip-btn:hover{color:var(--text);background:var(--control)}.audio-error{position:absolute;left:8px;bottom:2px;margin:0;color:var(--danger-text);pointer-events:none}.marker-lane{display:flex;align-items:stretch;position:relative;height:20px;border-top:1px solid var(--border);background:color-mix(in srgb,var(--marker) 10%,transparent)}.marker-label-cell{display:flex;align-items:center;gap:6px;flex:none;padding-left:8px;overflow:hidden}.marker-lane-name{color:var(--text-dim);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.marker-add{font:inherit;line-height:1;color:var(--text-dim);background:var(--control);border:0;border-radius:5px;padding:1px 7px;margin-right:6px;cursor:pointer;flex:none}.marker-add:hover{color:var(--text);background:var(--control-hover)}.marker-track{position:relative;flex:1}.marker-empty{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-faint);pointer-events:none;white-space:nowrap}.marker-pin{position:absolute;top:0;bottom:0;width:0;display:flex;align-items:center;cursor:grab}.marker-diamond{width:8px;height:8px;margin-left:-4px;background:var(--marker-pin);border:1px solid color-mix(in srgb,var(--marker) 70%,#000000);transform:rotate(45deg);flex:none}.marker-pin.is-selected .marker-diamond{background:var(--marker);border-color:var(--marker-pin);box-shadow:0 0 0 2px color-mix(in srgb,var(--marker) 45%,transparent)}.marker-pin.is-at-playhead .marker-diamond{border-color:var(--playhead)}.marker-pin-label{display:none;position:absolute;left:8px;white-space:nowrap;padding:0 4px;border-radius:3px;color:var(--text);background:var(--panel);border:1px solid var(--border);pointer-events:none;z-index:1}.marker-pin:hover .marker-pin-label,.marker-pin.is-selected .marker-pin-label{display:block}.inspector,.shell>.agent-panel{position:fixed;top:72px;right:12px;bottom:12px;width:var(--inspector-w);z-index:10}.inspector{overflow:auto;padding:12px}.shell>.agent-panel{position:fixed;height:auto;overflow:hidden;padding:0}.shell>.agent-panel>.agent-title{padding:10px 12px;border-bottom:1px solid var(--border-soft);flex:none;flex-wrap:wrap;row-gap:6px}.shell>.agent-panel .agent-models{flex:1 1 100%;order:1}.shell>.agent-panel .agent-title-label{font-weight:600}.shell>.agent-panel .agent-composer{padding:10px 12px;border-top:1px solid var(--border-soft);flex:none}.inspector>.segmented{margin-bottom:4px}.inspector-empty{margin:16px 4px;color:var(--text-faint);line-height:1.6}.section-action{font:inherit;font-size:14px;line-height:1;color:var(--text-dim);background:transparent;border:0;cursor:pointer;padding:4px 6px;border-radius:6px}.section-action:hover{color:var(--text);background:var(--control)}.align-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:3px;margin:2px 0 8px}.align-button{display:inline-flex;align-items:center;justify-content:center;height:28px;padding:0;color:var(--text-dim);background:var(--control);border:1px solid transparent;border-radius:7px;cursor:pointer;transition:background .12s ease,color .12s ease}.align-button:hover:not(:disabled){background:var(--control-hover);color:var(--text)}.align-button:disabled{opacity:.3;cursor:default}.align-button:focus-visible{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.align-icon-rule{fill:currentColor}.align-icon-box{fill:currentColor;opacity:.45}.effect-row+.effect-row{margin-top:1px}.effect-params{display:flex;gap:6px;padding:2px 0 10px 10px;border-left:1px solid var(--border-soft);margin-left:2px}.effect-params>*{flex:1 1 0;min-width:0}.insp-dim{color:var(--text-faint)}.resolved-list{margin:0;padding:2px 0 6px;display:flex;flex-direction:column;gap:1px}.resolved-row{display:grid;grid-template-columns:58px 1fr auto;align-items:baseline;gap:8px;padding:2px}.resolved-label{font-size:11px;color:var(--text-faint)}.resolved-value{margin:0;font-size:11px;color:var(--text);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resolved-by{margin:0;font-size:10px;color:var(--accent);white-space:nowrap}.resolved-row[data-live=true] .resolved-label{color:var(--text-dim)}.animate-palette{display:flex;flex-wrap:wrap;gap:5px;padding:4px 0 8px}.animate-preset{font:inherit;font-size:11px;font-weight:500;color:var(--text-dim);padding:5px 10px;border-radius:999px;cursor:pointer;background:var(--control);border:1px solid transparent;transition:background .12s ease,color .12s ease}.animate-preset:hover{background:var(--control-hover);color:var(--text)}.animate-preset[aria-pressed=true]{background:var(--accent);border-color:transparent;color:#fff}.animate-blocks{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.animate-blocks li{display:flex;align-items:center;gap:2px}.animate-block-row{flex:1;min-width:0;display:flex;justify-content:space-between;align-items:center;gap:8px;font:inherit;font-size:11px;color:var(--text);text-align:left;padding:6px 8px;border-radius:7px;cursor:pointer;background:var(--control);border:1px solid transparent}.animate-block-row:hover{background:var(--control-hover)}.animate-block-row[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent)}.animate-block-name{font-weight:500;overflow:hidden;text-overflow:ellipsis}.animate-block-owner{font-style:normal;color:var(--text-faint)}.animate-block-span{color:var(--text-dim);font-variant-numeric:tabular-nums;flex:none}.animate-block-remove{font:inherit;font-size:12px;color:var(--text-faint);background:transparent;border:0;cursor:pointer;padding:4px 6px;border-radius:6px;flex:none}.animate-block-remove:hover{color:var(--danger-text);background:var(--control)}.insp-pad{display:block;margin:6px 0}.insp-pad-box{fill:none;stroke:var(--border)}.insp-pad-curve{fill:none;stroke:var(--accent);stroke-width:1.5}.insp-pad-arm{stroke:var(--border);stroke-width:1}.insp-pad-handle{fill:var(--accent);cursor:grab}.insp-preview{display:block;margin:4px 0}.insp-preview polyline{fill:none;stroke:var(--accent);stroke-width:1.5}.insp-preview polyline.is-spring{stroke:var(--accent-warm)}.insp-preview polyline.is-tail{stroke:var(--accent-warm);stroke-dasharray:3 3;opacity:.55}.animate-preview-edge{stroke:var(--border);stroke-width:1;stroke-dasharray:2 2}.animate-preview-note{display:block;font-size:10px;color:var(--text-faint);line-height:1.5}.component-row{display:flex;align-items:center;gap:4px;min-height:24px;padding-left:8px;border-radius:4px}.component-row.is-current{background:var(--control)}.component-count{margin-left:auto;color:var(--text-faint);font-variant-numeric:tabular-nums}.link-button{padding:0;border:0;background:transparent;color:var(--accent);cursor:pointer;text-align:left}.link-button:hover{text-decoration:underline}.isolation-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:2px 8px 6px;font-size:10px}.isolation-crumbs .crumb{padding:2px 4px;border:0;border-radius:4px;background:transparent;color:var(--text-dim);cursor:pointer}.isolation-crumbs .crumb+.crumb:before{content:"›";margin-right:4px;color:var(--text-faint)}.isolation-crumbs .crumb:hover{color:var(--text)}.isolation-crumbs .crumb.is-current{color:var(--text);cursor:default}.layer-row.is-drop-before{box-shadow:inset 0 2px 0 var(--accent)}.layer-row.is-drop-after{box-shadow:inset 0 -2px 0 var(--accent)}.layer-row.is-drop-into{box-shadow:inset 0 0 0 2px var(--accent)}.inspector-note{margin:0 0 2px;font-size:10px;color:var(--text-faint);line-height:1.5}.header-export.is-running{font-variant-numeric:tabular-nums}.dialog.shot-export-dialog{width:420px}.dialog.material-picker{width:520px;max-height:70vh}.material-search{width:100%;padding:6px 8px;background:var(--surface-sunken, #131316);border:1px solid var(--border-strong, #35353d);border-radius:var(--radius-md, 6px);color:var(--text-primary, #e7e7ea);font:inherit}.material-shelf{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}.material-shelf h3{margin:0;font-size:var(--text-xs, 11px);font-weight:var(--weight-semibold, 600);letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary, #9a9aa5)}.material-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}.material-card{position:relative;display:flex;flex-direction:column;gap:4px;padding:0;background:none;border:1px solid transparent;border-radius:var(--radius-md, 6px);cursor:pointer;text-align:left}.material-card:hover,.material-card:focus-visible{border-color:var(--accent, #3b82f6)}.material-thumb{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-sm, 4px);background:var(--surface-sunken, #131316)}.material-name{padding:0 2px 2px;font-size:var(--text-xs, 11px);color:var(--text-primary, #e7e7ea);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mesh-material-row{display:flex;align-items:center;gap:4px;min-width:0}.mesh-material-name{flex:1 1 auto;min-width:0;padding:4px 8px;background:var(--surface-sunken, #131316);border:1px solid var(--border-strong, #35353d);border-radius:var(--radius-md, 6px);color:var(--text-primary, #e7e7ea);font:inherit;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.mesh-material-clear{flex:0 0 auto;width:22px;padding:0;background:none;border:none;color:var(--text-secondary, #9a9aa5);cursor:pointer}.layer-tris{flex:0 0 auto;padding:0 4px;font-size:10px;font-variant-numeric:tabular-nums;color:var(--text-tertiary, #6b6b76)}.layer-tris.is-over-budget{color:var(--warn, #eab308)}.material-badge{position:absolute;top:4px;right:4px;padding:1px 5px;border-radius:999px;background:var(--warn, #eab308);color:#1c1c20;font-size:10px;font-weight:var(--weight-semibold, 600)}.export-dialog{display:flex;flex-direction:column;gap:10px;min-width:0}.export-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:30px}.export-row>span{color:var(--text-dim)}.export-note{margin:-2px 0 0;color:var(--text-faint);line-height:1.45}.export-estimate{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;margin:2px 0 0;padding:12px;border-radius:8px;background:var(--control)}.export-estimate dt{color:var(--text-faint)}.export-estimate dd{margin:0;min-width:0;text-align:right;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.export-progress{margin:0;color:var(--text-dim)}.export-progress.is-done{color:var(--text)}.export-progress code{word-break:break-all;color:var(--text-dim)}.export-error{margin:0;color:var(--danger-text)}.left-rail::-webkit-scrollbar,.inspector::-webkit-scrollbar,.agent-panel::-webkit-scrollbar,.dock-scroll::-webkit-scrollbar{width:10px;height:10px}.left-rail::-webkit-scrollbar-thumb,.inspector::-webkit-scrollbar-thumb,.agent-panel::-webkit-scrollbar-thumb,.dock-scroll::-webkit-scrollbar-thumb{background:#2a2a30;border:3px solid transparent;background-clip:content-box;border-radius:999px}.left-rail::-webkit-scrollbar-thumb:hover,.inspector::-webkit-scrollbar-thumb:hover,.agent-panel::-webkit-scrollbar-thumb:hover,.dock-scroll::-webkit-scrollbar-thumb:hover{background:#3a3a42;background-clip:content-box}.left-rail::-webkit-scrollbar-track,.inspector::-webkit-scrollbar-track,.agent-panel::-webkit-scrollbar-track,.dock-scroll::-webkit-scrollbar-track{background:transparent}