/* NAME: dc-bloom, not dc-motion. The box already serves /dc-motion.js (6,963 B, d926e053: DeepCover's shared motion language, the route
   progress bar and navigation feedback, window.__dcMotion and the host's finishProgress call). This file is the
   ENTRANCE + COUNT-UP half of the motion system; phase 2 folds it into dc-motion.js once that file's loader and token chain are mapped. */
/* dc-bloom.css · v=b1 · BUILD379 phase 1 (UI, 6 Oct 2026; founder via V7: "sare pages khilte hue except player page ... Swiggy jaisa
   opening"). THE ONE MOTION MODULE: tokens, the entrance, the count-up. Rules the founder and V7 set: transform / opacity only (never a layout
   property), every animation finite, never looping (the iOS respring on schedule came from looping will-change layers), prefers-reduced-motion respected,
   one shared file reused by every page. Phase 1 is the dossier (player.html); other pages take the same classes later. */
:root {
  --dcDurFast: 120ms;             /* press feedback, phase 2 */
  --dcDur: 280ms;                 /* an entrance */
  --dcDurCount: 600ms;            /* a headline number counting up */
  --dcEase: cubic-bezier(.2, .8, .2, 1);   /* ease-out with a soft landing */
  --dcStagger: 48ms;              /* 40-60 ms between siblings (V7) */
  --dcRise: 10px;                 /* 8-12 px rise (V7) */
}
/* THE ENTRANCE. A block tagged .dcIn is invisible at index --i x stagger, then rises --dcRise and fades in over --dcDur. `both` keeps it
   hidden before its delay and settled after; the delay is capped by the tagger (dc-bloom.js, 12 steps) so a long page never waits. */
@keyframes dcBloomIn { from { opacity: 0; transform: translate3d(0, var(--dcRise), 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }
.dcIn { animation: dcBloomIn var(--dcDur) var(--dcEase) both; animation-delay: calc(var(--i, 0) * var(--dcStagger)); }
/* THE HERO BAND NEVER MOVES AFTER THE FIRST PAINT (V7's gate): nothing of the hero, the band, its chips or its KPI tiles takes the entrance
   or any transform; they are the page's anchor. The tagger skips them too; this rule is the belt to that brace. */
.hero.dcIn, .dcBand.dcIn, .dcBandChips.dcIn, .dcBandKpis.dcIn, .dcBand .dcIn, .hero .dcIn { animation: none; }
/* THE COUNT-UP. A number counting from 0 keeps every digit the same width (tabular digits) and changes NO box property: no display, no
   min-width (a measured min-width on the block values of a 7-column KPI grid wrapped the deck onto an extra row on the rig, 6 Oct 01:5x). */
.dcCount, .dcCounted { font-variant-numeric: tabular-nums; }
/* GEOMETRY (phase 1, measured 6 Oct 2026 00:5x on www): the career-span chip (/api/player-span) and the context chips land in .dcBandChips a
   beat after the band, and on a phone the row wraps from one line to two: .dcBandInfo grew 95 -> 115 -> 148 px (Kohli 390), 75 -> 101
   (Sarfaraz 375) and pushed the KPI deck down 33 px: the founder's "jump". The chips row now reserves its final height per breakpoint, so
   a chip arriving late fills space already held: two rows on a phone (54 px measured at 360-414 for the batting dossier), one row on a desk
   (30 px). A player with fewer chips shows the reserved space, never a shift. */
@media (max-width: 480px) { .dcBandOn .dcBandChips, .dcBand .dcBandChips { min-height: 54px; } }
/* The name line grows too: measured live (Kohli 375, 6 Oct 01:1x) .dcBandName 24 -> 44 px at ~1.8 s when the favourite button and the full
   name settle on the line, a 20 px step above the chips that moved the deck before the chips did. Two lines are held from the first paint. */
@media (max-width: 480px) { .dcBandOn .dcBandName, .dcBand .dcBandName { min-height: 44px; } }
@media (min-width: 480.02px) { .dcBandOn .dcBandChips, .dcBand .dcBandChips { min-height: 30px; } }
/* The career-span chip is inserted FIRST in the chips row (dc-heroband.js insertBefore firstChild) and, on a cold open, lands a beat after
   the other chips: every chip to its right moved (rig, 6 Oct 01:2x: SPAN.chip shifts 0.0095 Kohli 375, 0.0047 Sarfaraz 375 warm). Flex
   `order` shows the late chip LAST, so the chips already painted never move and the newcomer fills the reserved space. Same row, same
   chips, one position changed (phase 2 may move the insertion in dc-heroband.js itself and drop this rule). */
.dcBand .dcBandChips > .dcSpanWrap.dcSpanInRow { order: 99; }
@media (prefers-reduced-motion: reduce) {
  .dcIn { animation: none !important; opacity: 1 !important; transform: none !important; }
}
