/* LAB CUP —— design-system/lab-cup-mockup-v2.html（/cup）与 lab-cup-past-mockup.html（/cup/<届>）
   的数值逐项搬进 tokens。色票映射（零新颜色）：
     mockup --court/--court-deep → 画布由 body.home-v3 提供
     --cream → --cream · --green-ink → --court · --tile-dark → --v3-deep
     --gold / --ball → --gold（站上 --ball 即 --gold）· --hair → --hairline
   按钮动效不重造：两颗钮都挂全站 .pill，site.css 的 ::after 球 + ::before 涟漪
   就是 lab-cta-hover-ball.html 的版本 1，触控装置常驻球也由那里处理。
   作用域一律 body.cup-v1。 */

.cup-v1 .cup-wrap{width:min(100% - 36px, 800px);margin-inline:auto}
.cup-todo{color:var(--gold-deep);font-size:clamp(11px,1.3vw,12.5px)}
.cup-v1 .cup-back{display:inline-block;font-size:clamp(11px,1.3vw,12.5px);color:rgba(242,237,218,.6);
  text-decoration:none;margin-bottom:10px}
.cup-v1 .cup-back:hover{color:var(--cream)}

/* ── 页首 ── */
.cup-kicker{font-size:clamp(10.5px,1.2vw,11.5px);letter-spacing:2px;color:var(--gold);
  font-weight:var(--weight-semibold);text-transform:uppercase;padding-top:4px}
.cup-name{font-family:Anton,Impact,sans-serif;font-size:clamp(42px,7vw,64px);line-height:.95;
  color:var(--cream);text-transform:uppercase;margin:8px 0 3px;letter-spacing:1px}
.cup-name span{color:var(--gold)}
.cup-name--sm{font-size:clamp(36px,6vw,54px);margin:7px 0 2px}
.cup-edition{font-family:var(--font-display-mix);font-weight:var(--weight-semibold);
  font-size:clamp(15px,1.9vw,18px);color:rgba(242,237,218,.85);margin-bottom:13px}

/* 照片格：有图填满，没图显示〔待补〕占位（不留空白错位） */
.cup-ph{position:relative;overflow:hidden;background:rgba(242,237,218,.08)}
.cup-ph img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 25%;display:block}
.cup-mosaic .cup-ph img{object-position:center 30%}
.cup-ph .ph-todo{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:clamp(10px,1.2vw,11.5px);color:rgba(242,237,218,.5);letter-spacing:.5px}
.cup-hero{height:clamp(155px,26vw,240px)}

/* ── 本届资料卡 ── */
.cup-card{background:var(--cream);margin-top:12px;padding:clamp(16px,2vw,22px) clamp(18px,2.4vw,26px)}
.cup-bigdate{display:flex;align-items:flex-end;gap:12px;margin-bottom:13px}
.cup-bigdate .d{font-family:Anton,Impact,sans-serif;font-size:clamp(42px,6vw,58px);line-height:.95;color:var(--court)}
.cup-bigdate .m{font-size:clamp(11px,1.3vw,13px);color:var(--ash);padding-bottom:4px;line-height:1.6}
.cup-kv{display:grid;grid-template-columns:auto 1fr;gap:9px 12px;font-size:clamp(12px,1.5vw,14px);color:var(--charcoal)}
.cup-kv .k{color:var(--ash);font-size:clamp(11.5px,1.4vw,13px)}
.cup-kv a{color:var(--court)}

/* ── 怎么参加 ── */
.cup-steps{margin-top:10px;background:var(--v3-deep);padding:clamp(17px,2.2vw,24px) clamp(18px,2.4vw,26px)}
.cup-steps h2{font-family:var(--font-display-mix);font-weight:var(--weight-semibold);
  font-size:clamp(16px,2vw,20px);color:var(--cream);margin-bottom:10px}
.cup-steps ol{list-style:none;counter-reset:s;display:grid;gap:10px;margin:0;padding:0}
.cup-steps li{counter-increment:s;font-size:clamp(12px,1.5vw,14px);color:rgba(242,237,218,.85);line-height:1.6;
  padding-left:26px;position:relative}
.cup-steps li::before{content:counter(s);position:absolute;left:0;top:1px;width:18px;height:18px;
  border-radius:var(--radius-full);background:var(--ball);color:var(--v3-deep);
  font-size:10px;font-weight:var(--weight-semibold);display:flex;align-items:center;justify-content:center}
.cup-steps li b{color:var(--cream)}

/* ── 报名 + 转发 ── */
.cup-ctaline{text-align:center;margin-top:15px}
.cup-ctaline .pill{background:var(--cream);color:var(--court-deep);min-height:44px;padding:0 26px;
  font-size:clamp(13.5px,1.6vw,15px);font-weight:var(--weight-semibold);gap:7px}
.cup-ctaline .pill:hover{color:var(--court-deep)}
.cup-ctaline .pill svg{width:14px;height:14px;flex:0 0 auto}
/* 转发钮：描边、透明底；同样挂 .pill 所以 hover 一样有球 */
.cup-ctaline .pill--share{background:transparent;color:rgba(242,237,218,.8);
  box-shadow:inset 0 0 0 1px rgba(242,237,218,.3);min-height:36px;padding:0 16px;
  font-size:clamp(11.5px,1.4vw,13px);font-weight:var(--weight-medium);margin-top:11px}
.cup-ctaline .pill--share:hover{color:var(--cream);box-shadow:inset 0 0 0 1px var(--cream)}
.cup-ctaline .pill--share svg{width:12px;height:12px}
.cup-ctaline--edition{margin-top:18px}
.cup-ctaline--edition .pill--share{margin-top:0}
.cup-ctaline br{display:block;content:""}
.cup-rhythm{margin-top:16px;text-align:center;font-size:clamp(11px,1.3vw,13px);color:rgba(242,237,218,.6);line-height:1.8}
.cup-rhythm b{color:var(--gold);font-weight:var(--weight-semibold)}

/* ── 往届纪录 ── */
.cup-past{margin-top:24px}
.cup-hd{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.cup-hd h2{font-family:var(--font-display-mix);font-weight:var(--weight-semibold);font-size:clamp(17px,2.2vw,21px);color:var(--cream)}
.cup-hd .ln{flex:1;height:1px;background:rgba(242,237,218,.22)}
.cup-pcard{background:rgba(242,237,218,.07);border:1px solid rgba(242,237,218,.14);
  display:grid;grid-template-columns:clamp(96px,14vw,120px) 1fr;text-decoration:none;overflow:hidden;
  transition:background .18s var(--ease-standard)}
.cup-pcard + .cup-pcard{margin-top:9px}
.cup-pcard:hover{background:rgba(242,237,218,.13)}
.cup-pcard .thumb{aspect-ratio:1}
.cup-pcard .txt{padding:11px 13px;min-width:0}
.cup-pcard .ed{font-family:Anton,Impact,sans-serif;font-size:clamp(11.5px,1.4vw,13px);color:var(--gold);letter-spacing:.5px}
.cup-pcard .ch{font-size:clamp(13px,1.6vw,15px);color:var(--cream);font-weight:var(--weight-semibold);margin-top:4px;line-height:1.35}
.cup-pcard .sc{font-size:clamp(10.5px,1.3vw,12px);color:rgba(242,237,218,.55);margin-top:4px}
.cup-pcard .go{font-size:clamp(10px,1.2vw,11.5px);color:rgba(242,237,218,.45);margin-top:6px}
.cup-past-empty{font-size:clamp(11px,1.3vw,13px);color:rgba(242,237,218,.5)}

/* ── 单届页：冠军卡 ── */
.cup-champ{background:var(--cream);overflow:hidden}
/* 冠军卡底是奶白，.cup-ph 预设的奶白占位字会整个消失 —— 这一格改用墨色 */
.cup-champ .cup-ph{background:rgba(31,74,56,.07)}
.cup-champ .cup-ph .ph-todo{color:var(--ash)}
.cup-champ .pic{height:clamp(190px,32vw,300px)}
.cup-champ .body{padding:16px 18px 17px;text-align:center}
.cup-champ .lbl{font-size:clamp(10px,1.2vw,11px);letter-spacing:2.5px;color:var(--gold);font-weight:var(--weight-semibold)}
.cup-champ .who{font-family:var(--font-display-mix);font-weight:var(--weight-semibold);
  font-size:clamp(22px,2.8vw,28px);color:var(--court);margin-top:8px;line-height:1.3}
.cup-champ .co{font-size:clamp(10.5px,1.3vw,12.5px);color:var(--ash);margin-top:5px;line-height:1.6}

/* 决赛比分卡 */
.cup-final{margin-top:9px;background:var(--v3-deep);padding:15px 16px}
.cup-final .l{font-size:clamp(9.5px,1.1vw,10.5px);letter-spacing:2px;color:rgba(242,237,218,.5);
  font-weight:var(--weight-semibold);text-align:center;margin-bottom:11px}
.cup-fin{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:center}
.cup-fin .side{font-size:clamp(12px,1.5vw,14px);line-height:1.45}
.cup-fin .side.w{color:var(--cream);font-weight:var(--weight-semibold)}
.cup-fin .side.l2{color:rgba(242,237,218,.6);text-align:right}
.cup-fin .score{font-family:Anton,Impact,sans-serif;font-size:clamp(20px,2.6vw,26px);color:var(--ball);text-align:center;white-space:nowrap}
.cup-fin .score--todo .cup-todo{font-family:var(--font-ui);color:var(--gold)}
.cup-fin .side small{display:block;font-size:clamp(9.5px,1.1vw,10.5px);color:rgba(242,237,218,.45);font-weight:var(--weight-regular);margin-top:2px}
/* 循环赛：没有决赛，中间那格拿掉。战绩是冠军自己的，挂在他名字底下。 */
.cup-fin--rr{grid-template-columns:auto auto;justify-content:center;gap:clamp(26px,7vw,72px);
  text-align:center}
.cup-fin--rr .side.l2{text-align:center}
.cup-fin--rr .side.w small{color:var(--gold);letter-spacing:.2px}

/* 规模数字 */
.cup-nums{display:flex;margin-top:9px;background:var(--cream)}
.cup-num{flex:1;text-align:center;padding:13px 6px}
.cup-num + .cup-num{border-left:1px solid var(--hairline)}
.cup-num b{font-family:Anton,Impact,sans-serif;font-size:clamp(21px,2.6vw,26px);color:var(--court);display:block}
.cup-num span{font-size:clamp(9.5px,1.1vw,11px);color:var(--ash)}

/* 照片 mosaic：大合照打头（21:9 满宽），其余横图占两格、竖图一格 */
.cup-mosaic{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin-top:12px}
.cup-mosaic .cup-ph{aspect-ratio:1}
.cup-mosaic .wide{grid-column:span 2}
.cup-mosaic .full{grid-column:span 3;aspect-ratio:21/9}

/* 届间导航 */
.cup-jump{display:flex;gap:8px;margin-top:20px}
.cup-jbtn{flex:1;background:rgba(242,237,218,.07);border:1px solid rgba(242,237,218,.16);
  padding:11px 12px;text-decoration:none;display:block;min-width:0}
.cup-jbtn .a{font-size:clamp(9.5px,1.1vw,10.5px);color:rgba(242,237,218,.45);letter-spacing:1px;display:block}
.cup-jbtn .b{font-size:clamp(12px,1.4vw,13.5px);color:var(--cream);font-weight:var(--weight-semibold);margin-top:3px;display:block}
.cup-jbtn.r{text-align:right}
.cup-jbtn.ghost{visibility:hidden}
.cup-jbtn:hover{background:rgba(242,237,218,.13)}

/* 收尾 */
.cup-end{text-align:center;margin-top:20px}
.cup-end .line{font-family:var(--font-display-mix);font-weight:var(--weight-semibold);font-size:clamp(16px,2vw,20px);color:var(--cream);margin-bottom:4px}
.cup-end .sm{font-size:clamp(11.5px,1.4vw,13px);color:rgba(242,237,218,.6);margin-bottom:12px}
.cup-end .pill{background:var(--cream);color:var(--court-deep);min-height:44px;padding:0 24px;
  font-size:clamp(13px,1.5vw,14px);font-weight:var(--weight-semibold)}
.cup-end .pill:hover{color:var(--court-deep)}

.cup-legal{font-size:clamp(9.5px,1.1vw,11px);color:rgba(242,237,218,.5);line-height:1.7;margin:20px auto 0;max-width:640px;text-align:center}

/* ── 当届排名（第 3 届起的循环赛）── */
.cup-board{margin-top:9px;background:var(--v3-deep);padding:15px 16px}
.cup-board-h{font-size:clamp(9.5px,1.1vw,10.5px);letter-spacing:2px;color:rgba(242,237,218,.5);
  margin:0 0 10px;text-transform:uppercase}
/* 栏宽钉死，剩下的全归长条那一栏。宽萤幕才不会把「场 胜 负 胜率 场均净分」
   摊成一排孤岛，眼睛要跑很远才接得上名字。
   宽度写 rem 不写 em：table-layout:fixed 只认第一列（表头，10px）的宽度，
   em 会按表头字级算，结果比 13px 的内文窄一截，数字就会黏在一起。 */
.cup-board-t{width:100%;border-collapse:collapse;font-size:clamp(11.5px,1.4vw,13px);color:var(--cream);
  table-layout:fixed}
.cup-board-t th{font-size:clamp(9px,1vw,10px);letter-spacing:1px;color:rgba(242,237,218,.42);
  font-weight:var(--weight-regular);text-align:right;padding:0 4px 7px}
.cup-board-t th,.cup-board-t td{white-space:nowrap}
.cup-board-t th.rk,.cup-board-t td.rk{width:2rem;text-align:right;padding-right:9px}
.cup-board-t th.nm,.cup-board-t td.nm{width:8.4rem;text-align:left}
.cup-board-t th.bar,.cup-board-t td.bar{width:auto;padding:0 18px 0 16px}
.cup-board-t th.n,.cup-board-t td.n{width:2rem}
.cup-board-t th.wr,.cup-board-t td.wr{width:3.1rem}
.cup-board-t th.last,.cup-board-t td.last{width:3.8rem;padding-right:0}
.cup-board-t td{text-align:right;padding:8px 4px;border-top:1px solid rgba(242,237,218,.1);
  font-variant-numeric:tabular-nums}
.cup-board-t td.nm{overflow:hidden;text-overflow:ellipsis;max-width:11em;padding-left:0}
/* 名次用 Anton —— 跟大日期、规模数字同一套显示字，表格才有脊椎 */
.cup-board-t td.rk{font-family:Anton,Impact,sans-serif;font-size:1.15em;line-height:1;
  color:rgba(242,237,218,.4)}
/* 前三名：金、奶白、淡奶白 */
.cup-board-t tr.t1 td{color:var(--ball);font-weight:var(--weight-semibold)}
.cup-board-t tr.t1 td.rk{color:var(--ball)}
.cup-board-t tr.t2 td,.cup-board-t tr.t3 td{color:var(--cream);font-weight:var(--weight-medium)}
.cup-board-t tr.t2 td.rk{color:rgba(242,237,218,.8)}
.cup-board-t tr.t3 td.rk{color:rgba(242,237,218,.62)}
.cup-board-t tr.t1 td{border-top-color:rgba(242,237,218,.22)}

/* 胜率长条：轨道是既有的奶白淡底，条身跟着名次用同一组色，不另外加颜色 */
.cup-board-t .bar-t{display:block;height:4px;max-width:280px;background:rgba(242,237,218,.09);overflow:hidden}
.cup-board-t .bar-t i{display:block;height:100%;background:rgba(242,237,218,.3)}
.cup-board-t tr.t1 .bar-t i{background:var(--ball)}
.cup-board-t tr.t2 .bar-t i,.cup-board-t tr.t3 .bar-t i{background:rgba(242,237,218,.55)}
/* 窄萤幕：名字跟数字本来就靠在一起了，长条反而挤 —— 整栏收掉。
   数字栏同时收窄：手机上字级掉到 11.5px，2rem 的栏宽装一个位数太宽，
   省下来的全给名字（「Lim Wei Xiang」这种长名字才不会被切掉）。 */
@media (max-width:600px){
  .cup-board-t th.bar,.cup-board-t td.bar{display:none}
  .cup-board-t th.nm,.cup-board-t td.nm{width:auto;max-width:none}
  .cup-board-t th.rk,.cup-board-t td.rk{width:1.6rem;padding-right:7px}
  .cup-board-t th.n,.cup-board-t td.n{width:1.55rem}
  .cup-board-t th.wr,.cup-board-t td.wr{width:2.7rem}
  .cup-board-t th.last,.cup-board-t td.last{width:3.3rem}
  .cup-board-t td{padding-left:3px;padding-right:3px}
}
/* 小屏：「负」是「场 − 胜」，算得出来 —— 让位给长名字 */
@media (max-width:400px){
  .cup-board-t th.ls,.cup-board-t td.ls{display:none}
}
@supports (color:color-mix(in srgb,red,blue)){
  .cup-board-t tr.t1 td{border-top-color:color-mix(in srgb,var(--ball) 38%,transparent)}
}
.cup-board-seed{margin:12px 0 0;font-size:clamp(9.5px,1.1vw,11px);color:rgba(242,237,218,.55);line-height:1.6}
.cup-board-seed span{font-family:var(--font-mono,ui-monospace,monospace);letter-spacing:.04em;color:rgba(242,237,218,.75)}
.cup-board-seed small{display:block;font-size:inherit;color:rgba(242,237,218,.42);margin-top:2px}

/* ── 减少动态效果：全关（球与涟漪由 site.css 同一条规则关掉）── */
@media (prefers-reduced-motion:reduce){
  .cup-pcard,.cup-jbtn{transition:none}
}
