:root{--bg: #EDF1EC;--surface: #FBFCFA;--ink: #17221D;--muted: #637069;--line: #D5DDD7;--hover: rgba(31, 111, 92, .07);--primary: #1F6F5C;--primary-ink: #FFFFFF;--pos: #1F6F5C;--neg: #B4442F;--warn: #A87012;--good: #2E7D4F;--c-income: #1F6F5C;--c-expense: #C2543A;--c-progress: #3F6FA8;--c-debt: #B4442F;--radius: 10px;--font: "IBM Plex Sans", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;color-scheme:light;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px)}@media (prefers-color-scheme: dark){:root{--bg: #101714;--surface: #17201C;--ink: #E3EAE5;--muted: #93A29A;--line: #29352F;--hover: rgba(80, 180, 150, .08);--primary: #3FA88C;--primary-ink: #08130F;--pos: #5CC0A2;--neg: #E3806A;--warn: #E2AC45;--good: #66C48E;--c-income: #4DB396;--c-expense: #E07A62;--c-progress: #7EA7DA;--c-debt: #E3806A;color-scheme:dark}}*,*:before,*:after{box-sizing:inherit}html,body{margin:0;height:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}h1,h2,h3{margin:0;line-height:1.25;font-weight:600}a{color:var(--primary);text-underline-offset:2px}code{background:var(--hover);padding:1px 5px;border-radius:4px}.num,.stat strong,.big,.hero-num,.debt-balance,td.r{font-variant-numeric:tabular-nums}.pos{color:var(--pos)}.neg{color:var(--neg)}.warn-text{color:var(--warn)}.muted{color:var(--muted)}.small{font-size:13px}.r{text-align:right}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.shell{display:grid;grid-template-columns:216px 1fr;min-height:100vh}.side{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:24px;padding:24px 14px;border-right:1px solid var(--line);background:var(--surface)}.brand{display:flex;align-items:center;gap:10px;font-weight:600;padding:0 8px}.brand-mark{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:8px;background:var(--primary);color:var(--primary-ink);font-size:13px;font-weight:700;letter-spacing:.02em}.brand-mark.big{width:52px;height:52px;font-size:18px;border-radius:12px}.nav{display:flex;flex-direction:column;gap:2px}.nav-link{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;color:var(--ink);text-decoration:none}.nav-link:hover{background:var(--hover)}.nav-link.active{background:var(--hover);color:var(--primary);font-weight:600;box-shadow:inset 3px 0 0 var(--primary)}.nav-icon{width:18px;text-align:center;opacity:.8}.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:2px;padding:0 8px;font-size:12px;color:var(--muted)}.who{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main{padding:28px clamp(16px,3vw,40px) 64px;min-width:0}.page{max-width:1120px;margin:0 auto;display:flex;flex-direction:column;gap:18px}.page-title{font-size:26px;letter-spacing:-.01em}.loading{display:grid;place-items:center;min-height:60vh;color:var(--muted)}.hero{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:0;background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}.hero-main{padding:28px 30px;display:flex;flex-direction:column;gap:10px}.hero-kicker{margin:0;color:var(--muted);font-size:14px}.hero-title{font-size:clamp(26px,3.4vw,36px);font-weight:600;letter-spacing:-.02em;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.hero-num{font-size:clamp(64px,9vw,104px);line-height:.9;font-weight:700;color:var(--primary);letter-spacing:-.04em}.hero-sub{margin:0;color:var(--muted)}.debt-track{display:flex;gap:6px;margin-top:14px}.debt-seg{display:flex;flex-direction:column;gap:6px;min-width:0}.debt-seg-bar{height:14px;border-radius:4px;background:color-mix(in srgb,var(--c-debt) 22%,transparent);overflow:hidden}.debt-seg-bar span{display:block;height:100%;background:var(--primary);transition:width .6s ease}.debt-seg-label{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hero-side{display:flex;flex-direction:column;border-left:1px solid var(--line)}.goal-ring-block{padding:20px 24px;display:flex;flex-direction:column;gap:6px;flex:1}.goal-ring-block+.goal-ring-block{border-top:1px solid var(--line)}.goal-ring-block p{margin:0}.label{color:var(--muted);font-size:13px}.big{font-size:26px;font-weight:600}.big small{font-size:14px;color:var(--muted);font-weight:400}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;display:flex;flex-direction:column;gap:12px;min-width:0}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.panel-head h2{font-size:16px}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.panel .stats{border-radius:8px}.stat{background:var(--surface);padding:14px 16px;display:flex;flex-direction:column;gap:2px}.stat span{font-size:13px;color:var(--muted)}.stat strong{font-size:20px;font-weight:600}.stat .small-strong{font-size:15px}.chart{width:100%;min-height:220px}.row-between{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}.row-gap{display:flex;gap:18px;flex-wrap:wrap;align-items:center}.empty{color:var(--muted);margin:6px 0}.stack{display:flex;flex-direction:column;gap:12px}.meter{height:8px;background:var(--hover);border-radius:99px;overflow:hidden}.meter span{display:block;height:100%;border-radius:inherit;background:var(--primary);transition:width .5s ease}.meter-good span{background:var(--good)}.meter-warn span{background:var(--warn)}.meter-bad span{background:var(--neg)}.advice{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.advice-item{display:grid;grid-template-columns:26px 1fr auto;gap:10px;align-items:start;padding:11px 0;border-top:1px solid var(--line)}.advice-item:first-child{border-top:0;padding-top:2px}.advice-item p{margin:2px 0 0;color:var(--muted);font-size:13.5px}.advice-icon{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;margin-top:1px}.advice-danger .advice-icon{background:var(--neg);color:var(--surface)}.advice-warn .advice-icon{background:var(--warn);color:var(--surface)}.advice-info .advice-icon{background:var(--hover);color:var(--primary);border:1px solid var(--line)}.advice-good .advice-icon{background:var(--good);color:var(--surface)}.advice-link{font-size:13px;white-space:nowrap;margin-top:1px}.mini-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;align-items:end}.field{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted);min-width:0}.field-wide{grid-column:1 / -1}input,select,textarea{font:inherit;font-size:15px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:8px 10px;width:100%;min-width:0}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--hover)}input[aria-invalid=true]{border-color:var(--neg)}textarea{resize:vertical}button{font:inherit;cursor:pointer}button:disabled{opacity:.6;cursor:default}.btn-primary,.btn-ghost,.btn-danger{border-radius:8px;padding:9px 16px;font-size:14px;font-weight:500;border:1px solid transparent}.btn-primary{background:var(--primary);color:var(--primary-ink)}.btn-primary:hover{filter:brightness(1.08)}.btn-ghost{background:transparent;color:var(--ink);border-color:var(--line)}.btn-ghost:hover{background:var(--hover)}.btn-danger{background:var(--neg);color:var(--surface)}.btn-sm{padding:4px 10px;font-size:13px}.btn-block{width:100%}.link{background:none;border:0;padding:0;color:var(--primary);text-decoration:underline;text-underline-offset:2px;font-size:inherit}.confirm{display:inline-flex;gap:6px}.inline-form{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.inline-form input{width:110px;padding:4px 8px;font-size:14px}.filters{display:flex;gap:8px}.filters input,.filters select,.panel-head>select,.panel-head>input{width:auto;padding:5px 8px;font-size:14px}.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;align-self:end}.seg button{flex:1;background:transparent;border:0;padding:8px 12px;color:var(--muted);font-size:14px;white-space:nowrap}.form-grid>.seg{grid-column:1 / -1;justify-self:start;max-width:100%;overflow-x:auto}.seg button+button{border-left:1px solid var(--line)}.seg button.on{background:var(--primary);color:var(--primary-ink);font-weight:500}.table-wrap{overflow-x:auto;margin:0 -4px}table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;font-weight:500;color:var(--muted);font-size:13px;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}td{padding:8px;border-bottom:1px solid var(--line);vertical-align:middle}tbody tr:hover{background:var(--hover)}th.r,td.r{text-align:right;white-space:nowrap}.tag{display:inline-block;font-size:12px;padding:1px 8px;border-radius:99px;margin-left:6px}td>.tag:first-child{margin-left:0}.tag-income{background:color-mix(in srgb,var(--pos) 14%,transparent);color:var(--pos)}.tag-expense{background:color-mix(in srgb,var(--neg) 14%,transparent);color:var(--neg)}.budget-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.budget{border:1px solid var(--line);border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:8px}.budget-warn{border-color:color-mix(in srgb,var(--warn) 55%,var(--line))}.budget-over{border-color:color-mix(in srgb,var(--neg) 60%,var(--line))}.debt-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px}.debt-card h2{font-size:17px;display:flex;align-items:center}.debt-balance{font-size:30px;font-weight:600;margin:0;letter-spacing:-.01em}.debt-balance small{font-size:15px;font-weight:400}.facts{display:grid;grid-template-columns:repeat(3,1fr);gap:10px 12px;margin:4px 0 0}.facts dt{font-size:12px;color:var(--muted)}.facts dd{margin:0;font-size:14px}.schedule summary{cursor:pointer;color:var(--primary);font-size:14px;padding:4px 0}.ftmo{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.ftmo>div{display:flex;flex-direction:column;gap:6px}.export-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.export-grid button{text-align:left}.banner-error,.banner-warn{padding:10px 14px;border-radius:8px;font-size:14px;margin:0}.banner-error{background:color-mix(in srgb,var(--neg) 12%,var(--surface));color:var(--neg);margin-bottom:16px}.banner-warn{background:color-mix(in srgb,var(--warn) 14%,var(--surface));color:var(--warn)}.auth{min-height:100vh;display:grid;place-items:center;padding:24px}.auth-card{width:min(400px,100%);background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:32px 28px;display:flex;flex-direction:column;gap:16px}.auth-head{display:flex;flex-direction:column;align-items:flex-start;gap:10px}.auth-head h1{font-size:24px}.auth-head p{margin:0;color:var(--muted)}.auth-links{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:14px}.auth-msg{margin:0;font-size:14px;padding:8px 12px;border-radius:8px}.auth-ok{background:var(--hover);color:var(--primary)}.auth-error{background:color-mix(in srgb,var(--neg) 12%,transparent);color:var(--neg)}.or{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px}.or:before,.or:after{content:"";flex:1;height:1px;background:var(--line)}.toasts{position:fixed;right:16px;bottom:calc(16px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:8px;z-index:50}.toast{background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:8px;font-size:14px;box-shadow:0 6px 20px #0000002e;max-width:340px}.toast-error{background:var(--neg);color:#fff}@media (max-width: 860px){.shell{grid-template-columns:1fr}.side{position:fixed;top:auto;bottom:0;left:0;right:0;height:auto;z-index:40;flex-direction:row;padding:4px 4px calc(4px + env(safe-area-inset-bottom,0px));border-right:0;border-top:1px solid var(--line)}.brand,.side-foot{display:none}.nav{flex-direction:row;width:100%;justify-content:space-between}.nav-link{flex-direction:column;gap:0;padding:6px 2px;font-size:11px;flex:1;text-align:center}.nav-link.active{box-shadow:inset 0 2px 0 var(--primary)}.nav-icon{font-size:17px;width:auto}.main{padding:18px 14px calc(88px + env(safe-area-inset-bottom,0px))}.hero{grid-template-columns:1fr}.hero-side{border-left:0;border-top:1px solid var(--line);flex-direction:row}.goal-ring-block+.goal-ring-block{border-top:0;border-left:1px solid var(--line)}.hero-main{padding:22px 20px}.goal-ring-block{padding:16px}.grid-2,.ftmo{grid-template-columns:1fr}.facts{grid-template-columns:repeat(2,1fr)}.form-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.stat strong{font-size:17px}.stat{padding:12px}.toasts{bottom:calc(80px + env(safe-area-inset-bottom,0px));left:16px;right:16px}}@media (max-width: 480px){.hero-side{flex-direction:column}.goal-ring-block+.goal-ring-block{border-left:0;border-top:1px solid var(--line)}.debt-track{flex-direction:column}.debt-seg{flex:1 1 auto!important}}@media (prefers-reduced-motion: reduce){*{transition:none!important}}.tag-transfer{background:var(--hover);color:var(--muted)}.filters input[type=search]{min-width:180px}.goals-hero{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:24px 28px;display:flex;flex-direction:column;gap:18px}.goals-hero h2{font-size:20px;font-weight:600;margin:0}.goals-hero-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:28px}.goal-big{display:flex;flex-direction:column;gap:10px}.goal-big-name{font-size:16px;font-weight:600}.goal-big-pct{font-size:28px;font-weight:700;color:var(--primary);letter-spacing:-.02em}.goal-big-amount{margin:0;font-size:clamp(30px,4vw,44px);font-weight:700;letter-spacing:-.03em;line-height:1}.goal-big-amount small{font-size:16px;font-weight:400;color:var(--muted);letter-spacing:0}.goal-big .meter{height:18px}.goal-big p{margin:0}@media (max-width: 720px){.goals-hero{padding:18px 16px}}a.btn-primary,a.btn-ghost{display:inline-block;text-decoration:none}
