:root{
  --bg:#EDEEF1; --bg-hi:#F7F7F9; --surface:#FFFFFF; --sunk:#F3F4F6;
  --ink:#0E1015; --ink-2:#363943; --muted:#666A75; --faint:#9A9DA6;
  --line:rgba(14,16,21,.08); --line-2:rgba(14,16,21,.14);
  --good:#0B7F4B; --good-bg:#E2F5EA; --bad:#C8352A; --bad-bg:#FCEBE8; --gold:#94600A; --gold-bg:#FFF1D2; --neutral-bg:#ECEDF1;
  --liq:#2450E6; --liq-light:#6A97FF; --liq-soft:rgba(36,80,230,.08);
  --font:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;
  --ease:cubic-bezier(.2,.7,.1,1); --spring:cubic-bezier(.34,1.56,.64,1);
  --shadow:0 0 0 1px rgba(14,16,21,.05),0 1px 2px rgba(14,16,21,.04),0 18px 40px -26px rgba(14,16,21,.28);
  --r-lg:26px; --r-md:18px; --r-sm:12px;
  --gutter:16px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;background:var(--bg)}
body{font-family:var(--font);font-size:15px;line-height:1.55;color:var(--ink);background:var(--bg);background-image:radial-gradient(1100px 620px at 72% -12%,#fff 0%,rgba(255,255,255,0) 62%);background-repeat:no-repeat;min-height:100vh;min-height:100dvh;overflow-x:hidden;word-break:keep-all;-webkit-font-smoothing:antialiased;font-feature-settings:"ss06" 1}
body.booting .shell,body.booting .foot{opacity:0}
.shell,.foot{transition:opacity .4s var(--ease)}
button,input,select{font:inherit;color:inherit}
button{background:none;border:0;cursor:pointer;-webkit-tap-highlight-color:transparent}
a{color:inherit}
svg{display:block}
:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:8px}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip{position:absolute;left:12px;top:-60px;z-index:100;background:var(--ink);color:#fff;padding:10px 14px;border-radius:10px;text-decoration:none}
.skip:focus{top:12px}
.muted{color:var(--muted)}
.num,.tnum{font-variant-numeric:tabular-nums}

/* ───── buttons ───── */
.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:7px;height:44px;padding:0 18px;border-radius:13px;font-weight:650;font-size:15px;letter-spacing:-.01em;white-space:nowrap;text-decoration:none;transition:transform .16s var(--ease),background .2s,box-shadow .25s,opacity .2s;user-select:none}
.btn svg{width:18px;height:18px;flex:none}
.btn:active{transform:scale(.97)}
.btn.sm{height:40px;padding:0 14px;font-size:14px;border-radius:12px}
.btn.lg{height:54px;padding:0 24px;font-size:16px;border-radius:15px}
.btn.xl{height:58px;width:100%;font-size:17px;font-weight:700;border-radius:17px}
.btn.ink{background:var(--ink);color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.12) inset,0 8px 18px -10px rgba(14,16,21,.6)}
.btn.ink:hover{background:#262931}
.btn.ghost{background:rgba(14,16,21,.055);color:var(--ink)}
.btn.ghost:hover{background:rgba(14,16,21,.09)}
.btn.white{background:#fff;color:var(--ink);box-shadow:0 0 0 1px var(--line-2)}
.btn.liq{background:var(--liq);color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.25) inset,0 14px 26px -14px var(--liq)}
.btn.liq:hover{filter:brightness(1.06)}
.btn.danger{background:var(--bad);color:#fff}
.btn.danger-ghost{background:var(--bad-bg);color:var(--bad)}
.btn:disabled{opacity:.35;cursor:not-allowed;transform:none}
.icon-btn{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;color:var(--ink);transition:background .2s}
.icon-btn:hover{background:rgba(14,16,21,.06)}
.icon-btn svg{width:22px;height:22px}
.link{color:var(--ink);text-decoration:underline;text-underline-offset:3px;font-weight:600}
@media (pointer:coarse){.btn.sm{height:44px}}

/* ───── top bar ───── */
.top{position:sticky;top:0;z-index:40;background:rgba(237,238,241,.86);-webkit-backdrop-filter:saturate(1.6) blur(14px);backdrop-filter:saturate(1.6) blur(14px);border-bottom:1px solid transparent;transition:border-color .3s}
.top.scrolled{border-bottom-color:var(--line)}
.top-in{max-width:1320px;margin:0 auto;height:64px;display:flex;align-items:center;gap:6px;padding:0 var(--gutter)}
.back-btn{display:none;margin-left:-8px}
.brand{display:flex;align-items:center;gap:9px;font-weight:800;font-size:20px;letter-spacing:-.04em;text-decoration:none}
.brand-mark{width:30px;height:30px}
.top-actions{margin-left:auto;display:flex;gap:8px}

/* ───── shell ───── */
.shell{max-width:1320px;margin:0 auto;padding:8px var(--gutter) 40px}
@media (min-width:1024px){
  :root{--gutter:28px}
  .shell{display:grid;grid-template-columns:344px minmax(0,1fr);gap:32px;align-items:start}
  .side{position:sticky;top:76px;max-height:calc(100vh - 92px);overflow:auto;padding:6px 6px 12px;margin:-6px;scrollbar-width:thin}
  .no-goals .shell{display:block}
}
.no-goals .side{display:none}

/* ───── overview ───── */
.eyebrow{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600;color:var(--muted);letter-spacing:-.005em}
.eyebrow svg{width:14px;height:14px;color:var(--liq)}
.ov{background:var(--ink);color:#fff;border-radius:var(--r-lg);padding:22px 22px 18px;position:relative;overflow:hidden;isolation:isolate;box-shadow:0 22px 44px -28px rgba(14,16,21,.7)}
.ov::before{content:"";position:absolute;inset:auto -30% -70% -30%;height:120%;z-index:-1;background:radial-gradient(50% 50% at 50% 50%,rgba(106,151,255,.32),rgba(106,151,255,0) 70%);pointer-events:none}
.ov .eyebrow{color:rgba(255,255,255,.62)}
.ov-big{margin-top:6px;display:flex;align-items:baseline;gap:4px;font-weight:800;line-height:1;letter-spacing:-.05em}
.ov-big .num{font-size:48px}
.ov-big .unit{font-size:20px;font-weight:700;letter-spacing:-.03em;color:rgba(255,255,255,.72)}
.ov-big .num[data-size=m]{font-size:40px}
.ov-big .num[data-size=l]{font-size:30px}
.ov-sub{margin-top:10px;font-size:14px;color:rgba(255,255,255,.66)}
.ov-sub b{color:#fff;font-weight:650}
.stack{margin-top:16px;height:10px;border-radius:99px;background:rgba(255,255,255,.12);display:flex;gap:2px;overflow:hidden}
.stack i{display:block;height:100%;border-radius:2px;background:var(--c);transform-origin:left;animation:grow .9s var(--ease) both}
.stack i:first-child{border-radius:99px 2px 2px 99px}
@keyframes grow{from{transform:scaleX(0)}}
.ov-meta{margin-top:16px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;border-top:1px solid rgba(255,255,255,.1);padding-top:14px}
.ov-meta dt{font-size:12.5px;color:rgba(255,255,255,.55)}
.ov-meta dd{margin-top:2px;font-size:15.5px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;word-break:keep-all;overflow-wrap:anywhere}

/* ───── goal list ───── */
.list-head{display:flex;align-items:baseline;justify-content:space-between;margin:26px 4px 10px}
.list-head h2{font-size:18px;font-weight:750;letter-spacing:-.03em}
.list-head span{font-size:13.5px;color:var(--muted)}
.goal-list{list-style:none;display:grid;gap:10px}
.g-card{position:relative;display:grid;grid-template-columns:68px minmax(0,1fr) auto;gap:14px;align-items:center;padding:14px 16px 14px 12px;border-radius:22px;background:var(--surface);box-shadow:var(--shadow);text-decoration:none;color:inherit;transition:transform .25s var(--ease),box-shadow .25s;animation:rise .6s var(--ease) both;animation-delay:calc(var(--i,0)*60ms)}
.g-card:hover{transform:translateY(-2px);box-shadow:0 0 0 1px rgba(14,16,21,.07),0 2px 4px rgba(14,16,21,.04),0 24px 40px -24px rgba(14,16,21,.32)}
.g-card[aria-current="page"]{box-shadow:0 0 0 2px var(--ink),0 18px 40px -26px rgba(14,16,21,.35)}
@keyframes rise{from{opacity:0;transform:translateY(10px)}}
.g-card canvas{width:68px;height:68px;display:block}
.g-main{min-width:0}
.g-name{display:block;font-size:16px;font-weight:700;letter-spacing:-.025em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.g-amt{display:block;margin-top:2px;font-size:13.5px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.g-amt b{color:var(--ink);font-weight:700}
.g-bar{margin-top:9px;height:4px;border-radius:99px;background:var(--sunk);overflow:hidden}
.g-bar i{display:block;height:100%;border-radius:99px;background:var(--c);transform-origin:left;animation:grow 1s var(--ease) both;animation-delay:calc(var(--i,0)*60ms + 120ms)}
.g-side{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.g-side em{font-style:normal;font-size:12.5px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.add-goal{margin-top:10px;width:100%;height:58px;border-radius:20px;border:1.5px dashed rgba(14,16,21,.18);display:flex;align-items:center;justify-content:center;gap:8px;font-weight:650;color:var(--ink-2);transition:background .2s,border-color .2s}
.add-goal:hover{background:rgba(255,255,255,.6);border-color:rgba(14,16,21,.3)}
.add-goal svg{width:18px;height:18px}

/* ───── status chip ───── */
.chip{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px 0 8px;border-radius:99px;font-size:12.5px;font-weight:700;letter-spacing:-.01em;white-space:nowrap;background:var(--neutral-bg);color:var(--ink-2)}
.chip::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.chip.ahead{background:var(--good-bg);color:var(--good)}
.chip.behind,.chip.overdue{background:var(--bad-bg);color:var(--bad)}
.chip.done,.chip.over{background:var(--gold-bg);color:var(--gold)}
.chip.done::before,.chip.over::before{content:"";width:10px;height:10px;border-radius:0;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 2.8l1.6 4.6 4.6 1.6-4.6 1.6L10 15.2l-1.6-4.6L3.8 9l4.6-1.6z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 2.8l1.6 4.6 4.6 1.6-4.6 1.6L10 15.2l-1.6-4.6L3.8 9l4.6-1.6z'/%3E%3C/svg%3E") center/contain no-repeat}

/* ───── empty ───── */
.empty{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;align-items:center;padding:4px 0 24px}
.empty-orb{order:-1;width:min(360px,88vw);margin:0 auto}
.empty h1{margin-top:14px;font-size:clamp(38px,9.6vw,68px);line-height:1.08;font-weight:800;letter-spacing:-.055em}
.grad{background:linear-gradient(100deg,#1736C9 0%,#4C7DFF 45%,#21B8C9 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
.empty .lead{margin-top:18px;font-size:16.5px;line-height:1.7;color:var(--ink-2);max-width:32em}
.empty-cta{margin-top:26px;display:flex;flex-wrap:wrap;gap:10px}
.empty-points{list-style:none;margin-top:34px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;border-top:1px solid var(--line-2);max-width:560px}
.empty-points li{padding:14px 14px 0 0}
.empty-points b{display:block;font-size:14.5px;font-weight:700;letter-spacing:-.02em}
.empty-points span{display:block;margin-top:2px;font-size:13px;color:var(--muted);line-height:1.5}
@media (min-width:900px){
  .empty{grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:40px;min-height:calc(100vh - 160px);padding:20px 0 40px}
  .empty-orb{order:0;width:100%;max-width:520px}
}
@media (max-width:520px){
  .empty-points{grid-template-columns:1fr}
  .empty-points li{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
  .empty-points span{margin:0;text-align:right}
  .empty-cta .btn{flex:1 1 0;padding:0 14px}
}

/* ───── detail ───── */
.d-head{display:flex;align-items:center;gap:12px;padding:6px 0 4px}
.d-title{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
.d-title h1{font-size:28px;font-weight:800;letter-spacing:-.045em;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.dday{flex:none;display:inline-flex;align-items:center;height:28px;padding:0 10px;border-radius:9px;background:#fff;box-shadow:0 0 0 1px var(--line-2);font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.dday:empty{display:none}
.d-actions{display:flex;gap:6px;flex:none}

.d-hero{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;align-items:center;margin-top:4px}
.orb-slot{position:relative;width:min(380px,92vw);margin:0 auto}
.orb-slot::before{content:"";position:absolute;inset:6% 2% 10%;border-radius:50%;background:radial-gradient(closest-side,rgba(255,255,255,.95),rgba(255,255,255,0));z-index:-1;pointer-events:none}
.orb-stage{position:relative;width:100%;aspect-ratio:1/1.1}
.orb-stage canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:pan-y;cursor:grab}
.orb-stage canvas:active{cursor:grabbing}
.orb-hint{position:absolute;left:50%;bottom:2%;transform:translateX(-50%);font-size:12.5px;font-weight:550;color:var(--muted);white-space:nowrap;padding:6px 11px;border-radius:99px;background:rgba(255,255,255,.7);box-shadow:0 0 0 1px var(--line);transition:opacity .6s}
.orb-hint.gone{opacity:0}

.d-figures{min-width:0}
.hero-num{margin-top:4px;display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 6px;font-weight:800;letter-spacing:-.055em;line-height:.98}
.hero-num .num{font-size:clamp(58px,15vw,96px)}
.hero-num .num[data-size=m]{font-size:clamp(44px,11.5vw,80px)}
.hero-num .num[data-size=l]{font-size:clamp(34px,8.6vw,64px)}
.hero-num .unit{font-size:clamp(24px,5.4vw,34px);font-weight:750;letter-spacing:-.035em;color:var(--ink-2)}
.d-full{margin-top:10px;font-size:14.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.d-full b{color:var(--ink);font-weight:650}
.meter{margin-top:16px;display:flex;align-items:center;gap:12px}
.meter-track{flex:1;height:8px;border-radius:99px;background:rgba(14,16,21,.07);overflow:hidden}
.meter-track i{display:block;height:100%;width:0;border-radius:99px;background:linear-gradient(90deg,var(--liq-light),var(--liq));transition:width 1.1s var(--ease),background .6s}
.meter-pct{font-size:15px;font-weight:750;font-variant-numeric:tabular-nums;min-width:52px;text-align:right}
.status-line{margin-top:14px;display:flex;align-items:flex-start;gap:9px;font-size:15px;font-weight:550;line-height:1.5;color:var(--ink-2)}
.status-line .chip{margin-top:-1px;flex:none}
.kpis{margin-top:20px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line);border-radius:var(--r-md);overflow:hidden;box-shadow:var(--shadow)}
.kpi{background:var(--surface);padding:14px 16px 13px;min-width:0;container-type:inline-size}
.kpi dd{font-size:min(21px,13cqw)!important}
.kpi dt{font-size:13px;font-weight:600;color:var(--muted)}
.kpi dd{margin-top:3px;font-size:21px;font-weight:780;letter-spacing:-.035em;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi small{display:block;margin-top:1px;font-size:12.5px;color:var(--muted);word-break:keep-all;overflow-wrap:anywhere}
.kpi dd.good{color:var(--good)} .kpi dd.bad{color:var(--bad)} .kpi dd.gold{color:var(--gold)}

@media (min-width:700px){
  .d-hero{grid-template-columns:minmax(0,.92fr) minmax(0,1fr);gap:28px;margin-top:8px}
  .orb-slot{width:100%;max-width:440px}
}

/* cards */
.card{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:20px}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.card-h h2{font-size:17px;font-weight:750;letter-spacing:-.03em}
.d-grid{margin-top:22px;display:grid;grid-template-columns:minmax(0,1fr);gap:16px}
.d-grid>*{min-width:0}
@media (min-width:1180px){.d-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.15fr)}}
@media (min-width:700px) and (max-width:1023px){.d-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
.history{margin-top:16px}

/* composer */
.seg{position:relative;display:grid;grid-template-columns:1fr 1fr;padding:4px;border-radius:14px;background:var(--sunk);isolation:isolate}
.seg button{position:relative;z-index:1;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;gap:6px;font-weight:650;color:var(--muted);transition:color .25s}
.seg button svg{width:16px;height:16px}
.seg button[aria-pressed="true"]{color:var(--ink)}
.seg-thumb{position:absolute;z-index:0;top:4px;bottom:4px;left:4px;width:calc(50% - 4px);border-radius:10px;background:#fff;box-shadow:0 1px 2px rgba(14,16,21,.1),0 4px 10px -4px rgba(14,16,21,.15);transition:transform .35s var(--spring)}
.seg.out .seg-thumb{transform:translateX(100%)}
.amount{margin-top:18px;display:flex;align-items:baseline;gap:4px;padding-bottom:8px;border-bottom:2px solid var(--line-2);transition:border-color .25s;cursor:text}
.amount:focus-within{border-color:var(--liq)}
.amount .sign{font-size:30px;font-weight:700;color:var(--liq);width:20px;flex:none;transition:color .3s}
.composer.out .amount .sign{color:var(--bad)}
.amount input{flex:1;min-width:0;border:0;outline:0;background:transparent;font-size:38px;font-weight:800;letter-spacing:-.045em;font-variant-numeric:tabular-nums;padding:0}
.amount input::placeholder{color:rgba(14,16,21,.18)}
.amount .won{font-size:22px;font-weight:700;color:var(--ink-2)}
.reading{margin-top:8px;font-size:14px;font-weight:550;color:var(--muted);min-height:22px}
.reading b{color:var(--ink);font-weight:700}
.quick{margin-top:12px;display:flex;flex-wrap:wrap;gap:6px}
.quick button{height:36px;padding:0 12px;border-radius:10px;background:var(--sunk);font-size:14px;font-weight:650;letter-spacing:-.01em;white-space:nowrap;transition:background .2s,transform .15s}
.quick button:hover{background:#E8E9EC}
.quick button:active{transform:scale(.95)}
@media (pointer:coarse){.quick button{height:44px;padding:0 13px}}
.c-row{margin-top:14px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
.field{display:flex;align-items:center;gap:8px;height:46px;padding:0 14px;border-radius:13px;background:var(--sunk);transition:box-shadow .2s,background .2s}
.field:focus-within{background:#fff;box-shadow:0 0 0 1.5px var(--ink),0 0 0 5px rgba(14,16,21,.06)}
.field input{flex:1;min-width:0;border:0;outline:0;background:transparent;font-size:15px;height:100%}
.field.date{padding:0 10px 0 12px}
.field.date svg{width:17px;height:17px;color:var(--muted);flex:none}
.field.date input{width:128px;flex:none;font-variant-numeric:tabular-nums;font-size:14.5px}
.err{min-height:0;margin-top:6px;font-size:13.5px;font-weight:600;color:var(--bad)}
.err:empty{margin:0}
.composer .btn.xl{margin-top:12px}
.composer.out .btn.liq{background:var(--ink);box-shadow:0 14px 26px -14px rgba(14,16,21,.6)}

/* chart */
.legend{list-style:none;display:flex;gap:12px;font-size:12.5px;font-weight:600;color:var(--muted)}
.legend li{display:flex;align-items:center;gap:6px;white-space:nowrap}
.legend i{display:block;width:16px;height:0;border-top:2px solid var(--liq);border-radius:2px}
.legend .lg-plan{border-top-color:#A6A9B2}
.legend .lg-proj{border-top:2px dashed var(--liq)}
.chart{position:relative;height:250px;touch-action:pan-y;user-select:none}
.chart svg{width:100%;height:100%;overflow:visible}
.chart .ax text{font-size:11.5px;fill:var(--muted);font-variant-numeric:tabular-nums}
.chart .grid line{stroke:rgba(14,16,21,.07);stroke-width:1}
.chart .tgt{stroke:rgba(14,16,21,.45);stroke-width:1}
.chart .tgt-l{font-size:11.5px;font-weight:700;fill:var(--ink-2)}
.chart .area{fill:var(--liq);opacity:.1}
.chart .line{fill:none;stroke:var(--liq);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.chart .plan{fill:none;stroke:#A6A9B2;stroke-width:2;stroke-linecap:round}
.chart .proj{fill:none;stroke:var(--liq);stroke-width:2;stroke-dasharray:5 5;stroke-linecap:round;opacity:.85}
.chart .today{fill:var(--liq);stroke:#fff;stroke-width:2}
.chart .xh{stroke:rgba(14,16,21,.35);stroke-width:1}
.chart .xh-dot{fill:var(--liq);stroke:#fff;stroke-width:2}
.chart .dl{fill:none;stroke:rgba(14,16,21,.16);stroke-width:1}
.tip{position:absolute;top:0;left:0;pointer-events:none;background:var(--ink);color:#fff;padding:7px 10px;border-radius:10px;font-size:12.5px;line-height:1.35;white-space:nowrap;opacity:0;transform:translateY(4px);transition:opacity .15s,transform .2s var(--ease);box-shadow:0 10px 24px -10px rgba(14,16,21,.5)}
.tip b{display:block;font-size:14px;font-weight:700;font-variant-numeric:tabular-nums}
.tip.on{opacity:1;transform:none}
.chart-empty{height:100%;display:grid;place-items:center;text-align:center;color:var(--muted);font-size:14px}

/* history */
.h-month{display:flex;justify-content:space-between;align-items:baseline;padding:16px 4px 8px;font-size:13.5px;font-weight:700;color:var(--ink-2);border-bottom:1px solid var(--line)}
.h-month:first-child{padding-top:0}
.h-month span:last-child{font-variant-numeric:tabular-nums;color:var(--muted);font-weight:600}
.h-row{width:100%;display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 4px;border-radius:14px;text-align:left;transition:background .2s}
.h-row:hover{background:var(--sunk)}
.h-row + .h-row{border-top:1px solid var(--line)}
.h-ic{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:var(--liq-soft);color:var(--liq)}
.h-ic svg{width:18px;height:18px}
.h-row.out .h-ic{background:var(--bad-bg);color:var(--bad)}
.h-row.init .h-ic,.h-row.adjust .h-ic{background:var(--sunk);color:var(--ink-2)}
.h-main{min-width:0}
.h-main b{display:block;font-size:15px;font-weight:650;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.h-main small,.h-amt small{display:block;font-size:12.5px;color:var(--muted);white-space:nowrap}
.h-amt{text-align:right;font-variant-numeric:tabular-nums}
.h-amt b{display:block;font-size:15.5px;font-weight:750;letter-spacing:-.02em;white-space:nowrap}
.h-row.out .h-amt b{color:var(--bad)}
.h-row.new{animation:flash 1.6s var(--ease)}
@keyframes flash{0%{background:var(--liq-soft)}100%{background:transparent}}
.h-empty{padding:28px 8px;text-align:center;color:var(--muted);font-size:14.5px}

/* ───── sheet (dialog) ───── */
.sheet{position:fixed;margin:0;padding:0;border:0;background:transparent;max-width:none;max-height:none;width:100%;height:100%;inset:0;display:none;color:var(--ink);overflow:hidden}
.sheet[open]{display:flex;align-items:flex-end;justify-content:center}
.sheet::backdrop{background:rgba(14,16,21,.42);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);animation:fade .25s var(--ease)}
@keyframes fade{from{opacity:0}}
.sheet-in{position:relative;width:100%;max-height:min(92vh,92dvh);overflow:auto;background:var(--surface);border-radius:26px 26px 0 0;padding:10px 20px calc(20px + env(safe-area-inset-bottom));box-shadow:0 -20px 60px -20px rgba(14,16,21,.4);animation:up .42s var(--ease)}
.sheet-in::before{content:"";display:block;width:40px;height:5px;border-radius:99px;background:rgba(14,16,21,.14);margin:0 auto 12px}
@keyframes up{from{transform:translateY(40px);opacity:0}}
@media (min-width:640px){
  .sheet[open]{align-items:center}
  .sheet-in{width:min(460px,calc(100% - 32px));border-radius:26px;padding:24px 24px 22px;animation:pop .32s var(--ease)}
  .sheet-in::before{display:none}
  @keyframes pop{from{transform:translateY(10px) scale(.98);opacity:0}}
}
.sheet-h{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.sheet-h h2{font-size:22px;font-weight:800;letter-spacing:-.045em;line-height:1.3}
.sheet-h p{margin-top:4px;font-size:14.5px;color:var(--muted);line-height:1.55}
.sheet-h .icon-btn{margin:-8px -10px 0 0;color:var(--muted);flex:none}
/* 오래 보관 결과는 창을 연 뒤에 늦게 와요 — 따로 한 줄(비어 있으면 자리 없음) */
.bk-persist{display:block}
.bk-persist:empty{display:none}
.f{margin-top:18px}
.f > label,.f > .f-l{display:block;font-size:13.5px;font-weight:650;color:var(--ink-2);margin-bottom:7px}
.f .field{height:52px;background:var(--sunk)}
.f .field input{font-size:16px}
.f .field.big input{font-size:22px;font-weight:750;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.f .field .won{font-weight:700;color:var(--ink-2)}
.f .hint{margin-top:6px;font-size:13px;color:var(--muted);min-height:20px}
.f .hint b{color:var(--ink);font-weight:700}
.f .err{margin-top:6px}
.chips{margin-top:8px;display:flex;flex-wrap:wrap;gap:6px}
.chips button{height:34px;padding:0 12px;border-radius:10px;background:var(--sunk);font-size:13.5px;font-weight:650;white-space:nowrap}
.chips button[aria-pressed="true"]{background:var(--ink);color:#fff}
@media (pointer:coarse){.chips button{height:40px}}
.swatches{display:flex;flex-wrap:wrap;gap:10px}
.swatch{position:relative;width:44px;height:44px;border-radius:50%;background:radial-gradient(circle at 32% 28%,rgba(255,255,255,.85) 0 9%,rgba(255,255,255,0) 30%),linear-gradient(180deg,rgba(255,255,255,.65) 0 46%,var(--l) 46%,var(--d) 100%);box-shadow:inset 0 0 0 1px rgba(14,16,21,.12);transition:transform .2s var(--spring)}
.swatch[aria-checked="true"]{box-shadow:inset 0 0 0 1px rgba(14,16,21,.12),0 0 0 3px #fff,0 0 0 5px var(--ink);transform:scale(1.04)}
.seg.f-seg{margin-top:16px}
.sheet-foot{margin-top:24px;display:flex;gap:8px}
.sheet-foot .btn{flex:1}
.sheet-foot .btn.ghost,.sheet-foot .btn.danger-ghost{flex:0 0 auto}
.danger-zone{margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}
.backup-grid{margin-top:18px;display:grid;gap:8px}
.backup-grid .btn{justify-content:flex-start;height:56px;padding:0 16px;border-radius:16px}
.backup-grid .btn small{margin-left:auto;font-size:12.5px;font-weight:550;color:var(--muted)}
.note{margin-top:14px;padding:12px 14px;border-radius:14px;background:var(--sunk);font-size:13.5px;color:var(--ink-2);line-height:1.6}

/* ───── toast ───── */
.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));z-index:80;transform:translate(-50%,20px);opacity:0;pointer-events:none;display:flex;align-items:center;gap:14px;width:max-content;max-width:calc(100vw - 32px);padding:12px 12px 12px 18px;border-radius:16px;background:var(--ink);color:#fff;font-size:14.5px;font-weight:550;box-shadow:0 20px 40px -16px rgba(14,16,21,.6);transition:opacity .3s,transform .4s var(--spring)}
.toast.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.toast button{height:36px;padding:0 12px;border-radius:10px;background:rgba(255,255,255,.12);color:#fff;font-weight:700;font-size:14px;white-space:nowrap}
.toast:not(.has-act){padding-right:18px}

/* ───── footer ───── */
.foot{border-top:1px solid var(--line);margin-top:24px}
.foot-in{max-width:1320px;margin:0 auto;padding:26px var(--gutter) calc(34px + env(safe-area-inset-bottom));display:grid;gap:10px;font-size:13.5px;color:var(--muted);line-height:1.65}
.foot-links{display:flex;flex-wrap:wrap;gap:6px 18px}
.foot-links a{display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:var(--ink-2);font-weight:600}
.foot-links a:hover{text-decoration:underline}
.foot-links svg{width:16px;height:16px}
.copy a{color:var(--ink-2);font-weight:600}
.privacy .link{font-size:inherit;color:var(--ink-2)}

/* ───── mobile routing ───── */
@media (max-width:1023px){
  .is-home.has-goals .main{display:none}
  .is-detail .side{display:none}
  .is-detail .back-btn{display:grid}
  .is-detail .brand span{display:none}
}
@media (max-width:560px){
  .d-title h1{font-size:24px}
  .d-actions .btn{width:44px;height:44px;padding:0}
  .d-actions .btn span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
  .top-actions .btn.ghost span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
  .top-actions .btn.ghost{width:44px;padding:0}
  .card{padding:18px 16px;border-radius:22px}
  .kpi{padding:13px 14px 12px}
  .kpi dd{font-size:19px}
  .chart{height:210px}
  .legend{gap:9px}
  .ov-big .num{font-size:44px}
  .ov-big .num[data-size=m]{font-size:38px}
  .ov-big .num[data-size=l]{font-size:28px}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-delay:0s!important;transition-duration:.001ms!important;transition-delay:0s!important}
}
[hidden]{display:none!important}

/* ───── 정렬 · 보관함 · 백업 알림 ───── */
.list-head{align-items:center;gap:10px;flex-wrap:wrap}
.list-head h2 span{margin-left:4px;font-size:13.5px;font-weight:600;color:var(--muted);letter-spacing:0}
.list-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.sort select{height:40px;padding:0 32px 0 12px;border:0;border-radius:12px;background:rgba(14,16,21,.055) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%230E1015' stroke-opacity='.55' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 11px center;font-size:13.5px;font-weight:650;color:var(--ink);-webkit-appearance:none;appearance:none;cursor:pointer}
.sort select:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
@media (pointer:coarse){.sort select{height:44px}}
.goal-none{padding:18px 4px 4px;font-size:14px;color:var(--muted)}
.archive{margin-top:18px;border-top:1px solid var(--line);padding-top:6px}
.archive summary{display:flex;align-items:center;gap:8px;min-height:44px;padding:0 4px;font-size:14.5px;font-weight:700;color:var(--ink-2);cursor:pointer;list-style:none}
.archive summary::-webkit-details-marker{display:none}
.archive summary svg{width:18px;height:18px;color:var(--muted)}
.archive summary span{font-weight:600;color:var(--muted)}
.archive summary::after{content:"";margin-left:auto;width:8px;height:8px;border-right:1.8px solid var(--muted);border-bottom:1.8px solid var(--muted);transform:rotate(45deg);transition:transform .25s var(--ease)}
.archive[open] summary::after{transform:rotate(-135deg)}
.archive .goal-list{margin-top:6px}
.archive .g-card{opacity:.88}
.archived-note{margin-top:6px;padding:10px 14px;border-radius:14px;background:var(--sunk);font-size:13.5px;color:var(--ink-2)}
.nudge{margin-top:12px;padding:14px 16px;border-radius:18px;background:var(--surface);box-shadow:var(--shadow),0 0 0 1px rgba(23,54,201,.16)}
.nudge p{font-size:14px;line-height:1.6;color:var(--ink-2)}
.nudge p b{color:var(--ink)}
.nudge-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.choice{margin-top:18px;display:grid;gap:8px}
.choice .btn{height:auto;min-height:64px;padding:12px 16px;border-radius:16px;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;white-space:normal;text-align:left}
.choice .btn b{font-size:15.5px}
.choice .btn small{font-size:13px;font-weight:550;color:var(--muted);line-height:1.5}
.reorder{list-style:none;margin-top:16px;display:grid;gap:2px}
.reorder li{display:grid;grid-template-columns:12px minmax(0,1fr) 44px 44px;align-items:center;gap:8px;min-height:52px;border-top:1px solid var(--line)}
.reorder li:first-child{border-top:0}
.ro-dot{width:12px;height:12px;border-radius:50%;background:var(--c)}
.ro-name{min-width:0;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reorder .icon-btn:disabled{opacity:.3}
.app-note{margin-top:10px;font-size:12.5px;color:var(--muted);text-align:center;line-height:1.5}
/* 휴대폰 목표 화면: '돈 넣기' 칸이 아직 아래에 있는 동안 화면 아래에 뜨는 단추(누르면 그 칸으로). 알림이 뜨면 비켜요.
   가운데 맞춤은 translate 로 — transform 으로 하면 누르는 동안 .btn:active 의 scale 이 덮어써서 단추가 오른쪽으로 비켜나 손가락이 밑의 칸을 눌렀어요 */
.jump-add{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));z-index:70;translate:-50% 0;height:48px;padding:0 22px;border-radius:999px;box-shadow:0 14px 30px -12px rgba(14,16,21,.55);transition:opacity .2s}
.jump-add svg{width:18px;height:18px}
.jump-add[hidden]{display:none}
body:has(.toast.on) .jump-add{opacity:0;pointer-events:none}
.composer{scroll-margin-top:76px}
@media (min-width:700px){.jump-add{display:none}}
