cozyclay 1.9.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +171 -0
- package/bin/agent/agent-routes.mjs +74 -70
- package/bin/agent/agent-runner.mjs +10 -3
- package/bin/agent/motion-runtime.mjs +32 -260
- package/bin/agent/providers.mjs +46 -3
- package/bin/agent/session-store.mjs +41 -5
- package/bin/agent/studio-prompt.mjs +1 -1
- package/bin/agent/studio-tools.mjs +48 -11
- package/bin/cozyclay.mjs +26 -8
- package/bin/live/cli.mjs +22 -3
- package/bin/mcp-runtime.mjs +35 -20
- package/bin/telemetry-state.mjs +5 -2
- package/bin/update-check.mjs +15 -0
- package/dist/app/index.html +6 -6
- package/dist/assets/analytics-MVZOEW8O.js +1 -0
- package/dist/assets/app-C1sdVbg4.css +1 -0
- package/dist/assets/app-CA55tcI3.js +4876 -0
- package/dist/assets/{demo-B-eg1CT8.js → demo-ByeYp-dY.js} +1 -1
- package/dist/assets/{first-shot-handoff-CGgnvNu8.js → first-shot-handoff-DgT28ZiV.js} +1 -1
- package/dist/assets/{landing-IbRp3FnQ.js → landing-BaXkpFip.js} +1 -1
- package/dist/assets/shot-prompt-CbqWcWYi.css +1 -0
- package/dist/assets/shot-prompt-Yrt99wZx.js +17 -0
- package/dist/assets/{ticket-BgIzOBOf.js → ticket-BcmsnHn5.js} +1 -1
- package/dist/assets/workflow-DRdwoDBT.css +1 -0
- package/dist/assets/workflow-dNPGY9xz.js +179 -0
- package/dist/cozyclay-package.json +1 -1
- package/dist/fonts/IBM-Plex-Sans-OFL.txt +92 -0
- package/dist/fonts/JetBrains-Mono-OFL.txt +93 -0
- package/dist/fonts/README.md +13 -9
- package/dist/fonts/ibm-plex-sans-400-latin.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-500-latin.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-600-latin.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-400-latin.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-500-latin.woff2 +0 -0
- package/dist/index.html +7 -7
- package/dist/privacy/index.html +13 -8
- package/dist/sitemap.xml +6 -6
- package/dist/workflow/index.html +5 -5
- package/mcp/LIVE-PROTOCOL.md +1 -1
- package/mcp/live-hub.mjs +35 -93
- package/mcp/mesh-file.mjs +48 -0
- package/mcp/server.mjs +6 -77
- package/mcp/tool-handlers.mjs +224 -377
- package/package.json +2 -1
- package/src/App.jsx +1273 -9075
- package/src/analytics.js +393 -9
- package/src/app-context.js +211 -0
- package/src/app-stage.jsx +25 -24
- package/src/ardy/auto-fix-panel.css +108 -0
- package/src/ardy/collision-blockers.js +9 -3
- package/src/ardy/fix-collisions.js +10 -66
- package/src/ardy/ground.js +4 -4
- package/src/ardy/ik-drag.js +101 -0
- package/src/ardy/ik-key-json.js +43 -0
- package/src/ardy/ik.js +122 -76
- package/src/ardy/physics-panel.css +2 -0
- package/src/ardy/physics-panel.jsx +17 -5
- package/src/ardy/platform-fit-panel.css +64 -0
- package/src/ardy/platform-fit-panel.jsx +40 -0
- package/src/ardy/platform-fit.js +326 -0
- package/src/ardy/playback.js +166 -20
- package/src/ardy/range-pin.js +299 -0
- package/src/ardy/timeline-coordinates.js +26 -0
- package/src/ardy/timeline.css +1199 -0
- package/src/ardy/timeline.jsx +149 -41
- package/src/ardy/waypoints.js +2 -2
- package/src/asset-pane.css +462 -0
- package/src/asset-pane.jsx +461 -232
- package/src/command-bus.js +349 -0
- package/src/commands/ai.js +31 -0
- package/src/commands/cast.js +140 -0
- package/src/commands/elements/character.js +13 -0
- package/src/commands/elements/motion.js +14 -0
- package/src/commands/elements/object.js +22 -0
- package/src/commands/elements/scene.js +16 -0
- package/src/commands/elements/shot.js +9 -0
- package/src/commands/elements/stage.js +11 -0
- package/src/commands/elements.js +155 -0
- package/src/commands/export.js +20 -0
- package/src/commands/index.js +40 -0
- package/src/commands/motion.js +231 -0
- package/src/commands/objects.js +174 -0
- package/src/commands/project.js +53 -0
- package/src/commands/scene.js +81 -0
- package/src/commands/shared.js +19 -0
- package/src/commands/shot.js +103 -0
- package/src/commands/stage.js +17 -0
- package/src/commands/view.js +42 -0
- package/src/document-store.js +144 -0
- package/src/domains/cast.js +1007 -0
- package/src/domains/motion.js +3219 -0
- package/src/domains/objects.js +932 -0
- package/src/domains/scenes.js +817 -0
- package/src/domains/shots.js +404 -0
- package/src/domains/stage.js +93 -0
- package/src/dualview.jsx +113 -57
- package/src/facing-marks.js +3 -0
- package/src/first-success-guide.jsx +14 -14
- package/src/grid-view.js +18 -5
- package/src/hierarchy-model.js +24 -16
- package/src/hierarchy-panel.css +386 -0
- package/src/hierarchy-panel.jsx +150 -21
- package/src/{fal-motion-client.js → i2v-motion-client.js} +13 -13
- package/src/i2v-motion-studio.jsx +180 -0
- package/src/ik-camera.js +3 -0
- package/src/main.jsx +6 -0
- package/src/motion/generation.js +105 -0
- package/src/motion-readiness-ui.jsx +4 -4
- package/src/motion-readiness.js +11 -0
- package/src/motion-trail.js +366 -9
- package/src/object-gizmo.jsx +7 -1
- package/src/otio.js +2 -1
- package/src/panels/CameraPanel.jsx +60 -0
- package/src/panels/CharacterTransformPanel.jsx +48 -0
- package/src/panels/EnvironmentPanel.jsx +40 -0
- package/src/panels/Foldout.jsx +32 -0
- package/src/panels/LightPanel.jsx +24 -0
- package/src/panels/ObjectTransformPanel.jsx +554 -0
- package/src/panels/PosePanel.jsx +97 -0
- package/src/panels/ProjectPanel.jsx +33 -0
- package/src/panels/PromptBlocksPanel.jsx +442 -0
- package/src/panels/PropsPanel.jsx +70 -0
- package/src/panels/ReferenceImageField.jsx +91 -0
- package/src/panels/RigControlPanel.jsx +78 -0
- package/src/panels/RigPanel.jsx +37 -0
- package/src/panels/SubjectBox.jsx +47 -0
- package/src/panels/SubjectsPanel.jsx +39 -0
- package/src/panels/VideoCapturePanel.jsx +180 -0
- package/src/panels/details.css +1171 -0
- package/src/panels/motion.css +197 -0
- package/src/panels/pose.css +39 -0
- package/src/planview.jsx +60 -31
- package/src/posestudio.jsx +59 -4
- package/src/project-browser.css +1073 -0
- package/src/project-browser.jsx +284 -123
- package/src/range-pin-object-transform.js +19 -0
- package/src/range-pin-panel.css +518 -0
- package/src/range-pin-panel.jsx +344 -0
- package/src/result-modal.jsx +5 -5
- package/src/room.jsx +79 -51
- package/src/scene-objects.js +37 -1
- package/src/scenes.js +5 -0
- package/src/semantic-edit.js +2 -0
- package/src/settings-menu.jsx +39 -105
- package/src/shell/BottomDock.jsx +450 -0
- package/src/shell/DetailsSlot.jsx +513 -0
- package/src/shell/LibrarySlot.jsx +86 -0
- package/src/shell/MenuBar.jsx +601 -0
- package/src/shell/OutlinerSlot.jsx +50 -0
- package/src/shell/PreferencesDialog.jsx +538 -0
- package/src/shell/PreferencesSlot.jsx +40 -0
- package/src/shell/StatusBar.jsx +125 -0
- package/src/shell/StudioShell.jsx +92 -0
- package/src/shell/TopBar.jsx +129 -0
- package/src/shell/ViewportToolbar.jsx +656 -0
- package/src/shell/agent-glass.css +296 -0
- package/src/shell/dock.css +93 -0
- package/src/shell/glass-regions.css +985 -0
- package/src/shell/glass.css +687 -0
- package/src/shell/log-store.js +52 -0
- package/src/shell/mode.css +9 -0
- package/src/shell/preferences.css +651 -0
- package/src/shell/shell.css +282 -0
- package/src/shell/studio-shell-context.js +19 -0
- package/src/shell/topbar.css +435 -0
- package/src/shell/viewport.css +451 -0
- package/src/store/authored-intent.js +22 -0
- package/src/store/runtime-adapters.js +92 -0
- package/src/store/scene-stage.js +21 -0
- package/src/store/use-document-store.js +14 -0
- package/src/studio-actions.js +210 -0
- package/src/studio-agent-commands.js +41 -271
- package/src/studio-agent-context.js +39 -10
- package/src/studio-agent-motion.js +122 -373
- package/src/studio-agent-protocol.js +67 -31
- package/src/studio-app-binding.js +379 -0
- package/src/studio-contact-sheet.js +73 -0
- package/src/studio-elements.js +58 -51
- package/src/styles/themes.css +200 -0
- package/src/styles/tokens.css +69 -0
- package/src/styles.css +460 -1742
- package/src/theme.js +44 -0
- package/src/timeline-extent.js +16 -0
- package/src/trail-key-conflicts.js +39 -0
- package/src/trail-pick.js +59 -0
- package/src/ui.jsx +8 -8
- package/src/use-case-question.jsx +66 -0
- package/src/workflow/AgentPanel.jsx +82 -69
- package/src/workflow/agent-client.js +12 -2
- package/src/workflow/agent-panel.css +34 -32
- package/src/workflow/cozy-scene-node.css +2 -0
- package/src/workflow/workflow.css +2 -0
- package/tools/ardy/__pycache__/cclay_gvhmr_worker.cpython-313.pyc +0 -0
- package/tools/ardy/bridge.mjs +164 -146
- package/tools/ardy/visual-qa.mjs +5 -5
- package/tools/bench/EXP3.md +61 -0
- package/tools/bench/cclay_bench_extract_incam.py +125 -0
- package/tools/bench/cclay_bench_extract_obs.py +204 -0
- package/tools/bench/cclay_bench_runner.py +42 -0
- package/tools/bench/cube-contact.mjs +162 -0
- package/tools/bench/exp3.mjs +152 -0
- package/tools/bench/extract-bench-lib.mjs +216 -0
- package/tools/bench/extract-bench.mjs +302 -0
- package/tools/bench/fal-generate.mjs +88 -0
- package/tools/bench/fit/README.md +189 -0
- package/tools/bench/fit/camera.mjs +59 -0
- package/tools/bench/fit/contact.mjs +419 -0
- package/tools/bench/fit/footlock.mjs +234 -0
- package/tools/bench/fit/motion.mjs +85 -0
- package/tools/bench/fit/pin.mjs +27 -0
- package/tools/bench/fit/remote.mjs +105 -0
- package/tools/bench/fit-bench.mjs +126 -0
- package/tools/bench/fit-sanity.mjs +45 -0
- package/tools/bench/metrics.mjs +313 -0
- package/tools/bench/obs/depth.mjs +258 -0
- package/tools/bench/obs/extrinsics.mjs +175 -0
- package/tools/bench/obs/fit_mannequin_betas.py +340 -0
- package/tools/bench/obs/ground.mjs +294 -0
- package/tools/bench/obs/heading.mjs +151 -0
- package/tools/bench/obs/ladder.mjs +555 -0
- package/tools/bench/obs/mannequin-betas.json +124 -0
- package/tools/bench/obs/remote.mjs +83 -0
- package/tools/bench/obs/rest_joints.py +52 -0
- package/tools/bench/obs/ybot-targets.mjs +49 -0
- package/tools/bench/obs-bench.mjs +520 -0
- package/tools/bench/score.mjs +343 -0
- package/tools/bench/summarize.mjs +86 -0
- package/tools/dev/pages/privacy.html +13 -8
- package/tools/gt-render/browser.mjs +159 -0
- package/tools/gt-render/camera-math.mjs +276 -0
- package/tools/gt-render/page.mjs +267 -0
- package/tools/gt-render/render.mjs +514 -0
- package/tools/gt-render/scene-box.mjs +31 -0
- package/tools/gt-render/take-transform.mjs +87 -0
- package/tools/morphgs/assets/gen_truth.py +39 -0
- package/tools/morphgs/assets/mesh_ori_rig.txt +27 -0
- package/tools/morphgs/assets/playback-check.mjs +30 -0
- package/tools/morphgs/demo-gate.sh +26 -0
- package/tools/morphgs/fbx2morphgs.mjs +68 -0
- package/tools/morphgs/morphgs-to-cskel27.mjs +105 -0
- package/tools/morphgs/patches/preprocess_src-none-mode.patch +76 -0
- package/tools/morphgs/setup-on-cluster.sh +126 -0
- package/tools/qa/css-rule-usage.mjs +283 -0
- package/tools/qa/studio-control-count.mjs +70 -32
- package/tools/run-tests.mjs +134 -12
- package/tools/track/DESIGN.md +513 -0
- package/tools/track/backfill-provenance.mjs +116 -0
- package/tools/track/budget.mjs +8 -0
- package/tools/track/check-rig.mjs +209 -0
- package/tools/track/diagnostics.schema.json +60 -0
- package/tools/track/export-rig.mjs +256 -0
- package/tools/track/fallback.mjs +7 -0
- package/tools/track/fk-parity-fixture.mjs +161 -0
- package/tools/track/gate.mjs +349 -0
- package/tools/track/masks.mjs +318 -0
- package/tools/track/metrics.mjs +201 -0
- package/tools/track/publish-obs.mjs +108 -0
- package/tools/track/py/check_env.py +61 -0
- package/tools/track/py/eval_lr.py +229 -0
- package/tools/track/py/lr_viterbi.py +294 -0
- package/tools/track/py/masks.py +405 -0
- package/tools/track/py/objective.py +382 -0
- package/tools/track/py/rig.py +508 -0
- package/tools/track/py/scene.py +326 -0
- package/tools/track/py/test_joint_indices.py +123 -0
- package/tools/track/py/test_lr_viterbi.py +195 -0
- package/tools/track/py/test_masks.py +229 -0
- package/tools/track/py/test_rig.py +288 -0
- package/tools/track/py/test_scene.py +354 -0
- package/tools/track/py/test_track.py +328 -0
- package/tools/track/py/track.py +411 -0
- package/tools/track/remote.mjs +140 -0
- package/tools/track/rig-dump.mjs +227 -0
- package/tools/track/run-box-tests.mjs +14 -0
- package/tools/track/run-box.mjs +168 -0
- package/tools/track/setup-box.sh +59 -0
- package/tools/track/study-2d.mjs +728 -0
- package/dist/assets/analytics-B1hnH66c.js +0 -1
- package/dist/assets/app-BWusbqgO.js +0 -4861
- package/dist/assets/app-qKDo4PBX.css +0 -1
- package/dist/assets/shot-prompt-CHUtw6af.js +0 -17
- package/dist/assets/shot-prompt-C_g2BHVc.css +0 -1
- package/dist/assets/workflow-CVwzMhz2.js +0 -179
- package/dist/assets/workflow-DsudxKHF.css +0 -1
- package/src/fal-motion-studio.jsx +0 -180
- package/src/scene-history.js +0 -129
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as e,d as t}from"./analytics-MVZOEW8O.js";import"./config-Bx7pYsD9.js";t().then(()=>e(`hosted:composer_viewed`));var n=`아직 동작하지 않는 기능입니다. This feature is not available yet.`;Object.freeze({active_job_exists:`You already have a motion in progress. Follow that ticket before starting another.`,daily_cap:`You have reached today's motion limit. Please come back tomorrow.`,queue_full:`The queue is full right now. Please try again in a little while.`,turnstile_failed:`The security check could not be verified. Complete it again and try once more.`,signed_in_required:`Sign in before creating a motion.`,invalid_prompt:`Enter a motion prompt within the allowed character limit.`,submissions_disabled:`New submissions are paused for maintenance. Please try again later.`});function r(e){return typeof document>`u`?null:document.getElementById(e)}function i(e=``){let t=r(`session-notice`);t&&(t.textContent=e,t.hidden=!e)}function a(e,{activeToken:t=null}={}){let n=r(`form-message`);if(n&&(n.replaceChildren(),e&&(n.append(document.createTextNode(e)),t))){let e=document.createElement(`a`);e.href=`/d/?t=${encodeURIComponent(t)}`,e.textContent=` Open your current ticket.`,n.append(e)}}function o(){r(`job-form`)?.addEventListener(`submit`,e=>{e.preventDefault(),a(n)}),document.querySelectorAll(`[data-provider], [data-prompt]`).forEach(e=>{e.addEventListener(`click`,()=>a(n))})}function s(){let e=r(`session-status`);e&&(e.textContent=`Preview`),i(n),r(`turnstile-widget`)?.closest(`.turnstile-wrap`)?.classList.add(`is-hidden`),o()}function c(){s()}typeof document<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,c,{once:!0}):c());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as e,d as t,s as n,u as r}from"./analytics-MVZOEW8O.js";var i=new Set([`fly`,`walk`,`dolly`,`orbit`,`shot`,`rail`,`play`]),a=new Set([`query`,`settings`,`landing`]);function o({surface:o,startSource:s},{now:c=()=>performance.now(),initialize:l=t,capture:u=e,optedOut:d=r}={}){let f={surface:o===`playground`?`playground`:`studio`,tutorial_version:1},p=c(),m=new Map,h=new Set,g=`fly`,_=!1,v=!1,y=!1,b=[],x=()=>(d()&&(y=!0),y&&(b=[]),!y),S=(e,t={})=>{if(!x())return;let n={...f,...t};v?u(e,n):b.push([e,n])},C=(e,t)=>{!i.has(e)||m.has(e)||(m.set(e,t),S(`tutorial:step_entered`,{step_kind:e}))};return S(`tutorial:started`,{start_source:a.has(s)?s:`settings`}),C(`fly`,p),{ready:Promise.resolve(l()).then(()=>{if(v=!0,!x())return;let e=b;b=[];for(let[t,n]of e){if(!x())break;u(t,n)}}),observe(e,t){if(_)return;let r=c();g=i.has(t)?t:null;for(let t of e)!i.has(t)||h.has(t)||(C(t,r),h.add(t),S(`tutorial:step_completed`,{step_kind:t,elapsed_bucket:n(r-m.get(t))}));C(g,r),h.size===i.size&&(_=!0,S(`tutorial:completed`,{elapsed_bucket:n(r-p)}))},dismiss(){_||(_=!0,S(`tutorial:dismissed`,{step_kind:g}))}}}var s=`cozyclay.camera-tutorial-terminal.v1`;function c(e){try{return JSON.parse((e??globalThis.localStorage)?.getItem(s)||`null`)}catch{return null}}function l(e){let t=c(e);return t?.dismissed===!0||t?.completed===!0||t?.export_started===!0}function u(e,t){try{(t??globalThis.localStorage)?.setItem(s,JSON.stringify({[e]:!0}))}catch{}}function d(e){let t=l(e);return{canShow(e){return!t&&[`shot`,`rail`,`play`].every(t=>e.has(t))},complete(){u(`completed`,e)},dismiss(){t=!0,u(`dismissed`,e)},exportStarted(){t=!0,u(`export_started`,e)}}}export{o as i,d as n,u as r,l as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./analytics-
|
|
1
|
+
import"./analytics-MVZOEW8O.js";import{i as e,n as t}from"./first-shot-handoff-DgT28ZiV.js";(()=>{let n=document.getElementById(`playground`),r=document.getElementById(`try`),i=document.getElementById(`tutorial-steps`),a=document.getElementById(`tutorial-card`),o=document.getElementById(`tutorial-card-step`),s=document.getElementById(`tutorial-now`),c=document.getElementById(`tutorial-done`),l=document.getElementById(`playground-start`),u=document.getElementById(`playground-full`),d=document.getElementById(`playground-close`),f=document.getElementById(`playground-download`),p=document.getElementById(`playground-download-status`),m=document.getElementById(`playground-download-error`),h=document.getElementById(`playground-handoff-dismiss`),g=()=>matchMedia(`(min-width: 721px) and (hover: hover)`).matches,_=[`w`,`a`,`s`,`d`,`q`,`e`],v=new Set,y=[{kind:`fly`,label:`Look`,how:()=>`Right-drag to look around.`},{kind:`walk`,label:`Walk`,how:()=>`Keep the right button held and press each key once: `+_.map(e=>`<kbd data-done="${+!!v.has(e)}">${e.toUpperCase()}</kbd>`).join(` `)+`. W A S D walk, Q E crane.`},{kind:`dolly`,label:`Dolly`,how:()=>`Scroll to push in and pull out.`},{kind:`orbit`,label:`Orbit`,how:()=>`Hold <kbd>Alt</kbd> (<kbd>⌥ Option</kbd> on Mac) and left-drag to circle the character.`},{kind:`shot`,label:`Shot`,how:()=>`Click <b>+ Add shot</b> in the Shots lane below. That is your cut.`},{kind:`rail`,label:`Rail`,how:()=>`Click the shot block, then <b>Draw rail</b>, and drag a line across the map that pops up. That line is the dolly move.`},{kind:`play`,label:`Play`,how:()=>`You are looking through the shot camera now, full-screen. Press <b>▶</b> in the transport to ride your rail; <kbd>Esc</kbd> hands the view back to the free camera.`}],b=new Set,x=null,S=null,C=null,w=!1,T=!1,E=!1,D=()=>{},O=()=>{let e=n.dataset.state===`live`,t=e?y.find(e=>!b.has(e.kind)):null;e&&S?.observe(b,t?.kind??null),i.innerHTML=y.map((e,n)=>`<li data-done="${+!!b.has(e.kind)}" data-current="${+(t===e)}">${n+1} ${e.label}</li>`).join(``),a.hidden=!t||w,i.hidden=w,t&&(o.textContent=`${y.indexOf(t)+1} / ${y.length}`,s.innerHTML=t.how()),c.hidden=!(e&&!w&&(C?.canShow(b)||E)),e&&!t&&C?.complete(),x?.contentWindow?.postMessage({type:`cozyclay:playground-hint`,kind:w?null:t?.kind??null},`*`),e&&!t&&!O.reported&&(O.reported=!0,window.posthog?.capture&&window.posthog.capture(`landing:playground_tutorial_done`))};window.addEventListener(`message`,e=>{if(e.data?.type!==`cozyclay:playground-nav`||!x||e.source!==x.contentWindow||e.origin!==window.location.origin)return;let t=e.data.kind;if(!(!y.some(e=>e.kind===t)||b.has(t))){if(t===`walk`&&(typeof e.data.key==`string`&&v.add(e.data.key),!_.every(e=>v.has(e)))){O();return}b.add(t),O()}});let k=({dismiss:e=!0}={})=>{e&&S?.dismiss(),e&&x&&C?.dismiss(),C=null,T=!1,E=!1,f.disabled=!1,m.hidden=!0,p.hidden=!0,S=null,D(),x&&x.remove(),x=null,n.dataset.state=``,l.hidden=!1,r.classList.remove(`playground-live`),b.clear(),v.clear(),O()};l.addEventListener(`click`,()=>{if(!g())return;x&&k({dismiss:!1}),C=t(),w=!1,S=e({surface:`playground`,startSource:`landing`}),x=document.createElement(`iframe`),x.src=`/app/?embed=playground&scene=/scenes/city-block.cclayproject`,x.title=`CozyClay playground`,x.allow=`fullscreen; pointer-lock`,x.loading=`eager`,n.appendChild(x),n.dataset.state=`loading`,l.hidden=!0;let i=()=>{n.dataset.state===`loading`&&(D(),n.dataset.state=`live`,r.classList.add(`playground-live`),O())},a=e=>{e.data?.type===`cozyclay:playground-ready`&&e.source===x?.contentWindow&&e.origin===window.location.origin&&i()};window.addEventListener(`message`,a);let o=setTimeout(i,15e3);D=()=>{clearTimeout(o),window.removeEventListener(`message`,a)},window.posthog?.capture&&window.posthog.capture(`landing:playground_started`)}),u.addEventListener(`click`,()=>{x?.requestFullscreen&&x.requestFullscreen()}),h.addEventListener(`click`,()=>{C?.dismiss(),S?.dismiss(),w=!0,E=!1,m.hidden=!0,O()}),f.addEventListener(`click`,()=>{!x||T||(C?.exportStarted(),T=!0,E=!0,f.disabled=!0,m.hidden=!0,p.hidden=!1,p.textContent=`Preparing your edited project…`,x.contentWindow.postMessage({type:`cozyclay:playground-export`},`*`))}),window.addEventListener(`message`,e=>{if(e.data?.type!==`cozyclay:playground-export-result`||!T||!x||e.source!==x.contentWindow||e.origin!==window.location.origin)return;if(T=!1,f.disabled=!1,typeof e.data.serialized!=`string`||!e.data.serialized){p.hidden=!0,m.hidden=!1,m.textContent=`The project could not be prepared. Your edits are still here; try Download my project again.`;return}let t=new Blob([e.data.serialized],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`city-block.cclayproject`,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3),f.dataset.state=`copied`,E=!1,p.textContent=`Project download requested. Open city-block.cclayproject in your local Studio, then use Export.`,O(),setTimeout(()=>{f.dataset.state=``},1400),window.posthog?.capture&&window.posthog.capture(`landing:playground_scene_downloaded`)}),d.addEventListener(`click`,k),document.querySelectorAll(`button.copy[data-copy]`).forEach(e=>{e.addEventListener(`click`,async()=>{try{await navigator.clipboard.writeText(e.dataset.copy),e.dataset.state=`copied`,setTimeout(()=>{e.dataset.state=``},1400)}catch{}})}),O()})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer legacy{.workflow-app,.app{--agent-width-default:360px;--agent-width-min:300px;--agent-width-max:560px;--agent-rail-width:36px;--agent-drawer-top:58px;--agent-bg:#14161d;--agent-bg-raised:#1a1d26;--agent-bg-sunken:#11141b;--agent-bubble:#262c44;--agent-border:#292d38;--agent-border-strong:#353a4a;--agent-border-focus:#707dce;--agent-text:#edf0fb;--agent-text-muted:#9aa2b8;--agent-text-dim:#737b92;--agent-accent:#8994ff;--agent-accent-deep:#303b71;--agent-accent-edge:#4c5aab;--agent-accent-text:#e6e9ff;--agent-ok:#4dcda4;--agent-warn:#efb064;--agent-alert:#ef759d;--agent-radius-sm:5px;--agent-radius-md:6px;--agent-radius-lg:9px;--agent-radius-pill:999px;--agent-space-1:4px;--agent-space-2:6px;--agent-space-3:8px;--agent-space-4:11px;--agent-space-5:14px;--agent-space-6:18px;--agent-font-xs:9px;--agent-font-sm:10px;--agent-font-md:11px;--agent-font-lg:12px;--agent-font-xl:14px;--agent-dot:6px;--agent-thumb:56px;--agent-shadow:0 12px 34px #0006;--agent-motion:.14s ease;--agent-track:#242836;--agent-warn-edge:#6a5a34;--agent-warn-bg:#241f16;--agent-warn-text:#f0dcb4;--agent-alert-edge:#6d3a52;--agent-alert-bg:#2a1c26;--agent-alert-text:#f3c7d8;--agent-ok-deep:#16302a}.app{--agent-drawer-top:48px}.app .agent-panel.collapsed{display:none}.agent-panel,.agent-panel *,.agent-panel :before,.agent-panel :after{box-sizing:border-box}.agent-panel.embedded{border-left:0;flex:1;width:100%;min-height:0}.agent-panel[hidden]{display:none}.agent-panel{min-height:0;width:var(--agent-width-default);border-left:1px solid var(--agent-border);background:var(--agent-bg);color:var(--agent-text);font-size:var(--agent-font-lg);flex-direction:column;flex:none;display:flex;position:relative}.agent-panel.collapsed{width:var(--agent-rail-width);padding:var(--agent-space-4) 0;align-items:center;gap:var(--agent-space-4);background:var(--agent-bg-raised)}.agent-resize{cursor:col-resize;z-index:3;background:0 0;border:0;width:7px;height:100%;padding:0;position:absolute;top:0;left:-3px}.agent-resize:after{content:"";width:1px;height:100%;transition:background var(--agent-motion);background:0 0;position:absolute;top:0;left:3px}.agent-resize:hover:after,.agent-resize:focus-visible:after,.agent-panel.resizing .agent-resize:after{background:var(--agent-accent)}.agent-rail-toggle{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-md);color:#c8ccdb;cursor:pointer;width:26px;height:26px;font:inherit;background:#20232d;place-items:center;display:grid}.agent-rail-toggle:hover{background:#2b3040;border-color:#606b9a}.agent-rail-label{writing-mode:vertical-rl;color:var(--agent-text-dim);font-size:var(--agent-font-sm);letter-spacing:.14em;text-transform:uppercase}.agent-status-dot{width:var(--agent-dot);height:var(--agent-dot);border-radius:var(--agent-radius-pill);background:var(--agent-text-dim);flex:none}.agent-status-dot.ok{background:var(--agent-ok);box-shadow:0 0 8px var(--agent-ok)}.agent-status-dot.busy{background:var(--agent-accent);box-shadow:0 0 8px var(--agent-accent)}.agent-status-dot.warn{background:var(--agent-warn);box-shadow:0 0 8px var(--agent-warn)}.agent-status-dot.alert{background:var(--agent-alert);box-shadow:0 0 8px var(--agent-alert)}.agent-header{align-items:center;gap:var(--agent-space-2);height:58px;padding:0 var(--agent-space-4);border-bottom:1px solid var(--agent-border);background:var(--agent-chrome,#171921);flex:none;display:flex}.agent-title{font-size:var(--agent-font-xl);color:var(--agent-text-strong,#f5f7ff);margin:0;font-weight:700}.agent-header-spacer{flex:1}.agent-icon-button,.agent-ghost-button{align-items:center;gap:var(--agent-space-1);border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-md);background:var(--agent-panel,#20232d);color:var(--agent-text-soft,#c8ccdb);padding:var(--agent-space-2) var(--agent-space-3);font:inherit;font-size:var(--agent-font-md);cursor:pointer;display:flex}.agent-icon-button{padding:var(--agent-space-2)}.agent-icon-button:hover,.agent-ghost-button:hover{border-color:var(--agent-border-strong,#606b9a);background:var(--agent-hover,#2b3040);color:var(--agent-text-strong,#f5f7ff)}.agent-ghost-button[disabled],.agent-icon-button[disabled]{opacity:.45;cursor:not-allowed}.agent-overflow{position:relative}.agent-menu{top:calc(100% + var(--agent-space-2));z-index:6;min-width:148px;padding:var(--agent-space-1);border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-md);background:var(--agent-bg-raised);box-shadow:var(--agent-shadow);flex-direction:column;display:flex;position:absolute;right:0}.agent-menu button{border-radius:var(--agent-radius-sm);color:var(--agent-text-soft,#c8ccdb);padding:var(--agent-space-2) var(--agent-space-3);font:inherit;font-size:var(--agent-font-md);text-align:left;cursor:pointer;background:0 0;border:0}.agent-menu button:hover{background:var(--agent-hover,#2b3040);color:var(--agent-text-strong,#f5f7ff)}.agent-account{align-items:center;gap:var(--agent-space-2);padding:var(--agent-space-3) var(--agent-space-4);border-bottom:1px solid var(--agent-border);background:var(--agent-bg-sunken);color:var(--agent-text-muted);font-size:var(--agent-font-md);flex:none;display:flex}.agent-account-email{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.agent-plan-badge{padding:2px var(--agent-space-2);border:1px solid var(--agent-accent-edge);border-radius:var(--agent-radius-pill);color:var(--agent-text-strong,#cfd5ff);font-size:var(--agent-font-xs);letter-spacing:.06em;text-transform:uppercase;flex:none}.agent-account-reset{color:var(--agent-text-dim);font-size:var(--agent-font-sm);flex:none;margin-left:auto}.agent-keys{gap:var(--agent-space-3);max-height:46%;padding:var(--agent-space-4);border-bottom:1px solid var(--agent-border);background:var(--agent-bg-sunken);flex-direction:column;flex:none;display:flex;overflow-y:auto}.agent-keys-head{align-items:center;gap:var(--agent-space-2);display:flex}.agent-keys-title{color:var(--agent-text);font-size:var(--agent-font-lg);flex:1;margin:0;font-weight:600}.agent-keys-hint,.agent-keys-note{color:var(--agent-text-dim);font-size:var(--agent-font-sm);margin:0}.agent-keys-note.alert{color:var(--agent-alert)}.agent-key-row{gap:var(--agent-space-2);padding:var(--agent-space-3);border:1px solid var(--agent-border);border-radius:var(--agent-radius-md);background:var(--agent-bg-raised);flex-direction:column;display:flex}.agent-key-head{align-items:center;gap:var(--agent-space-2);display:flex}.agent-key-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--agent-text);font-size:var(--agent-font-md);flex:1;overflow:hidden}.agent-key-source{color:var(--agent-text-dim);font-size:var(--agent-font-xs);letter-spacing:.04em;flex:none}.agent-key-controls{align-items:center;gap:var(--agent-space-2);flex-wrap:wrap;display:flex}.agent-key-input{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-sm);background:var(--agent-bg-sunken);min-width:0;color:var(--agent-text);padding:var(--agent-space-2) var(--agent-space-3);font:inherit;font-size:var(--agent-font-md);outline:0;flex:120px}.agent-key-input:focus{border-color:var(--agent-border-focus)}.agent-key-input[disabled]{opacity:.55}.agent-key-save{border:1px solid var(--agent-accent-edge);border-radius:var(--agent-radius-md);background:var(--agent-accent-deep);color:var(--agent-accent-text);padding:var(--agent-space-2) var(--agent-space-4);font:inherit;font-size:var(--agent-font-md);cursor:pointer;flex:none}.agent-key-save[disabled],.agent-key-remove[disabled]{opacity:.45;cursor:default}.agent-key-error{color:var(--agent-alert);font-size:var(--agent-font-sm);margin:0}.agent-transcript{gap:var(--agent-space-4);min-height:0;padding:var(--agent-space-5) var(--agent-space-4);flex-direction:column;flex:1;display:flex;overflow-y:auto}.agent-row{gap:var(--agent-space-2);flex-direction:column;display:flex}.agent-row.user{align-items:flex-end}.agent-bubble{max-width:86%;padding:var(--agent-space-3) var(--agent-space-4);border:1px solid var(--agent-border-strong,#343b58);border-radius:var(--agent-radius-lg);background:var(--agent-bubble);color:var(--agent-text);font-size:var(--agent-font-lg);white-space:pre-wrap;word-break:break-word;line-height:1.5}.agent-assistant-text{color:var(--agent-text-soft,#dfe3f2);font-size:var(--agent-font-lg);white-space:pre-wrap;word-break:break-word;line-height:1.6}.agent-caret{width:6px;color:var(--agent-accent);margin-left:2px;animation:1s steps(2,start) infinite agent-blink;display:inline-block}@keyframes agent-blink{50%{opacity:0}}.agent-card{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-lg);background:var(--agent-panel,#20232d);overflow:hidden}.agent-tool-card summary{align-items:center;gap:var(--agent-space-3);padding:var(--agent-space-3) var(--agent-space-4);color:var(--agent-text-soft,#ccd1e2);font-size:var(--agent-font-md);cursor:pointer;list-style:none;display:flex}.agent-tool-card summary::-webkit-details-marker{display:none}.agent-tool-label{flex:1}.agent-tool-badge{color:#aeb7ff;border:1px solid #6975d8;border-radius:999px;padding:1px 5px;font-size:10px;line-height:1.2}.agent-tool-elapsed{color:var(--agent-text-dim);font:var(--agent-font-sm) ui-monospace, monospace}.agent-tool-detail{padding:var(--agent-space-3) var(--agent-space-4);border-top:1px solid var(--agent-border,#2c3140);background:var(--agent-bg-sunken);color:var(--agent-text-muted,#98a0b8);font:var(--agent-font-sm) ui-monospace, monospace;white-space:pre-wrap;word-break:break-all;margin:0}.agent-card.failed{border-color:#6d3a52}.agent-error{gap:var(--agent-space-2);padding:var(--agent-space-3) var(--agent-space-4);color:#f3c7d8;font-size:var(--agent-font-md);background:#2a1c26;border-top:1px solid #6d3a52;flex-direction:column;display:flex}.agent-error-actions{gap:var(--agent-space-2);display:flex}.agent-image-card figure{margin:0}.agent-image-card img{background:var(--agent-bg-sunken);cursor:zoom-in;width:100%;height:auto;display:block}.agent-image-actions{gap:var(--agent-space-2);padding:var(--agent-space-3);border-top:1px solid var(--agent-border,#2c3140);flex-wrap:wrap;display:flex}.agent-image-actions button,.agent-image-actions a{align-items:center;gap:var(--agent-space-1);border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-sm);background:var(--agent-hover,#292d39);color:var(--agent-text-soft,#ccd1e2);padding:var(--agent-space-2) var(--agent-space-3);font:inherit;font-size:var(--agent-font-sm);cursor:pointer;text-decoration:none;display:inline-flex}.agent-image-actions button.primary{border-color:var(--agent-accent-edge);background:var(--agent-accent-deep);color:var(--agent-text-strong,#e6e9ff)}.agent-image-actions button:hover,.agent-image-actions a:hover{border-color:var(--agent-border-strong,#606b9a)}.agent-placed{align-items:center;gap:var(--agent-space-2);padding:var(--agent-space-3);border-top:1px solid var(--agent-border,#2c3140);color:var(--agent-ok);font-size:var(--agent-font-md);display:flex}.agent-placed button{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-sm);background:var(--agent-hover,#292d39);color:var(--agent-text-soft,#ccd1e2);padding:var(--agent-space-1) var(--agent-space-3);font:inherit;font-size:var(--agent-font-sm);cursor:pointer;margin-left:auto}.agent-lightbox{z-index:40;cursor:zoom-out;background:#06070bd9;border:0;place-items:center;padding:5vh 5vw;display:grid;position:fixed;inset:0}.agent-lightbox img{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-lg);max-width:100%;max-height:90vh;box-shadow:var(--agent-shadow)}.agent-job-card,.agent-receipt-card,.agent-failure-card{gap:var(--agent-space-2);padding:var(--agent-space-3) var(--agent-space-4);font-size:var(--agent-font-md);flex-direction:column;display:flex}.agent-job-head,.agent-receipt-head,.agent-failure-head{align-items:center;gap:var(--agent-space-2);color:var(--agent-text-soft,#ccd1e2);display:flex}.agent-job-label{font-weight:600}.agent-job-badge{padding:1px var(--agent-space-2);border:1px solid var(--agent-warn-edge);border-radius:var(--agent-radius-pill);background:var(--agent-warn-bg);color:var(--agent-warn);font-size:var(--agent-font-xs);letter-spacing:.06em;text-transform:uppercase;flex:none}.agent-job-progress{color:var(--agent-text-dim);font:var(--agent-font-sm) ui-monospace, monospace;flex:none;margin-left:auto}.agent-job-phase,.agent-job-outcome,.agent-failure-message,.agent-failure-recovery{color:var(--agent-text-muted);word-break:break-word;margin:0;line-height:1.5}.agent-job-bar{height:var(--agent-space-1);border-radius:var(--agent-radius-pill);background:var(--agent-track);overflow:hidden}.agent-job-bar-fill{border-radius:inherit;background:var(--agent-accent);transform-origin:0;width:100%;height:100%;transition:transform var(--agent-motion);display:block}.agent-job-limits,.agent-receipt-notes{padding-left:var(--agent-space-5);color:var(--agent-text-dim);font-size:var(--agent-font-sm);margin:0;line-height:1.5}.agent-job-actions{align-items:center;gap:var(--agent-space-2);flex-wrap:wrap;display:flex}.agent-job-actions:empty{display:none}.agent-job-accept{border-color:var(--agent-warn-edge);background:var(--agent-warn-bg);color:var(--agent-warn-text)}.agent-job-accept:hover{border-color:var(--agent-warn);color:var(--agent-warn-text);background:#33291a}.agent-job-note{align-items:center;gap:var(--agent-space-1);color:var(--agent-text-dim);font-size:var(--agent-font-sm);display:inline-flex}.agent-job-note.alert{color:var(--agent-alert)}.agent-job-card[data-job-state=installed]{background:var(--agent-ok-deep);border-color:#2f5a4b}.agent-job-card[data-job-state=review_required]{border-color:var(--agent-warn-edge);background:var(--agent-warn-bg)}.agent-job-card[data-job-state=failed],.agent-job-card[data-job-state=stale_target],.agent-job-card[data-job-state=stale_environment]{border-color:#6d3a52}.agent-receipt-summary{word-break:break-word;line-height:1.5}.agent-failure-card{background:#2a1c26;border-color:#6d3a52}.agent-failure-code{color:var(--agent-alert);font:var(--agent-font-sm) ui-monospace, monospace;letter-spacing:.04em}.agent-image-error{padding:var(--agent-space-3);color:#f3c7d8;font-size:var(--agent-font-md);background:#2a1c26;border-top:1px solid #6d3a52;margin:0;line-height:1.45}.agent-state-card{gap:var(--agent-space-3);margin:var(--agent-space-6) var(--agent-space-4);padding:var(--agent-space-6) var(--agent-space-5);border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-lg);background:var(--agent-bg-raised);text-align:center;flex-direction:column;display:flex}.agent-state-card h3{font-size:var(--agent-font-xl);color:var(--agent-text-strong,#f5f7ff);margin:0;font-weight:700}.agent-state-card p{color:var(--agent-text-dim);font-size:var(--agent-font-md);margin:0;line-height:1.55}.agent-primary-button{border:1px solid var(--agent-accent-edge);border-radius:var(--agent-radius-md);background:var(--agent-accent-deep);color:var(--agent-text-strong,#e6e9ff);padding:var(--agent-space-3) var(--agent-space-5);font:inherit;font-size:var(--agent-font-lg);cursor:pointer;align-self:center}.agent-primary-button:hover{background:#37437f;border-color:#6b7ad4}.agent-primary-button[disabled]{opacity:.6;cursor:progress}.agent-spinner{border:2px solid #383e55;border-top-color:var(--agent-accent);border-radius:var(--agent-radius-pill);align-self:center;width:18px;height:18px;animation:.7s linear infinite agent-spin}@keyframes agent-spin{to{transform:rotate(360deg)}}.agent-paused{gap:var(--agent-space-3);padding:var(--agent-space-4);border-radius:var(--agent-radius-lg);color:#f0dcb4;font-size:var(--agent-font-md);background:#241f16;border:1px solid #6a5a34;flex-direction:column;display:flex}.agent-paused-head{align-items:center;gap:var(--agent-space-2);font-weight:600;display:flex}.agent-paused-countdown{font:var(--agent-font-md) ui-monospace, monospace;color:var(--agent-warn);margin-left:auto}.agent-paused-actions{gap:var(--agent-space-2);display:flex}.agent-paused-actions button{border-radius:var(--agent-radius-sm);color:#f3e3c1;padding:var(--agent-space-2) var(--agent-space-3);font:inherit;font-size:var(--agent-font-sm);cursor:pointer;background:#33291a;border:1px solid #6a5a34}.agent-paused-actions button:hover{border-color:var(--agent-warn)}.agent-suggestions{gap:var(--agent-space-2);margin-top:var(--agent-space-3);flex-direction:column;display:flex}.agent-chip{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-pill);background:var(--agent-panel,#20232d);color:#bcc2d4;padding:var(--agent-space-2) var(--agent-space-4);font:inherit;font-size:var(--agent-font-md);text-align:left;cursor:pointer}.agent-chip:hover{border-color:var(--agent-border-strong,#606b9a);background:var(--agent-hover,#2b3040);color:var(--agent-text-strong,#f5f7ff)}.agent-activity{align-items:center;gap:var(--agent-space-2);min-height:28px;padding:var(--agent-space-2) var(--agent-space-4);border-top:1px solid var(--agent-border);background:var(--agent-bg-raised);color:var(--agent-text-muted);font-size:var(--agent-font-md);flex:none;display:flex}.agent-activity+.agent-composer{border-top:0}.agent-activity-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.agent-activity-indicator{width:var(--agent-dot);height:var(--agent-dot);border-radius:var(--agent-radius-pill);background:var(--agent-text-dim);flex:none}.agent-activity-indicator.busy{background:var(--agent-accent);box-shadow:0 0 8px var(--agent-accent);animation:1.1s ease-in-out infinite agent-pulse}.agent-activity-indicator.ok{background:var(--agent-ok)}.agent-activity-indicator.warn{background:var(--agent-warn)}.agent-activity-indicator.alert{background:var(--agent-alert)}.agent-activity[data-agent-activity-kind=idle]{color:var(--agent-text-dim)}.agent-activity[data-agent-activity=done]{color:var(--agent-ok)}.agent-activity[data-agent-activity=failed],.agent-activity[data-agent-activity=no-model]{color:var(--agent-alert)}@keyframes agent-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.65)}}.agent-composer{gap:var(--agent-space-3);padding:var(--agent-space-4);border-top:1px solid var(--agent-border);background:var(--agent-bg-raised);flex-direction:column;flex:none;display:flex}.agent-composer textarea{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-md);background:var(--agent-bg-sunken);width:100%;height:68px;color:var(--agent-text);padding:var(--agent-space-3) var(--agent-space-4);font:inherit;font-size:var(--agent-font-lg);resize:none;outline:0;line-height:1.5}.agent-composer textarea:focus{border-color:var(--agent-border-focus)}.agent-composer textarea[disabled]{opacity:.55}.agent-attachments{gap:var(--agent-space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.agent-attachment{width:var(--agent-thumb);height:var(--agent-thumb);border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-md);background:var(--agent-bg-sunken);position:relative;overflow:hidden}.agent-attachment img{object-fit:cover;width:100%;height:100%;display:block}.agent-attachment-remove{top:var(--agent-space-1);right:var(--agent-space-1);width:var(--agent-space-5);height:var(--agent-space-5);border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-pill);background:var(--agent-bg);color:var(--agent-text-muted);cursor:pointer;transition:color var(--agent-motion), border-color var(--agent-motion);justify-content:center;align-items:center;padding:0;display:flex;position:absolute}.agent-attachment-remove:hover{border-color:var(--agent-alert);color:var(--agent-alert)}.agent-attachment-notice{color:var(--agent-warn);font-size:var(--agent-font-sm);margin:0}.agent-composer[data-agent-dropping=true]{box-shadow:inset 0 0 0 1px var(--agent-accent-edge);background:var(--agent-accent-deep)}.agent-bubble-attachments{justify-content:flex-end;gap:var(--agent-space-2);flex-wrap:wrap;max-width:86%;display:flex}.agent-bubble-attachments img{width:var(--agent-thumb);height:var(--agent-thumb);object-fit:cover;border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-md);background:var(--agent-bg-sunken);cursor:zoom-in}.agent-composer-controls{align-items:center;gap:var(--agent-space-2);display:flex}.agent-attach-chip{align-items:center;gap:var(--agent-space-2);border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-pill);background:var(--agent-panel,#20232d);color:#b6bcd0;padding:var(--agent-space-1) var(--agent-space-3);font:inherit;font-size:var(--agent-font-sm);cursor:pointer;display:flex}.agent-attach-chip[aria-pressed=true]{border-color:var(--agent-accent-edge);background:var(--agent-accent-deep);color:var(--agent-text-strong,#e6e9ff)}.agent-attach-thumb{background:linear-gradient(135deg,#2a2f52,#5b3550);border:1px solid #454d70;border-radius:3px;width:22px;height:14px}.agent-model-select{border:1px solid var(--agent-border-strong);border-radius:var(--agent-radius-sm);background:var(--agent-bg-sunken);color:#e5e8f5;min-width:0;padding:var(--agent-space-2) var(--agent-space-3);font:inherit;font-size:var(--agent-font-md);outline:0;flex:1}.agent-model-select:focus{border-color:var(--agent-border-focus)}.agent-model-select optgroup{background:var(--agent-bg-sunken);color:var(--agent-text-muted);font-style:normal;font-weight:600}.agent-model-select option:disabled{color:var(--agent-text-dim)}.agent-composer-picks{margin-bottom:var(--agent-space-2)}.agent-effort-select{flex:none;width:auto;max-width:42%}.agent-composer-spacer{flex:1}.agent-send{border:1px solid var(--agent-accent-edge);border-radius:var(--agent-radius-md);background:var(--agent-accent-deep);color:var(--agent-text-strong,#e6e9ff);padding:var(--agent-space-2) var(--agent-space-5);font:inherit;font-size:var(--agent-font-md);cursor:pointer;flex:none}.agent-send.stop{color:#f8d5e3;background:#4a2536;border-color:#7a3f58}.agent-send[disabled]{opacity:.45;cursor:not-allowed}.agent-toast{padding:var(--agent-space-3) var(--agent-space-4);border-bottom:1px solid var(--agent-border);background:var(--agent-bg-sunken);color:var(--agent-text-muted);font-size:var(--agent-font-md);flex:none;line-height:1.4}.agent-toast.alert{border-bottom-color:var(--agent-alert-edge);background:var(--agent-alert-bg);color:var(--agent-alert-text)}.agent-footer-hint{padding:0 var(--agent-space-4) var(--agent-space-4);background:var(--agent-bg-raised);color:var(--agent-text-dim);font-size:var(--agent-font-xs);border-top:0;flex:none;margin:0;line-height:1.4}@media (width<=1100px){.agent-panel:not(.collapsed):not(.embedded){top:var(--agent-drawer-top);z-index:20;box-shadow:var(--agent-shadow);position:fixed;bottom:0;right:0}.agent-panel.collapsed:not(.embedded){top:var(--agent-drawer-top);z-index:20;position:fixed;bottom:0;right:0}.agent-resize{display:none}}}
|