/* ===================================================================
   HOT BOARDS -- roster-sheet.css
   Large-roster 17x11 sheet. Preseason (90) and college (70-85).

   NAMESPACE RULE: every class here starts with rs-. This file must
   never style the print board's skill-column tier classes.
   print-offense.js's pbAutoFitTiers() defaults to scope=document and
   samples height from the FIRST skill column it finds
   (print-offense.js:2413,2426); it is called unscoped from
   pbRefreshCard, so sharing that class would let a note edit silently
   resize the OTHER sheet's cards.
   .pb-card IS reused on purpose -- it buys free live-sync.

   That rule is enforced mechanically: grepping this file and
   roster-sheet.js for the tier-class prefix must return 0 hits for
   both. This comment is deliberately worded to avoid that literal
   string so the gate stays honest -- a hit means a real selector,
   never prose.
   =================================================================== */
.rs-pad { padding: 14px 18px 84px; overflow: auto; }
.rs-toolbar { margin-bottom: 12px; }
.rs-blank {
  color: var(--text-muted, #8895aa); font-family: Archivo, sans-serif; font-size: 14px;
  padding: 60px 0; text-align: center;
}

/* ===================================================================
   PAGE + FIVE TIERS
   Heights here are the fallbacks that stand before the solver runs.
   =================================================================== */
.rs-page {
  width: 1632px; height: 1056px; background: #fff; color: #111;
  display: flex; gap: 7px; padding: 8px; box-sizing: border-box;
  transform-origin: top left; overflow: hidden;
}
.rs-page * { box-sizing: border-box; }
/* Without an explicit height the sidebar is content-height and
   .pb-sbc-notes{flex:1} has nothing to grow into -- the notes card would
   render small instead of dominating the column, as it does on the print board. */
.rs-page .pb-sidebar { height: 100%; }
.rs-cols { flex: 1; display: flex; gap: 5px; min-width: 0; min-height: 0; }
.rs-col { flex: 1; display: flex; flex-direction: column; gap: 3px; min-width: 0; overflow: hidden; }
/* Flipped defense: re-anchor the (already-reversed) stack to the BOTTOM of
   the column instead of the default top-packed flex-start, so a column
   shorter than its row's tallest one still lands the starter flush against
   the true bottom edge -- see rsBuildCol. */
.rs-col.rs-col-flip { justify-content: flex-end; }
.rs-col > .pb-card { min-height: 0; flex: none; }
.rs-col > .rs-t1 { height: 140px; }
.rs-col > .rs-t2 { height: 112px; }
.rs-col > .rs-t3 { height: 85px; }
/* Pre-JS fallback only. rsTierFor always promotes one card beyond the depth
   setting (3 by default), and rsFitTiers sizes that promoted tier to match
   the one before it -- with the default setting that's t4 reading as t3,
   so the fallback matches too rather than flashing a different size for the
   instant before JS settles. Not exact for every possible setting (5 skips
   t4 as a promoted tier entirely), but close enough that nothing visibly
   jumps in the one case nearly everyone actually sees. */
.rs-col > .rs-t4 { height: 85px; }
.rs-col > .rs-t5 { height: 58px; }
/* Pre-JS fallback only, QB's own independently-sized starter/backup. */
.rs-col > .rs-qb1 { height: 180px; }
.rs-col > .rs-qb2 { height: 112px; }
.rs-hdrs { flex: none; display: flex; gap: 5px; }
.rs-hdr {
  flex: 1; text-align: center; font-family: 'Oswald', sans-serif; font-size: 11px;
  font-weight: 600; letter-spacing: .14em; text-transform: uppercase;
  background: #111; color: #fff; padding: 2px 0; cursor: grab;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.rs-hdr-dragging { opacity: .4; }
.rs-hdr-over { background: #b89020; }
.rs-rule {
  flex: none; font-family: 'Barlow Condensed', sans-serif; font-size: 8px;
  font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: #a09a8c;
  border-top: 1.4px dashed #c9c4b8; padding: 2px 0 0; margin-top: 2px;
}
/* One border weight across the whole sheet. The board itself ships three
   (1.5px card, 2px starter, 1.4px sidebar); side by side those read as a
   mistake rather than a hierarchy. Emphasis is carried by type size. */
.rs-page .pb-card, .rs-page .pb-card.pb-starter { border: 1.4px solid #aaa !important; }

/* ===================================================================
   OFFENSIVE-LINE BAND
   Starter is a full card, backup ends at the salary, third string and
   deeper are strips -- that split buys the height for everything above.
   =================================================================== */
.rs-ol { flex: none; border-top: 1.4px solid #111; padding-top: 5px; display: flex; flex-direction: column; }
.rs-ol-hd { font: 600 10px 'Oswald', sans-serif; letter-spacing: .16em; text-transform: uppercase; margin-bottom: 4px; }
.rs-ol-row { display: grid; grid-template-columns: repeat(5, 1fr); gap: 5px; width: 100%; }
.rs-ol-slot { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
/* .rs-hdr's flex:1 is meant for its ORIGINAL horizontal row (.rs-hdrs), where it
   shares WIDTH. Grid row-stretch makes every .rs-ol-slot as tall as the deepest
   one; reused unchanged here, that same flex:1 would grab the shallower slots'
   leftover HEIGHT instead, ballooning the label into an oversized black bar --
   the label must stay thin no matter how much deeper another slot runs. */
.rs-ol-slot > .rs-hdr { flex: none; }
.rs-page .rs-ol-1 { height: 120px; min-height: 0; }
/* 2nd team is a real card too, matching print-offense.css's .pb-ol-backup
   (96px) -- the regular board's own OL backup size, requested explicitly
   so this sheet's OL band reads the same way. 3rd string and deeper stay
   plain .rs-strip rows -- see rsBuildOL. */
.rs-page .rs-ol-2nd { height: 96px; min-height: 0; }

/* ===================================================================
   DEPTH STRIPS -- deliberately NOT .pb-card
   Number spans both rows beside the name/bio stack -- the same
   relationship .pb-card-num has to .pb-card-names. Type sizes match
   .pb-card-bio (10px), not a smaller scale of their own.
   =================================================================== */
.rs-strip {
  display: flex; align-items: stretch; gap: 7px; flex: none;
  padding: 2px 4px 3px; border-bottom: 1.4px solid #c9c4b8;
}
/* Defense's own reserves (every .rs-strip past the last card tier) get one
   extra blank line of room -- requested specifically for defense, so
   scoped to #rsPageDef rather than touching the shared .rs-strip rule
   offense also uses. No border here (unlike .rs-ol-2nd): this is every
   depth strip on the page, not one distinguished slot. */
#rsPageDef .rs-strip { min-height: 53px; }
/* Offense's own "4th string" -- unlike defense (a real card there, matching
   3rd string), this stays a plain reserve line, just one line taller than
   every strip below it. Scoped to #rsPageOff: on defense this class exists
   on the DOM (rsBuildCol tags it unconditionally) but does nothing, since
   defense's strips already all get the wider bump above. */
#rsPageOff .rs-strip.rs-strip-1st { min-height: 53px; }
.rs-strip .rs-n {
  font-family: 'Oswald', sans-serif; font-size: 23px; font-weight: 700;
  min-width: 32px; color: #111; font-variant-numeric: tabular-nums; flex: none;
  display: flex; align-items: center; justify-content: flex-end; line-height: 1;
}
.rs-strip .rs-stack { display: flex; flex-direction: column; justify-content: center; flex: 1; min-width: 0; }
.rs-strip .rs-row { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.rs-strip .rs-nm {
  font-family: 'Oswald', sans-serif; font-size: 15px; font-weight: 600; color: #111;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; line-height: 1.15;
}
.rs-strip .rs-pos { font-family: 'Oswald', sans-serif; font-size: 10px; font-weight: 500; color: #8a8579; margin-left: auto; flex: none; }
.rs-strip .rs-bio { display: flex; gap: 6px; align-items: baseline; min-width: 0; font-family: 'Oswald', sans-serif; font-size: 10px; color: #444; line-height: 1.25; }
.rs-strip .rs-bio-t { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1 1 auto; min-width: 0; }
.rs-strip .rs-bio-a { margin-left: auto; white-space: nowrap; color: #c03020; font-weight: 600; flex: none; }
.rs-strip .rs-rk  { font-family: 'Oswald', sans-serif; font-size: 10.5px; font-weight: 700; color: #2a7a3a; white-space: nowrap; }
.rs-strip .rs-inj { font-family: 'Oswald', sans-serif; font-size: 10.5px; font-weight: 700; color: #c03020; white-space: nowrap; }
/* Drag feedback -- same class names print-offense.css already defines for
   .pb-card (pb-dragging/pb-dragover), reused for the same meaning; strips
   need their own rules since that CSS is scoped to .pb-card specifically. */
.rs-strip.pb-dragging { opacity: .2; background: rgba(232,52,26,.08); }
/* outline, not border -- draws on top without disturbing the strip's own
   border-bottom (a real row divider, not decoration) or shifting layout. */
.rs-strip.pb-dragover { outline: 2.5px dashed #f0c040; outline-offset: -2px; background: rgba(240,192,64,.16); }
/* Cards already get opacity+red border from print-offense.css's .pb-dragging --
   stack a visible outline on top so the source card reads as "picked up" even
   at a glance, not just slightly faded. */
.rs-page .pb-card.pb-dragging { outline: 2.5px dashed #e8341a; outline-offset: -2px; }
/* print-offense.css's .pb-dragover swaps border-color to gold -- but this
   sheet's own border-unification rule above ties its specificity and, loading
   after, silently wins, so a card drop target showed NO feedback at all here.
   Outline sidesteps the fight instead of trying to out-specificity it. */
.rs-page .pb-card.pb-dragover { outline: 2.5px dashed #f0c040; outline-offset: -2px; }
/* A column/OL slot is stretched to match its band's tallest member, so a
   shorter one has real empty space below its last card or strip -- dropping
   there (append to the end) has no existing element to mark, so the column
   itself gets the same gold-dashed treatment instead of leaving the drop
   silently unmarked. */
.rs-col.rs-col-dragover, .rs-ol-slot.rs-col-dragover { outline: 2.5px dashed #f0c040; outline-offset: -4px; background: rgba(240,192,64,.08); }

/* ===================================================================
   PRINT -- captureBoardHTML/@media print both only know #printCanvases;
   a view outside it is otherwise invisible to print. !important beats the
   inline zoom transform (rsFitToWidth) so paper is always the true 1632x1056
   native size regardless of on-screen zoom.
   =================================================================== */
@media print {
  .rs-pad { padding: 0 !important; overflow: visible !important; }
  .pb-viewctl, .rs-toolbar { display: none !important; }
  .rs-page {
    transform: none !important; margin: 0 !important;
    page-break-after: always; break-after: page;
  }
  .rs-page:last-child { page-break-after: auto; break-after: auto; }
}
