:root{--paper: #faf5ea;--ink: #1c1a17;--beak: #e8620c;--muted: #8a8377;--surface: #fffdf8;--border: rgba(28, 26, 23, .1);--green: #4c7a3d;--red: #b0402f;--gold: #c9a227;--plum: #7d5ba6;--pine: #3e7c6f;--chart-grid: rgba(28, 26, 23, .08);--chart-axis: #8a8377;--shadow-sm: 0 1px 2px rgba(28, 26, 23, .06);--shadow-rest: 0 1px 2px rgba(28, 26, 23, .06), 0 8px 24px rgba(28, 26, 23, .08);--shadow-hover: 0 2px 4px rgba(28, 26, 23, .06), 0 16px 36px rgba(28, 26, 23, .14);--shadow-logo: 0 4px 12px rgba(28, 26, 23, .12);--cat1: #e8620c;--cat2: #4c7a3d;--cat3: #c9a227;--cat4: #7d5ba6;--cat5: #b0402f;--cat6: #3e7c6f;--cat7: #a8763e;--cat8: #d1495b;--cat9: #6b705c;--cat10: #9c6644;--cat11: #e0a458;--cat12: #8a8377;color-scheme:light}:root[data-theme=dark]{--paper: #1c1a17;--ink: #f0e9da;--beak: #f0812f;--muted: #98907f;--surface: #26231e;--border: rgba(240, 233, 218, .12);--green: #7aa465;--red: #d1705f;--gold: #d9b53f;--plum: #a284c9;--pine: #5da192;--chart-grid: rgba(240, 233, 218, .08);--chart-axis: #98907f;--shadow-sm: 0 1px 2px rgba(10, 8, 6, .3);--shadow-rest: 0 1px 2px rgba(10, 8, 6, .3), 0 8px 24px rgba(10, 8, 6, .35);--shadow-hover: 0 2px 4px rgba(10, 8, 6, .3), 0 16px 36px rgba(10, 8, 6, .5);--shadow-logo: 0 4px 12px rgba(10, 8, 6, .4);--cat1: #f0812f;--cat2: #7aa465;--cat3: #d9b53f;--cat4: #a284c9;--cat5: #d1705f;--cat6: #5da192;--cat7: #c99a63;--cat8: #e4798a;--cat9: #94997f;--cat10: #bd8a67;--cat11: #e9b573;--cat12: #a49b89;color-scheme:dark}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{min-height:100vh}body{background:var(--paper);color:var(--ink);font-family:IBM Plex Mono,monospace}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;opacity:.5;z-index:1;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E")}@keyframes rise{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}:focus-visible{outline:3px solid var(--beak);outline-offset:3px}.app{max-width:1200px;margin:0 auto;padding:2rem clamp(1rem,4vw,2.5rem) 4rem;position:relative;z-index:2}.header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:1.75rem;animation:rise .7s cubic-bezier(.2,.8,.2,1) both}.header h1{font-family:Fraunces,serif;font-weight:900;font-size:clamp(2rem,6vw,3rem);letter-spacing:-.03em;line-height:1}.header h1 .hero-dot{color:var(--beak)}.header .sub{color:var(--muted);font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;margin-top:.5rem}.header-actions{display:inline-flex;gap:8px}.action-btn{display:inline-flex;align-items:center;font-family:IBM Plex Mono,monospace;font-size:.75rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--paper);background:var(--ink);border:none;border-radius:999px;padding:.55rem 1.3rem;cursor:pointer;text-decoration:none;transition:background .2s ease,transform .2s cubic-bezier(.2,.8,.2,1)}.action-btn:hover{background:var(--beak);transform:translateY(-1px)}.action-btn:active{transform:scale(.96);transition-duration:.08s}.action-btn:disabled{opacity:.6;cursor:progress;transform:none}.controls{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:24px}.savings-view{display:flex;flex-direction:column;gap:24px}.worst-months{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.worst-month{background:var(--paper);border:1px solid var(--border);border-radius:14px;padding:14px}.worst-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}.worst-month-label{font-family:Fraunces,serif;font-weight:900;letter-spacing:-.02em;font-size:15px}.worst-rate{font-size:12px;font-weight:500}.worst-list{list-style:none;display:flex;flex-direction:column;gap:8px}.worst-list li{display:flex;align-items:baseline;gap:8px;font-size:12px}.worst-rank{color:var(--beak);font-variant-numeric:tabular-nums;width:14px;flex:none}.worst-desc{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.worst-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.worst-name .ref{color:var(--muted)}.worst-meta{color:var(--muted);font-size:11px}.worst-amount{font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap;flex:none}.worst-empty{color:var(--muted);font-size:13px}.savings-view .recharts-bar-rectangle{cursor:pointer}.hint{color:var(--muted);font-size:.65rem;font-weight:400;letter-spacing:.08em}.month-detail{display:grid;grid-template-columns:1fr 1fr;gap:24px}@media (max-width: 640px){.month-detail{grid-template-columns:1fr}}.flow-title{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:10px}.cat-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}@media (max-width: 760px){.cat-grid{grid-template-columns:1fr}}.cat-legend{list-style:none;margin-top:12px;display:flex;flex-direction:column;gap:6px}.cat-legend li{display:flex;align-items:center;gap:8px;font-size:12px}.cat-swatch{width:10px;height:10px;border-radius:3px;flex:none}.cat-name{flex:1}.cat-amt{font-variant-numeric:tabular-nums;color:var(--muted)}.cat-tag{font-size:11px;font-weight:500}.cat-internal{font-size:11px;color:var(--muted);font-style:italic}.row-internal{opacity:.55}.mov-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.toggle{display:inline-flex;align-items:center;gap:6px;font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none}.toggle input{accent-color:var(--beak);cursor:pointer}.plan-note{font-size:13px;color:var(--ink);margin-top:12px;line-height:1.5}.link-btn{background:none;border:0;color:var(--ink);font:inherit;font-size:.75rem;cursor:pointer;border-bottom:2px solid var(--beak);transition:color .2s ease}.link-btn:hover{color:var(--beak)}.tabs{display:inline-flex;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:4px;box-shadow:var(--shadow-sm)}.smoothing{display:inline-flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:4px 12px 4px 14px;height:38px;box-shadow:var(--shadow-sm)}.smoothing-label{color:var(--muted);font-size:.6rem;text-transform:uppercase;letter-spacing:.08em}.smoothing select{background:transparent;border:0;color:var(--ink);font-family:inherit;font-size:.75rem;font-weight:500;outline:none;cursor:pointer;padding-right:4px}.smoothing select option{background:var(--surface);color:var(--ink)}.tab{background:transparent;border:0;color:var(--muted);font-family:inherit;padding:8px 16px;border-radius:999px;font-size:.7rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:color .2s ease,background .2s ease}.tab:hover{color:var(--beak)}.tab.active{background:var(--ink);color:var(--paper)}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:24px;animation:rise .7s cubic-bezier(.2,.8,.2,1) .06s both}.card{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:18px 20px;box-shadow:var(--shadow-rest);transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .25s cubic-bezier(.2,.8,.2,1)}.card:hover{transform:translateY(-4px) rotate(-1deg);box-shadow:var(--shadow-hover)}.card .label{color:var(--muted);font-size:.6rem;text-transform:uppercase;letter-spacing:.14em;margin-bottom:8px}.card .value{font-family:IBM Plex Mono,monospace;font-size:1.4rem;font-weight:500;letter-spacing:-.01em;line-height:1.1;font-variant-numeric:tabular-nums}.card .value.pos{color:var(--green)}.card .value.neg{color:var(--red)}.card .unit{font-family:IBM Plex Mono,monospace;color:var(--muted);font-size:.75rem;font-weight:400;margin-left:6px;letter-spacing:0}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:16px 20px;margin-bottom:24px;box-shadow:var(--shadow-rest)}.stat{display:flex;flex-direction:column;gap:4px;padding:4px 0}.stat-label{color:var(--muted);font-size:.6rem;text-transform:uppercase;letter-spacing:.08em}.stat-value{font-family:IBM Plex Mono,monospace;font-size:.95rem;font-weight:500;letter-spacing:-.01em;font-variant-numeric:tabular-nums}.stat-value.pos{color:var(--green)}.stat-value.neg{color:var(--red)}.stat-unit{font-family:IBM Plex Mono,monospace;color:var(--muted);font-size:.65rem;font-weight:400;margin-left:4px}.stat-sub{color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}@media (max-width: 640px){.stats{grid-template-columns:repeat(2,1fr);padding:14px 16px;gap:10px}.stat-value{font-size:1rem}}.chart{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:20px;box-shadow:var(--shadow-rest)}.chart h3{margin-bottom:16px;font-size:.7rem;font-weight:500;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.loading,.error{padding:64px 24px;text-align:center;color:var(--muted)}.error{color:var(--red)}.recharts-tooltip-wrapper .tooltip{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:10px 12px;font-size:12px;box-shadow:var(--shadow-rest)}.tooltip .t-label{color:var(--muted);font-size:.6rem;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px}.tooltip .t-value{font-variant-numeric:tabular-nums;font-weight:500}.tooltip .t-value.pos{color:var(--green)}.tooltip .t-value.neg{color:var(--red)}.card.goal{display:flex;flex-direction:column;gap:8px}.goal-row{display:flex;align-items:baseline;gap:6px}.goal-input{flex:1;background:var(--paper);border:1px solid var(--border);border-radius:12px;color:var(--ink);font-family:IBM Plex Mono,monospace;font-size:1.15rem;font-weight:500;font-variant-numeric:tabular-nums;letter-spacing:-.01em;padding:6px 12px;width:100%;outline:none;transition:border-color .2s ease}.goal-input:focus{border-color:var(--beak)}.goal-input::-webkit-outer-spin-button,.goal-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.goal-input[type=number]{-moz-appearance:textfield}.goal-bar{height:6px;background:var(--paper);border:1px solid var(--border);border-radius:999px;overflow:hidden}.goal-bar-fill{height:100%;background:var(--beak);transition:width .3s cubic-bezier(.2,.8,.2,1)}.goal-meta{display:flex;flex-wrap:wrap;gap:6px;font-size:12px;font-variant-numeric:tabular-nums}.goal-meta .pos{color:var(--green);font-weight:500}.charts{display:grid;grid-template-columns:1fr;gap:20px;animation:rise .7s cubic-bezier(.2,.8,.2,1) .12s both}.mov-view{display:flex;flex-direction:column;gap:20px}.mov-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}.mov-head h3{margin:0}.table-wrap{max-height:560px;overflow:auto;border:1px solid var(--border);border-radius:14px}.mov-table{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}.mov-table thead th{position:sticky;top:0;background:var(--paper);color:var(--muted);font-weight:500;text-transform:uppercase;letter-spacing:.08em;font-size:.6rem;text-align:left;padding:10px 14px;border-bottom:1px solid var(--border);z-index:1}.mov-table th.num,.mov-table td.num{text-align:right}.mov-table tbody td{padding:9px 14px;border-bottom:1px solid var(--border);vertical-align:top}.mov-table tbody tr:last-child td{border-bottom:0}.mov-table tbody tr:hover td{background:var(--paper)}.mov-table .nowrap{white-space:nowrap;color:var(--muted)}.mov-table .desc{max-width:320px}.mov-table .ref{color:var(--muted)}.mov-table .ccy{color:var(--muted);font-size:11px}.mov-table .pos{color:var(--green);font-weight:500}.mov-table .neg{color:var(--red);font-weight:500}.mov-table .bal{font-weight:500}.mov-table .sub-usd{color:var(--muted);font-size:11px}.chip{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.6rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--border)}.chip-usd{color:var(--green);background:#4c7a3d14}.chip-local{color:var(--beak);background:#e8620c14}@media (min-width: 1000px){.charts{grid-template-columns:1fr 1fr}.charts .chart:first-child{grid-column:1 / -1}}@media (max-width: 640px){.app{padding:20px 14px 48px}.cards{grid-template-columns:1fr;gap:12px;margin-bottom:16px}.card{padding:14px 16px}.card .value{font-size:1.4rem}.tabs{width:100%;overflow-x:auto}.tab{padding:8px 12px;font-size:.65rem}.chart{padding:14px 12px 10px}.goal-input{font-size:1.15rem}}.upload{max-width:760px;margin:32px auto;display:flex;flex-direction:column;gap:16px;animation:rise .7s cubic-bezier(.2,.8,.2,1) .06s both}.upload-list{list-style:none;display:flex;flex-direction:column;gap:8px}.upload-list li{display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--surface);border:1px solid var(--border);border-radius:12px;font-size:13px}.upload-list li.upload-error{border-color:var(--red)}.upload-name{font-weight:500;white-space:nowrap}.upload-kind{color:var(--muted);flex:1;min-width:0}.analyze-btn{align-self:center;padding:.8rem 2.5rem;font-size:.85rem}.manual-rate{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:14px;font-size:13px}.manual-rate .goal-row{margin-top:10px;display:flex;gap:10px}.privacy-note{color:var(--muted);font-size:12px;text-align:center;line-height:1.5}.format-help{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px 14px;font-size:13px;line-height:1.5}.format-help summary{cursor:pointer;font-weight:500}.format-help p{margin:10px 0 0;color:var(--muted)}.format-help code{background:#e8620c1a;border-radius:4px;padding:1px 5px}.format-help pre{margin:10px 0 0;padding:10px 12px;background:var(--paper);border:1px solid var(--border);border-radius:8px;overflow-x:auto}.inv-builder{margin-top:14px;display:flex;flex-direction:column;gap:10px}.inv-row{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap}.inv-row label{display:flex;flex-direction:column;gap:4px;font-size:.6rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.inv-row input{background:var(--paper);border:1px solid var(--border);border-radius:8px;color:inherit;font-family:inherit;padding:6px 8px;font-size:13px;width:140px}.inv-row-hint{color:var(--red);font-size:11px;align-self:center}.inv-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.upload-intro{color:var(--muted);font-size:13px;text-align:center;line-height:1.5}.slot-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}@media (max-width: 640px){.slot-grid{grid-template-columns:1fr}}.slot{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:14px 16px;display:flex;flex-direction:column;gap:8px;box-shadow:var(--shadow-rest);transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .25s cubic-bezier(.2,.8,.2,1)}.slot:hover{transform:translateY(-4px) rotate(-1deg);box-shadow:var(--shadow-hover)}.slot-loaded{border-color:var(--green)}.slot-error{border-color:var(--red)}.slot-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.slot-title{font-family:Fraunces,serif;font-weight:900;letter-spacing:-.02em;font-size:1.1rem}.slot-badge{font-size:.55rem;font-weight:500;text-transform:uppercase;letter-spacing:.08em;padding:2px 8px;border-radius:999px;white-space:nowrap}.slot-req{background:#e8620c1f;color:var(--beak)}.slot-opt{background:#8a837726;color:var(--muted)}.slot-drop{border:2px dashed rgba(28,26,23,.2);border-radius:12px;padding:18px 12px;text-align:center;cursor:pointer;color:var(--muted);font-size:12px;transition:border-color .2s ease,background .2s ease}.slot-drop:hover,.slot-drop.drag-over{border-color:var(--beak);background:#e8620c0d;color:inherit}.slot-file{display:flex;align-items:center;gap:10px;padding:10px 12px;background:#4c7a3d14;border-radius:12px;font-size:12px}.slot-desc{color:var(--muted);font-size:12px;line-height:1.45}.slot-err-msg{color:var(--red);font-size:12px}:root[data-theme=dark] body:before{opacity:.35;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.04 0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E")}:root[data-theme=dark] .chip-usd{background:#7aa46526}:root[data-theme=dark] .chip-local{background:#f0812f26}:root[data-theme=dark] .slot-req{background:#f0812f2e}:root[data-theme=dark] .slot-opt{background:#98907f33}:root[data-theme=dark] .slot-file{background:#7aa46526}:root[data-theme=dark] .slot-drop{border-color:#f0e9da40}:root[data-theme=dark] .slot-drop:hover,:root[data-theme=dark] .slot-drop.drag-over{border-color:var(--beak);background:#f0812f14}:root[data-theme=dark] .format-help code{background:#f0812f29}:root[data-theme=dark] .demo-cta{border-color:#f0e9da40}.theme-toggle{position:fixed;left:1.25rem;bottom:1.25rem;width:42px;height:42px;display:flex;align-items:center;justify-content:center;font-size:1.1rem;background:var(--surface);border:1px solid var(--border);border-radius:999px;box-shadow:var(--shadow-sm);cursor:pointer;z-index:3;transition:transform .25s cubic-bezier(.2,.8,.2,1)}.theme-toggle:hover{transform:rotate(-6deg) scale(1.05)}.theme-toggle:active{transform:scale(.9);transition-duration:.08s}.brand-mark{position:fixed;right:1.25rem;bottom:1.25rem;width:42px;height:42px;display:block;z-index:3;transition:transform .25s cubic-bezier(.2,.8,.2,1)}.brand-mark:hover{transform:rotate(-6deg) scale(1.05)}.brand-mark img{width:100%;height:100%;display:block;border-radius:50%;box-shadow:var(--shadow-logo)}.demo-cta{display:flex;flex-direction:column;align-items:center;gap:10px;background:var(--surface);border:1px dashed rgba(28,26,23,.2);border-radius:14px;padding:14px 16px;text-align:center}.demo-cta span{color:var(--muted);font-size:13px;line-height:1.5}@media (prefers-reduced-motion: reduce){.header,.cards,.charts,.upload{animation:none}.card,.slot,.brand-mark,.theme-toggle,.action-btn{transition:none}}.auth-nav{position:fixed;top:1.25rem;right:1.25rem;z-index:3;display:flex;align-items:center;gap:1rem;animation:rise .7s cubic-bezier(.2,.8,.2,1) both}.auth-nav-button{font-family:IBM Plex Mono,monospace;font-size:.8rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--paper);background:var(--ink);border:none;border-radius:999px;padding:.55rem 1.3rem;cursor:pointer;transition:background .2s ease,transform .2s cubic-bezier(.2,.8,.2,1)}.auth-nav-button:hover{background:var(--beak);transform:translateY(-1px)}.auth-nav-button:focus-visible{outline:3px solid var(--beak);outline-offset:3px}
