:root{--paper:#f6f5ef;--white:#fff;--ink:#193e35;--muted:#6d7973;--line:#e4e8df;--green:#214f40;--lime:#ddedb7;--soft:#edf3e6;--red:#a13c32;--gold:#987437;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);font-synthesis:none;background:var(--bg-paper,var(--paper))}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:wait;opacity:.6}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--bg-7fa348,#7fa348);outline-offset:3px}button{min-height:44px;border:1px solid transparent;border-radius:12px;background:none;color:inherit;padding:10px 14px;font-weight:600}button svg{width:19px;height:19px;flex-shrink:0}.icon{display:inline-flex;align-items:center;justify-content:center;gap:9px}.primary{background:var(--bg-green,var(--green));color:var(--fg-ffffff,#fff)}.primary:hover{background:var(--bg-163d30,#163d30)}.secondary{background:var(--bg-ffffff,#fff);border-color:var(--bg-line,var(--line))}.subtle:hover{background:var(--bg-soft,var(--soft))}.danger{color:var(--red)}a{color:var(--green)}h1,h2,h3,p{margin-top:0}h1{font-size:32px;letter-spacing:-1.1px;font-weight:650;margin-bottom:8px}h2{font-size:18px;letter-spacing:-.3px;font-weight:650}h3{font-size:15px}p{line-height:1.6}.muted,small{color:var(--muted)}small{font-size:12px}.eyebrow{text-transform:uppercase;letter-spacing:2px;font-size:10px;font-weight:750;color:var(--muted)}.brand{font-size:23px;letter-spacing:-.8px;display:flex;align-items:center;gap:10px;font-weight:750}.brand-symbol{height:38px;width:38px;background:var(--bg-ink,var(--ink));color:var(--lime);border-radius:12px;display:flex;align-items:center;justify-content:center}.brand-symbol svg{height:24px;width:24px}.sidebar{position:fixed;inset:0 auto 0 0;width:230px;background:var(--bg-fdfdf8,#fdfdf8);border-right:1px solid var(--bg-line,var(--line));padding:36px 22px;display:flex;flex-direction:column;z-index:3}.sidebar .brand{margin:0 6px 54px}.nav-label{margin:0 14px 12px}.nav{display:flex;flex-direction:column;gap:8px}.nav button{display:flex;align-items:center;gap:13px;text-align:left;padding:14px 18px;font-size:14px;color:var(--fg-67776e,#67776e)}.nav button.active{background:var(--bg-ink,var(--ink));color:var(--fg-ffffff,#fff)}.nav button:not(.active):hover{background:var(--bg-soft,var(--soft))}.sidebar-foot{margin-top:auto}.private-note{border-top:1px solid var(--bg-line,var(--line));padding:22px 12px 0;display:flex;gap:10px;font-size:12px;line-height:1.6;color:var(--muted)}.private-note svg{width:19px;flex-shrink:0}.main{margin-left:230px;padding:36px 42px 40px;max-width:1600px}.topbar{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--bg-line,var(--line));padding-bottom:25px;margin-bottom:30px;font-size:12px;gap:15px}.topbar-left{display:flex;align-items:center;gap:10px;color:var(--muted)}.status-dot{width:7px;height:7px;border-radius:50%;background:var(--bg-718b3f,#718b3f)}.account{display:flex;gap:9px;align-items:center}.avatar{background:var(--bg-e7eadf,#e7eadf);width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700}.heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:28px}.heading p{color:var(--muted);font-size:14px;margin:0}.heading-actions{display:flex;align-items:center;gap:10px}.month-picker{display:flex;align-items:center;background:var(--bg-ffffff,#fff);border:1px solid var(--bg-line,var(--line));border-radius:12px;padding:2px}.month-picker input{border:0;padding:8px 2px;font-size:13px;background:none;color:var(--ink);width:139px;font-weight:600;min-height:40px}.month-picker button{padding:7px;min-width:34px}.grid{display:grid;gap:20px}.hero-grid{grid-template-columns:1.3fr 1fr;margin-bottom:22px}.balance{border-radius:20px;background:var(--bg-ink,var(--ink));color:var(--fg-ffffff,#fff);padding:30px;position:relative;overflow:hidden;min-height:236px}.balance:after{content:"";position:absolute;width:220px;height:220px;border:1px solid var(--bg-466157,#466157);border-radius:50%;right:-125px;top:-90px;box-shadow:0 0 0 28px var(--bg-254b40,#254b40),0 0 0 29px var(--bg-466157,#466157);pointer-events:none}.balance .eyebrow{color:var(--fg-cadabd,#cadabd)}.balance-value{font-size:clamp(32px,3.3vw,46px);font-weight:550;letter-spacing:-1.8px;margin:14px 0 12px;overflow-wrap:anywhere}.balance p{color:var(--fg-d1dfd2,#d1dfd2);font-size:12px;max-width:400px;margin:0}.balance-footer{display:flex;align-items:center;gap:7px;margin-top:25px;font-size:11px;color:var(--fg-dcebbb,#dcebbb)}.balance-footer svg{width:15px;height:15px}.budget-summary{background:var(--bg-e9eddf,#e9eddf);border:1px solid var(--bg-e1e6d5,#e1e6d5);border-radius:20px;padding:26px}.section-top{display:flex;align-items:center;justify-content:space-between;gap:10px}.section-top h2{margin-bottom:0}.pill{border-radius:30px;padding:5px 9px;font-size:10px;background:var(--bg-f9fbf3,#f9fbf3);color:var(--green);font-weight:650;white-space:nowrap}.budget-line{display:flex;justify-content:space-between;font-size:13px;margin-top:16px;gap:10px}.budget-line strong{font-size:15px;white-space:nowrap}.budget-line.total{border-top:1px solid var(--bg-cfd8c6,#cfd8c6);padding-top:16px}.budget-line.total strong{font-size:22px}.actual-grid{grid-template-columns:repeat(3,1fr);margin-bottom:28px}.card{border:1px solid var(--bg-line,var(--line));background:var(--bg-ffffff,#fff);border-radius:18px;padding:24px;min-width:0}.metric{display:flex;align-items:center;gap:14px;padding:21px}.metric-icon{height:44px;width:44px;display:grid;place-items:center;border-radius:13px;background:var(--bg-soft,var(--soft));flex-shrink:0}.metric-icon svg{height:21px;width:21px}.metric-icon.expense{background:var(--bg-f5eee2,#f5eee2);color:var(--fg-8a7247,#8a7247)}.metric-icon.saving{background:var(--bg-eceaf5,#eceaf5);color:var(--fg-7c7294,#7c7294)}.metric-label{font-size:11px;color:var(--muted);margin-bottom:6px}.metric-value{font-size:23px;font-weight:650;letter-spacing:-.7px}.metric small{font-size:10px}.content-grid{grid-template-columns:1fr 1fr;margin-bottom:22px}.section-top .text-button{font-size:12px;padding:7px;min-height:36px}.card-sub{font-size:12px;color:var(--muted);margin:8px 0 22px}.chart-area{display:flex;align-items:center;gap:22px}.donut{width:150px;height:150px;flex-shrink:0}.legend{flex:1;min-width:0}.legend-item{display:flex;gap:8px;font-size:11px;align-items:flex-start;line-height:1.5;margin:12px 0}.dot{width:8px;height:8px;border-radius:50%;background:var(--bg-315d47,#315d47);flex-shrink:0;margin-top:4px}.legend-item span:nth-child(2){flex:1}.legend-item strong{white-space:nowrap}.bar-item{margin-top:14px}.bar-label{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;margin-bottom:6px}.bar-label span{color:var(--muted)}progress{appearance:none;width:100%;height:6px;border:0;border-radius:8px;overflow:hidden;display:block;background:var(--bg-eff1e9,#eff1e9)}progress::-webkit-progress-bar{background:var(--bg-eff1e9,#eff1e9);border-radius:8px}progress::-webkit-progress-value{background:var(--bg-7e9a65,#7e9a65);border-radius:8px}progress::-moz-progress-bar{background:var(--bg-7e9a65,#7e9a65)}.progress-row{display:grid;grid-template-columns:1fr 1fr;gap:28px;margin-top:24px}.progress-row .amount{font-size:21px;font-weight:600;margin:8px 0}.progress-row progress{height:8px;margin-bottom:8px}.empty{text-align:center;padding:30px 16px;color:var(--muted)}.empty-icon{height:48px;width:48px;border:1px solid var(--bg-line,var(--line));border-radius:15px;display:grid;place-items:center;margin:0 auto 12px;background:var(--bg-f7f8f3,#f7f8f3)}.empty-icon svg{height:23px;width:23px}.empty h3{color:var(--ink);margin:8px 0}.empty p{font-size:12px;max-width:320px;margin:0 auto 14px}.footer{font-size:11px;display:flex;justify-content:space-between;color:var(--muted);gap:14px;padding-top:20px}.mobile-brand{display:none}.notice{background:var(--bg-fff8e8,#fff8e8);color:var(--fg-795b2b,#795b2b);border:1px solid var(--bg-ebdcc0,#ebdcc0);padding:12px 16px;border-radius:12px;font-size:12px;line-height:1.5;margin:15px 0}.negative{color:var(--red)!important}.balance .negative{color:var(--fg-ffc9b9,#ffc9b9)!important}.list{display:flex;flex-direction:column;gap:12px}.budget-item{display:flex;align-items:center;gap:16px;padding:20px}.item-symbol{background:var(--bg-edf2e5,#edf2e5);min-width:44px;height:44px;border-radius:13px;display:grid;place-items:center;font-size:15px;font-weight:700}.item-main{flex:1;min-width:0}.item-main h3{margin:0 0 5px;overflow-wrap:anywhere}.item-main p{font-size:12px;color:var(--muted);margin:0}.item-main progress{max-width:300px;margin-top:10px}.item-end{text-align:right}.item-end strong{display:block;margin-bottom:4px;font-size:18px}.item-end small{display:block}.item-actions{display:flex;gap:5px}.inactive{opacity:.65}.intro-stat{font-size:32px;font-weight:600;letter-spacing:-1px;margin:10px 0}.toolbar{display:flex;gap:10px;margin-bottom:18px;flex-wrap:wrap}.toolbar input{flex:1;min-width:140px}.toolbar select{max-width:190px}.field,select,textarea,input:not([type=checkbox]):not([type=month]){border:1px solid var(--bg-dce3d6,#dce3d6);border-radius:10px;padding:12px;background:var(--bg-ffffff,#fff);color:var(--ink);min-height:44px;max-width:100%}.movement{display:grid;grid-template-columns:42px minmax(0,1fr) auto auto;gap:12px;align-items:center;border-top:1px solid var(--bg-line,var(--line));padding:16px 0}.movement .item-symbol{min-width:38px;height:38px;font-size:12px}.movement strong{font-size:13px;overflow-wrap:anywhere}.movement p{font-size:11px;color:var(--muted);margin:5px 0 0;overflow-wrap:anywhere}.movement .money{font-size:14px;font-weight:650;text-align:right;white-space:nowrap}.movement .item-actions button{padding:8px;min-width:36px}.details{margin-top:16px}.details summary{cursor:pointer;color:var(--muted);font-size:12px;min-height:44px;padding:14px 0}.settings-grid{grid-template-columns:1fr 1fr}.settings-grid .card p{font-size:13px;color:var(--muted)}.settings-grid .card button{margin-top:6px}.saving-detail{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:22px 0}.saving-detail strong{display:block;font-size:21px;margin-top:8px}.offline{position:sticky;top:0;z-index:20;background:var(--bg-82521e,#82521e);color:var(--fg-ffffff,#fff);padding:12px;text-align:center;font-size:13px}.offline[hidden]{display:none}#toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);max-width:calc(100vw - 32px);padding:14px 22px;box-shadow:0 8px 35px var(--bg-153e352b,#153e352b);background:var(--bg-193e35,#193e35);color:var(--fg-ffffff,#fff);border-radius:14px;z-index:30;font-size:13px;text-align:center;line-height:1.5}#toast.error{background:var(--bg-823b31,#823b31)}.boot{padding:80px;text-align:center;color:var(--muted)}dialog{border:0;border-radius:22px;padding:28px;max-width:520px;width:calc(100% - 28px);max-height:90dvh;color:var(--ink);box-shadow:0 28px 90px var(--bg-112d3140,#112d3140)}dialog::backdrop{background:var(--bg-132f2b70,#132f2b70);backdrop-filter:blur(3px)}.dialog-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.dialog-head h2{margin:0;font-size:22px}.dialog-head button{padding:7px;min-width:40px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}label{display:block;font-size:12px;font-weight:600;margin-bottom:16px}label input,label select,label textarea{display:block;width:100%;margin-top:7px;font-weight:400}.form-grid label{margin-bottom:0}.full{grid-column:1/-1}textarea{min-height:75px;resize:vertical}.form-help{font-size:11px;color:var(--muted);line-height:1.5;margin:12px 0 20px}.form-error{font-size:12px;color:var(--red);line-height:1.5;margin-bottom:14px}.form-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:22px}.check{display:flex;align-items:center;gap:8px;font-weight:400}.check input{width:20px;height:20px;margin:0;accent-color:var(--green)}.login{min-height:100dvh;display:grid;grid-template-columns:1fr 1fr}.login-art{background:var(--bg-ink,var(--ink));padding:60px;color:var(--fg-ffffff,#fff);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative}.login-art .brand-symbol{background:var(--bg-lime,var(--lime));color:var(--ink)}.login-art h1{font-size:clamp(38px,5vw,70px);line-height:1.05;letter-spacing:-3px;max-width:520px;margin:50px 0 25px}.login-art p{color:var(--fg-d4ddcd,#d4ddcd);font-size:16px;max-width:400px}.art-rings{height:160px;position:relative;margin:30px 0}.art-rings:before,.art-rings:after{content:"";position:absolute;height:180px;width:180px;border-radius:50%;border:1px solid var(--bg-91ad7c,#91ad7c);left:40px;top:0;box-shadow:0 0 0 25px var(--bg-365844,#365844),0 0 0 26px var(--bg-698567,#698567)}.art-rings:after{left:170px;box-shadow:none;background:var(--bg-dcedb324,#dcedb324)}.login-panel{display:grid;place-items:center;padding:30px}.login-form{max-width:350px;width:100%}.login-form h2{font-size:28px;margin:22px 0 10px;letter-spacing:-1px}.login-form>p{font-size:13px;margin-bottom:28px;color:var(--muted)}.login-form button[type=submit]{width:100%}.login-foot{font-size:11px;text-align:center;margin-top:25px;color:var(--muted)}.login-art .eyebrow{color:var(--fg-d4ddcd,#d4ddcd)}.login .mobile-brand{margin-bottom:30px}.restore-counts{font-size:13px;line-height:1.8}.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}@media(min-width:1600px){.main{margin-right:auto}}@media(max-width:1200px){.main{padding:28px}.sidebar{width:200px;padding:30px 16px}.main{margin-left:200px}.chart-area{gap:12px}.donut{width:120px;height:120px}.heading{align-items:flex-start;flex-wrap:wrap}.metric{padding:16px;gap:10px}.metric-value{font-size:21px}.card{padding:20px}.item-actions{flex-wrap:wrap}}@media(max-width:950px){.hero-grid{grid-template-columns:1fr 1fr}.content-grid{grid-template-columns:1fr}.chart-area{gap:28px}.donut{width:150px;height:150px}.actual-grid{gap:10px}.metric{display:block}.metric-icon{margin-bottom:12px}.budget-item{flex-wrap:wrap}.item-actions{margin-left:auto}.settings-grid{grid-template-columns:1fr}.login-art{padding:40px}.login-art h1{font-size:48px}}@media(max-width:700px){.sidebar{inset:auto 0 0;width:100%;height:calc(72px + env(safe-area-inset-bottom));padding:6px 8px calc(6px + env(safe-area-inset-bottom));border:0;border-top:1px solid var(--bg-line,var(--line));background:var(--bg-fffffff5,#fffffff5);backdrop-filter:blur(12px)}.sidebar .brand,.nav-label,.sidebar-foot,.nav .desktop-only{display:none}.nav{flex-direction:row;justify-content:space-around;gap:2px}.nav button{flex:1;flex-direction:column;gap:5px;padding:8px 2px;font-size:10px;border-radius:12px;min-height:58px}.nav button.active{background:var(--bg-soft,var(--soft));color:var(--ink)}.nav svg{height:21px;width:21px}.main{margin:0;padding:calc(20px + env(safe-area-inset-top)) max(18px,env(safe-area-inset-right)) calc(100px + env(safe-area-inset-bottom)) max(18px,env(safe-area-inset-left))}.topbar{padding-bottom:17px;margin-bottom:24px}.topbar-left{display:none}.mobile-brand{display:flex;font-size:21px}.mobile-brand .brand-symbol{width:32px;height:32px;border-radius:10px}.account span:not(.avatar){display:none}.account{gap:3px}.account button{min-width:40px;padding:9px}.heading{gap:20px;margin-bottom:22px}h1{font-size:29px}.heading p{font-size:12px}.heading-actions{width:100%;justify-content:space-between;gap:8px}.heading-actions>.primary{font-size:12px;padding:10px 12px}.month-picker input{width:135px;font-size:12px}.hero-grid{grid-template-columns:1fr;gap:14px;margin-bottom:14px}.balance{padding:24px;min-height:210px}.balance-value{font-size:43px}.balance-footer{margin-top:22px}.budget-summary{padding:22px}.actual-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:22px}.metric{padding:13px 9px;border-radius:14px}.metric-icon{width:34px;height:34px;border-radius:10px;margin-bottom:12px}.metric-icon svg{width:18px}.metric-label{font-size:10px;line-height:1.4;min-height:28px}.metric-value{font-size:clamp(13px,4.3vw,22px);letter-spacing:-.6px;overflow-wrap:anywhere}.metric small{font-size:9px}.content-grid{gap:14px;margin-bottom:14px}.card{padding:20px;border-radius:16px}h2{font-size:16px}.chart-area{gap:18px}.donut{width:118px;height:118px}.legend-item{font-size:10px}.legend-item strong{font-size:10px}.progress-row{gap:20px}.progress-row .amount{font-size:20px}.footer{flex-direction:column;font-size:10px;gap:5px}.budget-item{padding:17px;gap:12px}.budget-item .item-symbol{min-width:38px;height:38px}.item-main h3{font-size:13px}.item-end{width:100%;text-align:left;margin-left:50px}.item-end strong{font-size:21px}.item-end small{font-size:11px}.budget-item .item-actions{width:100%;padding-top:8px;justify-content:flex-end;border-top:1px solid var(--bg-line,var(--line))}.movement{grid-template-columns:34px minmax(0,1fr) auto;gap:9px}.movement .item-symbol{min-width:32px;height:32px}.movement .item-actions{grid-column:2/-1;justify-content:flex-end}.movement .money{font-size:12px}.movement strong{font-size:12px}.toolbar select{flex:1;max-width:none;min-width:100px;font-size:12px}.toolbar input{width:100%;flex-basis:100%}.saving-detail{gap:8px}.saving-detail strong{font-size:17px}.saving-detail small{font-size:10px}#toast{bottom:calc(88px + env(safe-area-inset-bottom));width:max-content}.login{display:block;background:var(--bg-paper,var(--paper))}.login-art{display:none}.login-panel{min-height:100dvh;padding:32px}.login .mobile-brand{display:flex}.login-form h2{font-size:32px}dialog{padding:22px}.form-grid{gap:14px}.form-grid .full{grid-column:1/-1}.form-actions button{flex:1}.offline{font-size:11px}}@media(prefers-reduced-motion:no-preference){button{transition:background .15s,opacity .15s}.card,.balance{animation:appear .25s ease-out}@keyframes appear{from{opacity:.6;transform:translateY(4px)}to{opacity:1;transform:none}}}

.login-foot svg{width:14px;height:14px;vertical-align:middle;margin-right:4px}.balance> *{position:relative;z-index:1}.balance:after{opacity:.5}
@media(max-width:380px){.heading-actions{flex-wrap:wrap}.heading-actions>.primary{flex:1}.chart-area{gap:10px}.donut{width:100px;height:100px}}

/* Monthly savings goal: feedback only after the server confirms a change. */
.savings-goal{display:grid;grid-template-columns:180px minmax(0,1fr);align-items:center;gap:32px;margin-bottom:22px;background:linear-gradient(120deg,var(--bg-f0f4e8,#f0f4e8),var(--bg-ffffff,#fff) 65%);padding:30px;overflow:hidden}
.goal-content{min-width:0}.goal-content h2{font-size:22px;margin-top:8px}.goal-content .eyebrow{font-size:9px;letter-spacing:1.6px}.goal-content .section-top{align-items:flex-start}.goal-content .section-top button{font-size:12px;flex-shrink:0}.goal-amount{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:18px 0 14px}.goal-amount strong{font-size:32px;letter-spacing:-1px;overflow-wrap:anywhere}.goal-amount>span{color:var(--muted);font-size:14px}.goal-track{height:9px;background:var(--bg-e5ebde,#e5ebde);border-radius:10px;overflow:hidden}.goal-track>span{display:block;height:100%;background:var(--bg-73955a,#73955a);border-radius:10px}.goal-message{font-size:13px;color:var(--fg-586d5d,#586d5d);margin:12px 0 16px}.goal-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.goal-actions button{font-size:12px}.goal-content>small{font-size:10px;line-height:1.6;display:block}.goal-feedback{font-size:13px;color:var(--fg-31583b,#31583b);line-height:1.6}.has-feedback .goal-feedback{padding:10px 12px;border-radius:10px;background:var(--bg-e6efdb,#e6efdb);margin:0 0 15px}.goal-reached .goal-track>span{background:var(--bg-456f3d,#456f3d)}.goal-visual{position:relative;width:154px;height:200px;justify-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:12px}.jar-lid{width:100px;height:13px;border:2px solid var(--bg-94a886,#94a886);background:var(--bg-e3ead7,#e3ead7);border-radius:6px;margin-bottom:4px}.saving-jar{position:relative;width:132px;height:151px;border:2px solid var(--bg-9eaf92,#9eaf92);border-radius:18px 18px 30px 30px;overflow:hidden;background:var(--bg-fafcf5,#fafcf5);box-shadow:inset 8px 0 0 var(--bg-ffffff80,#ffffff80)}.jar-fill{position:absolute;inset:0;background:var(--bg-c4db9e,#c4db9e);transform:translateY(100%)}.jar-fill:before{content:"";position:absolute;top:0;width:100%;height:8px;background:var(--bg-94b768,#94b768);border-radius:50%}.jar-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;color:var(--fg-284c35,#284c35);gap:5px}.jar-label svg{width:27px;height:27px}.jar-label strong{font-size:23px;letter-spacing:-.8px}.jar-label>span{font-size:10px}.jar-mark{position:absolute;left:0;width:13px;height:1px;background:var(--bg-9eaf92,#9eaf92)}.jar-mark-one{top:33%}.jar-mark-two{top:66%}.jar-shadow{width:113px;height:7px;border-radius:50%;background:var(--bg-dce4d2,#dce4d2);margin-top:9px}.savings-coin{position:absolute;top:0;left:50%;width:29px;height:29px;display:grid;place-items:center;border-radius:50%;background:var(--bg-e4cd8b,#e4cd8b);color:var(--fg-6e581d,#6e581d);border:2px solid var(--bg-c9ab62,#c9ab62);font-weight:700;z-index:2;pointer-events:none}.goal-particles{position:absolute;top:45%;left:50%;pointer-events:none}.goal-confetti{position:absolute;width:7px;height:12px;border-radius:2px;background:var(--bg-a7c575,#a7c575);pointer-events:none}.goal-confetti:nth-child(3n){background:var(--bg-d6b45f,#d6b45f)}.goal-confetti:nth-child(3n + 1){background:var(--bg-4e7654,#4e7654)}.compact .goal-visual{transform:scale(.88)}
@media(max-width:700px){.savings-goal{grid-template-columns:1fr;padding:22px;gap:8px}.goal-visual{height:166px;transform:scale(.85);margin:-8px 0}.compact .goal-visual{transform:scale(.8)}.goal-content h2{font-size:19px}.goal-amount strong{font-size:29px}.goal-amount>span{font-size:12px}.goal-content .section-top{gap:6px}.goal-content .section-top button{font-size:11px;padding:9px}.goal-content .eyebrow{font-size:8px}.goal-actions{display:grid;grid-template-columns:1fr 1fr}.goal-actions button{font-size:11px;padding:10px 8px}.goal-actions .subtle{grid-column:1/-1}.goal-message{font-size:12px}.goal-content>small{font-size:9px}}
@media(prefers-reduced-motion:reduce){.savings-goal *{animation:none!important;transition:none!important}}

.goals-section{margin:0 0 24px}.goals-heading{margin-bottom:16px}.goals-heading .card-sub{margin:6px 0 0}.goals-heading button{font-size:12px;flex-shrink:0}.goals-heading button:disabled{cursor:default;background:var(--bg-e8ecdf,#e8ecdf);color:var(--fg-64735f,#64735f);opacity:1}.goals-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.goals-grid .savings-goal{display:flex;flex-direction:column;gap:4px;padding:24px;margin:0}.goals-grid .goal-content{width:100%}.goals-grid .goal-content .section-top{flex-wrap:wrap}.goals-grid .goal-content h2{font-size:21px;overflow-wrap:anywhere}.goals-grid .goal-visual{height:152px;transform:scale(.8);margin:-15px 0 0}.goals-grid .goal-amount strong{font-size:28px}.goals-grid .goal-amount{gap:6px}.goals-grid .goal-actions button{font-size:11px}.goals-grid .savings-goal:only-child{grid-column:1/-1;display:grid;grid-template-columns:160px minmax(0,1fr);gap:24px}.goals-grid .compact .goal-visual{display:none}.goals-grid .savings-goal.compact:only-child{display:flex}.goals-grid .goal-actions{margin-top:14px}.goals-grid .goal-track{margin-top:auto}
@media(max-width:950px){.goals-grid{grid-template-columns:1fr}.goals-grid .savings-goal:only-child{display:flex}.goals-heading{align-items:flex-start}}
@media(max-width:380px){.goals-heading{flex-wrap:wrap}.goals-grid .savings-goal{padding:18px}}
[hidden]{display:none!important}

/* A simple, warm face: a withdrawal is a friendly wink, never a sad expression. */
.jar-face{position:relative;width:52px;height:33px;margin:2px 0 5px;transform-origin:50% 65%}.jar-eye{position:absolute;top:3px;width:7px;height:11px;border-radius:50%;background:var(--bg-244731,#244731);transform-origin:center}.jar-eye-left{left:12px}.jar-eye-right{right:12px}.jar-smile{position:absolute;left:19px;bottom:3px;width:16px;height:9px;border:2px solid var(--bg-244731,#244731);border-top:0;border-radius:0 0 14px 14px;transform-origin:center}.jar-cheek{position:absolute;top:16px;width:8px;height:4px;background:var(--bg-d6ac79,#d6ac79);border-radius:50%;opacity:.7}.jar-cheek-left{left:5px}.jar-cheek-right{right:5px}.saving-jar{transform-origin:50% 95%}.jar-lid{transform-origin:center}.jar-shadow{transform-origin:center}.savings-coin{box-shadow:inset 0 0 0 2px var(--bg-f3e3b2,#f3e3b2),0 2px 5px var(--bg-a58f4722,#a58f4722);font-size:15px}.saving-spark{position:absolute;font-style:normal;font-size:17px;line-height:1;color:var(--fg-99ad58,#99ad58);pointer-events:none}.saving-spark:nth-child(3n){color:var(--fg-bf9a42,#bf9a42)}.saving-spark:nth-child(3n + 1){color:var(--fg-477653,#477653)}.goal-particles{z-index:3}.jar-label{gap:3px}

/* Private account access */
.password-field{position:relative;margin-top:-9px;margin-bottom:18px}.password-field input{width:100%;padding-right:85px}.password-toggle{position:absolute;right:5px;top:5px;bottom:5px;padding:6px 12px;font-size:12px;background:transparent;color:var(--ink)}.access-switch{display:block;width:100%;margin-top:16px;background:transparent;color:var(--ink);font-size:13px;text-decoration:underline;text-underline-offset:4px}.login-form #password-help{font-size:12px;margin:-8px 0 18px}.login-form #login-error{color:var(--red);margin:0 0 16px}.login-form h2{line-height:1.15}.login-form input:focus-visible,.login-form button:focus-visible{outline:3px solid var(--bg-879d64,#879d64);outline-offset:3px}

.login-motto{font-size:14px;line-height:1.55;color:var(--ink);font-weight:600;max-width:350px}
.admin-link{display:flex;align-items:center;gap:10px;margin:0 0 16px;padding:12px 14px;border-radius:12px;font-size:13px;font-weight:600;text-decoration:none;color:var(--green);background:var(--bg-soft,var(--soft))}.admin-link svg{width:18px;height:18px}
.admin-body{background:var(--bg-paper,var(--paper))}.admin-top{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:24px 32px;border-bottom:1px solid var(--bg-line,var(--line));background:var(--bg-fdfdf8,#fdfdf8)}.admin-top .brand{text-decoration:none;color:var(--ink)}.admin-top .brand-symbol{font-size:16px}.admin-back{margin-left:auto;font-weight:600;font-size:14px}
.admin-tabs{display:flex;gap:8px;padding:20px 32px 0}.admin-tabs button{border:1px solid var(--bg-line,var(--line));background:var(--bg-ffffff,#fff)}.admin-tabs button[aria-selected=true]{background:var(--bg-ink,var(--ink));color:var(--fg-ffffff,#fff);border-color:var(--bg-ink,var(--ink))}
.admin-main{padding:20px 32px 48px;display:flex;flex-direction:column;gap:18px;max-width:1200px}
.admin-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}.admin-stat{display:flex;flex-direction:column;gap:6px}.admin-stat strong{font-size:26px;letter-spacing:-.8px}
.admin-table-wrap{overflow-x:auto}.admin-table{width:100%;border-collapse:collapse;font-size:14px}.admin-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--bg-line,var(--line));white-space:nowrap}.admin-table td{padding:12px;border-bottom:1px solid var(--bg-line,var(--line));white-space:nowrap}
.admin-pill{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:99px;background:var(--bg-lime,var(--lime));font-size:11px;font-weight:700}
.admin-note{padding:14px 18px;border-radius:14px;background:var(--bg-fbf3e3,#fbf3e3);color:var(--fg-6b5122,#6b5122);font-size:14px}.admin-button{display:inline-block;padding:12px 18px;border-radius:12px;text-decoration:none;font-weight:600}
@media (max-width:640px){.admin-top,.admin-tabs,.admin-main{padding-left:16px;padding-right:16px}}
.nav .mobile-only{display:none}
.fab{position:fixed;right:28px;bottom:28px;z-index:4;width:60px;height:60px;border-radius:20px;background:var(--bg-ink,var(--ink));color:var(--lime);display:flex;align-items:center;justify-content:center;box-shadow:0 14px 34px var(--bg-15362d55,#15362d55)}.fab svg{width:26px;height:26px}
.balance .balance-split{color:var(--lime);font-weight:600;margin-bottom:6px}
.pay-card{display:flex;flex-direction:column;gap:14px;margin-bottom:18px}.pay-card small{display:block;color:var(--muted)}.pay-card strong{font-size:18px}.pay-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.pay-head h2{margin:0}.pay-head>div{text-align:right}
.pay-halves{display:grid;grid-template-columns:1fr 1fr;gap:14px}.pay-half{background:var(--bg-soft,var(--soft));border-radius:14px;padding:14px;display:flex;flex-direction:column;gap:6px}.pay-row{display:flex;justify-content:space-between;gap:8px;font-size:13px}.pay-row strong{font-size:14px}.pay-row.total{border-top:1px solid var(--bg-line,var(--line));padding-top:6px}
.trends{display:flex;flex-direction:column;gap:18px}.trend-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.trend-stats div{background:var(--bg-soft,var(--soft));border-radius:14px;padding:14px}.trend-stats small{display:block}.trend-stats strong{font-size:20px;letter-spacing:-.5px}
.trend-chart{width:100%;height:auto}.tr-grid{stroke:var(--bg-line,var(--line))}.tr-income{fill:var(--green)}.tr-expense{fill:#c9917f}.tr-label{font-size:12px;fill:var(--muted)}
.trend-legend{display:flex;gap:18px;font-size:13px;color:var(--muted)}.tr-dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px}.tr-dot.income{background:var(--bg-green,var(--green))}.tr-dot.expense{background:var(--bg-c9917f,#c9917f)}
.trend-table-wrap{overflow-x:auto}.trend-table{width:100%;border-collapse:collapse;font-size:14px}.trend-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);padding:10px 8px;border-bottom:1px solid var(--bg-line,var(--line));white-space:nowrap}.trend-table td{padding:10px 8px;border-bottom:1px solid var(--bg-line,var(--line));white-space:nowrap}.trend-subtitle{margin:6px 0 0}
.more-list{display:flex;flex-direction:column;gap:10px}.more-list .secondary{justify-content:flex-start;width:100%;text-align:center}
.quick-kind{display:grid;grid-template-columns:1fr 1fr;gap:6px;background:var(--bg-soft,var(--soft));padding:5px;border-radius:14px;margin-bottom:16px}.quick-kind label{margin:0}.quick-kind input{position:absolute;opacity:0;pointer-events:none}.quick-kind span{display:block;text-align:center;padding:11px;border-radius:10px;font-weight:650;cursor:pointer;color:var(--muted)}.quick-kind input:checked+span{background:var(--bg-ffffff,#fff);color:var(--ink);box-shadow:0 2px 8px var(--bg-15362d1f,#15362d1f)}.quick-kind input:focus-visible+span{outline:3px solid var(--bg-7fa348,#7fa348)}
.quick-amount{display:flex;align-items:baseline;gap:10px;border-bottom:2px solid var(--bg-line,var(--line));margin-bottom:18px;padding-bottom:6px}.quick-amount:focus-within{border-color:var(--bg-green,var(--green))}.quick-currency{font-weight:700;color:var(--muted);font-size:15px}.quick-amount input{border:0!important;box-shadow:none!important;font-size:38px;font-weight:700;letter-spacing:-1px;padding:4px 0;width:100%;background:transparent;outline:none}
.quick-chips{display:flex;flex-wrap:wrap;gap:8px;margin:-4px 0 14px}.chip{min-height:34px;padding:6px 12px;border-radius:99px;border:1px solid var(--bg-line,var(--line));background:var(--bg-ffffff,#fff);font-size:13px;font-weight:600}.chip:hover{background:var(--bg-soft,var(--soft))}
.quick-more summary{cursor:pointer;font-weight:650;font-size:14px;color:var(--green);padding:6px 0;margin-bottom:10px}
.onboarding{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:28px 16px}.onboarding-card{max-width:560px;width:100%;display:flex;flex-direction:column;gap:16px}.onboarding-card h1{font-size:28px;margin:8px 0 0}.onboarding-card fieldset{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.onboarding-card legend{font-weight:700;margin-bottom:8px}
.choice{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--bg-line,var(--line));border-radius:14px;padding:12px 14px;cursor:pointer;font-weight:400}.choice:has(input:checked){border-color:var(--bg-green,var(--green));background:var(--bg-soft,var(--soft))}.choice small{display:block;color:var(--muted)}.choice input{margin-top:4px}
.pay-days{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:700px){.nav .mobile-only{display:flex}.fab{right:18px;bottom:calc(88px + env(safe-area-inset-bottom));width:56px;height:56px}.pay-halves,.trend-stats{grid-template-columns:1fr}.pay-head>div{text-align:left}}
.choice input{width:20px;height:20px;min-height:0;flex:none;margin:2px 0 0;padding:0;accent-color:var(--green)}.choice span{flex:1}
.quick-kind label{position:relative}.quick-kind input{width:1px;height:1px;min-height:0;padding:0;margin:0}

/* theme-vars v1 */:root[data-theme=dark]{color-scheme:dark;--ink:#e6edf7;--muted:#93a4bd;--green:#34d399;--lime:#a7f3d0;--red:#f87171;--gold:#f5c451;--paper:#0a0f1a;--white:#121b2b;--soft:#17233a;--line:#233149;--bg-paper:#0a0f1a;--bg-white:#121b2b;--bg-soft:#17233a;--bg-line:#233149;--bg-ink:#14305a;--bg-green:#047857;--bg-lime:#1d3b34;--bg-muted:#4b5b72;--bg-red:#7f1d1d;--bg-gold:#8a6a22;--fg-284c35:#a8d1b7;--fg-31583b:#aad0b4;--fg-477653:#cce0d1;--fg-586d5d:#d2dbd4;--fg-64735f:#d4dad2;--fg-67776e:#d3d9d6;--fg-6b5122:#dfc79a;--fg-6e581d:#e3ce96;--fg-795b2b:#dcc49d;--fg-7c7294:#d4d1dc;--fg-8a7247:#d2c3a7;--fg-99ad58:#c9d3a6;--fg-bf9a42:#ddca9c;--fg-cadabd:#cadabd;--fg-d1dfd2:#d1dfd2;--fg-d4ddcd:#d4ddcd;--fg-dcebbb:#dcebbb;--fg-ffc9b9:#ffc9b9;--fg-ffffff:#ffffff;--bg-112d3140:#0f333940;--bg-132f2b70:#11363170;--bg-15362d1f:#113a2f1f;--bg-15362d55:#113a2f55;--bg-153e352b:#1142372b;--bg-163d30:#124131;--bg-193e35:#154237;--bg-244731:#1f4c30;--bg-254b40:#1f5142;--bg-315d47:#2a6447;--bg-365844:#2f5f43;--bg-456f3d:#386a2f;--bg-466157:#386152;--bg-4e7654:#35643c;--bg-698567:#3d5e3b;--bg-718b3f:#587128;--bg-73955a:#486732;--bg-7e9a65:#4b6435;--bg-7fa348:#547227;--bg-823b31:#772d22;--bg-82521e:#824f17;--bg-879d64:#526534;--bg-91ad7c:#496633;--bg-94a886:#496138;--bg-94b768:#506f2a;--bg-9eaf92:#4564a0;--bg-a58f4722:#73612622;--bg-a7c575:#5c7237;--bg-c4db9e:#4b5d2d;--bg-c9917f:#6e4335;--bg-c9ab62:#795f20;--bg-cfd8c6:#2c3f66;--bg-d6ac79:#6b5234;--bg-d6b45f:#746338;--bg-dce3d6:#243555;--bg-dce4d2:#253656;--bg-dcedb324:#44502624;--bg-e1e6d5:#243453;--bg-e3ead7:#384521;--bg-e4cd8b:#60542e;--bg-e5ebde:#202e4a;--bg-e6efdb:#324220;--bg-e7eadf:#202e4a;--bg-e8ecdf:#1f2e49;--bg-e9eddf:#1f2d49;--bg-ebdcc0:#4c3e25;--bg-eceaf5:#1a263d;--bg-edf2e5:#1c2942;--bg-eff1e9:#1b2840;--bg-f0f4e8:#1b273e;--bg-f3e3b2:#4e4426;--bg-f5eee2:#1c2942;--bg-f7f8f3:#172135;--bg-f9fbf3:#162033;--bg-fafcf5:#151f31;--bg-fbf3e3:#1a263d;--bg-fdfdf8:#141d2f;--bg-fff8e8:#182338;--bg-ffffff:#121a29;--bg-ffffff80:#121a2980;--bg-fffffff5:#121a29f5;}
.tag-review{display:inline-block;padding:1px 7px;border-radius:99px;background:var(--bg-gold,#f3e3b2);color:var(--fg-6b5122,#6b5122);font-size:10px;font-weight:700;vertical-align:1px}
:root[data-theme=dark] .tag-review{background:#3b2f12;color:var(--gold)}
.fx-orig{display:block;font-size:11px;font-weight:600;color:var(--muted);text-align:right}
.quick-amount select.quick-currency{width:auto;min-width:76px;border:0;background:var(--bg-soft,var(--soft));border-radius:10px;padding:6px 8px;font-weight:700;color:var(--ink);font-size:14px;min-height:0}
.fx-box{margin:-8px 0 16px;padding:12px 14px;border-radius:14px;background:var(--bg-soft,var(--soft))}.fx-box small{display:block;margin-top:6px;color:var(--muted);line-height:1.5}
.cat-intro{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:18px}.cat-intro h2{margin-bottom:4px}.cat-actions{display:flex;gap:10px;flex-wrap:wrap}
.trends+section,.cat-intro~.card{margin-bottom:18px}
.cat-list{display:flex;flex-direction:column}.cat-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--bg-line,var(--line))}.cat-row:last-child{border-bottom:0}.cat-row p{margin:2px 0 0;font-size:12px;color:var(--muted)}.cat-row select{max-width:52%;min-width:150px}
.cat-group{border-bottom:1px solid var(--bg-line,var(--line))}.cat-group summary{display:grid;grid-template-columns:1fr auto;gap:6px 12px;align-items:center;padding:12px 0;cursor:pointer;list-style:none}.cat-group summary::-webkit-details-marker{display:none}.cat-group progress{grid-column:1/-1;width:100%;height:6px}.cat-group .cat-list{padding:0 0 10px 12px}
.cat-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.chip.archived{opacity:.5;text-decoration:line-through}.chip.add{display:inline-flex;align-items:center;gap:4px;border-style:dashed}.chip.add svg{width:14px;height:14px}
.chip{background:var(--bg-white,#fff);color:var(--ink)}
@media(max-width:700px){.cat-row{flex-direction:column;align-items:stretch}.cat-row select{max-width:none}}
.theme-options{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.tour{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:20;width:min(420px,calc(100% - 32px));background:var(--bg-white,#fff);color:var(--ink);border-radius:20px;padding:20px 22px;box-shadow:0 24px 70px #0b1f1a59;border:1px solid var(--bg-line,var(--line))}
.tour h2{margin:4px 0 6px}.tour p{margin:0 0 14px;color:var(--muted);font-size:14px}.tour-step{font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--green)}.tour-actions{display:flex;justify-content:space-between;gap:10px}
.tour-focus{outline:3px solid var(--green)!important;outline-offset:4px;border-radius:16px;animation:tour-pulse 1.6s ease-in-out infinite}
@keyframes tour-pulse{50%{outline-offset:8px}}@media(prefers-reduced-motion:reduce){.tour-focus{animation:none}}
@media(max-width:700px){.tour{bottom:calc(160px + env(safe-area-inset-bottom))}}
.tour-nav{display:flex;gap:8px}
.push-card{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;align-items:center;margin-bottom:18px}.push-card h2{margin:0 0 4px}.push-actions{grid-column:1/-1;display:flex;gap:10px;flex-wrap:wrap}.push-card.on .metric-icon{background:var(--bg-lime,var(--lime))}
.bills-alert{margin-bottom:18px;border-color:var(--gold)}.bills-alert h2{display:flex;align-items:center;gap:8px;margin:0}.bills-alert h2 svg{width:20px;height:20px;color:var(--gold)}
.bill-list{display:flex;flex-direction:column}.bill-row{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;padding:14px 0;border-bottom:1px solid var(--bg-line,var(--line))}.bill-row:last-child{border-bottom:0}.bill-row.inactive{opacity:.55}
.bill-day{width:48px;height:52px;border-radius:14px;background:var(--bg-soft,var(--soft));display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}.bill-day strong{font-size:20px}.bill-day small{font-size:10px;color:var(--muted)}
.bill-info p{margin:2px 0 4px;font-size:13px;color:var(--muted)}.bill-status{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;background:var(--bg-soft,var(--soft));color:var(--muted)}.bill-status.paid{background:var(--bg-lime,var(--lime));color:var(--green)}.bill-status.soon{background:var(--bg-gold,#f3e3b2);color:var(--fg-6b5122,#6b5122)}.bill-status.late{background:var(--bg-red,#f6d5d0);color:var(--red)}
:root[data-theme=dark] .bill-status.soon{background:#3b2f12;color:var(--gold)}:root[data-theme=dark] .bill-status.late{background:#3a1717}:root[data-theme=dark] .bill-status.paid{background:#123326;color:var(--green)}
.bill-actions{display:flex;gap:6px;align-items:center}.access-switch.danger{color:var(--red)}
@media(max-width:700px){.bill-row{grid-template-columns:auto 1fr}.bill-actions{grid-column:1/-1;justify-content:flex-end}}
/* Marca: bolsillo con bandera. Tile verde en claro, azul noche en oscuro. */
:root{--logo-peak:#193e35;--logo-line:#f6f5ef;--logo-flag:#cfe6a8;--logo-alt-bg:#f6f5ef;--logo-alt-line:#193e35}
:root[data-theme=dark]{--logo-peak:#14305a;--logo-line:#eef3fb;--logo-flag:#a7f3d0;--logo-alt-bg:#eef3fb;--logo-alt-line:#1b3563;--bg-ink:#1b3563}
.brand{font-weight:800;letter-spacing:-.04em}
.brand-symbol{color:var(--logo-line)}.brand-symbol svg{width:28px;height:28px}.mobile-brand .brand-symbol svg{width:24px;height:24px}
.logo-mark .lm-line{fill:none;stroke:currentColor;stroke-width:4.4;stroke-linecap:round;stroke-linejoin:round}
.logo-mark .lm-flag{fill:var(--logo-flag);stroke:currentColor;stroke-width:4.4;stroke-linejoin:round}
.login-art .brand-symbol{background:var(--logo-alt-bg);color:var(--logo-alt-line)}
.art-logo{margin:28px 0;color:#ffffff3d}.art-logo svg{width:min(190px,40vw);height:auto;display:block}.art-logo .lm-line,.art-logo .lm-flag{stroke-width:3}
.brand-symbol{width:40px;height:40px}.brand-symbol svg{width:34px;height:34px}.mobile-brand .brand-symbol{width:34px;height:34px}.mobile-brand .brand-symbol svg{width:29px;height:29px}
.brand-symbol .lm-line,.brand-symbol .lm-flag{stroke-width:5}
button.avatar{padding:0;border:0;cursor:pointer;overflow:hidden;min-height:0}
.avatar img{width:100%;height:100%;object-fit:cover;border-radius:inherit;display:block}
.avatar-lg{width:52px!important;height:52px!important;font-size:20px;margin-bottom:12px}
.avatar-xl{width:132px!important;height:132px!important;font-size:44px;border-radius:50%;overflow:hidden}
.avatar-edit{display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center}
.file-pick{position:relative;display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:12px;border:1px solid var(--bg-line,var(--line));font-weight:600;cursor:pointer}
.file-pick svg{width:18px;height:18px}.file-pick input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}
.file-pick:focus-within{outline:3px solid #7fa348;outline-offset:3px}
dialog{background:var(--bg-white,#fff);color:var(--ink)}dialog::backdrop{background:#0b1f1a66}
.recovery-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:clamp(18px,5vw,24px);font-weight:700;letter-spacing:.08em;text-align:center;padding:18px 12px;border-radius:14px;background:var(--bg-soft,var(--soft));border:1px dashed var(--bg-line,var(--line));user-select:all;word-break:break-all}
.theme-options.two{grid-template-columns:1fr 1fr}.access-switch.forgot{margin-top:6px}
.objectives-section{margin-bottom:22px}.objective-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.objective progress,.fx-section progress{width:100%;height:10px;margin:8px 0}.objective.reached{border-color:var(--green)}.objective.inactive{opacity:.55}
.fx-section{margin-bottom:22px}.fx-list{display:flex;flex-direction:column}.fx-row{display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--bg-line,var(--line))}.fx-row p{margin:2px 0 0;font-size:13px;color:var(--muted)}
.fx-value{text-align:right}.fx-value small{display:block;font-size:11px;font-weight:600}.fx-value .gain{color:var(--green)}.fx-value .loss{color:var(--red)}
.fx-total{display:flex;justify-content:space-between;padding-top:12px;font-size:15px}
.fx-summary{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}.fx-summary span{display:flex;align-items:center;gap:8px;color:var(--muted)}.fx-summary span svg{width:18px;height:18px}.fx-summary strong{font-size:20px;margin-right:auto}
.form-help.full,.form-grid .full{grid-column:1/-1}
.csv-preview{overflow-x:auto;margin-top:8px}.csv-preview table{width:100%;border-collapse:collapse;font-size:13px}.csv-preview th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);padding:6px;border-bottom:1px solid var(--bg-line,var(--line))}.csv-preview td{padding:6px;border-bottom:1px solid var(--bg-line,var(--line));white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis}
#csv-map{margin-top:16px}
.danger-fill{background:var(--red)!important;color:#fff!important}.secondary.danger{color:var(--red)}
.login-more{color:inherit;text-decoration:underline;text-underline-offset:3px}
.space-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.chip.active{background:var(--bg-ink,var(--ink));color:#fff;border-color:transparent}
.space-head{margin-bottom:18px}.space-head h2{margin:2px 0}.member-list{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.member{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 5px;border-radius:99px;background:var(--bg-soft,var(--soft));font-size:13px;font-weight:600}.member .avatar{width:26px;height:26px;font-size:11px}.member small{color:var(--muted);font-weight:600}
.space-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:18px}.space-status{font-size:24px;letter-spacing:-.5px;margin:6px 0 12px}
.transfer{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--bg-line,var(--line));flex-wrap:wrap}.transfer span{font-size:14px}
.space-totals{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:8px 0 16px}.space-totals small{display:block;color:var(--muted)}.space-totals strong{font-size:22px;letter-spacing:-.5px}
#shared-root>.card{margin-bottom:18px}
@media(max-width:760px){.space-grid{grid-template-columns:1fr}}
.loan-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.loan-toolbar .space-tabs{margin:0}
.loan{display:flex;flex-direction:column;gap:10px}.loan.done{opacity:.7}.loan-head{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center}.loan-head .avatar{width:40px;height:40px;font-size:16px}.loan-head h3{margin:0}.loan-head p{margin:2px 0 0}
.loan-amount{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;flex-wrap:wrap}.loan-amount small{display:block;color:var(--muted)}.loan-amount strong{font-size:24px;letter-spacing:-.5px}
.loan progress{width:100%;height:8px}.loan-history summary,.done-loans summary{cursor:pointer;font-weight:650;font-size:14px;color:var(--green);padding:6px 0}.done-loans{margin-top:18px}
.recovery-code.plain{font-size:15px;letter-spacing:0;font-family:inherit;font-weight:500;text-align:left}
.month-label{position:relative;display:flex;align-items:center;min-width:150px;justify-content:center;font-weight:650;font-size:14px;padding:0 6px;cursor:pointer}
.month-native{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;border:0;padding:0;min-height:0}
.month-label:focus-within{outline:3px solid #7fa348;outline-offset:2px;border-radius:10px}
.spend-card{margin-bottom:18px;background:var(--bg-soft,var(--soft));border-color:transparent}.spend-main{display:flex;justify-content:space-between;gap:18px;flex-wrap:wrap;align-items:flex-end}
.spend-value{font-size:clamp(32px,5vw,44px);font-weight:750;letter-spacing:-1.5px;line-height:1.05;margin:6px 0 6px}.spend-card p{margin:0;color:var(--muted);font-size:14px}
.spend-side{text-align:right;display:flex;flex-direction:column;gap:2px}.spend-side strong{font-size:22px;letter-spacing:-.5px}.spend-side small{color:var(--muted)}.spend-note{margin-top:10px!important;font-size:13px!important}
.spend-card.short{border-color:var(--red)}
@media(max-width:620px){.spend-side{text-align:left}}
.say-box{display:flex;gap:8px;align-items:center;background:var(--bg-soft,var(--soft));border-radius:14px;padding:4px 4px 4px 12px;margin-bottom:6px}.say-box input{border:0!important;background:transparent!important;box-shadow:none!important;flex:1;padding:10px 0;font-size:15px;outline:none}
.say-mic.listening{background:var(--red);color:#fff;animation:tour-pulse 1.2s infinite}.say-hint{font-size:12.5px;color:var(--muted);margin:0 0 14px;min-height:18px}
.insights{margin-bottom:18px}.insight-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.insight{display:grid;grid-template-columns:auto 1fr;gap:12px;padding:14px;border-radius:14px;background:var(--bg-soft,var(--soft))}
.insight p{margin:3px 0 0;font-size:13.5px;color:var(--muted)}.insight-mark{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:13px;background:var(--bg-line,var(--line))}
.insight.good .insight-mark{background:var(--bg-lime,var(--lime));color:var(--green)}.insight.warn .insight-mark{background:var(--bg-gold,#f3e3b2);color:var(--fg-6b5122,#6b5122)}
:root[data-theme=dark] .insight.warn .insight-mark{background:#3b2f12;color:var(--gold)}:root[data-theme=dark] .insight.good .insight-mark{background:#123326}
.challenge-pick{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}.challenge-preview{margin-top:12px;padding:12px 14px;border-radius:12px;background:var(--bg-soft,var(--soft));font-size:14px}
.prima-card{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:18px;border-color:var(--gold)}.prima-card h2{margin:4px 0}
.prima-plan{display:flex;flex-direction:column;gap:2px;margin:12px 0}.prima-row{display:grid;grid-template-columns:1fr 150px;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--bg-line,var(--line))}.prima-row small{display:block;color:var(--muted);font-size:12px}.prima-row.free span{text-align:right;font-weight:700}
@media(max-width:520px){.prima-row{grid-template-columns:1fr 120px}}
.pockets-card{margin-bottom:18px}.empty-pockets{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}.empty-pockets h2{margin:4px 0}
.pocket-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin:10px 0 6px}
.pocket{display:flex;align-items:center;gap:10px;text-align:left;padding:12px;border-radius:14px;background:var(--bg-soft,var(--soft));border:1px solid transparent;min-height:0}.pocket:hover{border-color:var(--bg-line,var(--line))}.pocket small{display:block;color:var(--muted);font-weight:600}.pocket strong{font-size:16px;letter-spacing:-.3px}.pocket-icon{font-size:22px}
.pocket-pick{display:flex;flex-wrap:wrap;gap:6px;margin:-4px 0 14px}.pocket-pick label{position:relative;margin:0}.pocket-pick input{position:absolute;opacity:0;width:1px;height:1px;min-height:0;padding:0;margin:0}.pocket-pick span{display:inline-block;padding:6px 12px;border-radius:99px;border:1px solid var(--bg-line,var(--line));font-size:13px;font-weight:600;cursor:pointer}.pocket-pick input:checked+span{background:var(--bg-ink,var(--ink));color:#fff;border-color:transparent}.pocket-pick input:focus-visible+span{outline:3px solid #7fa348}
.pocket-setup{display:flex;flex-direction:column;gap:8px;margin:10px 0}.pocket-setup-row{display:grid;grid-template-columns:28px 54px 1fr 130px;gap:8px;align-items:center}.pocket-setup-row .check{margin:0}.pocket-icon-input{text-align:center;padding-inline:4px}.pocket-setup-row small{color:var(--muted)}
@media(max-width:520px){.pocket-setup-row{grid-template-columns:24px 44px 1fr 100px}}

/* Datos de la cuenta y privacidad */
.consent{display:flex;align-items:flex-start;gap:10px;font-size:14px;font-weight:500;line-height:1.4;margin:12px 0}
.consent input{width:20px;height:20px;min-height:0;flex:none;margin:1px 0 0;padding:0;accent-color:var(--green,#193e35)}
.consent a{color:inherit;text-decoration:underline}
.legal{max-width:680px;margin:0 auto;padding:32px 16px 56px;line-height:1.6}
.legal h1{font-size:30px;line-height:1.2;margin:18px 0 12px}
.legal h2{font-size:18px;margin:26px 0 6px}
.legal-back{color:inherit;font-weight:600}
.link-button{background:none;border:0;padding:0;min-height:0;font:inherit;color:inherit;text-decoration:underline;cursor:pointer;display:inline}
#dialog input[type=month]{border:1px solid var(--bg-dce3d6,#dce3d6);border-radius:10px;padding:12px;background:var(--bg-ffffff,#fff);color:var(--ink);min-height:44px;max-width:100%}
.spend-main{align-items:stretch}
.spend-today{background:var(--bg-ffffff,#fff);border-radius:14px;padding:14px 18px;min-width:230px;display:flex;flex-direction:column;gap:4px;justify-content:center}
.spend-today small{font-size:11px;font-weight:700;letter-spacing:.8px;color:var(--muted)}
.spend-today strong{font-size:clamp(26px,4vw,32px);font-weight:750;letter-spacing:-1px;line-height:1.1}
.spend-today p{font-size:13px!important}
@media(max-width:620px){.spend-today{min-width:0;width:100%}}

/* Gráfica del mes */
:root{--chart-in:#2f8a62;--chart-out:#d2593f}
:root[data-theme=dark]{--chart-in:#29a873;--chart-out:#e8604c}
.month-chart .section-top{align-items:flex-start;gap:12px;flex-wrap:wrap}
.segmented{display:inline-flex;background:var(--bg-soft,var(--soft));border-radius:999px;padding:3px;gap:2px}
.segmented button{border:0;background:transparent;color:var(--muted);font-size:13px;font-weight:600;padding:7px 13px;min-height:0;border-radius:999px}
.segmented button[aria-pressed=true]{background:var(--bg-white,var(--white));color:var(--ink);box-shadow:0 1px 3px #0000001a}
.mc-totals{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:14px 0 6px}
.mc-totals small{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12px}
.mc-totals strong{display:block;font-size:clamp(17px,2.6vw,22px);letter-spacing:-.5px;margin-top:2px}
.mc-key{display:inline-block;width:10px;height:10px;border-radius:3px;flex:none}
.mc-key.in{background:var(--chart-in)}.mc-key.out{background:var(--chart-out)}
.mc-key.line{width:12px;height:2px;border-radius:2px}
.mc-wrap{position:relative;margin-top:6px}
.mc-plot{width:100%;touch-action:pan-y;border-radius:10px}
.mc-plot svg{display:block;overflow:visible}
.mc-plot:focus-visible{outline:3px solid var(--bg-7fa348,#7fa348);outline-offset:4px}
.mc-grid{stroke:var(--line);stroke-width:1;stroke-dasharray:3 4}
.mc-zero{stroke:var(--muted);stroke-width:1;opacity:.55}
.mc-today{stroke:var(--muted);stroke-width:1;stroke-dasharray:2 3;opacity:.6}
.mc-axis{fill:var(--muted);font-size:11px}
.mc-hair{stroke:var(--ink);stroke-width:1;opacity:.35;pointer-events:none}
.mc-bar.in{fill:var(--chart-in)}.mc-bar.out{fill:var(--chart-out)}
.mc-bar{transform-box:fill-box;animation:mcGrow .55s cubic-bezier(.2,.8,.2,1) both}
.mc-bar.up{transform-origin:50% 100%}.mc-bar.down{transform-origin:50% 0}
.mc-bar.still{animation:none}
@keyframes mcGrow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
.mc-line{fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.mc-line.in{stroke:var(--chart-in)}.mc-line.out{stroke:var(--chart-out)}
.mc-line.draw{animation:mcDraw .9s cubic-bezier(.3,.7,.2,1) forwards}
@keyframes mcDraw{to{stroke-dashoffset:0}}
.mc-area.in{fill:var(--chart-in);opacity:.12}.mc-area.out{fill:var(--chart-out);opacity:.12}
.mc-dot{stroke:var(--bg-white,var(--white));stroke-width:2}.mc-dot.in{fill:var(--chart-in)}.mc-dot.out{fill:var(--chart-out)}
.mc-tip{position:absolute;top:4px;z-index:3;min-width:170px;max-width:240px;background:var(--bg-white,var(--white));border:1px solid var(--line);border-radius:12px;padding:10px 12px;box-shadow:0 8px 24px #0000001f;font-size:12px;pointer-events:none}
.mc-tip-date{color:var(--muted);font-weight:600;margin-bottom:6px}
.mc-tip-row{display:flex;align-items:center;gap:7px;margin:3px 0}.mc-tip-row strong{font-size:14px}.mc-tip-row span{color:var(--muted)}
.mc-tip-item{color:var(--muted);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-table{margin-top:10px;font-size:13px}.mc-table summary{cursor:pointer;color:var(--muted)}
.mc-table table{width:100%;border-collapse:collapse;margin-top:8px}.mc-table th,.mc-table td{text-align:left;padding:6px 4px;border-bottom:1px solid var(--line)}
.mc-empty{margin-top:12px}
@media(max-width:520px){.mc-totals{gap:8px}.mc-totals strong{font-size:16px}}
@media(prefers-reduced-motion:reduce){.mc-bar,.mc-line.draw{animation:none}.mc-line.draw{stroke-dashoffset:0!important}}
.mc-tip{min-width:200px;max-width:270px}.mc-tip-row span{white-space:nowrap}
/* En el celular el detalle del día va debajo de la gráfica para no tapar las barras. */
.mc-wrap.narrow .mc-tip{position:static;max-width:none;min-width:0;margin-top:8px;box-shadow:none;background:var(--bg-soft,var(--soft));border-color:transparent}
.recurring-list{display:grid;gap:8px;margin:12px 0}
.recurring-list .check{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;margin:0}
.recurring-list input{width:20px;height:20px;min-height:0;margin:0;accent-color:var(--green)}

/* ==========================================================================
   Diseño v2 (2026-11): "Bosque y chispa".
   Claro: papel cálido, verde bosque y serif editorial. Oscuro: negro verdoso con acento lima.
   Esta capa va al final y redefine fichas (tokens) y componentes; no cambia el HTML.
   ========================================================================== */
@font-face{font-family:"Bricolage Grotesque";src:url(/fonts/bricolage.woff2) format("woff2");font-weight:200 800;font-style:normal;font-display:swap}
@font-face{font-family:"Nunito";src:url(/fonts/nunito.woff2) format("woff2");font-weight:200 1000;font-style:normal;font-display:swap}
@font-face{font-family:"Red Hat Display";src:url(/fonts/redhat-display.woff2) format("woff2");font-weight:300 900;font-style:normal;font-display:swap}
/* theme-vars v2: el modo oscuro deja el azul marino y pasa a negro verdoso */
:root[data-theme=dark]{--ink:#ebedeb;--muted:#9fa4a0;--green:#34d399;--lime:#a7f3d0;--red:#f87171;--gold:#f5c451;--paper:#070907;--white:#0f120f;--soft:#141915;--line:#1f231f;--bg-paper:#070907;--bg-white:#0f120f;--bg-soft:#141915;--bg-line:#1f231f;--bg-ink:#1c241d;--bg-green:#047857;--bg-lime:#1b312c;--bg-muted:#575b57;--bg-red:#7f1d1d;--bg-gold:#8a6a22;--fg-284c35:#a8d1b7;--fg-31583b:#aad0b4;--fg-477653:#cce0d1;--fg-586d5d:#d2dbd4;--fg-64735f:#d4dad2;--fg-67776e:#d3d9d6;--fg-6b5122:#dfc79a;--fg-6e581d:#e3ce96;--fg-795b2b:#dcc49d;--fg-7c7294:#d2d3d2;--fg-8a7247:#d2c3a7;--fg-99ad58:#c9d3a6;--fg-bf9a42:#ddca9c;--fg-cadabd:#cadabd;--fg-d1dfd2:#d1dfd2;--fg-d4ddcd:#d4ddcd;--fg-dcebbb:#dcebbb;--fg-ffc9b9:#ffc9b9;--fg-ffffff:#ffffff;--bg-112d3140:#0f333940;--bg-132f2b70:#122d2970;--bg-15362d1f:#1230281f;--bg-15362d55:#12302855;--bg-153e352b:#14372f2b;--bg-163d30:#14362a;--bg-193e35:#16372f;--bg-244731:#1e402a;--bg-254b40:#1f4439;--bg-315d47:#29553e;--bg-365844:#2c513b;--bg-456f3d:#345a2d;--bg-466157:#335247;--bg-4e7654:#315536;--bg-698567:#365035;--bg-718b3f:#587128;--bg-73955a:#40582f;--bg-7e9a65:#425531;--bg-7fa348:#547227;--bg-823b31:#772d22;--bg-82521e:#824f17;--bg-879d64:#475631;--bg-91ad7c:#405730;--bg-94a886:#405333;--bg-94b768:#506f2a;--bg-9eaf92:#5e6860;--bg-a58f4722:#73612622;--bg-a7c575:#5c7237;--bg-c4db9e:#414f2a;--bg-c9917f:#6e4335;--bg-c9ab62:#795f20;--bg-cfd8c6:#282f29;--bg-d6ac79:#6b5234;--bg-d6b45f:#746338;--bg-dce3d6:#212722;--bg-dce4d2:#222823;--bg-dcedb324:#3a442424;--bg-e1e6d5:#202621;--bg-e3ead7:#303a1f;--bg-e4cd8b:#60542e;--bg-e5ebde:#1c211d;--bg-e6efdb:#2b381e;--bg-e7eadf:#1c211d;--bg-e8ecdf:#1c211d;--bg-e9eddf:#1c211c;--bg-ebdcc0:#4c3e25;--bg-eceaf5:#171b17;--bg-edf2e5:#191d19;--bg-eff1e9:#181c19;--bg-f0f4e8:#171c18;--bg-f3e3b2:#4e4426;--bg-f5eee2:#191d19;--bg-f7f8f3:#131714;--bg-f9fbf3:#131613;--bg-fafcf5:#121512;--bg-fbf3e3:#171b17;--bg-fdfdf8:#101411;--bg-fff8e8:#151815;--bg-ffffff:#0e110f;--bg-ffffff80:#0e110f80;--bg-fffffff5:#0e110ff5}
:root{--font-ui:"Bricolage Grotesque",ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-display:"Nunito",ui-rounded,"SF Pro Rounded","Bricolage Grotesque",system-ui,sans-serif;--font-logo:"Red Hat Display","Bricolage Grotesque",system-ui,sans-serif;
  --card:#fff;--spark:#cdf56a;--accent:#2a6a50;--hero-a:#2f7257;--hero-b:#193e35;--hero-c:#0f2a24;--hero-ink:#f4f6ec;--hero-muted:#c3d3c2;
  --ring:#7fa348;--shadow-card:0 1px 2px #193e350a,0 14px 34px -22px #193e3538;--shadow-pop:0 22px 60px -18px #0f2a2359;
  --income-bg:#e3f1cf;--income-fg:#1f5a41;--expense-bg:#f7e9dd;--expense-fg:#a0452f;--saving-bg:#ebe8f6;--saving-fg:#5f548a;
  font-family:var(--font-ui);font-optical-sizing:auto}
:root[data-theme=dark]{--ink:#eef1ea;--muted:#98a299;--paper:#090b0a;--bg-paper:#090b0a;--white:#111411;--bg-white:#111411;--bg-ffffff:#111411;--soft:#191e1a;--bg-soft:#191e1a;--line:#252c26;--bg-line:#252c26;
  --green:#c6f35e;--bg-green:#c6f35e;--lime:#d6f78a;--bg-lime:#22301a;--bg-ink:#1b231c;--red:#ff8a75;--gold:#f0c869;--bg-163d30:#d5f97f;
  --card:#111411;--spark:#c6f35e;--accent:#c6f35e;--hero-a:#1d2a17;--hero-b:#121612;--hero-c:#0c0f0d;--hero-ink:#f3f6ee;--hero-muted:#a3ad9f;
  --ring:#c6f35e;--shadow-card:inset 0 1px 0 #ffffff0a;--shadow-pop:0 28px 70px -20px #000000d9;
  --income-bg:#1f2c17;--income-fg:#c6f35e;--expense-bg:#2c1c16;--expense-fg:#ff9d86;--saving-bg:#211f2e;--saving-fg:#b9afe6;
  --chart-in:#29a873;--chart-out:#e8604c}
html{background:var(--paper)}
body{background:radial-gradient(70% 420px at 92% -80px,#dfeccb 0%,transparent 70%),var(--paper);background-repeat:no-repeat;min-height:100dvh;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
:root[data-theme=dark] body{background:radial-gradient(60% 420px at 88% -120px,#c6f35e1c 0%,transparent 70%),var(--paper);background-repeat:no-repeat}
::selection{background:var(--spark);color:#0f2a24}

/* Tipografía */
h1,h2,h3{font-family:var(--font-ui)}
h2{font-weight:650;letter-spacing:-.4px}
.heading h1,.login-art h1,.login-form h2,.onboarding-card h1,.legal h1{font-family:var(--font-display);font-weight:850;letter-spacing:-.035em;line-height:1.06}
.heading h1{font-size:clamp(40px,4.6vw,58px);margin-bottom:10px}
.heading h1 em,.login-art h1 em,.login-form h2 em,.onboarding-card h1 em{font-style:italic;color:var(--accent)}
.login-art h1 em{color:var(--spark)}
.heading p{font-size:15px;max-width:520px}
.eyebrow{font-size:10.5px;letter-spacing:1.9px;font-weight:700}
.spend-value,.metric-value,.money,.mc-totals strong,.item-end strong,.intro-stat,.goal-amount strong,.space-status,.admin-stat strong,.trend-stats strong,.budget-line strong,.pocket strong,.loan-amount strong{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}

/* Botones */
button{border-radius:999px;font-weight:620;transition:background .18s,transform .12s,box-shadow .18s,border-color .18s,color .18s}
button:active:not(:disabled){transform:scale(.97)}
.primary{background:var(--hero-b);color:#f4f6ec;padding:11px 20px;box-shadow:0 8px 20px -10px #193e3580}
.primary:hover{background:#12302a;box-shadow:0 12px 26px -10px #193e3599}
:root[data-theme=dark] .primary{background:var(--spark);color:#0c100d;box-shadow:0 0 0 1px #c6f35e40,0 10px 30px -10px #c6f35e66}
:root[data-theme=dark] .primary:hover{background:#d5f97f}
.secondary{background:var(--card);border-color:var(--line);padding:11px 18px}
.secondary:hover{border-color:var(--ink)}
:root[data-theme=dark] .secondary{background:#161a17;border-color:#2b332c}
:root[data-theme=dark] .secondary:hover{border-color:#566257}
.secondary.danger:hover{border-color:var(--red)}
.icon.subtle,.dialog-head button,.month-picker button,.item-actions button{border-radius:50%}
.text-button{color:var(--accent);font-weight:650}
.access-switch{border-radius:12px}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--ring);outline-offset:3px}

/* Campos */
.field,select,textarea,input:not([type=checkbox]):not([type=month]):not([type=radio]){border-radius:14px;border-color:var(--line);background:var(--card);padding:13px 14px;transition:border-color .15s,box-shadow .15s}
.field:focus,select:focus,textarea:focus,input:not([type=checkbox]):not([type=month]):not([type=radio]):focus{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 16%,transparent);outline:none}
:root[data-theme=dark] select,:root[data-theme=dark] textarea,:root[data-theme=dark] input:not([type=checkbox]):not([type=month]):not([type=radio]){background:#0c0f0d;border-color:#2a312b}
label{font-size:12.5px;letter-spacing:.1px}
#dialog input[type=month]{border-radius:14px}

/* Tarjetas */
.card{border-radius:24px;border-color:var(--line);background:var(--card);box-shadow:var(--shadow-card);padding:26px}
:root[data-theme=dark] .card{background:linear-gradient(180deg,#141815,#0f120f);border-color:#222923}
.card-sub{font-size:13px;line-height:1.55}
.budget-summary{border-radius:24px}
.metric-icon,.item-symbol,.empty-icon{border-radius:50%}
.item-symbol.income{background:var(--income-bg);color:var(--income-fg)}
.item-symbol.expense{background:var(--expense-bg);color:var(--expense-fg)}
.item-symbol.saving,.item-symbol.withdrawal{background:var(--saving-bg);color:var(--saving-fg)}
.item-symbol.opening{background:var(--income-bg);color:var(--income-fg)}
.metric-icon.income{background:var(--income-bg);color:var(--income-fg)}
.metric-icon.expense{background:var(--expense-bg);color:var(--expense-fg)}
.metric-icon.saving{background:var(--saving-bg);color:var(--saving-fg)}
.metric-value{font-weight:700;letter-spacing:-.9px}
.movement{padding:15px 0}.movement strong{font-size:14px;font-weight:620}.movement p{font-size:12px}.movement .money{font-size:15px;font-weight:700;letter-spacing:-.3px}
.card>.movement:first-of-type,.section-top+.movement{border-top-color:transparent}
.pill{border-radius:999px;padding:5px 10px;letter-spacing:.8px;background:var(--income-bg);color:var(--income-fg)}
progress{height:8px;border-radius:99px}progress::-webkit-progress-bar{border-radius:99px}progress::-webkit-progress-value{border-radius:99px;background:var(--accent)}progress::-moz-progress-bar{background:var(--accent)}
.notice{border-radius:16px}
.prima-card,.bills-alert{border-color:color-mix(in srgb,var(--gold) 55%,var(--line));background:linear-gradient(115deg,color-mix(in srgb,var(--gold) 13%,var(--card)),var(--card) 62%)}
.insight,.pocket,.pay-half,.trend-stats div{border-radius:18px}
.pocket{padding:14px}
.chip{border-radius:999px}

/* Tarjeta principal: lo libre y lo de hoy */
.spend-card{position:relative;overflow:hidden;isolation:isolate;border:0;border-radius:30px;padding:34px;color:var(--hero-ink);background:radial-gradient(120% 150% at 100% 0%,var(--hero-a) 0%,var(--hero-b) 46%,var(--hero-c) 100%);box-shadow:0 30px 60px -34px #0f2a24cc}
.spend-card::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .09 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");pointer-events:none}
.spend-card::after{content:"";position:absolute;z-index:-1;width:420px;height:420px;right:-170px;top:-230px;border-radius:50%;border:1px solid #ffffff24;box-shadow:0 0 0 46px #ffffff0a,0 0 0 47px #ffffff1a,0 0 0 110px #ffffff06;pointer-events:none}
.spend-card .eyebrow{color:var(--hero-muted)}
.spend-card .spend-value{font-size:clamp(46px,7.4vw,78px);font-weight:720;letter-spacing:-.045em;line-height:.98;margin:12px 0 10px;color:var(--hero-ink)}
.spend-card p{color:var(--hero-muted);font-size:14px}
.spend-card .negative{color:#ffc9b9!important}
.spend-card .link-button{color:var(--hero-ink)}
.spend-main{gap:24px}
.spend-today{background:#ffffff14;border:1px solid #ffffff26;border-radius:22px;padding:18px 20px;min-width:250px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.spend-today small{color:var(--hero-muted);letter-spacing:1.6px;font-size:10.5px}
.spend-today strong{color:var(--spark);font-size:clamp(30px,4.4vw,40px);font-weight:720;letter-spacing:-.035em}
.spend-today strong.negative{color:#ffc9b9!important}
.spend-today p{color:var(--hero-muted)!important}
.spend-note{color:var(--hero-muted)!important;border-top:1px solid #ffffff1f;padding-top:14px;margin-top:20px!important}
.spend-card.short{box-shadow:inset 0 0 0 1.5px #ff9d86,0 30px 60px -34px #0f2a24cc}
:root[data-theme=dark] .spend-card{background:radial-gradient(70% 120% at 96% -12%,#c6f35e3d 0%,transparent 58%),radial-gradient(60% 90% at 0% 120%,#29a87324 0%,transparent 60%),linear-gradient(180deg,#151a15,#0d100d);box-shadow:inset 0 0 0 1px #2a332a,inset 0 1px 0 #ffffff14,0 40px 80px -40px #000}
:root[data-theme=dark] .spend-card::after{border-color:#c6f35e33;box-shadow:0 0 0 46px #c6f35e08,0 0 0 47px #c6f35e1f,0 0 0 110px #c6f35e05}
:root[data-theme=dark] .spend-today{background:#0a0d0acc;border-color:#c6f35e33;box-shadow:0 0 40px -14px #c6f35e59}
:root[data-theme=dark] .spend-card.short{box-shadow:inset 0 0 0 1.5px #ff8a75,0 40px 80px -40px #000}

/* Barra lateral (computador): panel flotante */
@media(min-width:701px){
  .sidebar{inset:14px auto 14px 14px;width:232px;border:1px solid var(--line);border-radius:28px;background:color-mix(in srgb,var(--card) 86%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);padding:28px 16px;box-shadow:var(--shadow-card)}
  .sidebar .brand{margin:0 8px 40px}
  .main{margin-left:260px;padding:34px 44px 44px}
  .nav{gap:4px}
  .nav button{border-radius:16px;padding:12px 14px;font-size:14.5px;font-weight:560;color:var(--muted);position:relative}
  .nav button:not(.active):hover{background:var(--soft);color:var(--ink)}
  .nav button.active{background:var(--hero-b);color:#f4f6ec;box-shadow:0 10px 24px -14px #193e35b3}
  .nav button.active::after{content:"";position:absolute;right:14px;top:50%;width:7px;height:7px;margin-top:-3.5px;border-radius:50%;background:var(--spark)}
  :root[data-theme=dark] .nav button.active{background:#1c241c;color:var(--spark);box-shadow:inset 0 0 0 1px #c6f35e2e}
  .topbar{border-bottom:0;padding-bottom:6px;margin-bottom:26px}
}
@media(min-width:701px) and (max-width:1200px){.sidebar{width:204px}.main{margin-left:230px;padding:28px}}
.brand{font-weight:720;letter-spacing:-.9px}
.brand-symbol{border-radius:13px;background:var(--hero-b);color:var(--spark)}
:root[data-theme=dark] .brand-symbol{background:var(--spark);color:#0c100d}
.login-art .brand-symbol{background:var(--spark);color:#0f2a24}
.avatar{background:var(--income-bg);color:var(--income-fg);border:0;padding:0;overflow:hidden}
.month-picker{border-radius:999px;padding:3px;background:var(--card);border-color:var(--line)}
.status-dot{background:var(--spark);box-shadow:0 0 0 3px color-mix(in srgb,var(--spark) 30%,transparent)}
.topbar-left{letter-spacing:1.4px;font-size:11px;font-weight:600}

/* Botón flotante de agregar */
.fab{border-radius:50%;background:var(--hero-b);color:var(--spark);box-shadow:0 18px 38px -12px #0f2a24b3,inset 0 1px 0 #ffffff26}
.fab:hover{transform:translateY(-2px) rotate(90deg)}
:root[data-theme=dark] .fab{background:var(--spark);color:#0c100d;box-shadow:0 0 0 1px #c6f35e66,0 16px 44px -10px #c6f35e80}

/* Diálogos */
dialog{border-radius:30px;padding:30px;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-pop)}
:root[data-theme=dark] dialog{background:#121512;border-color:#293029}
dialog::backdrop{background:#0c1f1a80;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
:root[data-theme=dark] dialog::backdrop{background:#000000a6}
.dialog-head h2{font-family:var(--font-display);font-weight:850;font-size:24px;letter-spacing:-.03em}
.quick-kind{border-radius:999px}.quick-kind span{border-radius:999px}
.quick-amount input{font-size:46px;font-weight:720;letter-spacing:-.04em}
.say-box{border-radius:18px}
.segmented button[aria-pressed=true]{box-shadow:0 1px 3px #0000001f}
:root[data-theme=dark] .segmented button[aria-pressed=true],:root[data-theme=dark] .quick-kind input:checked+span{background:#262e27;color:var(--ink)}
#toast{border-radius:999px;padding:13px 22px;font-weight:600;background:var(--hero-b);color:#f4f6ec;box-shadow:var(--shadow-pop)}
:root[data-theme=dark] #toast{background:var(--spark);color:#0c100d}
:root[data-theme=dark] #toast.error{background:#ff8a75;color:#2a0d07}
.tour{border-radius:26px;box-shadow:var(--shadow-pop)}
.choice{border-radius:18px;padding:14px 16px;transition:border-color .15s,background .15s}
.choice:has(input:checked){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--card))}
.check input,.choice input,.consent input,.recurring-list input{accent-color:var(--accent)}

/* Inicio de sesión */
.login-art{background:radial-gradient(90% 70% at 100% 0%,#2f7257 0%,#193e35 50%,#0f2a24 100%);isolation:isolate}
.login-art::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .09 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");pointer-events:none}
.login-art h1{font-size:clamp(46px,5.6vw,86px);letter-spacing:-1.5px;margin:40px 0 22px}
.login-art .art-logo{color:#cdf56a59}
:root[data-theme=dark] .login-art{background:radial-gradient(80% 60% at 100% 0%,#c6f35e33 0%,transparent 60%),linear-gradient(180deg,#141914,#0a0d0a);border-right:1px solid #222923}
.login-form h2{font-size:40px;margin:22px 0 12px}
.login-form>p{font-size:14px;line-height:1.6}
.login-motto{font-weight:600;color:var(--accent)}
.onboarding-card{border-radius:30px;padding:32px}
.onboarding-card h1{font-size:40px}

/* Celular */
@media(max-width:700px){
  .sidebar{inset:auto 12px calc(10px + env(safe-area-inset-bottom)) 12px;width:auto;height:66px;padding:6px;border:1px solid var(--line);border-radius:24px;background:color-mix(in srgb,var(--card) 84%,transparent);backdrop-filter:blur(18px) saturate(1.5);-webkit-backdrop-filter:blur(18px) saturate(1.5);box-shadow:0 18px 44px -16px #0f2a2473}
  :root[data-theme=dark] .sidebar{border-color:#2b332c;box-shadow:0 18px 44px -12px #000,inset 0 1px 0 #ffffff0f}
  .nav{height:100%;gap:2px}
  .nav button{min-height:0;height:100%;border-radius:18px;font-size:10.5px;font-weight:600;color:var(--muted);gap:4px;padding:6px 2px}
  .nav button.active{background:var(--hero-b);color:#f4f6ec}
  :root[data-theme=dark] .nav button.active{background:#222b21;color:var(--spark)}
  .main{padding-bottom:calc(112px + env(safe-area-inset-bottom))}
  .fab{right:18px;bottom:calc(92px + env(safe-area-inset-bottom));width:58px;height:58px}
  #toast{bottom:calc(96px + env(safe-area-inset-bottom))}
  .tour{bottom:calc(96px + env(safe-area-inset-bottom))}
  .topbar{border-bottom:0;padding-bottom:4px;margin-bottom:18px}
  .heading h1{font-size:42px}
  .heading p{font-size:13.5px}
  .card{border-radius:22px;padding:20px}
  .spend-card{border-radius:26px;padding:24px 22px}
  .spend-card .spend-value{font-size:clamp(42px,13vw,58px)}
  .spend-today{min-width:0;width:100%}
  .heading-actions>.primary{font-size:13px;padding:11px 16px}
  .login-form h2{font-size:38px}
  /* Los diálogos suben desde abajo, como una hoja */
  dialog{margin:auto auto 0;width:100%;max-width:100%;border-radius:30px 30px 0 0;border-bottom:0;padding:26px 20px calc(22px + env(safe-area-inset-bottom));max-height:92dvh}
  dialog::before{content:"";display:block;width:44px;height:5px;border-radius:99px;background:var(--line);margin:-10px auto 14px}
}
@media(prefers-reduced-motion:no-preference){
  dialog[open]{animation:sheetIn .28s cubic-bezier(.2,.8,.2,1)}
  @keyframes sheetIn{from{opacity:0;transform:translateY(18px) scale(.985)}to{opacity:1;transform:none}}
  .spend-card{animation:heroIn .5s cubic-bezier(.2,.8,.2,1)}
  @keyframes heroIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  .card{animation-duration:.3s}
}
@media(prefers-reduced-motion:reduce){.fab:hover{transform:none}}
.movement .item-symbol svg{width:17px;height:17px}
#content>.card:not(:last-child),#content>.grid:not(:last-child){margin-bottom:18px}
.month-label{margin:0;min-height:40px}
@media(max-width:700px){.actual-grid{grid-template-columns:1fr;gap:10px}.metric{display:flex;align-items:center;gap:14px;padding:14px 18px;border-radius:20px}.metric-icon{margin:0;width:40px;height:40px}.metric-label{min-height:0;font-size:12px;margin-bottom:2px}.metric-value{font-size:23px}.metric small{font-size:11px}}
.quick-amount input,.quick-amount input:focus,.say-box input,.say-box input:focus{background:transparent!important;border:0!important;box-shadow:none!important}
.heading-actions>.primary{white-space:nowrap}
@media(max-width:700px){
  .heading-actions{flex-wrap:wrap}
  .month-label{min-width:0;flex:1}.month-picker{flex:1;justify-content:space-between}
  .goals-heading,.fx-section>.section-top,.cat-intro,.loan-toolbar{flex-direction:column;align-items:stretch;gap:12px}
  .goals-heading .card-sub,.fx-section .card-sub{margin-bottom:0}
  .goals-heading .goal-actions{display:flex;flex-wrap:wrap;gap:8px;margin:0}
  .goals-heading .goal-actions button{flex:1 1 auto;font-size:13px;padding:10px 14px;white-space:nowrap}
  .fx-section>.section-top>button{align-self:flex-start}
}
.login-art{--logo-flag:#cdf56a}
@media(max-width:700px){.month-label span{white-space:nowrap;font-size:13px}.month-picker button{min-width:32px;padding:6px}}

/* ---------- Diseño v2.1: menos cajas. Las secciones respiran; solo quedan como pieza lo que es una pieza. ---------- */
#content .card:not(:is(.spend-card,.prima-card,.bills-alert,.recurring-card,.savings-goal,.objective,.loan,.push-card,.empty)){background:none;border:0;border-top:1px solid var(--line);border-radius:0;box-shadow:none;padding:30px 0 12px}
#content .card{animation:none}
#content :is(.spend-card,.prima-card,.bills-alert,.recurring-card,.push-card)+.card{border-top-color:transparent;padding-top:14px}
#content>.card:first-child:not(:is(.spend-card,.prima-card,.bills-alert,.recurring-card,.savings-goal,.objective,.loan,.push-card,.empty)){border-top-color:transparent;padding-top:6px}
#content .card:not(.spend-card) h2{font-size:23px;letter-spacing:-.7px;font-weight:660}
#content .card.details h2,#content .settings-grid h2{font-size:19px}
/* Piezas sueltas (metas, préstamos, avisos): superficie suave, sin borde */
#content :is(.objective,.loan,.push-card,.recurring-card,.empty){background:var(--soft);border:0;box-shadow:none}
#content .card.empty{border-radius:22px}
.budget-summary.plan-card{background:var(--soft);border:0;margin-bottom:18px}
/* Cifras en franja, no en cajas */
#content .actual-grid{gap:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:8px}
#content .actual-grid .metric{border-top:0!important;padding:20px 22px 20px 0}
#content .actual-grid .metric+.metric{border-left:1px solid var(--line);padding-left:22px}
#content .actual-grid+.card{border-top-color:transparent}
/* Listas como renglones */
#content .list{gap:0}
#content .list .budget-item{padding:20px 0}
#content .list .budget-item:first-child{border-top-color:transparent}
#content .settings-grid{column-gap:48px;row-gap:0}
#content .content-grid{column-gap:48px}
.section-top>h2,.section-top>div>h2{margin-bottom:0}
@media(max-width:700px){
  #content .card:not(:is(.spend-card,.prima-card,.bills-alert,.recurring-card,.savings-goal,.objective,.loan,.push-card,.empty)){padding:24px 0 8px}
  #content .card:not(.spend-card) h2{font-size:21px}
  #content .actual-grid .metric{padding:16px 0;border-radius:0}
  #content .actual-grid .metric+.metric{border-left:0;padding-left:0;border-top:1px solid var(--line)!important}
  #content .list .budget-item{padding:18px 0}
}

/* Gráfica "Flujo" */
:root{--flow:#193e35}:root[data-theme=dark]{--flow:#c6f35e}
.mc-key.net{background:var(--flow);border-radius:50%}
.mc-caption{font-size:12.5px;color:var(--muted);margin:10px 0 0}
.mc-stop-a{stop-color:var(--chart-in);stop-opacity:.42}.mc-stop-b{stop-color:var(--chart-in);stop-opacity:0}
.mc-flow-area{fill:url(#mc-flow-fill);animation:mcFade .9s .25s both}
.mc-flow-line{fill:none;stroke:var(--flow);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.mc-flow-line.draw{animation:mcDraw 1.1s cubic-bezier(.3,.7,.2,1) forwards}
.mc-flow-future{stroke:var(--muted);stroke-width:1.5;stroke-dasharray:2 6;stroke-linecap:round;opacity:.7}
.mc-bubble{stroke:var(--paper);stroke-width:2;transform-box:fill-box;transform-origin:center;animation:mcPop .55s cubic-bezier(.2,1.5,.4,1) both}
.mc-bubble.in{fill:var(--chart-in)}.mc-bubble.out{fill:var(--chart-out)}
.mc-head{fill:var(--flow);stroke:var(--paper);stroke-width:2.5}
.mc-pulse{fill:none;stroke:var(--flow);stroke-width:2;transform-box:fill-box;transform-origin:center;animation:mcPulse 1.8s ease-out infinite}
.mc-spot{fill:var(--paper);stroke:var(--flow);stroke-width:2.5;pointer-events:none}
.mc-axis.now{fill:var(--ink);font-weight:700}
.mc-plot svg.still *{animation:none!important}
@keyframes mcFade{from{opacity:0}to{opacity:1}}
@keyframes mcPop{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes mcPulse{0%{transform:scale(1);opacity:.8}100%{transform:scale(3.4);opacity:0}}
@media(prefers-reduced-motion:reduce){.mc-flow-area,.mc-bubble,.mc-pulse{animation:none}}

/* ---------- Movimiento: corto y solo donde importa ---------- */
@media(prefers-reduced-motion:no-preference){
  .page-change .heading{animation:pageIn .34s cubic-bezier(.2,.8,.2,1) both}
  .page-change #content{animation:pageIn .42s .05s cubic-bezier(.2,.8,.2,1) both}
  .page-change .nav button.active svg{animation:navPop .42s cubic-bezier(.2,1.6,.4,1)}
  .app-enter #root{animation:appIn .6s cubic-bezier(.2,.8,.2,1) both}
  .spend-card{animation:none}
  button.pop{animation:btnPop .36s cubic-bezier(.2,1.6,.4,1)}
  .fab.pop svg{animation:fabSpin .4s cubic-bezier(.2,.8,.2,1)}
  #toast:not([hidden]){animation:toastIn .32s cubic-bezier(.2,1.3,.4,1)}
  dialog[open]{animation:sheetIn .3s cubic-bezier(.2,.9,.2,1)}
  dialog[open]::backdrop{animation:mcFade .25s both}
  @keyframes pageIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
  @keyframes appIn{from{opacity:0;transform:scale(.985)}to{opacity:1;transform:none}}
  @keyframes navPop{0%{transform:scale(.6)}100%{transform:scale(1)}}
  @keyframes btnPop{0%{transform:scale(1)}35%{transform:scale(.9)}100%{transform:scale(1)}}
  @keyframes fabSpin{from{transform:rotate(-90deg)}to{transform:rotate(0)}}
  @keyframes toastIn{from{opacity:0;transform:translate(-50%,14px)}to{opacity:1;transform:translate(-50%,0)}}
}
@media(prefers-reduced-motion:no-preference) and (max-width:700px){
  dialog[open]{animation:sheetUp .34s cubic-bezier(.2,.9,.2,1)}
  @keyframes sheetUp{from{transform:translateY(60%);opacity:.4}to{transform:none;opacity:1}}
}

/* ---------- Pantalla de carga: el bolsillo gira, sale el nombre, una moneda llega rodando, lo empuja de vuelta y entra; el bolsillo se endereza, tiembla un poco y sale la bandera ---------- */
.boot.splash{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;color:var(--ink)}
.boot-word{font-size:28px;margin:0}
.bz2{width:min(380px,90vw);height:auto;overflow:visible;--w:63px;--p:calc(var(--w) + 6px)}
.bz-line,.bz-body,.bz-cloth,.bz-coin-out,.bz-coin-in{stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;fill:none}
.bz-body{fill:var(--paper)}
.bz-cloth{fill:var(--spark)}
/* Moneda amarilla con el signo peso */
.bz-coin-out{fill:#ffcc33;stroke:#a87900;stroke-width:1.8}
.bz-coin-in{fill:none;stroke:#d99e00;stroke-width:.9}
.bz-coin-sign{font-family:var(--font-logo);font-weight:900;font-size:8.6px;fill:#7a5600;stroke:none;text-anchor:middle}
.bz-line.thin{stroke-width:1.8}
.bz2-name{font-family:var(--font-logo);font-weight:900;font-size:15.5px;letter-spacing:-.5px;fill:currentColor}
/* La palabra va tres veces, una por sílaba, con el resto transparente: así las tres quedan alineadas con cualquier fuente y cada sílaba puede crecer sola. */
.bz2-ghost{fill:none}
.bz2-syl{transform-box:fill-box}.bz2-syl.s1{transform-origin:15% 52%}.bz2-syl.s2{transform-origin:51% 52%}.bz2-syl.s3{transform-origin:86% 52%}
.bz2-pocket{transform-origin:32px 43px;transform:translateX(43px)}
.bz-flagcloth{transform-box:fill-box;transform-origin:0 50%}
/* Montaña en la bandera: la meta alcanzada. Va en verde oscuro para que se lea sobre la tela clara en los dos temas. */
.bz-peak,.logo-mark .lm-peak{fill:var(--logo-peak);stroke:var(--logo-peak);stroke-width:.7;stroke-linejoin:round}
/* En los logos pequeños (menos de 40 px) la montaña sería una mancha: ahí no se dibuja. */
.brand-symbol .lm-peak,.tile .lm-peak{display:none}
.bz2-name,.bz2-coin{opacity:0}
@media(prefers-reduced-motion:no-preference){
  .bz2-pocket{animation:bz2Pocket 4.2s both}
  .bz2-name{animation:bz2Name 4.2s both}
  /* Latido por sílaba al salir del bolsillo: Ba, Lan, Za, una vez cada una, antes de que llegue la moneda. */
  .bz2-syl{animation:bz2Beat .3s both cubic-bezier(.3,0,.35,1)}
  .bz2-syl.s1{animation-delay:1.4s}.bz2-syl.s2{animation-delay:1.61s}.bz2-syl.s3{animation-delay:1.82s}
  @keyframes bz2Beat{0%,100%{transform:scale(1)}42%{transform:scale(1.24)}}
  .bz2-coin{animation:bz2Coin 4.2s both}
  .bz2-roll{transform-origin:121px 43px;animation:bz2Roll 4.2s both}
  .bz2-flag{animation:bz2Flag 4.2s both}
  .bz-flagcloth{animation:bzWave 1.1s 4.2s ease-in-out infinite alternate}
  @keyframes bz2Pocket{
    0%{transform:translateX(43px) rotate(0) scale(.5);opacity:0;animation-timing-function:cubic-bezier(.2,1.5,.4,1)}
    6.857%,11.143%{transform:translateX(43px) rotate(0) scale(1);opacity:1;animation-timing-function:cubic-bezier(.5,0,.2,1)}
    21.429%,73.429%{transform:translateX(-4px) rotate(90deg) scale(1);opacity:1;animation-timing-function:ease-out}
    76%{transform:translateX(-6px) rotate(90deg) scale(1.07,.95);animation-timing-function:ease-in-out}
    80.286%{transform:translateX(-4px) rotate(90deg) scale(1);animation-timing-function:cubic-bezier(.5,0,.2,1)}
    87.143%{transform:translateX(43px) rotate(0) scale(1);opacity:1;animation-timing-function:ease-in-out}
    88.429%{transform:translateX(41.6px) rotate(-5deg) scale(1);animation-timing-function:ease-in-out}
    89.714%{transform:translateX(44.2px) rotate(4deg) scale(1);animation-timing-function:ease-in-out}
    91%{transform:translateX(42.2px) rotate(-2.5deg) scale(1);animation-timing-function:ease-in-out}
    92.286%{transform:translateX(43.5px) rotate(1.2deg) scale(1);animation-timing-function:ease-in-out}
    93.571%,100%{transform:translateX(43px) rotate(0) scale(1);opacity:1}}
  @keyframes bz2Name{
    0%,21.429%{transform:translateX(calc(var(--p) * -1));opacity:1;animation-timing-function:cubic-bezier(.2,1.2,.3,1)}
    32.571%,60.571%{transform:translateX(0);opacity:1;animation-timing-function:cubic-bezier(.4,0,.6,1)}
    71.714%,100%{transform:translateX(calc(var(--p) * -1));opacity:1}}
  @keyframes bz2Coin{
    0%,51.143%{transform:translateX(62px);opacity:0;animation-timing-function:cubic-bezier(.3,.5,.6,1)}
    52.857%{opacity:1}
    60.571%{transform:translateX(0);opacity:1;animation-timing-function:cubic-bezier(.4,0,.6,1)}
    71.714%{transform:translateX(calc(var(--p) * -1));opacity:1;animation-timing-function:ease-in}
    76%,100%{transform:translateX(calc(var(--p) * -1 - 16px));opacity:1}}
  /* La animación dura 4,2 s: a los 1,37 s la palabra ya salió, siguen 0,6 s para el latido de las sílabas y después el cierre de la moneda, igual que antes. */
  /* Rueda sin patinar: ángulo = distancia / radio (62, 69 y 16 unidades con radio 6,4). */
  @keyframes bz2Roll{0%,51.143%{transform:rotate(0);animation-timing-function:cubic-bezier(.3,.5,.6,1)}60.571%{transform:rotate(-555deg);animation-timing-function:cubic-bezier(.4,0,.6,1)}71.714%{transform:rotate(-1173deg);animation-timing-function:ease-in}76%,100%{transform:rotate(-1316deg)}}
  @keyframes bz2Flag{0%,93.143%{transform:translateY(30px);animation-timing-function:cubic-bezier(.2,1.4,.4,1)}100%{transform:none}}
  @keyframes bzWave{from{transform:skewY(0)}to{transform:skewY(-7deg) scaleX(.96)}}
}

/* ---------- Marca BaLanZa: logo en Red Hat Display; títulos en sans redondeada gruesa (Nunito) ---------- */
.brand,.boot-word,.wordmark{font-family:var(--font-logo);font-weight:900;letter-spacing:-.035em}
.wordmark{font-size:.94em}
.heading h1{font-size:clamp(32px,3.5vw,46px)}
.heading h1 em,.login-art h1 em,.login-form h2 em,.onboarding-card h1 em{font-style:normal}
.login-art h1{font-size:clamp(38px,4.4vw,64px);letter-spacing:-.04em;line-height:1.04}
.login-form h2{font-size:32px}
.onboarding-card h1{font-size:30px}
.legal h1{font-size:32px}
@media(max-width:700px){.heading h1{font-size:33px}.login-form h2{font-size:31px}}
/* En computador el lema ya va en grande a la izquierda: no se repite sobre el formulario. */
@media(min-width:701px){.login .login-motto{display:none}.login-art{gap:26px}}
@media(min-width:701px) and (max-height:700px){.login-art .art-logo{display:none}.login-art h1{margin:26px 0 18px}}

/* Metas juntos (Compartido y Ahorro) */
.sp-goals{margin-top:8px}
.sp-goal-people{display:grid;gap:8px;margin:14px 0 4px}
.sp-goal-person{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;padding:8px 0;border-top:1px solid var(--line)}
.sp-goal-person:first-child{border-top:0}
.sp-goal-person .avatar{width:30px;height:30px;font-size:12px}
.sp-goal-person strong{display:block;font-size:14px}
.sp-goal-person small{color:var(--muted);font-size:12px}
.sp-goal-log{margin-top:12px;font-size:13px}
.sp-goal-log summary{cursor:pointer;color:var(--muted);font-weight:600;padding:6px 0}
.shared-goals-head{margin-top:26px}
.shared-goals-head h3{margin:0;font-family:var(--font-display);font-size:20px}
.shared-goal-link{display:block;width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer;transition:transform .15s ease}
.shared-goal-link:hover{transform:translateY(-2px)}
.shared-goal-link .link-hint{display:inline-block;margin-top:8px;font-size:13px;font-weight:700;color:var(--accent,var(--ink))}
.sp-goal.flash{animation:spFlash 1.6s ease}
@keyframes spFlash{0%,40%{box-shadow:0 0 0 3px color-mix(in srgb,var(--spark,#c6f35e) 70%,transparent)}100%{box-shadow:0 0 0 0 transparent}}
@media (prefers-reduced-motion:reduce){.sp-goal.flash{animation:none}.shared-goal-link{transition:none}}
.consent.optional{font-size:13px;color:var(--muted)}
.consent.optional strong{color:var(--ink)}

/* Anotación automática */
.bank-chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px}
.bank-chip{position:relative;display:inline-flex;cursor:pointer}
.bank-chip input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.bank-chip span{padding:7px 13px;border-radius:99px;border:1px solid var(--line);font-size:13px;font-weight:600;transition:background .15s,border-color .15s}
.bank-chip input:checked+span{background:var(--ink);border-color:var(--ink);color:#fff}
:root[data-theme=dark] .bank-chip input:checked+span{color:#0a0f1a}
.bank-chip input:focus-visible+span{outline:2px solid var(--spark,#c6f35e);outline-offset:2px}
.auto-section{margin:0 0 28px;padding-bottom:22px;border-bottom:1px solid var(--line)}
.auto-section h2{margin:0}
.auto-section h3{margin:0 0 4px;font-size:15px}
.auto-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:22px;margin-top:16px}
.auto-block .goal-actions{flex-wrap:wrap}
.pill.on{background:color-mix(in srgb,var(--spark,#c6f35e) 45%,transparent);color:var(--ink)}
.auto-log{margin-top:20px}
.auto-row{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.auto-row small{display:block;color:var(--muted);font-size:12px}
.auto-row strong{font-size:14px}
.auto-row details{font-size:13px;margin-top:4px}
.auto-row details p{margin:6px 0 0;color:var(--muted);word-break:break-word}
.auto-dot{width:9px;height:9px;border-radius:50%;background:var(--muted)}
.auto-row.ok .auto-dot{background:#2f8a62}
.auto-row.dup .auto-dot{background:var(--line)}
.auto-row.bad .auto-dot{background:#d2593f}
.auto-steps{padding-left:20px;margin:0 0 14px;display:grid;gap:8px;font-size:14px;line-height:1.45}
.auto-steps code{font-size:12.5px;padding:1px 5px;border-radius:5px;background:var(--bg-soft,rgba(0,0,0,.06))}
.auto-link{font-size:12px!important;letter-spacing:0!important;word-break:break-all;text-align:left}
.tag-auto{display:inline-block;margin-left:4px;padding:1px 7px;border-radius:99px;font-size:11px;font-weight:700;background:color-mix(in srgb,var(--spark,#c6f35e) 40%,transparent);color:var(--ink)}
@media(max-width:700px){.auto-row{grid-template-columns:auto 1fr}.auto-row>.money,.auto-row>button{grid-column:2}}

/* Panel de administración · invitaciones de un solo uso */
.invite-form{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) auto;gap:12px;align-items:end;margin-top:12px}
.invite-form label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600}
.invite-form input,.invite-form select{min-height:44px;padding:10px 12px;border-radius:12px;border:1px solid var(--bg-line,var(--line));background:var(--bg-white,#fff);color:var(--ink)}
.invite-form button{min-height:44px}
.invite-new{margin-top:16px;padding:16px 18px;border-radius:16px;background:var(--bg-soft,var(--soft));display:flex;flex-direction:column;gap:8px}
.invite-code{margin:0;font-size:26px;font-weight:800;letter-spacing:.06em;font-variant-numeric:tabular-nums}
.invite-link{margin:0;font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.invite-actions{display:flex;flex-wrap:wrap;gap:8px}
.invite-new small{color:var(--muted)}
.admin-pill.used,.admin-pill.expired,.admin-pill.revoked{background:var(--bg-soft,var(--soft));color:var(--muted)}
.admin-pill.pending{margin-left:0}
.form-error{color:var(--red);font-size:13px;margin:8px 0 0}
@media (max-width:640px){.invite-form{grid-template-columns:1fr}}

/* Nota bajo las cifras de "Tu mes": explica por qué lo que te va quedando no es solo entró menos salió. */
.mc-note{margin:10px 0 0;font-size:13px;color:var(--muted)}
.invite-url{margin:0;font-size:17px;font-weight:700;overflow-wrap:anywhere}
.invite-wa{text-decoration:none}

.link-hint{font-size:12px;line-height:1.5;margin:10px 0 0;padding:10px 12px;border-radius:12px;background:var(--bg-fff8e8,#fff8e8);color:var(--fg-795b2b,#795b2b);border:1px solid var(--bg-ebdcc0,#ebdcc0)}.link-hint button{min-height:36px;padding:6px 12px;margin-left:6px;font-size:12px}
/* Celular: el + flotante queda a la derecha, así que los botones de cada fila van a la izquierda y la página deja espacio al final para que nada quede debajo del +. Los filtros se acomodan en dos columnas sin cortarse. */
@media(max-width:700px){.budget-item .item-actions,.movement .item-actions,#content .list .budget-item .item-actions{justify-content:flex-start;margin-left:0}.main{padding-bottom:calc(176px + env(safe-area-inset-bottom))}.toolbar select,.toolbar>button{flex:1 1 calc(50% - 5px);min-width:0;max-width:none}}
@media(max-width:700px){.section-top{flex-wrap:wrap}.section-top>button{flex-shrink:0;white-space:nowrap}}
.tour.tour-top{bottom:auto;top:calc(20px + env(safe-area-inset-top))}
.fixed-pill{display:inline-block;margin:0 0 14px;font-size:11px}
.ins-controls{display:flex;gap:10px;flex-wrap:wrap}.ins-controls label{margin:0;font-size:12px}.ins-controls select{margin-top:4px}
:root{--ins-in:#2f7257;--ins-out:#987437}:root[data-theme=dark]{--ins-in:#c6f35e;--ins-out:#e0b36a}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--ins-in:#c6f35e;--ins-out:#e0b36a}}
.ins-legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin:-10px 0 12px}.ins-legend span{display:inline-flex;align-items:center;gap:6px}.ins-key{width:12px;height:12px;border-radius:4px;display:inline-block}.ins-key.in{background:var(--ins-in)}.ins-key.out{background:var(--ins-out)}
.ins-pair{display:flex;flex-direction:column;gap:3px;min-width:160px;margin-bottom:4px}.ins-bar{display:block;height:8px;border-radius:0 4px 4px 0;min-width:2px}.ins-bar.in{background:var(--ins-in)}.ins-bar.out{background:var(--ins-out)}
.ins-cats{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:16px}.ins-cat-head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:14px;margin-bottom:6px}.ins-track{display:block;background:var(--bg-eff1e9,#eff1e9);border-radius:4px;overflow:hidden;margin-bottom:4px}.ins-track .ins-bar{height:10px}
.ins-chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.offers-box{margin:14px 0;padding:14px 16px;border-radius:16px;background:var(--bg-soft,#edf3e6);border:1px solid var(--bg-line,#e4e8df)}.offers-title{margin:0 0 4px;font-weight:800;font-size:15px;color:var(--ink)}.offers-text{margin:0 0 8px;font-size:13px;line-height:1.5;color:var(--muted)}.offers-box .consent{margin:6px 0 0}
dialog{transition:transform .2s ease}dialog.dragging{transition:none}
