:root{--bg:#07080C;--s1:#0E1018;--s2:#0A0C12;--s3:#13151F;--line:#1E2230;--line2:#2A2F40;--text:#F2F3F7;--soft:#D7DAE3;--muted:#A3A9BA;--muted2:#9CA2B4;--dim:#8B91A4;--accent:#7B5CFF;--accent-l:#A994FF;--accent-bg:rgba(123,92,255,.14);--amber:#F5A524;--amber-l:#F7B850;--teal:#2EC4A6;--blue:#4C8DFF;--red:#F0716A;--red-bg:rgba(240,113,106,.12);--ok:#3FCF8E;--ok-bg:rgba(63,207,142,.12);--sans:"Geist",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--mono:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,monospace;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font:400 14px/1.5 var(--sans);-webkit-font-smoothing:antialiased}a{color:var(--accent-l);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,p{margin:0}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent-l);outline-offset:2px;border-radius:6px}.mono{font-family:var(--mono)}.label{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--muted2);text-transform:uppercase}.muted{color:var(--muted)}.dim{color:var(--dim)}.small{font-size:12.5px}.num{font-variant-numeric:tabular-nums}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.col{display:flex;flex-direction:column;gap:12px}.grow{flex:1;min-width:0}.right{margin-left:auto}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));gap:16px}.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:16px}.dotbg{background-image:radial-gradient(#141724 1px,transparent 1.4px);background-size:12px 12px}.shell{display:grid;grid-template-columns:240px 1fr;min-height:100%}.side{position:sticky;top:0;height:100vh;overflow-y:auto;border-right:1px solid var(--line);background:var(--s2);padding:18px 14px;display:flex;flex-direction:column;gap:18px}.brand{display:flex;align-items:center;gap:10px;padding:4px 6px}.brand img{width:30px;height:30px}.brand b{font-size:16px;font-weight:600;letter-spacing:-.01em}.brand span{font-family:var(--mono);font-size:10px;color:var(--accent-l);letter-spacing:.1em;border:1px solid var(--line2);padding:1px 6px;border-radius:99px}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;color:var(--muted);font-weight:500;min-height:38px}.nav a:hover{background:var(--s3);color:var(--text);text-decoration:none}.nav a.active{background:var(--accent-bg);color:var(--text)}.nav a svg{flex:none;opacity:.85}.side .foot{margin-top:auto;border-top:1px solid var(--line);padding-top:12px;display:flex;flex-direction:column;gap:8px}.main{min-width:0;padding:28px clamp(16px,3vw,40px) 60px}.page-head{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:22px}.page-head h1{font-size:clamp(22px,2.6vw,30px);letter-spacing:-.025em;font-weight:700}.page-head p{color:var(--muted);margin-top:4px;max-width:70ch}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:22px;overflow-x:auto}.tabs a,.tabs button{padding:10px 14px;border:0;background:none;color:var(--muted);font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;white-space:nowrap}.tabs a.active,.tabs button.active{color:var(--text);border-bottom-color:var(--accent)}.tabs a:hover{text-decoration:none;color:var(--text)}@media (max-width:860px){.shell{grid-template-columns:1fr}.side{position:static;height:auto;flex-direction:row;align-items:center;overflow-x:auto;padding:10px 12px;gap:10px;border-right:0;border-bottom:1px solid var(--line)}.nav{flex-direction:row}.nav a{white-space:nowrap}.side .foot,.side .label{display:none}}.card{background:var(--s1);border:1px solid var(--line);border-radius:14px;padding:20px}.card.tight{padding:14px}.card h3{font-size:15px;font-weight:600}.card-head{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}.card-head h3{font-size:15px}.stat{display:flex;flex-direction:column;gap:2px}.stat b{font-size:28px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.stat span{font-size:12px;color:var(--muted2)}.hero-num{font-size:clamp(56px,7vw,88px);line-height:.9;font-weight:700;letter-spacing:-.04em;font-variant-numeric:tabular-nums}.empty{border:1px dashed var(--line2);border-radius:14px;padding:36px;text-align:center;color:var(--muted)}.empty h3{color:var(--text);margin-bottom:6px;font-size:16px}.notice{border:1px solid var(--line2);border-left:3px solid var(--amber);background:#f5a5240f;border-radius:10px;padding:10px 14px;font-size:13px;color:var(--soft)}.notice.err{border-left-color:var(--red);background:var(--red-bg)}.notice.ok{border-left-color:var(--ok);background:var(--ok-bg)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:38px;padding:0 14px;border-radius:9px;border:1px solid var(--line2);background:var(--s3);color:var(--text);font-weight:600;font-size:13px;cursor:pointer;white-space:nowrap}.btn:hover{border-color:#3a4055;background:#181b27}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:#8a6fff}.btn.light{background:var(--text);border-color:var(--text);color:var(--bg)}.btn.ghost{background:transparent;border-color:transparent;color:var(--muted)}.btn.ghost:hover{color:var(--text);background:var(--s3)}.btn.danger{color:var(--red)}.btn.sm{min-height:30px;padding:0 10px;font-size:12px;border-radius:7px}.field{display:flex;flex-direction:column;gap:6px;font-size:12.5px;color:var(--muted)}.field>span{font-weight:500}.input,select.input,textarea.input{width:100%;min-height:38px;padding:8px 11px;border-radius:9px;border:1px solid var(--line2);background:var(--s2);color:var(--text);font-size:14px}textarea.input{min-height:90px;resize:vertical;line-height:1.5}.input:focus{border-color:var(--accent);outline:none}.hint{font-size:12px;color:var(--dim)}.check{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:13px}.check input{width:16px;height:16px;accent-color:var(--accent)}.badge{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:99px;border:1px solid var(--line2);color:var(--soft);white-space:nowrap}.badge.kept,.badge.approved,.badge.complete{color:var(--ok);border-color:#3fcf8e59;background:var(--ok-bg)}.badge.dropped,.badge.rejected,.badge.failed,.badge.error{color:var(--red);border-color:#f0716a59;background:var(--red-bg)}.badge.pending,.badge.proposed,.badge.running{color:var(--amber-l);border-color:#f5a52459;background:#f5a52414}.badge.accent{color:var(--accent-l);border-color:#7b5cff66;background:var(--accent-bg)}.sw{display:inline-block;width:9px;height:9px;border-radius:50%;flex:none}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px}table{border-collapse:collapse;width:100%;font-size:13px}th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}th{font-weight:600;font-size:11.5px;color:var(--muted2);background:var(--s2);position:sticky;top:0;white-space:nowrap}tr:last-child td{border-bottom:0}td.r,th.r{text-align:right;font-variant-numeric:tabular-nums}tbody tr.click{cursor:pointer}tbody tr.click:hover td{background:var(--s3)}.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.step{border:1px solid var(--line);border-top:3px solid var(--line2);border-radius:10px;padding:12px;background:var(--s2)}.step[data-s=running]{border-top-color:var(--accent);animation:pulse 1.2s ease-in-out infinite}.step[data-s=done]{border-top-color:var(--accent)}.step[data-s=skipped]{border-top-style:dashed;opacity:.75}.step[data-s=error]{border-top-color:var(--red)}.step b{display:block;font-size:13px;margin:3px 0}.step p{font-size:12px;color:var(--muted2)}@keyframes pulse{50%{opacity:.55}}.bar-row{display:grid;grid-template-columns:minmax(80px,140px) 1fr 70px;gap:10px;align-items:center;font-size:13px}.track{position:relative;height:12px;border-radius:6px;background:var(--s3);overflow:hidden}.track i{position:absolute;left:0;top:0;bottom:0;border-radius:6px}.track .rng{position:absolute;top:50%;height:2px;background:var(--text);opacity:.8;transform:translateY(-50%)}.chat{display:grid;grid-template-columns:260px 1fr;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:#090a10;min-height:620px}.chat-side{border-right:1px solid var(--line);padding:16px;display:flex;flex-direction:column;gap:6px;background-image:radial-gradient(#141724 1px,transparent 1.4px);background-size:12px 12px}.suggest{text-align:left;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--s2);color:var(--soft);cursor:pointer;font-size:13px;line-height:1.4}.suggest:hover{border-color:var(--accent)}.chat-main{display:flex;flex-direction:column;min-width:0}.msgs{flex:1;overflow-y:auto;padding:22px;display:flex;flex-direction:column;gap:16px;max-height:calc(100vh - 260px);min-height:440px}.bubble-u{align-self:flex-end;max-width:78%;background:#1a1e2c;border:1px solid var(--line2);border-radius:14px 14px 4px;padding:10px 14px;white-space:pre-wrap}.ai{display:flex;gap:12px;align-items:flex-start}.ai img{flex:none;width:30px;height:30px;border-radius:8px;background:#151826;padding:4px}.ai-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px}.md p{margin:0 0 8px}.md ul{margin:0 0 8px;padding-left:20px}.md li{margin:2px 0}.md strong{color:var(--text)}.result{border:1px solid var(--line);border-radius:12px;padding:16px;background:var(--s1);display:flex;flex-direction:column;gap:10px;background-image:radial-gradient(#151826 1px,transparent 1.4px);background-size:12px 12px}.thinking{display:flex;align-items:center;gap:8px;color:var(--muted)}.thinking i{width:5px;height:5px;border-radius:50%;background:var(--accent-l);animation:pulse 1s ease-in-out infinite}.thinking i:nth-child(2){animation-delay:.2s}.thinking i:nth-child(3){animation-delay:.4s}.composer{display:flex;gap:10px;padding:12px;border-top:1px solid var(--line);background:#0c0e15}@media (max-width:860px){.chat{grid-template-columns:1fr}.chat-side{border-right:0;border-bottom:1px solid var(--line);flex-direction:row;overflow-x:auto}.suggest{min-width:220px}}.modal-bg{position:fixed;inset:0;background:#030408b8;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;z-index:50;overflow-y:auto}.modal{width:min(560px,100%);background:var(--s1);border:1px solid var(--line2);border-radius:16px;padding:22px;display:flex;flex-direction:column;gap:14px}.modal h2{font-size:18px}.login{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;position:relative}.login:before{content:"";position:absolute;inset:0;background-image:radial-gradient(#2E3349 1.4px,transparent 1.8px);background-size:18px 18px;-webkit-mask-image:radial-gradient(ellipse 50% 55% at 50% 45%,#000 0%,transparent 75%);mask-image:radial-gradient(ellipse 50% 55% at 50% 45%,#000 0%,transparent 75%)}.login .box{position:relative;width:min(400px,100%);background:var(--s1);border:1px solid var(--line);border-radius:18px;padding:28px;display:flex;flex-direction:column;gap:16px}.toast{position:fixed;bottom:20px;right:20px;z-index:60;background:var(--s3);border:1px solid var(--line2);border-left:3px solid var(--accent);border-radius:10px;padding:12px 16px;max-width:380px;box-shadow:0 10px 30px #0006}.toast.err{border-left-color:var(--red)}.report{max-width:900px}.report h2{font-size:clamp(22px,2.8vw,30px);letter-spacing:-.02em;line-height:1.15}.report h3{font-size:17px;margin-bottom:6px}.report p{line-height:1.65;color:var(--soft)}.report .sec{padding:18px 0;border-top:1px solid var(--line)}.watermark{font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--amber-l)}@media print{:root{--bg:#fff;--s1:#fff;--s2:#fff;--s3:#f3f3f6;--line:#ddd;--line2:#ccc;--text:#111;--soft:#222;--muted:#444;--muted2:#555;--dim:#666}.side,.no-print,.tabs{display:none!important}.shell{display:block}.main{padding:0}.card,.result{break-inside:avoid;background:#fff!important}body{background:#fff}}.spin{width:16px;height:16px;border-radius:50%;border:2px solid var(--line2);border-top-color:var(--accent);animation:sp .8s linear infinite;display:inline-block}@keyframes sp{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
