/* ===== 个人工作台 · 浅色 / 深色 双主题 =====
 *
 * 主题靠 <html data-theme="light|dark"> 切换，只换变量不换结构。
 * :root 放浅色（默认），:root[data-theme="dark"] 覆盖成深色。
 * color-scheme 必须跟着设：不然浅色下的原生日期控件、下拉框还是黑的。
 */

/* ---------- 浅色（默认） ---------- */
:root{
  color-scheme:light;
  --bg:#f3f5f8;
  --surface:#ffffff;
  --surface-2:#eef1f5;
  --line:#e2e7ee;
  --text:#1a1f28;
  --text-dim:#67717f;

  --brand:#0a7f5f;
  --brand-dim:#8cc9b4;
  --brand-ink:#ffffff;              /* 品牌色底上的文字 */
  --brand-soft:rgba(10,127,95,.09);
  --brand-soft-2:rgba(10,127,95,.13);
  --brand-edge:rgba(10,127,95,.25);

  --danger:#cf3339;
  --danger-soft:rgba(207,51,57,.09);
  --danger-soft-2:rgba(207,51,57,.14);
  --danger-line:rgba(207,51,57,.28);

  --warn:#96601a;
  --warn-soft:rgba(150,96,26,.14);

  --placeholder:#9aa4b2;
  --topbar-bg:rgba(243,245,248,.92);
  --tabbar-bg:rgba(255,255,255,.94);
  --overlay:rgba(15,23,42,.45);
  --card-shadow:0 1px 2px rgba(16,24,40,.05),0 1px 3px rgba(16,24,40,.06);
}

/* ---------- 深色 ---------- */
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0e1116;
  --surface:#171b22;
  --surface-2:#1f242d;
  --line:#262c36;
  --text:#e8ecf1;
  --text-dim:#8b95a3;

  --brand:#35d0a5;
  --brand-dim:#1e6b58;
  --brand-ink:#06231c;
  --brand-soft:rgba(53,208,165,.10);
  --brand-soft-2:rgba(53,208,165,.15);
  --brand-edge:rgba(53,208,165,.25);

  --danger:#ff6b6b;
  --danger-soft:rgba(255,107,107,.12);
  --danger-soft-2:rgba(255,107,107,.16);
  --danger-line:rgba(255,107,107,.30);

  --warn:#f5b942;
  --warn-soft:rgba(245,185,66,.15);

  --placeholder:#5b6472;
  --topbar-bg:rgba(14,17,22,.92);
  --tabbar-bg:rgba(23,27,34,.96);
  --overlay:rgba(0,0,0,.6);
  --card-shadow:none;
}

*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
/* 尺寸与主题无关，挂在 html 上（不在 :root 块里）——
   check_dom.mjs 会把 :root 的两套调色板逐项比对，共用变量放这儿不参与比对。 */
html{
  -webkit-text-size-adjust:100%;
  background:var(--bg);
  --radius:18px;
  --radius-lg:24px;
  --tab-h:62px;
}
body{
  background:var(--bg);
  color:var(--text);
  font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",-apple-system,"Segoe UI",system-ui,sans-serif;
  font-size:16px;line-height:1.55;
  min-height:100vh;
}
.hidden{display:none !important}
.grow{flex:1}
.muted{color:var(--text-dim);font-size:14px;line-height:1.7}
.c-brand{color:var(--brand)}
.c-danger{color:var(--danger)}

/* ---------- 登录 ---------- */
.auth{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.auth-card{
  width:100%;max-width:380px;background:var(--surface);
  border-radius:var(--radius-lg);padding:28px 22px;box-shadow:var(--card-shadow);
}
.auth-logo{
  display:inline-block;font-size:12px;letter-spacing:.14em;color:var(--brand);
  background:var(--brand-soft);border:1px solid var(--brand-edge);
  padding:4px 10px;border-radius:999px;margin-bottom:16px;
}
.auth-card h1{font-size:24px;margin-bottom:6px}
.auth-sub{color:var(--text-dim);font-size:14px;margin-bottom:22px}
.auth-msg{color:var(--danger);font-size:14px;min-height:20px;margin-top:12px}

/* ---------- 骨架 ---------- */
.app{
  max-width:560px;margin:0 auto;min-height:100vh;
  padding-bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 16px);
}
.topbar{
  position:sticky;top:0;z-index:20;
  display:flex;align-items:center;justify-content:space-between;
  padding:calc(env(safe-area-inset-top) + 14px) 18px 12px;
  background:var(--topbar-bg);backdrop-filter:blur(12px);
}
.topbar h1{font-size:22px;font-weight:650}
.topbar-right{display:flex;align-items:center;gap:9px}
.pages{padding:4px 14px 0}

/* 同步状态胶囊 */
.sync-pill{
  display:inline-flex;align-items:center;gap:6px;
  font-size:12px;color:var(--text-dim);
  background:var(--surface);border-radius:999px;padding:5px 11px;
}
.sync-pill i{width:7px;height:7px;border-radius:50%;background:var(--brand);flex:none}
.sync-pill em{font-style:normal}
.sync-pill.offline i{background:var(--text-dim)}
.sync-pill.syncing i{background:var(--warn);animation:pulse 1s infinite}
.sync-pill.error i{background:var(--danger)}
@keyframes pulse{50%{opacity:.3}}

/* ---------- 卡片 ---------- */
.card{
  background:var(--surface);border-radius:var(--radius-lg);
  padding:18px;margin-bottom:14px;box-shadow:var(--card-shadow);
}
.card h2{font-size:15px;font-weight:600;color:var(--text-dim);margin-bottom:14px;letter-spacing:.02em}

/* ---------- 表单 ---------- */
.field{display:block;margin-bottom:14px}
.field > span{display:block;font-size:13px;color:var(--text-dim);margin-bottom:7px}
input,select{
  width:100%;background:var(--surface-2);border:1px solid var(--line);
  border-radius:var(--radius);padding:13px 14px;color:var(--text);
  font-size:16px;font-family:inherit;outline:none;
}
input:focus,select:focus{border-color:var(--brand-dim)}
input::placeholder{color:var(--placeholder)}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--text-dim) 50%),linear-gradient(135deg,var(--text-dim) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
input[type=date]{min-height:50px}

.row{display:flex;gap:12px;align-items:flex-start}
.row .field{margin-bottom:14px}
.btn-row{display:flex;gap:10px;align-items:center}
.btn-row.wrap{flex-wrap:wrap}
.btn-row.wrap > button{flex:1 1 calc(50% - 5px)}

/* ---------- 按钮 ---------- */
button{font-family:inherit;font-size:16px;cursor:pointer;border:none;background:none;color:inherit}
.btn-primary,.btn-ghost,.btn-danger{
  padding:13px 18px;border-radius:var(--radius);font-weight:600;
  min-height:48px;transition:opacity .15s;
}
.btn-primary{background:var(--brand);color:var(--brand-ink)}
.btn-ghost{background:var(--surface-2);color:var(--text);border:1px solid var(--line)}
.btn-danger{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-line)}
.btn-primary:active,.btn-ghost:active,.btn-danger:active{opacity:.7}
.btn-block{width:100%}
.icon-btn{
  width:36px;height:36px;border-radius:12px;background:var(--surface-2);
  color:var(--text-dim);font-size:20px;line-height:1;display:flex;
  align-items:center;justify-content:center;transition:opacity .15s;
}
.icon-btn svg{width:20px;height:20px;display:block}
.icon-btn:active{opacity:.7}

/* ---------- 支出/收入切换 ---------- */
.seg{display:flex;background:var(--surface-2);border-radius:var(--radius);padding:4px;margin-bottom:16px}
.seg button{flex:1;padding:10px;border-radius:14px;color:var(--text-dim);font-weight:600;min-height:42px}
.seg button.on{background:var(--brand);color:var(--brand-ink)}
.card > .seg:last-child{margin-bottom:0}

/* ---------- 分类选择 ---------- */
.cats{display:flex;flex-wrap:wrap;gap:8px}
.cats button{
  padding:9px 15px;border-radius:999px;background:var(--surface-2);
  border:1px solid var(--line);color:var(--text-dim);font-size:14px;min-height:40px;
}
.cats button.on{background:var(--brand-soft-2);border-color:var(--brand);color:var(--brand)}

/* ---------- 列表 ---------- */
.list{display:flex;flex-direction:column}
.item{
  display:flex;align-items:center;gap:12px;padding:13px 0;
  border-bottom:1px solid var(--line);
}
.item:last-child{border-bottom:none}
.item-main{flex:1;min-width:0}
.item-title{font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item-sub{font-size:12.5px;color:var(--text-dim);margin-top:3px}
.item-amt{font-size:16px;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap}
.item-acts{display:flex;gap:6px;flex:none}
.mini{
  padding:7px 11px;border-radius:11px;background:var(--surface-2);
  color:var(--text-dim);font-size:13px;border:1px solid var(--line);min-height:34px;
}
.mini.danger{color:var(--danger)}
.mini.ok{color:var(--brand)}
.empty{color:var(--text-dim);font-size:14px;text-align:center;padding:22px 0}

/* ---------- 待办 ---------- */
.pri{font-size:11px;font-weight:700;padding:2.5px 7px;border-radius:7px;flex:none}
.pri-P0{background:var(--danger-soft-2);color:var(--danger)}
.pri-P1{background:var(--warn-soft);color:var(--warn)}
.pri-P2{background:var(--surface-2);color:var(--text-dim)}
.todo-done .item-title{text-decoration:line-through;color:var(--text-dim)}
.overdue{color:var(--danger)}

/* ---------- 今天要处理 ---------- */
.today-list{display:flex;flex-direction:column;gap:9px}
.today-item{display:flex;align-items:center;gap:11px;background:var(--surface-2);border-radius:14px;padding:12px 13px}
.today-item .txt{flex:1;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tag{font-size:11px;font-weight:700;padding:3px 8px;border-radius:7px;flex:none}
.tag-overdue{background:var(--danger-soft-2);color:var(--danger)}
.tag-today{background:var(--brand-soft-2);color:var(--brand)}
.tag-soon{background:var(--warn-soft);color:var(--warn)}
.today-empty{color:var(--text-dim);font-size:14px;text-align:center;padding:16px 0}

/* ---------- 月度概览 ---------- */
.month-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.month-head > span{font-size:15px;font-weight:600}
.stat-row{display:flex;gap:10px}
.stat{flex:1;text-align:center;min-width:0}
.stat span{display:block;font-size:12.5px;color:var(--text-dim);margin-bottom:5px}
.stat b{font-size:17px;font-weight:650;font-variant-numeric:tabular-nums;word-break:break-all}

/* ---------- 环形图 ---------- */
.donut-wrap{display:flex;justify-content:center;margin-bottom:14px}
.donut-wrap svg{width:170px;height:170px}
.donut-wrap svg text{fill:var(--text-dim);font-size:11px}
.donut-wrap svg text.donut-total{fill:var(--text);font-size:17px;font-weight:600}
.donut-legend{display:flex;flex-direction:column;gap:8px}
.legend-row{display:flex;align-items:center;gap:9px;font-size:14px}
.legend-dot{width:9px;height:9px;border-radius:3px;flex:none}
.legend-name{flex:1;color:var(--text-dim)}
.legend-val{font-variant-numeric:tabular-nums}

/* ---------- 趋势图 ---------- */
.trend-wrap svg{width:100%;height:120px;display:block}
.trend-wrap svg line{stroke:var(--line)}
.trend-wrap svg rect.bar-expense{fill:var(--danger)}
.trend-wrap svg rect.bar-income{fill:var(--brand)}
.trend-labels{display:flex;justify-content:space-between;margin-top:6px}
.trend-labels span{font-size:11px;color:var(--text-dim)}

/* ---------- 习惯 ---------- */
.habit-grid{display:grid;grid-template-columns:1fr;gap:12px}
.habit{background:var(--surface);border-radius:var(--radius-lg);padding:17px 18px;box-shadow:var(--card-shadow)}
.habit-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.habit-name{font-size:16px;font-weight:600}
.habit-stat{font-size:13px;color:var(--text-dim);margin-top:7px}
.habit-stat b{color:var(--brand);font-size:16px;font-variant-numeric:tabular-nums}
.habit-act{margin-top:13px;display:flex;gap:9px}
.habit-act .btn-primary,.habit-act .btn-ghost{flex:1;min-height:44px;padding:11px}
.habit-act .done{background:var(--brand-soft-2);color:var(--brand);border:1px solid var(--brand-dim)}

/* ---------- 底部导航 ---------- */
.tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:30;
  max-width:560px;margin:0 auto;display:flex;
  background:var(--tabbar-bg);backdrop-filter:blur(14px);
  border-top:1px solid var(--line);
  padding-bottom:env(safe-area-inset-bottom);
}
.tabbar button{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:3px;height:var(--tab-h);color:var(--text-dim);font-size:11px;
}
.tabbar button svg{width:23px;height:23px;fill:currentColor}
.tabbar button.on{color:var(--brand)}

/* ---------- toast ---------- */
.toast{
  position:fixed;left:50%;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 24px);
  transform:translate(-50%,14px);z-index:60;
  background:var(--surface-2);border:1px solid var(--line);
  color:var(--text);padding:11px 19px;border-radius:14px;font-size:14px;
  opacity:0;pointer-events:none;transition:.22s;max-width:88vw;text-align:center;
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- 弹窗 ---------- */
.modal-wrap{
  position:fixed;inset:0;z-index:70;background:var(--overlay);
  display:flex;align-items:center;justify-content:center;padding:24px;
}
.modal{
  width:100%;max-width:360px;background:var(--surface);
  border-radius:var(--radius-lg);padding:22px;box-shadow:var(--card-shadow);
}
.modal h3{font-size:17px;margin-bottom:10px}
.modal p{font-size:14px;color:var(--text-dim);line-height:1.7;margin-bottom:20px}
.modal b{color:var(--text)}

/* ---------- 专属链接 ---------- */
.link-box{
  margin-top:12px;background:var(--surface-2);border:1px solid var(--line);
  border-radius:14px;padding:12px;font-size:12.5px;line-height:1.6;
  word-break:break-all;color:var(--brand);
  font-family:ui-monospace,Menlo,Consolas,monospace;
}
