/* ---- 토너먼트 화면 ---- */
.tournament-active .landing, .tournament-active .app { display:none !important; }
#tournamentView[hidden] { display:none !important; }
#tournamentView {
  min-height:100vh; background:#07090E; color:#EEF1F7; font-family:Pretendard, sans-serif;
  letter-spacing:-0.01em; font-variant-numeric:tabular-nums; word-break:keep-all;
}
#tournamentView h1, #tournamentView h2, #tournamentView p { margin:0; letter-spacing:-0.01em; }
#tournamentView button { font-family:inherit; }
.t-wrap { max-width:1440px; margin:0 auto; padding:0 24px 48px; }
/* 데스크톱·모바일 구조가 달라 둘 다 그리고 한쪽을 숨긴다. 아래 요소별 display보다 앞서도록 id로 묶는다 */
#tournamentView .t-mob { display:none; }

/* 로고: 크기만 바꾸고 옛 흰 바탕은 없앤다 */
#tournamentView .team-logo { display:block; flex:0 0 auto; padding:0; border:0; border-radius:0; background:none; object-fit:contain; }
#tournamentView .team-logo-fallback { display:inline-grid; place-items:center; background:#141925; border-radius:2px; color:#EEF1F7; font-size:10px; font-weight:700; }
#tournamentView .t-l18 { width:18px; height:18px; }
#tournamentView .t-l20 { width:20px; height:20px; }
#tournamentView .t-l22 { width:22px; height:22px; }
#tournamentView .t-l48 { width:48px; height:48px; font-size:16px; }
#tournamentView .t-l64 { width:64px; height:64px; font-size:20px; }

/* 상단 줄 */
.t-header { display:flex; align-items:center; gap:12px; height:64px; }
.t-badge { display:block; flex:0 0 auto; width:28px; height:28px; border-radius:6px; background:none; color:#07090E; font-size:12px; font-weight:800; }
.t-brand { font-size:16px; }
.t-header-sub { color:#9AA3B8; font-size:14px; }
#tournamentView .t-quit { margin-left:auto; height:44px; padding:0 4px; background:none; border:0; border-radius:0; color:#9AA3B8; font-size:14px; }
#tournamentView .t-quit:hover:not(:disabled) { color:#EEF1F7; filter:none; }

/* 제목 줄과 진행 단계 */
.t-title { display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between; gap:16px 32px; padding:20px 0 24px; }
#tournamentView .t-title h1 { font-size:28px; font-weight:700; }
#tournamentView .t-title p { margin-top:8px; color:#9AA3B8; font-size:14px; }
.t-progress { display:flex; gap:20px; align-items:flex-end; }
.t-progress > div { display:flex; flex-direction:column; gap:6px; }
.t-progress > div > span { color:#9AA3B8; font-size:12px; }
.t-steps { display:flex; gap:4px; }
.t-step { display:inline-flex; align-items:center; justify-content:center; min-width:32px; height:28px; padding:0 8px; border-radius:4px; border:1px solid #1E2432; color:#9AA3B8; font-size:13px; }
.t-step.done { background:#141925; border-color:#252C3B; }
.t-step.now { border-color:#F5C451; color:#EEF1F7; font-weight:700; }
.t-bars { display:grid; grid-template-columns:repeat(8, minmax(0, 1fr)); gap:4px; margin:14px 0 0; padding:0; list-style:none; }
.t-bars li { display:flex; flex-direction:column; align-items:center; gap:4px; color:#9AA3B8; font-size:11px; }
.t-bars li::before { content:""; width:100%; height:4px; border-radius:2px; background:#1E2432; }
.t-bars li.done::before { background:#9AA3B8; }
.t-bars li.now::before { background:#F5C451; }
.t-bars li.now { color:#EEF1F7; font-weight:700; }

/* 우리 경기 카드 */
.t-card { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:24px; padding:28px 32px; background:#10141D; border:1px solid #F5C451; border-radius:4px; }
.t-card-team { display:flex; align-items:center; gap:16px; min-width:0; }
.t-card-team.right { flex-direction:row-reverse; text-align:right; }
.t-card-team > div { display:flex; flex-direction:column; gap:4px; min-width:0; }
.t-card-team b { font-size:24px; }
.t-card .t-cap { color:#9AA3B8; font-size:12px; }
.t-card .t-line { color:#9AA3B8; font-size:13px; }
.t-card-mid { display:flex; flex-direction:column; align-items:center; gap:8px; flex:0 0 auto; text-align:center; }
.t-chip { border:1px solid #252C3B; border-radius:4px; padding:4px 10px; font-size:14px; font-weight:700; }
.t-card-mid .t-win { margin-top:4px; font-size:13px; }
.t-card-mid .t-lose { color:#9AA3B8; font-size:13px; }

/* 1세트 준비 줄과 결과 줄 */
.t-prep { display:flex; flex-wrap:wrap; align-items:center; gap:16px 28px; margin-top:12px; padding:16px 20px; background:#10141D; border:1px solid #1E2432; border-radius:4px; }
.t-prep-head { display:flex; flex-direction:column; gap:2px; }
.t-prep-head b { font-size:15px; }
.t-prep-head span { color:#9AA3B8; font-size:12px; }
.t-choices { display:flex; align-items:center; gap:8px; }
.t-choices > span { margin-right:4px; color:#9AA3B8; font-size:13px; }
#tournamentView .t-choice { height:44px; min-width:88px; padding:0 16px; border-radius:4px; background:#141925; border:1px solid #252C3B; color:#EEF1F7; font-size:14px; font-weight:600; }
#tournamentView .t-choice.blue[aria-pressed="true"] { background:rgba(74, 140, 255, 0.16); border-color:#4A8CFF; }
#tournamentView .t-choice.red[aria-pressed="true"] { background:rgba(240, 80, 90, 0.16); border-color:#F0505A; }
#tournamentView .t-choice.gold[aria-pressed="true"] { background:rgba(245, 196, 81, 0.16); border-color:#F5C451; }
#tournamentView .t-choice:disabled { opacity:0.4; cursor:default; }
#tournamentView .t-choice:disabled[aria-pressed="true"] { opacity:1; }
#tournamentView .t-outcome { flex:1 1 220px; color:#9AA3B8; font-size:13px; }
#tournamentView .t-start { height:48px; min-width:200px; padding:0 24px; border:0; border-radius:4px; background:#F5C451; color:#07090E; font-size:16px; font-weight:700; }
#tournamentView .t-start:disabled { opacity:0.4; }
#tournamentView .t-ghost { height:48px; padding:0 20px; border:1px solid #252C3B; border-radius:4px; background:#141925; color:#EEF1F7; font-size:14px; font-weight:600; }
.t-status-actions { display:flex; flex-wrap:wrap; gap:8px; margin-left:auto; }

/* 아래 두 칸: 대진과 순위 */
.t-lower { display:grid; grid-template-columns:minmax(0, 1fr) 280px; gap:24px; margin-top:32px; align-items:start; }
#tournamentView .t-board h2, #tournamentView .t-aside h2 { font-size:16px; }
#tournamentView .t-board h2 { margin-bottom:14px; }
.t-scroll { overflow-x:auto; }

/* 스위스 대진 */
.t-swiss { display:grid; grid-template-columns:repeat(5, minmax(0, 1fr)); gap:12px; min-width:900px; }
.t-col { display:flex; flex-direction:column; gap:14px; min-width:0; }
.t-col-head { display:flex; align-items:center; gap:8px; min-height:36px; padding-bottom:8px; border-bottom:1px solid #1E2432; }
.t-col-head b { font-size:14px; }
.t-col-head span { color:#9AA3B8; font-size:12px; }
.t-col-head .t-dot { width:6px; height:6px; border-radius:50%; background:#F5C451; }
.t-group { display:flex; flex-direction:column; gap:6px; }
.t-group-head { display:flex; justify-content:space-between; gap:8px; color:#9AA3B8; font-size:12px; }
.t-mc { display:flex; flex-direction:column; gap:2px; padding:7px 10px; border-radius:4px; background:#10141D; border:1px solid #1E2432; }
.t-mc.ours { background:#141925; border-color:#F5C451; }
.t-mc-row { display:flex; align-items:center; gap:8px; height:22px; font-size:13px; font-weight:500; }
.t-mc-name { flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.t-mc-row.won { font-weight:700; }
.t-mc-row.lost { color:#9AA3B8; }
.t-mc-row.lost .team-logo { opacity:0.4; }
.t-mc-note { font-size:11px; font-weight:700; }
.t-mc.full { gap:4px; padding:10px 12px; }
.t-mc.full .t-mc-row { gap:10px; height:26px; font-size:14px; }
.t-slot { display:flex; align-items:center; justify-content:center; height:52px; padding:0 8px; border:1px dashed #252C3B; border-radius:4px; color:#9AA3B8; font-size:12px; text-align:center; }
.t-exit { display:flex; align-items:center; justify-content:center; gap:6px; height:30px; padding:0 8px; background:#10141D; border:1px solid #1E2432; border-radius:4px; color:#9AA3B8; font-size:12px; }
.t-exit.team { color:#EEF1F7; font-weight:600; }
.t-exit.team.out { color:#9AA3B8; font-weight:500; }
.t-exit.team.out .team-logo { opacity:0.4; }

/* 녹아웃 대진: 8강 4칸이 560px을 나누고, 연결선은 오른쪽이 열린 테두리 상자로 그린다 */
.t-ko-grid { display:grid; grid-template-columns:minmax(0, 1fr) 40px minmax(0, 1fr) 40px minmax(0, 1fr); min-width:860px; }
.t-ko-head { padding-bottom:8px; border-bottom:1px solid #1E2432; color:#9AA3B8; font-size:12px; }
.t-ko-col { display:flex; flex-direction:column; height:560px; }
.t-ko-cell { flex:1; display:flex; align-items:center; min-height:0; }
.t-link { width:20px; border:1px solid #252C3B; border-left:0; }
.t-link.h140 { height:140px; }
.t-link.h280 { height:280px; }
.t-link-tail { width:20px; height:1px; background:#252C3B; }
.t-ko { display:flex; flex-direction:column; gap:6px; width:100%; padding:10px 12px; background:#10141D; border:1px solid #1E2432; border-radius:4px; }
.t-ko.ours { background:#141925; border-color:#F5C451; }
.t-ko-label { color:#9AA3B8; font-size:12px; }
.t-ko-row { display:flex; align-items:center; gap:10px; height:28px; }
.t-ko-name { flex:1; min-width:0; font-size:14px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.t-ko-rec { color:#9AA3B8; font-size:12px; }
.t-ko-score { min-width:12px; font-size:14px; text-align:right; }
.t-ko-row.lost .t-ko-name, .t-ko-row.lost .t-ko-score { color:#9AA3B8; font-weight:500; }
.t-ko-row.lost .team-logo { opacity:0.4; }
.t-ko-row.wait { gap:6px; color:#9AA3B8; font-size:13px; }
.t-ko-row.wait .team-logo { opacity:0.6; }
.t-ko-wait { min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.t-ko-wait.gap { margin-left:4px; }

/* 순위 / 스위스 결과 */
.t-aside { min-width:0; padding:16px 0; background:#10141D; border:1px solid #1E2432; border-radius:4px; }
.t-aside-head { display:flex; justify-content:space-between; align-items:baseline; padding:0 16px 10px; }
.t-aside-head span { color:#9AA3B8; font-size:12px; }
.t-st-group { display:flex; justify-content:space-between; padding:12px 16px 6px; border-top:1px solid #1E2432; color:#9AA3B8; font-size:12px; }
.t-st-row { display:flex; align-items:center; gap:10px; height:36px; padding:0 16px; }
/* 한쪽 금색 선이 있는 줄은 모서리를 둥글게 하지 않는다 */
.t-st-row.ours { background:#141925; box-shadow:inset 2px 0 0 #F5C451; border-radius:0; }
.t-st-name { flex:1; min-width:0; font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.t-st-meta { color:#9AA3B8; font-size:12px; }
.t-st-row.out .t-st-name { color:#9AA3B8; }
.t-st-row.out .team-logo { opacity:0.4; }

/* 모바일 전용 요소(데스크톱에서는 숨김) */
.t-mcard { display:none; flex-direction:column; gap:14px; padding:16px; background:#10141D; border:1px solid #F5C451; border-radius:4px; }
.t-mcard-top { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.t-mcard-team { display:flex; flex-direction:column; align-items:center; gap:6px; width:120px; min-width:0; text-align:center; }
.t-mcard-team b { max-width:100%; font-size:17px; overflow-wrap:anywhere; }
.t-mcard-team span { color:#9AA3B8; font-size:12px; }
.t-mcard-mid { display:flex; flex-direction:column; align-items:center; gap:6px; text-align:center; }
.t-mcard-mid .t-chip { padding:3px 8px; font-size:13px; }
.t-mcard-mid span:last-child { color:#9AA3B8; font-size:11px; }
.t-mcard-stakes { display:flex; justify-content:space-between; gap:8px; padding-top:12px; border-top:1px solid #1E2432; font-size:13px; }
.t-mcard-stakes span:last-child { color:#9AA3B8; text-align:right; }
.t-mcard .t-choices > span { flex:0 0 60px; width:60px; margin:0; }
#tournamentView .t-mcard .t-choice { flex:1; min-width:0; padding:0 8px; }
.t-tabs { display:flex; margin-top:24px; border-bottom:1px solid #1E2432; }
#tournamentView .t-tab { flex:1; height:44px; padding:0; background:none; border:0; border-radius:0; color:#9AA3B8; font-size:14px; font-weight:500; }
#tournamentView .t-tab[aria-pressed="true"] { color:#EEF1F7; font-weight:700; box-shadow:inset 0 -2px 0 #F5C451; }
.t-panel { display:flex; flex-direction:column; gap:16px; padding-top:16px; }
.t-panel .t-group { gap:8px; }
.t-panel .t-slot { font-size:13px; }
#tournamentView .t-st-toggle { display:flex; align-items:center; justify-content:space-between; gap:12px; width:100%; height:48px; margin-top:20px; padding:0 14px; background:#10141D; border:1px solid #1E2432; border-radius:4px; color:#EEF1F7; font-size:14px; font-weight:600; }
#tournamentView .t-st-toggle[aria-expanded="true"] { border-radius:4px 4px 0 0; }
.t-st-toggle span:last-child { min-width:0; color:#9AA3B8; font-size:13px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.t-st-drop { padding-bottom:8px; background:#10141D; border:1px solid #1E2432; border-top:0; border-radius:0 0 4px 4px; }
.t-st-drop .t-st-group { padding:10px 14px 4px; border-top:0; }
.t-st-drop .t-st-row { height:38px; padding:0 14px; }
.t-dock { display:none; }

@media (max-width:1180px) {
  .t-lower { grid-template-columns:minmax(0, 1fr); }
}

@media (max-width:700px) {
  #tournamentView .t-desk { display:none !important; }
  #tournamentView .t-mob { display:block; }
  #tournamentView .t-bars.t-mob { display:grid; }
  #tournamentView .t-mcard.t-mob { display:flex; }
  .t-wrap { padding:0 16px 48px; }
  /* 하단 고정 영역(안내 한 줄 + 52px 버튼) 뒤에 내용이 가리지 않게 한다 */
  .t-wrap.has-dock { padding-bottom:calc(140px + env(safe-area-inset-bottom)); }
  .t-header { gap:10px; height:56px; }
  .t-badge { width:26px; height:26px; font-size:11px; }
  .t-brand { font-size:15px; }
  #tournamentView .t-quit { padding:0 2px; font-size:13px; }
  .t-title { display:block; padding:12px 0 16px; }
  #tournamentView .t-title h1 { font-size:22px; }
  #tournamentView .t-title p { margin-top:6px; font-size:13px; }
  #tournamentView .t-dock.t-mob {
    position:fixed; left:0; right:0; bottom:0; z-index:40; display:flex; flex-direction:column; gap:8px;
    padding:10px 16px calc(16px + env(safe-area-inset-bottom)); background:#07090E; border-top:1px solid #1E2432;
  }
  #tournamentView .t-dock-text { color:#9AA3B8; font-size:12px; text-align:center; }
  .t-dock-text b { color:#EEF1F7; }
  #tournamentView .t-dock .t-start, #tournamentView .t-dock .t-ghost { width:100%; min-width:0; height:52px; }
  .t-dock-actions { display:flex; gap:8px; }
  .t-dock-actions button { flex:1; }
}

/* 대회 중 레이팅. 오르내림은 글자 색 대신 ▲▼로 구분한다(글자색은 두 가지만 쓴다). */
.t-rating { display:block; margin-top:2px; color:#9AA3B8; font-size:12px; font-variant-numeric:tabular-nums; }
.t-rating i, .t-st-rating i { font-style:normal; }
.t-rating i.up, .t-st-rating i.up { color:#EEF1F7; }
.t-st-rating { min-width:64px; color:#9AA3B8; font-size:12px; text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.t-st-row.ours .t-st-rating { color:#EEF1F7; }

/* 순위 변동 연출: 움직이는 줄은 다른 줄 위로 지나간다. 우리 팀이 오르면 금색 테두리가 잠깐 빛난다. */
.t-st-row { position:relative; }
.t-st-row.t-st-moving { z-index:1; background:#141925; }
.t-st-row.t-st-moving.ours.rise { box-shadow:inset 2px 0 0 #F5C451, 0 0 0 1px #F5C451; }
.t-st-rating b { font-weight:inherit; }
@media (prefers-reduced-motion: reduce) { .t-st-row { transition:none !important; transform:none !important; } }

/* ---- 경기 결과 연출 ---- */
/* 이변 표시: 레이팅이 50점 이상 낮았던 팀의 승리 */
.t-upset { flex:0 0 auto; display:inline-flex; align-items:center; height:16px; padding:0 4px; border:1px solid #F5C451; border-radius:2px; color:#EEF1F7; font-size:10px; font-weight:700; line-height:1; letter-spacing:0; }
.t-mc-row .t-mc-name, .t-ko-row .t-ko-name { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.t-mc-row .t-mc-score { margin-left:auto; }
/* 새로 끝난 경기 카드는 차례로 뒤집히며 나온다 */
.t-mc.t-new { animation:t-flip 560ms cubic-bezier(.2,.8,.2,1) both; animation-delay:calc(var(--i, 0) * 110ms + 250ms); transform-origin:50% 0; }
.t-mc.t-new .t-upset { animation:t-pop 420ms cubic-bezier(.2,.8,.2,1.4) both; animation-delay:calc(var(--i, 0) * 110ms + 700ms); }
@keyframes t-flip { from { opacity:0; transform:perspective(600px) rotateX(-70deg); } to { opacity:1; transform:none; } }
@keyframes t-pop { from { opacity:0; transform:scale(.4); } to { opacity:1; transform:none; } }
/* 녹아웃: 이긴 줄이 빛난 뒤 다음 칸에 그 팀이 들어온다 */
.t-ko-row.t-advance { animation:t-advance 900ms ease-out 300ms both; }
.t-ko-row.t-arrive { animation:t-arrive 600ms cubic-bezier(.2,.8,.2,1) 900ms both; }
@keyframes t-advance { 0% { box-shadow:inset 0 0 0 0 rgba(245,196,81,0); } 40% { box-shadow:inset 3px 0 0 #F5C451; background:rgba(245,196,81,.10); } 100% { box-shadow:inset 0 0 0 0 rgba(245,196,81,0); } }
@keyframes t-arrive { from { opacity:0; transform:translateX(-24px); } to { opacity:1; transform:none; } }

/* 순위 줄의 진출·탈락 도장 */
.t-st-stamp { flex:0 0 auto; padding:1px 5px; border:1px solid #F5C451; border-radius:2px; color:#EEF1F7; font-size:10px; font-weight:700; white-space:nowrap; animation:t-stamp 520ms cubic-bezier(.2,.8,.2,1.3) 1100ms both; }
.t-st-stamp.out { border-color:#353E52; color:#9AA3B8; }
@keyframes t-stamp { 0% { opacity:0; transform:scale(2.2) rotate(-8deg); } 60% { opacity:1; transform:scale(.92) rotate(-3deg); } 100% { opacity:1; transform:none; } }

/* 라운드 리포트: 우리 경기 직후 대진 위에 한 번 */
.t-moment { position:relative; display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; gap:10px 20px; margin-bottom:12px; padding:16px 20px; background:#10141D; border:1px solid #252C3B; border-radius:4px; overflow:hidden; }
.t-moment.win { border-color:#F5C451; }
.t-moment.fresh { animation:t-moment-in 640ms cubic-bezier(.16,1,.3,1) both; }
.t-moment-main { display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 12px; min-width:0; padding-right:56px; }
.t-moment-main .t-cap { width:100%; color:#9AA3B8; font-size:12px; }
.t-moment-title { font-size:20px; font-weight:800; }
.t-moment-score { font-size:20px; font-weight:800; font-variant-numeric:tabular-nums; }
.t-moment-main .t-upset { align-self:center; height:20px; padding:0 6px; font-size:12px; }
.t-moment-facts { grid-column:1; display:flex; flex-wrap:wrap; gap:4px 18px; color:#9AA3B8; font-size:13px; }
.t-moment-facts b { color:#EEF1F7; font-weight:700; }
.t-moment-facts i { font-style:normal; color:#EEF1F7; }
.t-moment-stamp { grid-column:2; grid-row:1 / span 2; justify-self:end; margin-right:44px; padding:8px 14px; border:2px solid #F5C451; border-radius:2px; color:#EEF1F7; font-size:18px; font-weight:800; white-space:nowrap; transform:rotate(-4deg); }
.t-moment-stamp.out { border-color:#353E52; color:#9AA3B8; }
.t-moment.fresh .t-moment-stamp { animation:t-stamp 600ms cubic-bezier(.2,.8,.2,1.3) 500ms both; }
#tournamentView .t-moment-close { position:absolute; top:10px; right:10px; height:32px; padding:0 10px; border:1px solid #252C3B; border-radius:4px; background:#141925; color:#EEF1F7; font-size:12px; }
#tournamentView .t-moment-close:hover { border-color:#353E52; background:#1B2130; }
@keyframes t-moment-in { from { opacity:0; transform:translateY(-8px); } to { opacity:1; transform:none; } }

/* 우리 레이팅 흐름 */
.t-spark { margin:0 16px 8px; padding:10px 12px; background:#0B0E15; border:1px solid #1E2432; border-radius:4px; }
.t-spark-head { display:flex; align-items:baseline; gap:6px; color:#9AA3B8; font-size:12px; }
.t-spark-head b { color:#EEF1F7; font-size:15px; font-variant-numeric:tabular-nums; }
.t-spark-head i { font-style:normal; color:#EEF1F7; }
.t-spark-rank { margin-left:auto; }
.t-spark svg { display:block; width:100%; height:56px; margin-top:6px; overflow:visible; }
.t-spark polyline { fill:none; stroke:#F5C451; stroke-width:1.5; vector-effect:non-scaling-stroke; stroke-linejoin:round; }
.t-spark circle { fill:#0B0E15; stroke:#9AA3B8; stroke-width:1; vector-effect:non-scaling-stroke; }
.t-spark circle.last { fill:#F5C451; stroke:#F5C451; }
.t-spark-axis { display:flex; justify-content:space-between; margin-top:2px; color:#9AA3B8; font-size:11px; }
.t-st-drop .t-spark { margin:12px 14px 4px; }

/* 대회 종료: 우승이면 트로피와 금색 조각, 아니면 우승팀과 우리 여정 */
.t-finale { position:relative; display:grid; justify-items:center; gap:14px; margin-bottom:16px; padding:28px 24px; text-align:center; background:#10141D; border:1px solid #252C3B; border-radius:4px; overflow:hidden; }
.t-finale.champ { border-color:#F5C451; background:radial-gradient(ellipse at 50% 0%, rgba(245,196,81,.14), transparent 60%), #10141D; }
.t-finale.fresh .t-finale-head { animation:t-moment-in 700ms cubic-bezier(.16,1,.3,1) both; }
.t-finale.fresh .t-trophy { animation:t-trophy 900ms cubic-bezier(.16,1,.3,1) both; }
.t-trophy { width:88px; height:88px; object-fit:contain; filter:drop-shadow(0 0 18px rgba(245,196,81,.35)); }
.t-finale-head { display:grid; gap:6px; }
.t-finale-head .t-cap { color:#9AA3B8; font-size:13px; }
#tournamentView .t-finale-head h2 { font-size:30px; font-weight:800; }
#tournamentView .t-finale-head p { color:#9AA3B8; font-size:14px; }
.t-finale-facts { display:flex; flex-wrap:wrap; justify-content:center; gap:4px 20px; color:#9AA3B8; font-size:13px; }
.t-finale-facts b, .t-finale-facts i { color:#EEF1F7; font-style:normal; }
.t-journey { display:flex; flex-wrap:wrap; justify-content:center; gap:6px; margin:4px 0 0; padding:0; list-style:none; }
.t-journey li { display:flex; align-items:center; gap:6px; height:32px; padding:0 10px; border:1px solid #252C3B; border-radius:4px; background:#141925; font-size:13px; }
.t-journey li.won { border-color:#F5C451; }
.t-journey li.lost { color:#9AA3B8; }
.t-journey li span:first-child { color:#9AA3B8; font-size:12px; }
.t-finale.fresh .t-journey li { animation:t-arrive 500ms cubic-bezier(.2,.8,.2,1) both; animation-delay:calc(var(--i, 0) * 90ms + 500ms); }
.t-confetti { position:absolute; inset:0; pointer-events:none; }
.t-confetti i { position:absolute; top:-12px; left:var(--x); width:6px; height:10px; background:#F5C451; opacity:0; animation:t-confetti 1800ms ease-in var(--d) 1 both; }
.t-confetti i:nth-child(3n) { background:#EEF1F7; width:4px; height:8px; }
@keyframes t-confetti { 0% { opacity:0; transform:translateY(0) rotate(0); } 10% { opacity:1; } 100% { opacity:0; transform:translateY(320px) rotate(var(--r)); } }
@keyframes t-trophy { from { opacity:0; transform:translateY(12px) scale(.8); } to { opacity:1; transform:none; } }

@media (max-width:700px) {
  .t-moment { grid-template-columns:minmax(0,1fr); padding:14px 16px; }
  .t-moment-main { padding-right:64px; }
  .t-moment-title, .t-moment-score { font-size:18px; }
  .t-moment-stamp { grid-column:1; grid-row:auto; justify-self:start; margin-right:0; font-size:15px; }
  .t-finale { padding:24px 16px; }
  #tournamentView .t-finale-head h2 { font-size:24px; }
}
@media (prefers-reduced-motion: reduce) {
  .t-mc.t-new, .t-mc.t-new .t-upset, .t-ko-row.t-advance, .t-ko-row.t-arrive, .t-st-stamp, .t-moment.fresh, .t-moment.fresh .t-moment-stamp,
  .t-finale.fresh .t-finale-head, .t-finale.fresh .t-trophy, .t-finale.fresh .t-journey li, .t-confetti i { animation:none !important; }
}

/* ---- 단계 진출 연출: 스위스 → 8강 → 4강 → 결승 → 우승 ---- */
.t-stage { position:fixed; inset:0; z-index:1000; display:grid; place-items:center; padding:24px 16px; background:rgba(7,9,13,.88); overflow:hidden; animation:t-stage-fade 260ms ease-out both; cursor:pointer; }
.t-stage.leaving { animation:t-stage-out 240ms ease-in both; }
.t-stage::before { content:""; position:absolute; left:0; right:0; top:50%; height:2px; background:linear-gradient(90deg, transparent, #F5C451, transparent); opacity:0; transform:scaleX(0); animation:t-stage-sweep 900ms cubic-bezier(.16,1,.3,1) 120ms both; }
.t-stage-inner { position:relative; display:grid; justify-items:center; gap:14px; width:min(640px, 100%); text-align:center; cursor:default; }
.t-stage-path { display:flex; align-items:center; justify-content:center; gap:0; margin:0 0 8px; padding:0; list-style:none; }
.t-stage-path li { position:relative; display:flex; align-items:center; gap:0; color:#9AA3B8; font-size:13px; font-weight:700; }
.t-stage-path li span { display:inline-flex; align-items:center; height:30px; padding:0 12px; border:1px solid #353E52; border-radius:4px; background:#10141D; white-space:nowrap; }
.t-stage-path li + li::before { content:""; width:28px; height:2px; background:#353E52; }
.t-stage-path li.done span { border-color:#F5C451; color:#EEF1F7; }
.t-stage-path li.done + li::before, .t-stage-path li.now::before { background:#F5C451; }
.t-stage-path li.now span { border-color:#F5C451; background:#F5C451; color:#10141D; }
.t-stage-path li.now::before { transform-origin:left; animation:t-stage-line 500ms ease-out 600ms both; }
.t-stage-path li.now span { animation:t-stage-node 520ms cubic-bezier(.2,.8,.2,1.3) 1000ms both; }
.t-stage-path li span { animation:t-stage-pop 320ms ease-out both; animation-delay:calc(var(--i) * 70ms + 150ms); }
.t-stage-team { color:#9AA3B8; font-size:15px; font-weight:700; letter-spacing:.04em; animation:t-stage-pop 400ms ease-out 900ms both; }
.t-stage-title { margin:0; color:#EEF1F7; font-size:clamp(40px, 9vw, 76px); font-weight:900; line-height:1.05; letter-spacing:-.01em; animation:t-stage-slam 640ms cubic-bezier(.2,.8,.2,1.2) 1100ms both; }
.t-stage-detail { display:flex; flex-wrap:wrap; justify-content:center; gap:4px 16px; margin:0; color:#9AA3B8; font-size:15px; animation:t-stage-pop 400ms ease-out 1500ms both; }
.t-stage-detail b { color:#EEF1F7; }
.t-stage-go { margin-top:10px; height:44px; padding:0 22px; border:1px solid #F5C451; border-radius:4px; background:#F5C451; color:#10141D; font-size:15px; font-weight:800; cursor:pointer; animation:t-stage-pop 400ms ease-out 1700ms both; }
.t-stage-go:hover { background:#FFD36B; }
.t-stage-go:focus-visible { outline:2px solid #EEF1F7; outline-offset:3px; }
/* 우승: 트로피가 빛줄기와 함께 떠오른다 */
.t-stage.champ { background:radial-gradient(ellipse at 50% 38%, rgba(245,196,81,.20), transparent 55%), rgba(7,9,13,.94); }
.t-stage.champ::before { display:none; }
.t-stage-trophy { position:relative; display:grid; place-items:center; width:220px; height:260px; }
.t-stage-trophy img { position:relative; width:100%; height:100%; object-fit:contain; filter:drop-shadow(0 0 28px rgba(245,196,81,.45)); animation:t-trophy-rise 1300ms cubic-bezier(.16,1,.3,1) 200ms both; }
.t-stage-rays { position:absolute; left:50%; top:45%; width:520px; height:520px; margin:-260px 0 0 -260px; border-radius:50%; background:repeating-conic-gradient(from 0deg, rgba(245,196,81,.16) 0deg 6deg, transparent 6deg 24deg); -webkit-mask:radial-gradient(circle, #000 0%, transparent 62%); mask:radial-gradient(circle, #000 0%, transparent 62%); opacity:0; animation:t-rays-in 900ms ease-out 900ms both, t-rays-spin 24s linear 900ms infinite; }
.t-stage.champ .t-stage-path { margin-top:18px; }
.t-stage.champ .t-stage-title { animation-delay:1500ms; }
.t-stage.champ .t-stage-team { animation-delay:1300ms; color:#EEF1F7; font-size:18px; }
.t-stage.champ .t-stage-detail { animation-delay:1900ms; }
.t-stage.champ .t-stage-go { animation-delay:2200ms; }
.t-stage .t-confetti { z-index:1; }
.t-stage .t-confetti i { animation-duration:2600ms; }
@keyframes t-stage-fade { from { opacity:0; } to { opacity:1; } }
@keyframes t-stage-out { to { opacity:0; } }
@keyframes t-stage-sweep { 0% { opacity:0; transform:scaleX(0); } 40% { opacity:.9; } 100% { opacity:0; transform:scaleX(1); } }
@keyframes t-stage-pop { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:none; } }
@keyframes t-stage-line { from { transform:scaleX(0); } to { transform:scaleX(1); } }
@keyframes t-stage-node { 0% { transform:scale(.6); background:#10141D; color:#9AA3B8; } 60% { transform:scale(1.18); } 100% { transform:scale(1); } }
@keyframes t-stage-slam { 0% { opacity:0; transform:scale(1.6); letter-spacing:.2em; } 100% { opacity:1; transform:none; } }
@keyframes t-trophy-rise { 0% { opacity:0; transform:translateY(60px) scale(.7); } 70% { opacity:1; transform:translateY(-6px) scale(1.04); } 100% { transform:none; } }
@keyframes t-rays-in { from { opacity:0; transform:scale(.6); } to { opacity:1; transform:none; } }
@keyframes t-rays-spin { to { rotate:360deg; } }
@media (max-width:700px) {
  .t-stage-path li span { height:26px; padding:0 8px; font-size:12px; }
  .t-stage-path li + li::before { width:12px; }
  .t-stage-trophy { width:170px; height:200px; }
  .t-stage-rays { width:380px; height:380px; margin:-190px 0 0 -190px; }
}
@media (prefers-reduced-motion: reduce) {
  .t-stage, .t-stage *, .t-stage::before { animation:none !important; }
  .t-stage::before { display:none; }
}
