*{box-sizing:border-box}:root{--bg:#faf9f7;--surface:#fff;--border:#e2e0dc;--text:#26241f;--muted:#78736a;--accent:#3f5c4a;--accent-soft:#eef2ee;--danger:#a4352c;--warn:#9a6a12;--warn-soft:#fdf6e6;--radius:10px}html,body{background:var(--bg);color:var(--text);margin:0;padding:0;font-family:system-ui,Noto Sans TC,PingFang TC,sans-serif;font-size:15px;line-height:1.7}button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:7px 14px}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover:not(:disabled){filter:brightness(1.1)}button.subtle{color:var(--muted);background:0 0;border-color:#0000}input,select,textarea{font:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;width:100%;padding:7px 10px}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}label{color:var(--muted);margin-bottom:4px;font-size:13px;display:block}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.stack{flex-direction:column;gap:12px;display:flex}.row{align-items:center;gap:8px;display:flex}.spread{justify-content:space-between;align-items:center;gap:12px;display:flex}.muted{color:var(--muted);font-size:13px}.page{max-width:1600px;margin:0 auto;padding:28px 32px 64px}@media (max-width:900px){.page{padding:20px 16px 48px}}.result-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}@media (max-width:860px){.result-grid{grid-template-columns:1fr}}.notice{background:var(--warn-soft);color:var(--warn);border:1px solid #e8d9ac;border-radius:8px;padding:10px 12px;font-size:13px}.error{color:var(--danger);background:#fdf0ee;border:1px solid #e5c3bf;border-radius:8px;padding:10px 12px;font-size:13px}.badge{background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:2px 8px;font-size:12px;display:inline-block}.viewport-shell{background:var(--surface);border:1px solid var(--border);border-radius:8px;flex-direction:column;display:flex;overflow:hidden}.viewport-page{width:100%}.viewport-page .viewport-body{aspect-ratio:16/9}.space-layout{grid-template-columns:minmax(0,1fr) 340px;align-items:start;gap:16px;display:grid}@media (max-width:1080px){.space-layout{grid-template-columns:minmax(0,1fr)}.space-side{max-height:none;position:static}}.space-side{flex-direction:column;min-height:0;max-height:calc(100vh - 32px);display:flex;position:sticky;top:16px}.space-side-body{flex:1;min-height:0;padding-right:2px;overflow-y:auto}.space-side-tabs{flex:none;gap:4px;margin-bottom:10px;display:flex}.space-side-tabs button{flex:1;padding:5px 10px;font-size:13px}.frame-guide{pointer-events:none;place-items:center;display:grid;position:absolute;inset:0;overflow:hidden}.frame-guide-box{outline:1px dashed #ffffffe6;height:100%;box-shadow:0 0 0 9999px #14120f6b}.render-submit{background:linear-gradient(to bottom, #fff0, var(--surface) 22%);flex-direction:column;gap:6px;margin-top:2px;padding:10px 0 2px;display:flex;position:sticky;bottom:-16px}.frame-guide-label{color:#fff;background:#14120f8c;border-radius:999px;padding:1px 7px;font-size:11px;position:absolute;bottom:6px;left:8px}.viewport-fullscreen{z-index:50;border-radius:0;width:100vw;height:100vh;position:fixed;inset:0}.viewport-header{border-bottom:1px solid var(--border);cursor:grab;background:#f4f3f0;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:13px;display:flex}.tab-dot{background:var(--danger);vertical-align:middle;border-radius:50%;width:7px;height:7px;margin-left:6px;display:inline-block}.viewport-subbar{border-bottom:1px solid var(--border);background:#fbfaf8;flex-wrap:wrap;align-items:center;gap:10px;padding:5px 10px;font-size:13px;display:flex}.viewport-body{outline:none;flex:1;min-height:0;position:relative}.viewport-body:focus-visible{box-shadow:inset 0 0 0 2px var(--accent)}.canvas-shell{border:1px solid var(--border);background:#fbfaf8;border-radius:10px;width:100%;height:640px;overflow:hidden}.canvas-node{border:1px solid var(--border);background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 3px #0000000f}.canvas-node.is-selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.canvas-node-header{border-bottom:1px solid var(--border);cursor:grab;background:#f4f3f0;justify-content:space-between;align-items:center;gap:8px;padding:5px 8px;font-size:12px;font-weight:600;display:flex}.canvas-note{background:#fffdf5}.canvas-note .canvas-node-header{background:#fdf3d8}.plan-editor{background:#fff;position:relative;overflow:hidden}.plan-editor svg{touch-action:none;display:block}.plan-wall{stroke:#2f5fa8;stroke-width:3px;cursor:pointer}.plan-wall.selected{stroke:var(--accent);stroke-width:5px}.plan-wall.uncertain{stroke:#c8862b;stroke-dasharray:6 4}.plan-handle{fill:#fff;stroke:#2f5fa8;stroke-width:2px;cursor:grab}.plan-opening{stroke:#d05a2b;stroke-width:5px}.notice.working{align-items:center;gap:10px;display:flex}.spinner{border:2px solid #9a6a1240;border-top-color:var(--warn);border-radius:50%;flex:none;width:15px;height:15px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.managed-card{border-left:4px solid var(--border);cursor:pointer;transition:border-color .12s,box-shadow .12s,background .12s}.managed-card:hover{box-shadow:0 1px 6px #00000012}.managed-card.tone-project{border-left-color:var(--accent);background:#fcfdfc}.managed-card.tone-project:hover{background:var(--accent-soft)}.managed-card.tone-scene{background:#fdfbf8;border-left-color:#b08245}.managed-card.tone-scene:hover{background:#f9f2e8}.managed-card.is-busy{cursor:default}.managed-card.is-busy:hover{box-shadow:none;background:var(--surface)}.massing-label{color:#26241f;white-space:nowrap;-webkit-user-select:none;user-select:none;background:#ffffffd1;border:1px solid #0000001f;border-radius:999px;padding:1px 6px;font-size:12px;line-height:1.5;display:inline-block}
