:root{--bg-0:#0b1220;--bg-1:#0f172a;--bg-2:#1e293b;--bg-3:#273449;--fg-0:#e2e8f0;--fg-1:#cbd5e1;--fg-2:#94a3b8;--fg-3:#64748b;--accent:#1e88e5;--accent-hover:#1976d2;--accent-soft:#1e88e52e;--ok:#43a047;--warn:#fb8c00;--danger:#e53935;--info:#00897b;--border:#1f2a3d;--border-strong:#2c3a52;--phy-position:#1e88e5;--phy-velocity:#43a047;--phy-acceleration:#fb8c00;--phy-force:#e53935;--phy-efield:#8e24aa;--phy-bfield:#00897b;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--font-mono:ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", Roboto, sans-serif;--toolbar-h:52px}@media (prefers-color-scheme:light){:root{--bg-0:#f8fafc;--bg-1:#fff;--bg-2:#f1f5f9;--bg-3:#e2e8f0;--fg-0:#0f172a;--fg-1:#1e293b;--fg-2:#475569;--fg-3:#64748b;--border:#e2e8f0;--border-strong:#cbd5e1;--accent-soft:#1e88e51f}}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font-sans);color:var(--fg-0);background:var(--bg-0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px}button{font-family:inherit;font-size:inherit;cursor:pointer;background:var(--bg-2);color:var(--fg-1);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:4px;padding:6px 10px;transition:background .15s,border-color .15s,color .15s;display:inline-flex}button:hover:not(:disabled){background:var(--bg-3);color:var(--fg-0)}button:disabled{opacity:.4;cursor:not-allowed}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.primary:hover:not(:disabled){background:var(--accent-hover)}button.danger{color:var(--danger);border-color:#e5393566}button.icon-btn{background:0 0;border:none;padding:4px}button.install{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}input[type=text],input[type=password],input[type=number],select,textarea{font-family:inherit;font-size:inherit;background:var(--bg-1);width:100%;color:var(--fg-0);border:1px solid var(--border);border-radius:var(--radius-sm);outline:none;padding:8px 10px;transition:border-color .15s}input:focus,select:focus,textarea:focus{border-color:var(--accent)}code{font-family:var(--font-mono);background:var(--bg-2);border-radius:3px;padding:1px 4px;font-size:12px}.app-shell{background:var(--bg-0);flex-direction:column;height:100vh;display:flex}.main-split{flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(340px,380px) minmax(0,1fr) minmax(320px,420px);min-height:0;transition:grid-template-columns .2s;display:grid;position:relative}.main-split.script-collapsed{grid-template-columns:minmax(340px,380px) minmax(0,1fr)}.toolbar{height:var(--toolbar-h);padding:0 var(--space-4);border-bottom:1px solid var(--border);background:linear-gradient(180deg, var(--bg-1), var(--bg-0));justify-content:space-between;align-items:center;display:flex}.toolbar-brand{align-items:baseline;gap:var(--space-2);display:flex}.toolbar-brand .logo{color:var(--accent);font-size:22px;font-weight:800}.toolbar-brand .title{letter-spacing:.5px;font-weight:700}.toolbar-brand .subtitle{color:var(--fg-3);font-size:11px}.toolbar-actions{gap:var(--space-2);align-items:center;display:flex}.domain-switch{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-sm);margin-right:var(--space-2);display:inline-flex;overflow:hidden}.domain-switch button{color:var(--fg-2);background:0 0;border:none;border-radius:0;padding:6px 10px}.domain-switch button.active{background:var(--accent-soft);color:var(--accent)}.domain-toast{background:var(--bg-2);color:var(--fg-1);border:1px solid var(--border);border-radius:var(--radius-md);z-index:50;pointer-events:none;white-space:nowrap;padding:8px 18px;font-size:13px;animation:.25s toast-in,.3s 2.2s forwards toast-out;position:absolute;top:58px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0000004d}@keyframes toast-in{0%{opacity:0;top:64px}to{opacity:1;top:58px}}@keyframes toast-out{0%{opacity:1}to{opacity:0}}.offline-banner{color:var(--warn);padding:6px var(--space-4);text-align:center;background:#fb8c0026;border-bottom:1px solid #fb8c004d;font-size:13px}.chat-panel{border-right:1px solid var(--border);background:var(--bg-1);flex-direction:column;min-height:0;display:flex}.chat-messages{padding:var(--space-4);flex-direction:column;flex:1;gap:0;display:flex;overflow-y:auto}.empty-hint{text-align:center;color:var(--fg-2);max-width:320px;margin:auto}.empty-hint h3{margin:0 0 var(--space-3) 0;color:var(--fg-0)}.empty-hint em{color:var(--accent);font-style:normal}.muted{color:var(--fg-3)}.small{font-size:12px}.bubble{gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-2);margin-bottom:var(--space-3);line-height:1.55;display:flex;position:relative}.bubble:last-child{margin-bottom:0}.bubble-icon{color:var(--fg-2);flex-shrink:0;margin-top:2px}.bubble-body{flex:1;min-width:0}.bubble-user{background:var(--accent-soft);border-color:#1e88e559}.bubble-user .bubble-icon{color:var(--accent)}.bubble-error{color:var(--danger);background:#e539351a;border-color:#e5393559}.bubble-ask{background:#fb8c0014;border-color:#fb8c0059}.bubble-ask .bubble-icon{color:var(--warn)}.ask-label{color:var(--warn);text-transform:uppercase;letter-spacing:.5px;font-size:12px;font-weight:600}.ask-hint{margin-top:var(--space-2);color:var(--fg-3);font-size:11px;font-style:italic;display:block}.bubble-user+.bubble-user,.bubble-assistant+.bubble-assistant{border-top-left-radius:6px;border-top-right-radius:6px}:is(.bubble-user:has(+.bubble-user),.bubble-assistant:has(+.bubble-assistant)){margin-bottom:var(--space-1);border-bottom-right-radius:6px;border-bottom-left-radius:6px}.bubble-assistant+.bubble-assistant:before,.bubble-user+.bubble-user:before{content:"";background:var(--border-strong);width:2px;height:6px;position:absolute;top:-5px;left:18px}.bubble-user+.bubble-user:before{background:#1e88e559}.bubble-spec-review{background:var(--bg-2);border:1px solid var(--accent);border-radius:var(--radius-md);padding:var(--space-3);gap:var(--space-2);display:flex}.bubble-spec-review .bubble-icon{color:var(--accent);flex-shrink:0;margin-top:2px}.spec-review-label{color:var(--accent);margin-bottom:var(--space-2);font-size:12px;font-weight:600}.spec-preview{background:var(--bg-1);border:1px solid var(--border);padding:var(--space-2);white-space:pre-wrap;word-break:break-word;max-height:240px;color:var(--fg-1);border-radius:6px;margin:0;font-size:13px;line-height:1.7;overflow-y:auto}.spec-edit-area{background:var(--bg-1);border:1px solid var(--accent);width:100%;min-height:120px;padding:var(--space-2);color:var(--fg-1);resize:vertical;border-radius:6px;font-family:inherit;font-size:13px;line-height:1.7}.spec-edit-area:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px #1e88e533}.spec-review-actions{gap:var(--space-2);margin-top:var(--space-2);display:flex}.spec-btn{cursor:pointer;border:1px solid #0000;border-radius:4px;align-items:center;gap:4px;padding:5px 12px;font-size:12px;font-weight:500;transition:all .15s;display:inline-flex}.spec-btn.edit{background:var(--bg-2);color:var(--fg-2);border-color:var(--border)}.spec-btn.edit:hover{background:var(--bg-3);color:var(--fg-1)}.spec-btn.retry{color:#fb8c00;background:#fb8c001a;border-color:#fb8c004d}.spec-btn.retry:hover{background:#fb8c0033}.spec-btn.confirm{background:var(--accent);color:#fff;border-color:var(--accent)}.spec-btn.confirm:hover{background:#1976d2}.markdown p{margin:0 0 8px}.markdown p:last-child{margin:0}.markdown .katex{font-size:1.05em}.cmd-toggle{margin-top:var(--space-2);color:var(--fg-2);background:0 0;border:none;padding:2px 0;font-size:12px}.cmd-toggle:hover{color:var(--fg-0);background:0 0}.self-check-details{margin-top:var(--space-1);padding:var(--space-1) var(--space-2);background:var(--bg-3);border-radius:var(--radius-sm);font-size:12px}.self-check-summary{cursor:pointer;color:var(--accent);font-weight:600}.self-check-body{margin-top:var(--space-1);color:var(--fg-2);line-height:1.4}.cmd-status.ok{color:var(--ok)}.cmd-status.fail{color:var(--warn)}.cmd-list{margin:var(--space-2) 0 0;flex-direction:column;gap:4px;padding:0;font-size:12px;list-style:none;display:flex}.cmd-list li{background:var(--bg-1);border-radius:var(--radius-sm);border:1px solid var(--border);align-items:flex-start;gap:4px;padding:4px 6px;display:flex}.cmd-list li.ok{border-color:#43a0474d}.cmd-list li.fail{border-color:#e5393566}.cmd-list code{overflow-wrap:anywhere;color:var(--fg-1);background:0 0;flex:1}.cmd-list .err{color:var(--danger);font-size:11px}.thinking{align-items:center;gap:var(--space-2);color:var(--fg-2);padding:var(--space-2);margin:var(--space-1) 0 0;font-size:13px;display:flex}.thinking-text{color:var(--accent);text-overflow:ellipsis;white-space:nowrap;max-width:480px;font-weight:500;animation:1.6s ease-in-out infinite thinking-pulse;overflow:hidden}@keyframes thinking-pulse{0%,to{opacity:1}50%{opacity:.65}}.thinking-cancel{background:var(--bg-2);color:var(--fg-2);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:4px;padding:2px 8px;font-size:11px;display:inline-flex}.thinking-cancel:hover{background:var(--bg-3);color:var(--fg-1)}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.chat-input-area{border-top:1px solid var(--border);padding:var(--space-3);gap:var(--space-2);background:var(--bg-1);display:flex}.chat-input{resize:none;font-family:var(--font-sans);flex:1}.send-btn{background:var(--accent);color:#fff;border-color:var(--accent);justify-content:center;align-self:stretch;width:44px}.send-btn:hover:not(:disabled){background:var(--accent-hover)}.ggb-panel{background:#fff;min-width:0;min-height:0;position:relative;overflow:hidden}.ggb-host{width:100%;height:100%}.script-panel{background:var(--bg-1);border-left:1px solid var(--border);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.script-panel.collapsed{z-index:20;pointer-events:none;background:0 0;border:none;width:auto;height:auto;position:absolute;top:10px;right:12px}.script-rail{pointer-events:auto;border:1px solid var(--border);background:var(--bg-2);color:var(--fg-1);cursor:pointer;border-radius:999px;flex-direction:row;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:500;transition:background .15s,border-color .15s;display:inline-flex;box-shadow:0 4px 12px #00000040}.script-rail:hover{background:var(--bg-3);border-color:var(--accent);color:var(--fg-0)}.script-rail .rail-text{white-space:nowrap}.script-rail .fail-count{color:var(--warn)}.script-header{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);background:var(--bg-2);flex-shrink:0;justify-content:space-between;align-items:center;height:42px;display:flex}.script-title{color:var(--fg-1);align-items:center;gap:6px;font-weight:500;display:inline-flex}.script-stat{color:var(--fg-3);margin-left:4px;font-size:12px}.script-stat .fail-count{color:var(--warn)}.script-actions{gap:4px;display:flex}.script-actions button{padding:4px 8px;font-size:12px}.script-body{padding:var(--space-2) 0;background:var(--bg-0);min-height:0;font-family:var(--font-mono);white-space:pre;flex:1;margin:0;font-size:12.5px;line-height:1.55;overflow:auto}.script-empty{padding:var(--space-4) var(--space-3);color:var(--fg-3);font-size:12px;font-style:italic}.script-line{gap:var(--space-2);padding:1px var(--space-3);display:flex}.script-line:hover{background:var(--bg-2)}.script-line .ln{color:var(--fg-3);-webkit-user-select:none;user-select:none;flex-shrink:0;padding-top:1px;font-size:11px}.script-line code{color:var(--fg-1);white-space:pre-wrap;word-break:break-word;background:0 0;flex:1;padding:0}.script-line.comment code{color:var(--fg-3);font-style:italic}.script-line.fail code{color:var(--danger)}.script-line.fail{background:#e5393512}.modal-overlay{z-index:100;padding:var(--space-4);background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-5);width:480px;max-width:100%;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #0006}.modal-wide{width:760px}.modal-header{margin-bottom:var(--space-4);justify-content:space-between;align-items:center;display:flex}.modal-header h2{margin:0;font-size:18px}.privacy-banner{gap:var(--space-2);color:var(--warn);padding:var(--space-3);border-radius:var(--radius-sm);margin-bottom:var(--space-4);background:#fb8c001a;border:1px solid #fb8c004d;align-items:flex-start;font-size:13px;display:flex}.privacy-banner strong{color:var(--warn)}.form{gap:var(--space-4);flex-direction:column;display:flex}.form label{color:var(--fg-2);flex-direction:column;gap:4px;font-size:13px;display:flex}.form label.row{align-items:center;gap:var(--space-2);flex-direction:row}.form label.row span{min-width:90px}.form .hint{color:var(--fg-3);font-size:11px}.form a.hint{color:var(--accent);align-items:center;gap:2px;text-decoration:none;display:inline-flex}.test-result{border-radius:var(--radius-sm);padding:8px 10px;font-size:13px}.test-result.ok{color:var(--ok);background:#43a04726;border:1px solid #43a0474d}.test-result.fail{color:var(--danger);background:#e539351f;border:1px solid #e539354d}.actions{align-items:center;gap:var(--space-2);display:flex}.actions .spacer{flex:1}.template-grid{gap:var(--space-2);margin-top:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(160px,1fr));display:grid}.template-card{text-align:left;padding:var(--space-2) var(--space-3);background:var(--bg-2);border-radius:var(--radius-md);border:1px solid var(--border);flex-direction:column;align-items:flex-start;gap:2px;display:flex}.template-card:hover{border-color:var(--accent);background:var(--bg-3)}.template-icon{margin-bottom:2px;font-size:22px;line-height:1}.template-title{color:var(--fg-0);font-size:14px;font-weight:600}.template-subtitle{color:var(--fg-2);font-size:12px;line-height:1.4}.pwa-update{right:var(--space-4);bottom:var(--space-4);align-items:center;gap:var(--space-2);background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);z-index:90;display:flex;position:fixed;box-shadow:0 10px 30px #0006}@media (max-width:1280px){.main-split:not(.script-collapsed){grid-template-columns:minmax(320px,360px) minmax(0,1fr) minmax(280px,360px)}.main-split.script-collapsed{grid-template-columns:minmax(320px,360px) minmax(0,1fr)}}@media (max-width:800px){.main-split,.main-split.script-collapsed{grid-template-rows:minmax(35vh,45vh) 1fr;grid-template-columns:1fr}.chat-panel{border-right:none;border-bottom:1px solid var(--border)}.script-panel:not(.collapsed){display:none}}
