/* ============ 主题：默认暗黑，[data-theme=light] 切回浅色 ============ */
:root{
  color-scheme:dark;
  --paper:#0A0F18; --glow:#172A47; --card:#111A28; --card-2:#162133;
  --ink:#E9EFF9; --ink-2:#A9B9D0; --muted:#7E8FA8; --past:#5C6C84;
  --line:#26364F; --line-2:#1B263A; --accent:#7FACFF; --accent-soft:#1C2E4C; --accent-deep:#C6DBFF;
  --duty-bg:#1C2C46; --duty-ink:#A8C7FF; --duty-line:#2C4468;
  --delay-bg:#3A2B14; --delay-ink:#F3C77A; --delay-line:#664C22;
  --live:#4C9DFF; --live-soft:#152A47;
  --now:#FF8A3D; --now-2:#FFC078; --now-bg:#3A2413; --now-bg-2:#241A12;
  --now-ink:#FFD2AC; --now-ink-2:#FFB779; --now-ink-3:#FFC48A;
  --now-inset:#121A28; --now-line:#7A4520; --prog-bg:#5A3520;
  --rest:#46D08A; --holiday:#FF6B6F; --work:#7FACFF; --school:#B79BFF;
  --holiday-bg:#3A1F24; --holiday-line:#6A3139;
  --work-bg:#182B48; --work-line:#2E4B76;
  --school-bg:#271D3C; --school-line:#4B3872;
  --head-bg:#151F30; --sub-bg:#111A29; --sub-bg-2:#131C2B;
  --today-cell:#141F31; --picked-cell:#2A2116; --picked-head:#3A2A18;
  --flow-item-bg:#141E2E; --rest-cell:#12291F; --rest-cell-2:#0F211A; --rest-line:#1E4A35; --rest-ink:#8FE6BC;
  --bar-bg:#1B263A; --btn-line:#33445F; --editor-line:#3A4A66;
  --live-bg-1:#1A2231; --live-bg-2:#241B14;
  --rest-bg-1:#141C28; --rest-bg-2:#111823;
  --lg-class-bg:#1B2A42; --lg-class-line:#2C4468;
  --hover-bg:#1B2A42; --hover-line:#3E5578;
  --danger:#FF8A8F; --danger-line:#6A3139; --danger-hover:#3A1F24;
  --pending:#E59B2A; --badge-ink:#0A0F18; --btn-ink:#0A0F18;
  --shadow:rgba(0,0,0,.38); --live-glow:rgba(255,138,61,.6);
}
:root[data-theme="light"]{
  color-scheme:light;
  --paper:#F4F6FA; --glow:#E9EFFA; --card:#FFFFFF; --card-2:#FFFFFF;
  --ink:#16233A; --ink-2:#3B4A63; --muted:#8794A8; --past:#AEB8C8;
  --line:#E4E9F2; --line-2:#EFF2F8; --accent:#2F5597; --accent-soft:#EAF1FC; --accent-deep:#1E3C74;
  --duty-bg:#F2F6FD; --duty-ink:#3E5C8C; --duty-line:#E1EAF8;
  --delay-bg:#FFF7E8; --delay-ink:#8A5A00; --delay-line:#F3E2BF;
  --live:#1F6FEB; --live-soft:#E7F0FF;
  --now:#FF6A00; --now-2:#FFB020; --now-bg:#FFF4E8; --now-bg-2:#FFFAF2;
  --now-ink:#8A3B00; --now-ink-2:#B45309; --now-ink-3:#9A3412;
  --now-inset:#FFFFFF; --now-line:#FFD3AE; --prog-bg:#FFDCC0;
  --rest:#2E9E68; --holiday:#E5484D; --work:#2F5597; --school:#7C5CD6;
  --holiday-bg:#FFF4F3; --holiday-line:#FAD9D8;
  --work-bg:#F0F5FE; --work-line:#D8E4F8;
  --school-bg:#F7F3FE; --school-line:#E6DBFA;
  --head-bg:#F7F9FD; --sub-bg:#FBFCFE; --sub-bg-2:#FAFBFE;
  --today-cell:#FCFDFF; --picked-cell:#FFFBF4; --picked-head:#FFF0DF;
  --flow-item-bg:#FCFDFF; --rest-cell:#E8F9F0; --rest-cell-2:#F3FDF8; --rest-line:#BCE8D3; --rest-ink:#1B6B45;
  --bar-bg:#EDF1F8; --btn-line:#CFDAEC; --editor-line:#D3DBE8;
  --live-bg-1:#FFFAF5; --live-bg-2:#FFF3E7;
  --rest-bg-1:#FDFEFF; --rest-bg-2:#F6F8FC;
  --lg-class-bg:#E9EFFA; --lg-class-line:#D8E3F5;
  --hover-bg:#F6F9FF; --hover-line:#B9C9E6;
  --danger:#B4232A; --danger-line:#EFD0D2; --danger-hover:#FFF1F1;
  --pending:#E59B2A; --badge-ink:#FFFFFF; --btn-ink:#FFFFFF;
  --shadow:rgba(22,35,58,.28); --live-glow:rgba(255,106,0,.62);
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{
  background:radial-gradient(1200px 520px at 12% -10%,var(--glow) 0%,transparent 60%),var(--paper);
  color:var(--ink);font-family:system-ui,-apple-system,"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei","Source Han Sans SC",sans-serif;
  -webkit-font-smoothing:antialiased;min-height:100vh;padding:20px 16px 36px;
  transition:background-color .2s ease;
}
.page{max-width:980px;margin:0 auto}
button,input,select{font-family:inherit}
button{cursor:pointer}
.ghost{font-size:12px;font-weight:600;color:var(--accent);background:var(--card);border:1px solid var(--btn-line);border-radius:8px;padding:6px 11px;transition:.16s}
.ghost:hover{border-color:var(--accent);background:var(--accent-soft)}
.ghost.primary{background:var(--accent);border-color:var(--accent);color:var(--btn-ink)}
.ghost.primary:hover{background:var(--accent-deep);color:var(--btn-ink)}
.ghost.danger{color:var(--danger);border-color:var(--danger-line)}
.ghost.danger:hover{background:var(--danger-hover);border-color:var(--danger)}
.iconbtn{width:30px;height:30px;line-height:1;font-size:20px;color:var(--accent);background:var(--card);border:1px solid var(--btn-line);border-radius:8px;transition:.16s}
.iconbtn:hover{background:var(--accent-soft);border-color:var(--accent)}

/* ---------- 顶部 / 主题切换 ---------- */
.top{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:18px}
.eyebrow{font-size:12px;letter-spacing:.16em;color:var(--accent);font-weight:600;text-transform:uppercase}
h1{margin:6px 0 8px;font-size:26px;line-height:1.2;font-weight:700;letter-spacing:-.01em}
.stats{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:13px;color:var(--ink-2)}
.stats span{display:inline-flex;align-items:baseline;gap:4px}
.stats b{font-variant-numeric:tabular-nums;color:var(--accent);font-size:15px}
.clockbox{text-align:right}
.tools{display:flex;justify-content:flex-end;gap:8px;margin-bottom:9px}
.theme-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:650;color:var(--ink-2);
  background:var(--card);border:1px solid var(--btn-line);border-radius:999px;padding:6px 12px;transition:.16s}
.theme-toggle:hover{color:var(--ink);border-color:var(--accent);background:var(--card-2)}
.tt-icon{font-size:14px;line-height:1}
.clock{font-family:ui-monospace,"SF Mono",Consolas,"Liberation Mono",monospace;font-variant-numeric:tabular-nums;
       font-size:38px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--ink)}
.clock small{font-size:18px;color:var(--live);font-weight:600;margin-left:2px}
.dateline{margin-top:6px;font-size:13px;color:var(--muted)}

/* ---------- 状态条 ---------- */
.status{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--line);border-radius:14px;
        padding:16px 18px 18px;margin-bottom:16px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;
        box-shadow:0 1px 2px var(--shadow),0 8px 24px -16px var(--shadow)}
.status.is-live{border-color:var(--now-line);background:linear-gradient(180deg,var(--live-bg-1),var(--live-bg-2))}
.status.is-rest{border-color:var(--line);background:linear-gradient(180deg,var(--rest-bg-1),var(--rest-bg-2))}
.dot{width:9px;height:9px;border-radius:50%;background:var(--muted);flex:none}
.is-live .dot{background:var(--now);animation:dotBlink 1s steps(1,end) infinite}
@keyframes dotBlink{0%,49.99%{opacity:1;box-shadow:0 0 0 5px rgba(255,138,61,.22)}50%,100%{opacity:.35;box-shadow:none}}
.s-main{flex:1;min-width:0}
.s-title{font-size:16px;font-weight:650;letter-spacing:.01em}
.s-title .tag{display:inline-block;vertical-align:2px;margin-right:8px;font-size:11px;font-weight:700;letter-spacing:.08em;
             color:var(--badge-ink);background:var(--live);border-radius:5px;padding:2px 7px}
.is-live .s-title .tag{background:var(--now)}
.s-sub{margin-top:5px;font-size:13px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.s-right{text-align:right;flex:none}
.s-count{font-family:ui-monospace,"SF Mono",Consolas,monospace;font-variant-numeric:tabular-nums;
         font-size:26px;font-weight:700;color:var(--accent);line-height:1;letter-spacing:.02em}
.is-live .s-count{color:var(--now)}
.s-cap{font-size:11px;color:var(--muted);margin-top:4px;letter-spacing:.1em}
.bar{position:absolute;left:0;right:0;bottom:0;height:3px;background:var(--bar-bg)}
.bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--now-2),var(--now));transition:width .9s linear}
/* 课间等「无格子阶段」：状态条本身作为当前阶段方框，每秒一闪 */
@keyframes statusFlash{
  0%,49.99%{outline-color:var(--now);box-shadow:inset 0 0 0 2px var(--now),0 0 18px var(--live-glow)}
  50%,100%{outline-color:var(--now-2);box-shadow:inset 0 0 0 1px var(--now-line)}
}
.status.status-flash{outline:3px solid var(--now);outline-offset:-3px;animation:statusFlash 1s linear infinite}

/* ---------- 视图切换（移动端） ---------- */
.viewbar{display:none;gap:8px;margin:0 0 14px}
.viewbar button{flex:1;font-size:13px;font-weight:650;color:var(--ink-2);background:var(--card);border:1px solid var(--line);
                border-radius:10px;padding:9px 10px}
.viewbar button.on{color:var(--btn-ink);background:var(--accent);border-color:var(--accent)}

/* ---------- 全周表格 ---------- */
.tablewrap{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;
           box-shadow:0 1px 2px var(--shadow),0 10px 30px -20px var(--shadow)}
.scroller{overflow-x:auto}
table{width:100%;border-collapse:separate;border-spacing:0;min-width:660px;table-layout:fixed}
thead th{position:sticky;top:0;z-index:2;background:var(--head-bg);color:var(--accent-deep);font-size:13.5px;font-weight:650;
         letter-spacing:.06em;padding:9px 6px;text-align:center;border-bottom:1px solid var(--line);white-space:nowrap}
thead th.h-shift{font-size:12px;letter-spacing:.14em;color:var(--muted);font-weight:600}
thead th.h-shift:nth-child(1){position:sticky;left:0;z-index:6;background:var(--head-bg);box-shadow:1px 0 0 var(--line-2)}
thead th.h-shift:nth-child(2){position:sticky;left:72px;z-index:6;background:var(--head-bg);box-shadow:1px 0 0 var(--line-2)}
thead th.today{background:var(--accent-soft);color:var(--accent-deep)}
thead th.today::after{content:"";position:absolute;left:14%;right:14%;bottom:6px;height:2px;border-radius:2px;background:var(--accent)}
thead th.picked{background:var(--picked-head);color:var(--now-ink-3)}
tbody th.period{background:var(--sub-bg);text-align:left;padding:0 8px;width:72px;white-space:nowrap;font-size:13.5px;
                font-weight:650;color:var(--ink-2);border-bottom:1px solid var(--line-2);position:sticky;left:0;z-index:1}
tbody td.time{background:var(--sub-bg);padding:0 8px;width:112px;white-space:nowrap;font-family:ui-monospace,Consolas,monospace;
              font-size:13.5px;font-weight:600;color:var(--ink-2);font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line-2);
              position:sticky;left:72px;z-index:1}
tbody th.period,tbody td.time{border-right:1px solid var(--line-2)}
tbody tr:last-child th.period,tbody tr:last-child td.time{border-bottom:none}
tbody th.period.nowrow,tbody td.time.nowrow{background:var(--now-bg);color:var(--now-ink-3)}
td.cell{height:56px;text-align:center;vertical-align:middle;position:relative;border-bottom:1px solid var(--line-2);
        border-right:1px solid var(--line-2);font-size:14px;color:var(--ink);background:var(--card);transition:background .18s ease}
td.cell:last-child{border-right:none}
tr:last-child td.cell{border-bottom:none}
td.cell.today{background:var(--today-cell)}
td.cell.picked{background:var(--picked-cell)}
td.cell.past{color:var(--past)}
td.cell.past .num{color:var(--past)}
.num{font-size:23px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--accent-deep)}
.unit{font-size:12px;font-weight:600;color:var(--accent);margin-left:1px}
.duty{display:inline-block;font-size:13.5px;font-weight:650;color:var(--duty-ink);background:var(--duty-bg);
      border:1px solid var(--duty-line);border-radius:6px;padding:3px 9px}
.delay{color:var(--delay-ink);background:var(--delay-bg);border-color:var(--delay-line)}

/* 进行时：整格显眼方框 + 每秒一闪 */
@keyframes cellFlash{
  0%,49.99%{outline-color:var(--now);background:var(--now-bg);
            box-shadow:inset 0 0 0 2px var(--now-inset),0 0 0 4px rgba(255,138,61,.2),0 0 22px var(--live-glow)}
  50%,100%{outline-color:var(--now-2);background:var(--now-bg-2);
           box-shadow:inset 0 0 0 2px var(--now-inset),0 0 0 1px rgba(255,138,61,.28)}
}
td.cell.now{
  outline:3px solid var(--now);outline-offset:-3px;border-radius:8px;z-index:3;
  animation:cellFlash 1s linear infinite;
}
.nowwrap{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;flex-direction:column;align-items:center;
         justify-content:center;gap:1px;padding:2px 4px 9px;overflow:hidden}
.nowwrap>*{flex:none}
.nowtag{font-size:9px;font-weight:700;letter-spacing:.08em;color:var(--badge-ink);background:var(--now);border-radius:4px;
        padding:1px 6px;line-height:1.45;white-space:nowrap}
.nowtag::before{content:"● ";font-size:8px}
.nowmain{font-size:14px;font-weight:700;color:var(--now-ink);letter-spacing:.01em;line-height:1.2;max-width:100%;
         overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nowmain .num{font-size:19px;line-height:1.1;color:var(--now-ink)}
.nowmain.empty{font-size:12px;letter-spacing:.02em;color:var(--now-ink-3)}
.nowremain{font-family:ui-monospace,Consolas,monospace;font-size:11px;font-weight:700;color:var(--now-ink-2);
           font-variant-numeric:tabular-nums;white-space:nowrap}
.nowremain b{font-size:12px;color:var(--now-ink)}
td.cell.now .prog{position:absolute;left:9px;right:9px;bottom:3px;height:3px;background:var(--prog-bg);border-radius:3px;overflow:hidden}
td.cell.now .prog i{display:block;height:100%;background:var(--now)}

tr.brk th,tr.brk td{background:var(--sub-bg-2);border-bottom:1px solid var(--line-2);padding:5px 10px;
                    height:34px;font-size:12px;color:var(--ink-2);letter-spacing:.06em;text-align:left}
tr.brk .b-tag{color:var(--ink-2);font-weight:600}
tr.brk td .sep{opacity:.5;margin:0 8px}
@keyframes brkFlash{
  0%,49.99%{background:var(--now-bg);box-shadow:inset 0 0 0 3px var(--now),0 0 16px rgba(255,138,61,.4)}
  50%,100%{background:var(--now-bg-2);box-shadow:inset 0 0 0 2px var(--now-2)}
}
tr.brk.live td{background:var(--now-bg);color:var(--now-ink-3);font-weight:600;
               animation:brkFlash 1s linear infinite}
.brk-countdown{float:right;font-family:ui-monospace,Consolas,monospace;font-variant-numeric:tabular-nums;color:var(--now-ink-2);font-weight:700}

/* 短课间：每天一格，与节次行对齐 */
tr.gaprow th.period,tr.gaprow td.time{background:var(--sub-bg-2);color:var(--muted)}
tr.gaprow th.period{font-size:12px;font-weight:600;letter-spacing:.06em}
tr.gaprow th.period.nowrow,tr.gaprow td.time.nowrow{background:var(--now-bg);color:var(--now-ink-3)}
td.cell.gapcell{height:26px;background:var(--sub-bg-2);border-bottom:1px dashed var(--line-2);
                color:var(--muted);font-size:10px}
.gaplabel{opacity:.9;letter-spacing:.08em;font-size:10px}
/* 课间格很矮：内容压成一行，仍保留方框闪烁与秒级剩余 */
.nowwrap.compact{flex-direction:row;gap:5px;padding:1px 3px 7px}
.nowwrap.compact .nowtag{display:none}
.nowwrap.compact .nowmain{font-size:10.5px;letter-spacing:0}
.nowwrap.compact .nowremain{font-size:10px}
.nowwrap.compact .nowremain b{font-size:11px}
td.cell.gapcell .prog{bottom:2px;height:2px;left:6px;right:6px}

/* ---------- 移动端时间轴 ---------- */
.todayflow{display:none;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px;margin-bottom:16px;
           box-shadow:0 1px 2px var(--shadow),0 10px 30px -20px var(--shadow)}
.flow-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.flow-kicker{font-size:11px;letter-spacing:.12em;color:var(--accent);font-weight:700}
.flow-title{font-size:15px;font-weight:650;margin-top:2px}
.flow-list{display:flex;flex-direction:column;gap:8px}
.flow-item{display:flex;align-items:center;gap:10px;border:1px solid var(--line-2);border-radius:11px;padding:10px 11px;background:var(--flow-item-bg)}
.flow-item .f-time{font-family:ui-monospace,Consolas,monospace;font-size:11.5px;color:var(--muted);width:88px;flex:none;font-variant-numeric:tabular-nums}
.flow-item .f-name{font-size:12px;color:var(--ink-2);width:44px;flex:none;font-weight:650}
.flow-item .f-val{flex:1;font-size:14px;font-weight:650;color:var(--accent-deep)}
.flow-item .f-val.empty{color:var(--muted);font-weight:500}
.flow-item.past{opacity:.55}
.flow-item.break{background:var(--sub-bg-2);border-style:dashed;font-size:12px;color:var(--muted)}
.flow-item.gap{background:var(--sub-bg-2);border-style:dashed}
.flow-item.gap .f-val{font-weight:500;font-size:12.5px}
@keyframes flowBreakFlash{
  0%,49.99%{border-color:var(--now);background:var(--now-bg);box-shadow:0 0 0 3px rgba(255,138,61,.2)}
  50%,100%{border-color:var(--now-line);background:var(--now-bg-2);box-shadow:0 0 0 1px rgba(255,138,61,.2)}
}
.flow-item.break.live{border:2px solid var(--now);animation:flowBreakFlash 1s linear infinite;flex-wrap:wrap}
@keyframes flowFlash{
  0%,49.99%{border-color:var(--now);background:var(--now-bg);box-shadow:0 0 0 3px rgba(255,138,61,.2),0 0 18px var(--live-glow)}
  50%,100%{border-color:var(--now-line);background:var(--now-bg-2);box-shadow:0 0 0 1px rgba(255,138,61,.2)}
}
.flow-item.now{border:2px solid var(--now);animation:flowFlash 1s linear infinite;flex-wrap:wrap}
.flow-item.now .f-val{color:var(--now-ink)}
.flow-item.now.phase .f-name{width:auto;white-space:nowrap;color:var(--now-ink-3)}
.flow-item.now.phase .f-val{font-size:12.5px}
.f-live{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11.5px;
        color:var(--now-ink-3);font-weight:700;font-family:ui-monospace,Consolas,monospace;font-variant-numeric:tabular-nums}
.f-live .f-tag{background:var(--now);color:var(--badge-ink);border-radius:5px;padding:2px 7px;font-size:10px;letter-spacing:.06em}

/* ---------- 脚注 ---------- */
.foot{margin-top:14px;display:flex;justify-content:space-between;gap:18px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.legend{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.lg-class{background:var(--lg-class-bg);border:1px solid var(--lg-class-line)}
.lg-duty{background:var(--duty-bg);border:1px solid var(--duty-line)}
.lg-delay{background:var(--delay-bg);border:1px solid var(--delay-line)}
.lg-now{background:var(--now-bg);border:2px solid var(--now)}
.notes{max-width:560px;line-height:1.6}
.notes p{margin:0 0 3px}

/* ---------- 日历 ---------- */
.calendar{margin-top:20px;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px 18px 18px;
          box-shadow:0 1px 2px var(--shadow),0 10px 30px -20px var(--shadow)}
.cal-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap}
.cal-kicker{font-size:11px;letter-spacing:.14em;color:var(--accent);font-weight:700}
.cal-title{font-size:20px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.cal-nav{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cal-nav select{font-size:12px;padding:6px 8px;border:1px solid var(--btn-line);border-radius:8px;background:var(--card);color:var(--ink)}
.cal-meta{margin:10px 0 12px;font-size:12px;color:var(--ink-2);background:var(--head-bg);border:1px solid var(--line-2);
          border-radius:9px;padding:8px 11px;line-height:1.6}
.cal-weekheads{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.cal-weekheads span{text-align:center;font-size:11px;font-weight:700;color:var(--ink-2);padding:3px 0}
.cal-weekheads .we{color:var(--rest-ink,var(--rest));font-weight:800}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal-cell{position:relative;min-height:64px;border:1px solid var(--line-2);border-radius:10px;background:var(--flow-item-bg);
          padding:6px 5px;text-align:left;transition:.14s;overflow:hidden}
.cal-cell:hover{border-color:var(--hover-line);background:var(--hover-bg)}
.cal-cell.blank{background:transparent;border-color:transparent;pointer-events:none}
.cal-cell .d{font-size:15px;font-weight:650;font-variant-numeric:tabular-nums;color:var(--ink)}
.cal-cell .badge{position:absolute;top:5px;right:5px;font-size:10px;font-weight:800;line-height:1;
                 padding:3px 4px;border-radius:5px;color:var(--badge-ink);background:var(--rest)}
.cal-cell .nm{display:block;margin-top:6px;font-size:10px;line-height:1.25;color:var(--ink-2);
              overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.cal-cell .cdot{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--accent);margin-left:4px;vertical-align:2px}
  .cal-cell.rest{background:linear-gradient(180deg,var(--rest-cell),var(--rest-cell-2,var(--rest-cell)));border-color:var(--rest-line);border-left:3px solid var(--rest)}
.cal-cell.rest .d{color:var(--rest-ink);font-weight:700}
.cal-cell.rest .badge{background:var(--rest);color:#0A0F18;font-size:11px;padding:3px 6px;font-weight:900}
.cal-cell.rest .nm{color:var(--rest-ink);font-weight:600}
.cal-cell.holiday{background:var(--holiday-bg);border-color:var(--holiday-line)}
.cal-cell.holiday .badge{background:var(--holiday)}
.cal-cell.work{background:var(--work-bg);border-color:var(--work-line)}
.cal-cell.work .badge{background:var(--work)}
.cal-cell.school{background:var(--school-bg);border-color:var(--school-line)}
.cal-cell.school .badge{background:var(--school)}
.cal-cell.pending::after{content:"";position:absolute;left:5px;right:5px;bottom:0;height:2px;
                         background:repeating-linear-gradient(90deg,var(--pending) 0 4px,transparent 4px 8px)}
.cal-cell.today{outline:2px solid var(--live);outline-offset:-2px}
.cal-cell.today .d{color:var(--live)}
.cal-cell.selected{box-shadow:0 0 0 2px var(--now);border-color:var(--now)}
.cal-cell.edit{cursor:pointer}
.cal-legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:12px;font-size:11.5px;color:var(--ink-2)}
.cal-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.b-rest{background:var(--rest)}
.b-holiday{background:var(--holiday)}
.b-work{background:var(--work)}
.b-school{background:var(--school)}
.b-pending{background:repeating-linear-gradient(90deg,var(--pending) 0 3px,transparent 3px 6px)}
.b-class{background:var(--accent);border-radius:50%!important;width:6px!important;height:6px!important}
.cal-detail{margin-top:14px;border-top:1px solid var(--line-2);padding-top:12px;min-height:64px}
.cd-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cd-date{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
.cd-pill{font-size:11px;font-weight:700;color:var(--badge-ink);background:var(--accent);border-radius:6px;padding:3px 8px}
.cd-pill.rest{background:var(--rest)}
.cd-pill.holiday{background:var(--holiday)}
.cd-pill.work{background:var(--work)}
.cd-pill.school{background:var(--school)}
.cd-note{font-size:12px;color:var(--muted)}
.cd-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.cd-list span{font-size:11.5px;color:var(--ink-2);background:var(--head-bg);border:1px solid var(--line-2);
              border-radius:7px;padding:4px 8px;font-variant-numeric:tabular-nums}
.cd-empty{font-size:12.5px;color:var(--muted);margin-top:8px}

/* 编辑面板 */
.cal-editor{margin-top:14px;border:1px dashed var(--editor-line);border-radius:12px;background:var(--sub-bg);padding:12px}
.ed-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.ed-head b{font-size:13px}
.ed-tip{font-size:11.5px;color:var(--muted);flex:1;min-width:200px;line-height:1.5}
.ed-row{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end;padding:8px 0;border-top:1px solid var(--line-2)}
.ed-row label{font-size:11px;color:var(--ink-2);display:flex;flex-direction:column;gap:4px}
.ed-row input,.ed-row select{font-size:12px;padding:6px 8px;border:1px solid var(--btn-line);border-radius:7px;background:var(--card);color:var(--ink);max-width:160px}
.ed-row input[type=text]{width:150px}
.ed-row .chk{flex-direction:row;align-items:center;gap:5px;font-size:11.5px;padding-bottom:7px}
.ed-row .chk input{width:auto}
.ed-count{font-size:11.5px;color:var(--muted)}

/* ---------- 演示控件 ---------- */
.demo{margin-top:20px;border:1px dashed var(--editor-line);border-radius:12px;background:var(--sub-bg);padding:12px 14px;font-size:12px;color:var(--ink-2)}
.demo-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.demo button[type=button]{font:inherit;font-size:12px;font-weight:600;color:var(--accent);background:var(--card);
                          border:1px solid var(--btn-line);border-radius:7px;padding:5px 11px}
.demo button.on{background:var(--accent);border-color:var(--accent);color:var(--btn-ink)}
.demo-body{display:none;margin-top:11px;gap:12px;align-items:center;flex-wrap:wrap}
.demo.open .demo-body{display:flex}
.demo select,.demo input[type=date]{font:inherit;font-size:12px;padding:4px 6px;border:1px solid var(--btn-line);border-radius:6px;background:var(--card);color:var(--ink)}
.demo input[type=range]{width:170px;accent-color:var(--accent)}
.demo #demoSec{width:90px}
.demo .val{font-family:ui-monospace,Consolas,monospace;font-variant-numeric:tabular-nums;color:var(--accent);font-weight:700}
.demo .hint{color:var(--muted)}

/* ---------- 响应式 ---------- */
@media (max-width:760px){
  body{padding:14px 10px 26px}
  h1{font-size:21px}
  .clock{font-size:29px}
  .clock small{font-size:14px}
  .status{padding:13px 13px 16px;gap:10px}
  .s-title{font-size:14px}
  .s-sub{font-size:12px}
  .s-count{font-size:21px}
  .viewbar{display:flex}
  .page[data-view="day"] .tablewrap{display:none}
  .page[data-view="week"] .todayflow{display:none}
  .page[data-view="week"] .tablewrap{display:block}
  .todayflow{display:block}
  .tablewrap{display:none}
  .scroller{overflow-x:auto;-webkit-overflow-scrolling:touch}
  table{min-width:580px}
  td.cell{height:48px}
  td.cell.gapcell{height:22px}
  tr.brk td{height:28px}
  tbody th.period,tbody td.time{font-size:12.5px}
  .num{font-size:20px}
  .nowwrap{padding:1px 3px 8px;gap:0}
  .nowtag{font-size:8px;padding:1px 4px}
  .nowmain{font-size:12px}
  .nowmain .num{font-size:16px}
  .nowremain{font-size:9.5px}
  .nowremain b{font-size:10px}
  .cal-grid{gap:4px}
  .cal-weekheads{gap:4px}
  .cal-cell{min-height:56px;padding:5px 4px;border-radius:8px}
  .cal-cell .d{font-size:13px}
  .cal-cell .badge{font-size:9px;top:4px;right:3px;padding:2px 3px}
  .cal-cell .nm{font-size:9px;margin-top:5px}
  .cal-title{font-size:17px}
  .cal-nav{gap:5px}
  .cal-nav .ghost{padding:6px 8px;font-size:11px}
  .ed-row input,.ed-row select,.ed-row input[type=text]{width:100%;max-width:none}
  .ed-row label{flex:1 1 130px}
  .ed-row .chk{flex:1 1 100%}
  .foot{font-size:11px}
  .demo input[type=range]{width:130px}
}
@media (min-width:761px){
  .todayflow{display:none!important}
  .tablewrap{display:block!important}
}

/* ---------- 无障碍 / 打印 ---------- */
@media (prefers-reduced-motion:reduce){
  td.cell.now,.flow-item.now,.flow-item.break.live,tr.brk.live td,.status.status-flash{animation:none}
  td.cell.now{outline:4px solid var(--now);background:var(--now-bg);box-shadow:inset 0 0 0 2px var(--now-inset),0 0 0 4px rgba(255,138,61,.3)}
  .flow-item.now{border:2px solid var(--now);background:var(--now-bg)}
  .is-live .dot{animation:none}
}
@page{size:A4 landscape;margin:10mm}
@media print{
  /* 打印强制浅色，避免大面积深色油墨 */
  :root{
    color-scheme:light;
    --paper:#FFFFFF; --glow:#FFFFFF; --card:#FFFFFF; --card-2:#FFFFFF;
    --ink:#16233A; --ink-2:#3B4A63; --muted:#8794A8; --past:#AEB8C8;
    --line:#E4E9F2; --line-2:#EFF2F8; --accent:#2F5597; --accent-soft:#EAF1FC; --accent-deep:#1E3C74;
    --head-bg:#F7F9FD; --sub-bg:#FBFCFE; --sub-bg-2:#FAFBFE; --today-cell:#FFFFFF;
    --flow-item-bg:#FFFFFF; --rest-cell:#F7F8FA; --holiday-bg:#FFF4F3; --work-bg:#F0F5FE; --school-bg:#F7F3FE;
    --now-bg:#FFF4E8; --now-bg-2:#FFFAF2; --now-ink:#8A3B00; --now-ink-2:#B45309; --now-ink-3:#9A3412;
    --bar-bg:#EDF1F8; --btn-line:#CFDAEC; --editor-line:#D3DBE8; --badge-ink:#FFFFFF; --btn-ink:#FFFFFF;
    --duty-bg:#F2F6FD; --duty-ink:#3E5C8C; --duty-line:#E1EAF8; --delay-bg:#FFF7E8; --delay-ink:#8A5A00; --delay-line:#F3E2BF;
    --live-bg-1:#FFFAF5; --live-bg-2:#FFF3E7; --rest-bg-1:#FDFEFF; --rest-bg-2:#F6F8FC;
    --lg-class-bg:#E9EFFA; --lg-class-line:#D8E3F5; --hover-bg:#F6F9FF; --hover-line:#B9C9E6;
    --now:#FF6A00; --now-2:#FFB020; --live:#1F6FEB; --prog-bg:#FFDCC0; --now-inset:#FFFFFF;
    --rest:#2E9E68; --holiday:#E5484D; --work:#2F5597; --school:#7C5CD6;
    --shadow:rgba(22,35,58,.28); --live-glow:rgba(255,106,0,.62);
  }
  body{background:#fff;padding:0}
  .demo,.viewbar,.cal-editor,.cal-nav,.todayflow,.tools{display:none!important}
  .status,.tablewrap,.calendar{box-shadow:none;margin-bottom:10px}
  .page{max-width:none}
  .scroller{overflow:visible}
  table{min-width:0;width:100%}
  thead th{position:static}
  thead th.h-shift:nth-child(1),thead th.h-shift:nth-child(2){position:static;box-shadow:none}
  tbody th.period,tbody td.time{position:static}
  td.cell{height:32px}
  td.cell.gapcell{height:16px}
  tr.brk td{height:24px}
  td.cell.now{animation:none;outline:3px solid var(--now)}
  tr.brk.live td,.flow-item.break.live,.status.status-flash{animation:none}
  .status.status-flash{outline:2px solid var(--now)}
  .tablewrap{display:block!important}
  .todayflow{display:none!important}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* ================= 紧凑布局：首屏容纳完整天气卡 ================= */
.page{max-width:1080px}
.top{margin-bottom:6px}
h1{margin:4px 0 6px;font-size:21px}
.eyebrow{font-size:11px;letter-spacing:.12em}
.stats{font-size:12px;gap:4px 12px}
.stats b{font-size:13.5px}
.clock{font-size:32px}
.clock small{font-size:15px}
.tools{margin-bottom:6px}
.status{padding:11px 15px 13px;margin-bottom:10px}

thead th{padding:7px 6px;font-size:12.5px}
td.cell{height:46px;font-size:14px}
.num{font-size:21px}
.duty{font-size:13px;padding:3px 10px}
td.cell.gapcell{height:24px}
tr.brk th,tr.brk td{height:28px;padding:3px 10px;font-size:12px}
tbody th.period,tbody td.time{font-size:13.5px}
tbody th.period{padding:0 9px}
tbody td.time{padding:0 9px}

.foot{margin-top:8px;font-size:11.5px}
.foot .notes p{margin:0;line-height:1.6}
.legend{font-size:12px}
.wx-host{margin-top:4px}
#wxBox .wx-card{gap:5px}
#wxBox .wx-chart{height:176px}
#wxBox .wx-hours-scroll{height:36px}

/* 矮屏（≤1000px）：隐藏短课间行，但字号不放小 */
@media (max-height:1000px){
  h1{font-size:19px}
  .clock{font-size:28px}
  .status{padding:9px 13px 11px;margin-bottom:8px}
  thead th{padding:6px;font-size:12px}
  td.cell{height:38px;font-size:13.5px}
  td.cell.gapcell,tr.gaprow{display:none}
  tr.brk th,tr.brk td{height:24px;padding:2px 9px;font-size:11.5px}
  #wxBox .wx-card{gap:4px}
  #wxBox .wx-chart{height:150px}
}


/* ================= 顶部合并 + 进行中格子悬浮 ================= */
/* 品牌 / 进行时状态 / 时钟 三列同排，省掉一整张卡的高度 */
.top{display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center;gap:0 16px;margin-bottom:8px;flex-wrap:nowrap}
.top .brand{min-width:0}
.top .clockbox{text-align:right;white-space:nowrap}
.top .clockbox .tools{margin-bottom:4px}
.top .status{flex-direction:row;align-items:center;gap:10px;
  padding:8px 12px 12px;margin:0;border-radius:10px;min-width:0}
.top .status .s-main{flex:1 1 auto;min-width:0}
.top .status .s-title{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .status .s-sub{font-size:10.5px;margin-top:2px;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.top .status .s-right{flex:none;text-align:right}
.top .status .s-count{font-size:18px;line-height:1.15}
.top .status .s-cap{font-size:9.5px;margin-top:1px}
.top .status .bar{position:absolute;left:0;right:0;bottom:0;height:3px}

/* 进行中格子：「进行时」标签与剩余时间半透明悬浮，允许超出方格 */
.nowwrap{overflow:visible;padding:0}
td.cell.now{overflow:visible}
.cal-cell.now{overflow:visible}
.nowtag{position:absolute;top:-11px;left:50%;transform:translateX(-50%);
  background:rgba(255,138,61,.95);color:#0a0f18;font-weight:800;font-size:9.5px;
  padding:1px 7px;box-shadow:0 2px 10px rgba(0,0,0,.55);z-index:6;white-space:nowrap}
.nowremain{position:absolute;bottom:-11px;left:50%;transform:translateX(-50%);
  background:rgba(9,14,24,.92);border:1px solid rgba(255,138,61,.55);
  color:#ffd2ac;font-weight:700;font-size:10.5px;border-radius:5px;padding:1px 8px;
  box-shadow:0 2px 10px rgba(0,0,0,.55);z-index:6;white-space:nowrap}
.nowmain{position:relative;z-index:4}

/* 窄屏回退：三列放不下时状态单独一行 */
@media (max-width:1100px){
  .top{display:flex;flex-wrap:wrap;align-items:flex-end}
  .top .brand{flex:1 1 auto}
  .top .status{flex:1 1 100%;margin-top:8px}
}


/* ================= 顶部重排：标题居中 / 浅色按钮最右 ================= */
.top{position:relative;display:grid;
  grid-template-columns:186px minmax(240px,1fr) auto 64px;
  align-items:center;gap:0 10px;height:87px;margin-bottom:8px;flex-wrap:nowrap}
.top .clockbox{grid-column:1;grid-row:1;justify-self:start;text-align:left;white-space:nowrap}
.top .brand{grid-column:2;grid-row:1;justify-self:center;text-align:center;min-width:0}
.top .status{grid-column:3;grid-row:1;justify-self:end;margin:0}
.top .tools{grid-column:4;grid-row:1;position:static;margin:0;
  justify-self:end;align-self:start;padding-top:2px}
.top .clockbox .tools{display:none}
.top .brand .eyebrow{letter-spacing:.16em}
.top .brand h1{margin:4px 0 6px;font-size:21px;letter-spacing:.02em}
.top .brand .stats{justify-content:center;font-size:11px;gap:3px 10px}
.top .clockbox .clock{font-size:28px}
.top .clockbox .dateline{font-size:10.5px;margin-top:2px}
.top .status .s-title{font-size:12px}
.top .status .s-sub{font-size:10px}
.top .status .s-count{font-size:17px}

/* 窄屏回退：三列放不下时状态单独一行，按钮仍靠右 */
@media (max-width:1100px){
  .top{display:flex;flex-wrap:wrap;align-items:flex-end;height:auto;min-height:87px}
  .top .brand{flex:1 1 auto;text-align:left}
  .top .clockbox{flex:1 1 auto;text-align:right}
  .top .status{flex:1 1 100%;margin-top:8px}
  .top .tools{position:absolute;top:0;right:0}
}


/* 状态卡收窄，给居中的标题让出空间（整体宽高不变） */
.top .status{max-width:452px}
.top .status .s-main{max-width:288px}


/* 主题按钮列留足宽度，保持「☀ 浅色」横排不变形 */
.top{grid-template-columns:180px minmax(220px,1fr) auto 92px}
.top .tools .theme-toggle{white-space:nowrap;display:inline-flex;align-items:center;gap:5px}


/* 顶部四块以「进行时」卡片顶边为基准线对齐（按钮不再偏高） */
.top{align-items:flex-start;padding-top:14px}
.top .clockbox,.top .brand,.top .status,.top .tools{align-self:flex-start}
.top .tools{padding-top:0}


/* ================= 小字提亮：暗色主题用亮白 + 亮黄 ================= */
:root{
  --hl-text:#EDF4FF;      /* 主要小字 */
  --hl-time:#FFD166;      /* 时间 / 数字：亮黄 */
  --hl-sub:#CFDDF2;       /* 次级说明 */
  --hl-dim:#B7C9E4;       /* 课间等非重点行 */
  --hl-eyebrow:#9FC4FF;
}
html[data-theme="light"]{
  --hl-text:#16233A;
  --hl-time:#A85B00;
  --hl-sub:#3B4A63;
  --hl-dim:#52627C;
  --hl-eyebrow:#1E4C8C;
}

/* 顶部 */
.top .brand .eyebrow{color:var(--hl-eyebrow);font-weight:700}
.top .brand .stats{color:var(--hl-text)}
.top .brand .stats b{color:var(--hl-time);font-weight:800}
.top .clockbox .dateline{color:var(--hl-sub);font-weight:600}
.top .status .s-title{color:var(--hl-text)}
.top .status .s-sub{color:var(--hl-time);font-weight:600}
.top .status .s-cap{color:var(--hl-sub)}
.top .status .s-count{color:var(--hl-time)}

/* 表头与表格左两列 */
thead th.h-shift{color:var(--hl-sub);font-weight:700}
tbody th.period{color:var(--hl-text)}
tbody td.time{color:var(--hl-time);font-weight:700}
tr.brk th,tr.brk td{color:var(--hl-dim)}
tr.brk .b-tag{color:var(--hl-text)}
td.cell.gapcell,.gaplabel{color:var(--hl-dim)}
tbody th.period.past,tbody td.time.past{color:var(--hl-dim)}

/* 图例与底部说明 */
.legend,.legend span,.notes,.notes p{color:var(--hl-sub)}
.notes p{font-weight:500}
