.tournament-page{min-width:0;padding-bottom:48px}.tournament-breadcrumb{padding:25px 0;color:var(--muted);font-size:13px}.tournament-breadcrumb a:hover{color:var(--accent)}.tournament-heading{padding:24px 0 32px;max-width:900px}.tournament-heading h1{font-size:clamp(27px,4vw,44px);line-height:1.2;margin:12px 0 22px;overflow-wrap:anywhere}.tournament-meta{display:flex;flex-wrap:wrap;gap:16px;align-items:center}.tournament-status{color:var(--accent2);border:1px solid var(--line);border-radius:25px;padding:5px 14px}.tournament-updated,.bracket-hint,.bracket-legend{color:var(--muted);font-size:12px}.tournament-stage{min-width:0}.tournament-stage .section-head{flex-wrap:wrap;gap:12px}.bracket-scroll{overflow-x:auto;max-width:100%;border:1px solid var(--line);border-radius:16px;background:var(--bg);overscroll-behavior-x:contain}.bracket-scroll:focus-visible{outline:2px solid var(--accent)}.bracket-canvas{width:1740px;height:1250px;position:relative}.bracket-lines{position:absolute;inset:0;pointer-events:none}.bracket-edge{fill:none;stroke:var(--accent);stroke-width:1.5;opacity:.65}.bracket-edge--loser{stroke:var(--blue);stroke-dasharray:5 5;opacity:.55}.bracket-match{position:absolute;width:250px;height:156px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 12px;box-shadow:0 6px 20px #0003}.bracket-round{font-size:11px;font-weight:800;color:var(--accent2);white-space:nowrap}.bracket-match-status{font-size:10px;color:var(--muted);margin:3px 0 8px}.bracket-team{display:flex;gap:8px;align-items:center;min-height:40px;font-size:12px}.bracket-team img{object-fit:contain;flex:0 0 26px}.team-name{flex:1;line-height:1.2;overflow-wrap:anywhere}.bracket-team strong{font-variant-numeric:tabular-nums;min-width:18px;text-align:right}.team-placeholder{width:26px;height:26px;flex:0 0 26px;text-align:center;background:var(--surface2);border-radius:6px;color:var(--muted)}.is-winner{color:var(--accent2);font-weight:800}.is-loser{opacity:.55}.winner-mark{font-size:11px}.tournament-empty{padding:30px;border:1px solid var(--line);border-radius:12px;color:var(--muted)}
@media(max-width:620px){.tournament-heading{padding-top:10px}.tournament-breadcrumb{font-size:11px}.bracket-legend{max-width:280px}.tournament-stage h2{font-size:22px}.tournament-heading p{font-size:13px}}
.bracket-team [hidden]{display:none!important}
/* Compact DE layout: 5 columns, 30px routing gutters; header remains unchanged. */
.bracket-canvas{width:1176px;height:908px}
.bracket-branch{position:absolute;margin:0;font-size:15px;font-weight:800;color:var(--text);letter-spacing:.02em}
.bracket-branch--lower{color:#92b8ef}
.bracket-column{position:absolute;width:202px;margin:0;padding-bottom:7px;border-bottom:1px solid var(--line);font-size:13px;font-weight:700;color:var(--muted)}
.bracket-match{width:202px;height:108px;padding:7px 10px;border-radius:9px;box-shadow:0 3px 12px #0002}
.bracket-match-status{font-size:11px;line-height:15px;margin:0 0 4px;white-space:nowrap}
.bracket-team{min-height:34px;font-size:13px;gap:6px}
.bracket-team img{width:22px;height:22px;flex-basis:22px}
.team-placeholder{width:22px;height:22px;flex-basis:22px}
.team-name{line-height:1.15}
.bracket-team strong{font-size:13px}
.bracket-edge{stroke:#dc6560;stroke-width:1.5;opacity:.78}
.bracket-edge--loser{stroke:#79abef;stroke-dasharray:5 4;opacity:.75}
.bracket-match:focus-visible,.bracket-match.is-highlighted{outline:2px solid var(--accent);outline-offset:2px}
.bracket-canvas.is-tracing .bracket-edge{opacity:.5}
.bracket-canvas.is-tracing .bracket-edge.is-highlighted{opacity:1;stroke-width:2.5}
.bracket-canvas.is-tracing .bracket-match:not(.is-highlighted){opacity:.8}
.bracket-canvas.is-tracing .bracket-match.is-highlighted{opacity:1}
.tournament-news{margin-top:30px;padding:22px 0;border-top:1px solid var(--line)}
.tournament-news h2{font-size:22px;margin:0 0 10px}
.tournament-news p,.tournament-news small{color:var(--muted)}
/* Final colour semantics: green results, blue elimination paths, brand-red focus. */
.bracket-team.is-winner{color:#82bd99}
.bracket-team.is-loser{color:#9ba5b0;opacity:.65}
.bracket-edge{stroke:#82bd99}
.bracket-edge--loser{stroke:#79abef}
.bracket-match.is-highlighted{outline:none}
.bracket-canvas.is-tracing .bracket-match.is-chain-winner:not(.is-active){border-color:#82bd99;box-shadow:0 0 9px #82bd9920}
.bracket-canvas.is-tracing .bracket-match.is-chain-loser:not(.is-active){border-color:#79abef;box-shadow:0 3px 12px #0002}
.bracket-match:hover,.bracket-match:focus-visible,.bracket-match.is-active{outline:1px solid #c85e5a;outline-offset:2px}

/* Stage match lists share the existing team result styles and logo fallback. */
.stage-match-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.stage-match{min-width:0;padding:10px 12px;background:var(--surface);border:1px solid var(--line);border-radius:9px}
.tournament-heading{padding:12px 0 20px}.tournament-heading h1{margin:8px 0 14px}
.tournament-heading p{margin:10px 0}.tournament-meta{gap:10px}.tournament-stage{margin-bottom:28px}
@media(max-width:900px){.stage-match-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.stage-match-list{grid-template-columns:1fr}}
