:root{--bg:#0f1115;--panel:#171a21;--line:#262a34;--text:#e8eaf0;--dim:#8b92a1;--accent:#3b6cff;--ok:#16c47f;--bad:#ff4d4d;--warn:#ffb020;font-family:Inter,system-ui,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}a{color:#8fb0ff}.shell{display:flex;min-height:100vh}aside{width:210px;background:#0b0d11;border-right:1px solid var(--line);padding:22px 14px;display:flex;flex-direction:column;gap:4px}.brand{font-size:20px;margin:0 8px 18px}.brand b,.login h1 b{color:var(--accent)}.nav{background:none;border:0;color:var(--dim);text-align:left;padding:10px 12px;border-radius:8px;font-size:15px;cursor:pointer}.nav.on{background:#1b2133;color:#fff}.nav:hover{color:#fff}.nav.dim{margin-top:auto}main{flex:1;padding:28px;max-width:1100px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:24px}h2{margin:0 0 16px}h3{margin:22px 0 10px;font-size:16px}label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--dim);margin-bottom:14px;flex:1}input,textarea,select{background:#0f1218;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:10px;font:inherit;font-size:14px}input[type=range]{padding:0}.row{display:flex;gap:16px}.checks{display:flex;gap:22px;margin-bottom:16px}.checks label,.inline{flex-direction:row;align-items:center;margin:0;color:var(--text)}button{background:#232838;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:9px 14px;cursor:pointer;font:inherit;font-size:14px}button:hover{border-color:#3a4256}.primary{background:var(--accent);border-color:var(--accent);color:#fff;text-decoration:none;display:inline-block;padding:10px 18px;border-radius:8px}.danger{background:#3a1518;border-color:#5a2026}.small{font-size:12px}.dim{color:var(--dim)}.err{color:var(--bad);white-space:pre-wrap}.link{background:none;border:0;color:#8fb0ff;padding:0;margin-bottom:10px}.list{width:100%;border-collapse:collapse}.list td,.list th{padding:12px 8px;border-bottom:1px solid var(--line);text-align:left;font-size:14px}.list tbody tr{cursor:pointer}.list tbody tr:hover{background:#1c2029}.badge{font-size:12px;padding:3px 9px;border-radius:20px;background:#262a34}.badge.done{background:#0f3b29;color:#5ef0b0}.badge.failed{background:#3b1215;color:#ff8a8a}.badge.running,.badge.queued{background:#14254d;color:#9db7ff}.progress{height:8px;background:#0f1218;border-radius:6px;overflow:hidden;margin:6px 0 12px}.progress div{height:100%;background:var(--accent);transition:width .6s}.video{display:flex;gap:16px;align-items:flex-start;margin:16px 0}.video video{max-height:520px;max-width:60%;border-radius:10px;background:#000}.actions{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0;align-items:center}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.card{background:#12151b;border:1px solid var(--line);border-radius:12px;padding:16px}.card.ready{border-color:#1f4d3a}.card .head,.refcard .head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.dot{font-size:11px;color:var(--dim)}.dot.on{color:var(--ok)}.script .beat{display:flex;gap:10px;align-items:flex-start;margin-bottom:8px}.script .n{color:var(--dim);width:24px;padding-top:10px}.script textarea{flex:1}.script .vis{width:200px;font-size:11px;color:var(--dim);padding-top:8px}.log{max-height:300px;overflow:auto;background:#0b0d11;padding:12px;border-radius:8px;font-size:12px}.refcard{border:1px solid var(--line);border-radius:12px;padding:14px;margin-top:14px}.refbody{display:flex;gap:16px}.refbody img{width:46%;border-radius:8px}.refbody ul{margin:0;padding-left:18px;font-size:14px;line-height:1.7}.swatches{list-style:none;display:flex;gap:6px;margin-left:-18px}.swatches i{width:22px;height:22px;border-radius:5px;display:inline-block}.files{font-size:14px}.login{max-width:360px;margin:15vh auto;display:flex;flex-direction:column;gap:12px}.logs{background:#0b0d11;border:1px solid var(--line);border-radius:10px;padding:12px;max-height:460px;overflow:auto;font:12px/1.45 ui-monospace,Consolas,monospace;white-space:pre-wrap;word-break:break-all}.warn{color:#f0b35a}.ghost{background:transparent;border:1px solid var(--line);color:var(--fg,#ddd)}
