:root{--paper:#e7efea;--card:#f7faf8;--ink:#1d2b36;--ink-soft:#5d6e73;--rule:#c3d3cb;--green:#2e6b57;--green-deep:#1f4a3d;--seal:#b8322a;--gold:#b08c45;--loss:#2f8a55;--f-display:"Songti SC", "STSong", "Noto Serif SC", serif;--f-body:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;--f-num:"SF Mono", "JetBrains Mono", "Menlo", monospace;color:var(--ink);font-family:var(--f-body);background:var(--paper);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.55}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit;color:inherit}h1,h2,h3{margin:0;font-weight:600}:focus-visible{outline:2px solid var(--green);outline-offset:2px}.num{font-family:var(--f-num);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.muted{color:var(--ink-soft)}.small{font-size:12px}.nowrap{white-space:nowrap}.income{color:var(--green)}.gain{color:var(--seal)}.loss{color:var(--loss)}.warn{color:var(--seal)}.shell{grid-template-columns:216px 1fr;min-height:100vh;display:grid}.cover{color:#e9e1c8;background:repeating-linear-gradient(135deg, #ffffff06 0 2px, transparent 2px 6px), linear-gradient(180deg, var(--green) 0%, var(--green-deep) 100%);border-right:1px solid #16372d;flex-direction:column;gap:28px;height:100vh;padding:28px 18px;display:flex;position:sticky;top:0}.cover-title{align-items:center;gap:12px;display:flex}.cover-seal{border:2px solid var(--gold);width:40px;height:40px;color:var(--gold);font-family:var(--f-display);border-radius:4px;place-items:center;font-size:22px;font-weight:700;display:grid}.cover-name{font-family:var(--f-display);letter-spacing:.3em;color:#f0e6c6;font-size:22px;font-weight:700}.cover-sub{letter-spacing:.12em;color:#e9e1c8a6;font-size:12px}.cover nav{flex-direction:column;gap:2px;display:flex}.cover nav a{color:#f0e8cdc7;letter-spacing:.04em;border-radius:3px;padding:9px 12px;text-decoration:none}.cover nav a:hover{color:#fff;background:#ffffff0f}.cover nav a.active{color:#f6eccb;box-shadow:inset 3px 0 0 var(--gold);background:#0000002e}.record-btn{border:1px solid var(--gold);color:#f0e6c6;letter-spacing:.1em;cursor:pointer;background:0 0;border-radius:3px;justify-content:space-between;align-items:center;margin-top:auto;padding:11px 14px;display:flex}.record-btn:hover{background:#b08c4526}.account{color:#e9e1c899;justify-content:space-between;align-items:center;gap:8px;font-size:12px;display:flex}.account span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.account button{color:inherit;cursor:pointer;text-underline-offset:3px;background:0 0;border:0;flex:none;text-decoration:underline}.account button:hover{color:#fff}.login{background:repeating-linear-gradient(135deg, #ffffff06 0 2px, transparent 2px 6px), linear-gradient(180deg, var(--green) 0%, var(--green-deep) 100%);place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{background:var(--card);border-radius:6px;flex-direction:column;gap:16px;width:min(360px,100%);padding:28px;display:flex;box-shadow:0 20px 60px #0000004d}.login-card .cover-name{color:var(--green-deep)}.login-card .cover-sub{color:var(--ink-soft)}.login-card .primary{padding:10px}kbd{font-family:var(--f-num);opacity:.7;border:1px solid;border-radius:3px;padding:1px 6px;font-size:11px}.page{background-image:repeating-radial-gradient(circle at 100% 0,#0000 0 22px,#2e6b570d 22px 23px),repeating-radial-gradient(circle at 0 100%,#0000 0 30px,#2e6b5709 30px 31px);background-attachment:fixed;min-width:0;padding:32px 40px 64px}.stack{flex-direction:column;gap:20px;max-width:1180px;margin:0 auto;display:flex}.page-head{border-bottom:2px solid var(--ink);justify-content:space-between;align-items:flex-end;gap:16px;padding-bottom:14px;display:flex}.page-head h1{font-family:var(--f-display);letter-spacing:.06em;font-size:30px}.eyebrow{color:var(--ink-soft);letter-spacing:.2em;font-size:12px}.summary-inline{color:var(--ink-soft);gap:20px;display:flex}.summary-inline b{color:var(--ink);font-size:16px}.card{background:var(--card);border:1px solid var(--rule);border-radius:4px;padding:20px 22px}.card-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.card-head h2{font-family:var(--f-display);letter-spacing:.05em;font-size:18px}.card-head .actions{align-items:center;gap:12px;display:flex}.big{margin:6px 0;font-size:28px;font-weight:600;line-height:1.2}.footnote{color:var(--ink-soft);margin:14px 0 0;font-size:12px}.empty{color:var(--ink-soft);padding:16px 0;list-style:none}.loading{color:var(--ink-soft);padding:40px}.two-col{grid-template-columns:1fr 1fr;gap:20px;display:grid}.two-col.wide-left{grid-template-columns:1.2fr 1fr}.passbook-grid{grid-template-columns:1.35fr 1fr 1.25fr;gap:20px;display:grid}.passbook-grid.three{grid-template-columns:repeat(3,1fr)}.entry-row{grid-template-columns:auto 1fr auto auto;align-items:baseline;gap:10px;padding:7px 0;display:grid}.entry-row .num{text-align:right;min-width:84px}.entry-row.head{color:var(--ink-soft);letter-spacing:.1em;border-bottom:1px solid var(--rule);font-size:12px}.entry-row.total{border-top:1px solid var(--ink);margin-top:4px;padding-top:10px;font-weight:600}.entry-row.total .num:first-of-type{font-size:17px}.dots{border-bottom:1px dotted var(--rule);min-width:12px;transform:translateY(-4px)}.swatch{border-radius:1px;width:8px;height:8px;margin-right:8px;display:inline-block}.goal .entry-row{grid-template-columns:auto 1fr auto}.saving .formula{color:var(--ink-soft);font-size:12px;font-family:var(--f-num);flex-wrap:wrap;gap:4px 10px;display:flex}.meter{background:var(--rule);border-radius:3px;height:6px;margin-top:16px;overflow:hidden}.meter>div{background:var(--green);height:100%}.meter-label{color:var(--ink-soft);margin-top:6px;font-size:12px}.goal{grid-template-columns:124px 1fr;align-items:center;gap:16px;display:grid}.stamp{width:124px;height:124px;transform:rotate(-8deg)}.stamp-outer{fill:none;stroke:var(--seal);stroke-width:2.5px;opacity:.85}.stamp-track{fill:none;stroke:#b8322a24;stroke-width:6px}.stamp-fill{fill:none;stroke:var(--seal);stroke-width:6px;stroke-linecap:butt;transition:stroke-dasharray .8s}.stamp-arc-text{fill:var(--seal);font-family:var(--f-display);letter-spacing:5px;font-size:12px;font-weight:700}.stamp-pct{fill:var(--seal);font-family:var(--f-num);font-size:26px;font-weight:700}.stamp-pct-unit{font-size:12px}.stamp-sub{fill:var(--seal);letter-spacing:.5px;opacity:.85;font-size:8px}@media (prefers-reduced-motion:reduce){.stamp-fill{transition:none}}.cat-list,.big-list{margin:0;padding:0;list-style:none}.cat-list li{grid-template-columns:72px 1fr 76px 48px;align-items:center;gap:10px;padding:6px 0;display:grid}.cat-name{font-size:13px}.cat-bar{background:#1d2b360f;border-radius:1px;height:8px}.cat-bar>span{background:var(--ink);border-radius:1px;height:100%;display:block}.cat-list .num{text-align:right}.delta{color:var(--ink-soft);font-size:12px}.delta.up{color:var(--seal)}.delta.down{color:var(--green)}.big-list li{border-bottom:1px dotted var(--rule);align-items:center;gap:12px;padding:9px 0;display:flex}.big-list li:last-child{border-bottom:0}.big-list .date{color:var(--ink-soft);flex:none;width:60px;font-size:12px}.big-list .who{flex-direction:column;flex:1;min-width:0;display:flex}.big-list .who small,.sub{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}table{border-collapse:collapse;width:100%}th{text-align:left;color:var(--ink-soft);letter-spacing:.08em;border-bottom:1px solid var(--ink);padding:8px 10px;font-size:12px;font-weight:500}td{border-bottom:1px dotted var(--rule);vertical-align:top;padding:8px 10px}.r{text-align:right}td .who{text-overflow:ellipsis;white-space:nowrap;max-width:380px;overflow:hidden}.ledger tr.day-start td{border-top:1px solid var(--rule)}.ledger tr.covered{opacity:.55}.c-date{white-space:nowrap;width:88px}.c-date small{color:var(--ink-soft);font-size:11px;display:block}.tag{border:1px solid var(--rule);color:var(--ink-soft);white-space:nowrap;border-radius:2px;padding:1px 8px;font-size:12px;display:inline-block}.tag.bad{color:var(--seal);border-color:var(--seal)}.covered-tag{color:var(--seal);border:1px solid;border-radius:2px;margin-left:6px;padding:0 4px;font-size:11px}.accounts input,.accounts select{background:0 0;border:1px solid #0000;border-radius:3px;width:100%;padding:6px 8px}.accounts input:hover,.accounts select:hover{border-color:var(--rule)}.accounts input:focus,.accounts select:focus{border-color:var(--green);background:#fff;outline:none}.accounts td{vertical-align:middle;padding:4px 6px}.nav-input{background:0 0;border:1px solid #0000;border-radius:3px;width:90px;padding:4px 6px}.nav-input:hover,.nav-input:focus{border-color:var(--rule);background:#fff}.field{color:var(--ink-soft);flex-direction:column;gap:4px;font-size:12px;display:flex}.field.inline{flex-direction:row;align-items:center;gap:8px}.field.grow{flex:1;min-width:180px}.field input,.field select{border:1px solid var(--rule);color:var(--ink);background:#fff;border-radius:3px;padding:7px 10px;font-size:14px}.field input:disabled{background:0 0}.filters{flex-wrap:wrap;align-items:flex-end;gap:12px;padding:14px 18px;display:flex}.plan-form{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:12px;display:grid}.primary,.ghost{cursor:pointer;letter-spacing:.05em;white-space:nowrap;border-radius:3px;padding:8px 16px}.primary{background:var(--green);color:#fff;border:1px solid var(--green)}.primary:hover{background:var(--green-deep)}.ghost{border:1px solid var(--rule);background:0 0}.ghost:hover{border-color:var(--ink-soft)}button:disabled{opacity:.45;cursor:default}.icon{color:var(--ink-soft);cursor:pointer;background:0 0;border:0;padding:2px 4px;font-size:12px}.icon:hover{color:var(--seal)}.link{color:var(--green);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;font-size:13px;text-decoration:underline}.more{margin:14px auto 0;display:block}.row-actions{flex-wrap:wrap;gap:10px;margin-top:14px;display:flex}.seg{border:1px solid var(--rule);border-radius:3px;display:inline-flex;overflow:hidden}.seg button{cursor:pointer;background:0 0;border:0;padding:6px 16px}.seg button+button{border-left:1px solid var(--rule)}.seg button.on{background:var(--ink);color:#fff}.banner{border-left:3px solid var(--gold);background:#f5efdf;border-radius:2px;padding:10px 14px}.banner.error{border-color:var(--seal);background:#f7e4e1}.hint{color:var(--ink-soft);background:#b08c451a;border-radius:3px;margin:12px 0 0;padding:8px 10px;font-size:12px}.hint.error{color:var(--seal);background:#f7e4e1}.bucket-grid{grid-template-columns:repeat(4,1fr);gap:16px;display:grid}.bucket{border-top:3px solid var(--ink)}.bucket:first-child{border-top-color:var(--gold)}.bucket:nth-child(2){border-top-color:var(--seal)}.bucket:nth-child(3){border-top-color:var(--green)}.bucket-name{font-family:var(--f-display);letter-spacing:.1em;font-size:16px;font-weight:700}.bucket .big{font-size:24px}.dropzone{border:2px dashed var(--rule);text-align:center;flex-direction:column;align-items:center;gap:8px;padding:40px;display:flex}.dropzone.over{border-color:var(--green);background:#eef6f1}.drop-title{font-family:var(--f-display);margin:0;font-size:20px}.howto h3{margin-top:12px;font-size:14px}.howto p{color:var(--ink-soft);margin:4px 0 0;font-size:13px}.dialog{border:1px solid var(--rule);background:var(--card);width:min(520px,92vw);color:var(--ink);border-radius:6px;padding:0;box-shadow:0 20px 60px #14282340}.dialog::backdrop{background:#14231e59}.dialog form{flex-direction:column;gap:16px;padding:22px 24px;display:flex}.dialog-head{justify-content:space-between;align-items:center;display:flex}.dialog-head h2{font-family:var(--f-display);letter-spacing:.1em;font-size:20px}.amount-field{color:var(--ink-soft);flex-direction:column;gap:4px;font-size:12px;display:flex}.amount-input{border-bottom:2px solid var(--ink);align-items:baseline;gap:6px;padding-bottom:4px;display:flex}.amount-input em{font-style:normal;font-family:var(--f-num);color:var(--ink-soft);font-size:22px}.amount-input input{color:var(--ink);font-family:var(--f-num);background:0 0;border:0;outline:none;flex:1;min-width:0;font-size:34px;font-weight:600}.chips{border:0;flex-wrap:wrap;gap:6px;margin:0;padding:0;display:flex}.chips legend{color:var(--ink-soft);margin-bottom:6px;padding:0;font-size:12px}.chip{border:1px solid var(--rule);cursor:pointer;background:#fff;border-radius:2px;padding:4px 10px;font-size:13px}.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}.row2{flex-wrap:wrap;gap:12px;display:flex}.sameday{border-top:1px dotted var(--rule);padding-top:8px}.sameday .label{color:var(--ink-soft);font-size:12px}.sameday-row{grid-template-columns:auto 1fr auto;align-items:baseline;gap:8px;padding:2px 0;font-size:13px;display:grid}.dialog-foot{justify-content:flex-end;gap:8px;display:flex}.toast{background:var(--ink);color:#fff;border-radius:3px;padding:10px 18px;font-size:13px;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0003}@media (width<=1100px){.passbook-grid{grid-template-columns:1fr 1fr}.passbook-grid .goal{grid-column:span 2}.bucket-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=820px){.shell{grid-template-columns:1fr}.cover{flex-flow:wrap;align-items:center;gap:12px;height:auto;padding:12px 16px;position:static}.cover nav{flex-flow:wrap}.cover nav a.active{box-shadow:inset 0 -2px 0 var(--gold)}.record-btn{margin:0 0 0 auto}.record-btn kbd,.account span{display:none}.page-head{flex-wrap:wrap}.filters .field{flex:40%}.page{padding:20px 16px 48px}.passbook-grid,.passbook-grid.three,.two-col,.two-col.wide-left,.bucket-grid{grid-template-columns:minmax(0,1fr)}.passbook-grid .goal{grid-column:auto;grid-template-columns:minmax(0,1fr);justify-items:center}.goal-lines{width:100%}.goal .nowrap{white-space:normal}.card{padding:16px}.accounts th:nth-child(2),.accounts td:nth-child(2){display:none}.ledger{overflow-x:auto}}
