@import "https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=DM+Sans:wght@400;500;600;700&family=Noto+Sans+TC:wght@400;500;600;700;800&display=swap";@layer components;@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.fixed{position:fixed}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}}:root{color:#202820;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--ink:#202820;--muted:#7c837b;--paper:#f5f5ef;--line:#e4e6dd;--green:#285b44;--green-light:#dce9dc;--coral:#de765d;--mono:"DM Mono", monospace;background:#f5f5ef;font-family:DM Sans,Noto Sans TC,sans-serif}*{box-sizing:border-box}body{background:var(--paper);min-width:320px;min-height:100vh;margin:0}button,input,select{font:inherit}button{color:inherit;cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible{outline-offset:2px;outline:3px solid #93bba0}.app-shell{max-width:1080px;min-height:100vh;margin:0 auto;padding:0 42px 48px}.topbar{z-index:5;border-bottom:1px solid var(--line);background:var(--paper);align-items:center;gap:17px;height:86px;display:flex;position:sticky;top:0}.brand-mark{background:var(--green);color:#fff;border-radius:13px 13px 13px 4px;place-items:center;width:40px;height:40px;font-size:23px;font-weight:700;display:grid}.brand-mark span{color:#f1a27e}.topbar-title{flex-direction:column;flex:1;gap:4px;display:flex}.topbar-title strong{font-size:16px}.section-kicker{color:#7c8479;font:10px var(--mono)}.icon-button{border:1px solid var(--line);color:#59665a;background:0 0;border-radius:50%;place-items:center;width:42px;height:42px;transition:background .2s,color .2s;display:grid}.icon-button:hover{background:var(--green);color:#fff}.notice{border-radius:8px;margin-top:18px;padding:12px 15px;font-size:13px}.error-notice{color:#a43f30;background:#fce9e3}.loading-state{text-align:center;color:var(--muted);padding:80px 0}.settings-page{max-width:650px;margin:0 auto;padding:38px 0 60px}.settings-intro{margin-bottom:23px}.settings-intro h1{margin:9px 0 5px;font-size:30px;font-weight:600}.settings-intro p{color:#7f867c;margin:0;font-size:13px}.settings-card{border:1px solid var(--line);background:#fffefa;border-radius:8px;padding:22px}.settings-card-heading{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding-bottom:17px;display:flex}.settings-icon{width:40px;height:40px;color:var(--green);background:#e5eee3;border-radius:12px 12px 12px 4px;place-items:center;display:grid}.settings-card-heading h2{margin:0 0 4px;font-size:15px}.settings-card-heading p{color:#858c82;margin:0;font-size:11px}.settings-form{flex-direction:column;padding-top:17px;display:flex}.settings-form input{width:100%;min-height:45px;color:var(--ink);background:#fff;border:1px solid #e0e3d9;border-radius:5px;margin-bottom:16px;padding:0 12px;font-size:14px}.settings-form .field-label{margin-bottom:7px}.settings-submit{min-height:47px;margin-top:3px}.settings-success{color:var(--green);align-items:center;gap:7px;margin:0 0 12px;font-size:12px;display:flex}.settings-security-note{color:#858c82;align-items:center;gap:7px;margin:14px 2px;font-size:11px;display:flex}.page-enter{animation:.45s both rise-in}@keyframes rise-in{0%{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}.login-screen{background:#fbfbf7;place-items:center;min-height:100svh;padding:24px;display:grid}.login-panel{width:min(430px,100%);margin:0;padding:34px 0}.login-brand{color:#6a736a;align-items:center;gap:12px;font-size:12px;display:flex}.login-heading{margin:48px 0 30px}.login-heading .section-kicker{color:var(--coral);align-items:center;gap:7px;display:flex}.login-heading h1{margin:18px 0 12px;font-size:clamp(42px,5vw,58px);font-weight:600;line-height:1.28}.login-heading h1 em{color:var(--green);font-style:normal}.login-heading p{color:#777f75;margin:0;font-size:14px}.quick-login-label{color:#70796f;margin-bottom:11px;font-size:12px}.quick-login{grid-template-columns:1fr 1fr;gap:10px;display:grid}.quick-user{text-align:left;background:0 0;border:1px solid #e7e8df;border-radius:8px;align-items:center;gap:9px;min-height:58px;padding:9px 11px;font-size:13px;transition:border-color .2s,background .2s;display:flex}.quick-user:hover,.quick-user:focus-visible{background:#f4f7f0;border-color:#a9c1ab}.quick-user.selected{background:#f2f6ef;border-color:#9db89f}.user-avatar{border-radius:50%;place-items:center;width:31px;height:31px;font-size:12px;font-weight:600;display:grid}.quick-user.coral .user-avatar{color:#ae5b46;background:#f8e4dc}.quick-user.green .user-avatar{color:var(--green);background:#dce9dc}.quick-check{color:#8a9286;margin-left:auto;font-size:10px}.login-form{flex-direction:column;margin-top:23px;display:flex}.selected-account{color:#747c72;margin-bottom:17px;font-size:12px}.selected-account span{color:var(--green);margin-left:6px;font-weight:600}.login-form label,.field-label{color:#61695f;margin:0 0 7px;font-size:12px;font-weight:600}.login-form input{width:100%;height:47px;color:var(--ink);background:#fff;border:1px solid #e4e6dd;border-radius:6px;margin-bottom:15px;padding:0 13px;font-size:14px}.login-form input::placeholder,.note-input::placeholder{color:#a5aaa1}.password-field{color:#92998f;align-items:center;margin-bottom:19px;display:flex;position:relative}.password-field>svg{position:absolute;left:13px}.password-field input{margin:0;padding:0 43px 0 40px}.password-toggle{color:#777f75;background:0 0;border:0;place-items:center;width:34px;height:34px;display:grid;position:absolute;right:8px}.primary-button{background:var(--green);color:#fff;border:0;border-radius:6px;justify-content:center;align-items:center;gap:11px;font-size:14px;font-weight:600;transition:background .2s,transform .2s;display:flex}.primary-button:hover{background:#1e4935;transform:translateY(-1px)}.primary-button:disabled{opacity:.65;cursor:wait}.login-submit{justify-content:space-between;min-height:51px;padding:0 16px}.form-error{color:#b74d3b;margin:0 0 12px;font-size:12px}.login-footnote{color:#8c9288;align-items:center;gap:8px;margin-top:23px;font-size:11px;display:flex}.lock-dot,.status-dot{background:#7ba486;border-radius:50%;width:7px;height:7px;box-shadow:0 0 0 3px #e5eee3}.ledger-page,.dashboard-page{max-width:790px;margin:0 auto}.ledger-page{padding:30px 0 0}.welcome-line{color:#697367;align-items:center;gap:9px;font-size:12px;display:flex}.date-stamp{color:#6d776d;white-space:nowrap;align-items:center;gap:8px;padding-bottom:5px;font-size:11px;display:flex}.ledger-date{margin:18px 0 24px}.ledger-list{gap:13px;display:grid}.ledger-card{text-align:left;background:#fffefa;border:1px solid #e4e5dc;border-radius:8px;grid-template-columns:44px 55px 1fr 40px;align-items:center;min-height:157px;padding:23px 26px;transition:transform .2s,box-shadow .2s,border-color .2s;display:grid;position:relative;overflow:hidden}.ledger-card:hover{border-color:#cbd8c8;transform:translateY(-3px);box-shadow:0 12px 28px #394a3310}.ledger-flexible{background:#f0f3e9}.ledger-index{color:#949b8f;font:9px var(--mono);position:absolute;top:16px;left:26px}.ledger-icon{width:46px;height:46px;color:var(--green);background:#e8eee3;border-radius:50%;grid-area:1/1;place-items:center;margin-top:20px;display:grid}.ledger-flexible .ledger-icon{color:#b45f48;background:#f7e6dc}.ledger-content{flex-direction:column;grid-column:2/4;gap:8px;margin-top:20px;display:flex}.ledger-content strong{font-size:22px;font-weight:600}.ledger-content small{color:#7d857a;font-size:12px}.ledger-open{width:36px;height:36px;color:var(--green);border:1px solid #dce1d8;border-radius:50%;grid-area:1/4;place-items:center;display:grid}.ledger-watermark{color:#ecede5;font:120px/.9 var(--mono);pointer-events:none;font-weight:500;position:absolute;bottom:-38px;right:75px}.ledger-flexible .ledger-watermark{color:#e5eadd;font-size:72px}.dashboard-page{padding-top:12px}.dashboard-toolbar{justify-content:space-between;align-items:center;display:flex}.period-caption{align-items:center;gap:10px;margin-top:0;font-size:16px;font-weight:600;display:flex}.avatar-chip{width:36px;height:36px;color:var(--green);background:#e5eee3;border:1px solid #cfdbcd;border-radius:50%;place-items:center;font-size:13px;font-weight:600;display:grid}.period-tabs{background:#eeefe8;border:1px solid #e4e5dd;border-radius:8px;grid-template-columns:repeat(4,1fr);margin:8px 0 9px;padding:3px;display:grid}.period-tabs button{color:#7b8278;background:0 0;border:0;border-radius:5px;min-height:32px;font-size:11px}.period-tabs button.active{color:var(--green);background:#fffefa;font-weight:600;box-shadow:0 1px 4px #27352412}.summary-panel{color:#f7f5eb;background:#294c3a;border-radius:8px;padding:19px 21px 14px}.summary-head{color:#e3e8dc;justify-content:space-between;align-items:center;font-size:12px;display:flex}.summary-currency{color:#b2c0b2;font:9px var(--mono)}.summary-grid{grid-template-columns:1fr 1px 1fr;align-items:center;gap:22px;padding:23px 0 19px;display:grid}.summary-cell{flex-direction:column;gap:11px;display:flex}.summary-label{color:#c8d2c7;align-items:center;gap:7px;font-size:11px;display:flex}.summary-label i{color:#f6aa91;background:#f2a18925;border-radius:50%;place-items:center;width:21px;height:21px;display:grid}.income-total .summary-label i{color:#b8d4bc;background:#dce9dc22}.summary-cell strong{font:500 clamp(19px, 4vw, 27px) var(--mono);white-space:nowrap}.summary-cell strong small{color:#c4d0c3;font:10px DM Sans,sans-serif}.summary-divider{background:#ffffff2b;width:1px;height:55px}.dashboard-actions{align-items:center;gap:9px;margin:10px 0 13px;display:flex}.view-toggle{border:1px solid #e4e5dd;border-radius:6px;gap:4px;padding:3px;display:flex}.view-toggle button{color:#828980;background:0 0;border:0;border-radius:4px;min-width:45px;min-height:37px;padding:6px 9px;font-size:11px}.view-toggle button.selected{color:var(--green);background:#e4ece0;font-weight:600}.transaction-list{border-top:1px solid var(--line)}.transaction-row{border-bottom:1px solid var(--line);min-height:76px;animation:.35s both rise-in;animation-delay:calc(var(--row-index) * 25ms);grid-template-columns:43px minmax(0,1fr) auto;align-items:center;gap:12px;display:grid}.category-mark{color:#477350;background:#e7eee3;border-radius:12px 12px 12px 4px;place-items:center;width:40px;height:40px;display:grid}.category-dining{color:#bd694c;background:#f5e7dc}.category-daily{color:#8b7842;background:#ece8d7}.category-entertainment{color:#666b91;background:#e4e5ef}.category-transport{color:#487b78;background:#e1eceb}.category-other{color:#89685d;background:#eee7e5}.transaction-copy,.transaction-value{flex-direction:column;gap:6px;display:flex}.transaction-copy strong{align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.transaction-copy strong span{color:#6d796b;background:#eaeee7;border-radius:3px;padding:3px 6px;font-size:9px;font-weight:400}.transaction-copy small,.transaction-value small{color:#92988e;font-size:10px}.transaction-value{align-items:end}.transaction-value strong{font:500 14px var(--mono)}.transaction-value strong.positive-value{color:var(--green)}.transaction-actions{gap:2px;margin-top:1px;display:flex}.transaction-action{color:#68776b;background:0 0;border:0;border-radius:5px;place-items:center;width:29px;height:29px;padding:0;display:grid}.transaction-action:hover{color:var(--green);background:#e5eee3}.transaction-action.delete-action{color:#b86451}.transaction-action.delete-action:hover{color:#a44937;background:#f8e4dc}.transaction-action:disabled{opacity:.45;cursor:wait}.empty-state{text-align:center;flex-direction:column;align-items:center;padding:50px 12px;display:flex}.empty-illustration{color:#577961;background:#e8eee3;border-radius:50%;place-items:center;width:52px;height:52px;margin-bottom:13px;display:grid}.empty-state strong{font-size:13px}.empty-state p{color:#858c82;max-width:250px;font-size:11px;line-height:1.7}.statistics-view{border-top:1px solid var(--line)}.stat-group{border-bottom:1px solid var(--line);padding:17px 0 21px}.stat-group-heading{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.stat-group-heading h3{margin:0;font-size:13px;font-weight:600}.stat-group-heading>span{color:#9a9f96;font-size:10px}.stat-row{grid-template-columns:105px 1fr 88px;align-items:center;gap:13px;min-height:38px;display:grid}.stat-label{align-items:center;gap:7px;font-size:11px;display:flex}.stat-rank{color:#a4a99f;font:9px var(--mono)}.rank-1{color:var(--coral)}.stat-track{background:#e4e8de;border-radius:8px;height:6px;overflow:hidden}.stat-track i{border-radius:inherit;background:#709174;min-width:3px;height:100%;transition:width .35s;display:block}.stat-row:nth-child(3n) .stat-track i{background:#d98a6d}.stat-row:nth-child(4n) .stat-track i{background:#92a79c}.stat-numbers{font:10px var(--mono);justify-content:space-between;gap:7px;display:flex}.stat-numbers small{color:#92998e}.stat-empty{color:#90968d;font-size:11px}.add-transaction-button{color:#fff;background:#de765d;border:0;border-radius:6px;flex:1;justify-content:center;align-items:center;gap:7px;min-width:0;min-height:43px;padding:0 12px;font-size:13px;font-weight:600;transition:background .2s;display:flex;box-shadow:0 4px 12px #a5493425}.add-transaction-button:hover{background:#c9634b}.modal-backdrop{z-index:10;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#17261dc9;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0;overflow:auto}.transaction-modal{background:#fbfbf6;border:1px solid #e8e9e1;border-radius:10px;width:min(500px,100%);max-height:min(92vh,850px);padding:23px 25px;animation:.2s both rise-in;overflow:auto;box-shadow:0 24px 70px #101a1450}.modal-header{justify-content:space-between;align-items:center;margin-bottom:18px;display:flex}.modal-header h2{margin:7px 0 0;font-size:21px}.datetime-input,.field-group select,.note-input{color:#303a30;background:#fff;border:1px solid #e0e3d9;border-radius:5px;width:100%;min-height:43px;padding:0 11px;font-size:12px}.type-control{background:#eeefe8;border-radius:6px;grid-template-columns:1fr 1fr;gap:4px;margin:14px 0;padding:4px;display:grid}.type-control button{color:#777f75;background:0 0;border:0;border-radius:4px;min-height:35px;font-size:12px}.type-control button.selected.expense-selected{color:#ad5945;background:#f6e5df;font-weight:600}.type-control button.selected.income-selected{color:var(--green);background:#dfeadd;font-weight:600}.field-row{grid-template-columns:1fr 1fr;gap:11px;margin-bottom:14px;display:grid}.field-group{min-width:0}.field-group select{padding-right:26px}.calculator{background:#fffefa;border:1px solid #e1e4d9;border-radius:7px;margin:0 0 14px;overflow:hidden}.calculator-display{background:#f1f3ec;flex-direction:column;align-items:end;gap:7px;min-height:73px;padding:12px 14px;display:flex}.calculator-display>span{color:#8b9388;font-size:10px}.calculator-display strong{color:#304435;max-width:100%;font:500 24px var(--mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.calculator-display strong i{color:#8b9388;margin-left:7px;font:10px DM Sans,sans-serif}.calculator-grid{background:#e8e9e2;grid-template-columns:repeat(4,1fr);gap:1px;display:grid}.calculator-grid button{color:#394238;min-height:40px;font:14px var(--mono);background:#fffefa;border:0;place-items:center;display:grid}.calculator-grid button:hover{background:#f2f4ec}.calculator-grid .operator-key{color:var(--green);background:#f3f4ed}.calculator-grid .clear-key{color:#bd6652}.calculator-grid .equals-key{background:var(--green);color:#fff;grid-column:span 2;gap:7px;font:12px DM Sans,sans-serif;display:flex}.calculator-grid .equals-key:hover{background:#1e4935}.optional-label{color:#9ba197;font-size:10px;font-weight:400}.note-input{margin-bottom:14px}.save-button{justify-content:space-between;width:100%;min-height:47px;padding:0 14px}.save-button span{color:#d7e0d6;font:11px var(--mono)}@media (width<=740px){.app-shell{padding:0 20px calc(36px + env(safe-area-inset-bottom))}.topbar{height:calc(72px + env(safe-area-inset-top));padding-top:env(safe-area-inset-top)}.login-screen{padding:21px}.login-panel{padding:24px 0}.login-heading{margin:34px 0 24px}.login-heading h1{font-size:42px}.ledger-page{padding-top:24px}.ledger-card{grid-template-columns:42px 48px 1fr 32px;min-height:139px;padding:18px}.ledger-index{left:18px}.ledger-content strong{font-size:19px}.ledger-watermark{right:45px}.dashboard-page{padding-top:23px}.summary-panel{padding:16px 15px 12px}.summary-grid{gap:12px}.summary-cell strong{font-size:clamp(16px,4.7vw,23px)}.summary-cell strong small{font-size:9px}.transaction-row{grid-template-columns:40px 1fr auto;gap:9px}.transaction-copy strong{font-size:12px}.modal-backdrop{align-items:end;padding:0}.transaction-modal{width:100%;max-height:94vh;padding:20px 20px calc(20px + env(safe-area-inset-bottom));border-radius:13px 13px 0 0}}@media (width<=390px){.app-shell{padding-left:15px;padding-right:15px}.summary-grid{gap:8px}.summary-cell strong{font-size:16px}.stat-row{grid-template-columns:90px 1fr 74px;gap:8px}.transaction-modal{padding-left:15px;padding-right:15px}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}
