
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body {
      background: #f7f7f7;
      font-family: 'Poppins', sans-serif;
      color: #2a2a2a;
      min-height: 100vh;
      padding: 1.5rem;
    }
    .container { max-width: 600px; margin: 0 auto; }
    .container.wide { max-width: 1800px; font-size: 14px; line-height: 1.4; }
    .container.pairings-wide { max-width: 1000px; }
    .container.name-wide { max-width: 680px; }
    .breadcrumb {
      color: #6c757d;
      font-size: 0.875rem;
      margin-bottom: 1rem;
    }
    .breadcrumb a { color: #8bc541; text-decoration: none; }
    .breadcrumb a:hover { text-decoration: underline; }
    .card {
      background: #ffffff;
      border-radius: 15px;
      padding: 20px;
    }
    .division-header {
      text-align: center;
      margin-bottom: 1.5rem;
    }
    .division-pill {
      background: #C2F15E;
      color: #2a2a2a;
      padding: 0.75rem 2rem;
      border-radius: 0.5rem;
      font-weight: 600;
      font-size: 1.125rem;
      display: inline-block;
      text-decoration: none;
    }
    a.division-pill:hover { opacity: 0.85; }
    .round-nav {
      display: flex;
      justify-content: center;
      gap: 1rem;
      margin-bottom: 1rem;
    }
    .round-nav a {
      color: #8bc541;
      text-decoration: none;
      padding: 0.5rem 1rem;
      border: 1px solid #8bc541;
      border-radius: 0.25rem;
    }
    .round-nav a:hover { background: #C2F15E; }
    .round-nav span {
      color: #6c757d;
      padding: 0.5rem 1rem;
    }
    .standings-row {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 1rem 0;
      border-bottom: 1px solid #dee2e6;
    }
    .standings-row:last-child { border-bottom: none; }
    .rank { min-width: 4rem; font-weight: 500; }
    .rank sup { font-size: 0.75em; }
    .player-name {
      color: #8bc541;
      text-decoration: underline;
      text-underline-offset: 2px;
      margin-left: 0.5rem;
    }
    .repeat-sup {
      font-size: 0.7em;
      color: #6c757d;
      margin-left: 2px;
      font-weight: 500;
      text-decoration: none;
      vertical-align: super;
    }
    /* Stream / GCG icons appended to pairing + scorecard rows when the
       broadcast CSV has a URL for the (round, table) pair. */
    .broadcast-icon {
      display: inline-block;
      margin-left: 4px;
      vertical-align: middle;
      text-decoration: none;
      line-height: 1;
    }
    .broadcast-icon svg,
    .broadcast-icon img {
      display: inline-block;
      vertical-align: middle;
    }
    .broadcast-icon:hover  { opacity: 0.7; }
    .stats { display: flex; align-items: center; gap: 1.5rem; }
    .record { font-weight: 600; }
    .spread {
      font-weight: 600;
      font-family: monospace;
      min-width: 4rem;
      text-align: right;
    }
    .spread.positive { color: #8bc541; }
    .spread.negative { color: #ef4444; }
    .footer {
      text-align: center;
      padding-top: 1rem;
      margin-top: 1rem;
      border-top: 1px solid #dee2e6;
      color: #6c757d;
      font-size: 0.875rem;
    }
    /* Pairings */
    .pairings-table {
      width: 100%;
      border-collapse: collapse;
      table-layout: fixed;
    }
    .pairing-row td {
      padding: 0.75rem 0.5rem;
      border-bottom: 1px solid #dee2e6;
    }
    .pairing-row:last-child td { border-bottom: none; }
    .pairing-row .player1,
    .pairing-row .player2 {
      /* Allow mid-word break only when the word genuinely doesn't fit;
         leaving 'word-break: break-word' on would break at the nbsp
         between surname and country, dropping the country code to its
         own line on player1 (right-aligned). overflow-wrap is the
         softer choice. */
      overflow-wrap: break-word;
    }
    /* Board number column on the left; mirrored by an empty spacer column on
       the right so the player1 / vs / player2 cells stay symmetric around
       the page midline.
       Country code lives in its OWN column adjacent to each name column so
       that long names which wrap don't visually extend into the country's
       horizontal slot. Country cells vertical-align bottom so a multi-line
       name still ends up with the country sitting next to its last line.
       Widths sum: 5 + 28 + 6 + 9 + 4 + 9 + 28 + 6 + 5 = 100. */
    .pairing-row .board { text-align: center; color: #6c757d; font-weight: 600; width: 5%; }
    .pairing-row .player1 { text-align: right; width: 28%; }
    .pairing-row .player2 { text-align: left; width: 28%; }
    .pairing-row .p1country,
    .pairing-row .p2country {
      width: 6%;
      vertical-align: bottom;
      color: #6c757d;
      font-size: 0.85em;
      white-space: nowrap;
    }
    .pairing-row .p1country { text-align: left; padding-left: 0.25rem; }
    .pairing-row .p2country { text-align: left; padding-left: 0.25rem; }
    .pairing-row .score1 { text-align: right; font-weight: 600; width: 9%; }
    .pairing-row .score2 { text-align: left; font-weight: 600; width: 9%; }
    .pairing-row .vs { text-align: center; color: #6c757d; width: 4%; }
    .pairing-row .spacer { width: 5%; }
    .pairings-table thead th {
      padding: 0.5rem;
      font-size: 0.8rem;
      font-weight: 600;
      color: #6c757d;
      text-transform: uppercase;
      letter-spacing: 0.05em;
      text-align: center;
      border-bottom: 1px solid #dee2e6;
    }
    .pairings-table thead th.player1 { text-align: right; }
    .pairings-table thead th.player2 { text-align: left; }
    .pairing-row .upcoming { color: #6c757d; font-style: italic; }
    /* margin-left on .player-name only applies to the first line of a wrapped
       inline — kill it here so multi-line names align flush on both lines.
       Also override the global green link color: pairings page is already
       heavy on green from .score-win, so render names in the primary text
       color for visual balance. */
    .pairing-row .player-name { margin-left: 0; color: #2a2a2a; }
    /* Country code suffix shown next to player names — muted so it sits
       beside the name without competing with the linked text. */
    .country {
      color: #6c757d;
      font-weight: 400;
      font-size: 0.85em;
      margin-left: 0.25rem;
      white-space: nowrap;
    }
    .pairing-row .score-win { color: #8bc541; }
    .pairing-row .score-loss { color: #ef4444; }
    .pairing-row .score-tie { color: #4a8ed1; }
    /* Bye / forfeit marker shown in the opponent column on pairings + the
       opponent cell on player card game rows. Italic + muted to read
       "this isn't a real opponent" without competing with linked names. */
    .bye-marker {
      color: #6c757d;
      font-style: italic;
      text-decoration: none;
      font-weight: 600;
      letter-spacing: 0.04em;
    }
    /* Player Card */
    .player-header {
      display: grid;
      grid-template-columns: 1fr 3fr;
      align-items: center;
      gap: 1.25rem;
      margin-bottom: 1.5rem;
      padding-bottom: 1.5rem;
      border-bottom: 1px solid #dee2e6;
    }
    .player-header.no-photo { grid-template-columns: 1fr; }
    .player-photo {
      width: 100%;
      aspect-ratio: 1 / 1;
      object-fit: cover;
      border-radius: 8px;
      background: #f7f7f7;
    }
    .player-header-info { text-align: center; }
    .player-title { font-size: 1.75rem; font-weight: 700; color: #2a2a2a; }
    .player-meta { color: #6c757d; margin-top: 0.5rem; }
    .player-stats {
      display: flex;
      justify-content: center;
      gap: 2rem;
      margin-top: 1rem;
    }
    .stat { text-align: center; }
    .stat-value { font-size: 1.5rem; font-weight: 700; display: block; }
    .stat-value sup { font-size: 0.75em; }
    .stat-label { font-size: 0.875rem; color: #6c757d; }
    .games-list h2 { font-size: 1rem; margin-bottom: 1rem; color: #6c757d; }
    .game-row {
      display: flex;
      align-items: center;
      gap: 1rem;
      padding: 0.75rem 0;
      border-bottom: 1px solid #dee2e6;
    }
    .game-row:last-child { border-bottom: none; }
    .game-row .round { color: #6c757d; font-size: 0.875rem; min-width: 2rem; flex-shrink: 0; }
    /* R-cell becomes a link when the round has standings to jump to.
       Keep the same muted color as the static R-cell so the column reads
       uniformly; only the underline + hover hint at the link. */
    .game-row a.round-link { color: #6c757d; text-decoration: underline; text-underline-offset: 2px; }
    .game-row a.round-link:hover { color: #8bc541; }
    .game-row .result { font-weight: 700; min-width: 1.5rem; flex-shrink: 0; }
    .game-row .result.win { color: #8bc541; }
    .game-row .result.loss { color: #ef4444; }
    .game-row .result.tie { color: #4a8ed1; }
    .game-row .spread.tie { color: #4a8ed1; }
    /* Opponent cell takes whatever space is left; allow the name to wrap.
       Wraps the name link + country suffix together so the country sits
       directly next to the name instead of being pushed to the far right
       by a flex:1 link. */
    .game-row .opp-cell { flex: 1; min-width: 0; overflow-wrap: break-word; word-break: break-word; }
    .game-row .opp-cell .player-name { margin-left: 0; }
    /* Score + spread should never split across lines. */
    .game-row .game-score { margin-left: auto; white-space: nowrap; flex-shrink: 0; }
    .game-row .game-score.upcoming { color: #6c757d; font-style: italic; }
    .game-row .spread { white-space: nowrap; flex-shrink: 0; }
    /* Division Index */
    .section { margin-top: 1.5rem; }
    .section h2 { font-size: 1rem; color: #6c757d; margin-bottom: 1rem; }
    .view-all {
      display: block;
      text-align: center;
      margin-top: 1rem;
      color: #8bc541;
      text-decoration: none;
    }
    .view-all:hover { text-decoration: underline; }
    .tsh-link {
      display: inline-block;
      margin-top: 1rem;
      padding: 0.5rem 1rem;
      border: 1px solid #8bc541;
      border-radius: 0.25rem;
      color: #8bc541;
      text-decoration: none;
      font-size: 0.95rem;
    }
    .tsh-link:hover { background: #C2F15E; }
    .round-links {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      gap: 0.5rem;
    }
    .round-links a {
      color: #8bc541;
      text-decoration: none;
      padding: 0.5rem;
      border: 1px solid #dee2e6;
      border-radius: 0.25rem;
      text-align: center;
      font-size: 0.875rem;
    }
    .round-links a:hover { background: #C2F15E; }
    /* Tournament Index */
    .tournament-header { text-align: center; margin-bottom: 1.5rem; }
    .tournament-header h1 { font-size: 2rem; color: #2a2a2a; }
    .division-grid { display: flex; flex-direction: column; gap: 1rem; }
    .division-card {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding: 1rem 1.5rem;
      background: #C2F15E;
      border-radius: 0.5rem;
      text-decoration: none;
      color: #2a2a2a;
    }
    .division-card:hover { opacity: 0.9; }
    .division-name { font-weight: 600; font-size: 1.125rem; }
    .division-info { color: #6c757d; font-size: 0.875rem; }
    .top10-link {
      display: block;
      text-align: center;
      padding: 1rem;
      background: #8bc541;
      color: white;
      text-decoration: none;
      border-radius: 0.5rem;
      font-weight: 600;
    }
    .top10-link:hover { opacity: 0.9; }
    /* Top 10 */
    .card.wide { max-width: 1800px; }
    /* Wrapper applied around the overview.php include so the
       embedded fragment gets the same font-size + max-width
       cascade that container.wide provides for the standalone
       lps.html — without this, h1/h2 render at browser default
       and player names truncate much earlier inside Barry parent
       page. */
    .lps-overview {
      max-width: 1800px;
      margin: 0 auto;
      font-size: 14px;
      line-height: 1.4;
      font-family: 'Poppins', sans-serif !important;
      color: #2a2a2a;
      background: #ffffff;
      border-radius: 15px;
      padding: 20px;
    }
    .lps-overview, .lps-overview * {
      font-family: 'Poppins', sans-serif !important;
    }
    .top10-grid {
      display: grid;
      /* auto-fit + minmax so 5 columns lay out side-by-side on wide
         viewports (overview.php inside Barry's wide parent) but
         wrap to fewer rows when the container is narrower than
         5×280px. Avoids horizontal scroll bars on Barry's mobile/
         narrow-column layouts. */
      grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
      gap: 1rem;
      font-size: 14px;
      line-height: 1.4;
    }
    .top10-division {
      background: #ffffff;
      border-radius: 12px;
      padding: 12px;
    }
    .top10-division .division-pill {
      display: block;
      text-align: center;
      margin-bottom: 1rem;
      text-decoration: none;
    }
    .top10-row {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 1rem;
      padding: 0.4rem 0;
      border-bottom: 1px solid #dee2e6;
    }
    .top10-row:last-child { border-bottom: none; }
    .top10-row .left { display: flex; align-items: center; }
    .top10-row .right { display: flex; align-items: center; gap: 0.5rem; }
    .top10-row .rank { min-width: 1.8rem; }
    .top10-row .player-name {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      max-width: 90px;
      display: inline-block;
    }
    .top10-row .record { white-space: nowrap; }
    .top10-row .spread { min-width: 2.5rem; text-align: right; white-space: nowrap; }
    .top10-round-status {
      margin-top: 0.5rem;
      padding-top: 0.5rem;
      text-align: center;
      color: #6c757d;
      font-size: 0.85rem;
      font-weight: 500;
    }
