*,*:before,*:after{box-sizing:border-box}:root{color-scheme:dark;--bg: #121110;--card: #1c1a17;--surface-2: #262219;--surface-3: #322d22;--text: #f1ece3;--muted: #a9a196;--faint: #837c70;--accent: #d9a441;--accent-strong: #e8b653;--accent-ink: #1c1304;--accent-weak: rgba(217, 164, 65, .13);--income: #63c98a;--income-weak: rgba(99, 201, 138, .14);--expense: #ef7d7d;--expense-weak: rgba(239, 125, 125, .14);--warn: #e0a83e;--warn-weak: rgba(224, 168, 62, .14);--border: #2e2a24;--border-strong: #453f34;--radius: 12px;--radius-sm: 9px;--radius-pill: 999px;--shadow: 0 16px 44px rgba(0, 0, 0, .5);--shadow-sm: 0 6px 18px rgba(0, 0, 0, .35);--ring: 0 0 0 3px rgba(217, 164, 65, .25)}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:15px;line-height:1.55;overflow-x:hidden;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}#app{max-width:660px;margin:0 auto;padding:22px 18px 120px}h1,h2,h3{line-height:1.3}button,input,select,textarea{font-family:inherit}::selection{background:var(--accent);color:var(--accent-ink)}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}svg{max-width:100%}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:var(--radius-pill);border:2px solid var(--bg)}::-webkit-scrollbar-track{background:transparent}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}.brand{display:flex;align-items:center;gap:10px;min-width:0}.brand-dot{width:11px;height:11px;border-radius:50%;background:var(--accent);flex-shrink:0}.topbar h1{font-size:18px;margin:0;font-weight:650;letter-spacing:-.015em;white-space:nowrap}.month-nav{display:flex;align-items:center;gap:2px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-pill);padding:3px}.month-nav button{border:none;background:transparent;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:var(--muted);line-height:1;transition:background .15s ease,color .15s ease}.month-nav button:hover{background:var(--surface-2);color:var(--accent)}.month-nav button:active{transform:scale(.94)}.month-nav .label{min-width:92px;text-align:center;font-weight:600;font-size:13.5px;color:var(--text);font-variant-numeric:tabular-nums}.month-nav .today-btn{width:auto;padding:0 12px;font-size:12px;color:var(--accent);background:var(--accent-weak);border-radius:var(--radius-pill);font-weight:600}.month-nav .today-btn:hover{background:var(--accent);color:var(--accent-ink)}.notice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:var(--radius);font-size:13px;margin-bottom:16px;animation:rise-in .3s ease-out both}.notice.warn{background:var(--warn-weak);color:#ecc675}.notice.error{background:var(--expense-weak);color:#f2a2a2}.notice-text{flex:1;line-height:1.55}.notice-btn{flex-shrink:0;border:1px solid currentColor;background:transparent;color:inherit;border-radius:var(--radius-sm);padding:4px 12px;font-size:12px;cursor:pointer;transition:background .15s ease}.notice-btn:hover{background:#ffffff14}.summary{display:flex;flex-direction:column;gap:10px;margin-bottom:16px}.hero-tile{background:var(--card);border-radius:var(--radius);padding:18px 20px;display:flex;flex-direction:column;gap:5px;animation:rise-in .4s ease-out both}.hero-tile .k{font-size:12.5px;color:var(--muted);letter-spacing:.02em}.hero-tile .v{font-size:32px;font-weight:650;font-variant-numeric:tabular-nums;letter-spacing:-.02em;line-height:1.12;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hero-tile .v.income{color:var(--income)}.hero-tile .v.expense{color:var(--expense)}.hero-tile .delta{font-size:12px;color:var(--muted)}.summary-pair{display:flex;gap:10px}.summary .tile{flex:1;min-width:0;background:var(--card);border-radius:var(--radius);padding:14px 16px;animation:rise-in .4s ease-out both}.summary-pair .tile:nth-child(1){animation-delay:.05s}.summary-pair .tile:nth-child(2){animation-delay:.1s}.summary .tile .k{font-size:12px;color:var(--muted);margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary .tile .v{font-size:21px;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary .tile .v.income{color:var(--income)}.summary .tile .v.expense{color:var(--expense)}.delta{margin-top:6px;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.delta.up{color:var(--income)}.delta.down{color:var(--expense)}.delta.flat{color:var(--faint)}.tabs{display:flex;gap:4px;padding:4px;background:var(--card);border-radius:var(--radius-pill);margin-bottom:16px;animation:rise-in .3s ease-out both}.tabs button{flex:1;padding:9px 0;border:none;background:transparent;border-radius:var(--radius-pill);cursor:pointer;font-size:14px;color:var(--muted);font-weight:500;transition:background .2s ease,color .2s ease}.tabs button:hover{color:var(--text)}.tabs button.active{background:var(--surface-2);color:var(--accent);font-weight:600}.tabs button:active{transform:scale(.98)}.card{background:var(--card);border-radius:var(--radius);padding:16px;margin-bottom:16px;animation:rise-in .3s ease-out both}.card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:14px;flex-wrap:wrap}.card-head h3{margin:0;font-size:14.5px;font-weight:600;letter-spacing:-.01em}.h3-actions{display:flex;gap:8px;flex-wrap:wrap}.card-head .small,.h3-actions .small{border:1px solid var(--border-strong);background:transparent;border-radius:var(--radius-sm);padding:5px 12px;font-size:12.5px;cursor:pointer;color:var(--muted);transition:border-color .15s ease,color .15s ease,background .15s ease}.card-head .small:hover,.h3-actions .small:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak)}.card-head .small:active,.h3-actions .small:active{transform:translateY(1px)}.h3-actions .small.primary-ghost{border-color:var(--accent);color:var(--accent);background:var(--accent-weak)}.filter-bar{padding:14px}.filter-row{display:flex;gap:8px;align-items:center;margin-bottom:8px}.filter-row:last-child{margin-bottom:0}.filter-row input,.filter-row select{padding:9px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:14px;background:var(--bg);color:var(--text);min-width:0;transition:border-color .15s ease,box-shadow .15s ease}.filter-row input::placeholder{color:var(--faint)}.filter-row input:focus,.filter-row select:focus{outline:none;border-color:var(--accent);box-shadow:var(--ring)}.filter-row #filter-keyword{flex:1}.filter-row #sort-select{flex:0 0 auto;max-width:46%}.filter-row #filter-min,.filter-row #filter-max{flex:1;min-width:70px}.filter-row #filter-category{flex:1.2}.filter-row .small{flex:0 0 auto;border:1px solid var(--border-strong);background:transparent;border-radius:var(--radius-sm);padding:9px 14px;font-size:13px;cursor:pointer;color:var(--text);transition:border-color .15s ease,color .15s ease,background .15s ease}.filter-row .small:disabled{opacity:.4;cursor:not-allowed}.filter-row .small:not(:disabled):hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak)}.filter-row .small:not(:disabled):active{transform:translateY(1px)}.seg{display:flex;gap:4px;padding:3px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm)}.seg button{flex:1;padding:7px 12px;border:none;background:transparent;border-radius:7px;cursor:pointer;font-size:13.5px;color:var(--muted);white-space:nowrap;transition:background .15s ease,color .15s ease}.seg button:hover{color:var(--text)}.seg button:active{transform:scale(.98)}.seg button.active{background:var(--surface-2);color:var(--text);font-weight:600}.seg button.active-income{background:var(--income-weak);color:var(--income);font-weight:600}.seg button.active-expense{background:var(--expense-weak);color:var(--expense);font-weight:600}.seg-inline{flex:1;min-width:0}.filter-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;font-size:12.5px;color:var(--muted);padding:2px 4px 14px}.filter-summary.active .fs-count{color:var(--accent)}.fs-count{font-weight:600;color:var(--text)}.fs-item.income{color:var(--income)}.fs-item.expense{color:var(--expense)}.fs-warn{color:var(--warn)}.day-group{margin-bottom:16px}.day-header{display:flex;justify-content:space-between;align-items:baseline;font-size:13px;color:var(--muted);padding:6px 8px}.day-header span:first-child:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);margin-right:8px;vertical-align:1px}.day-header .income{color:var(--income);font-weight:600}.day-header .expense{color:var(--expense);font-weight:600}.tx-card{background:var(--card);border-radius:var(--radius);padding:6px;animation:rise-in .28s ease-out both}.tx-card.flat{margin-bottom:16px}.tx-row{display:flex;align-items:center;gap:12px;padding:11px 10px;border-radius:10px;transition:background .15s ease}.tx-row:hover{background:var(--surface-2)}.tx-date{flex-shrink:0;width:44px;font-size:12px;color:var(--faint);font-variant-numeric:tabular-nums}.tx-cat{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0;letter-spacing:-.02em}.tx-cat.income{background:var(--income-weak);color:var(--income)}.tx-cat.expense{background:var(--expense-weak);color:var(--expense)}.tx-main{flex:1;min-width:0}.tx-main .cat{font-weight:600;font-size:14px}.tx-main .note{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tx-amount{font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0;font-size:15px}.tx-amount.income{color:var(--income)}.tx-amount.expense{color:var(--expense)}.icon-btn{border:none;background:transparent;cursor:pointer;color:var(--faint);width:32px;height:32px;border-radius:8px;display:grid;place-items:center;flex-shrink:0;transition:background .15s ease,color .15s ease,opacity .15s ease;opacity:.65}.tx-row:hover .icon-btn,.icon-btn:focus-visible{opacity:1}.icon-btn:hover{background:var(--surface-3);color:var(--text);opacity:1}.icon-btn:active{transform:scale(.92)}.icon-btn svg{width:16px;height:16px}.empty-state{text-align:center;padding:38px 16px;color:var(--muted)}.empty-mark{width:46px;height:46px;margin:0 auto 14px;border-radius:50%;background:var(--surface-2);display:grid;place-items:center;color:var(--accent)}.empty-mark svg{width:20px;height:20px}.empty-title{font-size:15.5px;font-weight:600;color:var(--text);margin-bottom:6px}.empty-desc{font-size:13px;line-height:1.6;max-width:320px;margin:0 auto}.empty-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:16px}.empty-actions button{padding:9px 18px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:transparent;cursor:pointer;font-size:13px;color:var(--text);transition:border-color .15s ease,color .15s ease,background .15s ease}.empty-actions button:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak)}.empty-actions button:active{transform:translateY(1px)}.empty-actions button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.empty-actions button.primary:hover{background:var(--accent-strong);color:var(--accent-ink);border-color:var(--accent-strong)}.empty{text-align:center;color:var(--muted);padding:32px 0;font-size:14px}.fab{position:fixed;left:50%;transform:translate(-50%);bottom:22px;background:var(--accent);color:var(--accent-ink);border:none;border-radius:var(--radius-pill);padding:13px 24px;font-size:14.5px;font-weight:650;cursor:pointer;z-index:10;display:flex;align-items:center;gap:8px;box-shadow:0 8px 26px #d9a44147,0 2px 8px #00000073;transition:background .15s ease,box-shadow .15s ease,transform .15s ease}.fab:hover{background:var(--accent-strong);transform:translate(-50%) translateY(-2px);box-shadow:0 12px 32px #d9a4415c,0 2px 8px #00000073}.fab:active{transform:translate(-50%) translateY(0) scale(.98)}.fab svg{width:16px;height:16px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#050403ad;display:flex;align-items:center;justify-content:center;padding:16px;z-index:20;animation:overlay-in .18s ease-out both}.modal{position:relative;background:var(--card);border:1px solid var(--border-strong);border-radius:16px;width:100%;max-width:440px;max-height:90vh;overflow-y:auto;padding:22px;box-shadow:var(--shadow);animation:modal-in .24s cubic-bezier(.2,.8,.3,1) both}.modal-close{position:absolute;top:12px;right:12px;border:none;background:transparent;color:var(--muted);width:30px;height:30px;border-radius:8px;display:grid;place-items:center;cursor:pointer;transition:background .15s ease,color .15s ease}.modal-close:hover{background:var(--surface-2);color:var(--text)}.modal-close svg{width:14px;height:14px}.modal h2{margin:0 0 16px;font-size:18px;font-weight:650;letter-spacing:-.01em;padding-right:28px}.form-row{margin-bottom:14px}.form-row label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:6px;font-weight:500}.form-row input,.form-row select{width:100%;padding:10px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:15px;background:var(--bg);color:var(--text);transition:border-color .15s ease,box-shadow .15s ease}.form-row input::placeholder{color:var(--faint)}.form-row input:focus,.form-row select:focus{outline:none;border-color:var(--accent);box-shadow:var(--ring)}.form-hint{font-size:12.5px;color:var(--muted);background:var(--accent-weak);border-radius:var(--radius-sm);padding:10px 12px;margin-bottom:14px;line-height:1.6}.form-error{color:var(--expense);font-size:13px;min-height:18px;margin-bottom:6px}.modal-actions{display:flex;gap:10px;justify-content:flex-end;align-items:center;margin-top:8px;flex-wrap:wrap}.modal-actions.between{justify-content:space-between}.modal-actions .actions-right{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end}.modal-actions button{padding:9px 16px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:transparent;cursor:pointer;font-size:14px;white-space:nowrap;color:var(--text);transition:border-color .15s ease,color .15s ease,background .15s ease}.modal-actions button:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak)}.modal-actions button.small{padding:5px 12px;font-size:12px}.modal-actions .primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.modal-actions .primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);color:var(--accent-ink)}.modal-actions .danger{background:var(--expense);border-color:var(--expense);color:#2b0a0a;font-weight:600}.modal-actions .danger:hover{background:#f28f8f;border-color:#f28f8f;color:#2b0a0a}.confirm-text{font-size:14px;line-height:1.6;margin-bottom:16px;white-space:pre-line;word-break:break-word;color:var(--text)}.cat-chart text.chart-label{font-size:11.5px;fill:var(--muted)}.cat-chart text.chart-amount{font-size:11.5px;fill:var(--text);font-variant-numeric:tabular-nums}.trend-chart text.chart-label{font-size:10.5px;fill:var(--muted)}.trend-chart text.chart-value{font-size:9.5px;fill:var(--faint);font-variant-numeric:tabular-nums}.bar-fill{transition:filter .15s ease}.bar-fill:hover{filter:brightness(1.22)}.legend{display:flex;gap:14px;justify-content:center;margin-top:8px;font-size:12px;color:var(--muted)}.legend .dot:before{content:"";display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:middle}.legend .dot.income:before{background:var(--income)}.legend .dot.expense:before{background:var(--expense)}.trend-total{margin-top:10px;text-align:center;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.budget-overview{background:var(--surface-2);border-radius:10px;padding:14px;margin-bottom:16px}.bo-stats{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;font-variant-numeric:tabular-nums;margin-bottom:10px;color:var(--text)}.bo-stats .over{color:var(--expense);font-weight:600}.bo-note{margin-top:10px;font-size:12px;color:var(--muted)}.budget-row{margin-bottom:14px}.budget-row:last-child{margin-bottom:0}.budget-head{display:flex;justify-content:space-between;gap:8px;font-size:13px;margin-bottom:6px}.budget-head .budget-cat{font-weight:600}.budget-head .budget-num{color:var(--muted);font-variant-numeric:tabular-nums;text-align:right;word-break:break-word}.budget-head .budget-num.over{color:var(--expense);font-weight:600}.bar{height:8px;background:var(--surface-3);border-radius:var(--radius-pill);overflow:hidden}.bar .fill{height:100%;background:var(--accent);border-radius:var(--radius-pill);transition:width .5s cubic-bezier(.22,.8,.3,1)}.bar.over .fill{background:var(--expense)}.budget-editor{max-height:50vh;overflow-y:auto;padding-right:4px}.io-actions{display:flex;gap:10px;flex-wrap:wrap}.io-actions button{flex:1 1 120px;padding:10px 0;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:transparent;cursor:pointer;font-size:14px;color:var(--text);display:flex;align-items:center;justify-content:center;gap:8px;transition:border-color .15s ease,color .15s ease,background .15s ease}.io-actions button:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-weak)}.io-actions button:active{transform:translateY(1px)}.io-actions svg{width:15px;height:15px}.io-hint{margin-top:12px;font-size:12px;color:var(--muted);line-height:1.6}.danger-zone{margin-top:14px;background:var(--expense-weak);border-radius:10px;padding:10px 12px}.danger-text{border:none;background:transparent;color:var(--expense);font-size:13px;cursor:pointer;padding:4px 0}.danger-text:hover{text-decoration:underline}.toast-container{position:fixed;left:50%;transform:translate(-50%);bottom:88px;display:flex;flex-direction:column;gap:8px;align-items:center;z-index:30;width:min(92vw,480px);pointer-events:none}.toast{display:flex;align-items:center;gap:12px;background:var(--surface-3);color:var(--text);border:1px solid var(--border-strong);border-radius:12px;padding:11px 14px;font-size:13px;box-shadow:var(--shadow-sm);max-width:100%;pointer-events:auto;animation:toast-in .22s cubic-bezier(.2,.8,.3,1) both}.toast-msg{flex:1;min-width:0;word-break:break-word}.toast-action{flex-shrink:0;border:1px solid rgba(217,164,65,.5);background:transparent;color:var(--accent);border-radius:8px;padding:4px 12px;font-size:12px;cursor:pointer;font-weight:600;transition:background .15s ease}.toast-action:hover{background:var(--accent-weak)}@keyframes rise-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}@keyframes modal-in{0%{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}@keyframes toast-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media(max-width:560px){#app{padding:14px 12px 110px}.topbar{flex-wrap:wrap}.month-nav{width:100%;justify-content:space-between}.hero-tile{padding:16px}.hero-tile .v{font-size:27px}.summary-pair{gap:8px}.summary .tile{padding:12px 10px}.summary .tile .v{font-size:17px}.filter-row{flex-wrap:wrap}.filter-row #filter-keyword,.filter-row #sort-select,.filter-row #filter-category,.filter-row #filter-min,.filter-row #filter-max{flex:1 1 100%;max-width:100%}.filter-row .seg-inline,.filter-row .small{flex:1 1 100%}.tx-row{gap:8px;padding:10px 8px}.tx-date{width:34px;font-size:11px}.tx-cat{width:34px;height:34px}.icon-btn{width:30px;height:30px;opacity:1}.modal{max-height:92vh}.budget-head{flex-direction:column;gap:2px}.budget-head .budget-num{text-align:left}}@media(prefers-reduced-motion:reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}
