/* 正妹的觉醒 · 样式
   浅色主题、无框架、无构建链 */

:root{
  --bg:#f7f7f5;
  --surface:#ffffff;
  --ink:#1b1b19;
  --ink-2:#5c5c58;
  --ink-3:#8e8e88;
  --line:#e5e4df;
  --accent:#b2452d;      /* 朱砂 */
  --accent-soft:#fbf0ec;
  --ok:#2f7d54;
  --warn:#b8860b;
  --radius:10px;
  --shadow:0 1px 2px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.04);
}

*{box-sizing:border-box}

/* [hidden] 必须真的能隐藏。
   坑：作者样式表里写了 display:flex 的元素，会盖掉浏览器内置的 [hidden]{display:none}
   （作者样式优先于 UA 样式，跟选择器权重无关，.modal 就是 0 权重也照样赢）。
   症状是「弹窗一进页面就挂在上面、点取消关不掉」，看起来像卡死。
   这条兜底规则是归一化写法，一次把 .modal / .rag-sources 这类隐患全堵上。 */
[hidden]{display:none !important}

html{-webkit-text-size-adjust:100%}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font:15px/1.65 -apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
}
a{color:var(--ink); text-decoration:none}
a:hover{color:var(--accent)}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:.9em;
  background:#f0efe9; padding:1px 5px; border-radius:4px}

/* ---------- 顶栏 ---------- */
.topbar{
  position:sticky; top:0; z-index:20;
  display:flex; align-items:center; gap:20px; flex-wrap:wrap;
  padding:10px 22px; background:rgba(247,247,245,.92);
  backdrop-filter:blur(12px); border-bottom:1px solid var(--line);
}
.brand{display:flex; align-items:center; gap:9px; font-weight:700; letter-spacing:.02em}
.brand-mark{
  display:grid; place-items:center; width:27px; height:27px; border-radius:7px;
  background:var(--accent); color:#fff; font-size:15px; font-weight:600;
}
.brand-mark.big{width:46px; height:46px; font-size:24px; border-radius:12px; margin:0 auto 12px}
.nav{display:flex; gap:2px; flex-wrap:wrap; margin-left:auto}
.nav-item{
  padding:6px 11px; border-radius:7px; font-size:13.5px; color:var(--ink-2);
  display:inline-flex; align-items:center; gap:5px; white-space:nowrap;
}
.nav-item:hover{background:#ecebe5; color:var(--ink)}
.nav-item.active{background:var(--ink); color:#fff}
.nav-skeleton .dot{width:5px; height:5px; border-radius:50%; background:var(--ink-3)}
.nav-quiet{color:var(--ink-3)}

/* ---------- 布局 ---------- */
.wrap{max-width:1080px; margin:0 auto; padding:30px 22px 70px}
.foot{max-width:1080px; margin:0 auto; padding:0 22px 40px;
  color:var(--ink-3); font-size:12.5px}

/* ---------- 标题 ---------- */
h1,h2,h3{line-height:1.3; margin:0 0 10px}
.h1{font-size:25px; font-weight:700; letter-spacing:-.01em}
.h2{font-size:15px; font-weight:700; color:var(--ink-2);
  text-transform:none; margin:34px 0 12px; letter-spacing:.04em}
.center{text-align:center}
.lead{color:var(--ink-2); margin:0 0 20px; max-width:66ch}
.hint{color:var(--ink-3); font-size:13px; line-height:1.6}

/* ---------- 首页 hero ---------- */
.hero{margin:6px 0 34px}
.hero h1{font-size:30px; font-weight:750; letter-spacing:-.02em; max-width:20ch}
.hero .sub{color:var(--ink-2); max-width:62ch; margin:14px 0 0}

/* ---------- 模块卡片 ---------- */
.grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(238px,1fr)); gap:12px}
.card{
  background:var(--surface); border:1px solid var(--line); border-radius:var(--radius);
  padding:15px 16px; box-shadow:var(--shadow); transition:.15s;
}
.card:hover{transform:translateY(-2px); border-color:#d5d3ca}
.card-muted{background:#fbfbf9; box-shadow:none}
.card-head{display:flex; align-items:center; gap:8px; margin-bottom:8px; flex-wrap:wrap}
.card-no{color:var(--ink-3); font-size:12px; font-variant-numeric:tabular-nums}
.card-name{font-weight:650; font-size:15px}
.card-desc{margin:0; color:var(--ink-2); font-size:13px; line-height:1.55}
.badge{font-size:11px; padding:1.5px 7px; border-radius:99px; margin-left:auto}
.badge-live{background:#e8f3ec; color:var(--ok)}
.badge-soon{background:#f3f1e8; color:var(--warn)}

.two-col{display:grid; grid-template-columns:1fr 1.25fr; gap:34px; margin-top:8px}
@media(max-width:760px){.two-col{grid-template-columns:1fr; gap:14px}}

/* ---------- 统计行 ---------- */
.stat-list{background:var(--surface); border:1px solid var(--line);
  border-radius:var(--radius); overflow:hidden}
.stat-row{display:flex; justify-content:space-between; gap:14px;
  padding:11px 15px; border-bottom:1px solid var(--line); font-size:14px}
.stat-row:last-child{border-bottom:0}
a.stat-row:hover{background:#faf9f6}
.stat-key{color:var(--ink-2)}
.stat-val{font-weight:600; font-variant-numeric:tabular-nums; word-break:break-all}

/* ---------- 列表 ---------- */
.mini-list{list-style:none; margin:0; padding:0}
.mini-list li{padding:10px 0; border-bottom:1px solid var(--line)}
.mini-list li:last-child{border-bottom:0}
.mini-list.wide li{padding:13px 0}
.mini-meta{display:block; color:var(--ink-3); font-size:12.5px; margin-top:3px}
.snip{margin:5px 0 0; color:var(--ink-2); font-size:13px}
.snip mark{background:#fdeecd; color:inherit}
.empty{color:var(--ink-3); padding:22px; text-align:center; background:var(--surface);
  border:1px dashed var(--line); border-radius:var(--radius)}
.empty a{color:var(--accent)}

/* ---------- 投喂表单 ---------- */
.feed-form{background:var(--surface); border:1px solid var(--line);
  border-radius:var(--radius); padding:18px; box-shadow:var(--shadow)}
textarea,input[type=text],input[type=search],input[type=url],input[type=password],select{
  width:100%; padding:10px 12px; border:1px solid var(--line); border-radius:8px;
  background:#fcfcfa; font:inherit; color:var(--ink);
}
textarea{resize:vertical; min-height:150px; line-height:1.7}
textarea:focus,input:focus,select:focus{outline:2px solid #f0d8d0; border-color:var(--accent)}
.form-row{display:flex; gap:12px; margin-top:12px; flex-wrap:wrap}
.form-row label{display:flex; flex-direction:column; gap:5px; font-size:12.5px;
  color:var(--ink-2); flex:1; min-width:170px}
.form-row label.grow{flex:2}
.form-actions{display:flex; align-items:center; gap:14px; margin-top:16px; flex-wrap:wrap}

.btn{padding:9px 20px; border-radius:8px; border:1px solid var(--line);
  background:var(--surface); font:inherit; cursor:pointer; color:var(--ink)}
.btn:hover{border-color:#cbc9bf}
.btn-primary{background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600}
.btn-primary:hover{background:#9c3a25; color:#fff}
.btn-wide{width:100%; margin-top:6px}

/* ---------- 知识库 ---------- */
.know-layout{display:grid; grid-template-columns:200px 1fr; gap:26px; align-items:start}
@media(max-width:760px){.know-layout{grid-template-columns:1fr; gap:14px}}
.para-tree{position:sticky; top:74px}
@media(max-width:760px){.para-tree{position:static}}
.tree-item{display:flex; justify-content:space-between; padding:7px 11px;
  border-radius:7px; font-size:14px; color:var(--ink-2)}
.tree-item:hover{background:#ecebe5; color:var(--ink)}
.tree-item.active{background:var(--ink); color:#fff}
.tree-n{font-variant-numeric:tabular-nums; opacity:.65}
.tree-desc{margin:2px 0 9px 11px; font-size:11.5px; color:var(--ink-3); line-height:1.5}

.entry-cards{display:grid; grid-template-columns:repeat(auto-fill,minmax(258px,1fr)); gap:12px}
.entry-card{background:var(--surface); border:1px solid var(--line);
  border-radius:var(--radius); padding:14px 15px; display:block; transition:.15s}
.entry-card:hover{transform:translateY(-2px); border-color:#d5d3ca}
.entry-card h3{font-size:14.5px; font-weight:650; margin:9px 0 6px}
.entry-card-top{display:flex; gap:6px; flex-wrap:wrap}
.type-chip,.para-chip{font-size:11px; padding:1.5px 7px; border-radius:99px;
  background:#f2f1ec; color:var(--ink-2)}
.para-chip{background:var(--accent-soft); color:var(--accent)}
.type-chip.ok{background:#e8f3ec; color:var(--ok)}
.entry-sum{margin:0; font-size:13px; color:var(--ink-2); line-height:1.55}
.entry-foot{display:flex; justify-content:space-between; gap:10px; margin-top:11px;
  color:var(--ink-3); font-size:12px}
.tags{color:var(--accent)}

/* ---------- 详情 ---------- */
.back{display:inline-block; margin-bottom:16px; color:var(--ink-3); font-size:13px}
.detail{background:var(--surface); border:1px solid var(--line);
  border-radius:var(--radius); padding:24px 26px; box-shadow:var(--shadow)}
.detail-meta{display:flex; gap:14px; flex-wrap:wrap; color:var(--ink-3);
  font-size:12.5px; margin:4px 0 20px}
.detail-meta a{color:var(--accent)}
.panel{background:#fbfbf9; border:1px solid var(--line); border-radius:9px;
  padding:14px 16px; margin:12px 0}
.panel-accent{background:var(--accent-soft); border-color:#f0d8d0}
.panel-title{font-size:12px; font-weight:700; color:var(--ink-2);
  letter-spacing:.06em; margin-bottom:7px}
.panel p{margin:0}
.panel-pre{margin:0; white-space:pre-wrap; word-break:break-word;
  font:inherit; font-size:14px; line-height:1.7}
.body-pre{margin:0; white-space:pre-wrap; word-break:break-word;
  font:inherit; font-size:14.5px; line-height:1.8}
.file-note{margin-top:20px; color:var(--ink-3); font-size:12.5px}

/* ---------- 骨架页 ---------- */
.skeleton-head{display:flex; flex-direction:column; gap:8px; margin-bottom:18px}
.plan-list{margin:0; padding-left:20px}
.plan-list li{margin:6px 0; color:var(--ink-2)}

/* ---------- 检索 ---------- */
.search-form{display:flex; gap:10px; margin:6px 0 4px}
.search-form input{flex:1; font-size:16px; padding:12px 14px}
.mode-select{flex:0 0 auto; width:auto; min-width:96px}

/* ---------- 问答区（RAG） ---------- */
.rag-panel{background:var(--surface); border-color:var(--line)}
.rag-sources{margin-top:14px; display:flex; flex-direction:column; gap:5px}
.rag-src-title{font-size:12px; font-weight:700; color:var(--ink-2);
  letter-spacing:.06em; margin-bottom:2px}
.rag-src{font-size:13px; color:var(--accent); display:flex; gap:6px; align-items:baseline}
.rag-src-tag{font-size:11px; color:var(--ink-3); background:#f2f1ec;
  padding:0 6px; border-radius:99px}
.rag-answer{margin-top:14px; padding:14px 16px; background:#fcfcfa;
  border:1px solid var(--line); border-radius:9px; white-space:pre-wrap;
  word-break:break-word; font-size:14.5px; line-height:1.8; min-height:44px}
.rag-answer:empty::after{content:"正在翻你的库…"; color:var(--ink-3); font-size:13px}

/* ---------- 用量 ---------- */
.budget{margin:16px 0 24px}
.budget-bar{height:9px; background:#ecebe5; border-radius:99px; overflow:hidden}
.budget-bar span{display:block; height:100%; background:var(--ok); transition:.3s}
.budget-bar.budget-warn span{background:var(--accent)}
.budget-nums{margin-top:9px; display:flex; align-items:baseline; gap:8px}
.budget-nums strong{font-size:22px; font-weight:700; font-variant-numeric:tabular-nums}
.text-warn{color:var(--accent)}
.text-ok{color:var(--ok)}

/* ---------- 登录 ---------- */
.login-box{max-width:330px; margin:9vh auto 0; text-align:center}
.login-form{display:flex; flex-direction:column; gap:12px; margin-top:22px; text-align:left}
.login-form label{display:flex; flex-direction:column; gap:5px;
  font-size:12.5px; color:var(--ink-2)}

/* ---------- 提示条 ---------- */
.flash{padding:10px 15px; border-radius:8px; margin-bottom:14px; font-size:13.5px}
.flash-ok{background:#e8f3ec; color:#1f5c3d}
.flash-error{background:var(--accent-soft); color:#8a3520}

/* ---------- v1.2 整体目标 ---------- */
.h2{font-size:15px; font-weight:600; margin:26px 0 10px; color:var(--ink)}
.goal{
  background:var(--surface); border:1px solid var(--line); border-radius:var(--radius);
  padding:15px 18px; margin-bottom:12px; box-shadow:var(--shadow);
}
.goal-direction{border-left:3px solid var(--accent)}
.goal-head{display:flex; align-items:center; gap:10px; flex-wrap:wrap}
.goal-head h3{margin:0; font-size:15px; font-weight:600}
.goal-status{font-size:11px; padding:2px 9px; border-radius:999px;
  background:#f0efe9; color:var(--ink-3)}
.st-active{background:#eef2fb; color:#33507f}
.st-done{background:#e8f3ec; color:var(--ok)}
.st-paused{background:#faf3e2; color:var(--warn)}
.st-dropped{background:#f0efe9; color:var(--ink-3)}
.goal-why{margin:9px 0 3px; font-size:13.5px; color:var(--ink-2); line-height:1.6}
.bar{height:6px; border-radius:999px; background:#efece6; margin:11px 0 9px; overflow:hidden}
.bar i{display:block; height:100%; background:var(--accent); border-radius:999px}
.goal-actions{display:flex; flex-wrap:wrap; gap:7px; margin-top:4px}
.btn-mini{font-size:12px; padding:4px 10px; border-radius:7px;
  border:1px solid var(--line); background:var(--surface); color:var(--ink-2); cursor:pointer;
  font-family:inherit}
.btn-mini:hover{background:#f4f2ed; color:var(--ink)}
.btn-mini.danger{color:var(--accent); border-color:#e8d3cc}
.hist{margin-top:12px; border-top:1px dashed var(--line); padding-top:10px;
  display:flex; flex-direction:column; gap:4px; font-size:13px}
.hist-item{display:flex; justify-content:space-between; gap:10px;
  padding:6px 8px; border-radius:7px}
.hist-item:hover{background:#f6f4ef}
.goal-form{display:flex; flex-direction:column; gap:8px}
.row{display:flex; gap:8px; flex-wrap:wrap}
.inp{width:100%; padding:8px 10px; border:1px solid var(--line); border-radius:8px;
  font-size:13px; font-family:inherit; background:var(--surface); color:var(--ink)}
.row .inp{flex:1; min-width:130px}
.btn{padding:8px 18px; border-radius:8px; border:none; background:var(--accent);
  color:#fff; font-size:13px; cursor:pointer; font-family:inherit; align-self:flex-start}
.btn:hover{opacity:.9}
.btn:disabled{opacity:.5; cursor:default}
.flash-slot{min-height:22px; font-size:13px; margin:6px 0}
.modal{position:fixed; inset:0; background:rgba(27,27,25,.38);
  display:flex; align-items:center; justify-content:center; padding:18px; z-index:60}
.modal-box{background:var(--surface); border-radius:var(--radius); padding:20px;
  width:100%; max-width:580px; max-height:86vh; overflow:auto;
  display:flex; flex-direction:column; gap:10px; box-shadow:0 12px 40px rgba(0,0,0,.18)}
.modal-title{font-size:15px; font-weight:600}
.modal-actions{display:flex; gap:8px; align-items:center}
.analysis-out{font-size:13px}
.analysis-out .panel-pre{white-space:pre-wrap; max-height:330px; overflow:auto; margin-top:8px}

/* ================================================= v1.3 项目监督 */
.proj{background:var(--surface); border:1px solid var(--line); border-left:3px solid var(--line);
  border-radius:var(--radius); padding:16px 18px; margin-bottom:14px; box-shadow:var(--shadow)}
.proj.hl-warn{border-left-color:var(--warn)}
.proj.hl-bad{border-left-color:var(--accent)}
.proj-head{display:flex; align-items:center; gap:9px; flex-wrap:wrap}
.proj-head h3{margin:0; font-size:15px; font-weight:650}
.proj-desc{margin:8px 0 0; font-size:13.5px; color:var(--ink-2); line-height:1.6}
.proj-progress{font-size:12px; color:var(--ink-3); font-variant-numeric:tabular-nums; margin:-4px 0 8px}

.hb{font-size:11px; padding:2px 9px; border-radius:999px; font-weight:600}
.hb-ok{background:#e8f3ec; color:var(--ok)}
.hb-warn{background:#f7f1dc; color:var(--warn)}
.hb-bad{background:var(--accent-soft); color:var(--accent)}

.alert{font-size:12.5px; padding:6px 10px; border-radius:7px; margin-top:6px; line-height:1.55}
.alert-ok{background:#f2f6f3; color:var(--ok)}
.alert-warn{background:#faf5e6; color:var(--warn)}
.alert-bad{background:var(--accent-soft); color:var(--accent)}

/* ---------- 筛选 chips ---------- */
.chips{display:flex; gap:7px; flex-wrap:wrap; margin:16px 0 14px}
.chip{font-size:12.5px; padding:4px 12px; border-radius:999px; border:1px solid var(--line);
  background:var(--surface); color:var(--ink-2)}
.chip:hover{border-color:#d5d3ca; color:var(--ink)}
.chip-on{background:var(--ink); border-color:var(--ink); color:#fff}
.chip-on:hover{color:#fff}

/* ---------- 工作记录时间线 ---------- */
.timeline{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius);
  overflow:hidden; box-shadow:var(--shadow)}
.tl-item{display:flex; gap:14px; padding:13px 16px; border-bottom:1px solid var(--line)}
.tl-item:last-child{border-bottom:0}
.tl-item:hover{background:#faf9f6}
.tl-date{flex:0 0 88px; color:var(--ink-3); font-size:12.5px; font-variant-numeric:tabular-nums;
  padding-top:1px}
.tl-body{display:flex; flex-direction:column; gap:2px; min-width:0}
.tl-body strong{font-size:14px; font-weight:600}

/* ---------- 首页「需要关注」 ---------- */
.attn{background:var(--accent-soft); border:1px solid #eed9d1; border-radius:var(--radius);
  padding:14px 17px; margin-bottom:26px}
.attn-title{font-size:13px; font-weight:700; color:var(--accent); margin-bottom:8px}
.attn-item{display:flex; align-items:baseline; gap:9px; padding:5px 0; font-size:13.5px; flex-wrap:wrap}
.attn-item .why{color:var(--ink-2); font-size:12.5px}

/* ================================================= 知识架构：来源 × 分类 */
.origin-bar{display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
  gap:10px; margin:18px 0 22px}
.origin-card{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius);
  padding:12px 15px; box-shadow:var(--shadow); display:flex; flex-direction:column; gap:3px}
.origin-card:hover{border-color:#d5d3ca}
.origin-card.on{border-color:var(--ink); background:#fbfaf7}
.origin-name{font-size:14px; font-weight:650}
.origin-n{font-size:12px; color:var(--ink-3); font-variant-numeric:tabular-nums}
.origin-desc{font-size:11.5px; color:var(--ink-3); line-height:1.5}

.cat-chip{font-size:11px; padding:1.5px 7px; border-radius:99px;
  background:#f1efe8; color:var(--ink-2)}
.org-chip{font-size:11px; padding:1.5px 7px; border-radius:99px; font-weight:600}
.org-self{background:#e8f3ec; color:var(--ok)}
.org-classic{background:#eef1f5; color:#46618a}

/* 项目 AI 分析结果的展示区 */
.ana-box{margin-top:10px; padding:12px 14px; background:var(--surface2, #f6f4ef);
  border:1px solid var(--line); border-radius:var(--radius)}
.ana-box .panel-pre{max-height:420px; overflow:auto; margin:0}
.md-h{font-size:13px; font-weight:650; color:var(--fg); margin:12px 0 5px; padding-left:8px;
  border-left:3px solid var(--accent)}
.md-h:first-child{margin-top:0}
.md-p{margin:5px 0; line-height:1.75; color:var(--fg-soft, #4a463f)}
.md-ul{margin:5px 0 10px; padding-left:20px}
.md-ul li{margin:3px 0; line-height:1.75; color:var(--fg-soft, #4a463f)}

@media (max-width:720px){
  .origin-bar{grid-template-columns:1fr}
}

/* ---------- 页头（标题 + 右侧动作） ---------- */
.page-head{display:flex; align-items:flex-start; justify-content:space-between;
  gap:14px; flex-wrap:wrap; margin-bottom:4px}
.page-head .hint{margin:0; max-width:62ch}
.btn-graph{
  flex:0 0 auto; display:inline-flex; align-items:center; gap:6px;
  background:var(--ink); border-color:var(--ink); color:#fff; font-weight:600;
  padding:9px 18px; border-radius:9px;
}
.btn-graph:hover{background:#000; color:#fff}
.btn-graph::before{content:"◍"; font-size:14px; line-height:1}

@media (max-width:720px){
  .btn-graph{width:100%; justify-content:center; min-height:42px; margin-top:2px}
}

/* ---------- 收件箱链接提取 ---------- */
.opt{color:var(--ink-3); font-weight:400; font-size:11px; margin-left:4px}
.url-line{display:flex; gap:8px}
.url-line input{flex:1; min-width:0}
.url-line .btn-mini{flex:0 0 auto; white-space:nowrap; min-height:38px; padding:6px 14px}

@media (max-width:720px){
  .url-line{flex-direction:column; align-items:stretch}
  .url-line .btn-mini{min-height:40px; width:100%}
}

/* ================================================= 待办 /todos */
.mon-box{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius);
  padding:15px 17px; margin:18px 0 20px; box-shadow:var(--shadow)}
.mon-head{display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:11px}
.mon-head .panel-title{margin:0}
.mon-list{list-style:none; margin:0; padding:0}
.mon-row{display:flex; align-items:center; gap:10px; padding:7px 0;
  border-bottom:1px solid var(--line); font-size:12.5px; flex-wrap:wrap}
.mon-row:last-child{border-bottom:0}
.mon-m{flex:0 0 62px; color:var(--ink-2); font-variant-numeric:tabular-nums}
.mon-bar{flex:1 1 90px; min-width:70px; height:7px; background:#efece6; border-radius:99px;
  overflow:hidden; position:relative}
.mon-bar i{position:absolute; left:0; top:0; height:100%; border-radius:99px}
.mon-bar-new{background:#c9c6bb}
.mon-bar-done{background:var(--ok)}
.mon-n{flex:0 0 auto; color:var(--ink-2); font-variant-numeric:tabular-nums}
.mon-n.ok{color:var(--ok)}
.mon-n.muted{color:var(--ink-3)}
.mon-rate{flex:0 0 38px; text-align:right; font-weight:650; font-variant-numeric:tabular-nums}
.legend{display:flex; align-items:center; gap:7px; margin:10px 0 0; font-size:11.5px;
  color:var(--ink-3); flex-wrap:wrap}
.lg{display:inline-block; width:11px; height:7px; border-radius:99px; margin-left:8px}
.lg-new{background:#c9c6bb}
.lg-done{background:var(--ok)}

.todo-list{display:flex; flex-direction:column; gap:10px}
.todo{background:var(--surface); border:1px solid var(--line); border-left:3px solid var(--line);
  border-radius:var(--radius); padding:13px 16px; box-shadow:var(--shadow)}
.todo.status-pending{border-left-color:var(--ink-3)}
.todo.status-done{border-left-color:var(--ok)}
.todo.status-later{border-left-color:var(--warn)}
.todo.status-dropped{border-left-color:#d8d6cd; opacity:.62}
.todo.status-dropped .todo-text{text-decoration:line-through; color:var(--ink-3)}

.todo-badges{display:flex; gap:6px; flex-wrap:wrap; margin-bottom:6px}
.td-kind,.td-st{font-size:11px; padding:1.5px 8px; border-radius:99px}
.td-kind{background:#f2f1ec; color:var(--ink-2)}
.td-kind.kind-now{background:#e8f3ec; color:var(--ok)}
.td-kind.kind-prep{background:#faf5e6; color:var(--warn)}
.td-st{background:#f0efe9; color:var(--ink-3)}
.status-done .td-st{background:#e8f3ec; color:var(--ok)}
.status-pending .td-st{background:#f0efe9; color:var(--ink-2)}
.status-later .td-st{background:#faf5e6; color:var(--warn)}

.todo-text{margin:0 0 9px; font-size:14.5px; line-height:1.6; font-weight:500}
.todo-actions{display:flex; gap:7px; flex-wrap:wrap}
.btn-done{background:var(--ok); border-color:var(--ok); color:#fff}
.btn-done:hover{background:#276a47; color:#fff}

.todo-why{margin-top:10px; border-top:1px dashed var(--line); padding-top:8px}
.todo-why summary{cursor:pointer; font-size:12.5px; color:var(--ink-3);
  padding:4px 0; user-select:none}
.todo-why summary:hover{color:var(--ink-2)}
.why-body{display:flex; flex-direction:column; gap:7px; padding:8px 0 2px}
.why-row{display:flex; gap:10px; align-items:baseline; font-size:13px; flex-wrap:wrap}
.why-k{flex:0 0 48px; color:var(--ink-3); font-size:12px}
.why-row a{color:var(--accent)}
.why-edit{gap:7px; margin-top:2px}
.why-edit .inp{flex:1 1 180px; min-width:150px}
.why-edit .btn-mini{flex:0 0 auto}

@media (max-width:720px){
  .mon-box{padding:13px 13px}
  .mon-row{font-size:12px; gap:8px}
  .mon-m{flex:0 0 56px}
  .mon-bar{flex:1 1 100%; order:5}          /* 手机上条形独占一行，数字不挤 */
  .todo{padding:12px 13px}
  .todo-text{font-size:14px}
  .todo-actions .btn-mini{min-height:34px; padding:6px 13px}
  .why-edit{flex-direction:column; align-items:stretch}
  .why-edit .btn-mini{min-height:36px}
}

/* ---------- 新增待办 ---------- */
.new-todo-row{display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:16px}
.nt-label{display:flex; flex-direction:column; gap:5px; font-size:12.5px; color:var(--ink-2)}
.nt-label textarea{min-height:110px}
.nt-actions{display:flex; align-items:center; gap:10px; margin:10px 0 4px}
.td-src{font-size:11px; padding:1.5px 8px; border-radius:99px}
.src-manual{background:#eef2fb; color:#33507f}
.src-insight{background:#f3f1e8; color:var(--warn)}
.td-due{font-size:11px; padding:1.5px 8px; border-radius:99px; background:#f0efe9; color:var(--ink-2)}
.td-due.overdue{background:var(--accent-soft); color:var(--accent); font-weight:600}

/* ================================================= 知识图谱 /graph */
/* 图谱页不吃 .wrap 的内边距，画布要能横向铺开 */
body.graph-mode .wrap{max-width:1180px; padding:22px 22px 40px}

.graph-head{display:flex; align-items:flex-start; gap:14px;
  justify-content:space-between; flex-wrap:wrap; margin-bottom:12px}
.graph-head .h1{font-size:22px; margin-bottom:6px}
.graph-head .hint{max-width:60ch; margin:0}
.graph-head .btn-mini{flex:0 0 auto; margin-top:2px}

.graph-stats{display:flex; align-items:baseline; gap:16px; flex-wrap:wrap;
  font-size:12.5px; color:var(--ink-3); margin-bottom:10px}
.graph-stats strong{font-size:15px; color:var(--ink); font-variant-numeric:tabular-nums;
  margin-left:3px}
.tag-tip{color:var(--accent); font-weight:600; font-size:13px}

.graph-canvas{
  position:relative; height:clamp(320px, 56vh, 600px);
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--radius); overflow:hidden; box-shadow:var(--shadow);
}
#graph-svg{
  display:block; width:100%; height:100%;
  touch-action:none;                /* 交给 JS 处理拖动/捏合，别让浏览器抢走 */
  cursor:grab; user-select:none; -webkit-user-select:none;
}
#graph-svg:active{cursor:grabbing}
#graph-svg .gnode text{pointer-events:none}
#graph-svg .tag-link{pointer-events:stroke}

.graph-canvas .empty{position:absolute; inset:22px; display:grid; place-items:center;
  border:0; background:transparent}

.graph-bar{display:flex; flex-direction:column; gap:9px; margin-top:12px}
.bar-row{display:flex; align-items:center; gap:7px; flex-wrap:wrap}
.bar-row-scroll{flex-wrap:nowrap; overflow-x:auto; padding-bottom:3px;
  -webkit-overflow-scrolling:touch}
.bar-row-scroll .chips{flex-wrap:nowrap; margin:0}
.bar-label{flex:0 0 auto; font-size:11.5px; color:var(--ink-3);
  letter-spacing:.06em; min-width:30px}
.graph-bar .chip{flex:0 0 auto; white-space:nowrap; min-height:32px}

.graph-tip{margin-top:12px}

@media (max-width:720px){
  body.graph-mode .wrap{padding:16px 12px 28px}
  .graph-head{gap:10px}
  .graph-head .h1{font-size:19px}
  .graph-canvas{height:clamp(300px, 52vh, 460px); border-radius:9px}
  /* 手机上按钮要够大，不然手指按不准 */
  .graph-bar .chip{min-height:36px; padding:6px 13px; font-size:13px}
  .graph-stats{gap:12px}
}


/* ================================================= 手机端底部 tab bar */
.tabbar{display:none}

@media (max-width:720px){
  /* 顶部：只留品牌行，横向导航让位给底部 tab */
  .topbar{flex-direction:row; justify-content:space-between; padding:10px 14px}
  .topbar .nav{display:none}
  .foot{display:none}

  /* 底部 tab：参照主流 C 端 App —— 固定、毛玻璃、安全区适配 */
  .tabbar{
    display:flex; position:fixed; left:0; right:0; bottom:0; z-index:90;
    background:rgba(252,251,248,.92);
    -webkit-backdrop-filter:saturate(1.6) blur(14px);
    backdrop-filter:saturate(1.6) blur(14px);
    border-top:1px solid var(--line);
    padding:5px 4px calc(5px + env(safe-area-inset-bottom));
  }
  .tab{
    flex:1; display:flex; flex-direction:column; align-items:center; gap:2px;
    padding:5px 0 3px; text-decoration:none; color:var(--ink-3);
    font-size:10.5px; letter-spacing:.04em; border-radius:10px;
    -webkit-tap-highlight-color:transparent;
  }
  .tab svg{width:23px; height:23px}
  .tab-on{color:var(--accent); font-weight:600}
  .tab:active{background:rgba(0,0,0,.05)}

  /* 给底部 tab 让位：主内容 + 各页的底部操作都要抬高 */
  body{padding-bottom:0}
  .wrap{padding-bottom:calc(76px + env(safe-area-inset-bottom)) !important}

  /* 弹窗盖过 tab bar（遮罩连 tab 一起压暗，符合 C 端习惯） */
  .modal{z-index:95}
}

/* 「我的」页的更多入口 */
.more-grid{display:grid; grid-template-columns:1fr 1fr; gap:10px}
.more-item{display:flex; flex-direction:column; gap:3px; padding:13px 15px;
  background:var(--surface); border:1px solid var(--line); border-radius:var(--radius);
  text-decoration:none; color:inherit; box-shadow:var(--shadow);
  -webkit-tap-highlight-color:transparent}
.more-item:active{background:var(--surface2, #f3f1ec)}
.more-name{font-size:14px; font-weight:600}
.more-warn .more-name{color:var(--accent)}
