/* 站酷快乐体（展示层字体，《视觉规范》§3.1）：子集 woff2 按全站实际
   用字嵌入（生成口径与缺字登记见规范 §3.2）；只经 --font-display 变量
   引用，切换字体只动 :root 一处。正文层仍系统字体。 */
@font-face{font-family:"ZCOOL KuaiLe";
  src:url("/static/zcool-kuaile.woff2") format("woff2");
  font-weight:400; font-style:normal; font-display:swap;}
:root{
  /* 散装乐队 · 视觉规范 v2 定版（2026-11-07 Jacky 终批）：全站色值唯一出处——
     基础/品牌/功能/面额四组 token；页面与组件只许引用变量、不许散写色值。
     成员色板 8 色的唯一出处在 friendlist.js 的 MEMBER_COLORS（规范 §2.4），
     面额星色经 .denom 的 CSS 规则读 --denom-star（规范 §2.5）。
     v2 修订（2026-11-07 晚，配色取经后对表，见规范 v2 修订节）：
     底加深一台阶、文字色阶按 WCAG 实测重排、行动色收敛莓粉一家
     （默认按钮改粉＋墨字，金退舞台/奖励、蓝退信息底）、面额钻蓝改真冰蓝。 */
  --font-display:"ZCOOL KuaiLe","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --paper:#FFF3E0; --card:#FFFDF8; --white:#FFFFFF;
  --ink:#4A2C07; --ink-2:#6E5636; --ink-3:#7E6A54; --grey:#B8AFA3;
  --ink-90:rgba(74,44,7,.9); --ink-85:rgba(74,44,7,.85); --ink-80:rgba(74,44,7,.8);
  --ink-40:rgba(74,44,7,.4); --ink-22:rgba(74,44,7,.22); --line:rgba(74,44,7,.18);
  --pink:#FF77A8; --berry:#B84A6E; --pink-soft:#FFE9F1;
  --gold:#FFB52E; --gold-deep:#FF9F2E; --gold-soft:#FFE9C9; --cream:#FFF3D6;
  --sky:#4EA8E8; --sky-soft:#E2F1FF;
  --asuan:#B79CED; --asuan-deep:#7B5CC9;
  --stage-1:#3D2C50; --stage-2:#5B4176;
  /* 3D 揭晓浮层（stage3d.css）专用：夜场深色组，与舞台金同族 */
  --stage-bg:#17112E; --stage-panel:#352A5E; --stage-screen:#241A4D;
  --stage-gold:#FFD76E; --stage-gold-soft:#FFE9A8; --stage-lav:#CFC4F5;
  --stage-asuan:#8F7FF5; --stage-deep:#241432;
  --stage-label:rgba(16,10,36,.72); --stage-label-asuan:rgba(38,26,80,.78);
  --good:#3DBE6C; --warn:#C24A30; --warn-soft:#FFE9E1; --warn-deep:#8F2F16;
  --alert:#D92B30; --down:#9C968C; --hl:#FFE066;
  --denom-star:#FFB52E; --denom-dia:#8FDCF5; --denom-crown:#FFB52E;
  --sh-card:4px 5px 0 var(--ink-90); --sh-row:3px 4px 0 var(--ink-85);
  --sh-sm:2px 3px 0 var(--ink-85); --sh-btn:0 4px 0 var(--ink-90);
  --sh-btn-on:0 1.5px 0 var(--ink-90); --sh-stage:2px 3px 0 rgba(0,0,0,.45);
  --r-sm:10px; --r-md:14px; --r-lg:18px; --r-xl:22px;
}
*{box-sizing:border-box; -webkit-tap-highlight-color:transparent;}
body{margin:0; background:var(--paper); color:var(--ink);
  font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;}
.wrap{max-width:560px; margin:0 auto; padding:18px 14px 48px; position:relative;}
[data-help]{position:absolute; top:12px; right:12px; z-index:70;}
.help-bulb{width:38px; height:38px; border:2.5px solid var(--ink); border-radius:50%;
  background:var(--cream); font-size:19px; line-height:1; cursor:pointer; padding:0;
  box-shadow:var(--sh-sm);}
.help-bulb:active{transform:translate(1px,2px); box-shadow:0 1px 0 var(--ink-85);}
.help-pop{position:absolute; top:46px; right:0; width:min(305px, calc(100vw - 28px));
  background:var(--card); border:3px solid var(--ink); border-radius:16px;
  box-shadow:var(--sh-card); padding:13px 15px;
  font-size:15px; line-height:1.55; font-weight:600;}
h1{font-size:30px; margin:10px 0 4px; letter-spacing:1px;}
/* 展示层字体（规范 §3.1：L0–L3＋大数字）：站酷快乐体只挂这些选择器，
   正文/按钮/行主文仍系统字体。快乐体只有 400 一档，800/900 字重由
   浏览器合成加粗（与疯魔拳同口径）。 */
.brand-name, h1, .page-title b, .entry b, .selcount, .count, .song-total,
.step-head, .todo-title, .score-num, .bigcta-txt b, .work-score b,
.lyric-big{font-family:var(--font-display);}
.sub{font-size:15px; color:var(--ink-2); margin:0 0 16px;}
.card{background:var(--card); border:3px solid var(--ink); border-radius:var(--r-lg);
  box-shadow:var(--sh-card); padding:16px; margin:14px 0;}
.btn{display:inline-block; border:3px solid var(--ink); border-radius:var(--r-md);
  background:var(--pink); color:var(--ink); font-size:19px; font-weight:700;
  padding:12px 22px; cursor:pointer; box-shadow:var(--sh-btn);
  text-decoration:none; text-align:center;}
.btn:active{transform:translate(1.5px,2px); box-shadow:var(--sh-btn-on);}
.btn.big{font-size:23px; padding:16px 28px; width:100%;}
/* 色卡 v2 行动色纪律（规范 v2 修订 R4）：主操作只许莓粉＋墨字（亮糖底配
   墨字是取经翻转法，白字在粉/蓝/绿亮底上实测均不过对比线）；金按钮须
   显式 .gold（只给舞台/奖励时刻）；蓝按钮显式 .blue、同配墨字。 */
.btn.pink{background:var(--pink); color:var(--ink);}
.btn.gold{background:var(--gold); color:var(--ink);}
.btn.blue{background:var(--sky); color:var(--ink);}
.btn.ghost{background:var(--white);}
.btn:disabled{background:var(--grey); color:var(--white); cursor:not-allowed;}
input[type=text]{font-size:19px; padding:10px 12px; border:3px solid var(--ink);
  border-radius:12px; width:100%; background:var(--white); color:var(--ink);}
.seg{border:3px solid var(--ink); border-radius:16px; padding:12px 14px; margin:10px 0;
  background:var(--white); position:relative; overflow:hidden;}
.seg .bar{position:absolute; left:0; top:0; bottom:0; width:12px;}
.seg .lyr{font-size:26px; font-weight:800; letter-spacing:2px; margin-left:10px;}
.seg .meta{margin-left:10px; font-size:14px; opacity:.8; margin-top:4px;}
.chips{display:flex; gap:8px; margin:10px 0 2px 10px; flex-wrap:wrap;}
.chip{border:3px solid var(--ink); border-radius:999px; padding:6px 14px; font-size:16px;
  font-weight:700; cursor:pointer; background:var(--white); opacity:.45;}
/* chip 选中态底色由 JS 给成员色（亮糖底）：按 v2 R4 亮底翻墨字，
   不许再白字压成员色（白字在 m3/m5 等中明度成员色上实测不过线）。 */
.chip.on{opacity:1; color:var(--ink); box-shadow:var(--sh-sm);}
.chip.static{cursor:default; opacity:1; color:var(--ink);}
.badge{display:inline-block; border:2.5px solid var(--ink); border-radius:999px;
  padding:2px 10px; font-size:13px; font-weight:700; background:var(--white); vertical-align:middle;}
.badge.asuan{background:var(--asuan); color:var(--white);}
.badge.done{background:var(--good); color:var(--ink);}
.linkbox{background:var(--cream); border:3px dashed var(--ink); border-radius:var(--r-md);
  padding:12px; margin:10px 0; word-break:break-all; font-size:15px;}
.linkbox b{font-size:17px;}
.hint{background:var(--pink-soft); border:3px solid var(--ink); border-radius:var(--r-md); padding:10px 14px;
  font-size:16px; margin:12px 0;}
.err{background:var(--warn-soft); border:3px solid var(--warn); color:var(--warn-deep); border-radius:var(--r-md);
  padding:14px; font-size:17px; margin:12px 0; display:none;}
.count{font-size:96px; font-weight:900; text-align:center; color:var(--berry);
  text-shadow:var(--sh-row); line-height:1.1; min-height:40px;}
audio{width:100%; margin-top:8px;}
.reveal-pop{animation:pop .7s cubic-bezier(.2,2.2,.4,1) both;}
@keyframes pop{from{transform:scale(.6); opacity:0;} to{transform:scale(1); opacity:1;}}
.seg.lit{animation:lit .5s both;}
@keyframes lit{from{filter:brightness(1.6);} to{filter:brightness(1);}}
.sparkle{text-align:center; font-size:44px; animation:pop .8s .1s cubic-bezier(.2,2.2,.4,1) both;}
.small{font-size:13px; color:var(--ink-2);}
.center{text-align:center;}
.song-total{font-size:23px; font-weight:900; margin:2px 0 6px;}
.song-total span{font-size:46px; color:var(--berry); text-shadow:2px 2px 0 var(--ink-22); vertical-align:-6px;}
.dot{display:inline-block; width:16px; height:16px; border-radius:50%;
  border:2.5px solid var(--ink); margin-right:8px; vertical-align:-2px;}
.score-row{display:flex; align-items:center; gap:10px; padding:9px 0 3px;
  border-top:2px dashed var(--line); margin-top:9px; font-size:17px; font-weight:700;}
.score-num{font-size:36px; font-weight:900; color:var(--berry); margin-left:auto; line-height:1;}
.score-num small{font-size:16px;}
.score-sub{font-size:13px; font-weight:400; opacity:.7; line-height:1.55;}

/* ---------- 第一包：首页/选歌（稿 v2 帧①②③） ---------- */
.wrap.has-tabbar{padding-bottom:104px;}
.tabbar{position:fixed; left:0; right:0; bottom:0; z-index:50; display:flex;
  background:var(--card); border-top:3px solid var(--ink);}
.tabbar .tab{flex:1; text-align:center; padding:8px 0 10px; font-size:24px; line-height:1.15;
  color:var(--ink); text-decoration:none; opacity:.5;}
.tabbar .tab span{display:block; font-size:13px; font-weight:700;}
.tabbar .tab.on{opacity:1; color:var(--berry);}
.brand{display:flex; align-items:flex-start; justify-content:space-between; margin:6px 0 10px;}
.brand-name{font-size:32px; font-weight:900; letter-spacing:1px;}
.brand-sub{font-size:14px; font-weight:700; letter-spacing:6px; color:var(--berry); margin-top:2px;}
.brand-ava{font-size:30px; background:var(--asuan); border:3px solid var(--ink); border-radius:50%;
  width:52px; height:52px; text-align:center; line-height:48px; box-shadow:3px 3px 0 var(--ink-85);}
.bubble{display:flex; align-items:center; gap:10px; background:var(--white); border:3px solid var(--ink);
  border-radius:16px; padding:10px 14px; font-size:16px; font-weight:600;
  box-shadow:var(--sh-row);}
.bubble-ava{background:var(--asuan); border:2.5px solid var(--ink); border-radius:50%;
  width:36px; height:36px; text-align:center; line-height:33px; font-size:19px; flex:none;}
.todo-card{position:relative; background:var(--pink-soft); border:3px solid var(--ink); border-radius:var(--r-lg);
  box-shadow:var(--sh-card); padding:16px; margin:16px 0;}
.todo-tag{position:absolute; top:-13px; left:14px; background:var(--alert); color:var(--white);
  border:2.5px solid var(--ink); border-radius:999px; padding:2px 12px; font-size:14px; font-weight:800;}
.todo-from{font-size:13px; opacity:.7; margin-top:4px;}
.todo-title{font-size:22px; font-weight:900; margin:4px 0;}
.todo-note{font-size:14px; opacity:.8;}
.todo-go{margin-top:10px; font-size:17px; padding:9px 20px;}
.bigcta{display:flex; align-items:center; gap:12px; background:linear-gradient(180deg,var(--gold),var(--gold-deep));
  border:3px solid var(--ink); border-radius:var(--r-lg); box-shadow:0 5px 0 var(--ink-90);
  padding:16px; margin:14px 0; color:var(--ink); text-decoration:none;}
.bigcta:active{transform:translate(1.5px,2px); box-shadow:var(--sh-btn-on);}
.bigcta-ico{font-size:34px;}
.bigcta-txt{flex:1;}
.bigcta-txt b{display:block; font-size:23px; font-weight:900;}
.bigcta-txt small{font-size:13px; opacity:.8;}
.bigcta-arrow{font-size:30px; font-weight:900;}
.sec-head{font-size:19px; font-weight:900; margin:20px 0 4px;}
.rowitem{display:flex; align-items:center; gap:10px; background:var(--white); border:3px solid var(--ink);
  border-radius:16px; padding:11px 13px; margin:9px 0; color:var(--ink); text-decoration:none;
  box-shadow:var(--sh-row);}
.rowitem.dim{opacity:.65; font-size:15px;}
.row-ico{font-size:24px;}
.row-main{flex:1; min-width:0;}
.row-main b{display:block; font-size:18px;}
.row-main small{font-size:13px; opacity:.7;}
.row-arrow{font-size:24px; font-weight:900; opacity:.6;}
.workcard{display:flex; align-items:center; gap:12px; background:var(--card); border:3px solid var(--ink);
  border-radius:var(--r-lg); box-shadow:var(--sh-card); padding:13px; margin:9px 0;
  color:var(--ink); text-decoration:none;}
.work-cover{font-size:30px; background:linear-gradient(160deg,var(--asuan-deep),var(--sky)); border:3px solid var(--ink);
  border-radius:12px; width:58px; height:58px; text-align:center; line-height:54px; flex:none;}
.work-score{text-align:center;}
.work-score b{display:block; font-size:30px; font-weight:900; color:var(--berry); line-height:1;}
.work-score small{font-size:12px; opacity:.7;}
.work-playwrap{display:flex; flex-direction:column; align-items:center; gap:3px; flex:none;}
.work-playwrap small{font-size:11px; font-weight:700; line-height:1;}
.work-play{position:relative; background:var(--pink); color:var(--white); border:3px solid var(--ink);
  border-radius:50%; width:56px; height:56px; text-align:center; line-height:52px; font-size:21px; flex:none;
  box-shadow:var(--sh-sm);}
.dl-badge{position:absolute; top:-9px; right:-9px; background:var(--berry); border:2.5px solid var(--ink);
  border-radius:50%; width:24px; height:24px; font-size:12px; font-style:normal; line-height:21px;}
.page-head{display:flex; align-items:center; gap:10px; margin:4px 0 12px;}
.back{font-size:32px; font-weight:900; color:var(--ink); text-decoration:none; line-height:1;}
.page-title{flex:1;}
.page-title b{display:block; font-size:24px; font-weight:900;}
.page-title small{font-size:13px; opacity:.7;}
.badge.lib{background:var(--sky-soft);}
.searchbox{display:flex; align-items:center; gap:8px; background:var(--white); border:3px solid var(--ink);
  border-radius:999px; padding:9px 16px; box-shadow:var(--sh-row); font-size:18px;}
.searchbox input{flex:1; border:none; outline:none; font-size:17px; background:transparent; color:var(--ink); min-width:0;}
.qclear{background:var(--grey); color:var(--white); border:2.5px solid var(--ink); border-radius:50%;
  width:26px; height:26px; font-size:13px; cursor:pointer; line-height:1; flex:none;}
.songcard{display:flex; align-items:center; gap:10px; background:var(--white); border:3px solid var(--ink);
  border-radius:16px; padding:12px 13px; margin:10px 0; color:var(--ink); text-decoration:none;
  box-shadow:var(--sh-row);}
.songcard.provide{border-color:var(--berry); background:var(--pink-soft); cursor:pointer;}
.song-ico{font-size:27px; background:var(--paper); border:2.5px solid var(--ink); border-radius:12px;
  width:48px; height:48px; text-align:center; line-height:44px; flex:none;}
.hl{background:var(--hl); border-radius:4px; padding:0 2px;}

/* ---------- 第二包：极简主页/五签导航/组局五步/消息中心/待办 ---------- */
.tabbar .tab{position:relative;}
.nbadge{position:absolute; top:2px; right:calc(50% - 24px); min-width:21px; height:21px;
  border-radius:999px; background:var(--alert); color:var(--white); border:2.5px solid var(--ink);
  font-size:12.5px; font-weight:800; line-height:17px; text-align:center; padding:0 4px;}
.entry{display:flex; align-items:center; gap:18px; border:3px solid var(--ink);
  border-radius:var(--r-xl); padding:14px 17px; margin:13px 0; text-decoration:none; color:var(--ink);
  position:relative; box-shadow:var(--sh-card); background:var(--white);}
.entry:active{transform:translate(1.5px,2px); box-shadow:var(--sh-btn-on);}
.entry .eico{font-size:48px; width:82px; height:82px; line-height:78px; text-align:center;
  border:3px solid var(--ink); border-radius:20px; background:var(--white); flex:none;}
.entry b{font-size:31px; font-weight:900; display:block;}
.entry.pink{background:var(--pink-soft);} .entry.pink .eico{background:var(--pink);}
.entry.orange{background:var(--gold-soft);} .entry.orange .eico{background:var(--gold);}
.entry.blue{background:var(--sky-soft);} .entry.blue .eico{background:var(--sky);}
.entry .nbadge{top:-9px; right:-7px; font-size:14px; min-width:26px; height:26px; line-height:21px;}
.step-head{font-size:20px; font-weight:800; margin-bottom:10px;}
.stepper{display:flex; align-items:center; gap:14px; margin:6px 0 12px;}
.stepper button{width:46px; height:46px; border-radius:50%; border:3px solid var(--ink);
  background:var(--white); font-size:24px; font-weight:900; cursor:pointer; line-height:1;}
.stepper .n{font-size:30px; font-weight:900; min-width:44px; text-align:center;}
.gcard{border:3px solid var(--ink); border-radius:16px; padding:12px 14px; margin:10px 0; background:var(--white);}
.gcard .glyr{font-size:19px; font-weight:700; line-height:1.5;}
.gcard .gmeta{font-size:13.5px; opacity:.75; margin-top:3px;}
.grow{display:flex; gap:8px; flex-wrap:wrap; margin-top:9px; align-items:center;}
.gbtn{border:2.5px solid var(--ink); border-radius:999px; background:var(--white); padding:4px 13px;
  font-size:14.5px; font-weight:700; cursor:pointer;}
.gbtn.warn{background:var(--warn-soft);}
select{font-size:16.5px; padding:7px 10px; border:3px solid var(--ink); border-radius:11px;
  background:var(--white); color:var(--ink); font-weight:700;}
.igroup{display:block; position:relative; border:3px solid var(--ink); border-radius:var(--r-lg); background:var(--white);
  color:var(--ink); text-decoration:none;
  padding:9px 11px; margin:11px 0; cursor:pointer; box-shadow:var(--sh-row);}
.igroup .ihead{display:flex; align-items:center; gap:6px; flex-wrap:nowrap;}
.igroup .iwork{width:32px; height:32px; border:2.5px solid var(--ink); border-radius:var(--r-sm);
  background:var(--paper); text-align:center; line-height:29px; font-size:18px; flex:none;}
.igroup .ino{font-size:12.5px; font-weight:800; background:var(--ink); color:var(--white);
  border-radius:8px; padding:2px 6px; flex:none;}
.igroup .ititle{font-size:18.5px; font-weight:900; min-width:0;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.igroup .ibadge{margin-left:auto; flex:none; padding:2px 8px;}
.igroup .itodo{font-size:12.5px; color:var(--berry); font-weight:800; background:var(--pink-soft);
  border:2px solid var(--ink); border-radius:999px; padding:1px 8px; opacity:1; flex:none;}
.igroup .iunread{position:static; flex:none;}
.imsg{display:flex; gap:11px; padding:10px 2px; border-top:2px dashed var(--line);}
.imsg:first-of-type{border-top:none;}
.imsg .idot{flex:none; width:34px; height:34px; border-radius:50%; border:2.5px solid var(--ink);
  background:var(--cream); text-align:center; line-height:31px; font-size:16px;}
.imsg .itext{font-size:16.5px; line-height:1.45;}
.imsg .itime{font-size:12.5px; opacity:.6;}
.todoitem{border:3px solid var(--ink); border-radius:16px; background:var(--white); padding:12px 14px; margin:10px 0;}
.todoitem .tt{font-size:18.5px; font-weight:800;}
.todoitem .tm{font-size:14px; opacity:.75; margin-top:2px;}
.empty-note{border:3px dashed var(--ink-40); border-radius:16px; padding:22px 16px;
  text-align:center; font-size:16.5px; opacity:.75; margin:14px 0;}
input[type=file]{font-size:15.5px; margin-top:8px;}

/* ---------- 演唱会清单化（2026-11-07）：清单行播放标记＋作品详情两区 ---------- */
.igroup .iplay{flex:none; width:26px; height:26px; border-radius:50%;
  background:var(--pink); color:var(--white); border:2.5px solid var(--ink);
  text-align:center; line-height:23px; font-size:12px; padding-left:2px;}
.dcard{padding:6px 16px;}
.drow{display:flex; align-items:center; gap:8px; padding:10px 0;
  border-top:2px dashed var(--line);}
.drow:first-child{border-top:none;}
.drow .dseg{flex:none; font-weight:800; font-size:15.5px;}
.drow .dlyr{flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis;
  white-space:nowrap; font-size:15.5px; opacity:.85;}
.drow .dsinger{flex:none; font-size:14.5px; font-weight:700;}
.drow .badge{flex:none;}
.opzone{margin-top:16px;}

/* ---------- 组局新主线（2026-11-07）：选好友＋匹配确认＋舞台落位 ---------- */
.frow{display:flex; align-items:center; gap:11px; border:3px solid var(--ink);
  border-radius:16px; padding:10px 13px; margin:9px 0; background:var(--white); cursor:pointer;
  box-shadow:var(--sh-row);}
.frow.on{background:var(--pink-soft);}
.frow.locked{cursor:default; background:var(--pink-soft);}
.frow.dim{opacity:.45; cursor:not-allowed; box-shadow:none;}
.frow .fava{font-size:27px; width:46px; height:46px; line-height:42px; text-align:center;
  background:var(--paper); border:2.5px solid var(--ink); border-radius:50%; flex:none;}
.frow .fname{font-size:19px; font-weight:800; flex:1; min-width:0;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.frow .fcheck{flex:none; width:30px; height:30px; border-radius:50%; border:2.5px solid var(--ink);
  background:var(--white); color:var(--white); font-size:17px; font-weight:900; line-height:26px; text-align:center;}
.frow .fcheck.on{background:var(--good);}
.stagebox{border:3px solid var(--ink); border-radius:var(--r-lg); background:linear-gradient(180deg,var(--stage-1),var(--stage-2));
  padding:14px 10px 10px; margin-top:4px;}
.srow{display:flex; gap:8px; justify-content:center; margin:7px 0;}
.srow.mid{justify-content:space-between;}
.slot{flex:1; max-width:150px; border:2.5px solid var(--ink); border-radius:13px; background:var(--paper);
  padding:7px 6px; cursor:pointer; color:var(--ink); box-shadow:var(--sh-stage);}
.slot.sel{outline:3.5px solid var(--gold); background:var(--cream);}
.slot .slabel{display:block; font-size:12px; font-weight:700; opacity:.75;}
.slot .sperson{display:block; font-size:16.5px; font-weight:900; margin-top:2px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.slot .sperson .dot{width:11px; height:11px; margin-right:5px; border-width:2px;}
.sfront{text-align:center; color:var(--pink-soft); font-size:12.5px; font-weight:700;
  letter-spacing:6px; opacity:.85; margin-top:9px;}

/* 支线补全（B3/B2a）：进展区未交段操作行＋交段时间 */
.dops{display:flex; flex-wrap:wrap; gap:7px; align-items:center;
  padding:2px 0 11px 8px; border-bottom:2px dashed var(--line);}
.dops select{font:inherit; font-weight:700; padding:6px 8px; border-radius:var(--r-sm);
  border:2.5px solid var(--ink); background:var(--card);}
.drow .dtime{flex:none; font-size:12.5px; color:var(--ink-3); font-weight:700;}

/* ---- 选人组件（朋友很多适配）：已选条置顶＋候选池内滚＋搜索 ---- */
.strip{display:flex; flex-wrap:wrap; gap:6px; margin-top:10px;}
.strip:empty{display:none;}
.strip .chip{margin:0;}
.search{width:100%; box-sizing:border-box; padding:10px 14px; margin:10px 0 8px;
  border:3px solid var(--ink); border-radius:var(--r-md); font-size:16px; font-family:inherit;
  background:var(--white);}
.chippool{max-height:228px; overflow-y:auto; padding:6px 2px 2px;}
.poolrows{max-height:336px; overflow-y:auto; padding:2px;}
.chip.dim{opacity:.45; cursor:not-allowed; box-shadow:none;}

/* ---- 对歌（对歌包） ---- */
.dava{display:inline-flex; align-items:center; justify-content:center; flex:none;
  width:38px; height:38px; border-radius:50%; border:2.5px solid var(--ink);
  color:var(--ink); font-weight:800; font-size:17px; transition:transform .18s ease;}
.dava.big{transform:scale(1.45);}
.dturn{display:flex; gap:10px; align-items:flex-start; padding:8px 6px;
  border-radius:var(--r-md);}
.dturn.live{background:var(--cream); outline:3px solid var(--ink);}
.dturn-main{flex:1; min-width:0;}
/* 回放页演出式舞台：当前歌手放大亮起、其余压暗 */
.dstage{display:flex; flex-wrap:wrap; gap:14px 8px; justify-content:center; margin:16px 0 4px;}
.dperson{display:flex; flex-direction:column; align-items:center; gap:5px; width:66px;
  transition:opacity .18s ease;}
.dperson .dpname{font-size:14px; font-weight:700; max-width:66px; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap;}
.dperson.dim{opacity:.35;}
.dperson.live .dava{transform:scale(1.55); box-shadow:0 0 0 4px var(--cream), var(--sh-row);}
.dperson.live .dpname{font-size:16.5px; font-weight:900;}
.dnow{text-align:center; min-height:36px; font-size:19px; font-weight:800; margin:10px 0 2px;}
.dnow .lyric-big{margin:0;}
.badge.hot{background:var(--warn); color:var(--white);}
.lyric-big{font-size:23px; font-weight:800; letter-spacing:2px; margin:10px 0;}
.award{display:inline-block; background:var(--cream); border:2.5px solid var(--ink);
  border-radius:999px; padding:4px 12px; font-weight:800; font-size:14.5px;
  margin:0 6px 6px 0;}

/* 选人器（2026-11-07 晚定版，两模式同一套）：好友列表＋序号＋↑↓。
   序号即演唱顺序；人数提醒大字常驻。 */
.selcount{font-size:25px; font-weight:900; margin:10px 0 4px;}
.selist{display:flex; flex-direction:column; gap:8px; margin-top:6px;}
.selist:empty{display:none;}
.selrow{display:flex; align-items:center; gap:10px; border:3px solid var(--ink);
  border-radius:var(--r-md); background:var(--white); padding:7px 12px;}
.selrow .selno{flex:none; width:30px; height:30px; border-radius:50%;
  background:var(--ink); color:var(--white); font-size:16px; font-weight:900;
  text-align:center; line-height:30px;}
.selrow .fava{font-size:25px;}
.selrow .fname{font-size:18px; font-weight:800;}
.mvbtn{flex:none; width:30px; height:30px; border:2.5px solid var(--ink);
  border-radius:var(--r-sm); background:var(--cream); font-size:15px; font-weight:900;
  line-height:1; cursor:pointer; padding:0;}
.mvbtn:disabled{opacity:.3; cursor:default;}
.orm{flex:none; width:28px; height:28px; border:2.5px solid var(--ink);
  border-radius:50%; background:var(--white); font-size:13px; font-weight:900; line-height:1; cursor:pointer;}
.selrow .mvbtn:first-of-type{margin-left:auto;}

/* 清唱对歌顺序榜（同一套选人器）：榜位即接唱顺序，调序只留 ↑↓ */
.olist{display:flex; flex-direction:column; gap:8px; margin-top:12px;}
.olist:empty{display:none;}
.orow{display:flex; align-items:center; gap:10px; border:3px solid var(--ink);
  border-radius:var(--r-md); background:var(--white); padding:7px 12px;}
.orow .orank{flex:none; font-size:13.5px; font-weight:900; background:var(--ink);
  color:var(--white); border-radius:8px; padding:3px 8px;}
.orow .fava{font-size:25px;}
.orow .fname{font-size:18px; font-weight:800;}
.orow .omove{margin-left:auto; display:flex; gap:6px;}
.orow .orm{flex:none;}

/* 选人页定稿版式（2026-11-07 晚 Jacky 定稿，两模式完全同构）：
   单一好友列表——撤已选区/候选池两区，全页一份列表；每行右侧选择框，
   选中框里变序号；框右 ↑↓ 调序；页眉小字计数；底部栏左返回右发出邀请。 */
.pcount{font-size:15.5px; font-weight:800; color:var(--ink-2); margin:8px 0 2px;}
.picklist{max-height:356px; overflow-y:auto; padding:2px;}
.prow{display:flex; align-items:center; gap:6px; border:3px solid var(--ink);
  border-radius:16px; padding:8px; margin:8px 0; background:var(--white); cursor:pointer;
  box-shadow:var(--sh-row);}
.prow.on{background:var(--pink-soft);}
.prow.dim{opacity:.45; cursor:not-allowed; box-shadow:none;}
.prow .fava{font-size:27px; width:46px; height:46px; line-height:42px; text-align:center;
  background:var(--paper); border:2.5px solid var(--ink); border-radius:50%; flex:none;}
.prow .fname{font-size:19px; font-weight:800; flex:1; min-width:0;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.prow .badge{font-size:12px; padding:2px 7px; flex:none;}
.prow .denom{display:inline-flex; align-items:center; gap:1px; font-size:12px; line-height:1; flex:none;}
.prow .denom svg{display:block; flex:none; width:11px; height:11px;}
.prow .pbox{flex:none; width:32px; height:32px; border:3px solid var(--ink);
  border-radius:var(--r-sm); background:var(--white); color:var(--white); font-size:17px; font-weight:900;
  line-height:26px; text-align:center;}
.prow.on .pbox{background:var(--berry);}
.prow .pmv{flex:none; display:flex; gap:4px;}
.actbar{display:flex; justify-content:space-between; align-items:center; gap:10px;
  margin-top:14px;}
.actbar .btn{margin:0; white-space:nowrap; flex:none;}
.actbar .btn.big{width:auto; flex:1;}
/* 底部主操作栏永远钉底（2026-11-07 晚 Jacky 定为默认常识）：选人页的
   「返回／发出邀请」栏固定在视口底部（全局五签 tabbar 之上），好友
   列表只在其上方独立滚动（.picklist 自带 overflow），栏的位置不随
   列表长短漂移、不被内容顶下去。bottom＝tabbar 实测高 64px。 */
.actbar.pinbar{position:fixed; left:50%; transform:translateX(-50%);
  width:min(560px,100%); bottom:64px; z-index:40; margin-top:0;
  background:var(--card); border-top:3px solid var(--ink);
  padding:10px 14px; box-sizing:border-box;}
/* 钉栏脱离文档流后，卡片底部留出栏高，免尾行被栏盖住 */
.pickcard{padding-bottom:108px;}

/* 面额星金（视觉规范 §2.5）：星 SVG 尖角填充读变量，JS 侧不写死色值 */
.denom svg.star .tip{fill:var(--denom-star);}
