/* RACE public pages, the new content area (Task U2, Ruling A180; Task U0's mockups ui-u0/mockups/result-v2-*.html): result.php's
   <main class="v2"> first, the public pages reworked after it next. The site header loads it in <head> through $page_extra_head,
   after assets/fonts/fonts.css (Barlow Condensed + Inter, self-hosted) and race-tokens.css (the tokens, the .st badges, the medal
   and the .rt-* rider rows this file lays out).
   - Every selector starts with .v2, so the site's header and footer (part/home_header.php / home_footer.php, race-home.css) and the
     registration and payment pages that share them are never touched (Task U0 §5.4). harness/tests/timing/test_u2_result_v2.php
     parses this file and fails on any other selector, and on any at-rule but @media / @supports.
   - The chrome's own rules still reach in (race-home.css: the * reset, body.rh's type, .rh a / img / button / h1-h4): every rule
     here is at least as specific (.v2 .x is 0,2,0 against .rh button's 0,1,1) and comes later in <head>.
   - Phone first (360-430 px): two-line rows whose time column is never cut; from 900 px the same rows line up as a table.
   - Text is >= 4.5:1 on its background (race-tokens.css); a state is text + colour + shape, never colour alone. */
.v2 { --v2-pad: 16px; display: block; background: var(--rt-bg); color: var(--rt-ink); font: 400 15px/1.4 var(--rt-body);
      -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
.v2 *, .v2 *::before, .v2 *::after { box-sizing: border-box; }
.v2 [hidden] { display: none !important; }
.v2 :where(h1, h2, p) { margin: 0; padding: 0; }
.v2 a { color: inherit; text-decoration: none; }
.v2 a:focus-visible, .v2 button:focus-visible { outline: 2px solid var(--rt-red-strong); outline-offset: 2px; }
.v2 .v2-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* ===== the light header band: crumbs, the category and its status chip, the event; the stats ===== */
.v2 .v2-hd { position: relative; overflow: hidden; background: #fff; border-top: 4px solid var(--rt-red); border-bottom: 1px solid var(--rt-line); }
.v2 .v2-evimg { display: none; }   /* the event's banner: a faded picture on the band's right from 900 px; the phone band stays plain */
.v2 .v2-hd-in { position: relative; max-width: 1180px; margin: 0 auto; padding: 12px var(--v2-pad) 14px; }
.v2 .v2-crumbs { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 6px; font-size: 13px; line-height: 1.35; color: var(--rt-mute); }
.v2 .v2-crumbs a { color: var(--rt-mute); text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 2px; }
.v2 .v2-crumbs a:hover { color: var(--rt-red-strong); text-decoration-color: currentColor; }
.v2 .v2-crumbs b { font-weight: 600; color: var(--rt-ink); }
.v2 .v2-ttl { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin-top: 8px; }
.v2 .v2-ttl h1 { min-width: 0; font: 800 38px/1 var(--rt-head); letter-spacing: .01em; text-transform: uppercase; color: var(--rt-ink); overflow-wrap: anywhere; }
.v2 .v2-ttl .st { height: 26px; padding: 0 10px; font-size: 15px; }
.v2 .st-live { color: #fff; background: var(--rt-red-strong); }
.v2 .st-live::before { content: ''; flex: none; width: 8px; height: 8px; border-radius: 50%; background: #fff; }
.v2 .st-nofin { color: var(--rt-mute); background: var(--rt-soft); box-shadow: inset 0 0 0 1px var(--rt-line-2); }   /* "Sin llegada": no finish, no mark (A184) */
.v2 .v2-ev { margin-top: 5px; font-size: 14px; line-height: 1.4; color: var(--rt-mute); }
.v2 .v2-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 12px; background: #fff;
                border: 1px solid var(--rt-line); border-radius: 8px; overflow: hidden; }
.v2 .v2-stat { min-width: 0; padding: 8px 10px; border-left: 1px solid var(--rt-line); }
.v2 .v2-stat:first-child { border-left: 0; }
.v2 .v2-stat.v2-x { display: none; }
.v2 .v2-stat b { display: block; font: 800 22px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink);
                 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.v2 .v2-stat span { display: block; margin-top: 4px; font: 600 10.5px/1.2 var(--rt-body); letter-spacing: .07em; text-transform: uppercase; color: var(--rt-mute); }

/* ===== the body: the mid-race banner, the podium, the results card ===== */
.v2 .v2-body { max-width: 1180px; margin: 0 auto; padding: 14px var(--v2-pad) 28px; }
.v2 .v2-live { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-bottom: 12px; padding: 10px 12px 10px 14px; border-radius: 8px;
               background: #FFF5F6; border: 1px solid #FBC6CC; color: #7F1D1D; font-size: 14.5px; font-weight: 600; line-height: 1.35; }
.v2 .v2-live > span { flex: 1 1 140px; display: flex; align-items: baseline; gap: 8px; }
.v2 .v2-live > span::before { content: ''; flex: none; width: 10px; height: 10px; border-radius: 50%; background: var(--rt-red-strong); transform: translateY(1px); }
.v2 .v2-live a { flex: none; margin-left: auto; min-height: 40px; display: inline-flex; align-items: center; padding: 0 14px; border-radius: 6px;
                 background: var(--rt-red-strong); color: #fff; font: 700 15px/1 var(--rt-head); letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; }
.v2 .v2-live a:hover { background: #A61F2B; }

/* the podium: 1-2-3 side by side in reading order on a phone, a 2-1-3 podium from 900 px (CSS order, the DOM stays 1-2-3) */
.v2 .v2-pod { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-bottom: 12px; }
.v2 .v2-pc { min-width: 0; padding: 10px 10px 12px; background: #fff; border-radius: 10px; border-top: 4px solid var(--rt-silver); box-shadow: 0 1px 2px rgba(17, 24, 39, .06); }
.v2 .v2-pc.p1 { border-top-color: var(--rt-gold); }
.v2 .v2-pc.p3 { border-top-color: var(--rt-bronze); }
.v2 .v2-pl { display: flex; align-items: center; gap: 6px; font: 800 14px/1 var(--rt-head); letter-spacing: .06em; color: var(--rt-mute); }
.v2 .v2-pl .medal { width: 24px; height: 24px; font-size: 15px; }
.v2 .v2-pn { margin-top: 6px; min-height: 2.2em; font: 700 17px/1.1 var(--rt-head); text-transform: uppercase; color: var(--rt-ink);
             overflow-wrap: break-word; -webkit-hyphens: auto; hyphens: auto;
             display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.v2 .v2-pf { display: flex; min-width: 0; margin-top: 3px; font-size: 12px; color: var(--rt-mute); white-space: nowrap; }
.v2 .v2-pf span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.v2 .v2-pf b { flex: none; font-weight: 400; white-space: pre; }
.v2 .v2-pt { margin-top: 6px; font: 800 21px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink); white-space: nowrap; }
.v2 .v2-pt.v2-gap { font-size: 15px; font-weight: 600; color: var(--rt-mute); }
.v2 .v2-pt small, .v2 .rt-t small, .v2 .rt-g small { font-size: .72em; font-weight: 600; }

/* the card: search + share, then the groups of rows */
.v2 .v2-card { background: #fff; border-radius: 10px; box-shadow: 0 1px 2px rgba(17, 24, 39, .06); overflow: hidden; }
.v2 .v2-bar { display: flex; align-items: center; gap: 8px; padding: 10px; }
.v2 .v2-search { flex: 1; min-width: 0; height: 44px; display: flex; align-items: center; gap: 8px; padding: 0 12px; border: 1px solid var(--rt-line-2);
                 border-radius: 8px; background: #fff; cursor: text; }
.v2 .v2-search::before { content: ''; flex: none; width: 18px; height: 18px; background: no-repeat center / 18px
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236B7280' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E"); }
.v2 .v2-search:focus-within { border-color: var(--rt-ink-2); box-shadow: 0 0 0 3px rgba(17, 24, 39, .08); }
.v2 .v2-search input { flex: 1; min-width: 0; height: 100%; padding: 0; border: 0; outline: 0; background: none; font: 400 16px/1 var(--rt-body);
                       color: var(--rt-ink); -webkit-appearance: none; appearance: none; }
.v2 .v2-search input::placeholder { color: var(--rt-faint); opacity: 1; }
.v2 .v2-share { flex: none; min-width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 0 14px;
                border: 0; border-radius: 8px; background: var(--rt-navy); color: #fff; font: 700 15px/1 var(--rt-head); letter-spacing: .05em;
                text-transform: uppercase; cursor: pointer; }
.v2 .v2-share:hover { background: #1D2330; }
.v2 .v2-sl { display: none; }
.v2 .v2-th { display: none; }
.v2 .v2-grp { display: flex; justify-content: space-between; gap: 8px; padding: 10px 12px 6px; background: var(--rt-soft); border-top: 1px solid var(--rt-line);
              font: 700 12px/1 var(--rt-body); letter-spacing: .08em; text-transform: uppercase; color: var(--rt-mute); }
.v2 .v2-grp .v2-n { font-variant-numeric: tabular-nums; color: var(--rt-ink-2); }

/* the rows (race-tokens.css .rt-row): place | SURNAMES first names / #bib · flag · club | time over gap, or the state over the laps */
.v2 .rt-row { grid-template-columns: 34px minmax(0, 1fr) auto; column-gap: 10px; min-height: 58px; padding: 8px 12px 8px 8px; }
.v2 .v2-grp + .rt-row { border-top: 0; }
.v2 .rt-who { display: block; width: 100%; min-width: 0; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; }
.v2 button.rt-who { cursor: pointer; }
.v2 .rt-nm { display: block; }
.v2 .rt-sub > .v2-lt { overflow: visible; }   /* the laps marker never clips; a long club always ends in "…" (race-tokens.css) */
.v2 .v2-club { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.v2 .v2-lt { flex: none; font: 700 12px/1 var(--rt-body); letter-spacing: .04em; text-transform: uppercase; color: var(--rt-red-strong); }
.v2 .v2-lt::after { content: '\25B8'; }
.v2 [aria-expanded="true"] .v2-lt::after { content: '\25BE'; }
.v2 .v2-lt b { display: none; font-weight: 700; }
.v2 .rt-tm { min-width: max-content; }
.v2 .v2-lps { font: 600 15px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-mute); white-space: nowrap; }
.v2 .v2-c { display: none; }
.v2 .rt-row.open { background: #FAFBFC; }

/* a rider's laps, built when his name is tapped */
.v2 .v2-laps { padding: 2px 12px 12px 52px; background: #FAFBFC; }
.v2 .v2-laps-g { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
.v2 .v2-lap { min-width: 0; padding: 6px 8px; border: 1px solid var(--rt-line); border-radius: 6px; background: #fff; }
.v2 .v2-lap span { display: block; font: 600 11px/1.1 var(--rt-body); letter-spacing: .06em; text-transform: uppercase; color: var(--rt-mute);
                   white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.v2 .v2-lap b { display: block; margin-top: 4px; font: 700 17px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink); }
.v2 .v2-lap.best { border-color: #FCD34D; background: var(--rt-fav-bg); }
.v2 .v2-lap.best span { color: var(--rt-amber-ink); }

/* waiting, nothing found, the foot, the "link copied" toast */
.v2 .v2-skel { height: 58px; border-top: 1px solid var(--rt-soft);
               background: no-repeat 52px 50% / 55% 14px linear-gradient(var(--rt-soft), var(--rt-soft)); }
.v2 .v2-empty, .v2 .v2-none { padding: 28px 16px; text-align: center; font-size: 15px; color: var(--rt-mute); }
.v2 .v2-foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 16px; margin-top: 12px; font-size: 13px; line-height: 1.4; color: var(--rt-mute); }
.v2 .v2-foot a { font-weight: 700; color: var(--rt-red-strong); }
.v2 .v2-foot a:hover { text-decoration: underline; }
.v2 .v2-toast { position: fixed; left: 50%; bottom: 24px; z-index: 950; transform: translateX(-50%); padding: 10px 16px; border-radius: 8px;
                background: var(--rt-navy); color: #fff; font: 600 14px/1.2 var(--rt-body); box-shadow: 0 8px 24px rgba(0, 0, 0, .25); }

@media (min-width: 420px) {
    .v2 .v2-sl { display: inline; }
}
@media (max-width: 370px) {
    .v2 .v2-ttl h1 { font-size: 34px; }
    .v2 .v2-stat { padding: 8px; }
    .v2 .v2-stat b { font-size: 20px; }
    .v2 .v2-pt { font-size: 19px; }
    .v2 .v2-pn { font-size: 15.5px; }
}

/* ===== from 900 px: the band in two columns, the podium 2-1-3, the rows as a table ===== */
@media (min-width: 900px) {
    .v2 { --v2-pad: 24px; }
    .v2 .v2-evimg { display: block; position: absolute; top: 0; right: 0; bottom: 0; width: 46%; background-repeat: no-repeat;
                    background-position: center; background-size: cover; opacity: .5; }
    .v2 .v2-evimg::after { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, .55) 45%, rgba(255, 255, 255, .2) 100%); }
    .v2 .v2-hd-in { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 24px; padding: 18px var(--v2-pad); }
    .v2 .v2-ttl h1 { font-size: 52px; }
    .v2 .v2-stats { grid-template-columns: repeat(4, auto); margin-top: 0; }
    .v2 .v2-stat { min-width: 128px; padding: 10px 14px; }
    .v2 .v2-stat.v2-x { display: block; }
    .v2 .v2-stat b { font-size: 26px; }
    .v2 .v2-pod { grid-template-columns: repeat(3, minmax(0, 250px)); justify-content: start; align-items: end; }
    .v2 .v2-pc.p1 { order: 2; padding-top: 18px; }
    .v2 .v2-pc.p2 { order: 1; }
    .v2 .v2-pc.p3 { order: 3; }
    .v2 .v2-pn { min-height: 0; }
    .v2 .v2-th, .v2 .rt-row { grid-template-columns: 52px minmax(0, 1.6fr) 64px 80px 120px 100px 120px; }
    .v2 .v2-th { display: grid; column-gap: 10px; padding: 10px 12px 10px 8px; border-top: 1px solid var(--rt-line);
                 font: 600 12px/1 var(--rt-body); letter-spacing: .06em; text-transform: uppercase; color: var(--rt-mute); }
    .v2 .v2-th span:nth-child(n+5) { text-align: right; }
    .v2 .rt-row { min-height: 52px; }
    .v2 .rt-tm { display: contents; }
    .v2 .rt-tm > *, .v2 .v2-c-best { justify-self: end; }
    .v2 .v2-c { display: block; font: 600 16px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink-2); white-space: nowrap; }
    .v2 .v2-lt b { display: inline; }
    .v2 .rt-tm > .v2-lps { visibility: hidden; }   /* laps done / the lap in progress: the Vueltas column says it; nothing under "Dif." */
    .v2 .v2-laps { padding-left: 70px; }
    .v2 .v2-laps-g { grid-template-columns: repeat(auto-fill, minmax(120px, 140px)); }
}

/* ===== Task W1 (Ruling A172; Task U0 §5.3, mockups ui-u0/mockups/public-*-raceday*.html): the public site before the race =====
   Appended after U2's rules, which stay byte for byte (result.php's look cannot change). Each reworked page loads this file through
   $page_extra_head and wraps only its new content in a .v2 section: the home's race-day block and the event page's band (.rd-*), the
   event page's start times and its maps on demand (.rd-*), and event_part.php's participants (main.v2: U2's band, card, search and
   group head, plus .ins-* rows). Every selector starts with .v2, so the chrome and the old sections around never change. */

/* the race-day block (index.php: first on the home on race day, in place of the carousel) and band (event.php) */
.v2.rd-live { padding-bottom: 6px; }
.v2 .rd-top, .v2.rd-band { background: #fff; border-top: 4px solid var(--rt-red); border-bottom: 1px solid var(--rt-line); }
.v2 .rd-in { max-width: 1180px; margin: 0 auto; padding: 14px var(--v2-pad) 16px; }
.v2 .rd-kick { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.v2 .rd-tag, .v2 .rd-prev { display: inline-flex; align-items: center; gap: 7px; height: 26px; padding: 0 10px; border-radius: 4px;
                            font: 700 13px/1 var(--rt-head); letter-spacing: .08em; text-transform: uppercase; white-space: nowrap; }
.v2 .rd-tag { background: var(--rt-red-strong); color: #fff; }
.v2 .rd-tag::before { content: ''; flex: none; width: 8px; height: 8px; border-radius: 50%; background: #fff; }
.v2 .rd-prev { background: var(--rt-amber-soft); color: var(--rt-amber-ink); box-shadow: inset 0 0 0 1.5px #F2C94C; letter-spacing: .06em; }
.v2 .rd-h1 { margin-top: 10px; font: 800 34px/1.02 var(--rt-head); letter-spacing: .01em; text-transform: uppercase; color: var(--rt-ink);
             overflow-wrap: anywhere; }
.v2 .rd-meta { margin-top: 6px; font-size: 14.5px; line-height: 1.4; color: var(--rt-mute); }
.v2 .rd-cta { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.v2 .rd-btn { min-height: 48px; display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 6px 18px; border-radius: 8px;
              font: 700 17px/1.1 var(--rt-head); letter-spacing: .05em; text-transform: uppercase; text-align: center; }
.v2 .rd-go { flex: 1 1 220px; background: var(--rt-red-strong); color: #fff; }
.v2 .rd-go:hover { background: #A61F2B; }
.v2 .rd-ln { flex: 0 0 auto; border: 2px solid var(--rt-ink); background: #fff; color: var(--rt-ink); }
.v2 .rd-ln:hover { background: var(--rt-soft); }
.v2 .rd-from { margin-top: 12px; font-size: 14.5px; font-weight: 600; line-height: 1.35; color: var(--rt-ink-2); }
.v2 .rd-kpis { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 14px; border: 1px solid var(--rt-line); border-radius: 8px;
               overflow: hidden; }
.v2 .rd-kpi { min-width: 0; padding: 8px 10px; border-left: 1px solid var(--rt-line); }
.v2 .rd-kpi:first-child { border-left: 0; }
.v2 .rd-kpi b { display: block; font: 800 22px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink); }
.v2 .rd-kpi span { display: block; margin-top: 4px; font: 600 10.5px/1.2 var(--rt-body); letter-spacing: .07em; text-transform: uppercase; color: var(--rt-mute); }
.v2 .rd-h2 { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin: 16px 0 8px; }
.v2 .rd-h2 h2 { min-width: 0; font: 800 20px/1.05 var(--rt-head); letter-spacing: .02em; text-transform: uppercase; color: var(--rt-ink); }
.v2 .rd-h2 a { flex: none; font: 700 13px/1 var(--rt-body); color: var(--rt-red-strong); }
.v2 .rd-h2 a:hover { text-decoration: underline; }
/* the latest arrivals: SURNAMES First I. / #bib · CATEGORY · time of day | race time over the place (3 on a phone, 5 from 900 px) */
.v2 .rd-list { background: #fff; border: 1px solid var(--rt-line); border-radius: 8px; overflow: hidden; }
.v2 .rd-fx { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; min-height: 56px; padding: 8px 12px;
             border-top: 1px solid var(--rt-soft); }
.v2 .rd-fx:first-child { border-top: 0; }
.v2 .rd-fx:nth-child(n+4) { display: none; }
.v2 .rd-fx:hover { background: #FAFBFC; }
.v2 .rd-fx-w { min-width: 0; }
.v2 .rd-fx-n { display: block; font: 600 17px/1.15 var(--rt-head); letter-spacing: .01em; color: var(--rt-ink-2); white-space: nowrap; overflow: hidden;
               text-overflow: ellipsis; }
.v2 .rd-fx-n b { font-weight: 700; color: var(--rt-ink); text-transform: uppercase; }
.v2 .rd-fx-m { display: block; margin-top: 3px; font-size: 13px; line-height: 1.2; color: var(--rt-mute); white-space: nowrap; overflow: hidden;
               text-overflow: ellipsis; }
.v2 .rd-fx-r { text-align: right; }
.v2 .rd-fx-t { display: block; font: 700 18px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink); white-space: nowrap; }
.v2 .rd-fx-p { display: block; margin-top: 4px; font: 700 14px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-red-strong); }
/* the categories on course: a chip per category, its riders on course, into the live page's category */
.v2 .rd-cats { padding-top: 2px; padding-bottom: 10px; }
.v2 .rd-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.v2 .rd-chip { min-height: 36px; display: inline-flex; align-items: center; gap: 6px; padding: 0 12px; border-radius: 18px; background: #fff;
               border: 1px solid var(--rt-line-2); font: 700 15px/1 var(--rt-head); letter-spacing: .03em; text-transform: uppercase; color: var(--rt-ink); }
.v2 .rd-chip::before { content: ''; flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--rt-green); }
.v2 .rd-chip i { font-style: normal; font-variant-numeric: tabular-nums; color: var(--rt-green-ink); }
.v2 .rd-chip:hover { border-color: var(--rt-ink-2); }
.v2 .rd-chip.rd-more::before { display: none; }
/* the event page's band: "EN VIVO HOY", the live link and the way to the start times */
.v2 .rd-band-t { margin-top: 8px; font-size: 14.5px; font-weight: 600; line-height: 1.35; color: var(--rt-ink-2); }

/* "Horarios de largada" (event.php, always when start times exist): a card in the event's main column, one row group per wave */
.v2.rd-hor { margin-bottom: 22px; background: #fff; border-radius: 16px; overflow: hidden;
             box-shadow: 0 1px 2px rgba(17, 24, 39, .06), 0 12px 30px -22px rgba(17, 24, 39, .35); }
.v2 .rd-hor-hd { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; padding: 16px 16px 12px; border-bottom: 1px solid var(--rt-line); }
.v2 .rd-hor-hd h2 { min-width: 0; font: 800 22px/1.05 var(--rt-head); letter-spacing: .02em; text-transform: uppercase; color: var(--rt-ink); }
.v2 .rd-tt { width: 100%; border-collapse: collapse; }
.v2 .rd-tt th, .v2 .rd-tt td { padding: 8px 6px; text-align: left; vertical-align: baseline; }
.v2 .rd-tt thead th:first-child, .v2 .rd-tt .rd-wt { padding-left: 16px; }   /* by class: a wave's next rows start with the category (rowspan); .rd-tt .x outranks .rd-tt td */
.v2 .rd-tt thead th:last-child, .v2 .rd-tt .rd-wk { padding-right: 16px; }
.v2 .rd-tt thead th { padding-top: 9px; padding-bottom: 7px; background: var(--rt-soft); font: 600 11.5px/1 var(--rt-body); letter-spacing: .07em;
                      text-transform: uppercase; color: var(--rt-mute); white-space: nowrap; }
.v2 .rd-tt thead th:nth-child(n+3) { text-align: right; }
.v2 .rd-wave { border-top: 1px solid var(--rt-line); }
.v2 .rd-wave tr + tr td { padding-top: 0; }
.v2 .rd-tt .rd-wt { width: 1%; white-space: nowrap; font: 800 20px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink); }
.v2 .rd-tt .rd-wc { font: 700 16px/1.2 var(--rt-head); letter-spacing: .02em; text-transform: uppercase; color: var(--rt-ink); overflow-wrap: anywhere; }
.v2 .rd-tt .rd-wv, .v2 .rd-tt .rd-wk { width: 1%; white-space: nowrap; text-align: right; font: 600 16px/1.2 var(--rt-head); font-variant-numeric: tabular-nums;
                         color: var(--rt-ink-2); }
.v2 .rd-note { padding: 10px 16px 14px; border-top: 1px solid var(--rt-line); font-size: 13px; line-height: 1.4; color: var(--rt-mute); }

/* the event page's maps on demand: the course drawn flat (no tiles, nothing loaded) and "Ver mapa interactivo"; a tap loads Leaflet
   or the Google frame, as they were. Without JS the button never shows: the start's frame is in a <noscript>. */
.v2.rd-gate { position: relative; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; min-height: 150px;
              overflow: hidden; background: linear-gradient(135deg, #E8F0E3, #D9E7F2); color: var(--rt-ink); font: 400 15px/1.4 var(--rt-body); }
.v2 .rd-prv { position: absolute; top: 8%; left: 6%; width: 88%; height: 84%; }
.v2 .rd-prv polyline { fill: none; stroke: var(--rt-red); stroke-width: 3; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.v2 .rd-prv .rd-p0 { fill: var(--rt-green); stroke: #fff; stroke-width: 2; vector-effect: non-scaling-stroke; }
.v2 .rd-prv .rd-p1 { fill: var(--rt-red-strong); stroke: #fff; stroke-width: 2; vector-effect: non-scaling-stroke; }
.v2 .rd-gate-go { position: relative; z-index: 1; min-height: 44px; display: inline-flex; align-items: center; gap: 8px; padding: 0 18px; border: 0;
                  border-radius: 8px; background: #fff; color: var(--rt-ink); box-shadow: 0 4px 14px rgba(0, 0, 0, .15); font: 700 15px/1 var(--rt-head);
                  letter-spacing: .05em; text-transform: uppercase; cursor: pointer; }
.v2 .rd-gate-go:hover { background: var(--rt-soft); }
.v2 .rd-gate-go[aria-busy="true"] { cursor: progress; opacity: .7; }
.v2.rd-gate-g { height: 160px; margin: 8px 0 14px; border-radius: 12px; flex-direction: column; gap: 10px; }
.v2 .rd-gate-pl { position: relative; z-index: 1; max-width: 90%; padding: 0 12px; font-weight: 600; text-align: center; color: var(--rt-ink-2);
                  overflow-wrap: anywhere; }
@media (scripting: none) {
    .v2 .rd-gate-go, .v2.rd-gate-g { display: none; }
}

/* event_part.php: the participants, grouped by category + sex (U2's band, card, search and group head; these rows) */
.v2 .ins-count { padding: 0 12px 10px; font-size: 13px; line-height: 1.35; color: var(--rt-mute); }
.v2 .ins-ul { margin: 0; padding: 0; list-style: none; }
.v2 .ins-row { display: grid; grid-template-columns: 48px minmax(0, 1fr) auto; column-gap: 10px; align-items: center; min-height: 48px;
               padding: 7px 12px 7px 6px; border-top: 1px solid var(--rt-soft); }
.v2 .ins-row:first-child { border-top: 0; }
.v2 .ins-bib { text-align: center; font: 800 17px/1 var(--rt-head); font-variant-numeric: tabular-nums; color: var(--rt-ink); }
.v2 .ins-nm { min-width: 0; font: 600 17px/1.2 var(--rt-head); letter-spacing: .01em; color: var(--rt-ink-2); overflow-wrap: anywhere; }
.v2 .ins-nm b { font-weight: 700; color: var(--rt-ink); }
.v2 .ins-pa { font-size: 13px; line-height: 1.2; color: var(--rt-mute); text-align: right; white-space: nowrap; }

@media (max-width: 370px) {
    .v2 .rd-h1 { font-size: 30px; }
    .v2 .rd-kpi { padding: 8px; }
    .v2 .rd-kpi b { font-size: 20px; }
    .v2 .rd-tt th, .v2 .rd-tt td { padding-left: 4px; padding-right: 4px; }
    .v2 .rd-tt thead th:first-child, .v2 .rd-tt .rd-wt { padding-left: 12px; }
    .v2 .rd-tt thead th:last-child, .v2 .rd-tt .rd-wk { padding-right: 12px; }
    .v2 .rd-tt .rd-wt { font-size: 18px; }
    .v2 .rd-tt .rd-wc { font-size: 15px; }
    .v2 .ins-row { grid-template-columns: 40px minmax(0, 1fr) auto; column-gap: 8px; }
}
@media (min-width: 900px) {
    .v2 .rd-in { padding-top: 18px; padding-bottom: 20px; }
    .v2 .rd-grid { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 28px; align-items: start; }
    .v2 .rd-h1 { font-size: 52px; }
    .v2 .rd-go { flex: 0 0 auto; }
    .v2 .rd-arr .rd-h2 { margin-top: 0; }
    .v2 .rd-fx:nth-child(n+4) { display: grid; }
    .v2 .rd-cats { padding-top: 0; }
    .v2 .rd-hor-hd { padding: 16px 22px 12px; }
    .v2 .rd-tt th, .v2 .rd-tt td { padding-left: 10px; padding-right: 10px; }
    .v2 .rd-tt thead th:first-child, .v2 .rd-tt .rd-wt { padding-left: 22px; }
    .v2 .rd-tt thead th:last-child, .v2 .rd-tt .rd-wk { padding-right: 22px; }
    .v2 .rd-note { padding-left: 22px; padding-right: 22px; }
    .v2 .ins-ul { columns: 2; column-gap: 28px; padding: 0 6px; }   /* a phone book: down the first column, then the second */
    .v2 .ins-row { grid-template-columns: 56px minmax(0, 1fr) auto; break-inside: avoid; border-top: 0; border-bottom: 1px solid var(--rt-soft); }
}
/* Task U6 (C3, C4): 44-px targets. The race-day headings' links (13-px text beside the heading: the negative margin keeps the
   heading's row as it was) and the category chips; the "← Volver …" links at the foot of result.php and event_part.php. */
.v2 .rd-h2 a { display: inline-flex; align-items: center; min-height: 44px; margin: -15px 0; }
.v2 .rd-chip { min-height: 44px; min-width: 44px; justify-content: center; border-radius: 22px; }   /* min-width: the short "+N" chip */
.v2 .v2-foot a { display: inline-flex; align-items: center; min-height: 44px; }
.v2 .v2-foot { align-items: center; }   /* the 44-px link beside the one-line text (900 px and up): both centred, on one line */
