*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}html,body,button,input,textarea{font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,sans-serif}body{margin:0;min-height:100dvh;color:#1c1917;background:radial-gradient(900px 420px at 50% -10%,#f7f1e6,transparent 60%),#e6dfd4;font-size:15px;line-height:1.5}body.lock{overflow:hidden}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer;border:0;background:none;padding:0;touch-action:manipulation;min-height:48px;min-width:48px}h1,h2,h3,p{margin:0}button:focus-visible,input:focus-visible,textarea:focus-visible,summary:focus-visible{outline:2px solid #1c1917;outline-offset:2px}.shell{width:min(480px,100%);margin:0 auto;min-height:100dvh;background:#f4efe8}.login{padding:calc(28px + env(safe-area-inset-top)) 20px calc(32px + env(safe-area-inset-bottom))}.logo{width:52px;height:52px;display:grid;place-items:center;border-radius:16px;background:#1c1917;color:#f3e2c4;font-size:22px;font-weight:700}.eyebrow{margin-top:18px;font-size:13px;color:#8a8175}.login h1{margin-top:4px;font-size:32px;line-height:1.2;font-weight:700}.desc{margin-top:8px;color:#5c564e;font-size:15px;line-height:1.65}.samples{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:22px 0}.banner{margin:0 0 12px;padding:10px 12px;border-radius:12px;background:#fff1f2;color:#9f1239;font-size:14px}.tip{margin:10px 0 0;color:#8a8175;font-size:12px;line-height:1.6}.or{margin:18px 0 12px;text-align:center;color:#8a8175;font-size:13px}.wx,.btn.block,.btn-new{font-weight:650}.wx{width:100%;height:52px;border-radius:14px;background:#07c160;color:#fff;font-size:16px}.wx:disabled{background:#c5d5cc}.btn.block{width:100%;height:48px;border-radius:14px;background:#1c1917;color:#fff;font-size:16px}.btn.block:disabled,.deduct:disabled{opacity:.55}.dev{margin-top:16px}.help{margin-top:28px;color:#6b645c;font-size:13px;line-height:1.65}.help summary{cursor:pointer;display:flex;align-items:center;min-height:48px;font-size:16px}.help ol{margin:10px 0 0;padding-left:18px}.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:calc(14px + env(safe-area-inset-top)) 16px 12px;background:#f4efe8eb;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.who{display:flex;align-items:center;gap:12px;min-width:0}.avatar{width:48px;height:48px;border-radius:50%;overflow:hidden;flex:none;display:grid;place-items:center;background:#1c1917;color:#f3e2c4;font-weight:700}.avatar img{width:100%;height:100%;object-fit:cover}.hello,.sub,.kind,.remain-label,.used,.pass-note{color:#8a8175}.hello{font-size:12px}.top h1{font-size:20px;font-weight:700;line-height:1.2}.sub{font-size:12px}.btn-new{height:48px;padding:0 18px;border-radius:999px;background:#1c1917;color:#fff;font-size:16px;flex:none}.page{padding-bottom:calc(28px + env(safe-area-inset-bottom))}.filters{display:flex;gap:8px;padding:4px 16px 12px;overflow-x:auto}.filters button{height:48px;padding:0 16px;border-radius:999px;border:1px solid #ddd4c8;color:#6b645c;font-size:16px;flex:none}.filters button.on{background:#1c1917;border-color:#1c1917;color:#fff}.search{display:block;padding:0 16px 12px}.search input{width:100%;height:48px;border:1px solid #e4dcd0;border-radius:12px;padding:0 12px;font-size:16px;background:#fff}.list{display:flex;flex-direction:column;gap:14px;padding:0 16px}.quiet-empty{padding:24px 16px;color:#8a8175;text-align:center}.empty{padding:8px 16px 0}.empty h2{margin:16px 0 8px;font-size:22px;font-weight:700}.empty p{margin-bottom:18px;color:#6b645c;line-height:1.65}.ghost-card{height:112px;border-radius:22px;border:1.5px dashed #d9d0c4;background:repeating-linear-gradient(135deg,#faf7f2,#faf7f2 8px,#f3eee6 8px,#f3eee6 16px)}.sk{height:196px;border-radius:22px;background:linear-gradient(90deg,#ebe4da 25%,#f7f3ec 37%,#ebe4da 63%);background-size:400% 100%;animation:shimmer 1.2s ease infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:0 0}}.pass{position:relative;isolation:isolate;overflow:hidden;border-radius:22px;padding:16px 16px 8px;color:#f7f3ec;box-shadow:0 16px 40px #281c1229}.pass.money{background:radial-gradient(120px 80px at 100% 0%,rgba(232,201,155,.35),transparent 70%),linear-gradient(165deg,#4a3428,#241812 55%,#1a120e)}.pass.count{background:radial-gradient(120px 80px at 100% 0%,rgba(167,230,205,.28),transparent 70%),linear-gradient(165deg,#1f4a42,#14332e 55%,#0e2420)}.pass.is-empty{filter:grayscale(.35);opacity:.8}.pass:after{content:"";position:absolute;z-index:-1;right:-46px;top:-58px;width:140px;height:140px;border-radius:50%;border:16px solid rgba(255,255,255,.05)}.pass-top{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.kind,.remain-label,.used,.pass-note{color:#f7f3ecad}.kind{font-size:12px}.pass h2{margin-top:2px;font-size:20px;font-weight:650}.pass-note{max-width:220px;margin-top:4px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.flag{flex:none;padding:3px 8px;border-radius:999px;background:#ffffff29;font-size:12px}.remain-label{margin-top:16px;font-size:12px}.balance-row{display:flex;align-items:baseline;gap:4px;white-space:nowrap}.num{font-family:Bahnschrift,DIN Alternate,Avenir Next,Segoe UI,sans-serif;font-size:46px;font-weight:600;letter-spacing:-.04em;line-height:.95;font-variant-numeric:tabular-nums}.num.compact{font-size:34px}.currency,.unit{font-size:16px;opacity:.8}.used{margin:8px 0 14px;font-size:12px}.option-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}.option-edit{display:flex;align-items:center;gap:8px;margin-bottom:8px}.option-edit .field-box{flex:1}.option-edit .remove{flex:none;min-width:72px;height:48px;padding:0 12px;border-radius:12px;background:#fff1f2;color:#9f1239;font-size:16px}.add-option{width:100%;height:48px;margin-top:4px;border-radius:12px;background:#f4efe8;color:#1c1917;font-size:16px;font-weight:650}.choice-label{margin:0 0 8px;color:#7c756c;font-size:13px}.deduct{width:100%;height:52px;border-radius:14px;font-size:15px;font-weight:700}.pass.money .deduct{background:#f3e2c4;color:#2a1b12}.pass.count .deduct{background:#d5f3e8;color:#10241f}.deduct:disabled{background:#ffffff29;color:#ffffffbf}.deduct:active:not(:disabled){transform:scale(.985)}.links{display:grid;grid-template-columns:repeat(3,1fr)}.links button{height:48px;color:#ffffffe6;font-size:16px}.pass.sample{min-height:108px;padding:12px;box-shadow:none}.pass.sample h2{font-size:15px}.pass.sample .num{font-size:28px}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:flex-end;justify-content:center;background:#1c161075;animation:fade .2s ease}.panel{width:min(480px,100%);max-height:min(92dvh,760px);overflow:auto;overscroll-behavior:contain;padding:8px 20px calc(18px + env(safe-area-inset-bottom));border-radius:22px 22px 0 0;background:#fff;box-shadow:0 -10px 40px #0000001f;animation:up .28s cubic-bezier(.2,.8,.2,1)}.grab{width:36px;height:4px;margin:6px auto 12px;border-radius:999px;background:#e4ddd2}.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.sheet-head h3{font-size:18px;font-weight:700}.sheet-head button{min-width:64px;padding:0 4px 0 12px;color:#5c564e;font-size:16px}.field{display:block;margin:0 0 14px}.field>span{display:block;margin-bottom:6px;font-size:13px;color:#7c756c}.field input.plain,.field textarea,.field-box{width:100%;border:1px solid #e4dcd0;background:#faf7f2;border-radius:12px}.field input.plain,.field textarea{padding:12px 14px;font-size:16px}.field textarea{min-height:72px;resize:vertical}.field-box{display:flex;align-items:center;gap:8px;padding:0 12px}.field-box input{width:100%;height:48px;border:0;background:transparent;padding:0;font-size:16px;outline:none}.field-box em{font-style:normal;color:#8a8175;font-size:14px;flex:none}.field-box:focus-within,.field input.plain:focus,.field textarea:focus{border-color:#1c1917;outline:none}.seg{display:grid;grid-template-columns:1fr 1fr;gap:8px}.seg button{min-height:64px;text-align:left;padding:12px 14px;border-radius:14px;border:1px solid #e6dfd4;background:#fff}.seg button strong{display:block;font-size:16px}.seg button small{color:#8a8175;font-size:12px}.seg button.on{background:#1c1917;border-color:#1c1917;color:#fff}.seg button.on small{color:#ffffffb8}.preview-line{margin:0 0 14px;padding:10px 12px;border-radius:12px;background:#f6f1ea;color:#5c564e;font-size:13px}.form-error{margin:0 0 10px;color:#9f1239;font-size:13px}.danger{width:100%;height:48px;margin-top:8px;border-radius:12px;background:#fff1f2;color:#9f1239;font-size:16px}.now{margin-bottom:4px;color:#8a8175;font-size:13px}.stepper{display:grid;grid-template-columns:56px 1fr 56px;gap:8px;align-items:center}.stepper button{height:56px;border-radius:16px;background:#f4efe8;font-size:28px}.stepper input{width:100%;height:72px;border:0;background:transparent;text-align:center;font-family:Bahnschrift,DIN Alternate,Segoe UI,sans-serif;font-size:40px;font-variant-numeric:tabular-nums}.unit-label{margin:-4px 0 10px;text-align:center;color:#8a8175;font-size:13px}.presets{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.presets button{min-width:88px;height:48px;padding:0 16px;border-radius:999px;background:#f4efe8;font-size:16px;font-weight:650}.presets button.on{background:#1c1917;color:#fff}.after{margin:0 0 14px;font-size:15px}.after.bad{color:#9f1239}.log-list{list-style:none;margin:0;padding:0}.log-item{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid #f1ebe3}.log-main{font-size:15px}.log-time{margin-top:2px;font-size:12px;color:#8a8175}.log-item strong{font-size:15px;font-variant-numeric:tabular-nums}.minus{color:#9a3412}.plus{color:#0f766e}.account-name{margin:4px 0 8px;font-size:22px;font-weight:700}.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));z-index:80;max-width:min(420px,calc(100% - 32px));transform:translate(-50%);padding:12px 16px;border-radius:999px;background:#1c1917;color:#fff;font-size:14px;text-align:center;box-shadow:0 10px 30px #0003}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.mask,.panel,.sk{animation:none}}
