/* ============================================================
   /tracker — hub grid of live tracker cards.

   Each card leads with the LATEST ROUND (big line that flash-pops on a
   new result), then the six rounds before it as chips, the last-hour
   sparkline, and four "since X" drought cells in the game's own words.
   Same animation grammar as the homepage crash panel (cdsBustFlash /
   cdsChipIn) and the same chip palette as .cds-crash-chips. Values are
   printed server-side from /tracker/cards.json and repainted in place
   by assets/js/trackers-hub.js — nothing here depends on JS having run.
   Prefix: cdt-.
   ============================================================ */

/* ---- section rhythm — kept deliberately tight; the head above and the
        method notes below carry their own spacing. `section.` prefix is
        load-bearing: the parent's section.band (46-86px) out-specificises a
        bare class ---- */
section.cdt-band{padding-top:clamp(14px,1.6vw,22px);padding-bottom:clamp(6px,.9vw,12px)}
.cdt-band .sec-head{margin-bottom:14px}
.cdt-band .sec-head p{color:var(--dim);font-size:14.5px;max-width:70ch;margin:4px 0 0}
.cdt-count{
  margin-left:auto;flex:none;align-self:center;
  padding:6px 12px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);
  font-family:var(--font-mono);font-size:12.5px;color:var(--muted);white-space:nowrap;
}

/* ---- grid ---- */
.cdt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(288px,1fr));gap:14px}

/* ---- card ---- */
.cdt-card{
  --accent:var(--cyan);
  position:relative;display:flex;flex-direction:column;
  padding:14px 16px 0;border-radius:var(--r-lg);
  background:var(--surface);border:1px solid var(--line);
  color:var(--text);text-decoration:none;overflow:hidden;
  transition:transform .2s var(--ease),border-color .2s,box-shadow .2s;
}
.cdt-card::before{
  content:"";position:absolute;inset:0 0 auto;height:2px;
  background:linear-gradient(90deg,transparent,var(--accent),transparent);
  opacity:0;transition:opacity .2s;
}
a.cdt-card:hover{transform:translateY(-3px);border-color:var(--line-2);box-shadow:var(--shadow)}
a.cdt-card:hover::before{opacity:.7}
a.cdt-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

.cdt-top{display:flex;align-items:center;gap:10px}
.cdt-mark{
  width:38px;height:38px;flex:0 0 38px;border-radius:11px;overflow:hidden;
  display:grid;place-items:center;color:#fff;
  font-family:var(--font-display);font-weight:800;font-size:14px;letter-spacing:-.02em;
}
.cdt-mark img{width:100%;height:100%;object-fit:cover}
/* the state pill sits on the second line, not beside the title: names run to
   "Sweet Bonanza CandyLand" and a pill on the title row cost them 60px */
.cdt-id{min-width:0;flex:1}
.cdt-name{
  display:block;margin:0;font-size:15px;line-height:1.2;color:#fff;font-weight:700;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.cdt-meta{display:flex;align-items:center;gap:8px;margin-top:3px;min-width:0}
.cdt-sub{font-size:12.5px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cdt-state{
  margin-left:auto;flex:none;display:inline-flex;align-items:center;gap:5px;
  padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;
  color:var(--up);background:rgba(46,212,127,.09);border:1px solid rgba(46,212,127,.3);
}
.cdt-state i{
  width:5px;height:5px;border-radius:50%;background:currentColor;flex:none;
  box-shadow:0 0 0 3px rgba(46,212,127,.16);animation:cdsPulse 1.6s infinite;
}
.cdt-state.is-off{color:var(--amber);background:rgba(255,170,60,.09);border-color:rgba(255,170,60,.3)}
.cdt-state.is-off i{box-shadow:0 0 0 3px rgba(255,170,60,.16);animation:none}
.cdt-state.is-soon{color:var(--dim);background:var(--surface-2);border-color:var(--line)}
.cdt-state.is-soon i{box-shadow:none;animation:none;background:var(--dim)}

/* ---- latest result — the homepage crash panel's live line, per board ---- */
.cdt-last{display:flex;align-items:baseline;gap:9px;margin-top:13px;min-width:0}
.cdt-last-val{
  font-family:var(--font-mono);font-size:23px;font-weight:700;line-height:1.1;
  letter-spacing:-.02em;color:#fff;font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;
  transform-origin:left center;
}
.cdt-last-lbl{flex:none;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);font-weight:700}
.cdt-last-ago{margin-left:auto;flex:none;font-family:var(--font-mono);font-size:11.5px;color:var(--dim)}
.cdt-last-val.is-new{animation:cdtPop .5s var(--ease)}
@keyframes cdtPop{0%{transform:scale(1.16)}100%{transform:scale(1)}}

/* result colours — crash buckets match the homepage ticker/chips exactly */
.cdt-last-val.is-lo{color:#FF7A93}
.cdt-last-val.is-md{color:var(--amber)}
.cdt-last-val.is-hi{color:var(--cyan)}
.cdt-last-val.is-xh{color:#B49BFF}
.cdt-last-val.is-gg,.cdt-last-val.is-st{color:var(--gold)}
.cdt-last-val.is-bon{color:var(--accent)}
.cdt-last-val.is-r{color:#FF7A93}
.cdt-last-val.is-b{color:#E9EDF6}
.cdt-last-val.is-z{color:var(--up)}

/* ---- recent chips — six rounds, newest first, homepage chip palette ---- */
.cdt-recent{
  display:flex;gap:5px;flex-wrap:nowrap;overflow:hidden;margin-top:9px;min-height:23px;
  -webkit-mask-image:linear-gradient(90deg,#000 82%,transparent);
  mask-image:linear-gradient(90deg,#000 82%,transparent);
}
.cdt-chip{
  flex:0 0 auto;font-family:var(--font-mono);font-weight:700;font-size:10.5px;
  padding:3px 7px;border-radius:7px;
  background:var(--surface-2);border:1px solid var(--line);color:var(--muted);
}
.cdt-chip.is-lo{background:rgba(255,92,122,.13);border-color:rgba(255,92,122,.22);color:#FF7A93}
.cdt-chip.is-md{background:rgba(255,170,60,.13);border-color:rgba(255,170,60,.22);color:var(--amber)}
.cdt-chip.is-hi{background:rgba(79,199,234,.13);border-color:rgba(79,199,234,.22);color:var(--cyan)}
.cdt-chip.is-xh{background:rgba(155,109,255,.16);border-color:rgba(155,109,255,.26);color:#B49BFF}
.cdt-chip.is-gg,.cdt-chip.is-st{background:rgba(245,196,81,.15);border-color:rgba(245,196,81,.28);color:var(--gold)}
.cdt-chip.is-bon{
  background:color-mix(in srgb,var(--accent) 14%,transparent);
  border-color:color-mix(in srgb,var(--accent) 28%,transparent);
  color:var(--accent);
}
.cdt-chip.is-r{background:rgba(255,92,122,.13);border-color:rgba(255,92,122,.22);color:#FF7A93}
.cdt-chip.is-b{color:var(--text-2)}
.cdt-chip.is-z{background:rgba(46,212,127,.13);border-color:rgba(46,212,127,.24);color:var(--up)}
.cdt-chip.new{animation:cdtChipIn .35s var(--ease)}
@keyframes cdtChipIn{0%{opacity:0;transform:translateX(-8px)}100%{opacity:1;transform:none}}

/* ---- sparkline ---- */
.cdt-spark{display:block;width:100%;height:44px;margin-top:8px}
.cdt-spark path.l{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.cdt-spark path.a{opacity:.18}
.cdt-spark .cdt-spark-empty{fill:none;stroke:var(--line-2);stroke-width:2;stroke-dasharray:4 6;opacity:.7}

/* ---- drought tiles — "since X" in each game's own words. Value-first
        boxes; the value colour cycles the mockup's blue/teal/green/pink by
        position, the box itself carries the state: green = just landed,
        amber ring = drought past 1.5x that outcome's observed mean gap ---- */
.cdt-due{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;
  margin-top:10px;padding-bottom:12px;
}
.cdt-due-cell{
  display:flex;flex-direction:column;gap:1px;min-width:0;
  padding:7px 10px 8px;border-radius:10px;
  background:var(--surface-2);border:1px solid var(--line);
}
.cdt-due-cell b{
  font-family:var(--font-mono);font-size:16px;font-weight:700;color:var(--text-2);
  font-variant-numeric:tabular-nums;line-height:1.2;
}
.cdt-due-cell span{
  font-size:9.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;
  color:var(--dim);line-height:1.4;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.cdt-due-cell:nth-child(4n+1) b{color:#8E9CFF}
.cdt-due-cell:nth-child(4n+2) b{color:#58D6C9}
.cdt-due-cell:nth-child(4n+3) b{color:var(--up)}
.cdt-due-cell:nth-child(4n+4) b{color:#FF6FB2}
.cdt-due-cell.is-hit{border-color:rgba(46,212,127,.45);background:rgba(46,212,127,.07)}
.cdt-due-cell.is-hit b{color:var(--up)}
.cdt-due-cell.is-due{border-color:rgba(255,170,60,.5)}

/* ---- footer button ---- */
.cdt-cta{
  display:flex;align-items:center;gap:10px;margin-top:auto;
  padding:10px 16px;margin-inline:-16px;
  border-top:1px solid var(--line);background:rgba(255,255,255,.014);
  font-size:13px;font-weight:600;color:var(--text-2);
}
.cdt-cta-arrow{margin-left:auto;color:var(--accent);transition:transform .18s var(--ease)}
a.cdt-card:hover .cdt-cta{color:#fff;background:rgba(255,255,255,.04)}
a.cdt-card:hover .cdt-cta-arrow{transform:translateX(3px)}

/* paused board — collector is not publishing right now */
.cdt-card.is-off .cdt-last-val,.cdt-card.is-off .cdt-spark,.cdt-card.is-off .cdt-recent{opacity:.45}

/* reserved tile */
.cdt-card--soon{opacity:.72;padding-bottom:14px}
.cdt-mark--soon{background:var(--surface-2);border:1px dashed var(--line-2);color:var(--dim);font-size:18px}
.cdt-soon-copy{margin:12px 0 0;font-size:13px;color:var(--dim);line-height:1.5}

/* ---- data note — one small honesty footnote under the grid ---- */
section.cdt-notes{padding-top:clamp(16px,1.8vw,26px);padding-bottom:clamp(34px,3.8vw,54px)}
.cdt-datanote{
  padding:14px 18px;border-radius:var(--r);
  background:var(--surface);border:1px solid var(--line);
  max-width:900px;
}
.cdt-datanote b{
  display:block;font-family:var(--font-display);font-weight:700;font-size:13px;
  letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:5px;
}
.cdt-datanote p{margin:0;font-size:13px;line-height:1.6;color:var(--dim)}

@media (max-width:640px){
  .cdt-grid{grid-template-columns:1fr}
  .cdt-count{display:none}
}
@media (prefers-reduced-motion:reduce){
  .cdt-state i{animation:none}
  a.cdt-card:hover{transform:none}
  .cdt-last-val.is-new,.cdt-chip.new{animation:none}
}
