
:root{
  --paper:#FCF3F3;
  --paper-2:#F9E6E7;
  --sheet:#FFFAFA;
  --ink:#42333A;
  --ink-2:#7A6168;
  --muted:#AC929A;
  --line:#EFDBDE;
  --line-2:#F6E7E9;
  --rose:#C25A6E;
  --rose-deep:#A6475A;
  --rose-soft:#F7DCE1;
  --rose-rgb:194,90,110;
  --rose-soft-rgb:247,220,225;
  --rose-line:color-mix(in srgb,var(--rose) 42%,var(--paper));
  --good:#5D7F6B;
  --good-soft:#E4F0E9;
  --cash:#B08A5E;
  --donate:#CBA8B0;
  --bbz:#6C86A8;
  --bbz-soft:#E9EEF5;
  --r:12px;
  --shadow:0 8px 24px rgba(122,79,90,.07);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:
    radial-gradient(120% 55% at 50% -8%, var(--paper-2) 0%, rgba(var(--rose-rgb),0) 62%),
    var(--paper);
  color:var(--ink);
  font-family:"Quicksand","PingFang SC","HarmonyOS Sans SC","Hiragino Sans GB","Noto Sans SC","Microsoft YaHei",system-ui,sans-serif;
  font-size:15px;line-height:1.68;-webkit-font-smoothing:antialiased;min-height:100vh;
  letter-spacing:.01em;
  font-variant-numeric:tabular-nums;
}
.wrap{max-width:1120px;margin:0 auto;padding:20px 16px 96px}

/* 入场动画 */
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes fadein{from{opacity:0}to{opacity:1}}
@keyframes pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
.anim{animation:rise .52s cubic-bezier(.22,.7,.3,1) both}
.ledger{animation-delay:.06s}
.board{animation-delay:.1s}
.report{animation-delay:.16s}
.week{animation-delay:.2s}

/* ===== 页头 ===== */
.head{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 16px;padding-bottom:14px;
  border-bottom:1px solid var(--line);margin-bottom:14px}
.head .mark{flex:1 1 auto;min-width:0}
.head .mark h1{font-size:25px;line-height:1.25;margin:0;letter-spacing:.06em;font-weight:600;color:var(--ink)}
.head .mark p{margin:3px 0 0;font-size:12.5px;color:var(--muted);letter-spacing:.03em}
.settings{display:flex;gap:16px;flex-wrap:wrap}
.set{display:flex;flex-direction:column;gap:2px}
.set span{font-size:11px;color:var(--muted);letter-spacing:.06em}
.set input{
  width:6.6ch;border:0;border-bottom:1px dashed var(--line);background:transparent;color:var(--ink);
  font-size:17px;font-weight:600;text-align:right;padding:2px 0;border-radius:0;outline:none;font-family:inherit;
}
.set input:focus{border-bottom-color:var(--rose);background:rgba(var(--rose-soft-rgb),.4)}
.set input::-webkit-outer-spin-button,.set input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.set input[type=number]{-moz-appearance:textfield}
.setval{font-size:17px;font-weight:600;color:var(--ink);padding:2px 0;font-style:normal}

/* ===== 月份页签 ===== */
.monthbar{display:flex;gap:7px;overflow-x:auto;padding:2px 0 10px;
  -webkit-overflow-scrolling:touch;scrollbar-width:none}
.monthbar::-webkit-scrollbar{display:none}
.mtab{
  flex:0 0 auto;border:1px solid var(--line);background:#FDF0F1;padding:8px 14px;
  font-family:inherit;font-size:13px;color:var(--ink-2);cursor:pointer;border-radius:999px;
  white-space:nowrap;display:flex;align-items:center;gap:6px;transition:all .24s ease;
}
.mtab em{font-style:normal;font-size:10.5px;color:var(--muted)}
.mtab.on{background:var(--rose);color:#FFF8F8;border-color:var(--rose);box-shadow:0 4px 12px rgba(var(--rose-rgb),.22)}
.mtab.on em{color:rgba(255,248,248,.82)}
.mtab .now{font-size:10px;background:rgba(255,255,255,.22);padding:0 5px;border-radius:6px;line-height:1.5}
.mtab:not(.on) .now{background:transparent;color:var(--rose);border:1px solid var(--rose-soft)}

/* ===== 两栏 ===== */
.grid{display:grid;grid-template-columns:1fr;gap:14px}
.board{order:-1;min-width:0}
.ledger{min-width:0}

.card{background:var(--sheet);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow),inset 0 0 0 1px rgba(255,255,255,.65)}

/* ===== 账本 ===== */
.ledger{overflow:hidden}
.addbar{display:flex;gap:8px;padding:13px 13px 10px}
.addbar input{
  flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:10px;
  background:#fff;color:var(--ink);font-size:16px;padding:11px 13px;font-family:inherit;transition:border-color .2s;
}
.addbar input::placeholder{color:color-mix(in srgb,var(--rose) 34%,var(--muted))}
.addbar input:focus{outline:none;border-color:var(--rose);box-shadow:0 0 0 3px var(--rose-soft)}
.addbar button{
  flex:0 0 auto;border:0;border-radius:10px;background:var(--ink);color:#FFF7F7;
  font-size:14.5px;padding:0 18px;cursor:pointer;font-family:inherit;letter-spacing:.06em;
  transition:transform .16s ease,background .2s;
}
.addbar button:active{transform:scale(.96);background:var(--rose-deep)}
.parsehint{padding:0 15px 11px;font-size:11.5px;color:var(--muted);line-height:1.7}

.tabs{display:flex;gap:6px;padding:0 13px 10px}
.tab{
  flex:1;border:1px solid transparent;background:#FDF3F3;font-family:inherit;font-size:13.5px;
  padding:9px 6px;cursor:pointer;color:var(--muted);border-radius:10px;transition:all .22s ease;
}
.tab.on{background:var(--rose-soft);color:var(--rose-deep);font-weight:600}
.tab em{font-style:normal;font-size:11px;color:var(--muted);margin-left:4px}
.tab.on em{color:var(--rose-deep)}

.hintline{padding:0 15px 9px;font-size:11.5px;color:var(--muted);
  display:flex;align-items:center;justify-content:space-between;gap:10px}
.hintline b{color:var(--good)}

.debthint{padding:0 15px 10px;font-size:11.5px;color:var(--ink-2);line-height:1.6;
  display:flex;align-items:center;gap:6px;overflow:hidden;white-space:nowrap}
.debthint .dd{width:5px;height:5px;border-radius:50%;flex:0 0 auto}
.debthint .sep{color:var(--line);margin:0 2px}

.catbar{display:none;gap:6px;overflow-x:auto;padding:9px 0 1px;touch-action:pan-x;
  overscroll-behavior-x:contain;scrollbar-width:none}
.catbar::-webkit-scrollbar{display:none}
.cchip{flex:none;border:1px solid var(--line);background:color-mix(in srgb,var(--rose) 3%,var(--sheet));border-radius:999px;
  padding:5px 10px;font:inherit;font-size:11.5px;color:var(--ink-2);cursor:pointer;
  transition:background .18s,border-color .18s,color .18s,transform .12s}
.cchip:active{transform:scale(.96)}
.cchip.on{background:var(--rose-soft);border-color:var(--rose-line);color:var(--rose-deep);font-weight:600}
.cchip i{font-style:normal;color:var(--muted);margin-left:4px;font-size:10.5px}
.ptag{font-size:9.5px;color:#B0838D;background:#F8ECEE;border-radius:5px;padding:1px 4px;
  margin-right:5px;font-weight:500;vertical-align:1px;letter-spacing:.02em}
.rows{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-2)}
.row{
  display:grid;grid-template-columns:8px 1fr auto 34px;align-items:center;gap:10px;
  padding:11px 13px;border-bottom:1px solid var(--line-2);
  transition:background .18s ease;
  animation:rowIn .32s cubic-bezier(.22,.7,.3,1) both;
}
.rows.still .row{animation:none}
.row:active{background:color-mix(in srgb,var(--rose) 8%,var(--sheet))}
.row:hover{background:color-mix(in srgb,var(--rose) 5%,var(--sheet))}
.row:last-child{border-bottom:0}
.row .dot{width:8px;height:8px;border-radius:50%}
.row .meta{min-width:0}
.row .meta .name{font-size:15px;font-weight:600;display:block;line-height:1.45}
.row .meta .sub{font-size:11.5px;color:var(--muted);line-height:1.6;display:flex;align-items:center;gap:5px;min-width:0}
.row .meta .sub .txt{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chip{
  flex:0 0 auto;border:0;background:#F8E9EB;color:var(--ink-2);font-family:inherit;
  font-size:10.5px;padding:2px 7px;border-radius:7px;cursor:pointer;line-height:1.6;transition:background .2s;
}
.chip:hover{background:var(--rose-soft)}
.chip.wx{background:#E8F1EC;color:#416E55}
.chip.ali{background:#EAF0F7;color:#456388}
.chip.cash{background:#F6EFE4;color:#8B6A42}
.dchip{
  flex:0 0 auto;font-size:10.5px;padding:2px 7px;border-radius:7px;line-height:1.6;cursor:default;
}
.dchip.red{background:#FBE4E7;color:#B53E52}
.dchip.green{background:var(--good-soft);color:#3F6B52}
.amtbtn{
  border:0;background:transparent;font-family:inherit;font-size:16px;font-weight:600;color:var(--ink);
  padding:6px 4px;min-width:74px;text-align:right;cursor:pointer;border-radius:8px;transition:background .18s;
}
.amtbtn:hover{background:var(--rose-soft)}
.amtbtn.impulse{color:var(--rose)}
.amtbtn.inc{color:var(--good)}
.amtbtn.debtRed{color:#B53E52}
.amtbtn.debtGreen{color:#3F6B52}
.amtinput{
  border:0;border-bottom:1.5px solid var(--rose);background:#fff;font-family:inherit;
  font-size:16px;font-weight:600;text-align:right;padding:3px 4px;width:88px;outline:none;
  color:var(--rose-deep);border-radius:4px;
}
.del{
  width:28px;height:28px;border:0;background:transparent;color:#D8C2C7;
  font-size:15px;cursor:pointer;line-height:1;padding:0;border-radius:50%;font-family:inherit;
  transition:all .18s;
}
.del:hover{color:var(--rose);background:var(--rose-soft)}
.empty{padding:32px 16px;text-align:center;color:var(--muted);font-size:13.5px;line-height:1.9}

/* ===== 看板 ===== */
.board{overflow:hidden}
.panel{padding:18px 18px 20px}
.panel + .panel{border-top:1px dashed var(--line)}
.eyebrow{font-size:11.5px;letter-spacing:.14em;color:var(--muted);margin:0}
.big{
  margin:2px 0 0;font-size:clamp(42px,12.2vw,58px);line-height:1.08;font-weight:600;
  letter-spacing:-.015em;color:var(--ink);
}
.big.neg{color:var(--rose)}
.big .cur{font-size:.42em;vertical-align:.6em;margin-right:.1em;font-weight:500;color:var(--ink-2)}
.big.neg .cur{color:var(--rose)}
.subline{margin:6px 0 0;font-size:13.5px;color:var(--ink-2)}
.subline b{font-weight:600;color:var(--ink)}
.iot{display:flex;gap:16px;margin-top:12px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.iot b{font-weight:600}
.iot .up b{color:var(--good)}
.iot .down b{color:var(--ink-2)}
.bar{height:6px;background:var(--rose-soft);margin:14px 0 6px;overflow:hidden;border-radius:999px}
.bar i{display:block;height:100%;width:0;background:var(--rose);transition:width .5s cubic-bezier(.22,.7,.3,1);border-radius:999px}
.barlg{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted)}

h2.sec{font-size:12.5px;letter-spacing:.12em;margin:0 0 14px;color:var(--ink);font-weight:600}
h2.sec::after{content:"";display:block;width:20px;height:2px;border-radius:2px;background:var(--rose);margin-top:7px}

.donutwrap{display:flex;flex-wrap:wrap;gap:16px;align-items:center}
.donut{position:relative;width:130px;height:130px;flex:0 0 auto;border-radius:50%;
  background:conic-gradient(var(--line) 0deg 360deg);transition:background .4s ease}
.donut::after{content:"";position:absolute;inset:0;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(66,51,58,.05)}
.hole{position:absolute;inset:20px;background:var(--sheet);border-radius:50%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px}
.hole b{font-size:15px;font-weight:600}
.hole span{font-size:9.5px;color:var(--muted);letter-spacing:.1em}
.legend{list-style:none;margin:0;padding:0;flex:1 1 150px;min-width:0;display:flex;flex-direction:column;gap:7px}
.legend li em,.rtop li em{font-style:normal;font-size:10px;color:var(--muted);margin-left:5px}
.legend li{display:grid;grid-template-columns:8px 1fr auto;gap:8px;align-items:center;font-size:12.5px}
.legend .d{width:8px;height:8px;border-radius:50%}
.legend .n{color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.legend .v{color:var(--ink);display:flex;gap:7px;align-items:baseline}
.legend .v i{font-style:normal;color:var(--muted);font-size:10.5px;min-width:30px;text-align:right}

.truth ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.truth li{font-size:14.5px;line-height:1.6;color:var(--ink-2);position:relative;padding-left:16px}
.truth li::before{content:"";position:absolute;left:0;top:.55em;width:6px;height:1px;background:var(--rose);border-radius:2px}
.truth li b{color:var(--rose-deep);font-weight:600}

/* ===== 钱包 ===== */
.wallet{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}
.wrow{display:flex;flex-direction:column;gap:6px}
.wtop{display:grid;grid-template-columns:8px 1fr auto auto;align-items:baseline;gap:9px}
.wtop .wd{width:8px;height:8px;border-radius:50%;align-self:center}
.wname{font-size:14.5px;font-weight:600;color:var(--ink);min-width:0}
.wpct{font-size:11.5px;color:var(--muted);text-align:right;min-width:36px}
.wamt{
  border:0;background:transparent;font-family:inherit;font-size:16.5px;font-weight:600;color:var(--ink);
  padding:5px;min-width:86px;text-align:right;cursor:pointer;border-radius:8px;transition:background .18s;
}
.wamt:hover{background:var(--rose-soft)}
.wamt.neg{color:var(--rose)}
.wamt.fixed{cursor:default}
.wamt.fixed:hover{background:transparent}
.winput{
  border:0;border-bottom:1.5px solid var(--rose);background:#fff;font-family:inherit;
  font-size:16px;font-weight:600;text-align:right;color:var(--rose-deep);
  padding:3px 4px;width:96px;outline:none;border-radius:4px;
}
.fzTag{display:inline-block;margin-left:6px;font-size:9px;font-weight:500;color:var(--bbz);background:var(--bbz-soft);
  border:1px solid rgba(108,134,168,.28);padding:1px 5px;border-radius:5px;line-height:1.55;vertical-align:1px;white-space:nowrap}
.wsub{display:flex;align-items:center;gap:5px;padding-left:17px;font-size:10px;color:var(--muted);line-height:1.45}
.wsub::before{content:"";width:3px;height:3px;border-radius:50%;background:var(--bbz);flex:none}
.wbar{height:5px;background:var(--line-2);overflow:hidden;border-radius:999px}
.wbar i{display:block;height:100%;transition:width .5s cubic-bezier(.22,.7,.3,1);border-radius:999px}
.wnote{font-size:11.5px;color:var(--muted);margin:13px 0 0;line-height:1.75}
.wnote b{color:var(--ink-2)}

/* ===== 月报 ===== */
.report{margin-top:14px;position:relative;overflow:hidden}
.report::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:repeating-linear-gradient(90deg,var(--rose) 0 12px,transparent 12px 20px);opacity:.28}
.rhead{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:22px 18px 0}
.rhead h2{margin:0;font-size:19px;letter-spacing:.05em;font-weight:600}
.rhead p{margin:5px 0 0;font-size:11.5px;color:var(--muted);line-height:1.7}
.seal{
  flex:0 0 auto;width:60px;height:60px;border:1.5px solid rgba(var(--rose-rgb),.42);border-radius:50%;
  display:flex;align-items:center;justify-content:center;transform:rotate(-10deg);
  color:rgba(var(--rose-rgb),.7);font-size:12.5px;letter-spacing:.16em;text-indent:.16em;
  line-height:1.2;text-align:center;box-shadow:inset 0 0 0 3px rgba(var(--rose-rgb),.07);
}
.seal.live{border-color:rgba(93,127,107,.4);color:rgba(93,127,107,.72);box-shadow:inset 0 0 0 3px rgba(93,127,107,.06)}
.rgrid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line-2);
  border-bottom:1px solid var(--line-2);margin:16px 16px 0}
.rcell{padding:13px 8px 14px;border-right:1px dashed var(--line-2);min-width:0;text-align:center}
.rcell:last-child{border-right:0}
.rcell span{display:block;font-size:10.5px;color:var(--muted);letter-spacing:.08em;white-space:nowrap}
.rcell b{display:block;font-size:clamp(15px,4.6vw,22px);font-weight:600;margin-top:4px;
  line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rcell b.up{color:var(--good)}
.rcell b.neg{color:var(--rose)}
.rbody{display:grid;grid-template-columns:1fr;gap:20px;padding:18px}
.rleft h3,.rright h3{font-size:11.5px;letter-spacing:.12em;margin:0 0 12px;color:var(--ink);font-weight:600}
.rleft h3::after,.rright h3::after{content:"";display:block;width:16px;height:2px;border-radius:2px;background:var(--rose);margin-top:6px}
.rtop{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}
.rtop li{display:grid;grid-template-columns:70px 1fr auto;gap:9px;align-items:center;font-size:12.5px}
.rtop .rn{color:var(--ink);font-weight:600;min-width:0;display:flex;flex-direction:column;gap:1px}
.rtop .rn em{font-style:normal;font-size:10px;font-weight:400;color:var(--muted);letter-spacing:.02em}
.rtop .rbar{height:5px;background:var(--line-2);overflow:hidden;border-radius:999px}
.rtop .rbar i{display:block;height:100%;border-radius:999px;transition:width .5s ease}
.rtop .rv{color:var(--ink-2);font-size:12px;white-space:nowrap}
.rsays{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.rsays li{font-size:14px;line-height:1.65;color:var(--ink-2);position:relative;padding-left:15px}
.rsays li::before{content:"";position:absolute;left:0;top:.55em;width:5px;height:1px;border-radius:2px;background:var(--rose)}
.rsays li b{color:var(--rose-deep);font-weight:600}
.rextra{font-size:11px;color:var(--muted);margin:6px 0 0;line-height:1.7}
.rfoot{font-size:11px;color:var(--muted);margin:0;padding:0 18px 18px;line-height:1.8}
.rfoot b{color:var(--ink-2)}

/* ===== 周报 ===== */
.week{margin-top:14px;padding:18px}
.week .top{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}
.week h2{font-size:15.5px;margin:0;letter-spacing:.05em;font-weight:600}
.week .top span{font-size:11.5px;color:var(--muted)}
.week .line{height:1px;background:linear-gradient(90deg,var(--ink),transparent);margin:12px 0 14px;opacity:.35}
.week .k{font-size:14.5px;line-height:1.7;margin:0 0 6px;color:var(--ink-2)}
.week .k b{color:var(--ink);font-weight:600}
.week .verdict{margin:10px 0 0;padding:12px 14px;background:color-mix(in srgb,var(--rose) 4%,var(--sheet));border:1px dashed var(--line);
  border-radius:10px;font-size:14.5px;line-height:1.7;color:var(--ink)}
.week .verdict b{color:var(--rose-deep)}
.fine{font-size:11px;color:var(--muted);margin-top:16px;line-height:1.8}

/* ===== AI ===== */
.fab{
  position:fixed;right:16px;bottom:20px;z-index:20;border:0;cursor:pointer;
  background:var(--ink);color:#FFF7F7;border-radius:999px;padding:11px 16px 11px 13px;
  display:flex;align-items:center;gap:7px;font-family:inherit;font-size:13.5px;
  box-shadow:0 8px 22px rgba(66,51,58,.22);transition:transform .2s ease,box-shadow .2s;
}
.fab:active{transform:scale(.95)}
.fab svg{width:16px;height:16px;opacity:.9}
.fab .live{width:5px;height:5px;border-radius:50%;background:#8FBF9E;box-shadow:0 0 0 0 rgba(143,191,158,.7);animation:pulse 2.4s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(143,191,158,.55)}70%{box-shadow:0 0 0 7px rgba(143,191,158,0)}100%{box-shadow:0 0 0 0 rgba(143,191,158,0)}}

.sheet-mask{position:fixed;inset:0;background:rgba(66,51,58,.26);opacity:0;pointer-events:none;
  transition:opacity .3s ease;z-index:30}
.sheet-mask.on{opacity:1;pointer-events:auto}
.sheet{
  position:fixed;left:0;right:0;bottom:0;z-index:31;
  background:linear-gradient(180deg,color-mix(in srgb,var(--rose) 2%,var(--sheet)) 0%,color-mix(in srgb,var(--rose) 5%,var(--sheet)) 100%);
  border:1px solid var(--line);border-bottom:0;border-radius:20px 20px 0 0;
  max-height:min(86vh, calc(100vh - var(--kb,0px) - 8px));
  display:flex;flex-direction:column;
  bottom:var(--kb,0px);
  transform:translateY(calc(100% + 14px));
  transition:transform .3s cubic-bezier(.36,.02,.66,.32);
  box-shadow:0 -8px 24px rgba(66,51,58,.13);
  will-change:transform;
}
.sheet.on{transform:none;transition:transform .44s cubic-bezier(.16,.9,.28,1)}
.sheet.on .sheet-head{animation:sheetHeadIn .42s cubic-bezier(.16,.9,.28,1) both}
.sheet.on .quick{animation:sheetPartIn .4s cubic-bezier(.16,.9,.28,1) .05s both}
.sheet.on .aiinput{animation:sheetPartIn .4s cubic-bezier(.16,.9,.28,1) .08s both}
@keyframes sheetHeadIn{from{opacity:.45;transform:translateY(-5px)}to{opacity:1;transform:none}}
@keyframes sheetPartIn{from{opacity:.5;transform:translateY(8px)}to{opacity:1;transform:none}}
.sheet::after{content:"";position:absolute;left:-1px;right:-1px;top:100%;height:170px;
  background:linear-gradient(180deg,color-mix(in srgb,var(--rose) 5%,var(--sheet)),color-mix(in srgb,var(--rose) 7%,var(--sheet)));pointer-events:none}
.sheet-head{display:flex;flex:0 0 auto;align-items:center;gap:10px;padding:14px 13px 12px;border-bottom:1px solid var(--line-2);position:relative;z-index:3}
.whale{
  flex:0 0 auto;width:32px;height:32px;display:grid;place-items:center;color:var(--rose-deep);
  background:radial-gradient(120% 120% at 30% 18%,color-mix(in srgb,var(--rose) 5%,var(--sheet)),color-mix(in srgb,var(--rose) 18%,var(--sheet)));
  border:1px solid var(--rose-line);border-radius:10px;
  box-shadow:0 2px 7px rgba(var(--rose-rgb),.16);
}
.sheet-head .t{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:3px}
.tline{display:flex;align-items:center;gap:7px;min-width:0}
.sheet-head b{font-size:15.5px;letter-spacing:.06em;line-height:1.2;white-space:nowrap}
.sheet-head .sub{font-size:10.5px;color:var(--muted);line-height:1.4;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.modeltag{flex:0 0 auto;font-size:10px;color:var(--rose-deep);background:var(--rose-soft);
  padding:1px 6px;border-radius:6px;letter-spacing:0;line-height:1.6}
.iconbtn{width:34px;height:34px;border:0;background:transparent;border-radius:9px;cursor:pointer;
  display:grid;place-items:center;color:var(--ink-2);transition:background .18s,color .18s,transform .15s}
.iconbtn:hover{background:var(--rose-soft);color:var(--rose-deep)}
.iconbtn:active{transform:scale(.9)}
.msgs{
  flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
  padding:14px 14px 8px;display:flex;flex-direction:column;gap:10px;min-height:120px;background:var(--sheet);
}
.daytime{align-self:center;font-size:10px;color:var(--muted);background:color-mix(in srgb,var(--rose) 5%,var(--sheet));padding:2px 9px;border-radius:8px;letter-spacing:.04em;animation:chipIn .2s ease-out both}
.mrow{display:flex;align-items:flex-end;gap:7px;max-width:100%}
.mrow.me{justify-content:flex-end}
.ava{flex:0 0 auto;width:26px;height:26px;margin-bottom:1px;border-radius:50%;display:grid;place-items:center;
  background:color-mix(in srgb,var(--rose) 9%,var(--sheet));color:var(--rose-deep);font-size:10.5px;letter-spacing:.02em;
  font-family:"Songti SC","SimSun",serif;border:1px solid var(--rose-line)}
.msg{max-width:76%;font-size:13.5px;line-height:1.66;padding:9px 12px;position:relative;border-radius:11px;
  white-space:pre-wrap;word-break:break-word;animation:msgIn .22s cubic-bezier(.22,1,.36,1) both}
.msg.ai{background:color-mix(in srgb,var(--rose) 6%,var(--sheet));color:var(--ink);border-bottom-left-radius:4px}
.msg.me{background:var(--rose);color:#FFF9FA;border-bottom-right-radius:4px}
.msg.sys{align-self:center;background:transparent;color:#B39AA0;font-size:11px;padding:2px 6px;
  border-radius:6px;text-align:center;max-width:88%}
.msg.restored{animation:none}
.thinking{display:inline-flex;gap:4px;align-items:center;padding:10px 13px}
.thinking .td{width:5px;height:5px;border-radius:50%;background:var(--rose);opacity:.45;animation:dot 1.1s infinite}
.thinking .td:nth-child(2){animation-delay:.18s}
.thinking .td:nth-child(3){animation-delay:.36s}
.quick{display:flex;flex:0 0 auto;min-height:64px;gap:7px;overflow-x:auto;overflow-y:hidden;touch-action:pan-x;overscroll-behavior-x:contain;
  padding:9px 13px 12px;scrollbar-width:none;-webkit-overflow-scrolling:touch;background:var(--sheet)}
.quick::-webkit-scrollbar{display:none}
.qchip{flex:0 0 auto;border:1px solid color-mix(in srgb,var(--rose) 18%,var(--sheet));background:color-mix(in srgb,var(--rose) 3%,var(--sheet));border-radius:999px;
  padding:6px 12px;font-size:12px;color:#8A7076;cursor:pointer;font-family:inherit;white-space:nowrap;
  display:inline-flex;align-items:center;gap:6px;animation:chipIn .24s ease-out both;
  transition:border-color .18s,color .18s,background .18s,transform .14s}
.qchip::before{content:"";width:4px;height:4px;border-radius:50%;background:var(--rose);opacity:.45}
.qchip:hover{border-color:var(--rose-line);color:var(--rose-deep);background:color-mix(in srgb,var(--rose) 7%,var(--sheet))}
@media (hover:hover) and (pointer:fine){.qchip:hover{transform:translateY(-1px)}.qchip:active{transform:scale(.96)}}
.qchip:active{transform:scale(.96)}
.aiinput{display:flex;flex:0 0 auto;gap:8px;padding:12px 12px 14px;background:var(--sheet)}
.aiinput .ibox{flex:1 1 auto;min-width:0;display:flex;align-items:center;background:color-mix(in srgb,var(--rose) 2%,var(--sheet));border:1px solid var(--line);
  border-radius:999px;padding:0 15px;transition:border-color .22s ease,background .22s ease}
.aiinput .ibox:focus-within{border-color:var(--rose-line);background:color-mix(in srgb,var(--rose) 4%,var(--sheet))}
.aiinput input{flex:1 1 auto;min-width:0;border:0;outline:0;background:transparent;padding:12px 0;color:var(--ink);
  font-family:inherit;font-size:16px}
.aiinput input:focus,.aiinput input:focus-visible{outline:none;box-shadow:none}
.aiinput button{border:0;border-radius:999px;background:var(--rose);color:#FFF8F9;font-family:inherit;
  font-weight:600;letter-spacing:.08em;font-size:14px;padding:0 18px;cursor:pointer;
  transition:transform .16s,background .2s}
.aiinput button:active{transform:scale(.95)}
.aiinput button:disabled{opacity:.55;cursor:default}
.cfg{position:absolute;left:0;right:0;top:63px;bottom:0;z-index:4;display:block;
  padding:12px 16px 16px;border-bottom:0;background:var(--sheet);overflow-y:auto;overflow-x:hidden;
  -webkit-overflow-scrolling:touch;overscroll-behavior:contain;box-sizing:border-box;
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(8px) scale(.985);transform-origin:top center;
  transition:opacity .18s ease,transform .26s cubic-bezier(.16,.9,.28,1),visibility 0s linear .26s}
.cfg.on{opacity:1;visibility:visible;pointer-events:auto;transform:none;
  transition:opacity .2s ease,transform .28s cubic-bezier(.16,.9,.28,1),visibility 0s linear 0s}
.sheet.cfgopen{height:min(86vh, calc(100vh - var(--kb,0px) - 8px))}
.cfg label{display:block;font-size:11.5px;color:var(--muted);margin-bottom:5px;letter-spacing:.06em}
.cfg input[type=text],.cfg input[type=password]{width:100%;border:1px solid var(--line);border-radius:9px;
  padding:9px 11px;font-size:16px;font-family:inherit;color:var(--ink);background:color-mix(in srgb,var(--rose) 2%,var(--sheet));outline:none}
.cfg .row2{display:flex;gap:8px;margin-top:10px}
.bksep{height:1px;background:var(--line-2);margin:16px 0 14px}
.cfg textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:9px;
  padding:9px 11px;font-size:16px;line-height:1.45;font-family:inherit;color:var(--ink-2);
  background:color-mix(in srgb,var(--rose) 2%,var(--sheet));outline:none;resize:vertical;min-height:70px;word-break:break-all}
.cfg textarea:focus{border-color:var(--rose-line)}
.bk{margin-top:16px;border:1px dashed var(--rose-line);border-radius:14px;padding:12px 12px 10px;
  background:linear-gradient(180deg,color-mix(in srgb,var(--rose) 4%,var(--sheet)),color-mix(in srgb,var(--rose) 7%,var(--sheet)));transition:border-color .2s,box-shadow .2s}
.bk-h{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.bk-ico{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;flex:none;
  background:var(--rose-soft);color:var(--rose-deep)}
.bk-t{display:flex;flex-direction:column;min-width:0}
.bk-t b{font-size:12.5px;color:var(--ink)}
.bk-t i{font-style:normal;font-size:10.5px;color:var(--muted);margin-top:2px}
.bk-btns{display:flex;gap:8px}
.bkbtn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border:1px solid var(--rose-line);background:#FFF9FA;color:var(--rose-deep);border-radius:10px;
  padding:9px 8px;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;
  transition:transform .14s,background .2s,border-color .2s,color .2s}
.bkbtn:active{transform:scale(.965)}
.bkbtn.ghost{background:#FFF;color:var(--ink-2);border-color:var(--line)}
.bkbtn.done{background:#E4F0E9;border-color:#BFD9CB;color:#4C6A57}
.bk.ok{animation:bkOk .6s ease-out}
@keyframes bkOk{0%{box-shadow:0 0 0 0 rgba(93,127,107,.34)}100%{box-shadow:0 0 0 14px rgba(93,127,107,0)}}
.bk.err{animation:bkShake .36s}
@keyframes bkShake{0%,100%{transform:translateX(0)}22%{transform:translateX(-5px)}66%{transform:translateX(5px)}}
.bk-tip{font-size:10.5px;color:var(--muted);margin-top:7px}
.bk-cfm{display:none;margin-top:9px;padding:9px 10px;border-radius:10px;background:color-mix(in srgb,var(--rose) 5%,var(--sheet));border:1px solid var(--rose-line)}
.bk-cfm.on{display:block;animation:bkCfmIn .3s cubic-bezier(.16,.9,.28,1) both}
.bk-cfm p{margin:0 0 7px;font-size:12px;color:var(--ink-2);line-height:1.5}
.bk-cfm-btns{display:flex;gap:8px}
@keyframes bkCfmIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.bk.ok,.bk.err{animation:none}}
.modelbtn{flex:1;border:1px solid var(--line);background:color-mix(in srgb,var(--rose) 3%,var(--sheet));border-radius:9px;padding:8px 10px;
  font-size:12.5px;font-family:inherit;color:var(--ink-2);cursor:pointer}
.modelbtn.on{border-color:var(--rose);background:var(--rose-soft);color:var(--rose-deep);font-weight:600}
.optrow{display:flex;align-items:flex-start;gap:10px;margin-top:13px;padding-top:12px;border-top:1px dashed var(--line-2)}
.optrow .donsw{flex:none;margin-top:1px}
.opt-txt{min-width:0}
.opt-txt b{display:block;font-size:12.5px;font-weight:600;color:var(--ink);line-height:1.45}
.opt-txt i{display:block;font-style:normal;font-size:10.5px;color:var(--muted);line-height:1.55;margin-top:3px}
.optwarn{color:var(--rose-deep)!important}
.accentRow{display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.swatch{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:6px 11px;border:1px solid var(--line);
  border-radius:10px;background:var(--sheet);color:var(--ink-2);font:inherit;font-size:11.5px;cursor:pointer;
  transition:border-color .2s,background .2s,color .2s,transform .14s}
.swatch i{width:15px;height:15px;flex:none;border-radius:50%;background:var(--sw);border:1px solid rgba(0,0,0,.08);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.25);transition:transform .2s}
.swatch.on{border-color:var(--rose);background:var(--rose-soft);color:var(--rose-deep);font-weight:600}
.swatch.on i{transform:scale(1.12);box-shadow:0 0 0 2px var(--rose-soft),0 0 0 3px var(--rose);animation:swatchPop .34s cubic-bezier(.22,1,.36,1) both}
@keyframes swatchPop{0%{transform:scale(.82)}60%{transform:scale(1.16)}100%{transform:scale(1.12)}}
.swatch:active{transform:scale(.97)}
html[data-theme="dark"] .swatch{background:#2C2227;border-color:#513941;color:var(--ink-2)}
html[data-theme="dark"] .swatch.on{background:var(--rose-soft);border-color:var(--rose);color:var(--rose-deep)}
.chdef{margin-top:2px;padding:10px 11px 11px;border:1px solid var(--line-2);border-radius:11px;
  background:color-mix(in srgb,var(--rose) 2%,var(--sheet))}
.chrow{display:grid;grid-template-columns:34px 1fr;align-items:center;gap:8px}
.chrow + .chrow{margin-top:8px}
.chrow > span{font-size:11px;color:var(--muted);letter-spacing:.05em}
.chopts{display:flex;flex-wrap:wrap;gap:5px;min-width:0}
.chbtn{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:8px;
  background:var(--sheet);color:var(--ink-2);padding:5px 8px;font:inherit;font-size:11.5px;
  cursor:pointer;transition:border-color .18s,background .18s,color .18s,transform .14s}
.chbtn i{width:8px;height:8px;border-radius:50%;background:var(--ch);flex:0 0 auto;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.chbtn.on{border-color:var(--rose-line);background:var(--rose-soft);color:var(--rose-deep);font-weight:600;
  animation:chPick .24s cubic-bezier(.22,1,.36,1) both}
@keyframes chPick{0%{transform:scale(.96)}60%{transform:scale(1.03)}100%{transform:scale(1)}}
.chbtn:active{transform:scale(.97)}
html[data-theme="dark"] .chdef{background:rgba(255,255,255,.02);border-color:var(--line-2)}
html[data-theme="dark"] .chbtn{background:#2C2227;border-color:#513941}
html[data-theme="dark"] .chbtn.on{background:var(--rose-soft);border-color:var(--rose);color:var(--rose-deep)}
.cfg .save{margin-top:11px;width:100%;border:0;border-radius:9px;background:var(--ink);color:#FFF7F7;
  padding:10px;font-size:14px;font-family:inherit;cursor:pointer}
.cfg .note{font-size:11px;color:var(--muted);margin-top:8px;line-height:1.7}
.csec{padding:14px 0 16px;border-bottom:1px dashed var(--line-2)}
.csec:last-child{border-bottom:0;padding-bottom:2px}
.csec-h{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}
.csec-h b{position:relative;padding-left:10px;font-size:13px;letter-spacing:.04em;color:var(--ink)}
.csec-h b::before{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:2px;background:var(--rose)}
.csec-h i{font-style:normal;font-size:10.5px;color:var(--muted);letter-spacing:.02em}
.nameRow{display:flex;align-items:center;gap:8px}
.nameRow input{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:9px;background:color-mix(in srgb,var(--rose) 2%,var(--sheet));
  padding:9px 11px;font-size:16px;font-family:inherit;color:var(--ink);outline:none;transition:border-color .2s,box-shadow .2s}
.nameRow input:focus{border-color:var(--rose-line);box-shadow:0 0 0 3px rgba(var(--rose-rgb),.08)}
.nameSuf{flex:0 0 auto;font-size:13px;color:var(--ink-2)}
.csec-tip{font-size:10.5px;color:var(--muted);margin:8px 0 0;line-height:1.55}
.cfg .save{transition:background .22s,transform .14s}
.cfg .save:active{transform:scale(.985)}
.cfg .save.done{background:var(--good)}
.cfg.on .csec{animation:csecIn .3s cubic-bezier(.22,.7,.3,1) both}
.cfg.on .csec:nth-child(1){animation-delay:.02s}
.cfg.on .csec:nth-child(2){animation-delay:.05s}
.cfg.on .csec:nth-child(3){animation-delay:.08s}
.cfg.on .csec:nth-child(4){animation-delay:.11s}
.cfg.on .csec:nth-child(5){animation-delay:.14s}
.cfg.on .csec:nth-child(6){animation-delay:.17s}
.cfg.on .csec:nth-child(7){animation-delay:.20s}
@keyframes csecIn{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
.csec.bksec .bk{margin-top:0}
.don{margin-top:14px;border:1px solid var(--line);border-radius:12px;padding:11px 11px 9px;background:color-mix(in srgb,var(--rose) 2%,var(--sheet))}
.don-h{display:flex;align-items:baseline;gap:7px}
.don-h b{font-size:12.5px;color:var(--ink)}
.don-h i{font-style:normal;font-size:10.5px;color:var(--muted)}
.don-r{display:flex;align-items:center;gap:9px;margin-top:10px}
.donsw{width:46px;height:26px;flex:none;border:1px solid var(--line);border-radius:999px;background:#EFE2E4;
  position:relative;padding:0;cursor:pointer;transition:background .2s,border-color .2s}
.donsw span{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#FFF;
  box-shadow:0 1px 3px rgba(122,79,90,.22);transition:transform .22s cubic-bezier(.2,.9,.3,1)}
.donsw.on{background:var(--rose);border-color:var(--rose)}
.donsw.on span{transform:translateX(20px)}
.don-r label{font-size:11.5px;color:var(--muted);margin:0}
.don-r input{width:74px;border:1px solid var(--line);border-radius:8px;background:color-mix(in srgb,var(--rose) 2%,var(--sheet));padding:8px 9px;
  font-size:16px;color:var(--ink);text-align:center}
.don-r input:focus{border-color:var(--rose-line);outline:none}
.don-r input:disabled{opacity:.45}
.don-u{font-size:11.5px;color:var(--muted)}
.don-tip{font-size:10.5px;color:var(--muted);margin:8px 0 0;line-height:1.5}

/* ===== 版本胶囊 ===== */
.vwrap{margin:22px auto 6px;max-width:520px;display:flex;flex-direction:column;align-items:center}
.vpill{display:inline-flex;align-items:center;gap:8px;min-height:38px;padding:7px 14px;
  border:1px dashed var(--rose-line);border-radius:999px;background:color-mix(in srgb,var(--rose) 2%,var(--sheet));color:var(--ink-2);
  font:inherit;font-size:12px;cursor:pointer;transition:transform .15s,border-color .2s,background .2s}
.vpill:hover{border-color:var(--rose-line);background:color-mix(in srgb,var(--rose) 5%,var(--sheet))}
.vpill:active{transform:scale(.97)}
.vpill .vver{font-weight:600;color:var(--rose-deep);letter-spacing:.02em}
.vpill .vlab{color:var(--muted);letter-spacing:.04em}
.vpill .vchev{color:var(--muted);transition:transform .28s cubic-bezier(.22,1,.36,1)}
.vpill[aria-expanded="true"] .vchev{transform:rotate(180deg)}
.vpanel{width:100%;box-sizing:border-box;margin-top:10px;padding:12px 13px 10px;
  border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,#FFFDFD,#FFF7F8);
  box-shadow:0 8px 22px rgba(150,90,105,.07);animation:vpIn .32s cubic-bezier(.16,.9,.28,1) both}
@keyframes vpIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.vp-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  padding-bottom:9px;border-bottom:1px dashed var(--line);font-size:11.5px;color:var(--ink-2)}
.vp-head b{color:var(--rose-deep);font-size:13px}
.vp-head i{font-style:normal;font-size:10px;color:var(--muted)}
.vlist{list-style:none;margin:0;padding:0;max-height:292px;overflow-y:auto;overscroll-behavior:contain}
.vlist::-webkit-scrollbar{width:4px}
.vlist::-webkit-scrollbar-thumb{background:#EBD3D8;border-radius:2px}
.vrow{display:flex;gap:9px;padding:9px 1px 8px;border-bottom:1px solid var(--line-2);animation:vrowIn .3s cubic-bezier(.22,.7,.3,1) both}
.vrow:last-child{border-bottom:0}
.vdate{font-style:normal;font-size:10px;color:var(--muted);margin-left:6px;letter-spacing:.02em}
.vtag{flex:none;width:42px;font-size:11px;font-weight:600;color:var(--rose-deep);letter-spacing:.01em;
  padding-top:1px;font-variant-numeric:tabular-nums}
.vrow.now .vtag{color:#4C6A57}
.vbody{min-width:0}
.vt{font-size:12px;color:var(--ink);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.vnow{font-size:9px;color:#4C6A57;background:var(--good-soft);border:1px solid #CFE2D8;
  border-radius:999px;padding:1px 6px;letter-spacing:.04em}
.vpts{margin:5px 0 0;padding:0;list-style:none}
.vpts li{position:relative;font-size:11px;color:var(--ink-2);line-height:1.62;padding-left:9px}
.vpts li::before{content:"";position:absolute;left:0;top:7px;width:3px;height:3px;border-radius:50%;
  background:#DCC0C7}
@media (prefers-reduced-motion:reduce){.vpanel{animation:none}.vpill .vchev{transition:none}
  .cfg.on .csec{animation:none}.cfg .save,.donsw span{transition:none}}

/* ===== toast ===== */
.more{padding:2px 0 6px}
.more button{width:100%;min-height:44px;border:1px dashed var(--rose-line);border-radius:12px;background:color-mix(in srgb,var(--rose) 2%,var(--sheet));
  color:var(--rose-deep);font:inherit;font-size:12.5px;cursor:pointer;transition:background .2s,transform .14s}
.more button:active{transform:scale(.98);background:#FFF4F6}
.del.armed{background:var(--rose);color:#FFF8F9;transform:scale(1.08);box-shadow:0 3px 10px rgba(var(--rose-rgb),.3)}
.toast{
  position:fixed;left:50%;bottom:86px;transform:translate(-50%,12px);
  background:var(--ink);color:#FFF3F4;font-size:13.5px;padding:9px 18px;border-radius:10px;
  opacity:0;pointer-events:none;transition:.24s;z-index:40;max-width:84vw;text-align:center;line-height:1.6;
}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* ===== 桌面 ===== */
@media (min-width:860px){
  .wrap{padding:30px 28px 96px}
  .grid{grid-template-columns:1.06fr .94fr;gap:20px;align-items:start}
  .board{order:0;position:sticky;top:24px}
  .head h1{font-size:28px}
  .panel{padding:21px}
  .big{font-size:58px}
  .row{padding:12px 15px}
  .amtbtn{min-width:92px;font-size:16.5px}
  .donut{width:144px;height:144px}
  .report,.week{grid-column:1 / -1}
  .rbody{grid-template-columns:1.1fr .9fr;gap:30px;padding:20px 18px}
  .rgrid{margin-top:20px}
  .rcell b{font-size:25px}
  .seal{width:68px;height:68px;font-size:13px}
  .sheet{left:auto;right:18px;bottom:18px;width:392px;border-radius:16px;max-height:76vh}
  .sheet.on{transform:none}
  .sheet-mask{background:rgba(66,51,58,.16)}
  .fab{right:24px;bottom:24px}
}
@media (prefers-reduced-motion:reduce){
  .anim,.row,.msg,.chbtn.on,.settings .set{animation:none!important}
  *{transition:none!important}
  .aura,.fab::after,.donut::after,.bar i::after,.fab .live,.floatd,.toast.on,.tab.on::after,.row.fresh,.grid.turn,.vrow,.sheet.on .sheet-head,.sheet.on .quick,.sheet.on .aiinput{animation:none!important}
  .aura,.fab::after,.donut::after,.floatd,.toast.on,.tab.on::after,.row.fresh{overflow:hidden}
  .floatd,.row.fresh::after{display:none}
  body.sheeting .wrap{transform:none;opacity:1}
}

/* ===== 动效精修 ===== */
@keyframes rowIn{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
@keyframes pageTurn{0%{opacity:.58;transform:translateY(8px)}62%{opacity:1}100%{opacity:1;transform:none}}
.grid.turn{animation:pageTurn .46s cubic-bezier(.22,1,.36,1) both}
@keyframes vrowIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes bump{0%{transform:scale(1)}38%{transform:scale(1.035)}100%{transform:scale(1)}}
@keyframes donutIn{from{opacity:0;transform:rotate(-30deg) scale(.92)}to{opacity:1;transform:none}}
@keyframes tabPop{from{transform:scale(.965)}to{transform:scale(1)}}
@keyframes tick{0%{transform:translateY(0)}50%{transform:translateY(-2px)}100%{transform:translateY(0)}}
#availNum{display:inline-block;transform-origin:left center}
#availNum.bump{animation:bump .5s cubic-bezier(.22,.7,.3,1)}
.donut{animation:donutIn .85s cubic-bezier(.22,.7,.3,1) both}
.tab.on{animation:tabPop .26s ease}
.mtab.on{animation:tabPop .26s ease}
/* 按钮：加大触感与位置 */
.addbar button{
  min-height:46px;padding:0 20px;font-weight:600;letter-spacing:.08em;
  box-shadow:0 5px 14px rgba(66,51,58,.12);transition:transform .16s ease,background .2s,box-shadow .2s;
}
.addbar button:hover{background:var(--rose-deep);box-shadow:0 7px 18px rgba(166,71,90,.2)}
.addbar button:active{transform:scale(.955);box-shadow:0 2px 8px rgba(66,51,58,.14)}
.aiinput button{min-height:46px;font-weight:600;box-shadow:0 4px 12px rgba(var(--rose-rgb),.22)}
.aiinput button:active{transform:scale(.955)}
.fab{padding:12px 18px;font-size:14px;gap:8px;box-shadow:0 10px 26px rgba(66,51,58,.24)}
.fab:hover{transform:translateY(-1px)}
.fab:active{transform:scale(.95)}
.del{font-size:16px}
.qchip{min-height:40px;display:inline-flex;align-items:center}
.tab{min-height:46px}
/* 装饰：书签、虚线断页、顶部双线 */
.board{position:relative}
.board::after{
  content:"";position:absolute;top:-1px;right:24px;width:26px;height:36px;
  background:linear-gradient(180deg,var(--rose-soft),var(--rose-line));
  clip-path:polygon(0 0,100% 0,100% 100%,50% 80%,0 100%);
  opacity:.95;pointer-events:none;
}
.panel:first-child{background:
  radial-gradient(120% 90% at 12% -10%,rgba(255,255,255,.9),rgba(255,255,255,0) 62%),
  radial-gradient(80% 70% at 100% 0%,rgba(var(--rose-soft-rgb),.55),rgba(var(--rose-soft-rgb),0) 70%)}
.head{position:relative}
.head::after{content:"";position:absolute;left:0;right:0;bottom:-5px;height:1px;background:var(--line-2)}
/* 账本左侧装订条 */
.ledger{position:relative}
.ledger::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:3px;pointer-events:none;
  background:linear-gradient(180deg,var(--rose-line),var(--rose-soft) 55%,var(--rose-line));
}
/* 桌面端：轻微悬停反馈，触屏不触发 */
@media (hover:hover) and (pointer:fine){
  .row:hover{background:color-mix(in srgb,var(--rose) 3%,var(--sheet))}
  .card{transition:box-shadow .34s ease}
  .card:hover{box-shadow:0 14px 34px rgba(122,79,90,.1),inset 0 0 0 1px rgba(255,255,255,.65)}
  .tab:hover{color:var(--ink)}
  .mtab:hover{color:var(--ink)}
}

/* ===== 灵动层：环境光晕、纸纹、微动效 ===== */
@keyframes drift{from{transform:translate3d(-1.2%,-1%,0) scale(1)}to{transform:translate3d(1.6%,1.2%,0) scale(1.05)}}
@keyframes underIn{from{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}
@keyframes sweepX{from{transform:translateX(-100%)}to{transform:translateX(280%)}}
@keyframes floatUp{0%{opacity:0;transform:translateY(7px) scale(.94)}18%{opacity:1;transform:none}72%{opacity:.9}100%{opacity:0;transform:translateY(-17px)}}
@keyframes breathe{0%{transform:scale(.94);opacity:.5}68%{transform:scale(1.16);opacity:0}100%{transform:scale(1.16);opacity:0}}
@keyframes sheen{to{transform:rotate(360deg)}}
@keyframes msgIn{from{opacity:0;transform:translateY(7px) scale(.985)}to{opacity:1;transform:none}}
@keyframes dot{0%,60%,100%{transform:translateY(0);opacity:.35}30%{transform:translateY(-3px);opacity:1}}
@keyframes chipIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes toastIn{from{opacity:0;transform:translateY(10px) scale(.96)}to{opacity:1;transform:none}}

.aura{
  position:fixed;inset:-6vmax;z-index:0;pointer-events:none;will-change:transform;
  background:
    radial-gradient(34vmax 26vmax at 16% 9%,rgba(var(--rose-soft-rgb),.62),rgba(var(--rose-soft-rgb),0) 62%),
    radial-gradient(30vmax 24vmax at 86% 86%,rgba(243,198,206,.4),rgba(243,198,206,0) 64%),
    radial-gradient(22vmax 18vmax at 72% 16%,rgba(255,255,255,.7),rgba(255,255,255,0) 60%);
  animation:drift 32s ease-in-out infinite alternate;
}
.grain{
  position:fixed;inset:0;z-index:1;pointer-events:none;opacity:.05;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.55'/%3E%3C/svg%3E");
  background-size:150px 150px;
}
.wrap{position:relative;z-index:2}

/* 标题：一笔点墨 */
@keyframes inkLine{from{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}
.head .mark h1{position:relative;display:inline-block}
.head .mark h1::after{
  content:"";position:absolute;left:1px;right:0;bottom:-5px;height:2px;border-radius:2px;
  transform-origin:left center;
  background:linear-gradient(90deg,var(--rose-deep),rgba(var(--rose-rgb),.18));
  animation:inkLine .85s cubic-bezier(.22,1,.36,1) .22s both;
}
/* 首屏编排：一屏一次，不逐块乱飞 */
.grid > :nth-child(1){animation-delay:.07s}
.grid > :nth-child(2){animation-delay:.15s}
.grid > :nth-child(3){animation-delay:.23s}
.grid > :nth-child(4){animation-delay:.31s}
.monthbar{animation-delay:.03s}

/* 页签：滑入下划线 */
.tabs{position:relative}
.tab{position:relative}
.tab.on::after{
  content:"";position:absolute;left:50%;bottom:5px;width:20px;height:2px;margin-left:-10px;
  border-radius:2px;background:var(--rose);animation:underIn .38s cubic-bezier(.22,1,.36,1) both;
}
/* 新记的一笔：一道高光扫过 */
.row{position:relative}
.row.fresh::after{
  content:"";position:absolute;top:0;bottom:0;left:0;width:55%;pointer-events:none;
  background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.85),rgba(255,255,255,0));
  animation:sweepX .95s ease .1s both;
}
/* 大数字旁的浮动增量 */
.panel{position:relative}
.floatd{
  position:absolute;right:56px;top:12px;font-size:13px;font-weight:600;pointer-events:none;z-index:3;
  animation:floatUp 1.5s cubic-bezier(.22,1,.36,1) both;
}
.floatd.plus{color:var(--good)}
.floatd.minus{color:var(--rose-deep)}
/* 账房按钮：呼吸环 */
body.sheeting .fab{opacity:0;transform:scale(.86) translateY(6px);pointer-events:none}
body.sheeting{overflow:hidden}
body.sheeting .aura{animation-play-state:paused}
body.sheeting .donut::after{animation-play-state:paused}
body.sheeting .fab::after{animation-play-state:paused}
body.sheeting .bar i::after{animation-play-state:paused}
body.asleep .aura,body.asleep .fab::after,body.asleep .donut::after,body.asleep .bar i::after,body.asleep .fab .live{animation-play-state:paused}
@media (max-width:859px){
  .wrap{transition:transform .44s cubic-bezier(.16,.9,.28,1),opacity .3s ease}
  body.sheeting .wrap{transform:scale(.975) translateY(-4px);opacity:.78}
}
.fab{transition:opacity .2s ease,transform .24s ease}
.fab::after{
  content:"";position:absolute;inset:-5px;border-radius:999px;pointer-events:none;
  border:1px solid rgba(var(--rose-rgb),.32);
  animation:breathe 3.9s ease-out infinite;
}
/* 环形图外圈：缓慢流转的高光 */
.donut{position:relative}
.donut::after{
  content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;opacity:.5;
  background:conic-gradient(from 0deg,rgba(255,255,255,.6),rgba(255,255,255,0) 24%,rgba(255,255,255,0) 76%,rgba(255,255,255,.4) 100%);
  -webkit-mask:radial-gradient(circle,transparent 0 61%,#000 64%);
  mask:radial-gradient(circle,transparent 0 61%,#000 64%);
  animation:sheen 13s linear infinite;
}
/* toast：盖章式出现 */
.toast.on{animation:toastIn .34s cubic-bezier(.22,1,.36,1)}

/* ===== iOS / 全面屏适配 ===== */
:root{color-scheme:light}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{overscroll-behavior-y:contain}
.wrap{
  padding-top:calc(20px + env(safe-area-inset-top,0px));
  padding-bottom:calc(104px + env(safe-area-inset-bottom,0px));
  padding-left:calc(16px + env(safe-area-inset-left,0px));
  padding-right:calc(16px + env(safe-area-inset-right,0px));
}
button,.chip,.mtab,.tab,.qchip,.del,.iconbtn{touch-action:manipulation;-webkit-touch-callout:none}
button{-webkit-user-select:none;user-select:none}
/* 可点区域不小于 44pt */
.addbar button{min-height:44px}
.tab{min-height:44px;padding:11px 6px}
.mtab{min-height:40px}
.aiinput button{min-height:44px}
.iconbtn{width:44px;height:44px}
.del{width:34px;height:34px;font-size:16px}
.chip{padding:4px 8px}
/* 输入不小于 16px，避免 iOS 聚焦缩放 */
input,textarea,select{font-size:16px}
.cfg input[type=text],.cfg input[type=password]{font-size:16px}
/* 主页手势条 / 灵动岛 */
.fab{bottom:calc(20px + env(safe-area-inset-bottom,0px))}
.toast{bottom:calc(86px + env(safe-area-inset-bottom,0px) + var(--kb,0px))}
.aiinput{padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))}
.msgs{overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.monthbar{overscroll-behavior-x:contain}
.grab{display:none}
@media (max-width:520px){
  .sheet{max-height:min(88vh, calc(100vh - var(--kb,0px) - 8px));
    max-height:min(88dvh, calc(100dvh - var(--kb,0px) - 8px));border-radius:20px 20px 0 0}
  .grab{display:block;width:38px;height:5px;border-radius:3px;background:var(--line);
    margin:8px auto 0;flex:0 0 auto}
  .aiinput button{padding:0 22px}
  .head{padding-bottom:12px}
  .head .mark h1{font-size:clamp(19px,5.8vw,23px)}
}
/* iPhone 18 Pro 一档（约 402–440pt 宽） */
@media (min-width:390px) and (max-width:440px){
  .wrap{padding-left:calc(18px + env(safe-area-inset-left,0px));padding-right:calc(18px + env(safe-area-inset-right,0px))}
  .card{border-radius:14px}
  .big{font-size:clamp(46px,12.6vw,54px)}
  .row{padding:12px 14px}
  .amtbtn{min-width:84px;font-size:16.5px}
  .rcell b{font-size:20px}
  .legend li{font-size:13px}
  .truth li{font-size:14.5px}
  .fab{right:18px;bottom:calc(22px + env(safe-area-inset-bottom,0px))}
}
@media (prefers-reduced-motion:reduce){
  .msg,.qchip,.daytime{animation:none}
}
/* ===== 动效层 ===== */
.bar i{transition:width .62s cubic-bezier(.22,1,.36,1);position:relative;overflow:hidden}
.bar i::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.62),transparent);
  transform:translateX(-100%);animation:sheenX 3s ease-in-out infinite}
.big.bump{animation:bump .52s cubic-bezier(.22,1,.36,1)}
.rbar i{transform-origin:left center;animation:barGrow .55s cubic-bezier(.22,1,.36,1) both}
@keyframes sheenX{0%{transform:translateX(-100%)}55%,100%{transform:translateX(240%)}}
@keyframes bump{0%{transform:scale(1)}34%{transform:scale(1.032)}100%{transform:scale(1)}}
@keyframes barGrow{from{transform:scaleX(.02)}to{transform:scaleX(1)}}
@keyframes cardIn{from{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:none}}
@keyframes ckIn{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.12);opacity:1}100%{transform:scale(1)}}

/* 记账成功 · 凭证卡 */
.rcard{max-width:232px;background:linear-gradient(180deg,color-mix(in srgb,var(--rose) 2%,var(--sheet)),color-mix(in srgb,var(--rose) 8%,var(--sheet)));border:1px solid var(--rose-line);border-radius:13px;
  padding:11px 12px 9px;box-shadow:0 6px 18px rgba(150,90,105,.07);position:relative;animation:cardIn .4s cubic-bezier(.16,.9,.28,1) both}
.rcard::before{content:"";position:absolute;left:12px;right:12px;top:0;height:1px;
  background:repeating-linear-gradient(90deg,var(--rose-line) 0 5px,transparent 5px 10px)}
.rcard .rhead{display:flex;align-items:center;justify-content:flex-start;gap:6px;font-size:11.5px;color:var(--ink-2);letter-spacing:.03em;padding:3px 0 0}
.rcard .rhead .ck{width:17px;height:17px;border-radius:50%;background:var(--good-soft);color:#4B6A57;display:grid;place-items:center;
  font-size:10px;animation:ckIn .5s cubic-bezier(.16,.9,.28,1) both;border:1px solid #C9DED2}
.rcard .ramt{font-size:25px;font-weight:600;color:var(--ink);margin:5px 0 1px;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.rcard .ramt.neg{color:var(--rose-deep)}
.rcard .rmeta{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.rcard .rmeta span{font-size:10px;padding:2px 7px;border-radius:999px;background:var(--rose-soft);color:var(--rose-deep);border:1px solid var(--rose-line);line-height:1.55}
.rcard .rfoot{margin-top:8px;padding-top:7px;border-top:1px dashed var(--line);font-size:11px;color:var(--muted);display:flex;justify-content:space-between;gap:8px;align-items:center}
.rcard .rundo{border:0;background:transparent;color:var(--rose-deep);font-family:inherit;font-size:11px;padding:3px 5px;border-radius:7px;transition:background .18s}
.rcard .rundo:active{background:var(--rose-soft)}
.rcard .rundo:disabled{color:var(--muted);opacity:.8}
.rcard.undoing{opacity:.6;transition:opacity .25s}
@media (prefers-reduced-motion:reduce){
  .bar i::after{animation:none}
  .big.bump{animation:none}
  .rbar i{animation:none}
  .rcard,.rcard .rhead .ck{animation:none}
}
/* 窄屏发送键不竖排 */
.aiinput button{white-space:nowrap}
@media (max-width:360px){.aiinput button{padding:0 13px;font-size:13.5px;letter-spacing:.04em}}

/* ===== 深色模式（暖黑，不是纯黑） ===== */
#themeBtn .ico-auto,#themeBtn .ico-moon,#themeBtn .ico-sun{display:none}
#themeBtn[data-mode="auto"] .ico-auto{display:block}
#themeBtn[data-mode="light"] .ico-sun{display:block}
#themeBtn[data-mode="dark"] .ico-moon{display:block}
/* 主题三态菜单：点标签栏的太阳/月亮/半圆，三选一 */
.themepop{
  position:absolute;top:calc(100% + 4px);right:9px;z-index:8;
  min-width:156px;padding:5px;
  background:var(--sheet);border:1px solid var(--line);border-radius:13px;
  box-shadow:0 12px 28px rgba(66,51,58,.14);
  opacity:0;visibility:hidden;transform:translateY(-5px) scale(.985);transform-origin:top right;
  transition:opacity .16s ease,transform .16s ease,visibility .16s;
}
.themepop.on{opacity:1;visibility:visible;transform:none}
.themepop button{
  display:flex;align-items:center;gap:8px;width:100%;padding:8px 9px;
  border:0;border-radius:8px;background:transparent;color:var(--ink-2);
  font:inherit;font-size:12.5px;text-align:left;cursor:pointer;
  transition:background .15s,color .15s;
}
.themepop button i{margin-left:auto;font-style:normal;font-size:9.5px;color:var(--muted);letter-spacing:0}
.themepop button:hover,.themepop button.on{background:var(--rose-soft);color:var(--rose-deep)}
.themepop button.on{font-weight:600}
.themepop button.on i{color:var(--rose-deep);opacity:.85}
@media (prefers-reduced-motion:reduce){.themepop{transition:none}.swatch.on i{animation:none}}
html[data-theme="dark"]{
  --paper:#1D171A;
  --paper-2:#2B2024;
  --sheet:#2A2125;
  --ink:#F3E6EA;
  --ink-2:#CFB6BD;
  --muted:#A08890;
  --line:#48343A;
  --line-2:#3A2A2F;
  --rose:#D98497;
  --rose-deep:#EFA9B8;
  --rose-soft:#3B2A30;
  --rose-rgb:217,132,151;
  --rose-soft-rgb:59,42,48;
  --rose-line:color-mix(in srgb,var(--rose) 38%,var(--paper));
  --good:#8FBE9F;
  --good-soft:#26362E;
  --cash:#C9A87C;
  --donate:#C39AA4;
  --bbz:#A7BCD8;
  --bbz-soft:#293443;
  --shadow:0 10px 28px rgba(0,0,0,.36);
  color-scheme:dark;
}
html[data-theme="dark"] body{background:radial-gradient(120% 55% at 50% -8%,var(--paper-2) 0%,rgba(var(--rose-rgb),0) 62%),var(--paper)}
html[data-theme="dark"] .aura{background:
  radial-gradient(34vmax 26vmax at 16% 9%,rgba(var(--rose-rgb),.16),rgba(var(--rose-rgb),0) 62%),
  radial-gradient(30vmax 24vmax at 86% 86%,rgba(120,80,92,.18),rgba(120,80,92,0) 64%),
  radial-gradient(22vmax 18vmax at 72% 16%,rgba(255,255,255,.045),rgba(255,255,255,0) 60%)}
html[data-theme="dark"] .grain{opacity:.07}
html[data-theme="dark"] .card{box-shadow:var(--shadow),inset 0 0 0 1px rgba(255,255,255,.04)}
html[data-theme="dark"] .panel:first-child{background:
  radial-gradient(120% 90% at 12% -10%,rgba(255,255,255,.07),rgba(255,255,255,0) 62%),
  radial-gradient(80% 70% at 100% 0%,rgba(var(--rose-rgb),.14),rgba(var(--rose-rgb),0) 70%)}
html[data-theme="dark"] .board::after{background:linear-gradient(180deg,var(--rose),var(--rose-line))}
html[data-theme="dark"] .ledger::before{background:linear-gradient(180deg,var(--rose-deep),var(--rose-soft) 55%,var(--rose-deep))}
html[data-theme="dark"] .mtab{background:color-mix(in srgb,var(--rose) 7%,var(--sheet))}
html[data-theme="dark"] .mtab.on,
html[data-theme="dark"] .aiinput button{background:var(--rose);color:#FFF6F8}
html[data-theme="dark"] .mtab.on em{color:rgba(255,246,248,.78)}
html[data-theme="dark"] .tab{background:color-mix(in srgb,var(--rose) 5%,var(--sheet))}
html[data-theme="dark"] .addbar input,
html[data-theme="dark"] .amtinput,
html[data-theme="dark"] .winput,
html[data-theme="dark"] .aiinput .ibox,
html[data-theme="dark"] .cfg input[type=text],
html[data-theme="dark"] .cfg input[type=password],
html[data-theme="dark"] .cfg textarea,
html[data-theme="dark"] .nameRow input,
html[data-theme="dark"] .don-r input{background:color-mix(in srgb,var(--rose) 4%,var(--sheet));color:var(--ink)}
html[data-theme="dark"] .addbar input::placeholder{color:color-mix(in srgb,var(--rose) 30%,var(--muted))}
html[data-theme="dark"] .addbar button,
html[data-theme="dark"] .cfg .save{background:color-mix(in srgb,var(--rose) 10%,var(--sheet));color:#F6E8EC}
html[data-theme="dark"] .addbar button:hover{background:var(--rose);color:#FFF6F8}
html[data-theme="dark"] .cchip{background:color-mix(in srgb,var(--rose) 5%,var(--sheet))}
html[data-theme="dark"] .cchip.on{border-color:var(--rose-line)}
html[data-theme="dark"] .ptag{background:color-mix(in srgb,var(--rose) 10%,var(--sheet));color:var(--rose-deep)}
html[data-theme="dark"] .row:hover{background:color-mix(in srgb,var(--rose) 7%,var(--sheet))}
html[data-theme="dark"] .row:active{background:color-mix(in srgb,var(--rose) 10%,var(--sheet))}
html[data-theme="dark"] .chip{background:color-mix(in srgb,var(--rose) 10%,var(--sheet));color:var(--ink-2)}
html[data-theme="dark"] .chip.wx{background:#233129;color:#A9CBB7}
html[data-theme="dark"] .chip.ali{background:#232D39;color:#A9BDD6}
html[data-theme="dark"] .chip.cash{background:#33291F;color:#D2B58D}
html[data-theme="dark"] .dchip.red{background:#3A2429;color:#E9A3B1}
html[data-theme="dark"] .dchip.green{background:var(--good-soft);color:#B6D8C4}
html[data-theme="dark"] .amtbtn.debtRed{color:#E9A3B1}
html[data-theme="dark"] .amtbtn.debtGreen{color:#9CC4AD}
html[data-theme="dark"] .del{color:#7A6168}
html[data-theme="dark"] .del:hover{background:var(--rose-soft)}
html[data-theme="dark"] .week .verdict{background:color-mix(in srgb,var(--rose) 7%,var(--sheet))}
html[data-theme="dark"] .seal{border-color:rgba(var(--rose-rgb),.46);color:rgba(var(--rose-rgb),.82);
  box-shadow:inset 0 0 0 3px rgba(var(--rose-rgb),.1)}
html[data-theme="dark"] .seal.live{border-color:rgba(143,190,159,.42);color:rgba(143,190,159,.82);
  box-shadow:inset 0 0 0 3px rgba(143,190,159,.08)}
html[data-theme="dark"] .sheet{background:linear-gradient(180deg,color-mix(in srgb,var(--rose) 4%,var(--sheet)),var(--paper));
  box-shadow:0 -12px 34px rgba(0,0,0,.5)}
html[data-theme="dark"] .sheet::after{background:linear-gradient(180deg,var(--paper),color-mix(in srgb,var(--rose) 3%,var(--paper)))}
html[data-theme="dark"] .sheet-mask{background:rgba(0,0,0,.5)}
html[data-theme="dark"] .whale{background:radial-gradient(120% 120% at 30% 18%,#3B2A30,#33252A);
  border-color:#4C363D;color:var(--rose-deep)}
html[data-theme="dark"] .msgs{background:var(--paper)}
html[data-theme="dark"] .aiinput,
html[data-theme="dark"] .cfg{background:var(--sheet)}
html[data-theme="dark"] .aiinput .ibox:focus-within{border-color:var(--rose-line);background:color-mix(in srgb,var(--rose) 7%,var(--sheet))}
html[data-theme="dark"] .daytime{background:color-mix(in srgb,var(--rose) 7%,var(--sheet));color:var(--muted)}
html[data-theme="dark"] .ava{background:color-mix(in srgb,var(--rose) 10%,var(--sheet));color:var(--rose-deep);border-color:var(--rose-line)}
html[data-theme="dark"] .msg.ai{background:color-mix(in srgb,var(--rose) 7%,var(--sheet))}
html[data-theme="dark"] .msg.me{background:var(--rose);color:#FFF4F6}
html[data-theme="dark"] .msg.sys{color:#A08890}
html[data-theme="dark"] .qchip{background:color-mix(in srgb,var(--rose) 5%,var(--sheet));border-color:var(--rose-line);color:var(--ink-2)}
html[data-theme="dark"] .qchip:hover{border-color:var(--rose-line);color:var(--rose-deep);background:color-mix(in srgb,var(--rose) 10%,var(--sheet))}
html[data-theme="dark"] .bk{border-color:var(--line);background:linear-gradient(180deg,color-mix(in srgb,var(--rose) 4%,var(--sheet)),var(--sheet))}
html[data-theme="dark"] .bk-ico{background:color-mix(in srgb,var(--rose) 10%,var(--sheet));color:var(--rose-deep)}
html[data-theme="dark"] .bkbtn{background:color-mix(in srgb,var(--rose) 4%,var(--sheet));border-color:var(--line);color:var(--rose-deep)}
html[data-theme="dark"] .bkbtn.ghost{background:color-mix(in srgb,var(--rose) 3%,var(--sheet));color:var(--ink-2)}
html[data-theme="dark"] .bkbtn.done{background:var(--good-soft);border-color:#40604F;color:#BFE0CD}
html[data-theme="dark"] .bk-cfm{background:color-mix(in srgb,var(--rose) 7%,var(--sheet));border-color:var(--line)}
html[data-theme="dark"] .modelbtn{background:color-mix(in srgb,var(--rose) 4%,var(--sheet))}
html[data-theme="dark"] .don{background:color-mix(in srgb,var(--rose) 4%,var(--sheet))}
html[data-theme="dark"] .donsw{background:color-mix(in srgb,var(--rose) 10%,var(--sheet));border-color:var(--line)}
html[data-theme="dark"] .donsw span{background:#E7D5DA}
html[data-theme="dark"] .donsw.on{background:var(--rose);border-color:var(--rose)}
html[data-theme="dark"] .fzTag{border-color:rgba(167,188,216,.28);color:var(--bbz)}
html[data-theme="dark"] .vpill{background:color-mix(in srgb,var(--rose) 4%,var(--sheet));border-color:var(--line)}
html[data-theme="dark"] .vpill:hover{background:color-mix(in srgb,var(--rose) 7%,var(--sheet));border-color:var(--rose-line)}
html[data-theme="dark"] .vpanel{background:linear-gradient(180deg,#2E2328,#2A2025);box-shadow:0 10px 26px rgba(0,0,0,.32)}
html[data-theme="dark"] .vlist::-webkit-scrollbar-thumb{background:#4A363C}
html[data-theme="dark"] .vrow.now .vtag{color:#BFE0CD}
html[data-theme="dark"] .vnow{color:#BFE0CD;border-color:#3E5A4B}
html[data-theme="dark"] .vpts li::before{background:#7A5A62}
html[data-theme="dark"] .more button{background:#2E2328;border-color:#513941}
html[data-theme="dark"] .more button:active{background:#3A2A31}
html[data-theme="dark"] .del.armed{background:var(--rose);color:#FFF6F8}
html[data-theme="dark"] .toast{background:#3B2A30;color:#F6E8EC;box-shadow:0 8px 22px rgba(0,0,0,.4)}
html[data-theme="dark"] .fab{background:#3B2A30;color:#F6E8EC;box-shadow:0 10px 26px rgba(0,0,0,.44)}
html[data-theme="dark"] .rcard{background:linear-gradient(180deg,#302429,#2C2226);border-color:#4A363C;
  box-shadow:0 8px 22px rgba(0,0,0,.28)}
html[data-theme="dark"] .rcard::before{background:repeating-linear-gradient(90deg,#4A363C 0 5px,transparent 5px 10px)}
html[data-theme="dark"] .rcard .rhead .ck{background:var(--good-soft);color:#BFE0CD;border-color:#3E5A4B}
html[data-theme="dark"] .rcard .rmeta span{background:#3A2A30;color:#D9A7B1;border-color:#513941}
html[data-theme="dark"] .rcard .rfoot{border-top-color:#4A363C}
html[data-theme="dark"] .rcard .rundo:active{background:#3A2A30}
html[data-theme="dark"] .row.fresh::after{background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.14),rgba(255,255,255,0))}
html[data-theme="dark"] .fab::after{border-color:rgba(var(--rose-rgb),.3)}
html[data-theme="dark"] .donut::after{background:conic-gradient(from 0deg,rgba(255,255,255,.18),rgba(255,255,255,0) 24%,rgba(255,255,255,0) 76%,rgba(255,255,255,.12) 100%)}

/* ===== 手机专属：页头做成两张小票，总额和要存并排 ===== */
@media (max-width:520px){
  .head{display:grid;grid-template-columns:1fr;gap:9px;align-items:stretch;padding-bottom:11px;margin-bottom:12px}
  .head .mark{flex:none}
  .settings{display:grid;grid-template-columns:1.08fr .92fr;gap:8px;width:100%}
  .set{padding:8px 10px 7px;border:1px solid var(--line-2);border-radius:11px;
    background:color-mix(in srgb,var(--rose) 3%,var(--sheet))}
  .set span{font-size:10px;letter-spacing:.04em}
  .set input,.setval{width:100%;text-align:right;border-bottom:0;font-size:18px;padding:0;margin-top:2px}
  .set input:focus{background:transparent;box-shadow:none}
  .set input::placeholder{color:var(--muted)}
  .settings .set:first-child{background:color-mix(in srgb,var(--rose) 7%,var(--sheet))}
  .settings .set{animation:headTileIn .5s cubic-bezier(.22,1,.36,1) both}
  .settings .set:nth-child(2){animation-delay:.06s}
}
@keyframes headTileIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ===== 小平板 / 大屏手机：账本和看板并排，看板跟着滚 ===== */
@media (min-width:760px) and (max-width:859px){
  .grid{grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);gap:16px;align-items:start}
  .ledger{grid-column:1;grid-row:1}
  .board{grid-column:2;grid-row:1;order:0;position:sticky;top:18px}
  .report,.week{grid-column:1 / -1}
  .panel{padding:16px}
  .big{font-size:clamp(42px,7vw,52px)}
  .donut{width:116px;height:116px}
  .donutwrap{gap:12px}
  .legend{flex-basis:130px}
}

/* ===== 大屏：左账本、中看板、右本周实话，月报通栏 ===== */
@media (min-width:1240px){
  .grid{grid-template-columns:minmax(0,1.08fr) minmax(340px,.84fr) minmax(252px,.62fr);gap:18px;align-items:start}
  .ledger{grid-column:1;grid-row:1}
  .board{grid-column:2;grid-row:1}
  .report{grid-column:1 / -1;grid-row:2;margin-top:0}
  .week{grid-column:3;grid-row:1;position:sticky;top:24px;margin-top:0}
  .week .fine{font-size:10.5px}
}


