:root{
  --ink:#221F1C; --ink-2:#4A443D; --gold:#A68554; --gold-deep:#8a6c3f;
  --cream:#F6F1E8; --paper:#FBF8F3; --card:#fff; --line:rgba(34,31,28,.12);
  --line-2:rgba(34,31,28,.07);
  --red:#B23A2E; --red-bg:#fbeae8; --amber:#9A6B16; --amber-bg:#fbf2df;
  --green:#3E6B47; --green-bg:#e7f0e8; --grey:#8a8073;
  --shadow:0 1px 2px rgba(34,31,28,.04),0 8px 30px rgba(34,31,28,.06);
  --serif:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
  --mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4{font-family:var(--serif);font-weight:600;margin:0;line-height:1.2}
a{color:var(--gold-deep);text-decoration:none}
code,.mono{font-family:var(--mono)}
button{font-family:inherit;cursor:pointer}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:7px;background:var(--ink);color:#fff;border:none;
  border-radius:9px;padding:10px 16px;font-size:13.5px;font-weight:600;transition:.15s}
.btn:hover{opacity:.92}
.btn.gold{background:var(--gold)}
.btn.ghost{background:#fff;color:var(--ink);border:1px solid var(--line)}
.btn.ghost:hover{background:var(--cream)}
.btn.sm{padding:6px 11px;font-size:12px;border-radius:8px}
.btn.danger{background:#fff;color:var(--red);border:1px solid var(--red-bg)}
.btn.danger:hover{background:var(--red-bg)}
.btn[disabled]{opacity:.5;cursor:not-allowed}

/* ---------- login / setup ---------- */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(800px 360px at 50% -10%,rgba(166,133,84,.16),transparent),var(--paper)}
.login-card{width:350px;background:var(--card);border:1px solid var(--line);border-radius:18px;
  padding:34px 32px;text-align:center;box-shadow:var(--shadow)}
.login-card .lg{font-family:var(--serif);font-size:26px;letter-spacing:2px}
.login-card .lg b{color:var(--gold-deep)}
.login-card .tag{letter-spacing:2.6px;text-transform:uppercase;font-size:9.5px;color:var(--ink-2);margin-top:4px}
.field{width:100%;border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-top:14px;
  font-size:14px;background:#fdfbf7;color:var(--ink)}
.field:focus{outline:none;border-color:var(--gold)}
.login-card .btn{width:100%;justify-content:center;margin-top:14px}
.hint{font-size:11.5px;color:var(--ink-2);margin-top:12px}
.error{background:var(--red-bg);color:var(--red);border-radius:9px;padding:9px 12px;font-size:12.5px;margin-top:14px}

/* ---------- app shell ---------- */
.shell{display:grid;grid-template-columns:212px 1fr;min-height:100vh}
.side{background:#1c1a17;color:#cfc7ba;padding:20px 14px;position:sticky;top:0;height:100vh;overflow:auto}
.side .lg{font-family:var(--serif);color:#fff;font-size:19px;letter-spacing:1.4px;padding:4px 8px 18px}
.side .lg b{color:var(--gold)}
.side .grp{font-size:9.5px;letter-spacing:2px;text-transform:uppercase;color:#8a8073;margin:18px 0 5px 10px}
.side a{display:flex;gap:9px;align-items:center;color:#cfc7ba;font-size:13.3px;padding:9px 10px;border-radius:8px;transition:.13s}
.side a:hover{background:#262320;color:#fff}
.side a.on{background:#2c2823;color:#fff}
.side a.disabled{opacity:.4;pointer-events:none}
.side .foot{margin-top:24px;border-top:1px solid #2c2823;padding-top:12px}
.side form{margin:0}
.side .logout{width:100%;background:none;border:none;color:#8a8073;text-align:left;font-size:12.5px;padding:8px 10px;border-radius:8px}
.side .logout:hover{background:#262320;color:#cfc7ba}

.main{padding:0;min-width:0}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:20px 30px;border-bottom:1px solid var(--line-2);background:linear-gradient(180deg,#fff,#fdfbf7)}
.topbar .eyebrow{font-size:10.5px;letter-spacing:2.4px;text-transform:uppercase;color:var(--gold-deep);font-weight:700}
.topbar h1{font-size:23px;margin-top:3px}
.content{padding:26px 30px;max-width:1000px;min-width:0}

/* ---------- panel bits ---------- */
.counter{font-family:var(--serif);font-size:30px;color:var(--gold-deep);line-height:1}
.counter small{font-family:var(--sans);font-size:12px;color:var(--ink-2)}
.muted{color:var(--ink-2)}
.row{display:flex;align-items:center;gap:12px}
.between{justify-content:space-between}
.wrap-actions{display:flex;gap:8px;flex-wrap:wrap}

/* dropzone */
.dropzone{border:2px dashed var(--gold);border-radius:14px;background:#fffdf8;padding:26px;text-align:center;
  margin-top:14px;transition:.15s;cursor:pointer}
.dropzone:hover,.dropzone.drag{background:#fdf6e9}
.dropzone .big{font-family:var(--serif);font-size:17px}
.dropzone .sub{font-size:12.5px;color:var(--ink-2);margin-top:4px}

/* project rows */
.projects{margin-top:14px;display:flex;flex-direction:column;gap:9px}
.pj{display:flex;align-items:center;gap:13px;background:#fff;border:1px solid var(--line);border-radius:11px;padding:12px 15px}
.pj .hd{width:10px;height:10px;border-radius:50%;flex:0 0 auto;background:var(--grey)}
.pj.s-healthy .hd{background:var(--green)} .pj.s-reachable .hd{background:var(--green)}
.pj.s-quota .hd{background:var(--amber)} .pj.s-timeout .hd{background:var(--amber)}
.pj.s-billing .hd{background:var(--red)} .pj.s-auth .hd{background:var(--red)}
.pj.s-no_key .hd{background:var(--red)} .pj.s-permission .hd{background:var(--red)}
.pj.s-api_disabled .hd{background:var(--red)} .pj.s-error .hd{background:var(--red)}
.pj .nm{flex:1;min-width:0}
.pj .nm b{font-family:var(--mono);font-size:13px;font-weight:600}
.pj .nm small{display:block;font-size:11.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pj.disabled{opacity:.55}
.pj .stat{font-size:11px;letter-spacing:.4px;text-transform:uppercase;color:var(--ink-2);min-width:74px;text-align:right;flex:0 0 auto}
.pj .stat.s-healthy,.pj .stat.s-reachable{color:var(--green)}
.pj .stat.s-quota,.pj .stat.s-timeout{color:var(--amber)}
.pj .stat.s-billing,.pj .stat.s-auth,.pj .stat.s-no_key,.pj .stat.s-permission,.pj .stat.s-api_disabled,.pj .stat.s-error{color:var(--red)}
.pj .acts{display:flex;gap:6px;flex:0 0 auto}

.empty{border:1px dashed var(--line);border-radius:12px;padding:30px;text-align:center;color:var(--ink-2);margin-top:14px}

/* toast */
.toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:50}
.toast{background:var(--ink);color:#fff;padding:11px 16px;border-radius:10px;font-size:13px;box-shadow:var(--shadow);max-width:360px;animation:slidein .2s}
.toast.ok{background:#26432c} .toast.err{background:#5a2620} .toast.warn{background:#6a4a16}
@keyframes slidein{from{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}

/* callout */
.callout{border-left:3px solid var(--gold);background:#fffdf7;border-radius:0 12px 12px 0;padding:13px 16px;margin-top:16px;font-size:13px;color:var(--ink-2)}
.callout b{color:var(--ink)}
.spin{display:inline-block;width:13px;height:13px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:sp .7s linear infinite}
.btn.ghost .spin{border-color:rgba(34,31,28,.25);border-top-color:var(--ink)}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---------- settings forms ---------- */
.settings-form{max-width:620px}
.fld{margin-top:16px}
.fld label{display:block;font-size:11px;letter-spacing:.7px;text-transform:uppercase;color:var(--ink-2);font-weight:700;margin-bottom:6px}
.fld input[type=text],.fld input[type=password],.fld input[type=number],.fld select{width:100%;border:1px solid var(--line);border-radius:9px;padding:10px 12px;font-size:14px;background:#fdfbf7;color:var(--ink);font-family:var(--sans)}
.fld input:focus,.fld select:focus{outline:none;border-color:var(--gold)}
.fld .desc{font-size:11.5px;color:var(--ink-2);margin-top:5px}
.fld.row2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.set-section{font-family:var(--serif);font-size:15px;margin:26px 0 2px;padding-top:18px;border-top:1px solid var(--line-2)}
.toggle{display:flex;align-items:center;gap:10px;margin-top:14px}
.toggle input{width:17px;height:17px;accent-color:var(--gold);flex:0 0 auto}
.toggle label{font-size:13.5px;margin:0;text-transform:none;letter-spacing:0;color:var(--ink)}
.actionsbar{display:flex;gap:10px;margin-top:24px}

/* ---------- run pipeline ---------- */
.tabhint{font-size:12px;color:var(--ink-2);margin-top:3px}
textarea.urlbox{width:100%;border:1px solid var(--line);border-radius:10px;padding:12px;font-family:var(--mono);font-size:12.5px;background:#fdfbf7;color:var(--ink);margin-top:10px;resize:vertical}
textarea.urlbox:focus{outline:none;border-color:var(--gold)}
.run-opts{display:flex;gap:18px;flex-wrap:wrap;align-items:center;margin-top:14px}
.run-opts label{font-size:12px;color:var(--ink-2);display:flex;align-items:center;gap:7px}
.run-opts input[type=number]{width:60px;border:1px solid var(--line);border-radius:7px;padding:5px 8px;font-size:13px;background:#fff}
.run-opts select{border:1px solid var(--line);border-radius:7px;padding:5px 8px;font-size:13px;background:#fff}
.run-opts input[type=checkbox]{width:16px;height:16px;accent-color:var(--gold)}
.run-pill{font-size:11px;letter-spacing:1px;text-transform:uppercase;padding:4px 11px;border-radius:999px;background:var(--cream);color:var(--ink-2);font-weight:700}
.run-pill.s-running,.run-pill.s-queued{background:var(--amber-bg);color:var(--amber)}
.run-pill.s-done{background:var(--green-bg);color:var(--green)}
.run-pill.s-failed{background:var(--red-bg);color:var(--red)}
.run-pill.s-stopped,.run-pill.s-stopping{background:#eceae5;color:var(--ink-2)}
.run-stats{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0;font-size:12.5px;color:var(--ink-2)}
.run-stats span{background:var(--cream);padding:4px 10px;border-radius:7px}
.prog{display:flex;flex-direction:column;gap:7px;margin-top:6px}
.prow{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:9px;padding:8px 11px}
.prow .nm{flex:1;min-width:0;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prow .bar{height:6px;background:#eee5d6;border-radius:4px;flex:1.2;overflow:hidden}
.prow .bar i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--gold-deep));transition:width .3s}
.prow .st{font-size:10.5px;text-transform:uppercase;color:var(--ink-2);width:72px;text-align:right}
.console{margin-top:14px;background:#1c1a17;color:#cfc7ba;border-radius:10px;padding:12px 14px;font-family:var(--mono);font-size:11.5px;line-height:1.5;max-height:280px;overflow:auto}
.console .line{white-space:pre-wrap;word-break:break-word}
.console .line.err{color:#e89a8f}
#csvlink{font-size:13px;font-weight:600}

@media(max-width:820px){
  .shell{grid-template-columns:1fr}
  .side{position:static;height:auto}
  .content{padding:18px}
}
