:root{--bg: #f8fbff;--surface: #ffffff;--surface-2: #f2f7fd;--border: rgba(99, 130, 182, .2);--text: #1e293b;--muted: #475569;--accent: #1a2a6c;--accent-soft: #4682b4;--accent-wash: #d6e4f0;--on-accent: #ffffff;--danger: #d1414b;--ok: #3f9142;--warn: #d98324;--radius: 12px;--radius-sm: 8px;--transition: .3s cubic-bezier(.25, .8, .25, 1);--shadow-card: 0 4px 15px rgba(99, 130, 182, .08);--shadow-card-hover: 0 10px 25px rgba(26, 42, 108, .15);color-scheme:light dark}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #0c1420;--surface: #131e2d;--surface-2: #18263a;--border: rgba(100, 160, 220, .16);--text: #c8d8ea;--muted: #7a96b4;--accent: #7eb5f5;--accent-soft: #58a6d0;--accent-wash: #1b2d44;--on-accent: #04121f;--danger: #ef7a82;--ok: #7cc47f;--warn: #e9a94f;--shadow-card: 0 4px 15px rgba(0, 0, 0, .35);--shadow-card-hover: 0 10px 25px rgba(0, 0, 0, .5)}}:root[data-theme=dark]{--bg: #0c1420;--surface: #131e2d;--surface-2: #18263a;--border: rgba(100, 160, 220, .16);--text: #c8d8ea;--muted: #7a96b4;--accent: #7eb5f5;--accent-soft: #58a6d0;--accent-wash: #1b2d44;--on-accent: #04121f;--danger: #ef7a82;--ok: #7cc47f;--warn: #e9a94f;--shadow-card: 0 4px 15px rgba(0, 0, 0, .35);--shadow-card-hover: 0 10px 25px rgba(0, 0, 0, .5);color-scheme:dark}:root[data-theme=light]{color-scheme:light}*{box-sizing:border-box}body{margin:0;min-height:100vh;display:flex;flex-direction:column;background:var(--bg);color:var(--text);font:15px/1.6 system-ui,-apple-system,Segoe UI,Noto Sans TC,sans-serif;transition:background-color var(--transition),color var(--transition)}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;background:radial-gradient(60rem 30rem at 12% -8%,color-mix(in srgb,var(--accent-soft) 14%,transparent),transparent 70%),radial-gradient(45rem 28rem at 92% 4%,color-mix(in srgb,var(--accent) 10%,transparent),transparent 70%)}[hidden]{display:none!important}a{color:var(--accent-soft);font-weight:600;text-decoration:none;transition:color var(--transition)}a:hover{color:var(--accent)}:focus-visible{outline:2px solid var(--accent-soft);outline-offset:2px}h1,h2,h3{line-height:1.3}button{font:inherit;font-weight:600;font-size:.85rem;padding:.45rem .85rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--muted);cursor:pointer;white-space:nowrap;transition:color var(--transition),border-color var(--transition),background var(--transition),box-shadow var(--transition),transform var(--transition)}button:hover{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-wash)}button:active{transform:translateY(1px)}button.active{background:var(--accent-wash);border-color:var(--accent-soft);color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent-soft)}input:not([type=checkbox]):not([type=radio]),select{font:inherit;font-size:.9rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);transition:border-color var(--transition),box-shadow var(--transition)}input:not([type=checkbox]):not([type=radio]):focus,select:focus{border-color:var(--accent-soft);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent-soft) 18%,transparent);outline:none}input[type=checkbox]{width:1.05rem;height:1.05rem;accent-color:var(--accent-soft);cursor:pointer;flex:none}input[type=date]{color-scheme:inherit}.upload{font:inherit;font-size:.85rem;font-weight:600;padding:.45rem .95rem;border:1px solid transparent;border-radius:var(--radius-sm);background:var(--accent);color:var(--on-accent);cursor:pointer;white-space:nowrap;box-shadow:0 2px 10px color-mix(in srgb,var(--accent) 25%,transparent);transition:all var(--transition)}.upload:hover{background:var(--accent-soft);color:var(--on-accent);transform:translateY(-1px);box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 35%,transparent)}.linky{border-color:transparent;background:none;color:var(--muted);font-weight:500;padding:.2rem .35rem;text-decoration:underline;text-underline-offset:3px}.linky:hover{color:var(--accent);background:none;border-color:transparent}.app-top{position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 82%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}.app-header,.app-bar{max-width:1240px;margin:0 auto;width:100%;padding:0 1.25rem}.app-header{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .55rem;padding-top:.9rem}.brand-mark{font-size:1.25rem;line-height:1;-webkit-user-select:none;user-select:none}.brand{font-size:1.05rem;font-weight:700;color:var(--accent);margin:0;white-space:nowrap}.brand-divider{color:var(--accent-soft);opacity:.6}.brand-page{font-size:1.05rem;font-weight:600;color:var(--muted)}.header-actions{margin-left:auto;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;justify-content:flex-end}.app-bar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;padding-top:.6rem;padding-bottom:.7rem}.tabs{display:flex;flex-wrap:wrap;gap:.35rem}.range{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin-left:auto}.theme-toggle{display:flex;align-items:center;gap:8px;padding:8px 15px 8px 12px;border:none;border-radius:30px;background:var(--accent);color:#fff;font-weight:600;box-shadow:0 4px 18px color-mix(in srgb,var(--accent) 30%,transparent);transition:transform var(--transition),box-shadow var(--transition),background var(--transition)}.theme-toggle:hover{background:var(--accent);color:#fff;transform:scale(1.05) translateY(-1px);box-shadow:0 8px 26px color-mix(in srgb,var(--accent) 40%,transparent)}.theme-toggle:active{transform:scale(.96)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle,:root:not([data-theme=light]) .theme-toggle:hover{background:linear-gradient(135deg,#e8a020,#f5c842);color:#1a1000;box-shadow:0 4px 18px #e6a01e66}}:root[data-theme=dark] .theme-toggle,:root[data-theme=dark] .theme-toggle:hover{background:linear-gradient(135deg,#e8a020,#f5c842);color:#1a1000;box-shadow:0 4px 18px #e6a01e66}.theme-toggle-icons{position:relative;width:18px;height:18px;flex:none}.theme-toggle-icons svg{position:absolute;top:0;right:0;bottom:0;left:0;width:18px;height:18px;transition:opacity var(--transition),transform var(--transition)}.icon-sun{opacity:0;transform:rotate(-90deg) scale(.5)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .icon-sun{opacity:1;transform:none}:root:not([data-theme=light]) .icon-moon{opacity:0;transform:rotate(90deg) scale(.5)}}:root[data-theme=dark] .icon-sun{opacity:1;transform:none}:root[data-theme=dark] .icon-moon{opacity:0;transform:rotate(90deg) scale(.5)}#account{max-width:10rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#lang{min-width:2.75rem}#app{flex:1;display:flex;flex-direction:column}main{flex:1;width:100%;padding:1.5rem 1.25rem 2.5rem;max-width:1240px;margin:0 auto}.panels{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:1.15rem 1.25rem 1.25rem;overflow-x:auto;transition:box-shadow var(--transition),transform var(--transition)}.panel:hover{box-shadow:var(--shadow-card-hover)}.panel h2,.budget-head h2,.account-section h3{font-size:.78rem;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0 0 .85rem}.panel h2:after,.budget-head h2:after{content:"";display:block;width:28px;height:3px;margin-top:.4rem;border-radius:2px;background:var(--accent-soft)}.totals{display:grid;gap:.85rem;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));margin-bottom:1rem}.tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:.95rem 1.1rem;transition:transform var(--transition),box-shadow var(--transition)}.tile:hover{transform:translateY(-2px);box-shadow:var(--shadow-card-hover)}.tile .label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.09em;color:var(--muted)}.tile .value{font-size:1.6rem;font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums;line-height:1.3}.bars{display:grid;gap:.55rem}.bar-row{display:grid;grid-template-columns:minmax(120px,8rem) 1fr auto;gap:.6rem;align-items:center}.bar-track{background:color-mix(in srgb,var(--accent-soft) 14%,transparent);border-radius:999px;height:12px;overflow:hidden;min-width:40px}.bar-fill{display:block;height:100%;border-radius:999px;background:var(--accent-soft);transition:width var(--transition)}.bar-value{font-variant-numeric:tabular-nums;font-size:.85rem;text-align:right;min-width:5.5rem;display:grid;line-height:1.25}.bar-amount{color:var(--text);font-weight:600}.bar-share{color:var(--muted);font-size:.75rem}.bar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9rem}@media(max-width:420px){.bar-row{grid-template-columns:minmax(90px,6.5rem) 1fr auto;gap:.45rem}}#invoice-list,#income-list,#review-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:.35rem .75rem;margin-top:1rem}#invoice-list:empty,#income-list:empty,#review-list:empty{display:none}.row{display:flex;gap:.75rem;align-items:baseline;padding:.65rem .5rem;border-bottom:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition)}.row:last-child{border-bottom:none}.row:hover{background:var(--accent-wash)}.row .grow{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row .amount{font-variant-numeric:tabular-nums;font-weight:600}#search{width:min(28rem,100%)}#load-more{margin-top:1rem}.muted{color:var(--muted);font-size:.85rem}.hint{color:var(--muted);max-width:60ch}.tag{font-size:.72rem;font-weight:600;padding:.12rem .55rem;border-radius:999px;border:1px solid var(--border);background:var(--accent-wash);color:var(--muted);white-space:nowrap}dialog{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);box-shadow:0 24px 60px #0c142047;padding:1.25rem;max-width:min(640px,92vw);width:100%}dialog::backdrop{background:#0c142073;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}dialog h2{margin-top:0;color:var(--accent)}table{border-collapse:collapse;width:100%}td,th{text-align:left;padding:.4rem .5rem;border-bottom:1px solid var(--border)}th{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}td.num{text-align:right;font-variant-numeric:tabular-nums}.login{flex:1;display:grid;place-items:center;padding:2rem 1.25rem}.login form{display:grid;gap:.75rem;padding:2rem 1.75rem;width:min(360px,92vw);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card-hover)}.login h1{margin:0;font-size:1.5rem;color:var(--accent);text-align:center}.login h1:after{content:"";display:block;width:40px;height:4px;margin:.6rem auto 0;border-radius:2px;background:var(--accent-soft)}.login-mark{font-size:2.25rem;line-height:1;text-align:center;-webkit-user-select:none;user-select:none}.login button[type=submit]{margin-top:.25rem;padding:.6rem 1rem;border:1px solid transparent;background:var(--accent);color:var(--on-accent);box-shadow:0 2px 10px color-mix(in srgb,var(--accent) 25%,transparent)}.login button[type=submit]:hover{background:var(--accent-soft);color:var(--on-accent);border-color:transparent}.login form .linky{justify-self:center}.login .hint{margin:0;font-size:.85rem}.error{color:var(--danger);margin:0;font-size:.9rem}.app-footer{display:flex;justify-content:center;align-items:center;gap:.55rem;flex-wrap:wrap;max-width:1240px;width:100%;margin:0 auto;padding:1.25rem 1.25rem 2rem;border-top:1px solid var(--border);font-size:.8rem;color:var(--muted);text-align:center}.app-footer .dot{opacity:.5}.footer-mark{-webkit-user-select:none;user-select:none}.footer-copyright{font-variant-numeric:tabular-nums}.banner{max-width:1240px;margin:1.25rem auto -.25rem;width:calc(100% - 2.5rem);padding:.8rem 1rem;border:1px solid color-mix(in srgb,var(--danger) 35%,var(--border));border-left:4px solid var(--danger);border-radius:var(--radius);background:color-mix(in srgb,var(--danger) 12%,var(--surface));box-shadow:var(--shadow-card);color:var(--text);font-size:.9rem}.banner strong{font-weight:700}#preview{max-width:min(720px,94vw);width:100%}.preview-head h2{margin:0 0 .25rem;font-size:1.15rem;color:var(--accent)}.preview-head p{margin:0 0 .75rem}#preview-body{max-height:60vh;overflow-y:auto}.preview-invoice{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:.75rem;overflow:hidden}.preview-invoice-head{display:flex;gap:.6rem;align-items:baseline;padding:.65rem .75rem;background:var(--accent-wash);cursor:pointer}.preview-invoice-head .amount{font-variant-numeric:tabular-nums;font-weight:600}.preview-invoice table{margin:0}.preview-invoice td{border-bottom:1px solid var(--border);vertical-align:middle}.preview-invoice tr:last-child td{border-bottom:none}.preview-invoice:has(.pick:not(:checked)) table{opacity:.4}.preview-invoice td:first-child{width:1.6rem;padding-right:0}.preview-actions{display:flex;justify-content:flex-end;gap:.6rem;margin-top:1rem}.income-form{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;padding:1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card)}.income-form input[type=text],.income-form input[type=number]{flex:1 1 8rem;min-width:0}.del-income{padding:.1rem .5rem;border-color:transparent;background:none;color:var(--muted)}.del-income:hover{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent);color:var(--danger)}tr.excluded td:not(:first-child){opacity:.4;text-decoration:line-through}.budget{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:1.15rem 1.25rem;margin-bottom:1rem}.budget-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.5rem}.budget-head h2{margin:0}.budget-head h2:after{display:none}.budget-figures{display:flex;flex-wrap:wrap;align-items:baseline;gap:.4rem;margin:.5rem 0 .7rem;font-variant-numeric:tabular-nums}.budget-figures strong{font-size:1.75rem;font-weight:600;color:var(--accent)}.budget-figures .grow{flex:1}.budget-track{position:relative;height:14px;border-radius:999px;background:color-mix(in srgb,var(--accent-soft) 14%,transparent);overflow:hidden}.budget-fill{display:block;height:100%;border-radius:999px;background:var(--accent-soft);transition:width var(--transition)}.budget-track.on_track .budget-fill{background:var(--ok)}.budget-track.projected_over .budget-fill{background:var(--warn)}.budget-track.over .budget-fill{background:var(--danger)}.budget-today{position:absolute;top:0;width:2px;height:100%;transform:translate(-1px);background:color-mix(in srgb,var(--text) 55%,transparent)}.budget-lines{margin:.7rem 0 0;font-size:.9rem;color:var(--muted)}.budget-lines strong{color:var(--text);font-weight:600}.budget-lines.over strong{color:var(--danger)}.budget-lines.projected_over strong{color:var(--warn)}.budget-form{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.8rem}.budget-form input{flex:1 1 10rem;min-width:0}.budget-head .tag{text-transform:none;letter-spacing:0;margin-left:.35rem}#guide{max-width:min(760px,94vw)}.guide-steps{margin:0;padding-left:1.4rem;display:grid;gap:1.2rem;max-height:62vh;overflow-y:auto}.guide-steps li::marker{color:var(--accent-soft);font-weight:700}.guide-steps p{margin:0 0 .5rem}.guide-steps img{display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-sm)}.guide-warning{padding:.6rem .85rem;border-left:4px solid var(--danger);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--danger) 12%,var(--surface));font-weight:600}.account-head h2{margin:0;font-size:1.15rem;color:var(--accent)}.account-head p{margin:.1rem 0 0}.account-section{border-top:1px solid var(--border);margin-top:1rem;padding-top:.85rem}.account-section h3{margin:0 0 .4rem}.account-section .hint{margin:0 0 .5rem;font-size:.9rem}.account-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.account-actions input{flex:1 1 14rem;min-width:0}.token{display:block;margin:.5rem 0;padding:.55rem .65rem;border:1px dashed var(--accent-soft);border-radius:var(--radius-sm);background:var(--accent-wash);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem;word-break:break-all;-webkit-user-select:all;user-select:all}.toast{position:fixed;bottom:1.25rem;left:50%;transform:translate(-50%);z-index:9;max-width:min(32rem,92vw);padding:.65rem 1.1rem;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text);box-shadow:var(--shadow-card-hover);font-size:.85rem;text-align:center;animation:toast-in .25s cubic-bezier(.25,.8,.25,1)}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,.75rem)}}@media(max-width:640px){.app-header,.app-bar{padding-left:1rem;padding-right:1rem}main{padding:1.25rem 1rem 2rem}.app-footer{padding:1.25rem 1rem 1.75rem;gap:.4rem}.banner{width:calc(100% - 2rem)}.app-bar{flex-direction:column;align-items:stretch}.range{margin-left:0}#account{max-width:6rem}.brand-divider,.brand-page,.theme-toggle-label{display:none}.theme-toggle{padding:8px 11px}}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
