:root{
  --ink:#1b1b1b; --accent:#1E3A5F; --accent2:#B5563C;
  --soft:#f6f3ee; --edge:#d3cdc3; --bg:#faf8f4; --mut:#6e6a63;
  --green:#4a7a5c; --amber:#be8a3c;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%}
body{
  background:var(--bg); color:var(--ink);
  font:16px/1.55 -apple-system,"PingFang SC","Noto Sans CJK SC","Microsoft YaHei",sans-serif;
  padding-bottom:calc(64px + env(safe-area-inset-bottom));
}
#app{max-width:520px;margin:0 auto;padding:0 18px}
.hidden{display:none !important}

/* 顶部 */
.top{padding:calc(18px + env(safe-area-inset-top)) 0 6px}
.top .row{display:flex;align-items:baseline;justify-content:space-between}
.top h1{margin:0;font-size:26px;letter-spacing:.5px}
.date{font-size:13px;color:var(--mut)}
.sub{margin:2px 0 0;font-size:13px;color:var(--mut)}
.top.compact{display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--mut)}
.ghost{background:none;border:0;font:inherit;color:var(--mut);padding:6px 0}
.ghost-slot{width:44px}

/* 摘要 */
.summary{margin:14px 0 10px;background:#fff;border:1px solid var(--edge);border-radius:14px;padding:14px 16px}
.sum-main{display:flex;align-items:baseline;gap:10px}
.sum-main strong{font-size:26px;color:var(--accent)}
.sum-main span{font-size:13px;color:var(--mut)}
.bar{height:8px;background:var(--edge);border-radius:6px;margin:10px 0 6px;overflow:hidden}
.bar i{display:block;height:100%;width:0;background:var(--accent);border-radius:6px;transition:width .3s}
.hint{margin:0;font-size:12px;color:var(--mut)}

/* 三类任务 */
.buckets{display:flex;flex-direction:column;gap:10px;margin:6px 0 14px}
.bucket{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--edge);
        border-radius:12px;padding:12px 14px;text-align:left;width:100%;font:inherit;color:inherit}
.bucket.empty-row{padding:8px 14px}
.bucket.empty-row .dot{height:18px}
.bucket .dot{width:6px;height:36px;border-radius:3px;flex:0 0 6px}
.bucket .txt{flex:1}
.bucket .t{display:block;font-weight:600;font-size:15px}
.bucket .d{display:block;font-size:12.5px;color:var(--mut);margin-top:2px}
.bucket .n{font-size:13px;color:var(--accent)}
.bucket[disabled]{opacity:.45}

/* 主按钮 */
.cta{width:100%;border:0;border-radius:14px;background:var(--accent);color:#fff;
     font:600 17px/1 inherit;padding:16px;margin:4px 0 16px}
.cta:disabled{background:#9aa7b5}

/* 统计 */
.panel{background:#fff;border:1px solid var(--edge);border-radius:14px;padding:14px 16px}
.panel-title{margin:0 0 10px;font-size:12px;letter-spacing:1px;color:var(--mut)}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px 8px}
.stats div{font-size:12px;color:var(--mut)}
.stats b{display:block;font-size:19px;color:var(--ink);font-weight:600}
.foot{font-size:11.5px;color:var(--mut);text-align:center;margin:14px 0 0}

/* 卡片视图 */
.progress{height:3px;background:var(--edge);border-radius:2px;margin:8px 0 14px}
.progress i{display:block;height:100%;background:var(--accent);border-radius:2px;width:0}
.card{background:#fff;border:1px solid var(--edge);border-radius:18px;padding:20px 18px;min-height:38vh}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.chip{font-size:11px;color:var(--mut);border:1px solid var(--edge);border-radius:6px;padding:2px 7px;background:var(--bg)}
.chip.src{color:var(--accent);border-color:#c9d3e0;background:#f2f5f9}
.chip.mode-new{color:#a85f00;border-color:#eccfa8;background:#fdf3e4;font-weight:600}
.chip.mode-rev{color:var(--accent);border-color:#c9d3e0;background:#eef2f7}

/* 学习模式：原文展开 */
.detail{margin-top:4px}
.ctx{max-height:44vh;overflow:auto;background:var(--soft);border:1px solid var(--edge);
     border-radius:10px;padding:12px 13px;font-size:13.5px;line-height:1.8;color:var(--mut)}
.ctx-p{margin:0 0 12px}
.ctx-p:last-child{margin-bottom:0}
.ctx-p.ctx-hl{color:#1f1d1a;background:#fff7e6;border-radius:6px;padding:6px 8px;margin-left:-8px;margin-right:-8px}
.ctx-ref{display:block;font-size:10.5px;letter-spacing:.5px;color:var(--mut);opacity:.75;margin-bottom:2px}
.card h2{margin:6px 0 0;font-size:20px;line-height:1.5}
.tap-hint{margin:22px 0 0;font-size:13px;color:var(--mut)}
.divider{height:1px;background:var(--edge);margin:18px 0 12px}
.label{margin:0 0 6px;font-size:11px;letter-spacing:1px;color:var(--mut)}
.back{margin:0;font-size:16.5px;line-height:1.65}
blockquote{margin:14px 0 0;padding:10px 12px;background:var(--soft);
           border-left:3px solid var(--accent2);border-radius:0 8px 8px 0;
           font-size:13.5px;line-height:1.6;color:#4a463f}
.rel{margin:14px 0 0;display:flex;flex-wrap:wrap;gap:6px}
.relchip{font-size:11.5px;color:var(--accent);background:#eef2f7;border-radius:6px;padding:2px 8px}
.relchip.mut{color:var(--mut);background:var(--soft)}

/* 三键 */
.keys{position:fixed;left:0;right:0;bottom:calc(10px + env(safe-area-inset-bottom));
      display:grid;grid-template-columns:repeat(3,1fr);gap:10px;
      max-width:520px;margin:0 auto;padding:0 18px}
body.studying .tabs{display:none}
body.studying{padding-bottom:120px}
.k{border:1px solid var(--edge);background:#fff;border-radius:12px;padding:15px 0;
   font:600 16px/1 inherit;color:var(--mut)}
.k3{background:var(--accent);border-color:var(--accent);color:#fff}
.k:active{transform:scale(.97)}
.k:disabled{opacity:.45}
.keys.two{grid-template-columns:1fr 1fr}

/* 结束/占位 */
.done{padding:80px 8px;text-align:center}
.done h1{font-size:22px;margin:0 0 10px}
.done p{color:var(--mut);font-size:14px;line-height:1.7}
.soon{max-width:300px;margin:0 auto}

/* tab */
.tabs{position:fixed;left:0;right:0;bottom:0;display:flex;background:rgba(250,248,244,.96);
      border-top:1px solid var(--edge);backdrop-filter:blur(8px);
      padding-bottom:env(safe-area-inset-bottom)}
.tabs button{flex:1;border:0;background:none;padding:12px 0 10px;font:13px/1 inherit;color:var(--mut)}
.tabs button.on{color:var(--accent);font-weight:600}

/* ---------- 路径 ---------- */
.layer{margin:0 0 14px}
.layer-h{font:600 11px/1 inherit;letter-spacing:1px;color:var(--mut);margin:0 0 8px 2px}
.nodes{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.node{display:flex;flex-direction:column;gap:3px;text-align:left;
      border:1px solid var(--edge);border-radius:10px;background:#fff;
      padding:10px 12px;font:inherit;color:inherit}
.node .nt{font-size:14px;font-weight:600;line-height:1.35}
.node .nd{font-size:11px;color:var(--mut)}
.node.s-ok{border-color:#bcd3c4;background:#f4f9f5}
.node.s-warn{border-color:#e5d3ae;background:#fdf9f0}
.node.s-lock{opacity:.55}
.node.s-new{border-color:#c9d3e0;background:#f7f9fc}
.empty{color:var(--mut);font-size:14px;line-height:1.8;padding:40px 8px;text-align:center}
.note{color:var(--accent2);font-size:12.5px;margin:10px 2px}

/* ---------- 待确认 ---------- */
.pcard{background:#fff;border:1px solid var(--edge);border-radius:12px;padding:14px;margin:0 0 12px}
.ptag{margin:0 0 6px;font-size:11px;letter-spacing:.5px;color:var(--accent2)}
.ptitle{margin:0 0 8px;font-size:15px;line-height:1.5}
.pquote{margin:0 0 10px;font-size:12.5px;color:var(--mut);line-height:1.6;
        border-left:2px solid var(--edge);padding-left:8px}
.prow{display:flex;gap:10px}
.mini{border:1px solid var(--edge);background:#fff;border-radius:8px;
      padding:8px 18px;font:600 13px/1 inherit;color:var(--mut)}
.mini.ok{background:var(--accent);border-color:var(--accent);color:#fff}

/* ---------- 材料 ---------- */
.upload{display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center;
        border:1.5px dashed var(--edge);border-radius:14px;background:#fff;
        padding:26px 16px;margin:0 0 16px;text-align:center}
.up-t{font-size:15px;font-weight:600;color:var(--accent)}
.up-s{font-size:12px;color:var(--mut)}
.mat{background:#fff;border:1px solid var(--edge);border-radius:12px;padding:12px 14px;margin:0 0 10px}
.mname{margin:0 0 4px;font-size:14px;font-weight:600;word-break:break-all}
.mmeta{margin:0;font-size:12px;color:var(--mut)}

/* ---------- 提示条 ---------- */
.flash{position:fixed;left:50%;bottom:132px;transform:translateX(-50%);
       background:rgba(27,27,27,.86);color:#fff;font-size:13px;
       padding:9px 16px;border-radius:20px;z-index:99;white-space:nowrap}

.badge{display:inline-block;font-size:11px;padding:1px 6px;border-radius:5px;margin-right:4px}
.b-new{background:#eef2f7;color:var(--accent)}
.b-run{background:#fdf4e3;color:#8a6420}
.b-ok{background:#eaf4ee;color:var(--green)}
.merr{margin:6px 0 0;font-size:11.5px;color:var(--accent2);line-height:1.5}

/* ---------- 待确认分组 ---------- */
.pgroup{background:#fff;border:1px solid var(--edge);border-radius:14px;padding:14px;margin:0 0 14px}
.phead{display:flex;gap:12px;align-items:flex-start}
.pcount{font-size:22px;font-weight:700;color:var(--accent);min-width:2.4em;line-height:1.1}
.phint{margin:2px 0 0;font-size:12px;color:var(--mut);line-height:1.5}
.pgroup .prow{margin-top:10px}
.linkbtn{margin-top:10px;background:none;border:0;padding:0;font:13px/1.4 inherit;color:var(--accent);text-align:left}
.plist{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.pitem{background:var(--bg);border-radius:10px;padding:10px 12px}
.ptxt{margin:4px 0;font-size:13.5px;line-height:1.5}
.arrow{color:var(--mut)}
.pitem .pquote{margin:6px 0 8px;font-size:12px;line-height:1.5}

.upload-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}
.upload-row .upload{margin:0;padding:20px 10px}
.up-ico{font-size:22px;line-height:1}
.upload.cam{border-color:#d8b8a8;background:#fdf7f4}

.filterbar{display:flex;gap:8px;margin:0 0 12px}
.chipbtn{border:1px solid var(--edge);background:#fff;border-radius:14px;
         padding:6px 12px;font:12.5px/1 inherit;color:var(--mut)}
.chipbtn.on{background:var(--accent);border-color:var(--accent);color:#fff}

.server-row{display:flex;justify-content:space-between;align-items:center;gap:10px;
  background:#fff;border:1px solid var(--edge);border-radius:10px;padding:10px 12px;
  margin:0 0 12px;font-size:12.5px;color:var(--mut);word-break:break-all}
.server-row b{color:var(--ink);font-weight:600}

/* ---------- 登录 ---------- */
#view-auth{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.auth{width:100%;max-width:340px}
.auth h1{margin:0 0 6px;font-size:26px}
.auth-sub{margin:0 0 20px;font-size:13px;color:var(--mut)}
.inp{width:100%;box-sizing:border-box;border:1px solid var(--edge);border-radius:10px;
     background:#fff;padding:12px 14px;font:15px/1.4 inherit;margin:0 0 10px;color:var(--ink)}
.inp:focus{outline:none;border-color:var(--accent)}
.auth-msg{min-height:20px;margin:10px 0 0;font-size:12.5px;color:var(--accent2);line-height:1.5}
#app.hidden{display:none}
