*{box-sizing:border-box}
:root{
  --bg:#0a0c10;--panel:#13161d;--panel2:#181c25;--raise:#1d222c;
  --bd:#222834;--bd2:#2c3340;--tx:#eaecf0;--tx2:#99a2b0;--tx3:#5d6571;
  --ac:#2dd4a4;--ac2:#36e0b0;--ac-soft:rgba(45,212,164,.13);--ac-line:rgba(45,212,164,.35);
  --warn:#f4b740;--warn-soft:rgba(244,183,64,.12);--warn-line:rgba(244,183,64,.42);
  --bad:#ef8a8a;--bad-soft:rgba(239,138,138,.1);
  --up:#3ad4a4;--down:#ef8a8a;--r:13px;--shadow:0 1px 0 rgba(255,255,255,.02),0 6px 22px -14px rgba(0,0,0,.65);
}
html,body{margin:0}
body{
  background:var(--bg);color:var(--tx);
  font:400 15px/1.5 'Hanken Grotesk',ui-sans-serif,system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;letter-spacing:-.005em;
  background-image:radial-gradient(1100px 520px at 80% -10%,rgba(45,212,164,.06),transparent 62%),
                   radial-gradient(760px 440px at 4% 2%,rgba(80,120,255,.045),transparent 60%);
  background-attachment:fixed;
}
.mono{font-family:'JetBrains Mono',ui-monospace,monospace;font-feature-settings:"tnum"}
.num{font-variant-numeric:tabular-nums;letter-spacing:-.01em}
a{color:inherit}button,input,select{font:inherit;color:inherit}
.wrap{max-width:1080px;margin:0 auto;padding:24px 22px 80px}
.reveal{opacity:0;transform:translateY(7px);animation:rise .5s cubic-bezier(.2,.7,.2,1) forwards}
@keyframes rise{to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.reveal{animation:none;opacity:1;transform:none}}
/* auth pages ONLY (body.auth on login/login_code) -- these element selectors were once
   inline on the standalone login page; scoping keeps them off the app shell's forms. */
body.auth{display:flex;min-height:100vh;align-items:center;justify-content:center}
body.auth form{background:linear-gradient(180deg,var(--panel2),var(--panel));padding:30px;border-radius:18px;
border:1px solid var(--bd);width:320px;box-shadow:var(--shadow)}
body.auth .brand{display:flex;align-items:center;gap:10px;margin-bottom:4px}body.auth .mark{width:26px;height:26px}
body.auth h1{font-size:17px;font-weight:600;margin:0;letter-spacing:-.02em}
body.auth .sub{color:var(--tx3);font-size:12.5px;margin:0 0 20px;letter-spacing:.02em}
body.auth input{width:100%;padding:12px 13px;border-radius:11px;border:1px solid var(--bd2);
background:var(--bg);color:var(--tx);margin-bottom:13px;outline:none;transition:border-color .15s}
body.auth input:focus{border-color:var(--ac-line)}
body.auth button{width:100%;padding:12px;border-radius:11px;border:0;background:var(--ac);color:#04150f;
font-weight:600;cursor:pointer;transition:transform .1s,filter .15s}
body.auth button:hover{filter:brightness(1.07)}body.auth button:active{transform:translateY(1px)}
body.auth .e{color:var(--bad);font-size:13px;margin-bottom:11px}
/* access page heading (in-shell) */
.content h1{font-size:18px;font-weight:700;margin:0 0 4px;letter-spacing:-.02em}
.back{display:inline-block;margin-bottom:22px;color:var(--tx3);font-size:13px;text-decoration:none}
.back:hover{color:var(--tx)}
.card{background:var(--panel);border:1px solid var(--bd);border-radius:var(--r);
box-shadow:var(--shadow);overflow:hidden;margin-bottom:22px}
.card-hd{padding:13px 16px;border-bottom:1px solid var(--bd);font-weight:600;font-size:13px;
display:flex;align-items:center;gap:10px}
.card-hd .tag{font-size:11px;color:var(--tx3);font-weight:500}
.row{display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--bd);font-size:13.5px}
.row:last-child{border-bottom:0}
.row .em{flex:1;word-break:break-all}
.row .note{color:var(--tx3);font-size:12px;flex:2}
.badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;
border:1px solid var(--ac-line);color:var(--ac2);background:var(--ac-soft)}
.addf{display:flex;gap:9px;flex-wrap:wrap;padding:13px 16px}
.addf input{padding:8px 11px;border-radius:9px;border:1px solid var(--bd2);
background:var(--bg);color:var(--tx);font:inherit;flex:1;min-width:160px}
.addf input:focus{outline:none;border-color:var(--ac-line)}
.btn{padding:7px 14px;border-radius:9px;border:1px solid var(--bd2);background:var(--raise);
color:var(--tx);cursor:pointer;font:inherit;font-size:13px;white-space:nowrap;
transition:background .15s}
.btn:hover{background:#252b36}
.btn.pri{background:var(--ac);border-color:transparent;color:#04150f;font-weight:600}
.btn.pri:hover{filter:brightness(1.08)}
.btn.danger{color:var(--bad);border-color:rgba(239,138,138,.38);font-size:12px;padding:4px 10px}
.empty{color:var(--tx3);font-size:13px;padding:12px 16px}
.top{display:flex;align-items:center;justify-content:space-between;gap:16px}
.brand{display:flex;align-items:center;gap:11px}.brand .mark{width:25px;height:25px}
.brand b{font-weight:700;letter-spacing:-.02em;font-size:16px}
.chip{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:600;
padding:4px 10px;border-radius:999px;border:1px solid var(--bd2);color:var(--tx2)}
.chip.live{color:var(--ac2);border-color:var(--ac-line);background:var(--ac-soft)}
.dot{width:7px;height:7px;border-radius:50%;background:currentColor}
.chip.live .dot{animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(45,212,164,.5)}70%{box-shadow:0 0 0 6px rgba(45,212,164,0)}100%{box-shadow:0 0 0 0 rgba(45,212,164,0)}}
@media (prefers-reduced-motion:reduce){.chip.live .dot{animation:none}}
.ghost{padding:6px 12px;border-radius:9px;border:1px solid var(--bd2);background:transparent;
color:var(--tx2);cursor:pointer;font-size:13px;transition:background .15s,color .15s}
.ghost:hover{background:var(--raise);color:var(--tx)}
.beat{display:flex;gap:20px;flex-wrap:wrap;align-items:center;margin:14px 0 24px;font-size:12.5px;color:var(--tx3)}
.beat b{color:var(--tx2);font-weight:500}.beat .lab{color:var(--tx3);margin-right:5px}
.sec{margin:26px 0 11px;display:flex;align-items:baseline;gap:10px}
.sec h2{font-size:12px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--tx2);margin:0}
.sec .tag{font-size:11.5px;color:var(--tx3)}
/* channel toggle (Google / Microsoft / All) */
.chtog{display:inline-flex;gap:2px;padding:3px;border:1px solid var(--bd);border-radius:99px;
background:var(--panel)}
.chtog a{font-size:12px;font-weight:600;color:var(--tx2);text-decoration:none;padding:5px 13px;
border-radius:99px;line-height:1}
.chtog a.on{color:var(--ac2);background:var(--ac-soft);border:1px solid var(--ac-line);padding:4px 12px}
.badge{font-size:10px;font-weight:600;color:var(--tx3);border:1px solid var(--bd);border-radius:99px;
padding:1px 6px;margin-left:7px;vertical-align:middle}
/* KPI strip — compact */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
.kpi{background:linear-gradient(180deg,var(--panel2),var(--panel));border:1px solid var(--bd);
border-radius:var(--r);padding:13px 15px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.kpi .lab{color:var(--tx2);font-size:12px;font-weight:500}
.kpi .big{font-size:25px;font-weight:700;margin-top:3px;letter-spacing:-.025em;line-height:1.05}
.kpi .unit{font-size:13px;color:var(--tx3);font-weight:500}
.kpi .meta{margin-top:5px;font-size:12px;color:var(--tx3)}
.delta{font-weight:600}.delta.up{color:var(--up)}.delta.down{color:var(--down)}
.bar{height:4px;border-radius:99px;background:var(--bd);margin-top:9px;overflow:hidden}
.bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--ac),var(--ac2))}
.kpi .spk{position:absolute;right:12px;bottom:11px;width:74px;height:22px;color:var(--ac-line)}
.kpi .spk.b{color:rgba(120,150,255,.42)}
.kpi .spk svg{display:block;width:100%;height:100%}
/* card + table */
.card{background:var(--panel);border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--shadow);overflow:hidden}
table.perf{width:100%;border-collapse:collapse;font-size:13.5px}
table.perf th{text-align:left;font-weight:500;color:var(--tx3);font-size:11.5px;text-transform:uppercase;
letter-spacing:.05em;padding:10px 16px;border-bottom:1px solid var(--bd)}
table.perf th.r,table.perf td.r{text-align:right}
table.perf td{padding:11px 16px;border-bottom:1px solid var(--bd);vertical-align:middle}
table.perf tr:last-child td{border-bottom:0}
table.perf tbody tr:hover{background:var(--panel2)}
.cname{font-weight:500}.num.r{font-variant-numeric:tabular-nums}
.sdot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:7px;vertical-align:1px}
.sdot.on{background:var(--ac)}.sdot.off{background:var(--tx3)}
.muted{color:var(--tx3)}
/* banner */
.banner{display:flex;align-items:center;gap:11px;border-radius:var(--r);padding:13px 16px;
border:1px solid var(--bd);background:var(--panel);font-size:13.5px;color:var(--tx2)}
.banner.clear{border-color:var(--ac-line);background:var(--ac-soft);color:var(--ac2)}
/* list items — dense */
.item{display:flex;justify-content:space-between;gap:14px;align-items:center;
padding:11px 16px;border-bottom:1px solid var(--bd)}
.item:last-child{border-bottom:0}
.item .ttl{font-size:13.5px;line-height:1.4}.item .sub{color:var(--tx3);font-size:11.5px;margin-top:2px}
.item.gate{border-left:2px solid var(--warn)}
.ctx{color:var(--ac2);font-weight:500}
.empty{color:var(--tx3);font-size:13px;padding:14px 16px}
.acts{display:flex;gap:7px;flex-shrink:0}
/* buttons */
.btn{padding:6px 12px;border-radius:8px;border:1px solid var(--bd2);background:var(--raise);
color:var(--tx);cursor:pointer;font-size:12.5px;transition:background .15s,filter .15s;white-space:nowrap}
.btn:hover{background:#252b36}
.btn.pri{background:var(--ac);border-color:transparent;color:#04150f;font-weight:600}
.btn.pri:hover{filter:brightness(1.08)}
.btn.danger{color:var(--bad);border-color:rgba(239,138,138,.38)}
.inline{display:inline}
/* controls */
.ctlrow{display:flex;align-items:center;gap:14px;padding:12px 16px;border-bottom:1px solid var(--bd);flex-wrap:wrap}
.ctlrow:last-child{border-bottom:0}
.ctlrow .name{font-weight:600;font-size:13.5px;min-width:120px}
.ctlrow .desc{color:var(--tx3);font-size:12px;flex:1;min-width:170px}
.state{font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:6px;padding:3px 9px;
border-radius:999px;border:1px solid var(--bd2);color:var(--tx3)}
.state.on{color:var(--ac2);border-color:var(--ac-line);background:var(--ac-soft)}
select.sel{padding:6px 10px;border-radius:8px;border:1px solid var(--bd2);background:var(--raise)}
.note{color:var(--tx3);font-size:11.5px;padding:10px 16px 13px}.note b{color:var(--tx2)}
.kp{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.02em;padding:2px 6px;
border-radius:5px;border:1px solid var(--bd2);color:var(--tx3)}
.kp.geo_waste,.kp.display_leak,.kp.wasted_spend{color:var(--bad);border-color:rgba(239,138,138,.3)}
.kp.geo_expansion,.kp.keyword_opportunity,.kp.structure_expand,.kp.structure_consolidate{color:var(--ac2);border-color:var(--ac-line)}
/* clustered lists (Opportunities + What it changed) */
details.grp{border-bottom:1px solid var(--bd)}
details.grp:last-child{border-bottom:0}
details.grp>summary{list-style:none;cursor:pointer;padding:12px 16px;display:flex;align-items:center;gap:11px}
details.grp>summary::-webkit-details-marker{display:none}
details.grp>summary:hover{background:var(--panel2)}
details.grp>summary .chev{color:var(--tx3);font-size:11px;transition:transform .15s;flex-shrink:0}
details.grp[open]>summary .chev{transform:rotate(90deg)}
.grp-name{font-weight:600;font-size:13.5px;white-space:nowrap}
.grp-n{color:var(--tx3);font-weight:500;font-size:12px}
.grp-peek{color:var(--tx3);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:60px}
.grp-body{background:rgba(0,0,0,.18);border-top:1px solid var(--bd)}
.grp-body .item{padding-left:43px}
.dispo{font-size:10px;letter-spacing:.03em;padding:2px 7px;border-radius:999px;border:1px solid var(--bd2);color:var(--tx3);white-space:nowrap}
.dispo.bot{color:var(--ac2);border-color:var(--ac-line)}
.dispo.you{color:var(--warn);border-color:var(--warn-line)}
.drow-when{color:var(--tx3);font-size:11.5px;white-space:nowrap;width:56px;flex-shrink:0}
.kp.runaway{color:var(--bad);border-color:rgba(239,138,138,.3)}
/* reference */
.refgrid{display:grid;grid-template-columns:1fr 1fr;gap:13px}
@media(max-width:760px){.refgrid{grid-template-columns:1fr}}
details.ref{background:var(--panel);border:1px solid var(--bd);border-radius:var(--r);overflow:hidden}
details.ref>summary{list-style:none;cursor:pointer;padding:12px 16px;font-weight:600;font-size:13px;
display:flex;justify-content:space-between;align-items:center;color:var(--tx)}
details.ref>summary::-webkit-details-marker{display:none}
details.ref>summary .cnt{color:var(--tx3);font-weight:500;font-size:12px}
details.ref>summary::after{content:"+";color:var(--tx3);font-size:15px;margin-left:8px}
details.ref[open]>summary::after{content:"\2212"}
details.ref>summary:hover{background:var(--panel2)}
.t{width:100%;border-collapse:collapse;font-size:12px}
.t td{padding:7px 16px;border-top:1px solid var(--bd);color:var(--tx2)}
.t td.r{text-align:right;color:var(--tx3);white-space:nowrap;font-variant-numeric:tabular-nums}
.dntbar{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--bd)}
.dntbar input{flex:1;padding:7px 10px;border-radius:8px;border:1px solid var(--bd2);background:var(--bg);color:var(--tx)}
s{color:var(--tx3)}
/* ── app shell ── */
.shell{display:grid;grid-template-columns:190px 1fr 260px;min-height:100vh;max-width:1400px;margin:0 auto}
.rail{border-right:1px solid var(--bd);padding:18px 10px;position:sticky;top:0;height:100vh}
.rail .logo{display:flex;align-items:center;gap:9px;padding:4px 10px 18px;font-weight:800;letter-spacing:-.02em}
.rail .logo img{width:22px;height:22px;border-radius:6px}
.rail nav a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;color:var(--tx2);font-size:13.5px;text-decoration:none;margin-bottom:2px}
.rail nav a.on{background:var(--raise);color:var(--tx);font-weight:600}
.rail nav a .b{margin-left:auto;font-size:10.5px;background:var(--warn);color:#161001;border-radius:999px;padding:1px 7px;font-weight:700}
.content{padding:20px 24px 80px;min-width:0}
.dock{border-left:1px solid var(--bd);padding:18px 14px;background:rgba(0,0,0,.16)}
.dock h3{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--warn);margin:0 0 12px;font-weight:700}
.dock .dcard{background:var(--panel);border:1px solid var(--bd);border-radius:11px;padding:13px;margin-bottom:10px;font-size:12.5px}
.dock .dcard .t{font-weight:600;line-height:1.4}
.dock .dcard .s{color:var(--tx3);font-size:11.5px;margin-top:4px;line-height:1.5}
.dock .opt{display:flex;gap:8px;align-items:flex-start;margin-top:8px;font-size:12px;color:var(--tx2)}
.dock .opt input{margin-top:3px}
.dock .opt .od{color:var(--tx3);font-size:11px}
.dock .dnote{width:100%;margin-top:8px;padding:6px 8px;border-radius:7px;border:1px solid var(--bd2);background:var(--bg);color:var(--tx);font-size:12px}
.dock .dcard button{margin-top:9px;font-size:11.5px;padding:6px 11px;border-radius:7px;border:0;background:var(--ac);color:#04231b;font-weight:700;cursor:pointer}
.dock .allgood{color:var(--tx3);font-size:12px;text-align:center;padding:16px 6px;border:1px dashed var(--bd2);border-radius:11px}
@media(max-width:960px){.shell{grid-template-columns:1fr}.rail{position:static;height:auto;border-right:0;border-bottom:1px solid var(--bd);padding:10px}
.rail nav{display:flex;overflow-x:auto;gap:2px}.rail .logo{padding-bottom:8px}.dock{border-left:0;border-top:1px solid var(--bd)}}
/* ── watchtower overview ── */
.verdict{font-size:19px;line-height:1.55;color:var(--tx2);max-width:640px;margin:6px 0 4px}
.verdict b{font-weight:700}.verdict.quiet b{color:var(--ac2)}.verdict.waiting b{color:var(--warn)}.verdict.attention b{color:var(--bad)}
.eyes{display:flex;gap:24px;padding:18px 0 6px;flex-wrap:wrap}
.eye{text-align:center;width:92px}
/* the eye is an SVG almond (pointed corners) -- a bordered div reads as a lozenge, not an eye.
   state lives on .eye as `color`; the paths inherit it via currentColor. */
.eye .iris{display:block;width:46px;height:29px;margin:0 auto;color:var(--ac)}
.eye .shut{display:none}
.eye.attention .iris{color:var(--warn)}
.eye.idle .iris{color:var(--tx3);opacity:.75}
.eye.idle .open{display:none}
.eye.idle .shut{display:inline}
.eye .k{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--tx3);margin-top:9px}
.eye .s{font-size:11.5px;color:var(--tx2);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.eye.attention .s{color:var(--warn)}
.midgrid{display:grid;grid-template-columns:250px 1fr;gap:14px;margin:14px 0}
@media(max-width:760px){.midgrid{grid-template-columns:1fr}}
.gauge{background:var(--panel);border:1px solid var(--bd);border-radius:var(--r);padding:16px;text-align:center}
.ring{width:140px;height:140px;margin:4px auto;border-radius:50%;display:flex;align-items:center;justify-content:center;
background:conic-gradient(var(--ac) var(--deg,18deg),#1d2229 var(--deg,18deg))}
.ring .in{width:110px;height:110px;border-radius:50%;background:var(--panel);display:flex;flex-direction:column;align-items:center;justify-content:center}
.ring .amt{font-size:23px;font-weight:800;font-variant-numeric:tabular-nums}
.ring .of{font-size:11px;color:var(--tx3)}
.gauge .cap{font-size:11px;color:var(--tx3);letter-spacing:.1em;text-transform:uppercase;margin-top:9px}
/* 14-day trend rows under the ring: ring answers "on budget?", these answer "what shape?" */
.gauge .trends{margin-top:14px;padding-top:13px;border-top:1px solid var(--bd);
display:flex;flex-direction:column;gap:12px;text-align:left}
.gauge .trend.spend{color:var(--ac)}
.gauge .trend.clicks{color:#7aa2ff}
.gauge .trend .th{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:3px}
.gauge .trend .tl{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--tx3)}
.gauge .trend .tv{font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums}
.gauge .trend .tv.up{color:var(--ac2)}.gauge .trend .tv.down{color:var(--bad)}
.gauge .trend .spark{display:block;width:100%;height:32px}
.ledge{background:var(--panel);border:1px solid var(--bd);border-radius:var(--r);overflow:hidden}
.ledge .lh{padding:11px 16px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--tx3);border-bottom:1px solid var(--bd);font-weight:700}
.lrow{display:flex;gap:12px;padding:10px 16px;border-bottom:1px solid #171b21;font-size:13px;align-items:baseline}
.lrow:last-child{border-bottom:0}
.lrow .when{color:var(--tx3);font-size:11.5px;width:52px;flex-shrink:0;font-variant-numeric:tabular-nums}
.lrow .who{margin-left:auto;font-size:10px;letter-spacing:.08em;text-transform:uppercase;padding:2px 8px;border-radius:999px;border:1px solid var(--bd2);color:var(--tx3);white-space:nowrap}
.lrow .who.bot{color:var(--ac2);border-color:var(--ac-line)}
.lrow .who.you{color:var(--warn);border-color:var(--warn-line)}
.standing{color:var(--tx3);font-size:12px;display:flex;gap:20px;flex-wrap:wrap;margin-top:18px}
.standing b{color:var(--tx2);font-weight:600}

/* budgets card: reuse the lever ctlrow, just make the amount input read as an input */
.ctlrow input[name="amount"]{padding:6px 9px;border-radius:8px;border:1px solid var(--bd2);
background:var(--bg);color:var(--tx);font:inherit;font-variant-numeric:tabular-nums;text-align:right}
.ctlrow input[name="amount"]:focus{outline:none;border-color:var(--ac-line)}
