/* Trajectory (single match) — scoreboard, chat thread, Sublime-style minimap */

/* headline: defeated team keeps its own team color, hand-struck by a slightly
   inclined cross-out in the winner's color (--cross tilt, --crossc color) */
.headline .defeat{position:relative;display:inline-block;white-space:nowrap}
.headline .defeat::after{content:"";position:absolute;left:-2%;right:-2%;top:54%;
  border-top:13px solid var(--crossc,var(--ink));transform:rotate(var(--cross,-4deg));
  opacity:.82;pointer-events:none;
  /* wipe the strike in left->right after load (ease-in), via a clip that keeps the rotate */
  clip-path:inset(0 100% 0 0);animation:strike .3s ease-in .18s both}
@keyframes strike{to{clip-path:inset(0 0 0 0)}}
@media (prefers-reduced-motion:reduce){.headline .defeat::after{animation:none;clip-path:none}}

/* ---- scoreboard ---- */
.board{display:grid;grid-template-columns:1fr 80px 1fr;align-items:stretch;margin:24px 0 10px;border:2px solid var(--ink);background:var(--paper2)}
.side{padding:16px 22px}
.side.win{color:var(--paper)}
/* the winner's tile wears the entrant's OWN colour (--own, set per side by
   trajectory.js) — the one exception to this page's blue/pink seat theme */
.side.win.t1{background:var(--own,var(--t1,var(--blue)))}
.side.win.t2{background:var(--own,var(--t2,var(--pink)))}
.side.t2{text-align:right}
.side .nm{font-size:22px;font-weight:900;text-transform:uppercase;letter-spacing:-.5px}
.side .md{font-family:'JetBrains Mono',monospace;font-size:12px;opacity:.85;margin-top:2px}
.side .pts{font-size:64px;font-weight:900;line-height:.95}
.side .br{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:1px;margin-top:4px}
.mid{display:grid;place-items:center;background:var(--ink);color:var(--paper);font-weight:900;font-size:18px;text-transform:uppercase;letter-spacing:1px}
.stampwin{display:inline-block;border:2px solid currentColor;font-weight:900;font-size:11px;padding:3px 10px;transform:rotate(-5deg);letter-spacing:1px;margin-bottom:6px}

/* ---- thread + minimap shell ---- */
.threadwrap{display:flex;gap:14px;margin-top:16px}
.chat{position:relative;flex:1;min-width:0;height:72vh;min-height:460px;overflow-y:auto;padding:22px 20px;background:var(--paper2);border:2px solid var(--ink)}
.chat::-webkit-scrollbar{width:10px}
.chat::-webkit-scrollbar-thumb{background:#d9d3c6;border-radius:6px}

/* ---- per-team minimaps ---- */
.minis{display:flex;gap:8px;flex:none}
.minimap{display:flex;flex-direction:column;width:46px;height:72vh;min-height:460px;border:2px solid var(--ink);background:#efe9dc}
.mm-head{flex:none;height:20px;display:grid;place-items:center;font-weight:900;font-size:10px;letter-spacing:.5px;color:#fff;border-bottom:2px solid var(--ink)}
.minimap[data-team="team1"] .mm-head{background:var(--t1,var(--blue))}
.minimap[data-team="team2"] .mm-head{background:var(--t2,var(--pink))}
.mm-body{position:relative;flex:1;overflow:hidden;cursor:pointer;user-select:none}
.mm-body .marks{position:absolute;inset:0}
.mk{position:absolute;left:50%;transform:translate(-50%,-50%);pointer-events:none}
.mk.turn{width:20px;height:2px;opacity:.4}
.minimap[data-team="team1"] .mk.turn{background:var(--t1,var(--blue))}
.minimap[data-team="team2"] .mk.turn{background:var(--t2,var(--pink))}
.mk.capture{width:14px;height:14px;border:2px solid var(--ink);box-shadow:1px 1px 0 rgba(0,0,0,.25)}
.minimap[data-team="team1"] .mk.capture{background:var(--t1,var(--blue))}
.minimap[data-team="team2"] .mk.capture{background:var(--t2,var(--pink))}
.mk.dup{width:9px;height:9px;border:2px solid var(--mut);background:transparent}
/* several events on one pixel of the bar: one square, a count on its shoulder */
.mk.patch{width:10px;height:10px;border:2px solid var(--green);background:transparent}
.mk.round{left:0;right:0;transform:translateY(-50%);height:0;border-top:2px solid #c3b9a3}
.mm-view{position:absolute;left:0;right:0;background:rgba(26,26,26,.07);border-top:2px solid var(--ink);border-bottom:2px solid var(--ink);pointer-events:none;min-height:14px}

/* minimap legend */
.mm-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:11px;color:#6f6657;margin:10px 2px 0}
.mm-legend i{display:inline-block;vertical-align:middle;margin-right:5px}
.mm-legend .s{width:11px;height:11px;border:2px solid var(--ink)}
/* team-capture swatch colors come from inline style (the duo/team color); only
   the patch (.g) and duplicate (.d) swatches are styled here */
.mm-legend .s.d{border-color:var(--mut)}.mm-legend .s.g{border-color:var(--green);background:transparent}

/* ---- round divider (in thread) ---- */
.day{display:flex;align-items:center;gap:12px;margin:22px 0 16px;color:#b3aa98}
.day::before,.day::after{content:"";height:2px;background:var(--line);flex:1}
.day span{font-family:'Hanken Grotesk';font-weight:900;font-size:11px;letter-spacing:2px;text-transform:uppercase;color:#a59a84;white-space:nowrap}

/* ---- chat messages ---- */
.msg{display:flex;gap:10px;margin:14px 0;max-width:82%}
.msg.right{flex-direction:row-reverse;margin-left:auto}
.ava{width:46px;height:46px;flex:none;border:2px solid var(--ink);display:grid;place-items:center;font-weight:900;font-size:13px;color:#fff;box-shadow:2px 2px 0 var(--ink)}
.msg.team1 .ava{background:var(--t1,var(--blue))}
.msg.team2 .ava{background:var(--t2,var(--pink))}
.bub{border:2px solid var(--ink);border-radius:16px;padding:10px 14px;background:var(--paper);box-shadow:3px 3px 0 var(--ink)}
.msg.team1 .bub{border-bottom-left-radius:4px}
.msg.team2 .bub{border-bottom-right-radius:4px}
.bh{display:flex;gap:10px;align-items:baseline;margin-bottom:4px}
.msg.right .bh{flex-direction:row-reverse}
.who{font-weight:900;font-size:13px;text-transform:uppercase;letter-spacing:.3px}
.msg.team1 .who{color:var(--t1,var(--blue))}
.msg.team2 .who{color:var(--t2,var(--pink))}
.tm{font-family:'JetBrains Mono',monospace;font-size:11px;color:#a59a84}
.think{font-size:15.5px;line-height:1.45;overflow-wrap:anywhere}
/* A behaviour summary is OUR prose about what the agent did, not the agent's
   own reasoning — so it must not look like the thinking it replaces. */
.think.summary{font-size:14px;background:#f4f1ff;border-left:2px solid var(--purple);
  padding:7px 10px;border-radius:0 6px 6px 0}
.think.summary .sumlbl{display:block;font:800 9px/1 'Hanken Grotesk';letter-spacing:1.2px;
  text-transform:uppercase;color:var(--purple);margin-bottom:4px}
.acts{margin-top:8px;display:flex;flex-direction:column;gap:6px}
.act{border:2px solid var(--ink);border-left-width:4px;border-radius:6px;background:#fbf8f1;padding:5px 9px}
.act .al{font-family:'Hanken Grotesk';font-weight:800;font-size:9px;letter-spacing:1.2px;text-transform:uppercase;color:#9a8f78;display:block;margin-bottom:2px}
.act code{font-family:'JetBrains Mono',monospace;font-size:11.5px;line-height:1.35;color:#2a2a2a;word-break:break-word;display:block;white-space:pre-wrap}
.act.bash{border-left-color:var(--blue)}
.act.mcp{border-left-color:var(--purple)}
.act.web{border-left-color:var(--pink)}

/* ---- system events in thread ---- */
.sys{margin:18px auto;text-align:center;max-width:560px;font-size:14px;font-weight:700}
.sys .tm{display:block;margin-top:3px}
.sys.steal{border:2px solid var(--t1,var(--blue));color:var(--t1,var(--blue));padding:9px 16px;transform:rotate(-.6deg);box-shadow:4px 4px 0 rgba(0,0,0,.12)}
.sys.steal.team2{border-color:var(--t2,var(--pink));color:var(--t2,var(--pink))}
.sys.steal b{font-weight:900}
.sys.dup{color:#a89f8d;font-weight:600;text-decoration:line-through;font-size:13px;max-width:520px}
.sys.patch{color:#6f6657;border:2px dashed #c5bca8;padding:7px 14px;border-radius:30px;font-size:13px;display:inline-block}
.patchwrap{text-align:center;margin:14px 0}

@media(max-width:760px){
  .board{grid-template-columns:1fr}
  .mid{padding:8px}
  .side.t2{text-align:left}
  .msg{max-width:94%}
  .threadwrap{gap:8px}
  .minimap{width:30px}
  .mk.turn{width:14px}
}

/* time budget — per-team think / tool / idle split (ported from benchmark_report) */
.metrics{border:2px solid var(--ink);background:var(--paper);box-shadow:4px 4px 0 var(--ink);padding:12px 14px;margin:14px 0}
.metrics:empty{display:none}
.mhead{font:800 12px/1.3 'Hanken Grotesk',sans-serif;margin-bottom:9px}
.mhead .msub{display:block;font:400 10px/1.4 'JetBrains Mono',monospace;color:#6b6255;margin-top:3px}
.mt-think-t{color:var(--blue)}.mt-tool-t{color:#e08a1e}.mt-un-t{color:#9a8f78}
.mrow{display:grid;grid-template-columns:130px 1fr;gap:4px 10px;align-items:center;margin:7px 0}
.mlbl{font:800 12px/1 'Hanken Grotesk',sans-serif;grid-row:span 2}
.mbar{display:flex;height:16px;border:2px solid var(--ink);overflow:hidden;background:var(--paper2)}
.mseg{display:flex;align-items:center;justify-content:center;font:700 9px/1 'JetBrains Mono',monospace;color:#fff;overflow:hidden;white-space:nowrap}
.mseg.mt-think{background:var(--blue)}.mseg.mt-tool{background:#e08a1e}.mseg.mt-un{background:#c3b9a3;color:#3a3327}
.mnum{grid-column:2;font:600 11px/1.3 'JetBrains Mono',monospace;color:#4a4436}
@media(max-width:680px){.mrow{grid-template-columns:1fr}.mlbl{grid-row:auto}.mnum{grid-column:1}}

/* ---- integration: status chips + analysis panel ---- */
.live-chip{display:inline-block;font:800 11px/1 'JetBrains Mono',monospace;color:var(--paper);
  background:var(--pink);border:2px solid var(--ink);border-radius:20px;padding:3px 8px;vertical-align:middle;
  animation:livepulse 1.4s ease-in-out infinite}
.live-chip i{font-size:6px;vertical-align:2px}
/* elapsed time inside the LIVE chip — tabular so the seconds digit does not
   shift the chip's width once a second while it ticks */
.live-el{font-variant-numeric:tabular-nums;opacity:.85;margin-left:1px}
.fail-chip{display:inline-block;font:800 11px/1 'JetBrains Mono',monospace;color:var(--paper);
  background:#8a8378;border:2px solid var(--ink);border-radius:20px;padding:3px 8px;vertical-align:middle}
/* hint-mode chip (challenge level); hard is the default, untagged */
.mode-chip{display:inline-block;font:800 11px/1 'JetBrains Mono',monospace;border:2px solid var(--ink);
  border-radius:20px;padding:3px 8px;vertical-align:middle}
.mode-chip.hint{background:var(--purple);color:var(--paper)}
/* Redacted entrant. ONE sticker per match, on the competitor it describes —
   stamped and tilted like .stampwin rather than rounded like the live/hint
   chips, because it is a note from the organisers about what this document
   withholds, not a fact about the match. Sized to be read, not to be found:
   it has to carry the one thing a reader needs to not misread the thread. */
 /* The sticker sits on the side FACING THE CENTRE of the board — the right
   edge of team1's half, the left edge of team2's — so the two stickers of a
   double-redacted match read as a pair near the divider instead of being
   pushed out to opposite margins. */
.redwrap{margin-top:9px}
.side.t1 .redwrap{text-align:right}
.side.t2 .redwrap{text-align:left}
/* Two lines inside: the word, then the reason under it. Stacked rather than
   strung out in a row, so the badge stays a compact stamp beside the divider
   instead of a wide strip across the half. */
.redseat{display:inline-block;max-width:100%;padding:6px 11px 6px;
  border:2px solid var(--ink);border-radius:3px;background:var(--paper);
  color:var(--ink);transform:rotate(-3deg);box-shadow:3px 3px 0 var(--purple);
  cursor:help;text-align:left}
.redseat b{display:block;font:900 15px/1.05 'JetBrains Mono',monospace;
  text-transform:uppercase;letter-spacing:1.2px}
.redseat span{display:block;font:700 9.5px/1.2 'Hanken Grotesk';
  text-transform:uppercase;letter-spacing:.9px;color:var(--purple);margin-top:3px}
.redseat i{float:left;margin:4px 7px 0 0;font-size:14px}
/* The explanation: a styled block ABOVE the sticker, shown on hover and on
   keyboard focus. Anchored to the side's own edge rather than centred on the
   sticker — team2's half is right-aligned, so a centred block would hang off
   the board — and the arrow follows that edge. */
.redseat{position:relative}
.redtip{position:absolute;bottom:calc(100% + 11px);z-index:20;
  width:max-content;max-width:min(330px,78vw);
  padding:11px 13px;background:var(--paper);border:2px solid var(--ink);
  box-shadow:4px 4px 0 var(--ink);transform:rotate(3deg);
  font:500 12.5px/1.5 'Hanken Grotesk';color:var(--ink);text-align:left;
  text-transform:none;letter-spacing:0;white-space:normal;
  opacity:0;visibility:hidden;transition:opacity .14s ease,visibility .14s}
.redseat:hover .redtip,.redseat:focus .redtip,.redseat:focus-within .redtip{
  opacity:1;visibility:visible}
.redtip b{display:inline;font:800 12.5px/1.5 'Hanken Grotesk';text-transform:none;letter-spacing:0}
/* the sentence a reader actually needs off a masked thread */
.redtip mark{display:block;margin:7px 0;padding:5px 7px;background:var(--purple);
  color:var(--paper);font-weight:800}
/* the arrow, drawn as two stacked squares so it keeps the 2.5px ink outline */
.redtip::after{content:'';position:absolute;top:100%;width:11px;height:11px;
  background:var(--paper);border-right:2px solid var(--ink);
  border-bottom:2px solid var(--ink);transform:translateY(-6px) rotate(45deg)}
.side.t1 .redtip{right:0}
.side.t1 .redtip::after{right:24px}
.side.t2 .redtip{left:0}
.side.t2 .redtip::after{left:24px}
/* a won side is printed on the team colour; the block stays on paper */
.side.win .redtip{color:var(--ink)}
@keyframes livepulse{50%{opacity:.45}}

/* freshly-streamed live turns/events fade + slide in so growth is visible */
.fresh{animation:freshin .5s ease-out}
@keyframes freshin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* analysis: a GRID OF CARDS, one module per card, not one filled block */
.analysis{margin:22px 0}
.an-sech{font-weight:900;font-size:18px;text-transform:uppercase;letter-spacing:-.3px;
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;
  padding-bottom:8px;margin-bottom:16px}
.an-valid{font:700 12px/1 'JetBrains Mono',monospace;padding:4px 8px;border:2px solid var(--ink);border-radius:20px}
.an-valid.warn{background:var(--pink);color:#fff}
.an-fail-note{font-size:14px;line-height:1.55;color:#6a6456;margin:0;padding:14px 16px;
  border:2px solid var(--ink);background:var(--paper2);box-shadow:5px 5px 0 #b0472e}
.an-cards{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.an-card{border:2px solid var(--ink);background:var(--paper2);box-shadow:5px 5px 0 var(--ink);
  padding:14px 16px 16px;min-width:0}
.an-card.wide{grid-column:1/-1}
.an-card.t1{box-shadow:5px 5px 0 var(--t1,var(--blue))}
.an-card.t2{box-shadow:5px 5px 0 var(--t2,var(--pink))}
/* the black block: TLDR (validity) over details (headline), horizontal divider */
.an-card.lede{grid-column:1/-1;background:var(--ink);color:var(--paper);line-height:1.55;
  display:flex;flex-direction:column;gap:13px}
/* verdict tints the block: green when VALID, purple when INVALID */
.an-card.lede.v-ok{box-shadow:5px 5px 0 var(--green)}
.an-card.lede.v-bad{box-shadow:5px 5px 0 var(--purple)}
.an-card.lede .tldr-cap{font-size:14px;font-weight:600;line-height:1.5;color:var(--paper)}
/* white chip: "TLDR" label + the verdict word, both on paper (readable) */
.an-card.lede .tldr{display:inline-block;font:800 10px/1 'JetBrains Mono',monospace;letter-spacing:1px;
  color:var(--ink);background:var(--paper);padding:4px 8px;margin-right:9px;vertical-align:1px}
.an-card.lede .verdict{font-family:'Hanken Grotesk',sans-serif;font-weight:900;letter-spacing:.5px;font-size:12px;margin-left:7px}
.an-card.lede .verdict.ok{color:var(--green)}
.an-card.lede .verdict.warn{color:var(--purple)}
/* horizontal white divider between TLDR and details */
.an-card.lede .lede-div{height:2px;background:var(--paper);opacity:.85}
.an-card.lede .lede-details{margin:0;font-size:13.5px;font-weight:600;color:var(--paper);opacity:.9;line-height:1.6}
.an-card h4{font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;
  margin:0 0 10px;padding-bottom:8px;border-bottom:2px dashed #d8cfbc;color:#4a4436}
.an-card.note p{font-size:13px;line-height:1.55;margin:0}
.an-key{font:600 10px/1 'JetBrains Mono',monospace;color:#8a8378;text-transform:none;letter-spacing:0}
.an-list{list-style:none;padding:0;margin:0;font-size:13px}
.an-list li{padding:5px 0;border-bottom:2px dashed var(--line);line-height:1.4}
.an-list li.none{color:#8a8378;font-style:italic}
.cls{display:inline-block;font:800 11px/1 'JetBrains Mono',monospace;color:#fff;border:2px solid var(--ink);
  border-radius:4px;padding:2px 5px;margin-right:4px}
.cls-A{background:var(--pink)}.cls-B{background:#e08a1e}.cls-C{background:var(--purple)}
/* hover popup explaining the A/B/C class */
.cls[data-tip]{position:relative;cursor:help}
.cls[data-tip]:hover::after{content:attr(data-tip);position:absolute;left:0;bottom:calc(100% + 9px);z-index:20;
  width:max-content;max-width:240px;white-space:normal;text-align:left;
  font:600 11px/1.45 'Hanken Grotesk',sans-serif;letter-spacing:0;color:var(--paper);background:var(--ink);
  padding:8px 10px;border:2px solid var(--ink);box-shadow:3px 3px 0 var(--pink)}
.cls[data-tip]:hover::before{content:"";position:absolute;left:10px;bottom:calc(100% + 3px);z-index:21;
  border:6px solid transparent;border-top-color:var(--ink)}
.flagv{font:700 11px/1 'JetBrains Mono',monospace;padding:2px 6px;border:2px solid var(--ink);border-radius:4px;margin-right:4px}
.flagv.ok{background:var(--green);color:#fff}.flagv.warn{background:var(--pink);color:#fff}
.urow{display:grid;grid-template-columns:140px 1fr auto;gap:10px;align-items:center;margin:6px 0}
.ulbl{font-weight:700;font-size:13px}
.ubar{display:flex;height:16px;border:2px solid var(--ink);overflow:hidden;background:var(--paper)}
.useg.u-a{background:var(--green)}.useg.u-b{background:#e08a1e}.useg.u-c{background:#c3b9a3}
.unum{font:600 11px/1 'JetBrains Mono',monospace;color:#4a4436}
@media(max-width:680px){.an-cards{grid-template-columns:1fr}.urow{grid-template-columns:1fr auto}}

/* ---- manual analysis trigger — square block at the RIGHT end of the verdict
   line. Hard offset shadow + press-to-collapse, matching .nav-burger / .gcard.
   States mirror the midend FSM (GET /api/runs/{id}/analysis .status):
     not_triggered -> "analyse", clickable    working_on -> "analysing", greyed
     ready | analysis_failure | not_available -> hidden                       */
.headline{display:flex;align-items:baseline;justify-content:space-between;gap:20px}
.hl-acts{flex:0 0 auto;align-self:center;display:flex;align-items:stretch;gap:12px}
.hl-acts > span{display:flex}
/* the like star as a block, the same size and print as .an-btn beside it */
.like.like-btn{font-size:13px;color:var(--ink);background:var(--paper2);border:2px solid var(--ink);
  box-shadow:3px 3px 0 var(--ink);padding:8px 14px;gap:7px;justify-content:center;min-width:44px;
  transition:transform .12s ease, box-shadow .12s ease}
.like.like-btn:hover{transform:translate(-1px,-1px);box-shadow:5px 5px 0 var(--ink)}
.like.like-btn:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}
.like.like-btn .like-plus{left:12px;top:-2px}
.an-btn{flex:0 0 auto;align-self:center;font-family:inherit;font-weight:800;
  font-size:13px;letter-spacing:.4px;text-transform:lowercase;white-space:nowrap;
  background:var(--paper2);color:var(--ink);border:2px solid var(--ink);border-radius:0;
  box-shadow:3px 3px 0 var(--ink);padding:8px 18px;cursor:pointer;
  transition:transform .12s ease, box-shadow .12s ease, background .12s, color .12s}
.an-btn:hover:not(:disabled){transform:translate(-1px,-1px);box-shadow:5px 5px 0 var(--ink)}
.an-btn:active:not(:disabled){transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}
/* working_on — "analysing": same block, greyed and unpressable */
.an-btn:disabled{border-color:var(--mut);color:var(--mut);background:var(--paper);
  box-shadow:3px 3px 0 var(--mut);cursor:default;transform:none}
.an-btn.an-retry{border-color:var(--pink);color:var(--pink);box-shadow:3px 3px 0 var(--pink)}
.an-btn.an-retry:hover:not(:disabled){box-shadow:5px 5px 0 var(--pink)}
.an-btn[hidden]{display:none}
@media(max-width:560px){.headline{gap:12px;flex-wrap:wrap}
  .hl-acts{margin-left:auto}
  .hl-acts{gap:8px}
  .like.like-btn{font-size:12px;padding:7px 11px;box-shadow:2px 2px 0 var(--ink)}
  .an-btn{font-size:12px;padding:7px 14px;box-shadow:2px 2px 0 var(--ink)}
  .an-btn:disabled{box-shadow:2px 2px 0 var(--mut)}}

/* ---- unparseable run: the thread cannot be reconstructed ---- */
.thread-unavailable{border:2px dashed var(--mut);padding:26px 22px;margin:8px 0;
  background:var(--paper2);color:var(--ink)}
.thread-unavailable h3{font-weight:900;font-size:19px;letter-spacing:-.3px;margin-bottom:8px}
.thread-unavailable p{font-size:14.5px;line-height:1.55;max-width:60ch}
.thread-unavailable .tu-note{margin-top:10px;color:var(--mut);font-size:13px}

/* ---- per-round board: flag outcome + service health, every round ---- */
/* a label like every section head on the site: no rule of its own */
.rounds{margin:40px 0 4px}
.rounds .rhead{display:flex;align-items:baseline;gap:10px;font-size:12px;font-weight:800;color:#7a7468;
  text-transform:uppercase;letter-spacing:1.5px}
.rounds .rhead .svc{font-family:'JetBrains Mono',monospace;font-weight:500;
  text-transform:none;letter-spacing:0;color:#6f6657}

/* legend: the two measures a segment stacks, in the same shapes it draws */
.rblegend{display:flex;align-items:center;gap:14px;margin:8px 0 10px;
  font-size:11px;color:#6f6657;font-family:'JetBrains Mono',monospace}
.rblegend span{display:flex;align-items:center;gap:5px}
.rblegend em{font-style:normal;color:#9a917f}
.rblegend .k{width:9px;height:12px;border:2px solid var(--ink);display:inline-block}
.rblegend .k.flagon{background:var(--ink)}
.rblegend .k.flagoff{background:var(--paper)}
.rblegend .k.svc{background:var(--green)}
.rblegend .rbhint{margin-left:auto}
/* one line per team: label, then a segment per round */
.rbline{display:grid;grid-template-columns:minmax(92px,150px) 1fr;align-items:center;
  gap:12px;padding:6px 0}
.rbline .rbteam{font-weight:700;font-size:13px;line-height:1.25;padding-left:9px;
  border-left:5px solid transparent;overflow-wrap:anywhere}
.rbline.t1 .rbteam{border-left-color:var(--t1,var(--blue))}
.rbline.t2 .rbteam{border-left-color:var(--t2,var(--pink))}
.rbsegs{display:flex;gap:10px;overflow-x:auto;padding-bottom:2px}
.rbseg{flex:1 1 0;min-width:54px;display:flex;flex-direction:column;
  align-items:stretch;gap:3px;cursor:pointer;outline-offset:3px;
  padding-bottom:4px;border-bottom:2px solid transparent}
/* the round the thread below is currently showing */
.rbseg.on{border-bottom-color:var(--ink)}

/* a bar is a TRACK (the round happened) + a fill (how much of it held), so 0%
   still shows its slot instead of vanishing */
.rbbars{display:flex;align-items:flex-end;gap:5px;height:31px;width:100%}
.rbflag{flex:0 0 11px;height:100%;border:2px solid var(--ink);background:var(--paper)}
.rbflag + .rbflag{margin-left:-2px}   /* several flags read as one group of marks */
.rbline.t1 .rbflag.on{background:var(--t2,var(--pink))}
.rbline.t2 .rbflag.on{background:var(--t1,var(--blue))}
.rbline.solo .rbflag.on{background:var(--ink)}
.rbflag.nd{border-style:dotted;border-color:#c3b9a3}
.rbbar{position:relative;flex:1 1 0;height:100%;
  border:2px solid var(--ink);background:var(--paper);display:block}
/* the service reading, centred in the block */
.rbbar b{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);
  text-align:center;font-size:10px;font-weight:700;line-height:12px;
  font-family:'JetBrains Mono',monospace}
.rbbar b.in{color:var(--paper)}
.rbbar b.out{color:var(--ink)}
.rbbar i{position:absolute;left:0;right:0;bottom:0;display:block}
.rbbar.svc i{background:var(--green)}
.rbbar.nd{border-style:dotted;border-color:#c3b9a3}   /* no measure for this round */


/* entrant badges: the turn avatar is the reversed badge filling its tile (the
   tile wears the same vendor ground); the scoreboard names carry one at text height */
.ava .eicon.rev{display:block;width:74%;height:74%;margin:0;vertical-align:0}
.side.t2 .nm .sbi{margin:0 0 0 .35em}
