:root{
  --bg:#f7f7f8; --surface:#fff; --border:#e4e4e8; --text:#1a1a1a;
  --muted:#6b7280; --accent:#c15f3c; --blue:#3c7dc1; --green:#5fa463; --red:#c0392b; --amber:#e0a800; --purple:#8e44ad;
  --code-bg:#1e1e24; --hl:#3a3a4a;
}
*{box-sizing:border-box;}
body{margin:0;padding:24px;background:var(--bg);color:var(--text);
  font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;line-height:1.55;}
.wrap{max-width:1000px;margin:0 auto;}
a.back{display:inline-block;margin-bottom:10px;font-size:13px;color:var(--blue);text-decoration:none;}
h1{font-size:22px;margin:0 0 4px;}
.lead{color:var(--muted);margin:0 0 16px;font-size:14px;}
.panel{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:18px;margin:14px 0;}
label{font-size:13px;font-weight:600;color:var(--muted);display:block;margin-bottom:6px;}
textarea{width:100%;height:96px;resize:vertical;font-family:ui-monospace,Menlo,monospace;font-size:13px;
  border:1px solid var(--border);border-radius:8px;padding:10px;background:#fbfbfc;color:var(--text);}
.controls{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:12px;}
button{font-size:14px;font-weight:600;cursor:pointer;border:none;border-radius:8px;padding:9px 15px;background:var(--accent);color:#fff;}
button.sec{background:#e6e7ea;color:var(--text);}
button:disabled{opacity:.4;cursor:not-allowed;}
button:hover:not(:disabled){filter:brightness(.95);}
.ex{display:flex;gap:14px;margin-top:8px;flex-wrap:wrap;}
.ex a{font-size:12px;color:var(--accent);cursor:pointer;text-decoration:underline;}
.err{color:var(--red);font-weight:600;font-size:13px;margin-top:8px;min-height:16px;}
.stage{display:flex;gap:18px;flex-wrap:wrap;}
.left{flex:1 1 440px;min-width:340px;}
.right{flex:1 1 340px;min-width:300px;}
svg{width:100%;height:auto;background:#fbfbfc;border-radius:10px;border:1px solid var(--border);}
.state{font-family:ui-monospace,Menlo,monospace;font-size:13px;}
.state .row{display:flex;align-items:flex-start;gap:8px;margin:8px 0;flex-wrap:wrap;}
.state .tag{display:inline-block;min-width:86px;color:var(--muted);font-weight:600;}
.chip{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;padding:0 6px;
  border-radius:7px;background:#eef0f3;font-weight:700;font-size:13px;}
.chip.q{background:#fdeee7;color:var(--accent);}
.chip.done{background:#eef7ef;color:var(--green);}
.chip.cur{background:#fff6e6;color:#a07500;}
pre{background:var(--code-bg);color:#e6e6e6;border-radius:10px;padding:14px 12px;overflow-x:auto;font-size:12.5px;line-height:1.5;margin:0;}
pre .ln{display:block;padding:1px 6px;border-radius:4px;white-space:pre;}
pre .ln.active{background:var(--hl);}
pre .kw{color:#c792ea;} pre .fn{color:#82aaff;} pre .num{color:#f78c6c;} pre .cm{color:#7a8290;font-style:italic;} pre .str{color:#c3e88d;}
.status{font-size:14px;font-weight:600;margin-top:12px;padding:10px 14px;border-radius:10px;background:#eef0f3;}
.status.ok{background:#eef7ef;color:#2e7d32;}
.status.bad{background:#fdecea;color:#c0392b;}
.legend{font-size:12px;color:var(--muted);margin-top:8px;line-height:1.9;}
.dot{display:inline-block;width:11px;height:11px;border-radius:3px;vertical-align:middle;margin:0 3px 0 10px;}
.note{background:#f0f4fa;border-left:4px solid var(--blue);border-radius:0 10px 10px 0;padding:12px 16px;margin:14px 0;font-size:13.5px;}
.note b{color:var(--blue);}
