
/* ============ 基础 / INS 极简风格 ============ */
:root{
  --bg:#FAFAFA; --card:#FFFFFF; --text:#1A1A1A; --muted:#6E6E73;
  --primary:#4F46E5; --primary-soft:#EEF2FF;
  --success:#10B981; --success-soft:#D1FAE5;
  --warning:#F59E0B; --warning-soft:#FEF3C7;
  --danger:#EF4444; --danger-soft:#FEE2E2;
  --line:#EBEBEF;
  --radius:16px; --shadow:0 1px 3px rgba(0,0,0,0.08);
  --sidebar-w:220px; --tabbar-h:58px;
  --soft:var(--soft);          /* 次级底 / ghost 按钮 */
  --input:var(--input);         /* 输入框底 / 统计单元底 */
  --hover:var(--hover);         /* hover 底 */
  --text2:var(--text2);         /* 次级文字 */
  --placeholder:#B8B8C0;   /* placeholder / 删除钮 */
  --border2:var(--border2);       /* 复选框边框 */
  --hm-empty:var(--hm-empty);      /* 热力图空格 */
  --tabbar-bg:rgba(255,255,255,.92);
  --pre-bg:#1E1E28; --pre-fg:#E4E4EF;
  --markdown-accent:#4C4A6E;
}
*{ margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
html,body{ height:100%; }
body{
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;
  background:var(--bg); color:var(--text);
  font-size:15px; line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
button{ font-family:inherit; cursor:pointer; }
input{ font-family:inherit; }
::selection{ background:var(--primary-soft); }

/* ============ 视图切换 ============ */
.view{ display:none; }
.view.active{ display:block; animation:fadeIn .18s ease; }
@keyframes fadeIn{ from{opacity:0; transform:translateY(4px);} to{opacity:1; transform:none;} }

/* ============ 侧边栏（桌面） ============ */
#sidebar{
  display:none;
  position:fixed; left:0; top:0; bottom:0; width:var(--sidebar-w);
  background:var(--card); border-right:1px solid var(--line);
  flex-direction:column; padding:24px 14px 16px; z-index:50;
}
#sidebar .logo{ font-size:20px; font-weight:700; letter-spacing:-.3px; padding:0 10px 20px; }
#sidebar .logo small{ display:block; font-size:11px; font-weight:500; color:var(--muted); margin-top:2px; letter-spacing:0; }
#sidebar nav{ flex:1; display:flex; flex-direction:column; gap:4px; }
.side-item{
  display:flex; align-items:center; gap:10px;
  padding:10px 12px; border:none; background:none; border-radius:12px;
  font-size:15px; font-weight:500; color:var(--text2); text-align:left;
  transition:background .15s, color .15s;
}
.side-item svg{ width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.side-item:hover{ background:var(--hover); }
.side-item.active{ background:var(--primary-soft); color:var(--primary); font-weight:600; }
.side-item.active::before{ content:''; position:absolute; left:-4px; top:22%; bottom:22%; width:3px; border-radius:3px; background:var(--primary); }
.side-item{ position:relative; }
#sidebar .ver{ padding:0 12px; font-size:11px; color:var(--muted); }

/* ============ 底部 Tab 栏（移动端） ============ */
#tabbar{
  position:fixed; left:0; right:0; bottom:0; z-index:50;
  background:var(--tabbar-bg); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border-top:1px solid var(--line);
  display:flex; justify-content:space-around;
  height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);
}
.tab{
  flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  border:none; background:none; color:var(--muted); font-size:11px;
  transition:color .15s, transform .1s;
}
.tab:active{ transform:scale(.94); }
.tab .tab-ico{ font-size:20px; line-height:1; opacity:.8; }
.tab .tab-ico svg{ width:21px; height:21px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.tab.active{ color:var(--primary); font-weight:600; }
.tab.active .tab-ico{ opacity:1; }
.tab.active .tab-ico svg{ stroke-width:2.4; }

/* ============ 主区域 ============ */
#main{ padding:20px 16px calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 24px); }
.page-head{ margin:8px 0 18px; }
.page-title{ font-size:24px; font-weight:700; letter-spacing:-.4px; }
.page-sub{ font-size:15px; color:var(--muted); margin-top:4px; }

/* ============ 卡片 ============ */
.card{
  background:var(--card); border-radius:var(--radius); box-shadow:var(--shadow);
  padding:16px; margin-bottom:16px;
}
.pane-title{ font-size:17px; font-weight:600; margin-bottom:12px; }
.hint{ font-size:13px; color:var(--muted); line-height:1.6; margin-bottom:10px; }

/* ============ 加载 / 错误状态 ============ */
.pane-state{ padding:28px 8px; text-align:center; color:var(--muted); font-size:14px; }
.pane-state.err{ color:#B91C1C; }
.pane-state .err-ico{ font-size:26px; margin-bottom:8px; }
.pane-state p{ margin-bottom:12px; word-break:break-all; }

/* ============ 通用按钮 ============ */
.btn{
  border:none; background:var(--primary); color:#fff; border-radius:12px;
  padding:9px 16px; font-size:14px; font-weight:600;
  transition:opacity .15s, transform .1s;
}
.btn:active{ transform:scale(.97); }
.btn:disabled{ opacity:.55; cursor:default; }
.btn.ghost{ background:var(--soft); color:var(--text2); }
.btn-block{ display:block; width:100%; margin-bottom:10px; }
.btn-big{
  display:block; width:100%; max-width:680px; margin:22px auto 4px;
  background:var(--primary); color:#fff; border:none; border-radius:14px;
  padding:15px; font-size:17px; font-weight:600;
  box-shadow:0 4px 12px rgba(79,70,229,.28);
  transition:opacity .15s, transform .1s;
}
.btn-big:active{ transform:scale(.985); }
.btn-big:disabled{ opacity:.55; }

/* ============ 每日模块 ============ */
.daily-wrap{ max-width:680px; margin:0 auto; }
#todo-stats{ display:flex; align-items:baseline; gap:8px; font-size:17px; font-weight:600; }
#todo-stats .st-total{ font-size:13px; color:var(--muted); font-weight:500; }
.progress{ height:6px; background:var(--soft); border-radius:999px; margin-top:12px; overflow:hidden; }
.progress-fill{ height:100%; background:var(--primary); border-radius:999px; transition:width .3s ease; }
.add-card{ display:flex; gap:10px; align-items:center; padding:10px 10px 10px 16px; }
.todo-time-input{ flex:none; border:none; outline:none; font-size:13px; color:var(--text2); background:var(--soft); border-radius:10px; padding:6px 8px; font-variant-numeric:tabular-nums; min-width:0; }
.todo-time-badge{ flex:none; font-size:11px; font-weight:700; color:var(--primary); background:var(--primary-soft); border-radius:999px; padding:2px 8px; font-variant-numeric:tabular-nums; }
.todo-item.done .todo-time-badge{ opacity:.5; }
@media (max-width:480px){ .todo-time-input{ width:74px; padding:6px 6px; } }
#todo-input{
  flex:1; border:none; outline:none; font-size:15px; background:transparent; color:var(--text);
}
#todo-input::placeholder{ color:var(--placeholder); }
.btn-add{
  flex:none; width:38px; height:38px; border-radius:12px; border:none;
  background:var(--primary); color:#fff; font-size:20px; line-height:1;
}
.todo-card{ padding:6px 16px; }

/* ============ Ben 简报 · 小卡片网格（点击展开） ============ */
.brief-wrap{ max-width:680px; margin:0 auto 4px; }
.brief-meta{ display:flex; align-items:center; justify-content:space-between; margin:0 2px 12px; }
.brief-slot{ font-size:15px; font-weight:700; color:var(--text); letter-spacing:-.2px; }
.brief-slot .dot{ display:inline-block; width:8px; height:8px; border-radius:50%; background:var(--primary); margin-right:8px; vertical-align:1px; }
.brief-time{ font-size:12px; color:var(--muted); }
.brief-grid{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.brief-sec-card{
  background:var(--card); border-radius:14px; box-shadow:var(--shadow);
  padding:12px 13px; position:relative; overflow:hidden;
  animation:fadeIn .25s ease both; cursor:pointer;
  transition:box-shadow .2s ease, transform .15s ease;
}
.brief-sec-card:hover{ box-shadow:0 2px 10px rgba(0,0,0,.10); }
.brief-sec-card.expanded{ grid-column:1 / -1; }
.brief-sec-card::before{
  content:''; position:absolute; left:0; top:0; bottom:0; width:3px;
  background:var(--sec-color, var(--primary));
}
.brief-sec-head{ display:flex; align-items:center; gap:8px; margin-bottom:6px; }
.brief-sec-ico{
  flex:none; width:28px; height:28px; border-radius:8px;
  display:flex; align-items:center; justify-content:center; font-size:14px;
  background:var(--sec-soft, var(--primary-soft));
}
.brief-sec-title{
  flex:1; font-size:13px; font-weight:700; color:var(--text);
  letter-spacing:-.2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.brief-sec-arrow{
  flex:none; font-size:11px; color:var(--muted); transition:transform .25s ease;
}
.brief-sec-card.expanded .brief-sec-arrow{ transform:rotate(180deg); }
.brief-sec-preview{
  font-size:12.5px; color:var(--muted); line-height:1.5;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}
.brief-sec-card.expanded .brief-sec-preview{ display:none; }
.brief-sec-body{
  display:none; font-size:13px; line-height:1.68; color:var(--text2);
  padding-top:8px; border-top:1px solid var(--line); margin-top:6px;
}
.brief-sec-card.expanded .brief-sec-body{ display:block; }
.brief-sec-body p{ margin:5px 0; }
.brief-sec-body ul,.brief-sec-body ol{ margin:6px 0 6px 20px; }
.brief-sec-body li{ margin:3px 0; }
.brief-sec-body h1,.brief-sec-body h2,.brief-sec-body h3{ font-size:13.5px; margin:8px 0 5px; }
.brief-sec-body blockquote{ border-left:3px solid var(--line); padding-left:10px; color:var(--muted); margin:6px 0; }
.brief-sec-body hr{ border:none; border-top:1px solid var(--line); margin:10px 0; }
.brief-sec-body table{ border-collapse:collapse; width:100%; margin:6px 0; font-size:12.5px; }
.brief-sec-body th,.brief-sec-body td{ border:1px solid var(--line); padding:4px 8px; text-align:left; }
.brief-sec-body code{ background:var(--soft); border-radius:4px; padding:1px 5px; font-size:12.5px; }
.brief-empty{ color:var(--muted); font-size:13px; padding:2px 0; }
@media (max-width: 480px){
  .brief-grid{ grid-template-columns:1fr; }
}
.todo-item{ display:flex; align-items:center; gap:12px; padding:12px 0; border-bottom:1px solid var(--line); }
.todo-item:last-child{ border-bottom:none; }
.check{
  flex:none; width:22px; height:22px; border-radius:50%;
  border:2px solid var(--border2); background:#fff; position:relative; transition:all .15s;
}
.check.checked{ background:var(--success); border-color:var(--success); }
.check.checked::after{
  content:''; position:absolute; left:6px; top:2.5px; width:5px; height:10px;
  border:solid #fff; border-width:0 2px 2px 0; transform:rotate(45deg);
}
.todo-title{ flex:1; font-size:15px; word-break:break-all; }
.todo-item.done .todo-title{ color:var(--muted); text-decoration:line-through; }
.prio{
  flex:none; border:none; border-radius:999px; padding:4px 10px;
  font-size:12px; font-weight:600; letter-spacing:.2px;
}
.p-high{ background:var(--danger-soft); color:#DC2626; }
.p-mid{ background:var(--warning-soft); color:#B45309; }
.p-low{ background:var(--success-soft); color:#059669; }
.del{
  flex:none; border:none; background:none; color:var(--placeholder);
  font-size:14px; padding:6px 2px 6px 8px; border-radius:8px; transition:color .15s;
}
.del:hover{ color:var(--danger); }
.empty-tip{ padding:18px 8px; text-align:center; color:var(--muted); font-size:14px; line-height:1.7; }
.empty-tip .empty-cta{ margin-top:10px; }
.empty-tip .empty-cta button{ display:inline-flex; align-items:center; gap:6px; }

/* ============ 读书 / 学习模块 ============ */
.books-layout{ display:flex; flex-direction:column; gap:16px; max-width:1080px; margin:0 auto; }
.pane{ background:var(--card); border-radius:var(--radius); box-shadow:var(--shadow); padding:16px; }
.lib-list{ display:flex; gap:8px; overflow-x:auto; padding-bottom:6px; -webkit-overflow-scrolling:touch; }
.lib-item{
  flex:none; width:150px; display:flex; flex-direction:column; gap:8px;
  background:var(--input); border:1px solid var(--line); border-radius:12px;
  padding:12px; cursor:pointer; transition:border-color .15s, box-shadow .15s;
  text-align:left;
}
.lib-item.active{ border-color:var(--primary); box-shadow:0 0 0 2px var(--primary-soft); }
.lib-title{ font-size:14px; font-weight:600; line-height:1.4; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; word-break:break-all; }
.lib-sub{ font-size:11px; color:var(--muted); display:-webkit-box; -webkit-line-clamp:1; -webkit-box-orient:vertical; overflow:hidden; }
.badge{
  align-self:flex-start; font-size:11px; font-weight:600; border-radius:999px; padding:2px 8px;
}
.b-unread{ background:var(--soft); color:#8E8E93; }
.b-reading{ background:var(--primary-soft); color:var(--primary); }
.b-done{ background:var(--success-soft); color:#059669; }

.read-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:10px; padding-bottom:14px; border-bottom:1px solid var(--line); margin-bottom:14px; }
.read-title{ font-size:20px; font-weight:700; letter-spacing:-.3px; }
.read-sub{ font-size:13px; color:var(--muted); margin-top:4px; word-break:break-all; }

/* Markdown 阅读排版 */
.markdown-body{ max-width:680px; margin:0 auto; font-size:15px; line-height:1.7; word-break:break-word; }
.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{
  margin:1.4em 0 .6em; line-height:1.35; letter-spacing:-.2px; font-weight:700;
}
.markdown-body h1{ font-size:22px; } .markdown-body h2{ font-size:19px; }
.markdown-body h3{ font-size:16px; } .markdown-body h4{ font-size:15px; }
.markdown-body p{ margin:.7em 0; }
.markdown-body ul,.markdown-body ol{ margin:.7em 0; padding-left:1.5em; }
.markdown-body li{ margin:.3em 0; }
.markdown-body blockquote{
  margin:1em 0; padding:.6em 1em; border-left:3px solid var(--primary);
  background:var(--primary-soft); border-radius:0 8px 8px 0; color:#4C4A6E;
}
.markdown-body code{
  font-family:"SF Mono",Menlo,Consolas,monospace; font-size:13px;
  background:var(--soft); border-radius:5px; padding:2px 5px; color:#C026D3;
}
.markdown-body pre{
  margin:1em 0; background:var(--pre-bg); color:var(--pre-fg); border-radius:12px;
  padding:14px 16px; overflow-x:auto; -webkit-overflow-scrolling:touch;
}
.markdown-body pre code{ background:none; color:inherit; padding:0; font-size:13px; line-height:1.6; }
.markdown-body table{ width:100%; border-collapse:collapse; margin:1em 0; font-size:14px; }
.markdown-body th,.markdown-body td{ border:1px solid var(--line); padding:8px 10px; text-align:left; }
.markdown-body th{ background:var(--soft); font-weight:600; }
.markdown-body img{ max-width:100%; border-radius:12px; }
.markdown-body hr{ border:none; border-top:1px solid var(--line); margin:1.4em 0; }
.markdown-body a{ color:var(--primary); text-decoration:none; }
.markdown-body a:hover{ text-decoration:underline; }
.markdown-body del{ color:var(--muted); }

/* ============ 设置模块 ============ */
.settings-wrap{ max-width:680px; margin:0 auto; }
.theme-toggle{ display:flex; gap:8px; flex-wrap:wrap; }
.theme-toggle .theme-btn{ flex:1; min-width:90px; }
.theme-toggle .theme-btn.ghost{ background:var(--soft); color:var(--text2); }
.row{ display:flex; gap:10px; align-items:center; }
.row input{
  flex:1; border:1px solid var(--line); border-radius:12px; padding:10px 12px;
  font-size:14px; outline:none; background:var(--input); color:var(--text);
  min-width:0;
}
.row input:focus{ border-color:var(--primary); background:#fff; }
.sync-row{ display:flex; align-items:center; gap:8px; font-size:14px; margin-bottom:12px; }
.dot{ width:8px; height:8px; border-radius:50%; flex:none; }
.dot.ok{ background:var(--success); } .dot.bad{ background:var(--danger); }
.sync-grid{ display:flex; gap:10px; margin-bottom:12px; }
.sync-cell{
  flex:1; background:var(--input); border:1px solid var(--line); border-radius:12px;
  padding:14px; text-align:center;
}
.sync-cell b{ display:block; font-size:24px; font-weight:700; color:var(--primary); }
.sync-cell span{ font-size:12px; color:var(--muted); }

/* ============ Toast ============ */
#toast{
  position:fixed; left:50%; bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 20px);
  transform:translateX(-50%) translateY(10px);
  background:rgba(26,26,26,.92); color:#fff; font-size:14px;
  padding:10px 18px; border-radius:999px; z-index:99;
  opacity:0; pointer-events:none; transition:opacity .25s, transform .25s;
  max-width:86vw; text-align:center;
}
#toast.show{ opacity:1; transform:translateX(-50%) translateY(0); }
#toast.err{ background:rgba(220,38,38,.95); }
#toast.ok{ background:rgba(16,185,129,.95); }

/* ============ 今日概览 · 实时外部数据 ============ */
.summary-wrap{ max-width:680px; margin:0 auto 4px; }
.summary-head{ display:flex; align-items:center; justify-content:space-between; gap:4px 8px; flex-wrap:wrap; margin:0 2px 12px; }
.summary-title{ font-size:17px; font-weight:700; letter-spacing:-.2px; }
.summary-updated{ font-size:11px; color:var(--muted); font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%; }
.sum-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
@media (max-width:640px){ .sum-grid{ grid-template-columns:1fr; } }
.sum-card{ background:var(--card); border-radius:var(--radius); box-shadow:var(--shadow); padding:14px 16px; min-width:0; overflow-wrap:break-word; }
.sum-card .sum-items{ min-width:0; }
.sum-expand{
  margin-left:auto; flex:none; border:none; background:var(--primary-soft); color:var(--primary);
  font-size:11.5px; font-weight:700; border-radius:999px; padding:3px 10px; cursor:pointer;
}
.sum-expand:active{ opacity:.7; }
.sum-expand.danger{ background:var(--danger-soft); color:#DC2626; }
.sum-card.expanded .sum-expand{ background:var(--soft); color:var(--muted); }
.sum-more{ display:none; }
.sum-card.expanded .sum-more{ display:block; }
.sum-card.expanded .sum-items{ max-height:none; }
.sum-loading{ font-size:12px; color:var(--muted); padding:8px 0; }
/* 今日全量盘点 + 行动建议（简报板块独立完整卡） */
.daily-full-wrap{ max-width:680px; margin:0 auto 4px; }
.full-card{
  background:var(--card); border-radius:var(--radius); box-shadow:var(--shadow);
  padding:16px; margin-bottom:14px; position:relative; overflow:hidden;
}
.full-card::before{
  content:''; position:absolute; left:0; top:0; bottom:0; width:3px;
  background:var(--fc-color, var(--primary));
}
.full-head{ display:flex; align-items:center; gap:9px; margin-bottom:10px; }
.full-ico{
  flex:none; width:30px; height:30px; border-radius:9px;
  display:flex; align-items:center; justify-content:center; font-size:15px;
  background:var(--fc-soft, var(--primary-soft));
}
.full-title{ font-size:15px; font-weight:700; letter-spacing:-.2px; }
.full-body{ font-size:13.5px; line-height:1.7; color:var(--text2); }
.full-body p{ margin:5px 0; }
.full-body ul,.full-body ol{ margin:6px 0 6px 20px; }
.full-body li{ margin:3px 0; }
.full-body h1,.full-body h2,.full-body h3{ font-size:14px; margin:8px 0 5px; }
.full-body blockquote{ border-left:3px solid var(--line); padding-left:10px; color:var(--muted); margin:6px 0; }
.full-body hr{ border:none; border-top:1px solid var(--line); margin:10px 0; }
.sum-head{ display:flex; align-items:center; gap:8px; margin-bottom:8px; }
.sum-ico{ font-size:15px; }
.sum-head b{ flex:1; font-size:14px; font-weight:600; }
.sum-badge{ background:var(--primary-soft); color:var(--primary); font-size:11.5px; font-weight:700; border-radius:999px; padding:2px 8px; }
.sum-count{ font-size:11.5px; color:var(--muted); }
.sum-item{ padding:8px 0; border-bottom:1px solid var(--line); cursor:pointer; }
.sum-item:last-child{ border-bottom:none; }
.sum-line1{ display:flex; justify-content:space-between; gap:8px; }
.sum-from{ font-size:13px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sum-src-tag{ flex:none; font-size:10px; font-weight:700; border-radius:999px; padding:1px 7px; }
.sum-src-tag.feishu{ background:var(--primary-soft); color:var(--primary); }
.sum-src-tag.imsg{ background:var(--soft); color:var(--muted); }
.sum-time{ font-size:11px; color:var(--muted); flex:none; font-variant-numeric:tabular-nums; }
.sum-line2{ font-size:12.5px; color:var(--text2); margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* 展开区消息允许完整换行显示 */
.sum-more .sum-line2{ white-space:normal; word-break:break-word; }
.sum-snippet{ display:none; font-size:12.5px; color:var(--text2); margin-top:6px; line-height:1.55; border-left:3px solid var(--primary-soft); background:transparent; border-radius:0; padding:2px 0 2px 10px; word-break:break-word; overflow-wrap:break-word; max-width:100%; }
/* 预览区点击展开 / 展开全部列表：始终显示摘要 */
.sum-item.snippet-open .sum-snippet,
.sum-card.expanded .sum-snippet,
.sum-more .sum-snippet{ display:block; }
.sum-from{ max-width:70%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; display:inline-block; vertical-align:bottom; }

.sum-item.snippet-open .sum-empty{ font-size:12.5px; color:var(--muted); padding:6px 0; }
/* 日程时间条 */
.tl-item{ display:flex; align-items:baseline; gap:10px; padding:7px 0; border-bottom:1px solid var(--line); }
.tl-item:last-child{ border-bottom:none; }
.tl-time{ flex:none; font-size:12px; font-weight:700; color:var(--primary); font-variant-numeric:tabular-nums; width:44px; }
.tl-title{ flex:1; font-size:13px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tl-src{ flex:none; font-size:11px; color:var(--muted); max-width:40%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* 提醒勾选 → 生成待办 */
.sum-item-rem{ display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); cursor:pointer; }
.sum-item-rem:last-child{ border-bottom:none; }
.sum-item-rem .rem-body{ flex:1; min-width:0; }
.sum-check{ flex:none; width:20px; height:20px; border-radius:50%; border:2px solid var(--border2); background:#fff; display:flex; align-items:center; justify-content:center; color:transparent; font-size:10px; line-height:1; transition:all .15s; cursor:pointer; }
.sum-check.done{ background:var(--success); border-color:var(--success); color:#fff; }
/* 不可写回（无 rem_ ext_id）：置灰禁用 */
.sum-check.disabled{ border-color:var(--border2); background:var(--hover); color:var(--border2); cursor:default; }
.sum-check.syncing{ animation:remPulse .8s ease infinite alternate; }
@keyframes remPulse{ from{ opacity:1; } to{ opacity:.5; } }
.sum-note{ font-size:11px; color:var(--muted); margin-top:6px; line-height:1.5; }

/* ============ 习惯打卡 + 热力图 ============ */
.habit-item{ display:flex; align-items:center; gap:12px; padding:12px 0; border-bottom:1px solid var(--line); }
.habit-item:last-child{ border-bottom:none; }
.habit-check{ flex:none; width:24px; height:24px; border-radius:50%; border:2px solid var(--border2); background:#fff; color:transparent; font-size:12px; line-height:1; display:flex; align-items:center; justify-content:center; transition:all .15s; }
.habit-check.checked{ background:var(--success); border-color:var(--success); color:#fff; }
.habit-ico{ font-size:17px; }
.habit-name{ flex:1; font-size:15px; word-break:break-all; }
.habit-item.done .habit-name{ color:var(--muted); text-decoration:line-through; }
.habit-streak{ flex:none; font-size:12px; color:var(--muted); }
.add-habit-card{ border-top:1px solid var(--line); margin-top:2px; padding-left:0; padding-right:0; }
.habit-heatmap{ margin-top:14px; border-top:1px solid var(--line); padding-top:14px; }
.hm-title{ font-size:12px; color:var(--muted); margin-bottom:8px; }
.hm-grid{ display:grid; grid-template-columns:repeat(10,1fr); gap:4px; }
.hm-cell{ aspect-ratio:1; border-radius:4px; background:var(--hm-empty); min-width:0; }
.hm-cell.l1{ background:#9BE9A8; } .hm-cell.l2{ background:#40C463; }
.hm-cell.l3{ background:#30A14E; } .hm-cell.l4{ background:#216E39; }
.hm-legend{ display:flex; align-items:center; gap:4px; justify-content:flex-end; margin-top:8px; font-size:10.5px; color:var(--muted); }
.hm-legend .hm-cell{ width:12px; height:12px; border-radius:3px; }

/* ============ 14 天趋势图 ============ */
.weekly-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; }
.weekly-cell{ background:var(--input); border:1px solid var(--line); border-radius:12px; padding:12px 8px; text-align:center; }
.weekly-cell b{ display:block; font-size:19px; font-weight:700; color:var(--primary); font-variant-numeric:tabular-nums; }
.weekly-cell span{ font-size:11px; color:var(--muted); }
@media (max-width:480px){ .weekly-grid{ grid-template-columns:repeat(2,1fr); } }
.chart-box{ position:relative; height:220px; }
.chart-legend{ display:flex; gap:14px; flex-wrap:wrap; margin-bottom:10px; font-size:12px; color:var(--muted); }
.chart-legend .cl{ display:flex; align-items:center; gap:5px; }
.chart-legend .cl i{ width:10px; height:10px; border-radius:3px; display:inline-block; }

/* ============ 简报板块折叠 ============ */
.brief-sec-head{ cursor:pointer; user-select:none; }
.brief-sec-arrow{ margin-left:auto; font-size:12px; color:var(--muted); transition:transform .25s ease; flex:none; }
.brief-sec-card .brief-sec-body{ max-height:1200px; overflow:hidden; transition:max-height .35s ease, opacity .25s ease; }
.brief-sec-card.collapsed .brief-sec-body{ max-height:0; opacity:0; }
.brief-sec-card.collapsed .brief-sec-arrow{ transform:rotate(-90deg); }

/* ============ 待办拖拽排序 ============ */
.todo-item{ cursor:grab; }
.todo-item:active{ cursor:grabbing; }
.todo-item.dragging{ opacity:.45; background:var(--primary-soft); border-radius:10px; }
.drop-ph{ height:3px; background:var(--primary); border-radius:999px; margin:4px 0; animation:fadeIn .12s ease; }

/* ============ 记账模块 ============ */
.ledger-wrap, .meds-wrap{ max-width:680px; margin:0 auto; }
.tx-type-toggle{ display:flex; gap:8px; margin-bottom:12px; }
.tx-type-btn{
  flex:1; border:none; border-radius:12px; padding:10px; font-size:15px; font-weight:600;
  background:var(--soft); color:var(--text2); transition:all .15s;
}
.tx-type-btn.active{ background:var(--danger-soft); color:#DC2626; }
.tx-type-btn.active.income{ background:var(--success-soft); color:#059669; }
.amount-row{ display:flex; align-items:center; gap:10px; margin-bottom:12px; }
.amount-row .cur{ font-size:22px; font-weight:700; color:var(--muted); flex:none; }
#tx-amount{
  flex:1; min-width:0; border:1px solid var(--line); border-radius:12px; padding:12px;
  font-size:20px; font-weight:700; outline:none; background:var(--input); color:var(--text);
  font-variant-numeric:tabular-nums;
}
#tx-amount:focus{ border-color:var(--primary); background:#fff; }
.cat-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:12px; }
.cat-btn{
  border:1px solid var(--line); background:var(--input); border-radius:12px; padding:9px 4px;
  font-size:12.5px; color:var(--text2); display:flex; flex-direction:column; align-items:center; gap:3px;
  transition:border-color .15s, background .15s, color .15s;
}
.cat-btn .cat-ico{ font-size:19px; line-height:1; }
.cat-btn:active{ transform:scale(.96); }
.cat-btn.active{ border-color:var(--primary); background:var(--primary-soft); color:var(--primary); font-weight:600; }
.month-nav{ display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
.month-btn{
  border:none; background:var(--soft); border-radius:10px; padding:6px 14px;
  font-size:14px; color:var(--text2); font-weight:600; transition:background .15s;
}
.month-btn:active{ background:var(--hover); }
.month-label{ font-size:16px; font-weight:700; letter-spacing:-.2px; font-variant-numeric:tabular-nums; }
.ov-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin-bottom:14px; }
.ov-cell{ background:var(--input); border:1px solid var(--line); border-radius:12px; padding:12px; text-align:center; min-width:0; }
.ov-cell b{ display:block; font-size:17px; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ov-cell span{ font-size:11px; color:var(--muted); }
.ov-income b{ color:var(--success); } .ov-expense b{ color:var(--danger); } .ov-balance b{ color:var(--primary); }
/* 记账预算 */
.budget-row{ display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.budget-label{ flex:none; font-size:13px; font-weight:600; color:var(--text2); }
.budget-input-wrap{ flex:1; display:flex; align-items:center; gap:4px; border:1px solid var(--line); border-radius:10px; background:var(--input); padding:0 10px; min-width:0; }
.budget-input-wrap .cur{ font-size:14px; font-weight:700; color:var(--muted); }
.budget-input-wrap input{ flex:1; min-width:0; border:none; outline:none; background:transparent; font-size:14px; font-weight:600; padding:8px 0; color:var(--text); font-variant-numeric:tabular-nums; }
.budget-bar-wrap{ margin-bottom:12px; }
.budget-bar{ height:8px; background:var(--soft); border-radius:999px; overflow:hidden; }
.budget-fill{ height:100%; background:var(--primary); border-radius:999px; transition:width .35s ease; }
.budget-fill.warn{ background:var(--warning); }
.budget-fill.over{ background:var(--danger); }
.budget-meta{ display:flex; justify-content:space-between; margin-top:5px; font-size:12px; color:var(--muted); font-variant-numeric:tabular-nums; }
.pie-box{ position:relative; height:230px; }
.tx-group{ margin-bottom:16px; }
.tx-date{ font-size:12.5px; color:var(--muted); font-weight:600; margin-bottom:4px; padding:0 2px; }
.tx-item{ display:flex; align-items:center; gap:10px; padding:10px 2px; border-bottom:1px solid var(--line); }
.tx-item:last-child{ border-bottom:none; }
.tx-ico{ flex:none; width:34px; height:34px; border-radius:10px; background:var(--primary-soft); display:flex; align-items:center; justify-content:center; font-size:16px; }
.tx-body{ flex:1; min-width:0; }
.tx-note{ font-size:14px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tx-cat{ font-size:11px; color:var(--muted); }
.tx-amt{ flex:none; font-size:15px; font-weight:700; font-variant-numeric:tabular-nums; }
.tx-amt.expense{ color:var(--danger); }
.tx-amt.income{ color:var(--success); }
.tx-del, .med-del{
  flex:none; border:none; background:none; color:var(--placeholder);
  font-size:14px; padding:6px 2px 6px 8px; border-radius:8px; transition:color .15s;
}
.tx-del:hover, .med-del:hover{ color:var(--danger); }
.tx-del.armed, .med-del.armed{ color:#DC2626; font-weight:700; font-size:12px; background:var(--danger-soft); padding:5px 8px; border-radius:8px; }

/* ============ 服药模块 ============ */
.med-card{ display:flex; align-items:center; gap:12px; padding:12px 2px; border-bottom:1px solid var(--line); }
.med-card:last-child{ border-bottom:none; }
.med-ico{ flex:none; width:34px; height:34px; border-radius:10px; background:var(--success-soft); display:flex; align-items:center; justify-content:center; font-size:16px; }
.med-info{ flex:1; min-width:0; }
.med-name{ font-size:15px; font-weight:600; word-break:break-all; }
.med-dosage{ font-size:12px; color:var(--muted); margin-top:2px; word-break:break-all; }
.med-slots-dots{ display:flex; gap:6px; flex:none; }
.slot-dot{
  flex:none; min-width:30px; height:30px; padding:0 6px; border-radius:999px;
  border:2px solid var(--border2); background:#fff; display:flex; align-items:center; justify-content:center;
  font-size:11px; color:var(--muted); transition:all .15s;
}
.slot-dot.taken{ background:var(--success); border-color:var(--success); color:#fff; font-weight:700; }
.slot-dot.missed{ border-color:var(--danger); border-style:dashed; background:var(--danger-soft); color:#DC2626; font-weight:600; position:relative; }
.slot-dot.missed .missed-flag{ position:absolute; top:-8px; right:-6px; font-size:9px; }
.slot-tag{ display:inline-block; font-size:11px; border-radius:999px; padding:2px 8px; background:var(--soft); color:var(--text2); margin-right:6px; margin-top:2px; }
.slot-picker{ display:flex; gap:8px; margin-bottom:12px; }
.slot-opt{
  flex:1; border:1px solid var(--line); background:var(--input); border-radius:10px;
  padding:9px 0; font-size:13px; color:var(--text2); transition:all .15s;
}
.slot-opt.active{ border-color:var(--success); background:var(--success-soft); color:#059669; font-weight:600; }
#meds-date-label{ font-size:12px; color:var(--muted); font-weight:500; }

/* ============ 桌面适配 ============ */
@media (min-width:900px){
  #sidebar{ display:flex; }
  #tabbar{ display:none; }
  #main{ margin-left:var(--sidebar-w); padding:28px 32px 48px; }
  .books-layout{ flex-direction:row; align-items:flex-start; }
  .pane-list{ width:270px; flex:none; position:sticky; top:24px; max-height:calc(100vh - 48px); overflow-y:auto; }
  .pane-read{ flex:1; min-width:0; }
  .lib-list{ flex-direction:column; overflow:visible; }
  .lib-item{ width:auto; flex-direction:row; align-items:center; justify-content:space-between; gap:8px; }
  .lib-title{ -webkit-line-clamp:1; }
  #toast{ bottom:32px; }
}

/* 指挥台 v2：行动 + 提醒分组 */
.actions-wrap{ max-width:680px; margin:0 auto 12px; }
.actions-card{ background:var(--card); border-radius:16px; padding:14px 16px; box-shadow:var(--shadow); }
.actions-head{ display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.actions-head b{ font-size:15px; }
.actions-stats{ margin-left:auto; font-size:12px; color:var(--muted); }
.action-item{ display:flex; align-items:flex-start; gap:10px; padding:8px 0; border-top:1px solid var(--soft); }
.action-item:first-of-type{ border-top:none; }
.action-check{ width:22px; height:22px; border-radius:50%; border:2px solid var(--placeholder); flex:none; cursor:pointer; display:flex; align-items:center; justify-content:center; font-size:12px; color:transparent; margin-top:1px; }
.action-check.on{ background:#10B981; border-color:#10B981; color:#fff; }
.action-item.done .action-title{ text-decoration:line-through; color:var(--muted); }
.action-title{ font-size:14px; line-height:1.4; flex:1; }
.action-src{ font-size:11px; color:var(--muted); }
.rem-group{ margin-top:8px; }
.rem-group-title{ font-size:12px; font-weight:600; color:var(--muted); margin:6px 0 4px; display:flex; align-items:center; gap:6px; }
.rem-group-title .gcount{ background:var(--soft); border-radius:999px; padding:1px 7px; font-weight:500; }
.rem-group.overdue .rem-group-title{ color:#AA2E26; }
.rem-group.today .rem-group-title{ color:#25437C; }
.rem-group.habit .rem-group-title{ color:#347659; }
.cal-src-feishu{ color:#3370FF; }
.cal-src-mac{ color:#347659; }

/* 登录门禁 */
#app-shell.hidden,#tabbar.hidden{ display:none !important; }
.login-gate{
  position:fixed; inset:0; z-index:9999; background:var(--bg);
  display:flex; align-items:center; justify-content:center; padding:24px;
}
.login-gate.hidden{ display:none !important; }
.login-card{
  width:min(400px,100%); background:var(--card); border-radius:20px;
  box-shadow:0 8px 32px rgba(0,0,0,.08); padding:28px 24px 22px;
}
.login-card h1{ font-size:22px; letter-spacing:-.3px; margin-bottom:4px; }
.login-card .sub{ color:var(--muted); font-size:13px; margin-bottom:18px; }
.login-card input{
  width:100%; font-size:16px; padding:12px 14px; border-radius:12px;
  border:1px solid var(--line); background:var(--soft); outline:none;
}
.login-card input:focus{ border-color:var(--primary); background:#fff; }
.login-card .btn-login{
  width:100%; margin-top:12px; padding:12px; border:none; border-radius:12px;
  background:var(--primary); color:#fff; font-size:16px; font-weight:600; cursor:pointer;
}
.login-card .btn-login:active{ opacity:.85; }
.login-err{ color:var(--danger); font-size:13px; margin-top:10px; min-height:18px; }

/* ============ 全局搜索 ============ */
.search-entry{
  position:absolute; top:0; right:0; width:38px; height:38px; border:none; border-radius:12px;
  background:var(--primary-soft); color:var(--primary); font-size:16px; cursor:pointer;
  display:flex; align-items:center; justify-content:center; transition:transform .12s, opacity .15s;
}
.search-entry:active{ transform:scale(.92); }
.page-head{ position:relative; }
.search-panel{
  position:fixed; inset:0; z-index:120; background:var(--bg);
  display:flex; flex-direction:column; padding:14px 14px calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 16px);
}
.search-panel.hidden{ display:none !important; }
.search-box{ display:flex; align-items:center; gap:10px; background:var(--card); border-radius:14px; box-shadow:var(--shadow); padding:10px 14px; margin:4px 0 12px; }
.search-ico{ font-size:16px; }
.search-box input{ flex:1; min-width:0; border:none; outline:none; font-size:15px; background:transparent; color:var(--text); }
.search-close{ flex:none; width:30px; height:30px; border:none; border-radius:10px; background:var(--soft); color:var(--text2); font-size:13px; cursor:pointer; }
.search-results{ flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; padding-bottom:24px; }
.search-count{ font-size:12px; color:var(--muted); padding:2px 4px 10px; }
.search-group{ margin-bottom:16px; }
.search-group-title{ font-size:13px; font-weight:700; color:var(--text2); margin-bottom:6px; display:flex; align-items:center; gap:6px; }
.search-group-title .gcount{ background:var(--soft); border-radius:999px; padding:1px 7px; font-weight:500; font-size:11px; }
.search-item{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  background:var(--card); border:1px solid var(--line); border-radius:12px;
  padding:10px 12px; margin-bottom:6px;
}
.search-item b{ flex:1; min-width:0; font-size:14px; font-weight:600; word-break:break-all; }
.sr-amt{ flex:none; font-size:14px; font-weight:700; font-variant-numeric:tabular-nums; }
.sr-amt.expense{ color:var(--danger); }
.sr-amt.income{ color:var(--success); }
.sr-sub{ flex-basis:100%; font-size:11.5px; color:var(--muted); }
.sr-more{ font-size:11.5px; color:var(--muted); padding:2px 4px; }

/* ============ 温馨提示横幅（早/中/晚，顶部不折叠） ============ */
.tip-banner{ position:relative; overflow:hidden; margin:0 0 14px; padding:14px 18px 14px 22px; border-radius:16px; background:var(--card); border:1px solid var(--line); box-shadow:0 2px 10px rgba(0,0,0,.05); }
.tip-glow{ position:absolute; left:0; top:0; bottom:0; width:5px; background:linear-gradient(180deg,#F59E0B,#8B5CF6,#06B6D4); }
.tip-head{ display:flex; align-items:center; gap:8px; margin-bottom:8px; }
.tip-ico{ font-size:18px; }
.tip-title{ font-size:15px; font-weight:700; }
.tip-period{ font-size:11px; color:var(--primary); background:var(--primary-soft); border-radius:999px; padding:2px 10px; font-weight:600; }
.tip-body{ display:flex; flex-direction:column; gap:8px; }
.tip-city-block{ display:flex; flex-direction:column; gap:4px; padding:6px 0; border-bottom:1px dashed var(--line); }
.tip-city-block:last-of-type{ border-bottom:none; }
.tip-line{ display:flex; align-items:baseline; gap:10px; font-size:13px; flex-wrap:wrap; }
.tip-city{ font-weight:600; color:var(--text); }
.tip-cond{ font-weight:600; color:var(--primary); }
.tip-meta{ color:var(--muted); font-size:12px; font-variant-numeric:tabular-nums; }
.tip-sub{ gap:8px; margin-top:2px; }
.tip-tag{ font-size:12px; color:var(--text2); background:var(--soft); border-radius:999px; padding:2px 10px; }
.tip-care-line{ font-size:12.5px; color:var(--primary); }
.tip-positive{ margin-top:6px; padding:10px 14px; border-radius:12px; background:var(--primary-soft); color:var(--primary); font-size:13.5px; font-weight:600; line-height:1.6; }
.tip-quote{ margin-top:8px; padding:12px 14px; border-radius:12px; background:linear-gradient(135deg, var(--primary-soft), var(--soft)); text-align:center; }
.tip-quote-cn{ font-size:14px; font-weight:700; color:var(--text); letter-spacing:.5px; }
.tip-quote-en{ margin-top:3px; font-size:11.5px; color:var(--muted); font-style:italic; }

/* ============ 返回顶部 / 下拉刷新 ============ */
.back-top{
  position:fixed; right:18px; bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 24px);
  width:42px; height:42px; border-radius:50%; border:none;
  background:var(--card); color:var(--primary); font-size:18px; font-weight:700;
  box-shadow:0 4px 16px rgba(0,0,0,.14); z-index:80;
  display:flex; align-items:center; justify-content:center;
  transition:transform .15s, opacity .15s; cursor:pointer;
}
.back-top:active{ transform:scale(.92); }
.pull-tip{
  position:fixed; top:8px; left:50%; transform:translateX(-50%);
  background:rgba(26,26,26,.88); color:#fff; font-size:13px;
  padding:8px 18px; border-radius:999px; z-index:95; pointer-events:none;
}
@media (min-width:900px){ .back-top{ bottom:32px; } }
/* ============ 深色模式 ============ */
/* 跟随系统（媒体查询） */
@media (prefers-color-scheme: dark){
  :root{
  --bg:#101014; --card:#1C1C22; --text:#F2F2F7; --muted:#9898A3;
  --primary:#818CF8; --primary-soft:#26264A;
  --success:#34D399; --success-soft:#12352A;
  --warning:#FBBF24; --warning-soft:#3A2E12;
  --danger:#F87171; --danger-soft:#3A1D1D;
  --line:#2A2A33;
  --shadow:0 1px 3px rgba(0,0,0,0.35);
  --soft:#26262E; --input:#23232B; --hover:#2A2A33;
  --text2:#C9C9D2; --placeholder:#6E6E78;
  --border2:#4A4A55; --hm-empty:#2A2A33;
  --tabbar-bg:rgba(28,28,34,.92);
  --pre-bg:#14141B; --pre-fg:#D4D4DE;
  --markdown-accent:#A5B4FC;
  }
  #sidebar{ background:var(--card); }
  .side-item:hover{ background:var(--hover); }
  .login-card input{ background:var(--input); }
  .markdown-body code{ color:#E879F9; }
  .markdown-body pre{ background:var(--pre-bg); color:var(--pre-fg); }
  .markdown-body blockquote{ background:var(--primary-soft); color:var(--markdown-accent); }
  .markdown-body th{ background:var(--soft); }
  .sum-snippet{ color:var(--text2); border-left-color:var(--primary-soft); }
  .full-body{ color:var(--text2); }
  .brief-sec-body{ color:var(--text2); }
  .p-high{ background:var(--danger-soft); color:#FCA5A5; }
  .p-mid{ background:var(--warning-soft); color:#FCD34D; }
  .p-low{ background:var(--success-soft); color:#6EE7B7; }
  .b-reading{ background:var(--primary-soft); color:#A5B4FC; }
  .b-done{ background:var(--success-soft); color:#6EE7B7; }
  .ov-income b{ color:var(--success); } .ov-expense b{ color:var(--danger); }
  .tx-amt.expense{ color:var(--danger); } .tx-amt.income{ color:var(--success); }
  .sum-expand{ background:var(--primary-soft); color:#A5B4FC; }
  .btn.ghost{ background:var(--soft); color:var(--text2); }
  .month-btn{ background:var(--soft); color:var(--text2); }
  .tx-type-btn{ background:var(--soft); color:var(--text2); }
  .slot-opt{ background:var(--input); }
  .slot-tag{ background:var(--soft); color:var(--text2); }
  .cal-src-feishu{ color:#8AB4F8; }
}
/* 手动切换（设置页 / html.dark 类） */
html.dark{
  --bg:#101014; --card:#1C1C22; --text:#F2F2F7; --muted:#9898A3;
  --primary:#818CF8; --primary-soft:#26264A;
  --success:#34D399; --success-soft:#12352A;
  --warning:#FBBF24; --warning-soft:#3A2E12;
  --danger:#F87171; --danger-soft:#3A1D1D;
  --line:#2A2A33;
  --shadow:0 1px 3px rgba(0,0,0,0.35);
  --soft:#26262E; --input:#23232B; --hover:#2A2A33;
  --text2:#C9C9D2; --placeholder:#6E6E78;
  --border2:#4A4A55; --hm-empty:#2A2A33;
  --tabbar-bg:rgba(28,28,34,.92);
  --pre-bg:#14141B; --pre-fg:#D4D4DE;
  --markdown-accent:#A5B4FC;
  }
html.dark{
  #sidebar{ background:var(--card); }
  .side-item:hover{ background:var(--hover); }
  .login-card input{ background:var(--input); }
  .markdown-body code{ color:#E879F9; }
  .markdown-body pre{ background:var(--pre-bg); color:var(--pre-fg); }
  .markdown-body blockquote{ background:var(--primary-soft); color:var(--markdown-accent); }
  .markdown-body th{ background:var(--soft); }
  .sum-snippet{ color:var(--text2); border-left-color:var(--primary-soft); }
  .full-body{ color:var(--text2); }
  .brief-sec-body{ color:var(--text2); }
  .p-high{ background:var(--danger-soft); color:#FCA5A5; }
  .p-mid{ background:var(--warning-soft); color:#FCD34D; }
  .p-low{ background:var(--success-soft); color:#6EE7B7; }
  .b-reading{ background:var(--primary-soft); color:#A5B4FC; }
  .b-done{ background:var(--success-soft); color:#6EE7B7; }
  .ov-income b{ color:var(--success); } .ov-expense b{ color:var(--danger); }
  .tx-amt.expense{ color:var(--danger); } .tx-amt.income{ color:var(--success); }
  .sum-expand{ background:var(--primary-soft); color:#A5B4FC; }
  .btn.ghost{ background:var(--soft); color:var(--text2); }
  .month-btn{ background:var(--soft); color:var(--text2); }
  .tx-type-btn{ background:var(--soft); color:var(--text2); }
  .slot-opt{ background:var(--input); }
  .slot-tag{ background:var(--soft); color:var(--text2); }
  .cal-src-feishu{ color:#8AB4F8; }
}
