:root{--bg:#f5f6f8;--card:#fff;--border:#e2e5ea;--primary:#1a66ff;--primary-soft:#eaf1ff;--text:#1f2733;--text-2:#5b6472;--text-3:#8b93a1;--green:#16a34a;--green-soft:#e9f9ef;--red:#dc2626;--red-soft:#feecec;--amber:#b45309;--amber-soft:#fef6e7}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{height:100%}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","HarmonyOS Sans SC","MiSans","Microsoft YaHei UI",sans-serif;background:var(--bg);color:var(--text);min-height:100vh;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom)}
.topbar{position:sticky;top:0;z-index:50;background:var(--card);border-bottom:1px solid var(--border);padding:0 16px;height:calc(52px + env(safe-area-inset-top));padding-top:env(safe-area-inset-top);display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:16px}
.topbar .right{display:flex;align-items:center;gap:14px}
.logout{font-size:12.5px;color:var(--text-3);cursor:pointer;font-weight:500;padding:6px 0}
.card{background:var(--card);margin:14px 12px;border-radius:14px;padding:16px;border:1px solid var(--border)}
.who{display:flex;align-items:center;gap:12px;padding:12px;background:var(--primary-soft);border-radius:12px}
.ava{width:46px;height:46px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:600;flex-shrink:0}
.nm{font-size:16.5px;font-weight:600}.rl{font-size:12.5px;color:var(--text-2);margin-top:2px}
.rl.full{color:var(--primary);font-weight:600}
.rl.part{color:var(--amber);font-weight:600}
label{display:block;font-size:13px;color:var(--text-2);margin:14px 0 6px;font-weight:600}
input{width:100%;height:48px;border:1px solid var(--border);border-radius:10px;padding:0 14px;font-size:16px;color:var(--text);background:#fff}
input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(26,102,255,.12)}
.btn{display:flex;align-items:center;justify-content:center;width:100%;height:50px;border:none;border-radius:12px;font-size:16px;font-weight:600;cursor:pointer;margin-top:14px;touch-action:manipulation;transition:.12s}
.btn:active{transform:scale(.98)}.btn.primary{background:var(--primary);color:#fff}.btn.secondary{background:#eef1f5;color:var(--text)}
.result{margin-top:12px;padding:14px 16px;border-radius:10px;font-size:14px;line-height:1.7;display:none}
.result.ok{background:var(--green-soft);color:#065f46;border:1px solid #a7f3d0;display:block}.result.err{background:var(--red-soft);color:#991b1b;border:1px solid #fecaca;display:block}.result.info{background:var(--amber-soft);color:#92400e;border:1px solid #fcd34d;display:block}
.hint{color:var(--text-3);font-size:12.5px;margin-top:8px;line-height:1.6}
.login-title{font-size:17px;font-weight:700;margin-bottom:2px}
.login-sub{font-size:13px;color:var(--text-2)}
/* 排班列表: 与上下播页一致 */
.sched-card{padding:16px}
.sched-title{font-size:15px;font-weight:600;display:flex;align-items:center;gap:6px}

.sched-day{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
.sched-day:first-child{margin-top:10px;padding-top:0;border-top:none}
.sched-day-head{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600}
.sched-date{color:var(--text)}
.sched-week{color:var(--text-2);font-weight:500}
.sched-tag{font-size:11px;padding:2px 8px;border-radius:20px;background:var(--primary-soft);color:var(--primary);font-weight:600}
.sched-item{display:flex;justify-content:space-between;align-items:center;gap:10px;background:#f7f8fa;border:1px solid var(--border);border-radius:8px;padding:9px 12px;margin-top:8px;font-size:13.5px}
.sched-room{color:var(--text);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sched-time{color:var(--text-2);font-variant-numeric:tabular-nums;flex-shrink:0}
.sched-empty{color:var(--text-3);font-size:12.5px;margin-top:8px}
.sched-none{color:var(--text-3);font-size:13px;text-align:center;padding:18px 0}
.updated{text-align:center;color:var(--text-3);font-size:11px;margin-top:8px}
/* 当前上播状态 */
.status-line{margin-top:5px;display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:20px;font-size:12px;font-weight:600}
.badge .dot{width:8px;height:8px;border-radius:50%;background:currentColor;flex-shrink:0}
.badge.sched{background:var(--amber-soft);color:#92400e;border:1px solid #fcd34d}
.badge.idle{background:#eef1f5;color:var(--text-2);border:1px solid var(--border)}
/* 正在直播: 醒目标识(红标+脉冲圆点+实时时长+卡片高亮) */
.live-badge{display:inline-flex;align-items:center;gap:8px;padding:5px 14px;border-radius:22px;background:#e11d48;color:#fff;font-size:14.5px;font-weight:700;box-shadow:0 0 0 3px rgba(225,29,72,.16);white-space:nowrap}
.live-badge .dot{width:10px;height:10px;border-radius:50%;background:#fff;animation:livePulse 1.1s infinite ease-in-out}
@keyframes livePulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.5}}
.live-dur{font-size:13.5px;font-weight:700;color:var(--green);font-variant-numeric:tabular-nums;white-space:nowrap}
.live-room{font-size:13px;color:var(--text-2);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.who.live{background:#fff1f2;border:1px solid #fecdd3}
/* 修改密码弹窗 */
.btn.ghost{background:none;border:none;color:var(--primary);font-size:13px;font-weight:600;height:34px;padding:0 8px;margin:0;border-radius:8px}
.btn.ghost:active{background:var(--primary-soft)}
.btn.sm{width:auto;height:36px;padding:0 18px;font-size:13px;border-radius:8px;margin-top:0}
.modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:200;display:flex;align-items:center;justify-content:center;padding:20px}
.modal{background:#fff;border-radius:16px;padding:22px;width:100%;max-width:380px;box-shadow:0 12px 40px rgba(15,23,42,.2)}
.modal-title{font-size:17px;font-weight:700;margin-bottom:2px}
.modal-sub{font-size:12.5px;color:var(--text-3);margin-bottom:4px}
.modal .btn{height:46px;font-size:15px}
