/* 研究生个人工作台 · 简约学术风样式 */
:root{
  --paper:#f7f5f0;
  --card:#ffffff;
  --ink:#2b2b2b;
  --ink-soft:#6b6b6b;
  --ink-faint:#9a9a93;
  --line:#e6e2d8;
  --accent:#3f6f8f;       /* 学术蓝绿 */
  --accent-soft:#e8f0f4;
  --coral:#c0654f;        /* 警示/强调 */
  --amber:#d98a3d;        /* 临近DDL */
  --green:#5a8a5a;
  --radius:14px;
  --shadow:0 1px 3px rgba(0,0,0,.06),0 6px 18px rgba(0,0,0,.05);
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
html,body{height:100%;}
body{
  font-family:"Noto Sans SC",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  background:var(--paper); color:var(--ink);
  -webkit-font-smoothing:antialiased;
  line-height:1.55;
  display:flex; flex-direction:column; height:100vh; overflow:hidden;
}
h1,h2,h3{font-family:"Noto Serif SC",Georgia,serif; font-weight:600;}

/* ---------- 顶部 ---------- */
.app-header{
  text-align:center; padding:14px 16px 10px; flex:0 0 auto;
  background:linear-gradient(180deg,#fbfaf6,#f7f5f0);
  border-bottom:1px solid var(--line);
  transition:opacity .25s, padding .25s, height .25s;
}
.app-header h1{margin:0; font-size:20px; letter-spacing:1px; color:#34332e;}
.app-header .subtitle{margin:3px 0 0; font-size:12px; color:var(--ink-faint);}
body.cover-mode .app-header{opacity:0; height:0; padding:0; border:none; pointer-events:none;}

/* ---------- 可翻页的书 ---------- */
#book{
  flex:1 1 auto; display:flex; overflow-x:auto; overflow-y:hidden;
  scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
}
#book::-webkit-scrollbar{display:none;}
.page{
  flex:0 0 100%; width:100%; scroll-snap-align:start;
  overflow-y:auto; overflow-x:hidden;
  padding:16px 14px 24px;
}
.page > *{max-width:760px; margin-left:auto; margin-right:auto;}
.chap-title{font-size:18px; margin:4px 2px 12px; color:#3a3933;}

/* ---------- 章节卡片块 ---------- */
.ov-block{background:var(--card); border:1px solid var(--line); border-radius:var(--radius);
  padding:14px 14px 16px; margin:12px auto; box-shadow:var(--shadow);}
.ov-block h3{margin:0 0 10px; font-size:15px; color:#3a3933;}
.empty{color:var(--ink-faint); font-size:13px; padding:8px 2px;}

/* ---------- 课程迷你卡 ---------- */
.course-mini{display:flex; flex-direction:column; gap:8px;}
.cm{background:var(--accent-soft); border-radius:10px; padding:8px 10px;}
.cm-name{font-weight:600; font-size:14px; color:#2c4a5a;}
.cm-meta{font-size:12px; color:var(--ink-soft); margin-top:2px;}

/* ---------- 天气（紧凑卡 + 详情弹窗） ---------- */
.weather-compact{cursor:pointer; margin:6px 0;}
.wx-pill{display:inline-flex; align-items:center; gap:8px; background:var(--accent-soft);
  border:1px solid #d4e2ea; border-radius:999px; padding:8px 14px; font-size:13.5px; color:#274a5c; max-width:100%;}
.wx-ico{font-size:18px;}
.wx-city{font-weight:600;}
.wx-t{color:var(--ink-soft);}
.wx-go{margin-left:4px; color:var(--accent); font-size:12px;}

.wx-modal{position:fixed; inset:0; z-index:90; display:flex; align-items:flex-end; justify-content:center;}
.wx-modal[hidden]{display:none;}
.wx-mask{position:absolute; inset:0; background:rgba(30,28,24,.45);}
.wx-card{position:relative; width:100%; max-width:560px; background:var(--paper);
  border-radius:20px 20px 0 0; padding:18px 16px calc(20px + env(safe-area-inset-bottom));
  box-shadow:0 -6px 30px rgba(0,0,0,.22); transform:translateY(100%); transition:transform .28s ease;}
.wx-modal.on .wx-card{transform:translateY(0);}
.wx-head{display:flex; align-items:center; justify-content:space-between; margin-bottom:10px;}
.wxm-city{font-size:14px; font-weight:600; color:#2c4a5a;}
.wxm-close{border:none; background:#fff; width:30px; height:30px; border-radius:50%; font-size:18px; cursor:pointer; color:var(--ink-soft);}
.wxm-big{display:flex; align-items:center; gap:12px; margin:4px 0;}
.wxm-ico{font-size:40px; line-height:1;}
.wxm-temp{font-size:40px; font-weight:600; color:#2b2b2b;}
.wxm-sub{font-size:14px; color:var(--ink-soft); margin-bottom:12px;}
.wxm-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:8px;}
.wxm-cell{background:#fff; border:1px solid var(--line); border-radius:10px; padding:8px;}
.wxm-ck{font-size:11px; color:var(--ink-faint);}
.wxm-cv{font-size:13.5px; font-weight:500; color:var(--ink); margin-top:2px;}
.wxm-week{margin-top:14px;}
.wxm-week-h{font-size:13px; color:var(--ink-soft); margin-bottom:6px;}
.wxm-days{display:grid; grid-template-columns:repeat(7,1fr); gap:4px;}
.wxm-day{background:#fff; border:1px solid var(--line); border-radius:10px; padding:6px 2px; text-align:center;}
.wd-name{font-size:11px; color:var(--ink-faint);}
.wd-ico{font-size:18px; line-height:1.2;}
.wd-t{font-size:12px; font-weight:600;}
.wd-b{font-size:11px; color:var(--ink-soft);}
.wd-pop{font-size:10px; color:var(--accent);}
.wxm-y{margin-top:12px; font-size:13px; color:var(--ink-soft);}
.wxm-y-h,.wxm-tips-h{font-size:13px; color:var(--ink-soft); margin-bottom:4px;}
.wxm-tips{margin-top:12px;}
.wxm-tips-l{margin:0; padding-left:18px; font-size:13px; color:var(--ink);}
.wxm-tips-l li{margin:3px 0;}
.wx-foot{display:flex; gap:8px; margin-top:16px;}
.wx-btn{flex:1; background:#fff; border:1px solid var(--accent); color:var(--accent);
  border-radius:10px; padding:9px 4px; font-size:12.5px; cursor:pointer; font-family:inherit;}

/* ---------- 日历 ---------- */
.cal{display:grid; grid-template-columns:repeat(7,1fr); gap:4px; margin-top:6px;}
.cal-h{text-align:center; font-size:11px; color:var(--ink-faint); padding:2px 0;}
.cal-cell{position:relative; min-height:46px; border:1px solid var(--line); border-radius:8px;
  background:#fcfbf8; padding:3px 4px; display:flex; flex-direction:column; gap:2px; align-items:flex-start; flex-wrap:wrap;}
.cal-cell.empty{background:transparent; border:none;}
.cal-d{font-size:12px; color:var(--ink-soft);}
.cal-cell.today{background:var(--accent-soft); border-color:var(--accent);}
.cal-dot{display:inline-block; width:7px; height:7px; border-radius:50%;}
.cal-dot.course{background:var(--accent);}
.cal-dot.ddl{background:var(--coral); color:#fff; font-size:9px; width:auto; height:auto; padding:0 4px; border-radius:6px;}
.cal-tag{font-size:9.5px; line-height:1.3; padding:1px 4px; border-radius:6px; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.cal-tag.term{background:#eaf3ea; color:#4a7a4a;}
.cal-tag.holi{background:#fbeae6; color:var(--coral);}

/* ---------- 汇总 ---------- */
.sum-grid{display:flex; gap:8px; flex-wrap:wrap;}
.sum{background:var(--accent-soft); color:#274a5c; border-radius:10px; padding:8px 12px; font-size:13px; font-weight:500;}

/* ---------- 列表 / 卡片 ---------- */
.elist{margin:10px auto;}
.elist-head{display:flex; align-items:center; justify-content:space-between; margin:6px 2px 8px;}
.elist-head h3{font-size:16px; margin:0;}
.cards{display:flex; flex-direction:column; gap:10px;}
.card{background:var(--card); border:1px solid var(--line); border-radius:var(--radius);
  padding:12px; box-shadow:var(--shadow); position:relative; cursor:pointer; display:flex; gap:10px; align-items:flex-start;}
.card.done{opacity:.6;}
.card.done .lv{text-decoration:line-through;}
.card-body{flex:1; min-width:0;}
.ln{display:flex; gap:8px; font-size:13.5px; padding:2px 0;}
.ln .lk{color:var(--ink-faint); flex:0 0 64px; font-size:12px;}
.ln .lv{flex:1; color:var(--ink); word-break:break-word;}
.done-cb{width:18px; height:18px; margin-top:3px; flex:0 0 auto; accent-color:var(--green);}
.warn{font-size:12px; color:var(--amber); margin-top:4px;}

/* DDL 卡片状态色 */
.card.ddl.soon{border-left:4px solid var(--amber);}
.card.ddl.overdue{border-left:4px solid var(--ink-faint); opacity:.75;}
.card.ddl.overdue .lv{color:var(--ink-faint);}
.card.course{border-left:4px solid var(--accent);}

/* ---------- 按钮 ---------- */
.add-btn{background:var(--accent); color:#fff; border:none; border-radius:10px;
  padding:7px 12px; font-size:13px; cursor:pointer; font-family:inherit;}
.add-btn.ghost{background:#fff; color:var(--accent); border:1px solid var(--accent);}
.btn-row{display:flex; gap:8px;}
.btn-primary{background:var(--accent); color:#fff; border:none; border-radius:10px; padding:9px 18px; font-size:14px; cursor:pointer; font-family:inherit;}
.btn-ghost{background:#fff; color:var(--ink-soft); border:1px solid var(--line); border-radius:10px; padding:9px 18px; font-size:14px; cursor:pointer; font-family:inherit;}

/* ---------- 表单弹窗 ---------- */
.overlay{position:fixed; inset:0; background:rgba(30,28,24,.42); display:none; align-items:flex-end; justify-content:center; z-index:60;}
.overlay.open{display:flex;}
.modal{background:var(--paper); width:100%; max-width:560px; max-height:90vh; overflow:auto;
  border-radius:18px 18px 0 0; padding:18px 16px 20px; box-shadow:0 -4px 24px rgba(0,0,0,.18);}
.modal h2{margin:0 0 12px; font-size:17px;}
.modal-body{display:flex; flex-direction:column; gap:10px;}
.fld{display:flex; flex-direction:column; gap:4px;}
.fld.full{margin-top:2px;}
.fld label{font-size:12.5px; color:var(--ink-soft);}
.fld input,.fld select,.fld textarea{font-family:inherit; font-size:14px; padding:9px 10px;
  border:1px solid var(--line); border-radius:10px; background:#fff; color:var(--ink); width:100%;}
.fld textarea{resize:vertical; line-height:1.5;}
.checks{display:flex; flex-wrap:wrap; gap:10px;}
.chip{display:inline-flex; align-items:center; gap:4px; font-size:13px; color:var(--ink-soft);}
.two-col{display:grid; grid-template-columns:1fr 1fr; gap:10px;}
.nested{margin-top:4px; border-top:1px dashed var(--line); padding-top:8px;}
.nested-list{display:flex; flex-direction:column; gap:6px; margin-bottom:6px;}
.nested-item{display:flex; align-items:center; gap:8px; background:#fcfbf8; border:1px solid var(--line); border-radius:8px; padding:6px 8px; font-size:13px;}
.nested-item span{flex:1;}
.mini{background:#fff; border:1px solid var(--line); border-radius:8px; padding:4px 10px; font-size:12px; cursor:pointer; font-family:inherit; color:var(--ink-soft);}
.mini.add{border-color:var(--accent); color:var(--accent); margin-top:2px;}
.mini.danger{color:var(--coral); border-color:#eccfc6;}
.modal-actions{display:flex; justify-content:flex-end; gap:10px; margin-top:16px;}

/* ---------- 操作面板（长按） ---------- */
.overlay.sheet{align-items:flex-end;}
.sheet-box{background:var(--paper); width:100%; max-width:560px; border-radius:18px 18px 0 0; padding:10px; box-shadow:0 -4px 24px rgba(0,0,0,.2);}
.sheet-btn{display:block; width:100%; text-align:center; padding:14px; font-size:15px; background:#fff;
  border:none; border-bottom:1px solid var(--line); cursor:pointer; font-family:inherit; color:var(--ink);}
.sheet-btn:last-child{border-bottom:none; border-radius:0 0 12px 12px;}
.sheet-btn.accent{color:var(--accent); font-weight:600;}
.sheet-btn.danger{color:var(--coral);}
.sheet-btn.cancel{color:var(--ink-faint); margin-top:6px; border-radius:12px;}

/* ---------- 底部翻页条 ---------- */
.pager{position:fixed; left:0; right:0; bottom:0; z-index:45;
  display:flex; align-items:center; gap:10px; padding:8px 14px calc(8px + env(safe-area-inset-bottom));
  background:rgba(255,255,255,.96); backdrop-filter:blur(8px); border-top:1px solid var(--line);}
.pg-arrow{background:#fff; border:1px solid var(--line); border-radius:50%; width:34px; height:34px;
  font-size:20px; line-height:1; cursor:pointer; color:var(--ink-soft); flex:0 0 auto;}
.pg-arrow:disabled{opacity:.35; cursor:default;}
.pg-mid{flex:1; text-align:center;}
.pg-name{font-size:14px; font-weight:600; color:var(--accent); font-family:"Noto Serif SC",serif;}
.pg-dots{display:flex; justify-content:center; gap:6px; margin-top:5px;}
.dot{width:7px; height:7px; border-radius:50%; background:var(--line); cursor:pointer;}
.dot.on{background:var(--accent); width:18px; border-radius:4px;}

/* ---------- 封面 ---------- */
.page-cover{background:linear-gradient(160deg,#fbfaf6 0%,#eef3f6 100%);}
.cover-inner{max-width:520px; margin:0 auto; min-height:100%; display:flex; flex-direction:column;
  justify-content:center; align-items:center; text-align:center; padding:40px 16px;}
.cover-title{font-size:30px; letter-spacing:3px; color:#34332e; margin:0 0 8px;}
.cover-sub{font-size:13px; color:var(--ink-faint); margin:0 0 28px;}
.cover-weather{margin:10px 0 30px;}
.cover-actions{display:flex; gap:12px;}
.cover-btn{background:var(--accent); color:#fff; border:none; border-radius:12px; padding:11px 22px; font-size:14px; cursor:pointer; font-family:inherit; box-shadow:var(--shadow);}
.cover-btn.ghost{background:#fff; color:var(--accent); border:1px solid var(--accent); box-shadow:none;}
.cover-hint{margin-top:34px; font-size:12px; color:var(--ink-faint);}

/* ---------- 目录抽屉 ---------- */
.toc-mask{position:fixed; inset:0; background:rgba(30,28,24,.4); z-index:70; display:none; opacity:0; transition:opacity .25s;}
.toc-mask.open{display:block; opacity:1;}
.toc-drawer{position:fixed; top:0; left:0; bottom:0; width:78%; max-width:320px; background:var(--paper);
  z-index:71; transform:translateX(-100%); transition:transform .28s ease; box-shadow:4px 0 24px rgba(0,0,0,.16);
  display:flex; flex-direction:column;}
.toc-drawer.open{transform:translateX(0);}
.toc-head{display:flex; align-items:center; justify-content:space-between; padding:18px 18px 10px; border-bottom:1px solid var(--line);}
.toc-head span{font-family:"Noto Serif SC",serif; font-size:18px; font-weight:600; color:#34332e;}
.toc-close{border:none; background:none; font-size:24px; cursor:pointer; color:var(--ink-faint);}
.toc-list{flex:1; overflow-y:auto; padding:8px 12px;}
.toc-item{display:flex; align-items:center; gap:12px; width:100%; text-align:left; background:none; border:none;
  padding:15px 12px; border-radius:12px; cursor:pointer; font-family:inherit; font-size:16px; color:var(--ink);}
.toc-item .toc-ico{font-size:20px;}
.toc-item.cur{background:var(--accent-soft); color:var(--accent); font-weight:600;}
.toc-foot{padding:12px 18px; font-size:11.5px; color:var(--ink-faint); border-top:1px solid var(--line);}

/* ---------- 操作日志 / 说明 / 更新日志 ---------- */
.log-list{display:flex; flex-direction:column; gap:6px; margin:8px 0;}
.log-item{display:flex; align-items:center; gap:8px; background:#fcfbf8; border:1px solid var(--line); border-radius:8px; padding:7px 9px; font-size:12.5px;}
.log-tag{flex:0 0 auto; font-size:11px; padding:1px 7px; border-radius:6px; color:#fff;}
.log-tag.add{background:var(--green);}
.log-tag.edit{background:var(--accent);}
.log-tag.del{background:var(--coral);}
.log-sum{flex:1; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.log-time{flex:0 0 auto; color:var(--ink-faint); font-size:11px;}
.doc-body{font-size:13px; color:var(--ink); line-height:1.7;}
.doc-body p{margin:0 0 8px;}
.changelog{display:flex; flex-direction:column; gap:8px;}
.cl{background:#fcfbf8; border:1px solid var(--line); border-radius:10px; padding:10px 12px; font-size:12.5px; color:var(--ink-soft); line-height:1.6;}
.cl b{color:var(--accent); font-family:"Noto Serif SC",serif;}

/* ---------- 浮动刷新 ---------- */
.float-refresh{position:fixed; right:14px; bottom:64px; z-index:46; width:44px; height:44px; border-radius:50%;
  border:none; background:var(--accent); color:#fff; font-size:18px; cursor:pointer; box-shadow:var(--shadow); display:none;}

/* ---------- 轻提示 ---------- */
.toast{position:fixed; left:50%; bottom:90px; transform:translateX(-50%) translateY(10px);
  background:rgba(43,43,43,.92); color:#fff; padding:9px 18px; border-radius:20px; font-size:13px;
  opacity:0; pointer-events:none; transition:.2s; z-index:95;}
.toast.show{opacity:1; transform:translateX(-50%) translateY(0);}

.hint{font-size:12px; color:var(--ink-faint); margin:2px 0 6px;}
@media (max-width:480px){
  .two-col{grid-template-columns:1fr;}
  .ln .lk{flex-basis:56px;}
  .wxm-grid{grid-template-columns:repeat(2,1fr);}
}
