/* ===== 生意账本 · 样式 ===== */
:root{
  --bg:#f2f4f8; --card:#fff; --line:#e6e9f0; --line-2:#f0f2f7;
  --ink:#151a26; --ink-2:#5b6478; --ink-3:#98a0b3;
  --brand:#1d4ed8; --brand-2:#3b6ef5; --brand-soft:#e8efff;
  --buy:#c2410c; --buy-soft:#fff0e6;
  --sell:#047857; --sell-soft:#e3f6ee;
  --in:#0e7490;  --in-soft:#e0f5fa;
  --out:#7c3aed; --out-soft:#f1e9fe;
  --expense:#be123c; --expense-soft:#ffe8ed;
  --warn:#b45309; --warn-soft:#fef3c7;
  --danger:#dc2626;
  --ok:#047857;
  --r:14px; --r-s:10px;
  --sh:0 1px 2px rgba(20,30,60,.05), 0 4px 16px rgba(20,30,60,.05);
  --sh-up:0 -2px 12px rgba(20,30,60,.07);
  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-t:env(safe-area-inset-top,0px);
  --topbar-h:52px; --tabbar-h:58px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%}
body{
  background:var(--bg); color:var(--ink);
  font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  overscroll-behavior-y:none; -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font:inherit;color:inherit}
button{background:none;border:0;padding:0;cursor:pointer}
svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
a{color:var(--brand)}
h1,h2,h3,h4{margin:0;font-weight:600}
.hide{display:none!important}
.mono{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}

/* ===== 骨架 ===== */
#app{min-height:100%;display:flex;flex-direction:column}
#topbar{
  position:sticky;top:0;z-index:30;height:calc(var(--topbar-h) + var(--safe-t));
  padding:var(--safe-t) 6px 0;display:flex;align-items:center;gap:4px;
  background:rgba(255,255,255,.9);backdrop-filter:saturate(180%) blur(14px);
  border-bottom:1px solid var(--line);
}
#topbar h1{flex:1;text-align:center;font-size:16px;font-weight:600;letter-spacing:.2px}
#topbar .tb-back,#topbar .tb-act{width:40px;height:40px;display:grid;place-items:center;border-radius:10px;color:var(--ink-2)}
#topbar .tb-back:active,#topbar .tb-act:active{background:var(--line-2)}
#topbar .tb-act{width:auto;padding:0 12px;font-size:14px;color:var(--brand);font-weight:500}
#topbar.blank{border-bottom-color:transparent;background:transparent;backdrop-filter:none}
#topbar.blank h1{opacity:0}

#view{flex:1;padding:12px 12px calc(var(--tabbar-h) + var(--safe-b) + 20px);outline:none}
#tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;
  height:calc(var(--tabbar-h) + var(--safe-b));padding-bottom:var(--safe-b);
  background:rgba(255,255,255,.94);backdrop-filter:saturate(180%) blur(14px);
  border-top:1px solid var(--line);box-shadow:var(--sh-up);
}
#tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--ink-3);font-size:10.5px;letter-spacing:.3px}
#tabbar button svg{width:23px;height:23px}
#tabbar button.on{color:var(--brand)}

/* ===== 通用块 ===== */
.card{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:14px;margin-bottom:12px}
.card.tight{padding:12px}
.card-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;gap:8px}
.card-hd h2{font-size:15px}
.card-hd .more{font-size:13px;color:var(--brand)}
.sec-t{font-size:12px;color:var(--ink-3);margin:16px 2px 8px;letter-spacing:.5px}
.muted{color:var(--ink-2)}
.dim{color:var(--ink-3)}
.tiny{font-size:12px}
.right{text-align:right}
.center{text-align:center}
.row{display:flex;align-items:center;gap:10px}
.row.between{justify-content:space-between}
.row.wrap{flex-wrap:wrap}
.grow{flex:1;min-width:0}
.ell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nowrap{white-space:nowrap}
.mt6{margin-top:6px}.mt10{margin-top:10px}.mt14{margin-top:14px}.mb6{margin-bottom:6px}
.pos{color:var(--sell)}.neg{color:var(--expense)}
.amt{font-size:19px;font-weight:650;letter-spacing:-.3px}
.amt.sm{font-size:15px}
.amt.lg{font-size:26px}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  height:44px;padding:0 16px;border-radius:var(--r-s);font-size:15px;font-weight:500;
  background:var(--line-2);color:var(--ink);
}
.btn:active{opacity:.7}
.btn.block{width:100%}
.btn.primary{background:var(--brand);color:#fff}
.brand-grad{background:linear-gradient(135deg,var(--brand-2),var(--brand));color:#fff}
.btn.sell{background:var(--sell);color:#fff}
.btn.buy{background:var(--buy);color:#fff}
.btn.ghost{background:#fff;border:1px solid var(--line);color:var(--ink-2)}
.btn.sm{height:34px;padding:0 11px;font-size:13px;border-radius:8px}
.btn.xs{height:28px;padding:0 9px;font-size:12px;border-radius:7px}
.btn.danger{background:#fff1f2;color:var(--danger);border:1px solid #fecdd3}
.btn:disabled{opacity:.45}

.fab{
  position:fixed;right:16px;bottom:calc(var(--tabbar-h) + var(--safe-b) + 16px);z-index:25;
  width:54px;height:54px;border-radius:50%;display:grid;place-items:center;color:#fff;
  background:linear-gradient(135deg,var(--brand-2),var(--brand));box-shadow:0 6px 20px rgba(29,78,216,.4);
}
.fab svg{width:26px;height:26px;stroke-width:2.2}

/* 徽标 */
.tag{display:inline-flex;align-items:center;gap:3px;height:20px;padding:0 7px;border-radius:6px;font-size:11.5px;font-weight:500;white-space:nowrap}
.tag.buy{background:var(--buy-soft);color:var(--buy)}
.tag.sell{background:var(--sell-soft);color:var(--sell)}
.tag.in{background:var(--in-soft);color:var(--in)}
.tag.out{background:var(--out-soft);color:var(--out)}
.tag.expense{background:var(--expense-soft);color:var(--expense)}
.tag.brand{background:var(--brand-soft);color:var(--brand)}
.tag.warn{background:var(--warn-soft);color:var(--warn)}
.tag.gray{background:var(--line-2);color:var(--ink-2)}

/* 列表 */
.list{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);overflow:hidden}
.li{display:flex;align-items:center;gap:11px;padding:12px 14px;border-bottom:1px solid var(--line-2);text-align:left;width:100%}
.li:last-child{border-bottom:0}
.li:active{background:var(--line-2)}
.li .ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font-size:13px;font-weight:600;flex:none}
.li .ic.buy{background:var(--buy-soft);color:var(--buy)}
.li .ic.sell{background:var(--sell-soft);color:var(--sell)}
.li .ic.in{background:var(--in-soft);color:var(--in)}
.li .ic.out{background:var(--out-soft);color:var(--out)}
.li .ic.expense{background:var(--expense-soft);color:var(--expense)}
.li .ic.brand{background:var(--brand-soft);color:var(--brand)}
.li .t1{font-size:15px;font-weight:500}
.li .t2{font-size:12.5px;color:var(--ink-3);margin-top:2px}
.li .r{text-align:right;flex:none}
.li .r .v{font-size:15.5px;font-weight:600;font-variant-numeric:tabular-nums}
.li .r .s{font-size:11.5px;color:var(--ink-3);margin-top:2px}
.empty{padding:44px 20px;text-align:center;color:var(--ink-3)}
.empty svg{width:44px;height:44px;stroke-width:1.3;margin-bottom:10px;opacity:.55}
.empty p{margin:0 0 4px;font-size:14px}
.empty .s{font-size:12.5px}

/* 表单 */
.field{margin-bottom:12px}
.field > label{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:5px;font-weight:500}
.inp,select.inp,textarea.inp{
  width:100%;height:46px;padding:0 12px;border:1px solid var(--line);border-radius:var(--r-s);
  background:#fff;outline:none;appearance:none;font-size:15px;
}
textarea.inp{height:auto;min-height:64px;padding:10px 12px;resize:vertical;line-height:1.5}
.inp:focus{border-color:var(--brand-2);box-shadow:0 0 0 3px var(--brand-soft)}
select.inp{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2398a0b3' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;background-size:18px;padding-right:34px}
.inp.money{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.f2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.f2 .field{margin-bottom:0}
.hint{font-size:12px;color:var(--ink-3);margin-top:5px}
.hint.warn{color:var(--warn)}

/* 金额输入键盘式按钮组 */
.choice{display:flex;gap:6px;flex-wrap:wrap}
.choice button{height:34px;padding:0 12px;border-radius:8px;background:var(--line-2);color:var(--ink-2);font-size:13.5px;border:1px solid transparent}
.choice button.on{background:var(--brand-soft);color:var(--brand);border-color:#c7d8ff;font-weight:600}

/* 统计格 */
.stats{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stats.c3{grid-template-columns:1fr 1fr 1fr}
.stat{background:var(--card);border-radius:var(--r);padding:12px;box-shadow:var(--sh)}
.stat .k{font-size:12px;color:var(--ink-3)}
.stat .v{font-size:19px;font-weight:650;margin-top:3px;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.stat .s{font-size:11.5px;color:var(--ink-3);margin-top:2px}

/* 进度条 / 条形图 */
.bar{height:7px;border-radius:4px;background:var(--line-2);overflow:hidden;margin-top:6px}
.bar i{display:block;height:100%;border-radius:4px;background:var(--brand-2)}
.bar i.sell{background:var(--sell)}.bar i.buy{background:var(--buy)}
.brow{margin-bottom:11px}
.brow:last-child{margin-bottom:0}
.brow .hd{display:flex;justify-content:space-between;font-size:13.5px;gap:10px}
.brow .hd .n{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.brow .hd .v{font-variant-numeric:tabular-nums;font-weight:600;flex:none}

/* 筛选条 */
.filters{display:flex;gap:7px;overflow-x:auto;padding:2px 12px 10px;margin:0 -12px;scrollbar-width:none}
.filters::-webkit-scrollbar{display:none}
.filters button{flex:none;height:32px;padding:0 13px;border-radius:16px;background:#fff;color:var(--ink-2);font-size:13px;border:1px solid var(--line);white-space:nowrap}
.filters button.on{background:var(--ink);color:#fff;border-color:var(--ink);font-weight:500}

/* 搜索 */
.search{position:relative;margin-bottom:10px}
.search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:18px;height:18px;color:var(--ink-3)}
.search input{width:100%;height:42px;padding:0 12px 0 36px;border:1px solid var(--line);border-radius:var(--r-s);background:#fff;outline:none;font-size:15px}
.search input:focus{border-color:var(--brand-2)}

/* 详情行 */
.kv{display:flex;justify-content:space-between;gap:14px;padding:8px 0;border-bottom:1px dashed var(--line-2);font-size:14px}
.kv:last-child{border-bottom:0}
.kv .k{color:var(--ink-2);flex:none}
.kv .v{text-align:right;font-variant-numeric:tabular-nums;word-break:break-all}

/* 单据行 */
.gline{display:flex;align-items:flex-start;gap:8px;padding:10px 0;border-bottom:1px solid var(--line-2)}
.gline:last-of-type{border-bottom:0}
.gline .gi{flex:1;min-width:0}
.gline .gn{font-size:14.5px;font-weight:500}
.gline .gs{font-size:12px;color:var(--ink-3);margin-top:2px}
.gline .gr{text-align:right;flex:none;font-variant-numeric:tabular-nums}
.gline .gr b{font-size:15px}
.gline .gx{width:30px;height:30px;display:grid;place-items:center;color:var(--ink-3);flex:none}
.chk{width:22px;height:22px;border-radius:6px;border:1.8px solid #c9cfdd;flex:none;margin-top:1px;display:grid;place-items:center;font-size:13px;color:#fff;transition:background .12s,border-color .12s}
.chk.on{background:var(--brand);border-color:var(--brand)}
.adder{display:flex;gap:8px;align-items:center;justify-content:center;height:42px;border:1px dashed #c9cfdd;border-radius:var(--r-s);color:var(--brand);font-size:14px;background:#fbfcff;margin-top:8px;width:100%}

/* 缩略图 */
.thumbs{display:flex;gap:8px;flex-wrap:wrap}
.thumb{position:relative;width:66px;height:66px;border-radius:9px;overflow:hidden;background:var(--line-2)}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.thumb button{position:absolute;top:2px;right:2px;width:20px;height:20px;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:13px;line-height:1;display:grid;place-items:center}
.thumb.add{display:grid;place-items:center;border:1px dashed #c9cfdd;color:var(--brand);font-size:22px;background:#fbfcff}

/* 弹层 */
.mask{position:fixed;inset:0;z-index:60;background:rgba(12,18,32,.45);opacity:0;transition:opacity .2s;display:flex;align-items:flex-end}
.mask.in{opacity:1}
.sheet{
  width:100%;max-height:92vh;background:var(--bg);border-radius:18px 18px 0 0;
  display:flex;flex-direction:column;transform:translateY(100%);transition:transform .25s cubic-bezier(.32,.72,0,1);
  padding-bottom:var(--safe-b);
}
.mask.in .sheet{transform:translateY(0)}
.sheet-hd{padding:12px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px;background:#fff;border-radius:18px 18px 0 0}
.sheet-hd h3{flex:1;font-size:16px}
.sheet-hd button{width:34px;height:34px;display:grid;place-items:center;color:var(--ink-3);border-radius:8px}
.sheet-bd{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px}
.sheet-ft{padding:10px 16px;background:#fff;border-top:1px solid var(--line);display:flex;gap:10px}
.sheet-ft .btn{flex:1}

/* 居中弹窗 */
.mask.center{align-items:center;justify-content:center;padding:22px}
.mask.center .sheet{transform:scale(.9);border-radius:16px;transition:transform .18s;max-width:400px}
.mask.center.in .sheet{transform:scale(1)}

/* 提示条 */
#toast-root{position:fixed;left:0;right:0;bottom:calc(var(--tabbar-h) + var(--safe-b) + 24px);z-index:90;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.toast{max-width:84vw;background:rgba(20,26,38,.93);color:#fff;padding:10px 16px;border-radius:10px;font-size:14px;animation:tin .2s;backdrop-filter:blur(8px)}
.toast.err{background:rgba(190,18,60,.95)}
.toast.ok{background:rgba(4,120,87,.95)}
@keyframes tin{from{opacity:0;transform:translateY(8px)}}

/* 首页快捷入口 */
.quick{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.quick button{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 2px;border-radius:12px;background:#fff;box-shadow:var(--sh);font-size:12px;color:var(--ink-2)}
.quick button .qi{width:38px;height:38px;border-radius:11px;display:grid;place-items:center}
.quick button .qi.buy{background:var(--buy-soft);color:var(--buy)}
.quick button .qi.sell{background:var(--sell-soft);color:var(--sell)}
.quick button .qi.in{background:var(--in-soft);color:var(--in)}
.quick button .qi.out{background:var(--out-soft);color:var(--out)}
.quick button .qi.expense{background:var(--expense-soft);color:var(--expense)}
.quick button:active{transform:scale(.96)}

/* 大数字键盘：手机上填金额不用切输入法 */
.numpad{user-select:none;-webkit-user-select:none}
.np-display{display:flex;align-items:baseline;justify-content:flex-end;gap:6px;padding:12px 14px;background:#fff;border-radius:12px 12px 0 0;box-shadow:var(--sh)}
.np-val{font-size:34px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.5px;line-height:1.1}
.np-val:empty::after{content:'0.00';color:var(--ink-3)}
.np-unit{font-size:14px;color:var(--ink-3)}
.np-keys{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border-radius:0 0 12px 12px;overflow:hidden;box-shadow:var(--sh)}
.np-k{appearance:none;border:0;background:#fff;padding:0;height:52px;font-size:22px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.np-k:active{background:var(--brand-soft)}
.np-k.clr{font-size:15px;font-weight:500;color:var(--ink-3)}

/* 工作台常客按钮：一排大按钮，点一下就进收款 */
.favs{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.favs button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:10px 2px;border-radius:12px;background:#fff;box-shadow:var(--sh);min-height:56px}
.favs button:active{transform:scale(.96)}
.favs .fn{font-size:12px;color:var(--ink);font-weight:500;line-height:1.25;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 2px}
.favs .fd{font-size:10px;color:var(--ink-3);line-height:1.2}
.favs button.more{background:#f5f7fb}

/* 待办 */
.alert{display:flex;align-items:center;gap:10px;padding:11px 13px;border-radius:12px;margin-bottom:8px;font-size:13.5px;width:100%;text-align:left}
.alert.warn{background:var(--warn-soft);color:#92400e}
.alert.brand{background:var(--brand-soft);color:#1e40af}

/* 骨架屏 */
.sk{background:linear-gradient(90deg,var(--line-2) 25%,#f7f8fb 50%,var(--line-2) 75%);background-size:200% 100%;animation:sk 1.2s infinite;border-radius:8px}
@keyframes sk{to{background-position:-200% 0}}
