:root{
  --blue:#2c4fb9;--violet:#6b3fb0;--pink:#d8609b;--rose:#f7c6d8;--cream:#fdf3ea;
  --teal:#23a0ae;--gold:#d9963f;--ink:#2d2553;--muted:#7b7596;--line:#e9e2f3;--danger:#d0366f;
  --grad:linear-gradient(100deg,#2c4fb9 0%,#6b3fb0 48%,#d8609b 100%);
  --pattern:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='8'%3E%3Crect width='24' height='8' fill='%23f7dfc2'/%3E%3Cpath d='M0 4l4-4 4 4-4 4z' fill='%2323a0ae'/%3E%3Cpath d='M8 4l4-4 4 4-4 4z' fill='%23d8609b'/%3E%3Cpath d='M16 4l4-4 4 4-4 4z' fill='%236b3fb0'/%3E%3Cpath d='M3 4l1-1 1 1-1 1zM19 4l1-1 1 1-1 1z' fill='%23f7dfc2'/%3E%3C/svg%3E");
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{margin:0;color:var(--ink);font:16px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  background:linear-gradient(175deg,#fdeef3 0%,#f1ebfb 45%,#e7f1fb 100%) fixed;min-height:100vh}
#app{max-width:560px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;padding:0}
h1,h2,h3,p{margin:0}
main,#v-login{flex:1}

.cover{display:block;width:100%;aspect-ratio:5/3;object-fit:cover}
.stripe{height:8px;background:var(--pattern) repeat-x center}

/* 按钮 */
.btn{display:block;width:100%;height:52px;border-radius:14px;font-size:17px;font-weight:600;text-align:center}
.btn.primary{color:#fff;background:linear-gradient(100deg,#5a45c0,#d8609b);box-shadow:0 6px 16px rgba(120,60,170,.3)}
.btn.primary:disabled{background:#d6d1e4;box-shadow:none;color:#fff}
.btn.ghost{background:#fff;color:var(--danger);border:1.5px solid #f2c3d7}
.btn.big{height:54px;font-size:18px;letter-spacing:2px}
.link{color:var(--violet);font-size:14px}

/* 登录 */
.login{margin:-34px 16px 0;position:relative;padding:26px 22px 24px;background:#fff;border-radius:20px;box-shadow:0 14px 34px rgba(90,60,170,.16)}
.login h1{font:600 21px "Songti SC","STSong","Noto Serif SC",serif;text-align:center;margin-bottom:18px;letter-spacing:2px}
.code{width:100%;height:56px;border:1.5px solid var(--line);border-radius:14px;text-align:center;font-size:22px;letter-spacing:3px;color:var(--ink);outline:0;background:#fbf9fe}
.code::placeholder{font-size:16px;letter-spacing:1px;color:#b2acc6}
.code:focus{border-color:var(--violet)}
.form-err{min-height:22px;margin:6px 0;color:var(--danger);font-size:14px;text-align:center}

/* 顶栏 */
#topbar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:8px;min-height:52px;padding:6px 14px;padding-top:max(6px,env(safe-area-inset-top));color:#fff;background:var(--grad)}
.back{font-size:32px;line-height:1;width:30px;height:38px;color:#fff;text-align:left}
.top-title{flex:1;min-width:0;font:600 16px "Songti SC","STSong","Noto Serif SC",serif;letter-spacing:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top-user{display:flex;align-items:center;gap:8px;font-size:15px;white-space:nowrap}
.top-user b{font-weight:600}
.top-user b:after{content:" 评委";font-weight:400;font-size:12px;opacity:.85}
.top-user button{font-size:12px;color:#fff;padding:3px 9px;border-radius:12px;background:rgba(255,255,255,.2)}

.section-head{display:flex;justify-content:space-between;align-items:center;padding:16px 16px 8px}
.section-head h2{font:600 18px "Songti SC","STSong","Noto Serif SC",serif;letter-spacing:1px}

/* 分组卡片 */
#groupList{padding:0 14px 8px}
.gcard{display:block;width:100%;text-align:left;margin-bottom:12px;padding:14px 16px;background:#fff;border-radius:16px;box-shadow:0 4px 14px rgba(90,60,170,.09);border-left:5px solid transparent;border-image:linear-gradient(180deg,#2c4fb9,#d8609b) 1 100%;border-radius:0 16px 16px 0}
.gcard.live{background:linear-gradient(100deg,#fff 60%,#fdeaf2)}
.g-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.g-name{font-size:18px;font-weight:600}
.g-time{color:var(--muted);font-size:13.5px;margin:2px 0 8px}
.g-foot{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.bar{flex:1;height:7px;border-radius:7px;background:#efeaf7;overflow:hidden}
.bar i{display:block;height:100%;width:0;border-radius:7px;background:linear-gradient(90deg,#23a0ae,#6b3fb0,#d8609b);transition:width .3s}
.badge{flex:none;font-size:12px;padding:2px 9px;border-radius:10px;background:#f0ecf8;color:var(--muted)}
.badge.live{background:#fde3ee;color:var(--danger)}
.badge.published{background:#e1f4f3;color:#12838e}
.badge.paused{background:#fbefdd;color:#ad7020}

.notice{margin:10px 14px 0;padding:10px 14px;border-radius:12px;font-size:14px;background:#fbefdd;color:#8a5a1b}
.notice.done{background:#e1f4f3;color:#0f6f79}

/* 分组页 */
.group-head{position:sticky;top:52px;z-index:4;padding:12px 16px 0;background:#fff;box-shadow:0 3px 10px rgba(90,60,170,.07)}
.gh-line{display:flex;justify-content:space-between;align-items:baseline}
.gh-line h2{font-size:19px}
#gStat{font-size:14px;color:var(--muted)}
#gStat b{color:var(--violet);font-size:18px}
.gh-time{font-size:13px;color:var(--muted);margin-bottom:6px}
.group-head .bar{display:block}
.tabs{display:flex;margin-top:4px}
.tabs button{flex:1;height:42px;color:var(--muted);font-size:15px;position:relative}
.tabs button.on{color:var(--violet);font-weight:600}
.tabs button.on:after{content:"";position:absolute;left:30%;right:30%;bottom:0;height:3px;border-radius:3px;background:linear-gradient(90deg,#6b3fb0,#d8609b)}
#items{padding:10px 14px}
.item{display:flex;align-items:center;gap:12px;width:100%;min-height:68px;text-align:left;margin-bottom:9px;padding:10px 12px;background:#fff;border-radius:14px;box-shadow:0 3px 10px rgba(90,60,170,.07)}
.seq{flex:none;width:36px;height:36px;line-height:36px;text-align:center;border-radius:50%;font-weight:600;color:#fff;background:linear-gradient(135deg,#2c4fb9,#8a49b8)}
.item.scored .seq{background:#d9d3e8}
.item img{flex:none;width:46px;height:46px;border-radius:9px;object-fit:cover}
.i-main{flex:1;min-width:0}
.i-name{font-size:16px;font-weight:600;line-height:1.3}
.i-prog{font-size:13px;color:var(--muted);margin-top:1px}
.i-score{flex:none;min-width:62px;text-align:right}
.i-score b{display:block;font-size:22px;line-height:1.2;color:var(--violet);font-variant-numeric:tabular-nums}
.i-score small{font-size:12px;color:var(--muted)}
.i-go{display:inline-block;font-size:14px;color:#fff;padding:6px 12px;border-radius:16px;background:linear-gradient(100deg,#5a45c0,#d8609b)}
.empty{text-align:center;color:var(--muted);padding:36px 0;font-size:14px}

/* 打分面板 */
#mask{position:fixed;inset:0;z-index:20;background:rgba(40,25,90,.45)}
#sheet{position:fixed;z-index:21;left:50%;bottom:0;width:100%;max-width:560px;max-height:96vh;overflow:auto;transform:translateX(-50%);
  padding:16px 16px calc(14px + env(safe-area-inset-bottom));background:#fff;border-radius:22px 22px 0 0;animation:up .2s ease-out}
@keyframes up{from{transform:translate(-50%,40px);opacity:.4}to{transform:translate(-50%,0);opacity:1}}
.sheet-close{position:absolute;right:10px;top:8px;width:36px;height:36px;font-size:24px;color:var(--muted)}
.s-head{display:flex;gap:12px;align-items:center;padding-right:30px}
.s-head img{width:60px;height:60px;border-radius:10px;object-fit:cover}
.seq-tag{font-size:12px;color:#fff;padding:1px 8px;border-radius:9px;background:var(--grad)}
.s-head h3{font-size:18px;line-height:1.3;margin-top:3px}
.s-head p{font-size:13px;color:var(--muted)}
.s-display{height:72px;margin-top:12px;display:flex;align-items:baseline;justify-content:center;gap:4px;padding-top:6px;border-radius:14px;background:linear-gradient(100deg,#f0f1fc,#fbeaf3);color:var(--ink)}
.s-display span{font-size:44px;font-weight:700;line-height:60px;font-variant-numeric:tabular-nums;color:var(--violet)}
.s-display span.ph{color:#c4bdd8}
.s-display small{color:var(--muted)}
.s-display.shake{animation:shake .25s}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.s-hint{text-align:center;font-size:13px;color:var(--muted);margin:6px 0}
.keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.keypad button{height:54px;font-size:24px;font-weight:600;border-radius:12px;background:#f5f2fb;color:var(--ink);user-select:none}
.keypad button:active{background:#e4dcf5}
.keypad button.fn{background:#ece7f6;font-size:20px}
.s-actions{display:flex;gap:10px;margin-top:10px}
.s-actions .ghost{flex:0 0 34%}
.s-log-btn{display:block;margin:10px auto 0}
.log{display:flex;justify-content:space-between;gap:10px;padding:9px 2px;border-bottom:1px solid var(--line);font-size:14px}
.log small{color:var(--muted)}
.log .val{flex:none;font-variant-numeric:tabular-nums;font-weight:600;color:var(--violet)}
.log .val.w{color:var(--danger)}
#historyList{margin:0 14px 12px;padding:4px 14px;background:#fff;border-radius:14px}

/* 确认框/提示 */
#confirm{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:30px;background:rgba(40,25,90,.5)}
.c-box{width:100%;max-width:340px;padding:22px 18px 16px;border-radius:18px;background:#fff}
.c-box p{text-align:center;font-size:17px;margin-bottom:18px}
.c-btns{display:flex;gap:10px}
.c-btns .btn{height:46px;font-size:16px}
.c-btns .ghost{color:var(--muted);border-color:var(--line)}
#toast{position:fixed;z-index:40;left:50%;top:40%;transform:translateX(-50%);max-width:80%;padding:12px 20px;border-radius:12px;background:rgba(35,25,70,.9);color:#fff;font-size:15px;text-align:center}

footer{padding:14px 0 calc(14px + env(safe-area-inset-bottom));text-align:center}
footer a{font-size:11.5px;color:#a49dbb;text-decoration:none}
