:root{
  --bg:#f4f3ee;
  --card:#ffffff;
  --ink:#26282d;
  --muted:#8d897e;
  --line:#e7e4da;
  --acc:#c1502e;
  --amber:#c08b2f;
  --teal:#3e9675;
  --shadow:0 1px 2px rgba(30,24,10,.04),0 12px 32px -20px rgba(30,24,10,.22);
  color-scheme:light;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  background:var(--bg);color:var(--ink);
  font:15px/1.65 "PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",system-ui,-apple-system,sans-serif;
  font-variant-numeric:tabular-nums;
  padding:0 14px 46px;
  -webkit-tap-highlight-color:transparent;
}
.page{max-width:1180px;margin:0 auto}

/* 头部 */
.top{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;padding:22px 4px 10px;flex-wrap:wrap}
h1{font-size:23px;font-weight:700;letter-spacing:.06em;line-height:1.2;display:flex;align-items:center;gap:10px}
h1::before{content:"";width:9px;height:20px;border-radius:3px;background:linear-gradient(180deg,#e0784f,var(--acc))}
.meta{color:var(--muted);font-size:12.5px;margin-top:5px;letter-spacing:.02em}
.status{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--line);
  border-radius:999px;padding:7px 14px;font-size:12.5px;box-shadow:var(--shadow);white-space:nowrap}
.status .dot{width:7px;height:7px;border-radius:50%;background:var(--acc);flex:none;animation:pulse 2.2s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.25}}

/* 顶部进度条：有课=本节进度，没课=到下一节的等待进度 */
.pbar{background:var(--card);border:1px solid var(--line);border-radius:14px;
  box-shadow:var(--shadow);padding:11px 14px 9px;margin:0 0 12px}
.pb-line{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:6px}
.pb-l{font-size:11.5px;font-weight:600;color:#6d695f;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pb-r{font-size:11px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.pb-track{height:6px;border-radius:999px;background:#efece3;overflow:hidden}
.pb-fill{height:100%;width:0;border-radius:999px;background:var(--acc);transition:width .6s linear}
.pbar[data-state="free"] .pb-fill{background:#4d7c92}

/* 周切换条 */
.weekbar{
  display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:8px 14px;margin:8px 0 12px;box-shadow:var(--shadow);
}
.weekbar .cur{font-size:14.5px;font-weight:600;line-height:1.3;flex:1;min-width:0}
.weekbar .cur small{display:block;font-size:11.5px;color:var(--muted);font-weight:400;letter-spacing:.02em;margin-top:1px}
.wb-btns{display:flex;align-items:center;gap:8px;flex:none;margin-left:auto}
.wb-btns button{
  appearance:none;border:1px solid var(--line);background:var(--card);border-radius:999px;
  font-family:inherit;font-size:13px;color:var(--ink);cursor:pointer;padding:5px 13px;
  transition:border-color .15s,color .15s;
}
.wb-btns button:hover:not(:disabled){border-color:var(--acc);color:var(--acc)}
.wb-btns button:disabled{opacity:.35;cursor:default}
.wb-btns button.on{color:var(--acc);border-color:#e2b29e}
.wb-btns .nb{min-width:36px;padding:5px 8px}

/* 课表：整表按屏宽等比铺满，任何设备都不横滑、不悬浮 */
.cal{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:10px 8px;overflow:hidden}
.gwrap{position:relative}
.grid{display:grid;grid-template-columns:54px repeat(5,1fr);gap:4px;width:100%}
@media (min-width:900px){
  .cal{padding:12px}
  .grid{grid-template-columns:112px repeat(5,minmax(96px,1fr));gap:6px}
}

/* 表头：星期在上、日期在下 */
.hd{font-size:13.5px;font-weight:600;text-align:center;padding:2px 0 6px}
.hd .dn{display:block;line-height:1.3}
.hd .dt{display:block;font-size:11px;color:var(--muted);font-weight:400;margin-top:1px}
.hd.cur .dt{color:#fff;background:var(--acc);border-radius:999px;width:fit-content;margin:2px auto 0;padding:0 7px;line-height:17px}

/* 首列：节次+时间 */
.k{background:transparent;display:flex;flex-direction:column;justify-content:center;
  padding:2px 6px 2px 4px;text-align:right;border-right:1px solid #efece3}
.k b{font-size:10.5px;font-weight:600;line-height:1.35}
.k i{font-size:8.5px;font-style:normal;color:var(--muted);line-height:1.5;letter-spacing:-.02em}
@media (min-width:900px){.k b{font-size:14px}.k i{font-size:11.5px}}

/* 每日固定时段横条（早读/午休/晚餐/晚自习） */
.strip{
  grid-column:1/-1;display:flex;align-items:center;gap:7px;
  font-size:11px;color:#a09b8e;letter-spacing:.05em;padding:3px 2px 0;
}
.strip.top{border-top:1px dashed #eeeade;margin-top:2px}
.strip::before{content:"";width:5px;height:5px;border-radius:50%;background:#cfcabb;flex:none}
.strip.meal::before{background:var(--teal)}
.strip.study::before{background:var(--amber)}
.strip .tm{margin-left:auto;color:#b6b1a5;font-size:10.5px;letter-spacing:0;padding-right:2px}
@media (min-width:900px){.strip{font-size:12px}.strip .tm{font-size:11.5px}}

/* 单元格 */
.cell{background:var(--card);border:1px solid #ece9df;border-radius:11px;min-height:58px;padding:8px 10px;
  font-size:12.5px;line-height:1.42;word-break:break-word;white-space:pre-line;
  display:flex;flex-direction:column;justify-content:center}
.cell.is-today{box-shadow:inset 0 0 0 1.5px rgba(193,80,46,.3)}
.cell.is-on{box-shadow:inset 0 0 0 2px var(--acc);border-color:var(--acc);background:#fffdf9}
.cell .cn{font-weight:600;display:block}
.cell .ct{font-size:10.5px;margin-top:2px;opacity:.7;display:block;line-height:1.45}
.cell .ct .tc,.cell .ct .rm{font-style:normal}
.cell .ct .tc::after{content:" · "}

/* 手机 / 平板：紧凑排版，整表刚好铺满屏宽 */
@media (max-width:899px){
  .hd{font-size:11.5px;padding:2px 0 4px}
  .hd .dt{font-size:8.5px}
  .hd.cur .dt{padding:0 6px;line-height:15px}
  .cell{min-height:82px;padding:6px 3px;font-size:10.5px;line-height:1.35;border-radius:8px}
  .cell .ct{font-size:9px;margin-top:1px}
  .cell .ct .tc{display:block}
  .cell .ct .rm{display:block}
  .cell .ct .tc::after{content:none}
  .strip{font-size:9.5px;padding:2px 0 0}
  .strip .tm{font-size:9px}
  .k{text-align:center;padding:2px 3px}
  .k i{white-space:nowrap}
  .weekbar .cur small{display:inline;margin-left:8px}
  .now-card{padding:12px 14px 10px}
  .nc-title{font-size:16px}
  .nc-meta{font-size:11.5px}
  .nc-side{min-width:0}
  .nc-side b{font-size:12.5px;white-space:nowrap}
  .nc-side i{font-size:9.5px;white-space:nowrap}
  .nc-foot{font-size:11.5px}
}
@media (min-width:900px){.cell{font-size:13px;min-height:66px;padding:10px 12px}.cell .ct{font-size:11px}}

/* 当前状态卡：只跟“课”走，不跟作息走 */
.now-card{
  background:var(--card);border:1px solid var(--line);border-radius:16px;
  box-shadow:var(--shadow);padding:14px 16px 10px;margin:0 0 12px;
}
.nc-row{display:flex;gap:12px;align-items:flex-start}
.nc-main{flex:1;min-width:0}
.nc-title{font-size:17px;font-weight:700;line-height:1.35}
.nc-meta{font-size:12px;color:var(--muted);margin-top:2px;line-height:1.55;white-space:pre-line}
.nc-prog{font-size:11.5px;color:#a29d90;margin-top:3px}
.nc-clock{font-size:11px;color:var(--muted);font-style:normal;margin-bottom:2px;font-variant-numeric:tabular-nums}
.nc-side{flex:none;text-align:right;display:flex;flex-direction:column;align-items:flex-end;min-width:88px}
.nc-side b{font-size:16px;font-weight:700;line-height:1.35;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.nc-side i{font-size:10.5px;color:var(--muted);font-style:normal;line-height:1.4}
.now-card[data-state="cls"] .nc-side b{color:var(--acc)}
.now-card[data-state="study"] .nc-side b{color:#a9741c}
.now-card[data-state="free"] .nc-side b{color:#4d7c92}
.now-card[data-state="end"] .nc-side b{color:#a8a394}
.nc-foot{margin-top:9px;padding-top:8px;border-top:1px dashed #efece3;
  font-size:12px;color:#6d695f;line-height:1.7;font-variant-numeric:tabular-nums;white-space:pre-line}
@media (min-width:900px){
  .now-card{margin:0 0 14px}
  .nc-title{font-size:19px}
}

/* 双卡 */
.cols{display:grid;gap:16px;margin-top:16px}
@media (min-width:1080px){.cols{grid-template-columns:1fr 1fr;align-items:start}}
.card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:18px 18px 12px}
.card h2{font-size:15px;font-weight:700;letter-spacing:.05em;display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.card h2 .tag{font-size:11px;color:var(--muted);font-weight:400}

/* 折叠卡片（课程一览）：只在手机/平板上收起，点标题展开；电脑端始终展开 */
.fold .h2-side{display:inline-flex;align-items:center;gap:8px;margin-left:auto;flex:none}
.fold .chev{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;
  border-top:6px solid #b3aea1;transition:transform .2s}
@media (max-width:1079px){
  .fold{cursor:pointer;user-select:none;-webkit-user-select:none}
  .card.open .chev{transform:rotate(180deg)}
  #ovBody{display:none}
  .card.open #ovBody{display:block}
}
@media (min-width:1080px){
  .fold .chev{display:none}
}

/* 手机 / 平板单列时：课程一览放在每日作息上面 */
@media (max-width:1079px){
  .cols .card:nth-child(1){order:2}
  .cols .card:nth-child(2){order:1}
}

/* 作息 */
.lgd{display:flex;gap:14px;flex-wrap:wrap;margin:10px 0 2px}
.lgd span{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--muted)}
.lgd i{width:7px;height:7px;border-radius:50%;display:inline-block}
.rt-grp{margin-top:12px}
.rt-grp h4{font-size:11px;color:var(--muted);font-weight:500;letter-spacing:.28em;border-bottom:1px solid #f0ede4;padding-bottom:5px;margin-bottom:2px}
.rt-grp ul{list-style:none}
.rt-it{display:flex;align-items:center;gap:12px;min-height:34px;border-bottom:1px dashed #f2efe7;padding:4px 0}
.rt-it:last-child{border-bottom:none}
.rt-it .d{width:9px;height:9px;border-radius:50%;flex:none}
.rt-it .lb{font-size:13.5px;flex:1;min-width:0}
.rt-it .tm{font-size:12px;color:var(--muted);letter-spacing:-.02em}
.rt-it.cls .d{background:var(--acc)}
.rt-it.study .d{background:var(--amber)}
.rt-it.rest .d{background:var(--teal)}
.rt-it.gap .d{background:#fff;border:2px solid #c6c2b6}

/* 一览 */
#ovList,#djList{list-style:none;margin-top:4px}
.ov-it{padding:10px 0;border-bottom:1px dashed #f2efe7}
.ov-it:last-of-type{border-bottom:none}
.ov-it .nm{font-size:13.5px;font-weight:600;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.ov-it .sw{width:5px;height:13px;border-radius:3px;align-self:center;flex:none}
.ov-it .hc{font-size:11px;color:var(--muted);font-weight:400;margin-left:auto}
.ov-it .sg{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.75;padding-left:13px}
.ov-it .sg b{color:#6d695f;font-weight:600}
.ov-subh{
  display:flex;align-items:center;gap:8px;margin:16px 0 2px;
  font-size:13px;font-weight:700;letter-spacing:.03em;
}
.ov-subh::before{content:"";width:5px;height:13px;border-radius:3px;background:var(--amber);flex:none}

/* 校园平面图 */
.map-card{margin-top:16px}
.mapbox{overflow:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:12px;
  background:#eef0e9;max-height:78vh;margin-top:10px}
.mapbox img{display:block;width:100%;height:auto;cursor:zoom-in;user-select:none;-webkit-user-select:none}
.mapbox.zoom img{cursor:zoom-in}
.mapbox.zoom2 img{cursor:zoom-out}

@media (max-width:699px){
  .status{display:none!important}
}
@media print{
  body{background:#fff;padding:0}
  .status,.weekbar,.now-card,.map-card,.pbar{display:none!important}
  #ovBody{display:block!important}
  .cal,.card{box-shadow:none;border-color:#ddd}
  .cell{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}