/* Layout: 一张按时间排下来的课程表。上方是本周七天和四个数字，下方是当天的时间轴，
   休息时段画成虚线绿块，需要打钩的任务画成白色大卡片。 */
:root{
  color-scheme:light;
  --bg:#EDF2F6; --surface:#FFFFFF; --ink:#16212B; --muted:#5B6976; --line:#D3DDE5;
  --accent:#1F5FBF; --accent-ink:#FFFFFF; --accent-soft:#E2ECFA;
  --rest-bg:#E6F3EC; --rest-ink:#2D6A4A; --rest-line:#A9D3BC;
  --warn:#9A5206; --warn-soft:#FCEFD9; --ok:#1B7A4B;
  --sy-bg:#FBE6E1; --sy-ink:#9C3524;
  --sh-bg:#DFEAFB; --sh-ink:#1D4F9F;
  --se-bg:#DDF1E4; --se-ink:#1F6B43;
  --sk-bg:#EBE3F8; --sk-ink:#5B3AA0;
  --so-bg:#E6EBEF; --so-ink:#4A5662;
  --f-body:"Noto Sans SC","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  --f-disp:"Noto Serif SC","Songti SC","STSong","Source Han Serif SC",serif;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#0F161C; --surface:#17212A; --ink:#E8EEF3; --muted:#93A3B1; --line:#2A3844;
    --accent:#6FA2F0; --accent-ink:#0B1622; --accent-soft:#1D2D45;
    --rest-bg:#15261E; --rest-ink:#86CFA6; --rest-line:#2C4A3A;
    --warn:#E8AA62; --warn-soft:#33261A; --ok:#6BD39A;
    --sy-bg:#3A211D; --sy-ink:#F0A89B;
    --sh-bg:#1B2B47; --sh-ink:#9CC0F5;
    --se-bg:#1B3326; --se-ink:#8FD3A9;
    --sk-bg:#2C2342; --sk-ink:#C4AEF0;
    --so-bg:#25303A; --so-ink:#A9B7C3;
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --bg:#0F161C; --surface:#17212A; --ink:#E8EEF3; --muted:#93A3B1; --line:#2A3844;
  --accent:#6FA2F0; --accent-ink:#0B1622; --accent-soft:#1D2D45;
  --rest-bg:#15261E; --rest-ink:#86CFA6; --rest-line:#2C4A3A;
  --warn:#E8AA62; --warn-soft:#33261A; --ok:#6BD39A;
  --sy-bg:#3A211D; --sy-ink:#F0A89B;
  --sh-bg:#1B2B47; --sh-ink:#9CC0F5;
  --se-bg:#1B3326; --se-ink:#8FD3A9;
  --sk-bg:#2C2342; --sk-ink:#C4AEF0;
  --so-bg:#25303A; --so-ink:#A9B7C3;
  color-scheme:dark;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
[hidden]{display:none!important}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--f-body);font-size:15px;line-height:1.55;padding-inline:max(16px,env(safe-area-inset-left,0px)) max(16px,env(safe-area-inset-right,0px));padding-block:calc(20px + env(safe-area-inset-top,0px)) calc(40px + env(safe-area-inset-bottom,0px))}
img{max-width:100%}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.wrap{max-width:720px;margin-inline:auto;display:flex;flex-direction:column;gap:14px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* 顶部 */
.top{display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:flex-end}
.top-l{min-width:0}
.eyebrow{margin:0;font-size:13px;color:var(--muted)}
h1{margin:2px 0 0;font-family:var(--f-disp);font-size:28px;line-height:1.2;font-weight:700;text-wrap:balance}
.date{margin:4px 0 0;font-size:15px;color:var(--muted);font-variant-numeric:tabular-nums}
.top-r{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sync{font-size:12px;padding:3px 9px;border-radius:99px;border:1px solid var(--line);color:var(--muted);background:var(--surface);white-space:nowrap}
.sync[data-s="live"]{color:var(--ok);border-color:var(--rest-line);background:var(--rest-bg)}
.sync[data-s="error"]{color:var(--warn);border-color:var(--warn);background:var(--warn-soft)}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;background:var(--surface);padding:3px;gap:2px}
.seg button{border:0;background:transparent;padding:6px 14px;border-radius:7px;font-size:14px;min-height:34px;color:var(--muted)}
.seg button[aria-pressed="true"]{background:var(--accent);color:var(--accent-ink);font-weight:700}

.banner{border-radius:12px;padding:10px 14px;font-size:14px;border:1px solid var(--warn);background:var(--warn-soft);color:var(--warn)}
.banner[hidden]{display:none}

/* 周条 */
.week{display:grid;grid-template-columns:auto repeat(7,minmax(0,1fr)) auto;gap:5px;align-items:stretch}
.nav{width:30px;border:1px solid var(--line);background:var(--surface);border-radius:10px;font-size:18px;color:var(--muted)}
.cell{display:flex;flex-direction:column;align-items:center;gap:3px;padding:7px 0 8px;border:1px solid var(--line);background:var(--surface);border-radius:12px;min-width:0}
.cell .wd{font-size:12px;color:var(--muted)}
.cell .dn{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1}
.cell .mini{width:62%;height:4px;border-radius:2px;background:var(--line);overflow:hidden}
.cell .mini i{display:block;height:100%;background:var(--accent)}
.cell.today .dn{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.cell.full .mini i{background:var(--ok)}
.cell[aria-current="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.cell[aria-current="true"] .wd{color:var(--accent-ink);opacity:.85}
.cell[aria-current="true"] .mini{background:rgba(255,255,255,.35)}
.cell[aria-current="true"] .mini i{background:var(--accent-ink)}
.moderow{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;font-size:14px;color:var(--muted)}
.moderow .seg button{padding:4px 12px;min-height:30px;font-size:13px}
.linkbtn{border:0;background:transparent;color:var(--accent);padding:6px 4px;font-size:14px;text-decoration:underline;text-underline-offset:3px}
.linkbtn[hidden]{display:none}

/* 数字 */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr));gap:10px}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px 14px;min-width:0}
.stat .lb{font-size:13px;color:var(--muted)}
.stat .v{font-family:var(--f-disp);font-size:24px;font-weight:700;line-height:1.25;font-variant-numeric:tabular-nums}
.stat .v small{font-family:var(--f-body);font-size:13px;font-weight:400;color:var(--muted)}
.stat .sb{font-size:12.5px;color:var(--muted);margin-top:2px}
.stat.warn .v,.stat.warn .sb{color:var(--warn)}
.bar{height:6px;border-radius:3px;background:var(--line);margin-top:8px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent);border-radius:3px}
.stat.warn .bar i{background:var(--warn)}
.alerts{display:flex;flex-direction:column;gap:8px}

/* 卡片、表单 */
.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px}
.card[hidden]{display:none}
h2{margin:0 0 8px;font-size:16px;font-weight:700}
.card label.l{display:block;font-size:13px;color:var(--muted);margin:10px 0 4px}
textarea,input[type=text],select{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:9px 11px;min-height:42px}
textarea{resize:vertical}
.btn{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:9px 16px;min-height:42px;font-weight:500}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:700}
.add-row{display:grid;grid-template-columns:5.6rem minmax(0,1fr) 6.4rem auto;gap:8px}
.hint{margin:8px 0 0;font-size:13px;color:var(--muted)}
.todo{margin:6px 0 0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:6px}
.todo li{font-size:13px;padding:2px 10px;border-radius:99px;background:var(--bg);border:1px solid var(--line)}
.pstat{margin:0;font-size:14px}
.note-card p{margin:0}

/* 时间轴 */
.tl{display:flex;flex-direction:column;gap:8px}
.row{display:grid;grid-template-columns:3.3rem minmax(0,1fr);gap:10px;align-items:start}
.tm{font-size:13px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;line-height:1.25;padding-top:15px}
.tm span{display:block;font-size:11.5px;opacity:.8}
.row.r .tm{padding-top:9px}
.restc{border:1px dashed var(--rest-line);background:var(--rest-bg);color:var(--rest-ink);border-radius:12px;padding:7px 12px;font-size:14px;display:flex;flex-wrap:wrap;gap:2px 10px;align-items:baseline}
.restc b{font-weight:700}
.restc em{font-style:normal;opacity:.85;font-size:13px}
.tk{display:flex;gap:12px;align-items:center;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px 14px;min-height:60px}
.tk .bx,.hwi .bx{flex:none;width:26px;height:26px;border-radius:50%;border:2px solid var(--muted);position:relative}
.tk[aria-pressed="true"] .bx,.hwi[aria-pressed="true"] .bx{background:var(--accent);border-color:var(--accent)}
.tk[aria-pressed="true"] .bx::after,.hwi[aria-pressed="true"] .bx::after{content:"";position:absolute;left:7px;top:3px;width:6px;height:11px;border:solid var(--accent-ink);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.bd{flex:1;min-width:0;display:flex;flex-direction:column}
.ttl{font-weight:700;overflow-wrap:anywhere}
.sub{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.dur{flex:none;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.tk[aria-pressed="true"] .ttl,.hwi[aria-pressed="true"] .it{text-decoration:line-through;color:var(--muted)}
.tk[aria-pressed="true"]{background:var(--bg)}
.hwc{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.hwh{display:flex;justify-content:space-between;gap:10px;padding:10px 14px;font-weight:700}
.hwh span:last-child{font-weight:400;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.hwe{padding:2px 14px 12px;font-size:13.5px;color:var(--muted)}
.hwl{display:flex;align-items:stretch;border-top:1px solid var(--line)}
.hwi{flex:1;min-width:0;display:flex;gap:10px;align-items:center;text-align:left;background:transparent;border:0;padding:10px 6px 10px 14px;min-height:52px}
.hwi .it{flex:1;min-width:0;overflow-wrap:anywhere}
.hwi .mn{flex:none;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.pill{flex:none;font-size:12px;font-weight:700;padding:1px 8px;border-radius:99px}
.pill[data-s="语文"]{background:var(--sy-bg);color:var(--sy-ink)}
.pill[data-s="数学"]{background:var(--sh-bg);color:var(--sh-ink)}
.pill[data-s="英语"]{background:var(--se-bg);color:var(--se-ink)}
.pill[data-s="科学"]{background:var(--sk-bg);color:var(--sk-ink)}
.pill[data-s="其他"]{background:var(--so-bg);color:var(--so-ink)}
.del{flex:none;width:44px;border:0;background:transparent;color:var(--muted);font-size:18px}
.now .tk,.now.hwc,.now .restc{box-shadow:0 0 0 3px var(--accent-soft);border-color:var(--accent)}
.nowtag{font-size:11px;font-weight:700;color:var(--accent);margin-left:6px}
.sleep{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;border-radius:14px;background:var(--ink);color:var(--bg)}
.sleep b{font-family:var(--f-disp);font-size:18px}
.sleep span{font-size:13px;opacity:.85;font-variant-numeric:tabular-nums}

details.card summary{cursor:pointer;font-weight:700;min-height:28px}
details.card[open] summary{margin-bottom:8px}
.set-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));gap:10px}
.why{margin:0;padding-left:1.1em;font-size:14px;color:var(--muted);display:flex;flex-direction:column;gap:4px}

.acct{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);min-width:0}
.acct img{width:28px;height:28px;border-radius:50%;flex:none}
.acct b{color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:8em}
.tag{flex:none;font-size:11.5px;font-weight:700;padding:1px 8px;border-radius:99px;background:var(--accent-soft);color:var(--accent)}
.mem{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.mem li{display:flex;align-items:center;gap:10px;min-width:0}
.mem img{width:32px;height:32px;border-radius:50%;flex:none}
.mem .n{flex:1;min-width:0;overflow-wrap:anywhere}
button,.cell,.tk,.hwi{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
input:disabled,select:disabled{opacity:.6}
.plan{display:flex;flex-direction:column;gap:14px}
.auth{margin-top:6vh}
.auth header{margin-bottom:4px}
.auth form{margin-top:6px}
.seg.full{display:flex}
.seg.full button{flex:1}
.btn.block{display:block;width:100%;margin-top:16px}
.banner.err{margin:12px 0 0}
.banner.err:empty{display:none}
.childrow{display:flex;align-items:center;gap:10px}
.childrow label{font-size:14px;color:var(--muted);white-space:nowrap}
.childrow select{flex:1;min-width:0}
.inline{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.actions{margin-top:10px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:20px;letter-spacing:.12em;font-weight:700;padding:6px 12px;border-radius:10px;background:var(--bg);border:1px solid var(--line)}
.sub-h{margin:18px 0 0;font-size:15px}
.mem .un{color:var(--muted);font-size:13px}
.toast{position:fixed;left:16px;right:16px;bottom:calc(16px + env(safe-area-inset-bottom,0px));max-width:480px;margin-inline:auto;background:var(--ink);color:var(--bg);padding:11px 16px;border-radius:12px;font-size:14px;z-index:5}
.toast[hidden]{display:none}

@media (max-width:520px){
  h1{font-size:24px}
  .add-row{grid-template-columns:minmax(0,1fr) 6.4rem}
  .add-row #hwTitle{grid-column:1 / -1;order:3}
  .add-row .btn{order:4;grid-column:1 / -1}
  .row{grid-template-columns:2.9rem minmax(0,1fr);gap:8px}
  .nav{width:24px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* 家长标签、已录入作业列表、孩子端精简 */
.ptabs{position:sticky;top:env(safe-area-inset-top,0px);z-index:3}
.ptabs button{min-height:40px}
.card .moderow{color:var(--ink)}
.hwrow{display:flex;align-items:center;gap:10px;padding:6px 0;border-top:1px solid var(--line)}
.hwrow:first-child{border-top:0}
.hwrow .it{flex:1;min-width:0;overflow-wrap:anywhere}
.hwrow .mn{flex:none;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.date .linkbtn{padding:0 4px;margin-left:6px}

/* 孩子端：现在该做什么、做不完、折叠已过去的 */
.nowcard{background:var(--surface);border:2px solid var(--accent);border-radius:16px;padding:14px 16px;display:flex;flex-direction:column;gap:6px;box-shadow:0 0 0 4px var(--accent-soft)}
.nowcard.empty{display:none}
.nc-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.nc-tag{font-size:12px;font-weight:700;padding:1px 9px;border-radius:99px;background:var(--accent);color:var(--accent-ink)}
.nc-t{font-family:var(--f-disp);font-size:22px;font-weight:700;line-height:1.25;overflow-wrap:anywhere}
.nc-s{font-size:14px;color:var(--muted)}
.nc-n{font-size:13px;color:var(--muted);border-top:1px dashed var(--line);padding-top:6px;margin-top:2px}
.nc-btn{margin-top:4px;min-height:52px;border:0;border-radius:12px;background:var(--accent);color:var(--accent-ink);font-size:18px;font-weight:700}
.nc-btn.done{background:var(--rest-bg);color:var(--rest-ink);border:1px solid var(--rest-line);font-size:15px}
.nc-hw{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.nc-hw .hwi{border-top:1px solid var(--line);padding-right:12px}
.nc-hw .hwi:first-child{border-top:0}
.hwi[aria-pressed="true"] .it{text-decoration:line-through;color:var(--muted)}
.stuckbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:14px;color:var(--muted)}
.stuckbar .btn{min-height:40px;font-size:14px;color:var(--warn);border-color:var(--warn);background:var(--warn-soft)}
.pastbar{text-align:center}

/* 固定安排 */
.fixc{border:1px solid var(--accent);background:var(--accent-soft);color:var(--ink);border-radius:12px;padding:9px 12px;font-size:14px;display:flex;flex-wrap:wrap;gap:2px 10px;align-items:baseline}
.fixc b{font-weight:700}
.fixc em{font-style:normal;color:var(--muted);font-size:13px}
.banner.stuck{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center}

/* 批量录入、常用作业、编辑 */
textarea#batchText{font-size:15px;line-height:1.5}
.prev{margin-top:10px;border:1px solid var(--line);border-radius:10px;padding:2px 10px;background:var(--bg)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{border:1px solid var(--line);background:var(--bg);border-radius:99px;padding:7px 14px;min-height:38px;font-size:14px}
.chip:active{background:var(--accent-soft)}
.hwrow .linklike{border:0;background:transparent;text-align:left;padding:6px 0;min-height:36px;overflow-wrap:anywhere}
.hwrow.edit{display:block}
.e-grid{display:grid;grid-template-columns:5.2rem minmax(0,1fr) 4.6rem;gap:8px;width:100%}
.e-grid .btn{grid-column:auto}
.e-grid .btn:nth-of-type(1){grid-column:1 / 3}
.days{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.daychk{display:inline-flex}
.daychk input{position:absolute;opacity:0;width:1px;height:1px}
.daychk span{border:1px solid var(--line);background:var(--bg);border-radius:99px;padding:6px 12px;min-height:36px;font-size:14px;display:inline-flex;align-items:center}
.daychk input:checked + span{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:700}
.daychk input:focus-visible + span{outline:2px solid var(--accent);outline-offset:2px}
input[type=time],input[type=number]{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:9px 11px;min-height:42px}
.moderow .btn{min-height:38px;padding:6px 12px;font-size:14px}
details.card summary{min-height:32px;display:flex;align-items:center}
