:root{--font-ui:"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--bg:#f5f5f8;--surface:#fff;--surface-2:#f2f2f6;--surface-3:#e9e9f0;--border:#e4e4eb;--border-strong:#d0d0db;--text:#16161d;--text-muted:#62626f;--text-faint:#9b9baa;--accent:#6a4cff;--accent-2:#4f46e5;--accent-grad:linear-gradient(135deg, #7c5cff 0%, #4f46e5 100%);--accent-soft:#6a4cff17;--accent-soft-2:#6a4cff29;--accent-text:#5536f0;--on-accent:#fff;--ok:#15803d;--ok-soft:#16a34a1a;--warn:#b45309;--warn-soft:#f59e0b24;--danger:#dc2626;--danger-text:#b91c1c;--danger-soft:#dc262614;--code-bg:#fbfbfd;--code-active:#6a4cff0b;--code-sel:#6a4cff2e;--diff-add:#16a34a1a;--diff-add-strong:#16a34a33;--diff-del:#dc262614;--diff-del-strong:#dc26262e;--stage-dot:#16161d12;--shadow-sm:0 1px 2px #10101e0d;--shadow-md:0 1px 2px #10101e0a, 0 6px 18px -6px #10101e1f;--shadow-lg:0 24px 60px -12px #10101e47, 0 2px 6px #10101e0f;--ring:0 0 0 3px #6a4cff47;--radius-sm:7px;--radius:10px;--radius-lg:12px;--ease:cubic-bezier(.2, .7, .2, 1);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#0c0c11;--surface:#14141b;--surface-2:#1a1a23;--surface-3:#22222d;--border:#25252f;--border-strong:#34343f;--text:#ececf3;--text-muted:#9d9dae;--text-faint:#666675;--accent:#8a72ff;--accent-2:#6366f1;--accent-soft:#8a72ff1f;--accent-soft-2:#8a72ff38;--accent-text:#a999ff;--ok:#4ade80;--ok-soft:#4ade801a;--warn:#fbbf24;--warn-soft:#fbbf241f;--danger:#f87171;--danger-text:#fca5a5;--danger-soft:#f871711a;--code-bg:#101016;--code-active:#8a72ff12;--code-sel:#8a72ff47;--diff-add:#4ade8017;--diff-add-strong:#4ade8033;--diff-del:#f8717117;--diff-del-strong:#f8717133;--stage-dot:#ffffff0f;--shadow-sm:0 1px 2px #0006;--shadow-md:0 1px 2px #0006, 0 8px 24px -8px #0009;--shadow-lg:0 24px 70px -12px #000000bf, 0 0 0 1px #ffffff0a;--ring:0 0 0 3px #8a72ff61;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0c0c11;--surface:#14141b;--surface-2:#1a1a23;--surface-3:#22222d;--border:#25252f;--border-strong:#34343f;--text:#ececf3;--text-muted:#9d9dae;--text-faint:#666675;--accent:#8a72ff;--accent-2:#6366f1;--accent-soft:#8a72ff1f;--accent-soft-2:#8a72ff38;--accent-text:#a999ff;--ok:#4ade80;--ok-soft:#4ade801a;--warn:#fbbf24;--warn-soft:#fbbf241f;--danger:#f87171;--danger-text:#fca5a5;--danger-soft:#f871711a;--code-bg:#101016;--code-active:#8a72ff12;--code-sel:#8a72ff47;--diff-add:#4ade8017;--diff-add-strong:#4ade8033;--diff-del:#f8717117;--diff-del-strong:#f8717133;--stage-dot:#ffffff0f;--shadow-sm:0 1px 2px #0006;--shadow-md:0 1px 2px #0006, 0 8px 24px -8px #0009;--shadow-lg:0 24px 70px -12px #000000bf, 0 0 0 1px #ffffff0a;--ring:0 0 0 3px #8a72ff61;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);font-feature-settings:"cv11", "ss01";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:14px;line-height:1.5}h1,h2,h3{letter-spacing:-.015em;margin:0;font-weight:600}h1{letter-spacing:-.025em;font-size:24px}h2{font-size:17px}h3{font-size:15px}p{margin:0}a{color:var(--accent-text);text-decoration:none}a:hover{text-decoration:underline}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0;padding:0}button:disabled{cursor:not-allowed}code{font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--border);border-radius:5px;padding:.05em .35em;font-size:.86em}:focus-visible{box-shadow:var(--ring);border-radius:var(--radius-sm);outline:none}::selection{background:var(--accent-soft-2)}.mono{font-variant-ligatures:none;font-family:var(--font-mono);font-size:12.5px}.muted{color:var(--text-muted)}.small{font-size:12px}.grow{flex:auto}.row{align-items:center;display:flex}.gap{gap:8px}.pad{padding:10px 14px}.accent-icon{color:var(--accent)}.ok{color:var(--ok)}.bad{color:var(--danger)}.spin{flex:none;animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}.center-screen{align-content:center;place-items:center;gap:18px;min-height:100%;padding:24px;display:grid}.wordmark{align-items:center;gap:9px;display:inline-flex}.wordmark-text{letter-spacing:-.02em;font-size:16px;font-weight:600}.wordmark-text b{background:var(--accent-grad);color:#0000;-webkit-background-clip:text;background-clip:text;font-weight:700}.logo-mark{flex:none;display:block}.btn{border-radius:var(--radius);white-space:nowrap;height:34px;transition:background .15s var(--ease), border-color .15s var(--ease), color .15s var(--ease), box-shadow .15s var(--ease), transform .15s var(--ease);border:1px solid #0000;justify-content:center;align-items:center;gap:7px;padding:0 14px;font-size:13.5px;font-weight:500;display:inline-flex;text-decoration:none!important}.btn:disabled,.btn[aria-disabled=true]{opacity:.5}.btn:active:not(:disabled){transform:translateY(.5px)}.btn-sm{border-radius:var(--radius-sm);gap:5px;height:28px;padding:0 10px;font-size:12.5px}.btn-lg{height:40px;font-size:14px}.btn-primary{background:var(--accent-grad);color:var(--on-accent);box-shadow:inset 0 1px #ffffff2e,0 1px 2px #4f46e559,0 4px 12px -4px #6a4cff8c}.btn-primary:hover:not(:disabled){filter:brightness(1.06)}.btn-ghost{color:var(--text);border-color:var(--border);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--surface-2)}.btn-soft{background:var(--accent-soft);color:var(--accent-text)}.btn-soft:hover:not(:disabled){background:var(--accent-soft-2)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){filter:brightness(1.07)}.btn-danger-soft{background:var(--danger-soft);color:var(--danger-text);border-color:#0000}.btn-danger-soft:hover:not(:disabled){background:var(--diff-del-strong)}.btn-stop{background:var(--text);color:var(--surface);border-radius:999px;padding:0 12px}.icon-btn{border-radius:var(--radius-sm);width:32px;height:32px;color:var(--text-muted);transition:background .15s var(--ease), color .15s var(--ease);flex:none;place-items:center;display:inline-grid}.icon-btn:hover:not(:disabled):not(.disabled){background:var(--surface-2);color:var(--text)}.icon-btn:disabled,.icon-btn.disabled{opacity:.4;cursor:not-allowed}.icon-btn.active{background:var(--accent-soft);color:var(--accent-text)}.icon-btn-sm{width:26px;height:26px}.link-btn{color:var(--text-muted);border-radius:6px;align-items:center;gap:5px;padding:3px 6px;font-size:12.5px;font-weight:500;display:inline-flex;text-decoration:none!important}.link-btn:hover:not(:disabled){color:var(--accent-text);background:var(--accent-soft)}.link-btn:disabled{opacity:.45}.send-btn{background:var(--accent-grad);color:#fff;width:32px;height:32px;transition:opacity .15s, transform .15s var(--ease);border-radius:999px;place-items:center;display:grid;box-shadow:0 2px 8px -2px #6a4cff99}.send-btn:disabled{background:var(--surface-3);color:var(--text-faint);box-shadow:none}.send-btn:hover:not(:disabled){transform:translateY(-1px)}.seg{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);flex:none;gap:2px;padding:2px;display:inline-flex}.seg button{min-width:28px;height:26px;color:var(--text-muted);border-radius:5px;place-items:center;padding:0 6px;font-size:12.5px;font-weight:500;display:inline-grid}.seg button:hover:not(:disabled){color:var(--text)}.seg button.on{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.seg button:disabled{opacity:.45}.seg-text button{padding:0 10px}.seg-full{display:flex}.seg-full button{flex:1}.form{gap:16px;display:grid}.field{gap:6px;display:grid}.field-label{color:var(--text);font-size:12.5px;font-weight:600}.field-hint{color:var(--text-muted);min-height:18px;font-size:12px}.field-hint.error{color:var(--danger-text)}.field-hint.ok{color:var(--ok)}input:not([type=checkbox]):not([type=radio]),textarea{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);width:100%;padding:8px 11px;font-size:14px;line-height:1.45;transition:border-color .15s,box-shadow .15s}input::placeholder,textarea::placeholder{color:var(--text-faint)}input:focus,textarea:focus{border-color:var(--accent);box-shadow:var(--ring);outline:none}textarea{resize:vertical}.input-icon{align-items:center;display:flex;position:relative}.input-icon>svg{color:var(--text-faint);pointer-events:none;position:absolute;left:11px}.input-icon input{padding-left:33px!important}.slug-input{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);align-items:stretch;transition:border-color .15s,box-shadow .15s;display:flex;overflow:hidden}.slug-input:focus-within{border-color:var(--accent);box-shadow:var(--ring)}.slug-input.bad{border-color:var(--danger)}.slug-input.ok{border-color:color-mix(in srgb, var(--ok) 60%, var(--border-strong))}.slug-input input{font-family:var(--font-mono);min-width:0;font-size:13px;box-shadow:none!important;border:0!important;border-radius:0!important;padding-left:2px!important;padding-right:2px!important}.slug-prefix,.slug-suffix{font-family:var(--font-mono);color:var(--text-faint);background:var(--surface-2);white-space:nowrap;align-items:center;padding:0 9px;font-size:12.5px;display:flex}.slug-prefix{border-right:1px solid var(--border);margin-right:6px}.slug-suffix{border-left:1px solid var(--border);margin-left:6px}.form-error{color:var(--danger-text);background:var(--danger-soft);border-radius:var(--radius-sm);padding:8px 11px;font-size:13px}.inline-input{min-width:0;height:30px;font-weight:600;padding:4px 8px!important;font-size:14px!important}.chips{flex-wrap:wrap;gap:8px;display:flex}.chips-col{grid-template-columns:1fr 1fr;width:100%;display:grid}.chip{border:1px solid var(--border);background:var(--surface);height:30px;color:var(--text-muted);border-radius:999px;padding:0 12px;font-size:12.5px;font-weight:500;transition:border-color .15s,color .15s,background .15s}.chip:hover{border-color:var(--accent);color:var(--accent-text)}.chip.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-text)}.chip-lg{border-radius:var(--radius);text-align:left;height:auto;min-height:40px;color:var(--text);box-shadow:var(--shadow-sm);padding:8px 14px}.banner{border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;padding:10px 14px;font-size:13px;display:flex}.banner-error{background:var(--danger-soft);color:var(--danger-text)}.note{color:var(--text-muted);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);margin-top:14px;padding:10px 12px;font-size:12.5px}.note.warn{background:var(--warn-soft);color:var(--warn);border-color:#0000}.dialog-backdrop{z-index:50;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);animation:fade .15s var(--ease);background:#0a0a146b;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lg);max-height:calc(100vh - 48px);animation:pop .18s var(--ease);border-radius:14px;flex-direction:column;display:flex}.dialog-head{justify-content:space-between;align-items:flex-start;gap:12px;padding:18px 20px 4px;display:flex}.dialog-desc{color:var(--text-muted);margin-top:4px;font-size:13px}.dialog-body{padding:14px 20px 6px;overflow:auto}.dialog-foot{justify-content:flex-end;gap:8px;padding:14px 20px 18px;display:flex}@keyframes fade{0%{opacity:0}}@keyframes pop{0%{opacity:0;transform:translateY(6px)scale(.985)}}.danger-box{background:var(--danger-soft);border:1px solid color-mix(in srgb, var(--danger) 25%, transparent);border-radius:var(--radius);margin-bottom:14px;padding:12px 14px;font-size:13px}.danger-box ul{margin:6px 0;padding-left:18px}.danger-box p:last-child{color:var(--danger-text);font-weight:600}.menu-wrap{position:relative}.menu{z-index:30;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-width:170px;box-shadow:var(--shadow-md);animation:pop .12s var(--ease);padding:4px;position:absolute;top:calc(100% + 4px)}.menu-right{right:0}.menu-left{left:0}.menu-item{text-align:left;border-radius:6px;align-items:center;gap:8px;width:100%;padding:7px 9px;font-size:13px;display:flex}.menu-item:hover:not(:disabled){background:var(--surface-2)}.menu-item.danger{color:var(--danger-text)}.menu-item.danger:hover{background:var(--danger-soft)}.menu-hint{color:var(--text-faint);margin-left:auto;font-size:11.5px}.toasts{z-index:80;gap:8px;width:min(380px,100vw - 32px);display:grid;position:fixed;bottom:16px;right:16px}.toast{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-md);animation:pop .2s var(--ease);align-items:flex-start;gap:10px;padding:10px 8px 10px 12px;font-size:13px;display:flex}.toast-icon{margin-top:1px;display:flex}.toast-success .toast-icon{color:var(--ok)}.toast-error .toast-icon{color:var(--danger)}.toast-info .toast-icon{color:var(--accent)}.toast-text{flex:1;gap:1px;display:grid}.toast-text strong{font-weight:600}.toast-text span{color:var(--text-muted);font-size:12.5px}.empty{text-align:center;justify-items:center;gap:8px;max-width:380px;margin:auto;padding:40px 24px;display:grid}.empty p{color:var(--text-muted);font-size:13.5px}.empty .btn{margin-top:8px}.empty-icon{background:var(--accent-soft);width:44px;height:44px;color:var(--accent-text);border-radius:12px;place-items:center;margin-bottom:4px;display:grid}.login-screen{place-items:center;min-height:100%;padding:24px;display:grid;position:relative;overflow:hidden}.login-glow{pointer-events:none;background:radial-gradient(closest-side,#7c5cff38,#4f46e514 55%,#0000);width:720px;height:720px;position:absolute;top:-360px;left:50%;transform:translate(-50%)}.login-card{background:var(--surface);border:1px solid var(--border);width:min(380px,100%);box-shadow:var(--shadow-md);border-radius:16px;gap:18px;padding:28px;display:grid;position:relative}.login-card h1{margin-bottom:4px;font-size:20px}.login-card .muted{font-size:13px}.projects-page{min-height:100%}.app-header{border-bottom:1px solid var(--border);background:var(--surface);z-index:10;justify-content:space-between;align-items:center;height:56px;padding:0 24px;display:flex;position:sticky;top:0}.app-header-right{align-items:center;gap:6px;display:flex}.projects-main{max-width:1180px;margin:0 auto;padding:36px 24px 64px}.projects-hero{justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:24px;display:flex}.projects-hero p{margin-top:6px;font-size:13.5px}.projects-toolbar{align-items:center;gap:10px;margin-bottom:18px;display:flex}.projects-toolbar .search{flex:1;max-width:360px}.projects-toolbar input{height:34px}.project-grid.grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;display:grid}.project-grid.list{gap:8px;display:grid}.project-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);transition:border-color .15s, box-shadow .2s var(--ease), transform .2s var(--ease);flex-direction:column;display:flex;overflow:visible}.project-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md)}.project-card.skeleton{background:linear-gradient(90deg, var(--surface) 0%, var(--surface-2) 50%, var(--surface) 100%);background-size:200% 100%;height:220px;animation:1.4s linear infinite shimmer-x}.project-thumb{border-radius:var(--radius-lg) var(--radius-lg) 0 0;background:radial-gradient(120% 90% at 85% 0%, #7c5cff3d, transparent 60%), radial-gradient(90% 90% at 0% 100%, #4f46e524, transparent 60%), var(--surface-2);border-bottom:1px solid var(--border);place-items:center;height:116px;display:grid}.thumb-letter{width:46px;height:46px;color:var(--accent-text);background:var(--surface);box-shadow:var(--shadow-md);border-radius:12px;place-items:center;font-size:20px;font-weight:700;display:grid}.project-info{gap:6px;padding:12px 14px 14px;display:grid}.project-title-row{align-items:center;gap:6px;min-width:0;display:flex}.project-name{text-align:left;letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:14.5px;font-weight:600;overflow:hidden}.project-name:hover{color:var(--accent-text)}.project-meta{color:var(--text-muted);align-items:center;gap:7px;min-width:0;font-size:12px;display:flex}.project-meta .mono{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.dot-sep{background:var(--text-faint);border-radius:50%;flex:none;width:3px;height:3px}.project-foot{margin-top:4px}.ver-pill{height:20px;font-size:11.5px;font-weight:600;font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--border);color:var(--text-muted);border-radius:999px;flex:none;align-items:center;padding:0 7px;display:inline-flex}.badge{background:var(--surface-2);height:22px;color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;gap:5px;max-width:100%;padding:0 8px;font-size:11.5px;font-weight:500;display:inline-flex;overflow:hidden}.badge-live{background:var(--ok-soft);color:var(--ok)}.badge-live:hover{filter:brightness(.97);text-decoration:none}.project-grid.list .project-card{flex-direction:row;align-items:center}.project-grid.list .project-thumb{border-radius:var(--radius-lg) 0 0 var(--radius-lg);border-bottom:0;border-right:1px solid var(--border);flex:none;width:84px;height:64px}.project-grid.list .thumb-letter{border-radius:9px;width:34px;height:34px;font-size:15px}.project-grid.list .project-info{flex:1;grid-template-columns:minmax(180px,1.3fr) 1fr auto;align-items:center;gap:16px;padding:10px 14px;display:grid}.project-grid.list .project-title-row{order:0}.project-grid.list .project-foot{margin:0}.first-project{border:1px dashed var(--border-strong);text-align:center;background:var(--surface);border-radius:16px;justify-items:center;gap:12px;padding:48px 24px;display:grid}.first-project .chips{justify-content:center;margin:6px 0 4px}@keyframes shimmer-x{to{background-position:-200% 0}}.workspace{background:var(--bg);grid-template-rows:52px minmax(0,1fr);height:100vh;display:grid}.ws-bar{background:var(--surface);border-bottom:1px solid var(--border);z-index:5;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:12px;padding:0 10px;display:grid}.ws-bar-left,.ws-bar-right{align-items:center;gap:8px;min-width:0;display:flex}.ws-bar-right{justify-content:flex-end}.ws-name{letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;border-radius:6px;max-width:260px;padding:4px 6px;font-size:14px;font-weight:600;overflow:hidden}.ws-name:hover{background:var(--surface-2)}.ws-name-input{width:220px}.ws-tabs{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);gap:2px;padding:3px;display:inline-flex}.ws-tabs button{height:28px;color:var(--text-muted);border-radius:7px;align-items:center;gap:6px;padding:0 11px;font-size:13px;font-weight:500;transition:background .15s,color .15s;display:inline-flex}.ws-tabs button:hover{color:var(--text)}.ws-tabs button.on{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.ws-tabs button.on svg{color:var(--accent)}.model-select{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);height:30px;color:var(--text-muted);cursor:pointer;align-items:center;gap:6px;max-width:220px;padding:0 9px;font-size:12.5px;font-weight:500;transition:border-color .15s;display:inline-flex;position:relative}.model-select:hover{border-color:var(--border-strong);color:var(--text)}.model-select:focus-within{box-shadow:var(--ring);border-color:var(--accent)}.model-select-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.model-select select{opacity:0;cursor:pointer;width:100%;position:absolute;inset:0}.model-select.compact{background:0 0;border-color:#0000;height:28px}.model-select.compact:hover{background:var(--surface-2)}.ws-body{min-height:0;display:grid}.resizer{cursor:col-resize;touch-action:none;background:0 0;position:relative}.resizer:after{content:"";background:0 0;border-radius:2px;width:2px;transition:background .15s;position:absolute;top:0;bottom:0;left:2px}.resizer:hover:after,.resizer:focus-visible:after,body.resizing .resizer:after{background:var(--accent)}.resizer:focus-visible{box-shadow:none}body.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.resizing iframe{pointer-events:none}.ws-pane{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;min-width:0;min-height:0;margin:0 8px 8px 0;display:flex;overflow:hidden}.ws-pane>*{flex:1;min-height:0}.pane-loading{color:var(--text-muted);place-items:center;padding:48px;display:grid}.chat{flex-direction:column;min-width:0;min-height:0;display:flex}.chat-scroll{flex:1;padding:18px 14px 8px 18px;overflow-y:auto}.chat-list{gap:18px;display:grid}.chat-empty{text-align:center;align-content:center;justify-items:center;gap:12px;min-height:100%;padding:24px 6px;display:grid}.chat-empty h2{letter-spacing:-.02em;font-size:20px}.chat-empty p{max-width:340px;font-size:13.5px}.chat-empty .chips{margin-top:10px}.chat-empty-mark{background:var(--accent-soft);border-radius:18px;margin-bottom:4px;padding:10px}.msg-user{justify-self:end;justify-items:end;gap:5px;max-width:88%;display:grid}.bubble{background:var(--surface);border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;box-shadow:var(--shadow-sm);border-radius:14px 14px 4px;padding:9px 13px;font-size:13.5px}.bubble-sel{font-family:var(--font-mono);color:var(--accent-text);background:var(--accent-soft);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;gap:5px;max-width:100%;padding:2px 9px;font-size:11.5px;display:inline-flex;overflow:hidden}.msg-asst{gap:10px;min-width:0;font-size:13.5px;display:grid}.asst-head{align-items:center;gap:7px;font-size:12.5px;display:flex}.asst-head strong{font-weight:600}.asst-time{margin-left:auto;font-size:11.5px}.md{word-break:break-word;gap:8px;line-height:1.6;display:grid}.md ul,.md ol{gap:3px;margin:0;padding-left:20px;display:grid}.md pre{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);margin:0;padding:10px 12px;font-size:12px;overflow-x:auto}.md pre code{font-size:inherit;background:0 0;border:0;padding:0}.md-h{font-weight:600}.rail{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);gap:7px;padding:10px 12px;display:grid}.rail-steps{grid-template-columns:repeat(5,1fr);gap:4px;display:grid}.rail-step{background:var(--surface-3);border-radius:4px;height:4px;position:relative;overflow:hidden}.rail-step.past{background:var(--accent-grad)}.rail-step.now{background:var(--accent-soft-2)}.rail-step.now:after{content:"";background:var(--accent-grad);width:50%;animation:rail-run 1.3s var(--ease) infinite;border-radius:4px;position:absolute;inset:0}.rail.repairing .rail-step.now{background:var(--warn-soft)}.rail.repairing .rail-step.now:after{background:var(--warn)}.rail.failed .rail-step.now{background:var(--danger-soft)}.rail.failed .rail-step.now:after{display:none}.rail-label{color:var(--text);align-items:center;gap:7px;font-size:12.5px;font-weight:500;display:flex}.rail-label svg{color:var(--accent)}.rail.repairing .rail-label svg{color:var(--warn)}@keyframes rail-run{0%{transform:translate(-100%)}to{transform:translate(220%)}}.files-box,.logs-box{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}.files-head{width:100%;color:var(--text-muted);text-align:left;align-items:center;gap:7px;padding:7px 10px;font-size:12.5px;font-weight:500;display:flex}.files-head:hover{color:var(--text);background:var(--surface-2)}.files-list{border-top:1px solid var(--border);margin:0;padding:2px 0 6px;list-style:none}.files-list li{align-items:center;gap:8px;min-width:0;padding:3px 10px 3px 12px;font-size:12px;display:flex}.files-list li svg{flex:none}.files-list li.streaming .path{color:var(--accent-text)}.files-list .path{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.adds-dels{flex:none;gap:6px;margin-left:auto;display:inline-flex}.adds{color:var(--ok);font-family:var(--font-mono);margin-left:4px;font-size:11.5px}.dels{color:var(--danger);font-family:var(--font-mono);margin-left:4px;font-size:11.5px}.op-del{color:var(--danger)}.op-add{color:var(--ok)}.op-ok{color:var(--accent)}.issues{gap:4px;margin:0;padding:0;list-style:none;display:grid}.issues li{color:var(--warn);background:var(--warn-soft);border-radius:var(--radius-sm);align-items:flex-start;gap:7px;padding:6px 9px;font-size:12.5px;display:flex}.issues svg{flex:none;margin-top:2px}.log-pre{max-height:220px;font-family:var(--font-mono);color:var(--text-muted);background:var(--code-bg);border-top:1px solid var(--border);white-space:pre-wrap;word-break:break-all;margin:0;padding:8px 12px;font-size:11.5px;line-height:1.6;overflow:auto}.log-pre.tall{border:1px solid var(--border);border-radius:var(--radius-sm);max-height:260px}.asst-error{color:var(--danger-text);background:var(--danger-soft);border-radius:var(--radius-sm);align-items:center;gap:8px;padding:7px 8px 7px 10px;font-size:12.5px;display:flex}.asst-error span{flex:1}.asst-error svg{flex:none}.ver-foot{align-items:center;gap:6px;display:flex}.ver-chip{height:22px;font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--border);color:var(--text-muted);border-radius:6px;flex:none;align-items:center;padding:0 8px;font-size:11.5px;font-weight:600;display:inline-flex}.ver-chip.current{background:var(--accent-soft);color:var(--accent-text);border-color:#0000}.composer-wrap{padding:8px 14px 10px 18px}.selection-chip{background:var(--accent-soft);max-width:100%;color:var(--accent-text);border-radius:999px;align-items:center;gap:6px;margin-bottom:6px;padding:2px 3px 2px 10px;font-size:12px;font-weight:500;display:inline-flex}.selection-chip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.selection-chip code{color:inherit;background:0 0;border:0;padding:0}.composer{background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-md);border-radius:14px;padding:10px 8px 6px 12px;transition:border-color .15s,box-shadow .15s}.composer:focus-within{border-color:var(--accent);box-shadow:var(--ring), var(--shadow-md)}.composer textarea{resize:none;background:0 0;max-height:240px;font-size:14px;box-shadow:none!important;border:0!important;padding:2px 2px 6px!important}.composer-row{align-items:center;gap:4px;display:flex}.composer-hint{color:var(--text-faint);text-align:center;margin-top:6px;font-size:11.5px}.preview{flex-direction:column;min-height:0;display:flex}.pv-bar{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px 10px;display:flex}.pv-url{background:var(--surface-2);border:1px solid var(--border);min-width:0;height:30px;color:var(--text-muted);border-radius:999px;flex:1;align-items:center;gap:7px;padding:0 10px;display:flex}.pv-url .mono{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.pv-url svg{color:var(--ok);flex:none}.pv-ver{font-family:var(--font-mono);color:var(--accent-text);background:var(--accent-soft);border-radius:999px;flex:none;margin-left:auto;padding:1px 7px;font-size:11px;font-weight:600}.pv-notice{background:var(--accent-soft);color:var(--accent-text);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:7px 12px;font-size:12.5px;display:flex;flex:none!important}.pv-inspect-hint{color:#fff;background:var(--accent-grad);align-items:center;gap:7px;padding:6px 12px;font-size:12.5px;font-weight:500;display:flex}.pv-error{background:var(--danger-soft);color:var(--danger-text);border-bottom:1px solid color-mix(in srgb, var(--danger) 20%, transparent);align-items:center;gap:9px;padding:8px 8px 8px 12px;font-size:12.5px;display:flex}.pv-error>svg{flex:none}.pv-error-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pv-error code{color:inherit;background:0 0;border:0}.pv-stage{background-color:var(--surface-2);background-image:radial-gradient(var(--stage-dot) 1px, transparent 1px);background-size:14px 14px;flex:1;justify-content:center;min-height:0;display:flex;position:relative;overflow:auto}.pv-frame-wrap{min-height:100%;transition:width .25s var(--ease);flex:1;display:flex}.pv-frame-wrap iframe{opacity:0;width:100%;transition:opacity .25s var(--ease);background:#fff;border:0;flex:1}.pv-frame-wrap iframe.loaded{opacity:1}.pv-frame-wrap.tablet,.pv-frame-wrap.mobile{border:1px solid var(--border-strong);height:calc(100% - 36px);min-height:0;box-shadow:var(--shadow-lg);border-radius:16px;flex:none;max-width:calc(100% - 36px);margin:18px auto;overflow:hidden}.pv-frame-wrap.mobile{border:8px solid #1c1c24;border-radius:30px;height:min(844px,100% - 36px)}.pv-overlay{place-items:center;padding:24px;display:grid;position:absolute;inset:0}.pv-overlay.over-frame{background:color-mix(in srgb, var(--surface) 72%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.pv-placeholder{text-align:center;justify-items:center;gap:8px;max-width:340px;display:grid}.pv-placeholder p{font-size:13.5px}.shimmer{background:linear-gradient(100deg, transparent 20%, color-mix(in srgb, var(--accent) 10%, transparent) 40%, color-mix(in srgb, var(--accent-2) 14%, transparent) 50%, transparent 70%);pointer-events:none;background-size:220% 100%;animation:1.6s linear infinite shimmer-x;position:absolute;inset:0}.pv-deploy-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);align-items:center;gap:12px;max-width:min(460px,100%);padding:12px 16px;display:flex;position:relative}.pv-deploy-card>svg{color:var(--accent)}.pv-deploy-card div{min-width:0;display:grid}.pv-deploy-card .mono{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.pv-fail{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(560px,100%);box-shadow:var(--shadow-md);gap:14px;padding:18px;display:grid}.pv-fail-head{align-items:flex-start;gap:10px;display:flex}.pv-fail-head>svg{color:var(--danger);flex:none;margin-top:1px}.pv-fail-head p{margin-top:2px;font-size:13px}.code-pane,.data-pane{grid-template-columns:232px minmax(0,1fr);min-height:0;display:grid}.code-side,.data-side{border-right:1px solid var(--border);background:var(--surface);padding:8px 6px 16px;overflow-y:auto}.data-side{padding-top:10px}.side-head{letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);justify-content:space-between;align-items:center;padding:6px 6px 6px 8px;font-size:11px;font-weight:600;display:flex}.data-side .side-head{margin-top:8px}.side-msg{padding:4px 8px;font-size:12.5px}.side-msg.error{color:var(--danger-text)}.tree,.tree ul,.table-list{margin:0;padding:0;list-style:none}.tree-row{width:100%;height:28px;color:var(--text);text-align:left;border-radius:6px;align-items:center;gap:6px;min-width:0;padding:0 8px;font-size:13px;display:flex}.tree-row:hover{background:var(--surface-2)}.tree-row.on{background:var(--accent-soft);color:var(--accent-text)}.tree-row>svg:not(.fi){color:var(--text-faint);flex:none}.tree-row.deleted .tree-name{color:var(--text-faint);text-decoration:line-through}.tree-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tree-row .count{color:var(--text-faint);font-size:11.5px;font-family:var(--font-mono)}.mark{font-family:var(--font-mono);text-align:center;border-radius:4px;flex:none;width:16px;font-size:10.5px;font-weight:600}.mark-M{color:var(--warn)}.mark-A{color:var(--ok)}.mark-D{color:var(--danger)}.fi{color:var(--text-faint);flex:none}.fi-html{color:#e8743b}.fi-css{color:#3b82f6}.fi-js{color:#d4a72c}.fi-json{color:#a16207}.fi-sql{color:#0d9488}.fi-server{color:#8b5cf6}.fi-img{color:#db2777}.fi-folder{color:var(--text-muted)}.code-main{flex-direction:column;min-width:0;min-height:0;display:flex}.code-bar{border-bottom:1px solid var(--border);align-items:center;gap:6px;min-height:45px;padding:7px 10px;display:flex}.code-path{align-items:center;gap:7px;min-width:0;display:flex}.code-path .mono{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dirty-dot{background:var(--warn);border-radius:50%;flex:none;width:7px;height:7px}.compare-select{border-radius:var(--radius-sm);border:1px solid var(--border);height:28px;color:var(--text-muted);align-items:center;gap:6px;padding:0 8px;font-size:12.5px;display:inline-flex;position:relative}.compare-select select{color:var(--text-muted);cursor:pointer;background:0 0;border:0;outline:none;max-width:150px;font-size:12.5px}.compare-select select option{background:var(--surface);color:var(--text)}.compare-select:focus-within{box-shadow:var(--ring)}.cm-host{background:var(--code-bg);flex:1;min-height:0;overflow:hidden}.cm-host .cm-editor{height:100%}.code-compare{flex-direction:column;flex:1;min-height:0;display:flex}.compare-head{border-bottom:1px solid var(--border);background:var(--surface-2);align-items:center;gap:10px;padding:7px 10px;font-size:12.5px;display:flex}.diff-scroll{min-height:0;overflow:auto}.code-compare .diff-scroll{flex:1}.diff{border-collapse:collapse;width:100%;font-family:var(--font-mono);table-layout:fixed;font-size:12px;line-height:1.6}.diff td{vertical-align:top;white-space:pre-wrap;word-break:break-all;padding:0 10px}.diff .ln{text-align:right;width:46px;color:var(--text-faint);-webkit-user-select:none;user-select:none;padding:0 8px}.diff.unified .ln{width:44px}.diff.unified td.code{width:auto}.diff col.ln-col{width:46px}.diff .sign{width:14px;color:var(--text-faint);-webkit-user-select:none;user-select:none;display:inline-block}.diff tr.d-add td,.diff td.d-add{background:var(--diff-add)}.diff tr.d-add td.ln,.diff td.ln.d-add{background:var(--diff-add-strong);color:var(--ok)}.diff tr.d-del td,.diff td.d-del{background:var(--diff-del)}.diff tr.d-del td.ln,.diff td.ln.d-del{background:var(--diff-del-strong);color:var(--danger)}.diff tr.d-add .sign{color:var(--ok)}.diff tr.d-del .sign{color:var(--danger)}.diff td.d-empty{background:var(--surface-2)}.diff.split td.code{border-right:1px solid var(--border)}.diff-fold td{background:var(--surface-2);padding:0}.diff-fold button{text-align:left;width:100%;font-family:var(--font-ui);color:var(--accent-text);padding:3px 14px;font-size:12px}.diff-fold button:hover{background:var(--accent-soft)}.diff-same{color:var(--text-muted);padding:18px;font-size:13px}.versions-pane{grid-template-columns:300px minmax(0,1fr);min-height:0;display:grid}.ver-list{border-right:1px solid var(--border);align-content:start;gap:2px;margin:0;padding:8px;list-style:none;display:grid;overflow-y:auto}.ver-item{text-align:left;border-radius:var(--radius-sm);border:1px solid #0000;gap:4px;width:100%;padding:9px 10px;display:grid}.ver-item:hover{background:var(--surface-2)}.ver-item.on{background:var(--accent-soft);border-color:color-mix(in srgb, var(--accent) 22%, transparent)}.ver-item-top{align-items:center;gap:5px;display:flex}.ver-summary{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;line-height:1.4;display:-webkit-box;overflow:hidden}.ver-item-meta{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.src-badge{letter-spacing:.02em;background:var(--surface-3);height:18px;color:var(--text-muted);border-radius:5px;align-items:center;gap:3px;padding:0 6px;font-size:10.5px;font-weight:600;display:inline-flex}.src-ai{background:var(--accent-soft);color:var(--accent-text)}.src-manual{background:var(--warn-soft);color:var(--warn)}.src-restore{color:#0284c7;background:#0ea5e91f}.src-live{background:var(--ok-soft);color:var(--ok)}.src-preview{background:var(--surface-3);color:var(--text-muted)}.ver-detail{flex-direction:column;min-width:0;min-height:0;display:flex}.ver-detail-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:16px;padding:14px 16px;display:flex}.ver-detail-head p{color:var(--text-muted);margin-top:4px;font-size:13px}.ver-diffs{flex:1;align-content:start;gap:12px;padding:12px 16px 24px;display:grid;overflow:auto}.diff-file{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.diff-file-head{background:var(--surface-2);text-align:left;align-items:center;gap:8px;width:100%;padding:8px 12px;font-size:12.5px;display:flex;position:sticky;top:0}.diff-file-head:hover{background:var(--surface-3)}.diff-file .diff-scroll{border-top:1px solid var(--border);max-height:520px}.op-tag{border-radius:5px;padding:1px 6px;font-size:10.5px;font-weight:600}.op-create{background:var(--ok-soft);color:var(--ok)}.op-update{background:var(--warn-soft);color:var(--warn)}.op-delete{background:var(--danger-soft);color:var(--danger-text)}.data-main,.deploys-pane{flex-direction:column;min-width:0;min-height:0;display:flex}.data-bar{border-bottom:1px solid var(--border);flex:none;align-items:center;gap:10px;min-height:45px;padding:8px 12px;display:flex}.grid-scroll{flex:1;min-height:0;overflow:auto}table.grid{border-collapse:separate;border-spacing:0;min-width:100%;font-size:12.5px}table.grid th{z-index:1;background:var(--surface-2);text-align:left;border-bottom:1px solid var(--border);border-right:1px solid var(--border);white-space:nowrap;padding:7px 12px;font-weight:600;position:sticky;top:0}table.grid td{border-bottom:1px solid var(--border);border-right:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;max-width:340px;padding:6px 12px;overflow:hidden}table.grid tbody tr:hover td{background:var(--surface-2)}table.grid .num{text-align:right}.col-type{font-weight:400;font-family:var(--font-mono);color:var(--text-faint);margin-left:6px;font-size:10.5px}.pk{color:var(--warn);vertical-align:-1px;margin-right:4px}.c-null{color:var(--text-faint);font-style:italic}.c-num{font-family:var(--font-mono);text-align:right;font-size:12px}.c-json{font-family:var(--font-mono);color:var(--accent-text);font-size:11.5px}.deploy-list{align-content:start;gap:6px;margin:0;padding:8px;list-style:none;display:grid;overflow:auto}.deploy{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.deploy-row{text-align:left;align-items:center;gap:9px;width:100%;padding:9px 12px;font-size:13px;display:flex}.deploy-row:hover{background:var(--surface-2)}.deploy-row>svg:first-child{color:var(--text-faint)}.deploy-status{font-weight:500}.deploy-failed .deploy-status{color:var(--danger-text)}.deploy-time{text-align:right;min-width:112px}.target-badge{background:var(--surface-3);color:var(--text-muted);border-radius:5px;padding:2px 7px;font-size:11px;font-weight:600}.target-production{background:var(--accent-soft);color:var(--accent-text)}.deploy-url{align-items:center;gap:4px;padding:0 12px 9px 58px;font-size:11.5px;display:inline-flex}.publish-url{border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--border);align-items:center;gap:10px;padding:10px 10px 10px 14px;display:flex}.publish-url>svg{color:var(--accent);flex:none}.publish-url a{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:500;overflow:hidden}.publish-versions{grid-template-columns:1fr 1fr;gap:10px;margin:14px 0 0;display:grid}.publish-versions div{border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px}.publish-versions dt{letter-spacing:.05em;text-transform:uppercase;color:var(--text-faint);font-size:11px;font-weight:600}.publish-versions dd{margin:3px 0 0;font-size:14px;font-weight:600}.publish-versions dd .muted{font-size:12.5px;font-weight:400}.publish-progress{gap:8px;margin-top:14px;display:grid}.publish-status{align-items:center;gap:8px;min-width:0;font-size:13px;display:flex}.publish-status span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.publish-status.running svg{color:var(--accent)}.publish-status.failed{color:var(--danger-text)}.publish-status.failed span{white-space:normal}.publish-progress+.log-pre,.publish-versions+.log-pre,.dialog-body>.log-pre{border:1px solid var(--border);border-radius:var(--radius-sm);margin-top:10px}.progress-bar{background:var(--accent-soft-2);border-radius:3px;height:3px;position:relative;overflow:hidden}.progress-bar.indeterminate:after{content:"";background:var(--accent-grad);width:35%;animation:rail-run 1.2s var(--ease) infinite;border-radius:3px;position:absolute;inset:0}.publish-success{border-radius:var(--radius);background:var(--ok-soft);align-items:flex-start;gap:10px;margin-top:14px;padding:12px 14px;font-size:13px;display:flex}.publish-success>svg{color:var(--ok);flex:none}@media (width<=1320px){.ws-tabs button span{display:none}.ws-tabs button{padding:0 9px}.model-select:not(.compact){max-width:160px}}@media (width<=1100px){.code-pane,.data-pane{grid-template-columns:190px minmax(0,1fr)}.versions-pane{grid-template-columns:240px minmax(0,1fr)}}@media (width<=720px){.projects-hero{flex-direction:column;align-items:stretch}.project-grid.list .project-info{grid-template-columns:1fr;gap:4px}.chips-col{grid-template-columns:1fr}.app-header{padding:0 16px}.projects-main{padding:24px 16px 48px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
