/* CarAds — advertiser dashboard. Dark, because it sits beside a map all day. */

:root{
  --navy:#0d2134; --navy-2:#13293f; --surface:#16314b; --line:#28425b;
  --fog:#e6e6e6; --steel:#aabfcb; --dim:#7f97a8; --off:#6c8091;
  --orange:#e87d2d; --ok:#3fbf7f; --warn:#e8b52d; --bad:#e0524a;
  --font:"Barlow",Bahnschrift,"Segoe UI",system-ui,sans-serif;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  color-scheme:dark;
}

*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--navy);color:var(--fog);font-family:var(--font);font-size:15px;line-height:1.5}
button,select,input{font:inherit;color:inherit}
.boot{display:grid;place-items:center;height:100vh;color:var(--steel)}
.muted{color:var(--dim)}
.small{font-size:12.5px}
.strong{font-weight:600}

.logo{font-weight:700;font-size:25px;letter-spacing:.5px;color:var(--steel);line-height:1}
.logo b{color:var(--orange);font-weight:700}

button{background:var(--surface);border:1px solid var(--line);border-radius:9px;
  padding:8px 14px;cursor:pointer;transition:background .12s,border-color .12s}
button:hover{background:#1b3a58}
button:disabled{opacity:.55;cursor:default}
button.ghost{background:transparent}
button.ghost:hover{background:var(--surface)}
select{background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:8px 12px}

/* ---------------------------------------------------------------- login */
.login-wrap{display:grid;place-items:center;min-height:100vh;padding:24px}
.login{width:100%;max-width:370px;display:flex;flex-direction:column;gap:12px;
  background:var(--navy-2);border:1px solid var(--line);border-radius:14px;padding:30px 26px}
.login-sub{margin:0 0 6px;color:var(--steel);font-size:14px}
.login label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--steel)}
.login input{background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:11px 13px}
.login input:focus{outline:none;border-color:var(--orange)}
.login button[type=submit]{background:var(--orange);border:0;color:#2a1405;font-weight:600;padding:12px;margin-top:4px}
.login button[type=submit]:hover{filter:brightness(1.07)}
.login-foot{margin:4px 0 0;color:var(--dim);font-size:12px;line-height:1.5}
.error{background:#3a1c1c;border:1px solid #5a2a2a;color:#ffd7d2;border-radius:9px;padding:10px 13px;font-size:13.5px}
.error.wide{margin:0 22px}

/* ---------------------------------------------------------------- shell */
.shell{max-width:1480px;margin:0 auto;padding:18px 22px 40px;display:flex;flex-direction:column;gap:16px}
.top{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.brand .sub{color:var(--dim);font-size:13px;margin-top:3px}
.topright{display:flex;align-items:center;gap:10px}

.campaignbar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  background:var(--navy-2);border:1px solid var(--line);border-radius:12px;padding:12px 16px}
.camp{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.camp .k{font-size:10.5px;letter-spacing:1.4px;text-transform:uppercase;color:var(--dim)}
.camp .v{font-weight:600}
.periods{display:flex;gap:6px}
.periods button,.maptoggle button,.tabs button{padding:7px 13px;font-size:13.5px}
.periods button.on{background:var(--orange);border-color:var(--orange);color:#2a1405;font-weight:600}

.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.stat{background:var(--navy-2);border:1px solid var(--line);border-radius:12px;padding:16px 18px}
.stat .v{font-size:30px;font-weight:700;line-height:1.1;letter-spacing:-.5px}
.stat .k{font-size:10.5px;letter-spacing:1.4px;text-transform:uppercase;color:var(--dim);margin-top:5px}

.tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);padding-bottom:0}
.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent;
  color:var(--steel);padding:10px 14px}
.tabs button:hover{background:transparent;color:var(--fog)}
.tabs button.on{color:var(--fog);border-bottom-color:var(--orange);font-weight:600}

/* ---------------------------------------------------------------- map */
.live{display:grid;grid-template-columns:1fr 320px;gap:14px;min-height:560px}
.mapwrap{position:relative;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--navy-2)}
.map{position:absolute;inset:0}
.maplibregl-ctrl-attrib{background:rgba(13,33,52,.8)!important;color:var(--dim)!important;font-size:10px}
.maplibregl-ctrl-attrib a{color:var(--steel)!important}

.maptoggle{position:absolute;left:12px;bottom:12px;display:flex;gap:6px;z-index:2}
.maptoggle button{background:rgba(13,33,52,.88);backdrop-filter:blur(4px)}
.maptoggle button.on{background:var(--orange);border-color:var(--orange);color:#2a1405;font-weight:600}

/* Top-left, clear of both the zoom buttons and the attribution strip. */
.mapnote{position:absolute;left:12px;top:12px;z-index:2;font-size:11px;color:var(--warn);
  background:rgba(13,33,52,.88);border:1px solid #4a3c1a;border-radius:7px;padding:4px 9px}
.maperror,.mapempty{position:absolute;inset:auto 0 50% 0;text-align:center;z-index:2;
  display:flex;flex-direction:column;gap:5px;color:var(--steel);pointer-events:none}
.mapempty strong{font-size:15px;color:var(--fog)}
.mapempty span{font-size:13px;color:var(--dim)}
.maperror{color:var(--bad)}

.sidepanel{display:flex;flex-direction:column;gap:12px;min-width:0}
.panel{background:var(--navy-2);border:1px solid var(--line);border-radius:12px;padding:16px 18px}
.panel h3{margin:0 0 12px;font-size:12px;letter-spacing:1.3px;text-transform:uppercase;color:var(--steel);
  display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.panel h3 .count{font-size:11px;letter-spacing:0;text-transform:none;color:var(--dim)}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.panel-head h3{margin:0}

.carlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px;max-height:430px;overflow:auto}
.carlist li{display:flex;align-items:center;gap:10px;padding:9px 8px;border-radius:8px;cursor:pointer}
.carlist li:hover{background:var(--surface)}
.carlist .dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--off)}
.carlist .dot.on{background:var(--ok);box-shadow:0 0 0 3px rgba(63,191,127,.18)}
.carlist .plate{font-weight:600;font-size:14px;flex:1;min-width:0;unicode-bidi:isolate}
.carlist .meta{color:var(--dim);font-size:12px;white-space:nowrap}

/* ---------------------------------------------------------------- stats */
.stats-page{display:flex;flex-direction:column;gap:14px}

/* The chart is three stacked rows: a line marking the peak, the bars, then the
   labels. Keeping labels out of the bar box is what stops them overlapping the
   bars when a value is small. */
.chart{position:relative;padding-top:18px}
.peakline{position:absolute;inset:14px 0 auto 0;border-top:1px dashed #2b4a67}
.peakline span{position:absolute;right:0;top:-16px;font-size:10.5px;color:var(--dim)}
.bars{display:flex;align-items:flex-end;gap:5px;height:170px}
.bar{flex:1;min-width:0;height:100%;display:flex;align-items:flex-end}
.bar .fill{width:100%;background:linear-gradient(180deg,var(--orange),#b85f1d);
  border-radius:4px 4px 2px 2px;min-height:2px;transition:height .25s ease}
.labs{display:flex;gap:5px;margin-top:7px}
.labs span{flex:1;min-width:0;font-size:10px;color:var(--dim);text-align:center;white-space:nowrap;
  overflow:hidden}

.split{display:flex;flex-direction:column;gap:12px}
.splitbar{display:flex;height:13px;border-radius:999px;overflow:hidden;background:var(--surface)}
.splitbar .seg.moving{background:var(--orange)}
.splitbar .seg.dwell{background:#3c7fbf}
.legend{list-style:none;margin:0;padding:0;display:flex;gap:22px;flex-wrap:wrap;font-size:13.5px}
.legend li{display:flex;align-items:center;gap:8px}
.legend .sw{width:11px;height:11px;border-radius:3px}
.legend .sw.moving{background:var(--orange)}
.legend .sw.dwell{background:#3c7fbf}

.arealist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}
.arealist.compact{gap:9px}
.arealist.compact .arearow{font-size:13px;margin-bottom:4px}
.arealist.compact .track{height:5px}
.arearow{display:flex;justify-content:space-between;gap:12px;font-size:14px;margin-bottom:5px}
.arearow .val{color:var(--steel);font-variant-numeric:tabular-nums}
.track{height:6px;border-radius:999px;background:var(--surface);overflow:hidden}
.track .fill{height:100%;background:var(--orange);border-radius:999px}

.tablewrap{overflow:auto}
table{width:100%;border-collapse:collapse;font-size:14px}
th{text-align:left;font-size:10.5px;letter-spacing:1.3px;text-transform:uppercase;color:var(--dim);
  font-weight:500;padding:0 14px 9px 0;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:11px 14px 11px 0;border-bottom:1px solid #1d3a55;font-variant-numeric:tabular-nums}
tfoot td{border-bottom:0;border-top:1px solid var(--line);color:var(--steel);font-weight:600}
/* A plate is Arabic letters next to Latin digits. Isolating it stops the digits
   jumping to the wrong end of the string, and keeping it inline means the cell
   stays left-aligned with the rest of the table. */
.plate{font-weight:600;unicode-bidi:isolate;font-variant-numeric:normal;display:inline-block}

.empty{background:var(--navy-2);border:1px dashed var(--line);border-radius:12px;padding:40px 28px;text-align:center}
.empty h3{margin:0 0 8px;font-size:17px;color:var(--fog)}
.empty p{margin:0 auto;max-width:460px;color:var(--dim);font-size:13.5px}

.method{color:var(--dim);font-size:12.5px;line-height:1.75;border-top:1px solid var(--line);padding-top:14px;
  max-width:900px}
.method strong{color:var(--steel)}

/* ---------------------------------------------------------------- narrow */
@media (max-width:1000px){
  .live{grid-template-columns:1fr;min-height:0}
  .mapwrap{height:420px}
  .stats{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:560px){
  .shell{padding:14px 14px 32px}
  .stat .v{font-size:24px}
  .campaignbar{align-items:flex-start;flex-direction:column}
  .bars{height:150px}
}
