:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f2f2f7;--surface:#fff;--surface-2:#f9f9fb;--ink:#1c1c1e;--ink-2:#3a3a3c;--muted:#8e8e93;--separator:#3c3c431f;--border:#3c3c432e;--fill:#7878801f;--blue:#007aff;--green:#34c759;--red:#ff3b30;--orange:#ff9500;--radius:14px;--radius-sm:10px;--shadow:0 1px 2px #0000000a, 0 8px 24px #0000000a;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--tabbar-h:56px;--cat-0:#007aff;--cat-1:#ff9500;--cat-2:#34c759;--cat-3:#fc0;--cat-4:#af52de;--cat-5:#30b0c7;--cat-6:#5856d6;--cat-7:#ff2d55;--cat-other:#8e8e93;--good:#34c759;--warn:#ff9500;--critical:#ff3b30;--income:#34c759;--expense:#ff3b30;--income-bg:#34c7591f;--expense-bg:#ff3b301a;--page:var(--bg);--grid:var(--separator);--baseline:var(--border)}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#000;--surface:#1c1c1e;--surface-2:#2c2c2e;--ink:#f5f5f7;--ink-2:#d1d1d6;--muted:#8e8e93;--separator:#545458a6;--border:#545458a6;--fill:#7878803d;--shadow:0 1px 2px #0006;--page:var(--bg);--grid:var(--separator);--income-bg:#34c7592e;--expense-bg:#ff3b3029}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,system-ui,sans-serif;font-size:15px;line-height:1.45}a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}.app-shell{min-height:100vh;padding-bottom:calc(var(--tabbar-h) + var(--safe-bottom) + 1.5rem)}.topbar{z-index:20;padding:calc(.65rem + var(--safe-top)) 1.1rem .65rem;background:color-mix(in srgb, var(--surface) 82%, transparent);-webkit-backdrop-filter:saturate(180%)blur(16px);border-bottom:1px solid var(--separator);justify-content:space-between;align-items:center;gap:.75rem;display:flex;position:sticky;top:0}.topbar-title{letter-spacing:-.02em;font-size:17px;font-weight:700}.topbar-actions{align-items:center;gap:.35rem;display:flex}.topbar-link{color:var(--ink-2);border-radius:999px;padding:.3rem .55rem;font-size:13px}.topbar-link:hover{background:var(--fill);text-decoration:none}.topbar-link.active{color:var(--blue);background:color-mix(in srgb, var(--blue) 12%, transparent);font-weight:600}.nav,.nav-title,.nav-links,.nav-link,.nav-token{display:none}.container{max-width:920px;margin:0 auto;padding:1rem 1rem 2rem}.footer{text-align:center;color:var(--muted);padding:.5rem 1rem 1rem;font-size:12px}.tabbar{z-index:40;height:calc(var(--tabbar-h) + var(--safe-bottom));padding:.25rem .4rem var(--safe-bottom);background:color-mix(in srgb, var(--surface) 92%, transparent);-webkit-backdrop-filter:saturate(180%)blur(18px);border-top:1px solid var(--separator);grid-template-columns:repeat(4,minmax(0,1fr));display:grid;position:fixed;bottom:0;left:0;right:0}.tab{color:var(--muted);min-width:0;min-height:44px;font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:.12rem;padding:.2rem .15rem;text-decoration:none;display:flex}.tab-btn{appearance:none}.tab:hover{color:var(--ink-2);text-decoration:none}.tab.active{color:var(--blue)}.tab-icon{flex-shrink:0;font-size:18px;line-height:1}.tab-label{letter-spacing:.01em;white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:11px;font-weight:600;line-height:1.1;overflow:hidden}.more-root{z-index:50;flex-direction:column;justify-content:flex-end;display:flex;position:fixed;inset:0}.more-backdrop{cursor:pointer;background:#0000005c;border:none;margin:0;padding:0;position:absolute;inset:0}.more-sheet{z-index:1;padding:.35rem .75rem calc(.85rem + var(--safe-bottom));background:var(--surface);box-shadow:var(--shadow);-webkit-overflow-scrolling:touch;border-radius:16px 16px 0 0;max-height:min(70vh,420px);margin:0;position:relative;overflow:auto}.more-handle{background:var(--fill);border-radius:999px;width:36px;height:4px;margin:.35rem auto .75rem}.more-list{margin:0;padding:0;list-style:none}.more-item{background:var(--surface-2);width:100%;min-height:48px;color:var(--ink);font:inherit;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;border:none;border-radius:12px;align-items:center;gap:.85rem;margin-bottom:.35rem;padding:.65rem .85rem;font-size:16px;font-weight:600;display:flex}.more-item:last-child{margin-bottom:0}.more-item.active{color:var(--blue);background:color-mix(in srgb, var(--blue) 12%, var(--surface-2))}.more-item-icon{text-align:center;opacity:.9;flex-shrink:0;width:1.4rem}.more-item-label{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem;margin:.25rem 0 .85rem;display:flex}.page-head h1{letter-spacing:-.03em;margin:0;font-size:28px;font-weight:740}.page-note{margin:-.35rem 0 .9rem}.card{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:.85rem;padding:1rem 1.05rem}.card h2{letter-spacing:-.01em;margin:0 0 .75rem;font-size:16px;font-weight:650}.error-box{color:var(--red);background:var(--expense-bg);border-color:color-mix(in srgb, var(--red) 25%, transparent)}.auth-panel h2{margin-top:0}.cards{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin-bottom:.85rem;display:grid}.stat{margin-bottom:0}.stat-label{color:var(--muted);font-size:12px;font-weight:600}.stat-value{letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-top:.2rem;font-size:22px;font-weight:700}.stat-sub{color:var(--muted);margin-top:.15rem;font-size:12px}.money-expense{color:var(--expense)}.money-income{color:var(--income)}.btn{appearance:none;background:var(--blue);color:#fff;font:inherit;cursor:pointer;border:none;border-radius:999px;padding:.45rem .9rem;font-weight:600}.btn:hover{filter:brightness(1.05)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-ghost{background:var(--fill);color:var(--blue)}.btn-danger{background:var(--red);color:#fff}.btn-small{padding:.28rem .65rem;font-size:13px}input,select,textarea{font:inherit;color:var(--ink);background:var(--surface-2);border:1px solid var(--separator);border-radius:var(--radius-sm);box-sizing:border-box;width:100%;min-width:0;max-width:100%;min-height:44px;padding:.55rem .7rem;display:block}input[type=checkbox],input[type=radio]{width:auto;min-width:0;min-height:0;padding:0;display:inline-block}input[type=date],input[type=datetime-local],input[type=month],input[type=time],input[type=week]{appearance:none;display:block;box-sizing:border-box!important;width:100%!important;min-width:0!important;max-width:100%!important}input[type=date]::-webkit-date-and-time-value{text-align:left;min-width:0}input[type=datetime-local]::-webkit-date-and-time-value{text-align:left;min-width:0}.card{overflow-x:clip}.filter-form,.edit-grid,.auth-row,.stack-fields{min-width:0;max-width:100%;overflow-x:clip}.filter-form>label,.edit-grid>label,.auth-row>label{max-width:100%;overflow-x:clip}input:focus,select:focus,textarea:focus{border-color:color-mix(in srgb, var(--blue) 55%, var(--separator));box-shadow:0 0 0 3px color-mix(in srgb, var(--blue) 18%, transparent);outline:none}label{color:var(--ink-2);gap:.35rem;width:100%;min-width:0;font-size:13px;font-weight:600;display:grid}.hint,.muted,.empty-hint,.loading{color:var(--muted)}.empty-hint,.loading{text-align:center;padding:1.25rem .5rem}.toast{border-radius:var(--radius);border:1px solid var(--separator);background:var(--surface);justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.85rem;padding:.7rem .9rem;display:flex}.toast-ok{border-color:color-mix(in srgb, var(--green) 35%, transparent);background:var(--income-bg)}.toast-err{border-color:color-mix(in srgb, var(--red) 35%, transparent);background:var(--expense-bg)}.month-nav{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.month-nav.compact{gap:.35rem}.month-title{text-align:center;min-width:5.5rem;font-size:15px;font-weight:700}.spacer{flex:1}.filters{padding:.85rem 1rem}.filter-form{flex-direction:column;align-items:stretch;gap:.75rem;width:100%;display:flex}.filter-form>label,.filter-form>.weekday-picks,.filter-form>.edit-actions{width:100%;min-width:0}.filter-form>.btn{width:100%;min-height:44px}.filter-form .weekday-picks label{align-items:center;gap:.25rem;width:auto;font-weight:600;display:inline-flex}@media (width>=720px){.filter-form{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));align-items:end;gap:.75rem;display:grid}.filter-form>.btn{justify-self:start;width:auto}}.day-group{padding:.15rem 0;overflow:hidden}.day-header{color:var(--muted);justify-content:space-between;align-items:baseline;padding:.75rem 1rem .35rem;font-size:13px;font-weight:650;display:flex}.day-title{color:var(--ink-2)}.day-sub{font-variant-numeric:tabular-nums}.bill-main{border-top:1px solid var(--separator);grid-template-columns:52px minmax(0,1fr) auto;align-items:start;gap:.55rem .7rem;padding:.7rem 1rem;display:grid}.bill-time{color:var(--muted);font-variant-numeric:tabular-nums;padding-top:.15rem;font-size:12px}.bill-text{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.bill-desc{min-width:0;font-weight:600}.bill-badges{flex-wrap:wrap;gap:.3rem;margin-top:.3rem;display:flex}.bill-actions{flex-wrap:wrap;justify-content:flex-end;gap:.3rem;display:flex}.badge{background:var(--fill);color:var(--ink-2);border-radius:999px;align-items:center;padding:.12rem .45rem;font-size:11px;font-weight:650;display:inline-flex}.badge-tail,.badge-sender{background:color-mix(in srgb, var(--blue) 12%, transparent);color:var(--blue)}.badge-hidden{background:var(--expense-bg);color:var(--red)}.badge-preauth{background:color-mix(in srgb, var(--orange) 18%, transparent);color:var(--orange)}.cat-0,.cat-1,.cat-2,.cat-3,.cat-4,.cat-5,.cat-6,.cat-7,.cat-other{color:#fff}.cat-0{background:var(--cat-0)}.cat-1{background:var(--cat-1)}.cat-2{background:var(--cat-2)}.cat-3{background:var(--cat-3);color:#1c1c1e}.cat-4{background:var(--cat-4)}.cat-5{background:var(--cat-5)}.cat-6{background:var(--cat-6)}.cat-7{background:var(--cat-7)}.cat-other{background:var(--cat-other)}.bill-amount,.amount{font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right;font-size:15px;font-weight:700}.amount.expense{color:var(--expense)}.amount.income{color:var(--income)}.edit-form{border-top:1px solid var(--separator);background:var(--surface-2);padding:.75rem 1rem 1rem}.edit-grid{flex-direction:column;gap:.75rem;width:100%;margin-bottom:.75rem;display:flex}.edit-grid>label{width:100%;min-width:0}@media (width>=720px){.edit-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));display:grid}}.edit-wide{grid-column:1/-1}.edit-actions{flex-wrap:wrap;gap:.45rem;display:flex}.bars{gap:.55rem;display:grid}.bar-row{grid-template-columns:72px 1fr 72px;align-items:center;gap:.5rem;display:grid}.bar-label{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.bar-track{background:var(--fill);border-radius:999px;height:8px;overflow:hidden}.bar-track>span,.bar-fill{background:var(--blue);border-radius:999px;height:100%;display:block}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;font-size:12px}.table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:13px}.table th,.table td{border-bottom:1px solid var(--separator);text-align:left;vertical-align:top;padding:.55rem .45rem}.table th{color:var(--muted);font-size:12px;font-weight:650}.table .num{font-variant-numeric:tabular-nums;text-align:right}.cat-table td:first-child{align-items:center;gap:.4rem;display:flex}.cat-table input{width:100%}.cat-table input.cat-name{flex:1;width:auto;min-width:6rem;font-weight:600}.cat-table .actions,.row-actions,.actions{white-space:nowrap;flex-wrap:wrap;gap:.3rem;display:flex}.dec{border:1px solid var(--separator);white-space:nowrap;border-radius:999px;padding:.05rem .5rem;font-size:12px}.dec-created{background:var(--income-bg);color:var(--income);border-color:color-mix(in srgb, var(--green) 30%, transparent)}.dec-error{background:var(--expense-bg);color:var(--expense);border-color:color-mix(in srgb, var(--red) 30%, transparent)}.dec-dup{color:var(--ink-2)}.dec-skip{color:var(--muted)}.dec-run-ok{color:var(--good)}.dec-run-error{color:var(--critical)}.dec-run-running{color:var(--blue)}.dec-run-not_configured{color:var(--muted)}.auth-row{flex-direction:column;align-items:stretch;gap:.75rem;width:100%;display:flex}.auth-row>label{width:100%;min-width:0}.auth-row>.btn{width:100%;min-height:44px}@media (width>=720px){.auth-row{grid-template-columns:1fr auto;align-items:end;display:grid}.auth-row>.btn{width:auto}}.weekday-picks{flex-wrap:wrap;align-items:center;gap:.45rem;width:100%;display:flex}.check{background:var(--fill);border-radius:999px;align-items:center;gap:.25rem;padding:.25rem .55rem;font-size:12px;font-weight:600;display:inline-flex}.check input{width:auto}.banner{border:1px solid var(--separator);border-radius:var(--radius);background:var(--surface);color:var(--ink-2);align-items:center;gap:.6rem;margin-bottom:.85rem;padding:.55rem .9rem;display:flex}.banner-icon{font-weight:700}.banner-text{flex:1}.banner-ok .banner-icon,.banner-idle .banner-icon{color:var(--good)}.banner-empty .banner-icon{color:var(--muted)}details summary{cursor:pointer;color:var(--blue);font-weight:600}details form{margin-top:.75rem}.chart-grid{grid-template-columns:1.2fr 1fr;gap:.85rem;display:grid}.chart-card{margin-bottom:0}.chart-span{grid-column:1/-1}.chart-box{height:240px;position:relative}.chart-box-donut{max-width:320px;height:260px;margin:0 auto}.chat-page{flex-direction:column;gap:.5rem;display:flex}.chat-panel{flex-direction:column;min-height:min(62vh,620px);margin-bottom:0;padding:0;display:flex;overflow:hidden}.chat-stream{background:var(--bg);flex-direction:column;flex:1;gap:.65rem;padding:1rem 1rem .5rem;display:flex;overflow-y:auto}.chat-bubble{max-width:100%;display:flex}.chat-user{justify-content:flex-end}.chat-assistant{justify-content:flex-start}.chat-bubble-inner{white-space:pre-wrap;word-break:break-word;border:1px solid var(--separator);border-radius:18px;max-width:min(520px,92%);padding:.6rem .9rem;line-height:1.45}.chat-user .chat-bubble-inner{background:var(--blue);color:#fff;border-color:#0000;border-bottom-right-radius:5px}.chat-assistant .chat-bubble-inner{background:var(--surface);border-bottom-left-radius:5px}.chat-pending .chat-bubble-inner{color:var(--muted);font-style:italic}.chat-composer{border-top:1px solid var(--separator);background:var(--surface);align-items:flex-end;gap:.5rem;padding:.75rem 1rem;display:flex}.chat-composer textarea{resize:none;background:var(--bg);border-radius:16px;flex:1;min-height:2.6rem;max-height:8rem}.chat-composer .btn{flex-shrink:0}.chat-quick{background:var(--surface);flex-wrap:wrap;gap:.35rem;padding:0 1rem .85rem;display:flex}.table-stack thead{display:none}.table-stack tbody tr{border-bottom:1px solid var(--separator);padding:.85rem 0;display:block}.table-stack tbody tr:last-child{border-bottom:none}.table-stack tbody td{border:none;width:100%;padding:.3rem 0;display:block}.table-stack tbody td.row-actions{padding-top:.55rem;display:flex}.table-stack tbody td input,.table-stack tbody td select,.table-stack tbody td textarea{width:100%}.table-stack tbody td .stack-fields{flex-direction:column;gap:.45rem;width:100%;display:flex}@media (width>=720px){.table-stack thead{display:table-header-group}.table-stack tbody tr{border-bottom:none;padding:0;display:table-row}.table-stack tbody td{border-bottom:1px solid var(--separator);width:auto;padding:.55rem .45rem;display:table-cell}.table-stack tbody td.row-actions{display:flex}}@media (width<=720px){.cards,.chart-grid{grid-template-columns:1fr}.chart-span{grid-column:auto}.container{padding:.85rem .75rem 2rem}.bill-main{grid-template-columns:44px minmax(0,1fr) auto}.bill-actions{text-align:right;grid-column:1/-1;justify-content:flex-end}.bar-row{grid-template-columns:64px 1fr}.bar-value{text-align:left;grid-column:1/-1}.page-head h1{font-size:24px}.month-nav .spacer{display:none}.stats,.cards.stats{grid-template-columns:1fr}.chat-composer{flex-direction:column;align-items:stretch}.chat-composer .btn{width:100%}}
