:root{--bg:#ffffff;--bg-soft:#f8f9fc;--border:#e7e9f0;--text:#14161f;--text-muted:#6b7280;--primary:#7c5cff;--danger:#dc2626;--success:#16a34a;--radius:14px;--shadow-sm:0 1px 3px rgba(20,22,31,0.06);--shadow-md:0 8px 30px rgba(20,22,31,0.08);--gradient:linear-gradient(135deg,#7c5cff,#4f8dff);--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--rail-bg:#0e0e12;--rail-bg-soft:#17171d;--rail-border:#262630;--rail-text:#ececf2;--rail-text-muted:#8b8b98;--rail-accent:#a78bfa}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Inter,Roboto,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{cursor:pointer}button,input,textarea{font:inherit}.hero{min-height:100vh;background:radial-gradient(900px 500px at 85% -10%,rgba(124,92,255,.16),transparent 60%),radial-gradient(700px 400px at 0 20%,rgba(79,141,255,.14),transparent 55%),#ffffff;flex-direction:column;padding:3rem 1.5rem}.hero,.nav{display:flex;align-items:center}.nav{width:100%;max-width:1080px;justify-content:space-between}.logo{font-weight:800;font-size:1.15rem;letter-spacing:-.02em}.logo span{background:var(--gradient);-webkit-background-clip:text;background-clip:text;color:transparent}.hero-inner{max-width:760px;text-align:center;margin-top:5rem}.hero h1{font-size:clamp(2.4rem,6vw,3.8rem);font-weight:800;letter-spacing:-.04em;line-height:1.05;margin:0 0 1rem}.hero p.sub{font-size:1.2rem;color:var(--text-muted);margin:0 auto 2.2rem;max-width:560px;line-height:1.5}.cta-row{display:flex;gap:.8rem;justify-content:center;flex-wrap:wrap}.btn{border-radius:999px;border:1px solid var(--border);background:#fff;padding:.8rem 1.6rem;font-weight:600;font-size:.96rem;transition:all .15s ease}.btn:hover{border-color:var(--primary);color:var(--primary)}.btn.primary{background:var(--gradient);border:none;color:#fff;box-shadow:0 8px 22px rgba(124,92,255,.35)}.btn.primary:hover{transform:translateY(-1px);box-shadow:0 12px 26px rgba(124,92,255,.42)}.btn.secondary{background:#fff}.btn.sm{padding:.42rem .85rem;font-size:.8rem;border-radius:8px}.btn.ghost{background:transparent;color:var(--primary);border-color:var(--primary)}.btn.ghost:hover{background:rgba(124,92,255,.08)}.btn.danger{background:transparent;color:var(--danger);border-color:var(--danger)}.hero-prompt{margin:3rem auto 0;max-width:640px;text-align:left;background:#fff;border:1px solid var(--border);border-radius:18px;box-shadow:var(--shadow-md);padding:1.2rem 1.4rem}.hero-prompt>p{margin:0 0 .8rem;font-weight:600}.hero-prompt textarea{width:100%;border:none;outline:none;resize:none;color:var(--text-muted);font-size:.98rem;line-height:1.55;min-height:86px;background:transparent}.hero-prompt .row{display:flex;justify-content:space-between;align-items:center}.checks{display:flex;gap:1.4rem;justify-content:center;flex-wrap:wrap;margin-top:2.6rem;color:var(--text-muted);font-size:.92rem}.checks b{color:var(--success);font-weight:800;margin-right:.3rem}.page-narrow{max-width:1080px;margin:0 auto;padding:2.4rem 1.5rem 4rem}.grad-dot{background:var(--gradient);-webkit-background-clip:text;background-clip:text;color:transparent}.dash-hero{text-align:center;padding:1.2rem 0 .4rem}.dash-hero h2{font-size:1.7rem;font-weight:800;letter-spacing:-.03em;margin:0 0 1rem}.dash-hero-box{max-width:720px;margin:0 auto;background:#fff;border:1px solid var(--border);border-radius:18px;box-shadow:var(--shadow-md);padding:1.1rem 1.3rem;text-align:left}.dash-hero-box textarea{width:100%;border:none;outline:none;resize:none;font-size:1rem;line-height:1.5;min-height:64px;background:transparent;color:var(--text);font-family:inherit}.dash-hero-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:.6rem;flex-wrap:wrap}.dash-hero-quick{display:flex;flex-wrap:wrap;gap:.4rem}.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.6rem;gap:1rem;flex-wrap:wrap}.page-head h1{font-size:1.7rem;font-weight:750;letter-spacing:-.03em;margin:0}.grid-projects{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));grid-gap:1rem;gap:1rem}.project-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:1.2rem 1.3rem;cursor:pointer;transition:all .14s ease;box-shadow:var(--shadow-sm)}.project-card:hover{border-color:var(--primary);box-shadow:var(--shadow-md);transform:translateY(-2px)}.project-card h3{margin:0 0 .3rem;font-size:1.05rem;font-weight:700}.project-card .desc{color:var(--text-muted);font-size:.9rem;margin:0 0 1rem;min-height:2.4em}.project-card .es{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.badge{border-radius:999px;font-size:.72rem;font-weight:600;padding:.22rem .6rem;background:var(--bg-soft);color:var(--text-muted);border:1px solid var(--border)}.badge.live{background:rgba(22,163,74,.1);color:var(--success);border-color:rgba(22,163,74,.25)}.badge.build{background:rgba(124,92,255,.1);color:var(--primary);border-color:rgba(124,92,255,.25)}.badge.err{background:rgba(220,38,38,.08);color:var(--danger);border-color:rgba(220,38,38,.25)}.input,.textarea{width:100%;border:1px solid var(--border);border-radius:10px;padding:.7rem .9rem;outline:none;transition:border-color .14s ease;background:#fff;color:var(--text)}.input:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(124,92,255,.12)}.textarea{resize:vertical;min-height:70px}.empty{text-align:center;padding:4rem 1rem;color:var(--text-muted);border:1px dashed var(--border);border-radius:var(--radius);background:var(--bg-soft)}.empty .big{font-size:2rem;margin-bottom:.4rem}.empty h3{color:var(--text);margin:0 0 .4rem}.modal-back{position:fixed;inset:0;background:rgba(20,22,31,.45);display:flex;align-items:center;justify-content:center;z-index:50}.modal{background:#fff;border-radius:18px;width:100%;max-width:460px;padding:1.8rem;box-shadow:var(--shadow-md)}.modal h3{margin:0 0 1rem}.modal .field{margin-bottom:.9rem}.modal .field label{display:block;font-size:.85rem;font-weight:600;margin-bottom:.35rem}.btn-row{display:flex;gap:.6rem;justify-content:flex-end;margin-top:1rem}.skeleton{background:linear-gradient(90deg,var(--bg-soft) 25%,#eef0f5 50%,var(--bg-soft) 75%);background-size:200% 100%;animation:shimmer 1.4s infinite;border-radius:8px;height:72px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f5f3ff,#eef2ff);font-family:ui-sans-serif,system-ui,sans-serif}.auth-card{background:#fff;border:1px solid #e5e7f0;border-radius:18px;box-shadow:0 12px 40px rgba(76,60,200,.08);padding:2rem 1.75rem;width:100%;max-width:380px;display:flex;flex-direction:column;gap:.85rem}.auth-card h1{margin:0;font-size:1.4rem;font-weight:800;letter-spacing:-.02em}.auth-sub{margin:0;color:#6b7280;font-size:.9rem}.auth-card label{display:flex;flex-direction:column;font-size:.8rem;font-weight:600;color:#374151;gap:.3rem}.auth-card input{border:1px solid #dde1ee;border-radius:10px;padding:.6rem .8rem;font-size:.95rem;outline:none}.auth-btn{background:linear-gradient(135deg,#7c5cff,#4f8dff);color:#fff;border:none;border-radius:10px;padding:.7rem;font-weight:700;font-size:.95rem;cursor:pointer}.builder{display:flex;flex-direction:column;height:100vh;background:var(--bg-soft)}.topbar{display:flex;align-items:center;gap:.7rem;padding:.5rem .9rem;background:var(--rail-bg);border-bottom:1px solid var(--rail-border);z-index:5}.topbar .back{color:var(--rail-text-muted);font-size:1rem;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border-radius:7px}.topbar .back:hover{background:var(--rail-bg-soft);color:var(--rail-text)}.brand{font-weight:800;font-size:.95rem;letter-spacing:-.02em;color:var(--rail-text)}.brand span{background:linear-gradient(135deg,#a78bfa,#7c9dff);-webkit-background-clip:text;background-clip:text;color:transparent}.proj-name{font-weight:600;font-size:.85rem;color:var(--rail-text);padding:.3rem .55rem;border-radius:7px}.proj-name:hover{background:var(--rail-bg-soft);cursor:text}.spacer{flex:1 1}.status-pill{display:inline-flex;align-items:center;gap:.4rem;font-size:.74rem;font-weight:600;padding:.28rem .65rem;border-radius:999px;background:var(--rail-bg-soft);border:1px solid var(--rail-border);color:var(--rail-text-muted)}.status-pill.running{color:#4ade80;border-color:rgba(74,222,128,.3);background:rgba(74,222,128,.08)}.status-pill .led{width:6px;height:6px;border-radius:999px;background:currentColor}.status-pill.running .led{box-shadow:0 0 0 3px rgba(74,222,128,.18)}.mode-tabs{display:flex;gap:.2rem;position:relative}.mode-tabs button{border:none;background:transparent;padding:.4rem .75rem;font-size:.8rem;font-weight:600;color:var(--rail-text-muted);border-radius:7px;cursor:pointer;transition:color .12s}.mode-tabs button:hover{color:var(--rail-text)}.mode-tabs button.act{color:#fff;background:var(--rail-bg-soft)}.topbar .btn.sm{background:transparent;border:1px solid var(--rail-border);color:var(--rail-text-muted)}.topbar .btn.sm:hover{border-color:var(--rail-accent);color:var(--rail-text)}.publish-btn{display:inline-flex;align-items:center;gap:.35rem;background:linear-gradient(135deg,#a78bfa,#7c9dff)!important;border:none!important;color:#fff!important;box-shadow:0 4px 14px rgba(124,92,255,.35)}.publish-btn:hover{transform:translateY(-1px)}.builder-body{display:flex;flex:1 1;min-height:0}.chat-col{width:min(400px,34vw);min-width:300px;border-right:1px solid var(--rail-border);background:var(--rail-bg);height:100%}.chat,.chat-col{display:flex;flex-direction:column}.chat{border-top:none;background:transparent;flex:1 1;min-height:0}.chat,.chat-head{color:var(--rail-text)}.chat-head{display:flex;align-items:center;gap:.6rem;padding:.7rem .9rem;font-weight:650;font-size:.82rem;border-bottom:1px solid var(--rail-border)}.thinking{display:inline-flex;align-items:center;gap:.4rem;color:var(--rail-accent);font-size:.76rem;font-weight:500}.tdot{width:8px;height:8px;border-radius:999px;background:var(--rail-accent);display:inline-block;animation:pulse 1.2s infinite}@keyframes pulse{0%,to{opacity:.3;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}.chat-stream{flex:1 1;overflow-y:auto;padding:.8rem;display:flex;flex-direction:column;gap:.5rem}.chat-empty{color:var(--rail-text-muted);font-size:.85rem;line-height:1.55;padding:.5rem .3rem}.chat-empty-title{font-size:1.1rem;font-weight:750;margin-bottom:.35rem;color:var(--rail-text);letter-spacing:-.01em}.chat-quick,.chat-suggest{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.8rem}.chip{border:1px solid var(--rail-border);background:var(--rail-bg-soft);border-radius:10px;padding:.4rem .75rem;font-size:.78rem;color:var(--rail-text);cursor:pointer;transition:all .15s}.chip:hover{border-color:var(--rail-accent);color:#fff;background:rgba(167,139,250,.12)}.msg{max-width:92%;border-radius:12px;padding:.6rem .85rem;font-size:.85rem;line-height:1.55}.msg-user{align-self:flex-end;background:linear-gradient(135deg,#7c5cff,#5b7fff);color:#fff;border-bottom-right-radius:4px}.msg-ai{align-self:flex-start;background:var(--rail-bg-soft);border:1px solid var(--rail-border);color:var(--rail-text);border-bottom-left-radius:4px}.msg-ai p{margin:.2rem 0}.msg-ai pre{background:#08080a;color:#d6d6e6;border-radius:8px;overflow:auto;padding:.55rem .7rem;font-size:.76rem;margin:.4rem 0;border:1px solid var(--rail-border)}.msg-ai code{font-family:var(--mono);font-size:.78em}.msg-ai :not(pre)>code{background:rgba(167,139,250,.14);color:#c4b5fd;border-radius:4px;padding:.05rem .3rem}.attach-inline{max-width:200px;border-radius:8px;display:block;margin-bottom:6px}.msg-err{border-color:rgba(220,38,38,.4);background:rgba(220,38,38,.08)}.msg-btn{color:var(--rail-accent);font-size:.82rem;cursor:pointer;border:none;background:rgba(167,139,250,.14);border-radius:6px;padding:.15rem .5rem}.steps-block{display:flex;flex-direction:column;gap:.32rem;font-family:var(--mono)}.step{display:flex;align-items:flex-start;gap:.5rem;font-size:.78rem}.step .step-ic{width:14px;flex-shrink:0;color:var(--rail-text-muted)}.step.ok .step-ic{color:#4ade80}.step.err .step-ic{color:#f87171}.step-detail{color:var(--rail-text-muted);font-size:.72rem;font-family:var(--mono)}.msg-plan{background:var(--rail-bg-soft);border-color:rgba(167,139,250,.4)}.plan-card{display:flex;flex-direction:column;gap:.35rem}.plan-title{font-weight:750;font-size:.95rem;color:#fff}.plan-summary{color:var(--rail-text-muted);font-size:.8rem}.plan-steps{margin:.2rem 0 0 1rem;padding:0;font-size:.82rem;color:var(--rail-text)}.plan-steps li{margin:.12rem 0}.plan-btns{display:flex;gap:.5rem;margin-top:.5rem}.plan-btns .btn.ghost{border-color:var(--rail-border);color:var(--rail-text-muted)}.plan-btns .btn.ghost:hover{border-color:var(--rail-accent);color:#fff}.done-badge{color:#4ade80;font-weight:650}.chat-input{display:flex;gap:.5rem;align-items:center;padding:.7rem .8rem;border-top:1px solid var(--rail-border)}.chat-input input{flex:1 1;border:1px solid var(--rail-border);background:var(--rail-bg-soft);color:var(--rail-text);border-radius:10px;padding:.6rem .9rem;outline:none}.chat-input input::placeholder{color:var(--rail-text-muted)}.chat-input input:focus{border-color:var(--rail-accent)}.chat-send{border-radius:10px;padding:.6rem 1.1rem;font-weight:650;background:linear-gradient(135deg,#a78bfa,#7c9dff);color:#fff;border:none}.chat-send:disabled{opacity:.5}.attach-btn{border:1px solid var(--rail-border);background:var(--rail-bg-soft);color:var(--rail-text-muted);border-radius:10px;width:38px;height:38px;font-size:1rem;flex-shrink:0}.attach-btn:hover{border-color:var(--rail-accent);color:#fff}.chat-actions{padding:0 .8rem .6rem}.chat-actions .btn.ghost{border-color:var(--rail-border);color:var(--rail-text-muted)}.stage{min-width:0;padding:.9rem}.preview-stage,.stage{flex:1 1;overflow:hidden;display:flex}.preview-stage{flex-direction:column;background:#fff;border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-sm)}.preview-toolbar{display:flex;align-items:center;gap:.8rem;padding:.5rem .8rem;background:#fff;border-bottom:1px solid var(--border);font-size:.8rem}.viewports{display:flex;gap:2px;background:var(--bg-soft);border-radius:8px;padding:2px}.viewports button{border:none;background:transparent;width:30px;height:24px;border-radius:6px;color:var(--text-muted);font-size:.7rem;font-weight:700;cursor:pointer}.viewports button.act{background:#fff;color:var(--primary);box-shadow:0 1px 2px rgba(20,22,31,.1)}.preview-url{color:var(--text-muted);font-size:.78rem;font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1}.preview-frame{flex:1 1;border:none;width:100%;background:#fff}.empty-preview{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.7rem;color:var(--text-muted)}.code-workspace{flex:1 1;display:flex;background:#fff;border:1px solid var(--border);border-radius:14px;overflow:hidden}.code-files{width:240px;border-right:1px solid var(--border);display:flex;flex-direction:column;background:var(--bg-soft)}.code-files-head{padding:.6rem .7rem;border-bottom:1px solid var(--border)}.code-files-head input{width:100%;border:1px solid var(--border);border-radius:8px;padding:.35rem .6rem;font-size:.78rem;outline:none;background:#fff}.file-tree-code{flex:1 1;overflow:auto;padding:.4rem 0;font-family:var(--mono);font-size:.78rem}.code-editor{flex:1 1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.code-editor .cm-editor{height:100%}.code-editor-empty{flex:1 1;justify-content:center;color:var(--text-muted);font-size:.85rem}.code-bar,.code-editor-empty{display:flex;align-items:center}.code-bar{gap:.5rem;padding:.45rem .7rem;border-top:1px solid var(--border);background:var(--bg-soft)}.code-bar .fn{flex:1 1;font-family:var(--mono);font-size:.78rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-row{display:flex;align-items:center;gap:.45rem;padding:.26rem .8rem;border-radius:6px;border:none;background:none;width:100%;text-align:left;font-family:inherit;font-size:inherit;color:var(--text)}.file-row:hover{background:#fff}.file-row.fle,.file-row.ir{cursor:pointer}.file-row.sel{background:rgba(124,92,255,.1);color:var(--primary)}.file-row .ic{color:var(--text-muted);width:14px;display:inline-block}