:root{--ink:#12262b;--paper:#f2f5f2;--card:#fff;--tide:#0e7c86;--sand:#e8d9b5;--coral:#c4452d;--line:#d3dcd8}
@media(prefers-color-scheme:dark){:root{--ink:#e6eeec;--paper:#0f1c1f;--card:#16282c;--tide:#4fc3cc;--sand:#5a5238;--line:#2b4146}}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.5 "Segoe UI Variable Text","Segoe UI",system-ui,sans-serif}
.top{display:flex;justify-content:space-between;align-items:baseline;padding:1.2rem max(1.2rem,calc(50% - 360px));border-bottom:1px solid var(--line)}
h1{font-size:1.35rem;margin:0;letter-spacing:-.01em}h2{font-size:1.1rem;margin:0 0 .8rem}
main,.narrow{max-width:720px;margin:1.5rem auto;padding:0 1rem}
.panel{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:1.2rem;margin-bottom:1rem}
.rail{display:flex;list-style:none;margin:0 0 1rem;padding:0;gap:.5rem}
.rail li{flex:1;padding:.7rem .9rem;border-left:4px solid var(--line);background:var(--card);display:flex;flex-direction:column}
.rail li small{opacity:.7}.rail li.active{border-color:var(--tide);background:var(--sand)}.rail li.done{border-color:var(--tide)}.rail li.failed{border-color:var(--coral)}
label{display:flex;flex-direction:column;gap:.25rem;font-weight:600;font-size:.9rem;flex:1;min-width:180px}
textarea,input,select{font:inherit;font-weight:400;padding:.55rem .65rem;border:1px solid var(--line);border-radius:6px;background:var(--paper);color:var(--ink)}
textarea{width:100%;font-family:"Cascadia Mono",Consolas,monospace;font-size:.85rem;margin:.3rem 0 1rem}
.row{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:1rem;border:0;padding:0}
button.primary{background:var(--tide);color:#fff;border:0;border-radius:6px;padding:.65rem 1.3rem;font:inherit;font-weight:600;cursor:pointer}
button.primary:disabled{opacity:.5}
.chips{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.8rem}
.chips a{padding:.35rem .75rem;border:1px solid var(--tide);border-radius:999px;color:var(--tide);text-decoration:none;font-size:.9rem}
.chips a:hover{background:var(--tide);color:var(--paper)}
.hint{opacity:.75;font-size:.9rem}.msg{color:var(--coral)}
:focus-visible{outline:3px solid var(--tide);outline-offset:2px}
@media(max-width:560px){.rail{flex-direction:column}}

.tabs{display:flex;flex-wrap:wrap;gap:.4rem;max-width:720px;margin:1.2rem auto 0;padding:0 1rem}
.tabs button{font:inherit;font-weight:600;padding:.5rem .9rem;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--ink);cursor:pointer}
.tabs button.on{background:var(--tide);border-color:var(--tide);color:#fff}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.9rem 1rem;margin:1rem 0}
.grid label small{font-weight:400;opacity:.7}
#sourceRow,#dataRow{margin-bottom:.8rem}
.run{border-top:1px solid var(--line);padding:.7rem 0}.run:first-of-type{border-top:0}
.run b.failed{color:var(--coral)}.run b.done{color:var(--tide)}
[hidden]{display:none!important}
.run .runhead{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
button.cancel{margin-left:auto;font:inherit;font-size:.85rem;padding:.2rem .7rem;border:1px solid var(--coral);color:var(--coral);background:transparent;border-radius:6px;cursor:pointer}
.progrow{display:flex;align-items:center;gap:.6rem;margin:.4rem 0}.progrow progress{flex:1;height:.9rem;accent-color:var(--tide)}
.chip{display:inline-flex;align-items:center;gap:.3rem}
button.copy{font:inherit;font-size:.8rem;padding:.25rem .6rem;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--ink);cursor:pointer}
.run b.cancelled{opacity:.7}
