@import"https://fonts.googleapis.com/css2?family=Fredoka:wght@300..700&display=swap";:root{--color-primary: #4CAF50;--color-secondary: #FF9800;--color-accent: #2196F3;--color-danger: #F44336;--color-bg: #E3F2FD;--color-card: #FFFFFF;--color-text: #263238;--gradient-balance: linear-gradient(135deg, #667eea 0%, #764ba2 100%);--green-50: #E8F5E9;--green-200: #A5D6A7;--green-700: #2B7730;--green-deep: #0B2E0E;--orange-50: #FFF3E0;--orange-100: #FFE0B2;--orange-200: #FFCC80;--orange-300: #FFB74D;--orange-600: #E68900;--orange-ink: #9A5C00;--orange-deep: #4A2C00;--blue-100: #D3E9FC;--blue-700: #1565C0;--red-50: #FFEBEE;--red-100: #FFCDD2;--red-700: #C62828;--purple-50: #F1EDF6;--purple-ink: #5E3C82;--ink: var(--color-text);--ink-strong: #17232A;--ink-2: #455A64;--muted: #546E7A;--line: #E7EEF4;--surface: var(--color-card);--surface-2: #F2F7FC;--surface-3: #E9F0F6;--font-main: "Fredoka", ui-rounded, "Segoe UI", system-ui, sans-serif;--radius-xl: 28px;--radius-lg: 24px;--radius-md: 20px;--radius-sm: 14px;--shadow-card: 0 1px 2px rgba(38, 50, 56, .05), 0 4px 10px -2px rgba(21, 101, 192, .06), 0 16px 32px -16px rgba(38, 50, 56, .18);--shadow-float: 0 2px 6px rgba(38, 50, 56, .08), 0 28px 60px -18px rgba(38, 50, 56, .38);--page-max: 632px;--gutter: 16px;--ease-out: cubic-bezier(.2, .9, .25, 1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{font-family:var(--font-main);font-weight:400;color:var(--ink);background-color:var(--color-bg);background-image:radial-gradient(56rem 26rem at 50% -10rem,#ffffffd9,#fff0 70%),radial-gradient(30rem 20rem at 100% 30rem,#2196f314,#2196f300 70%);background-repeat:no-repeat;line-height:1.45;min-height:100vh;min-height:100dvh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}#root{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}button,input{font:inherit;color:inherit}button{cursor:pointer;border:none;background:none;touch-action:manipulation}button:disabled{cursor:not-allowed}strong{font-weight:600}:focus-visible{outline:3px solid var(--blue-700);outline-offset:3px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 20px;border-radius:999px;font-size:1rem;font-weight:600;line-height:1.15;text-align:center;-webkit-user-select:none;user-select:none;transition:transform .15s ease,box-shadow .2s ease,filter .2s ease,background-color .2s ease}.btn:active:not(:disabled){transform:scale(.97)}.btn:hover:not(:disabled){filter:brightness(1.04)}.btn--block{width:100%}.btn--lg{min-height:54px;font-size:1.05rem}.btn--xl{min-height:60px;padding:0 12px;font-size:clamp(.95rem,4.1vw,1.08rem);gap:8px;white-space:nowrap}.btn--green{color:var(--green-deep);background-color:var(--color-primary);background-image:linear-gradient(180deg,#ffffff24,#fff0 55%);box-shadow:inset 0 1px #ffffff59,inset 0 -2px #0b2e0e1f,0 10px 22px -10px #4caf50f2}.btn--orange{color:var(--orange-deep);background-color:var(--color-secondary);background-image:linear-gradient(180deg,#ffffff29,#fff0 55%);box-shadow:inset 0 1px #fff6,inset 0 -2px #4a2c001a,0 10px 22px -10px #ff9800f2}.btn--blue{color:#fff;background:var(--blue-700);box-shadow:inset 0 1px #ffffff2e,0 10px 22px -10px #2196f3f2}.btn--white{color:var(--green-700);background:var(--surface);box-shadow:var(--shadow-card)}.btn--tonal{color:var(--blue-700);background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--blue-100)}.btn--tonal:hover:not(:disabled){filter:none;background:#e8f2fc}.btn--quiet{color:var(--ink-2);background:var(--surface-3)}.btn--link{min-height:44px;color:var(--muted);font-weight:500;font-size:.9rem}.btn--link:hover:not(:disabled){color:var(--ink);filter:none}.btn:disabled:not(.is-busy){color:var(--muted);background:var(--surface-3);background-image:none;box-shadow:none}.btn.is-busy{cursor:progress;filter:saturate(.85)}.btn-bubble{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;font-size:1.3rem;font-weight:600;line-height:1;background:#fff6;flex:none}.spinner{width:18px;height:18px;border-radius:50%;border:2.5px solid currentColor;border-right-color:transparent;animation:spin .8s linear infinite;flex:none}.icon-btn{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;color:var(--ink-2);background:var(--surface-3);flex:none;transition:background-color .2s ease,transform .15s ease}.icon-btn:hover:not(:disabled){background:#dde7ef}.icon-btn:active:not(:disabled){transform:scale(.94)}.icon-btn--plain{background:transparent}.topbar{position:sticky;top:0;z-index:50;padding-top:env(safe-area-inset-top);background:#e3f2fdc7;-webkit-backdrop-filter:saturate(170%) blur(16px);backdrop-filter:saturate(170%) blur(16px);border-bottom:1px solid rgba(21,101,192,.08)}.topbar-inner{display:flex;align-items:center;gap:12px;max-width:var(--page-max);min-height:68px;margin:0 auto;padding:10px var(--gutter)}.brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.brand-mark{display:grid;place-items:center;width:42px;height:42px;border-radius:14px;font-size:1.4rem;background:var(--surface);box-shadow:0 1px 2px #26323814,0 6px 14px -6px #1565c04d;flex:none}.brand-text{min-width:0}.brand-name{font-size:1.4rem;font-weight:700;line-height:1.1;letter-spacing:-.01em;color:var(--green-700)}.sync{display:flex;align-items:center;gap:6px;margin-top:2px;font-size:.78rem;font-weight:500;line-height:1.2;color:var(--muted);white-space:nowrap}.sync--hidden{display:none}.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex:none}.sync--ok{color:var(--green-700)}.sync--ok .sync-dot{background:var(--color-primary);box-shadow:0 0 0 3px #4caf5033}.sync--info .sync-dot,.sync--busy .sync-dot{background:var(--color-accent);animation:pulse 1.2s ease-in-out infinite}.sync--busy{color:var(--blue-700)}.mode-toggle{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border-radius:999px;font-size:.88rem;font-weight:600;white-space:nowrap;color:var(--ink-2);background:var(--surface);box-shadow:0 1px 2px #26323814,0 0 0 1px #2632380f;transition:background-color .2s ease,color .2s ease,transform .15s ease;flex:none}.mode-toggle:active{transform:scale(.96)}.mode-toggle.is-parent{color:#fff;background:var(--blue-700);box-shadow:0 8px 18px -8px #2196f3e6}.sync-banner{border-top:1px solid transparent;font-size:.88rem;font-weight:500;animation:fade-in .3s ease both}.sync-banner-inner{display:flex;align-items:center;gap:10px;max-width:var(--page-max);min-height:48px;margin:0 auto;padding:4px var(--gutter)}.sync-banner--warn{color:var(--orange-ink);background:var(--orange-50);border-top-color:var(--orange-100)}.sync-banner--error{color:var(--red-700);background:var(--red-50);border-top-color:var(--red-100)}.sync-banner-icon{flex:none}.sync-banner-text{flex:1;min-width:0;line-height:1.25;text-wrap:pretty}.sync-banner-btn{min-height:36px;padding:0 14px;border-radius:999px;font-size:.85rem;font-weight:600;color:inherit;background:var(--surface);box-shadow:inset 0 0 0 1px currentColor;flex:none;position:relative}.sync-banner-btn:disabled{opacity:.55}.sync-banner-btn:after{content:"";position:absolute;inset:-4px -2px}.page{display:flex;flex-direction:column;flex:1;width:100%;max-width:var(--page-max);margin:0 auto;padding:16px var(--gutter) calc(20px + env(safe-area-inset-bottom))}.layout{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}.col{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-content:start;min-width:0}.card{padding:20px;border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-card)}.card-head{display:flex;align-items:center;gap:14px}.card-head-text{flex:1;min-width:0}.card-title{font-size:1.15rem;font-weight:600;line-height:1.25}.card-sub{margin-top:2px;font-size:.9rem;color:var(--muted);line-height:1.35}.card-action{margin-top:16px}.eyebrow{font-size:.8rem;font-weight:500;color:var(--muted);line-height:1.2}.avatar{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;font-size:1.5rem;line-height:1;flex:none}.avatar--green{background:var(--green-50)}.avatar--orange{background:var(--orange-50)}.avatar--purple{background:var(--purple-50)}.avatar--blue{background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--blue-100)}.soft-note,.note-card,.card-sub,.empty-text,.toast-message,.loading-note{text-wrap:pretty}.goal-cheer{text-wrap:balance}.soft-note{padding:12px 16px;border-radius:var(--radius-sm);font-size:.92rem;text-align:center;color:var(--ink-2);background:var(--surface-2)}.hero{position:relative;isolation:isolate;overflow:hidden;display:flex;min-height:180px;padding:22px 24px;border-radius:var(--radius-xl);color:#fff;background:radial-gradient(120% 110% at 0% 0%,#32226e4d,#32226e00 55%),radial-gradient(100% 80% at 0% 100%,#32226e52,#32226e00 70%),var(--gradient-balance);box-shadow:inset 0 1px #ffffff38,0 2px 4px #4c3c961f,0 22px 44px -18px #667eeabf}.hero:before,.hero:after{content:"";position:absolute;z-index:-1;border-radius:50%;pointer-events:none}.hero:before{width:280px;height:280px;top:-130px;right:-110px;background:radial-gradient(circle,#fff3,#fff0 68%)}.hero:after{width:220px;height:220px;right:-50px;bottom:-150px;border:26px solid rgba(255,255,255,.06)}.hero-body{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start;flex:1}.hero-label{font-size:1rem;font-weight:600;letter-spacing:.01em}.hero-amount{margin-top:4px;font-size:clamp(2.9rem,12.5vw,3.6rem);font-weight:700;line-height:1.05;letter-spacing:-.025em;font-variant-numeric:tabular-nums;text-shadow:0 2px 14px rgba(40,20,90,.22)}.hero--long .hero-amount{font-size:clamp(2.2rem,9.6vw,2.9rem)}.hero--long .deco-extra{display:none}.hero-amount-value{display:inline-block;animation:pop .45s var(--ease-out) both}.hero-cents{margin-left:1px;font-size:.55em;font-weight:600;letter-spacing:0}.hero-chip{display:inline-flex;align-items:center;gap:6px;margin-top:12px;padding:6px 12px 6px 10px;border-radius:999px;font-size:.85rem;font-weight:500;background:#22124e42;box-shadow:inset 0 0 0 1px #ffffff1f}.hero-chip-icon{font-size:.8rem}.hero-week{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px;align-self:stretch;margin-top:18px}.hero-week-title{grid-column:1 / -1;font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.hero-stat{display:flex;align-items:center;gap:10px;min-width:0;padding:9px 12px 9px 9px;border-radius:var(--radius-sm);background:#22124e42;box-shadow:inset 0 0 0 1px #ffffff1f}.hero-stat-icon{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;font-size:1rem;font-weight:700;line-height:1;flex:none}.hero-stat-icon--in{color:var(--green-deep);background:var(--color-primary)}.hero-stat-icon--out{color:var(--orange-deep);background:var(--color-secondary)}.hero-stat-text{min-width:0}.hero-stat-label{font-size:.8rem;font-weight:500;line-height:1.2}.hero-stat-value{font-size:1.05rem;font-weight:700;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}.hero-deco{position:absolute;inset:0;z-index:0;pointer-events:none}.coin{position:absolute;display:grid;place-items:center;width:var(--s);height:var(--s);border-radius:50%;font-size:calc(var(--s) * .5);font-weight:700;line-height:1;color:var(--orange-ink);background:radial-gradient(circle at 32% 28%,var(--orange-50) 0 10%,var(--orange-200) 30%,#FFA726 60%,var(--orange-600) 100%);box-shadow:inset 0 0 0 calc(var(--s) * .07) #fff3e08c,inset 0 -2px 3px #9a5c0059,0 8px 16px -4px #24125059;transform:rotate(var(--r));animation:coin-float 6s ease-in-out infinite}.sparkle{position:absolute;width:var(--s);height:var(--s);background:#fff;clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);animation:twinkle 3.4s ease-in-out infinite}.actions{display:grid;grid-template-columns:1fr 1fr;gap:12px}.note-card{display:flex;align-items:center;gap:12px;padding:12px 16px 12px 12px;border-radius:var(--radius-md);font-size:.92rem;line-height:1.35;color:var(--ink-2);background:#ffffff9e;box-shadow:inset 0 0 0 1px #ffffffe6}.note-card-icon{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;font-size:1.25rem;background:var(--surface);flex:none}.goal-name{font-size:1.25rem;font-weight:700;overflow-wrap:anywhere}.goal-edit{min-height:44px;padding:0 14px;font-size:.88rem;gap:6px;flex:none}.goal-pct{min-width:3.2ch;text-align:right;font-size:1.35rem;font-weight:700;line-height:1;color:var(--orange-ink);font-variant-numeric:tabular-nums;flex:none}.goal.is-done .goal-pct{color:var(--green-700)}.goal-track-row{display:flex;align-items:center;gap:14px;margin:20px 0 12px}.progress{--trophy: 34px;--pig: 34px;position:relative;flex:1;height:18px;border-radius:999px;background:var(--orange-50);box-shadow:inset 0 1px 2px #9a5c0024}.progress-clip{position:absolute;top:3px;bottom:3px;left:3px;right:calc(var(--trophy) / 2);overflow:hidden;border-radius:999px}.progress-fill{height:100%;width:calc(var(--p, 0) * 100%);min-width:12px;border-radius:inherit;background:linear-gradient(90deg,var(--orange-300),var(--color-secondary));transition:width .8s var(--ease-out)}.progress-marker,.progress-trophy{position:absolute;top:50%;display:grid;place-items:center;border-radius:50%;line-height:1;background:var(--surface)}.progress-marker{left:clamp(calc(var(--pig) / 2),calc(3px + (100% - 3px - var(--trophy) / 2) * var(--p, 0)),calc(100% - var(--trophy) - var(--pig) / 2 - 2px));width:var(--pig);height:var(--pig);font-size:1.15rem;box-shadow:0 0 0 2px var(--orange-200),0 4px 10px -2px #9a5c0059;transform:translate(-50%,-50%);transition:left .8s var(--ease-out)}.progress-trophy{right:0;width:var(--trophy);height:var(--trophy);font-size:1.05rem;box-shadow:0 0 0 2px var(--orange-100),0 4px 10px -3px #9a5c0040;translate:0 -50%;filter:grayscale(.5)}.goal.is-done .progress-trophy{filter:none;box-shadow:0 0 0 2px var(--green-200),0 4px 12px -3px #2b773066;animation:trophy 1.8s ease-in-out infinite}.goal.is-done .progress-fill{background:linear-gradient(90deg,#81C784,var(--color-primary))}.goal-meta{display:flex;justify-content:space-between;gap:12px;font-size:.88rem;color:var(--muted)}.goal-meta strong{color:var(--ink)}.goal-cheer{margin-top:14px;padding:10px 14px;border-radius:var(--radius-sm);font-size:.95rem;text-align:center;color:var(--ink-2);background:var(--orange-50)}.goal-cheer strong{color:var(--orange-ink);font-weight:700}.goal-cheer.is-done{font-weight:600;color:var(--green-700);background:var(--green-50)}.interest-stats{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-top:18px}.stat-label{font-size:.82rem;font-weight:500;color:var(--muted)}.stat-value{font-size:1.9rem;font-weight:700;line-height:1.1;color:var(--green-700);font-variant-numeric:tabular-nums}.status-pill{display:inline-flex;align-items:center;gap:4px;padding:5px 11px;border-radius:999px;font-size:.82rem;font-weight:600;white-space:nowrap;color:var(--ink-2);background:var(--surface-3)}.status-pill.is-ready{color:var(--green-700);background:var(--green-50)}.meter{height:8px;margin-top:12px;border-radius:999px;overflow:hidden;background:var(--surface-3)}.meter-fill{height:100%;border-radius:inherit;background:linear-gradient(90deg,#8b7bd8,#764ba2);transition:width .6s var(--ease-out)}.meter.is-full .meter-fill{background:linear-gradient(90deg,#81C784,var(--color-primary))}.history{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;align-content:start}.history-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 4px 0}.section-title{font-size:1.3rem;font-weight:700;line-height:1.2}.count-chip{padding:4px 10px;border-radius:999px;font-size:.8rem;font-weight:500;color:var(--muted);background:#ffffffb3}.history-card{padding:6px 0;border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-card)}.day+.day{margin-top:4px;border-top:1px solid var(--line)}.day-label{padding:14px 16px 2px;font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.tx-list{list-style:none}.history-more{padding:10px 16px;border-top:1px solid var(--line)}.history-more-count{font-weight:500}.tx{position:relative;display:flex;align-items:center;gap:12px;min-height:68px;padding:10px 16px 10px 14px}.tx+.tx:before{content:"";position:absolute;top:0;left:70px;right:16px;height:1px;background:var(--line)}.tx-avatar{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;font-size:1.3rem;line-height:1;background:var(--c-soft);box-shadow:inset 0 0 0 1.5px var(--c-glow);flex:none}.tx-main{flex:1;min-width:0}.tx-note{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;overflow-wrap:anywhere;font-weight:600;line-height:1.25}.tx-sub{margin-top:1px;font-size:.8rem;color:var(--muted)}.tx-amount{font-size:1.05rem;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums}.tx-amount.is-in{color:var(--green-700)}.tx-amount.is-out{color:var(--orange-ink)}.empty{padding:32px 24px;text-align:center}.empty-art{display:grid;place-items:center;width:76px;height:76px;margin:0 auto 12px;border-radius:50%;font-size:2.4rem;background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--blue-100)}.empty-title{font-size:1.1rem;font-weight:600}.empty-text{max-width:30ch;margin:4px auto 0;font-size:.92rem;color:var(--muted)}.app-footer{display:flex;flex-direction:column;align-items:center;gap:2px;margin-top:36px;padding-top:8px}.btn-reset{min-height:44px;padding:0 16px;border-radius:999px;font-size:.85rem;font-weight:500;color:var(--muted);text-decoration:underline;text-decoration-color:#546e7a59;text-underline-offset:3px;transition:color .2s ease,background-color .2s ease}.btn-reset:hover{color:var(--red-700);background:var(--red-50)}.build{font-size:.75rem;color:var(--muted)}.toast-region{position:fixed;top:calc(max(var(--header-h, 0px),env(safe-area-inset-top)) + 10px);left:0;right:0;z-index:2000;display:flex;justify-content:center;padding:0 12px;pointer-events:none}.toast{position:relative;overflow:hidden;display:flex;align-items:flex-start;gap:12px;width:100%;max-width:520px;padding:12px 6px 12px 12px;border-radius:var(--radius-md);color:var(--ink);background:var(--surface);box-shadow:inset 0 0 0 1px var(--red-100),var(--shadow-float);pointer-events:auto;animation:toast-in .35s var(--ease-out) both}.toast-icon{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;font-size:1.15rem;background:var(--red-50);flex:none}.toast-body{flex:1;min-width:0;padding-top:1px}.toast-title{font-weight:700;color:var(--red-700);line-height:1.25}.toast-message{font-size:.9rem;line-height:1.35;color:var(--ink-2)}.toast-timer{position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--color-danger);opacity:.75;transform-origin:left center;animation:toast-timer 6s linear forwards}.toast--info{box-shadow:inset 0 0 0 1px var(--blue-100),var(--shadow-float)}.toast--info .toast-icon{background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--blue-100)}.toast--info .toast-title{color:var(--blue-700)}.toast--info .toast-timer{background:var(--color-accent)}#root:has(.sheet-backdrop) .toast-region{top:calc(env(safe-area-inset-top) + 8px)}#root:has(.toast-region) .sheet-backdrop{padding-top:calc(var(--toast-h, 0px) + 18px + env(safe-area-inset-top))}#root:has(.toast-region) .sheet{max-height:calc(100dvh - var(--toast-h, 0px) - 18px - env(safe-area-inset-top))}.sheet-backdrop{position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-end;justify-content:center;background:#26323873;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);animation:fade-in .2s ease both}.sheet{position:relative;width:100%;max-height:92vh;max-height:92dvh;overflow-y:auto;overscroll-behavior:contain;padding:8px 20px calc(20px + env(safe-area-inset-bottom));border-radius:var(--radius-xl) var(--radius-xl) 0 0;background:var(--surface);box-shadow:0 -10px 40px #26323838;animation:sheet-up .35s var(--ease-out) both;outline:none}.sheet-grabber{width:40px;height:5px;margin:0 auto 14px;border-radius:999px;background:#cfd8dc}.sheet-head{display:flex;align-items:center;gap:12px;margin-bottom:18px}.sheet-head-text{flex:1;min-width:0}.sheet-eyebrow{margin-bottom:1px;font-size:.75rem;font-weight:600;letter-spacing:.07em;line-height:1.2;text-transform:uppercase;color:var(--muted)}.sheet-eyebrow--green{color:var(--green-700)}.sheet-eyebrow--orange{color:var(--orange-ink)}.sheet-eyebrow--blue{color:var(--blue-700)}.sheet-title{font-size:1.3rem;font-weight:700;line-height:1.2}.sheet-sub{margin-top:2px;font-size:.92rem;color:var(--muted);line-height:1.3}.sheet-actions{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);gap:10px;margin-top:22px}.sheet-actions .btn{min-height:54px}.stack{display:grid;gap:16px}.stack .sheet-actions{margin-top:6px}.tile-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.tile{--c: #607D8B;display:flex;flex-direction:column;align-items:center;gap:6px;min-height:112px;padding:14px 6px 12px;border-radius:var(--radius-md);font-size:.9rem;font-weight:600;line-height:1.2;text-align:center;color:var(--ink);background:var(--surface);box-shadow:inset 0 0 0 2px var(--c),0 8px 16px -12px var(--c-glow, rgba(0, 0, 0, .3));transition:transform .15s ease,box-shadow .2s ease,background-color .2s ease}.tile:hover{background:var(--c-soft, #fff);box-shadow:inset 0 0 0 2.5px var(--c),0 12px 22px -12px var(--c-glow, rgba(0, 0, 0, .3))}.tile:active{transform:scale(.96)}.tile-icon{display:grid;place-items:center;width:50px;height:50px;border-radius:50%;font-size:1.65rem;line-height:1;background:var(--c-soft, #F2F7FC);flex:none}.tile-label{overflow-wrap:anywhere}.tile-price{margin-top:auto;padding:2px 10px;border-radius:999px;font-size:.82rem;font-weight:700;color:var(--c-on, var(--ink));background:var(--c)}.tile--wide{grid-column:1 / -1;flex-direction:row;justify-content:center;gap:12px;min-height:60px;padding:6px 12px}.tile--wide .tile-icon{width:40px;height:40px;font-size:1.3rem}.amount-form{display:flex;flex-direction:column}.picked{display:inline-flex;align-items:center;align-self:center;gap:10px;max-width:100%;padding:5px 16px 5px 5px;border-radius:999px;font-weight:600;background:var(--c-soft);box-shadow:inset 0 0 0 2px var(--c)}.picked-icon{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;font-size:1.2rem;background:var(--surface);flex:none}.picked-text{display:flex;flex-direction:column;min-width:0;line-height:1.2}.picked-kind{font-size:.72rem;font-weight:500;color:var(--ink-2)}.picked-label{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.picked-price{margin-left:2px;padding:2px 9px;border-radius:999px;font-size:.82rem;font-weight:700;color:var(--c-on);background:var(--c)}.amount-box{display:flex;align-items:center;justify-content:center;gap:2px;margin-top:16px;padding:8px 16px;border-radius:var(--radius-lg);background:var(--surface-2);box-shadow:inset 0 0 0 2px transparent;transition:box-shadow .2s ease,background-color .2s ease}.amount-box:focus-within{background:var(--surface);box-shadow:inset 0 0 0 2px var(--color-accent),0 0 0 4px #2196f329}.amount-currency{font-size:2.2rem;font-weight:600;color:var(--muted)}.amount-input{min-width:2ch;max-width:100%;padding:0 2px;border:0;font-size:3.2rem;font-weight:700;line-height:1.15;letter-spacing:-.02em;text-align:center;color:var(--ink);background:transparent;caret-color:var(--blue-700);font-variant-numeric:tabular-nums}.amount-input:focus,.amount-input:focus-visible{outline:none}.amount-input::selection{color:var(--ink);background:#2196f333}.amount-input::placeholder{color:#78909c}.amount-hint{margin-top:8px;font-size:.88rem;font-weight:500;text-align:center;color:var(--muted)}.amount-hint.is-warn{color:var(--orange-ink)}.quick{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:14px 0 18px}.chip-btn{min-width:68px;min-height:44px;padding:0 14px;border-radius:999px;font-weight:600;color:var(--ink-2);background:var(--surface);box-shadow:inset 0 0 0 1.5px #dce5ec;transition:background-color .2s ease,box-shadow .2s ease,color .2s ease,transform .15s ease}.chip-btn:active:not(:disabled){transform:scale(.95)}.amount-form--green .chip-btn[aria-pressed=true]{color:var(--green-700);background:var(--green-50);box-shadow:inset 0 0 0 2px var(--color-primary)}.amount-form--orange .chip-btn[aria-pressed=true]{color:var(--orange-ink);background:var(--orange-50);box-shadow:inset 0 0 0 2px var(--color-secondary)}.field{display:grid;gap:6px}.field-label{padding-left:4px;font-size:.9rem;font-weight:600;color:var(--ink-2)}.input{width:100%;min-height:52px;padding:12px 16px;border:0;border-radius:var(--radius-sm);font-size:1rem;color:var(--ink);background:var(--surface-2);box-shadow:inset 0 0 0 1.5px #dce5ec;transition:box-shadow .2s ease,background-color .2s ease}.input::placeholder{color:var(--muted)}.input:focus,.input:focus-visible{outline:none;background:var(--surface);box-shadow:inset 0 0 0 2px var(--color-accent),0 0 0 4px #2196f329}.input-affix{position:relative}.input-affix-sign{position:absolute;top:50%;left:16px;transform:translateY(-50%);font-weight:600;color:var(--muted);pointer-events:none}.input--money{padding-left:32px;font-weight:600;font-variant-numeric:tabular-nums}.ideas{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.chip-btn--idea{min-width:0;padding:0 14px;font-size:.92rem}.chip-btn--idea[aria-pressed=true]{color:var(--orange-ink);background:var(--orange-50);box-shadow:inset 0 0 0 2px var(--color-secondary)}.form-error{font-size:.92rem;font-weight:600;color:var(--red-700)}.goal-preview{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:var(--radius-sm);font-size:.9rem;color:var(--ink-2);background:var(--orange-50)}.pin-box{position:relative;width:min(100%,288px);margin:4px auto 0}.pin-input{position:absolute;inset:0;z-index:1;width:100%;height:100%;border:0;border-radius:var(--radius-md);font-size:16px;color:transparent;caret-color:transparent;background:transparent;letter-spacing:3em;cursor:pointer;opacity:.01}.pin-input:focus,.pin-input:focus-visible{outline:none}.pin-slots{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.pin-slot{display:grid;place-items:center;height:64px;border-radius:18px;background:var(--surface-2);box-shadow:inset 0 0 0 1.5px #dce5ec;transition:background-color .2s ease,box-shadow .2s ease}.pin-slot:after{content:"";width:16px;height:16px;border-radius:50%;background:var(--ink);transform:scale(0);transition:transform .2s var(--ease-out)}.pin-slot.is-filled:after{transform:scale(1)}.pin-input:focus-visible+.pin-slots .pin-slot.is-next,.pin-input:focus+.pin-slots .pin-slot.is-next{background:var(--surface);box-shadow:inset 0 0 0 2px var(--color-accent),0 0 0 4px #2196f329}.pin-box.is-error .pin-slots{animation:shake .4s ease both}.pin-box.is-error .pin-slot{background:var(--red-50);box-shadow:inset 0 0 0 2px var(--color-danger)}.pin-help{min-height:2.6em;margin-top:12px;font-size:.9rem;text-align:center;text-wrap:balance;color:var(--muted)}.pin-help.is-error{font-weight:600;color:var(--red-700)}.pin-box+.pin-help+.sheet-actions{margin-top:12px}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-height:100vh;min-height:100dvh;padding:calc(32px + env(safe-area-inset-top)) 24px calc(24px + env(safe-area-inset-bottom));text-align:center}.loading-mark{display:grid;place-items:center;width:108px;height:108px;border-radius:34px;font-size:3.4rem;background:var(--surface);box-shadow:var(--shadow-card),0 24px 44px -20px #2196f38c;animation:bob 2.6s ease-in-out infinite}.loading-title{margin-top:24px;font-size:2.1rem;font-weight:700;line-height:1.1;color:var(--green-700)}.loading-text{margin-top:6px;font-size:1.05rem;color:var(--ink-2)}.dots{display:flex;gap:8px;margin-top:22px}.dots span{width:10px;height:10px;border-radius:50%;background:var(--color-primary);animation:dot 1.2s ease-in-out infinite}.dots span:nth-child(2){background:var(--color-secondary);animation-delay:.15s}.dots span:nth-child(3){background:var(--color-accent);animation-delay:.3s}.loading-status{display:flex;align-items:flex-start;justify-content:center;gap:8px;max-width:320px;margin-top:12px;font-size:.88rem;color:var(--muted);text-wrap:pretty}.loading-status--offline,.loading-status--error{margin-top:18px;padding:12px 16px;border-radius:var(--radius-sm);font-size:.92rem;font-weight:500;line-height:1.35;text-align:left}.loading-status--offline{color:var(--orange-ink);background:var(--orange-50);box-shadow:inset 0 0 0 1px var(--orange-100)}.loading-status--error{color:var(--red-700);background:var(--red-50);box-shadow:inset 0 0 0 1px var(--red-100);animation:toast-in .35s var(--ease-out) both}.loading-status-icon{flex:none;font-size:1.05rem;line-height:1.2}.loading--error .loading-mark{animation:none}.loading-help{display:grid;gap:8px;width:100%;max-width:300px;margin-top:40px;padding-top:20px;border-top:1px solid rgba(21,101,192,.12)}.loading-help-label{margin-bottom:4px;font-size:.85rem;font-weight:500;color:var(--muted)}.loading-note{margin-top:2px;font-size:.85rem;line-height:1.4;color:var(--muted)}.loading-build{margin-top:28px}@media(max-width:389px){.goal-edit{width:44px;padding:0}.goal-edit-label{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}}@media(max-width:359px){.actions .btn-bubble{display:none}.sheet{padding-left:16px;padding-right:16px}.sheet-title{font-size:1.15rem}.quick{gap:6px}.chip-btn{min-width:0;padding:0 11px;font-size:.92rem}.hero{padding-left:20px;padding-right:20px}.hero-stat{padding-left:8px;gap:8px}.hero-stat-icon{width:24px;height:24px;font-size:.85rem}.pin-slot{height:56px}.sheet-head .avatar{display:none}.card{padding:18px 16px}.card-head{gap:10px}.card-head .avatar{width:42px;height:42px;font-size:1.3rem}.goal-name,.goal-pct{font-size:1.15rem}.goal-track-row{gap:10px}}@media(min-width:640px){:root{--gutter: 24px}.page{padding-top:24px}.layout,.col{gap:20px}.card{padding:24px}.sheet-backdrop{align-items:center;padding:24px}.sheet{max-width:440px;max-height:calc(100vh - 48px);max-height:calc(100dvh - 48px);padding:24px 28px 28px;border-radius:var(--radius-xl);box-shadow:var(--shadow-float);animation-name:dialog-in}.sheet--wide{max-width:520px}#root:has(.toast-region) .sheet-backdrop{padding-block:calc(var(--toast-h, 0px) + 18px + env(safe-area-inset-top))}#root:has(.toast-region) .sheet{max-height:calc(100dvh - 2 * (var(--toast-h, 0px) + 18px + env(safe-area-inset-top)))}.sheet--narrow{max-width:400px}.sheet-grabber{display:none}.tile-grid{gap:12px}}@media(min-width:960px){:root{--page-max: 1080px;--gutter: 32px}.page{padding-top:28px}.layout{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;align-items:start}.hero{min-height:220px;padding:28px 30px}.history-head{padding-top:0;min-height:32px}}@media(hover:none){.tile:hover{background:var(--surface);box-shadow:inset 0 0 0 2px var(--c),0 8px 16px -12px var(--c-glow, rgba(0, 0, 0, .3))}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes sheet-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes dialog-in{0%{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}@keyframes toast-in{0%{opacity:0;transform:translateY(-16px) scale(.98)}to{opacity:1;transform:none}}@keyframes pop{0%{transform:scale(.94);opacity:.6}60%{transform:scale(1.03);opacity:1}to{transform:scale(1)}}@keyframes coin-float{0%,to{transform:translateY(0) rotate(var(--r))}50%{transform:translateY(-7px) rotate(calc(var(--r) + 8deg))}}@keyframes twinkle{0%,to{opacity:.9;transform:scale(1)}50%{opacity:.3;transform:scale(.6)}}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes dot{0%,80%,to{transform:scale(.6);opacity:.5}40%{transform:scale(1);opacity:1}}@keyframes toast-timer{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes trophy{0%,to{transform:rotate(0) scale(1)}50%{transform:rotate(-8deg) scale(1.08)}}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;animation-delay:0s!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.coin,.sparkle,.loading-mark,.dots span,.sync-dot,.progress-trophy{animation:none!important}.toast-timer{display:none}body>canvas{display:none!important}}
