@font-face {
    font-family: "Fenpai Tournament Anton";
    src: url("/draw/Anton-Regular.ttf") format("truetype"),
         url("/player-public/assets/tournament-anton.ttf") format("truetype");
    font-style: normal;
    font-weight: 400;
    font-display: swap;
}

@font-face {
    font-family: "Fenpai Tournament Alimama";
    src: url("/draw/AlimamaShuHeiTi-Bold.ttf") format("truetype"),
         url("/player-public/assets/tournament-alimama.ttf") format("truetype");
    font-style: normal;
    font-weight: 700;
    font-display: swap;
}

@font-face {
    font-family: "Fenpai Tournament Source Han";
    src: url("/draw/SourceHanSansCN-Medium.otf") format("opentype"),
         url("/player-public/assets/tournament-source-han-medium.otf") format("opentype");
    font-style: normal;
    font-weight: 500;
    font-display: swap;
}

@font-face {
    font-family: "Fenpai Tournament Delta";
    src: url("/draw/SourceHanSansCN-Heavy.otf") format("opentype"),
         url("/player-public/assets/tournament-source-han-heavy.otf") format("opentype");
    font-style: normal;
    font-weight: 900;
    font-display: swap;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .std-wrapper {
    display: block;
    left: 50%;
    bottom: 34px;
    width: 1730px;
    max-width: none;
    height: 172px;
    gap: 0;
    isolation: isolate;
    overflow: visible;
    transform: translateX(-50%);
    transform-origin: center bottom;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .std-wrapper::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    background-image: url("/draw/tournament-scoreboard-frame.png");
    background-position: center;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    pointer-events: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .std-info-bar {
    position: absolute;
    inset: 0;
    z-index: 2;
    width: auto;
    height: auto;
    padding: 0;
    overflow: visible;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .std-info-bar::before,
body[data-mode="individual"][data-scoreboard-style="tournament"] .std-info-bar::after {
    display: none;
}

/* 顶部黄色信息横条：蓝地块让位给 logo，标题+PTS+局数全部上移到这根圆角斜切条上。
   范围：左起蓝色 logo 块的斜切圆角，右至黄色边框圆角；skew+圆角与边框素材同语言 */
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-left {
    position: absolute;
    left: 88px;
    top: -47px;
    right: 8px;
    z-index: 3;
    display: flex;
    align-items: center;
    height: 44px;
    padding: 0 38px 0 34px;
    box-sizing: border-box;
    background: #ffe23f;
    border-radius: 10px;
    transform: skewX(-17.65deg);
    transform-origin: center;
}

/* 文字反向 skew 回正 */
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-left .info-title,
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-left .info-date,
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-left .info-round {
    transform: skewX(17.65deg);
}

/* 标题即整条文案：一个自由文本框，空格由操作者自行输入（white-space: pre 保留连续空格） */
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-title {
    order: 1;
    flex: 0 1 auto;
    min-width: 0;
    overflow: hidden;
    color: #0b0b0b !important;
    font-family: var(--font-card-ui);
    font-size: 30px;
    font-style: normal;
    font-weight: 900;
    line-height: 1;
    letter-spacing: 0.01em;
    text-overflow: ellipsis;
    text-shadow: none;
    text-transform: none;
    white-space: pre;
}

/* 赛事标签字段不再上条（全部文案写进标题框）；经典皮肤的日期显示不受影响 */
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-date {
    display: none;
}

/* 第N局：右端黑色粗体，同条内右对齐（局数由系统自动更新） */
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-round {
    order: 3;
    margin-left: auto;
    flex-shrink: 0;
    width: auto;
    min-width: 0;
    height: auto;
    padding: 0;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    overflow: visible;
    border: 0 !important;
    border-radius: 0;
    background: transparent !important;
    box-shadow: none !important;
    clip-path: none;
    color: #0b0b0b !important;
    font-family: var(--font-card-ui);
    font-size: 30px;
    font-style: normal;
    font-weight: 900;
    line-height: 1;
    letter-spacing: 0.02em;
    white-space: nowrap;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .info-round[data-tournament-status="waiting"],
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-round[data-tournament-status="network_test"] {
    padding-inline: 0;
}

/* 赛事版不展示上局赛道与上局最快时间：两块蓝色信息块整体隐藏，黄条独占顶部 */
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-center,
body[data-mode="individual"][data-scoreboard-style="tournament"] .info-right {
    display: none !important;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .std-container {
    position: absolute;
    left: 370px;
    top: 18px;
    z-index: 3;
    width: 1312px;
    height: 136px;
    display: grid;
    grid-template-columns: repeat(8, minmax(0, 1fr));
    align-items: stretch;
    gap: 0;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card {
    width: auto;
    min-width: 0;
    height: 138px;
    min-height: 138px;
    padding: 0;
    display: block;
    overflow: visible;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
    clip-path: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card:first-child {
    border-left: 0;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card::after {
    content: "";
    position: absolute;
    /* Continue the name spray's 14px / 44px slant through the score field. */
    left: -15px;
    right: 43px;
    bottom: 8px;
    display: block;
    width: auto;
    height: 4px;
    background: var(--p-color);
    border: 0;
    transform: none;
    opacity: 0.95;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card-rank {
    top: 14px;
    left: 8px;
    right: 6px;
    width: auto;
    height: 44px;
    z-index: 0;
    border-radius: 0;
    background: rgba(18, 54, 83, 0.35);
    box-shadow: none;
    clip-path: polygon(14px 0, 100% 0, calc(100% - 14px) 100%, 0 100%);
    color: var(--rank-text-color, #ffffff) !important;
    font-size: 0;
    line-height: 0;
}

/* outline layer that follows the slanted shape, keeps light bars visible */
body[data-mode="individual"][data-scoreboard-style="tournament"] .card-rank::before {
    content: "";
    position: absolute;
    inset: 1.5px;
    background: var(--p-color);
    box-shadow: none;
    clip-path: polygon(13px 0, 100% 0, calc(100% - 13px) 100%, 0 100%);
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-dark .card-rank {
    box-shadow: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card:nth-child(4) .card-rank {
    box-shadow: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-main {
    position: absolute;
    inset: 0;
    width: auto;
    height: auto;
    padding: 0;
    display: block;
    transform: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-name {
    position: absolute;
    left: 10px;
    right: 8px;
    top: 14px;
    z-index: 1;
    display: flex;
    width: auto;
    height: 44px;
    margin: 0;
    padding: 0 10px;
    box-sizing: border-box;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    border: 0;
    color: var(--rank-text-color, #ffffff);
    font-family: var(--font-card-ui);
    font-size: 28px;
    font-weight: 900;
    line-height: 1;
    letter-spacing: 0;
    text-align: center;
    text-overflow: ellipsis;
    text-shadow: none;
    white-space: nowrap;
}

body[data-mode="individual"][data-scoreboard-style="tournament"][data-name-tier="4"] .p-name {
    font-size: 26px;
}

body[data-mode="individual"][data-scoreboard-style="tournament"][data-name-tier="5"] .p-name {
    font-size: 24px;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score {
    position: absolute;
    left: 14px;
    bottom: 19px;
    display: block;
    width: auto;
    margin: 0;
    color: #111111;
    font-family: var(--font-card-ui);
    font-size: 52px;
    font-style: normal;
    font-weight: 700;
    line-height: 1;
    letter-spacing: 0;
    text-align: left;
    text-shadow: none;
    font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1;
    transform-origin: left center;
    transition: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score.scrolling,
body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score.high-glow {
    color: #111111;
    text-shadow: none;
    transform: none;
}

/* 斜切滚轴 Beat 2：总分像翻牌钟一样竖向滚动换新，旧值滚出裁切窗、新值自下滚入 */
body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score.rolling {
    height: 1em;
    overflow: hidden;
    animation: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score-roll {
    display: block;
    animation: tournamentScoreRoll 400ms cubic-bezier(0.32, 0.72, 0.18, 1) both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score-roll-old,
body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score-roll-new {
    display: block;
    line-height: 1;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score.high-glow {
    animation: none;
}

/* 3+ char totals (e.g. "150", "-12") shrink so they clear the round-diff badge */
body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score.score-wide {
    font-size: 42px;
}

/* defensive tier for 4+ char totals (e.g. "1000", "-123") */
body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score.score-xwide {
    font-size: 34px;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-diff {
    right: 47px;
    bottom: 22px;
    min-width: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    color: #14a34a;
    font-family: var(--font-sans);
    font-size: 19px;
    font-style: normal;
    font-weight: 700;
    line-height: 21px;
    text-align: right;
    justify-content: flex-end;
    transition: none;
}

/* wide totals also move the diff band right so score and delta never share glyph space */
body[data-mode="individual"][data-scoreboard-style="tournament"] .card:has(.p-score.score-wide) .p-diff {
    right: 14px;
}

/* 斜切滚轴 Beat 1：角标沿 14px 斜切轴擦入（常驻显示，更新时重播） */
body[data-mode="individual"][data-scoreboard-style="tournament"] .p-diff.tournament-diff-in {
    animation: tournamentDiffWipeIn 250ms cubic-bezier(0.32, 0.72, 0.18, 1) both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-forfeit {
    position: absolute;
    left: 12px;
    right: 18px;
    bottom: 28px;
    display: none;
    color: #e2344f;
    font-family: var(--font-card-ui);
    font-size: 31px;
    font-weight: 900;
    line-height: 1;
    letter-spacing: 0;
    text-align: center;
    text-shadow: none;
    white-space: nowrap;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeited .p-score,
body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeited .p-diff {
    display: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeited .p-forfeit {
    display: block;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeited.is-forfeit-entering .p-score,
body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeited.is-forfeit-entering .p-diff {
    display: block;
    animation: tournamentForfeitScoreOut 180ms ease-out both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeited.is-forfeit-entering .p-forfeit {
    display: block;
    animation: tournamentForfeitLabelIn 180ms ease-out both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeit-leaving .p-score,
body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeit-leaving .p-diff {
    animation: tournamentForfeitScoreIn 180ms ease-out both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.is-forfeit-leaving .p-forfeit {
    display: block;
    animation: tournamentForfeitLabelOut 180ms ease-out both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-rank-up,
body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-rank-down {
    will-change: transform;
    animation-delay: var(--tournament-flip-delay, 0ms);
    animation-duration: var(--tournament-flip-duration, 600ms);
    animation-fill-mode: both;
    animation-timing-function: cubic-bezier(0.32, 0.72, 0.18, 1);
}

/* Beat 3：上行卡不再切换纯白底——只抬 z-index，白底改为动画内 120ms 渐入渐出兜底 */
body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-rank-up {
    animation-name: tournamentCardSlideUp;
    z-index: 5;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-rank-down {
    animation-name: tournamentCardSlideDown;
    z-index: 2;
}

/* 斜切滚轴 Beat 4：落位定格——2px 下沉回弹；上行卡的色条再做一次单程斜切扫过 */
body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-landing {
    animation: tournamentLandingSink 140ms cubic-bezier(0.32, 0.72, 0.18, 1) both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-landing-up .card-rank::before {
    animation: tournamentRankBarSweep 200ms cubic-bezier(0.32, 0.72, 0.18, 1) both;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-diff.plus {
    padding: 0;
    border: 0;
    background: none;
    color: #14a34a;
    text-shadow: none;
}

body[data-mode="individual"][data-scoreboard-style="tournament"] .p-diff.minus {
    padding: 0;
    border: 0;
    background: none;
    color: #e2344f;
    text-shadow: none;
}

/* 斜切滚轴 Beat 2：旧值上滚出窗、新值自下滚入（track 高度为两行，上移一行） */
@keyframes tournamentScoreRoll {
    0% {
        transform: translateY(0);
    }
    100% {
        transform: translateY(-50%);
    }
}

/* Beat 1 擦入：斜切前缘自右向左扫过；纯百分比顶点保证平滑插值，定格帧四角均在盒外不裁字形 */
@keyframes tournamentDiffWipeIn {
    0% {
        clip-path: polygon(120% -10%, 160% -10%, 120% 110%, 80% 110%);
        transform: translateY(3px);
    }
    100% {
        clip-path: polygon(-60% -10%, 160% -10%, 120% 110%, -100% 110%);
        transform: translateY(0);
    }
}

/* Beat 3：滑动换位。透明分数区在交错期以白面兜底，首尾 20% 内渐入渐出（是渐变不是闪切） */
@keyframes tournamentCardSlideUp {
    0% {
        transform: translateX(var(--tournament-flip-x, 0)) translateY(0);
        background: rgba(255, 255, 255, 0);
    }
    20% {
        background: rgba(255, 255, 255, 1);
    }
    80% {
        background: rgba(255, 255, 255, 1);
    }
    92% {
        transform: translateX(0) translateY(-3px);
    }
    100% {
        transform: translateX(0) translateY(0);
        background: rgba(255, 255, 255, 0);
    }
}

@keyframes tournamentCardSlideDown {
    0% {
        transform: translateX(var(--tournament-flip-x, 0)) translateY(0);
    }
    92% {
        transform: translateX(0) translateY(2px);
    }
    100% {
        transform: translateX(0) translateY(0);
    }
}

/* Beat 4：落位 2px 下沉回弹 */
@keyframes tournamentLandingSink {
    0% {
        transform: translateY(0);
    }
    45% {
        transform: translateY(2px);
    }
    100% {
        transform: translateY(0);
    }
}

/* Beat 4：色条沿斜切方向单程扫过（用选手本色的裁切揭示，非发光） */
@keyframes tournamentRankBarSweep {
    0% {
        clip-path: polygon(13px 0, 30% 0, calc(30% - 13px) 100%, 0 100%);
    }
    100% {
        clip-path: polygon(13px 0, 100% 0, calc(100% - 13px) 100%, 0 100%);
    }
}

/* 斜切滚轴入场：换名单时沿 14px/44px 斜切轴逐张滑入（仅赛事版；经典版 cardEntry 原样） */
body[data-mode="individual"][data-scoreboard-style="tournament"] .card.entrance {
    animation-name: tournamentCardEntrance;
    animation-duration: 380ms;
    animation-timing-function: cubic-bezier(0.32, 0.72, 0.18, 1);
    animation-fill-mode: both;
}

@keyframes tournamentCardEntrance {
    0% {
        opacity: 0;
        transform: translateX(44px) translateY(14px);
    }
    100% {
        opacity: 1;
        transform: translateX(0) translateY(0);
    }
}

/* 直播/光敏保护：系统要求减少动效时，赛事版所有新动效全部拉平为瞬时 */
@media (prefers-reduced-motion: reduce) {
    body[data-mode="individual"][data-scoreboard-style="tournament"] .p-score-roll,
    body[data-mode="individual"][data-scoreboard-style="tournament"] .p-diff.tournament-diff-in,
    body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-rank-up,
    body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-rank-down,
    body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-landing,
    body[data-mode="individual"][data-scoreboard-style="tournament"] .card.tournament-landing-up .card-rank::before,
    body[data-mode="individual"][data-scoreboard-style="tournament"] .card.entrance {
        animation-duration: 0.01ms;
        animation-delay: 0ms;
    }
}

@keyframes tournamentForfeitScoreOut {
    0% {
        opacity: 1;
        transform: translateY(0);
    }
    100% {
        opacity: 0;
        transform: translateY(3px);
    }
}

@keyframes tournamentForfeitLabelIn {
    0%, 45% {
        opacity: 0;
        transform: translateY(3px);
    }
    100% {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes tournamentForfeitScoreIn {
    0% {
        opacity: 0;
        transform: translateY(3px);
    }
    100% {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes tournamentForfeitLabelOut {
    0% {
        opacity: 1;
        transform: translateY(0);
    }
    100% {
        opacity: 0;
        transform: translateY(3px);
    }
}

@media (max-width: 1750px) {
    body[data-mode="individual"][data-scoreboard-style="tournament"] .std-wrapper {
        transform: translateX(-50%) scale(0.9);
    }
}

@media (max-width: 1500px) {
    body[data-mode="individual"][data-scoreboard-style="tournament"] .std-wrapper {
        transform: translateX(-50%) scale(0.78);
    }
}

@media (max-width: 1280px) {
    body[data-mode="individual"][data-scoreboard-style="tournament"] .std-wrapper {
        transform: translateX(-50%) scale(0.66);
    }
}

@media (max-width: 1024px) {
    body[data-mode="individual"][data-scoreboard-style="tournament"] .std-wrapper {
        bottom: 20px;
        transform: translateX(-50%) scale(0.52);
    }
}

@media (max-width: 600px) {
    body[data-mode="individual"][data-scoreboard-style="tournament"] .std-wrapper {
        bottom: 12px;
        transform: translateX(-50%) scale(0.21);
    }
}
