/* Stacked: game-like money coach. Tokens first; every colour comes from here. */
:root{
  --bg:#E9EEFA; --app:#F4F7FE; --surface:#FFFFFF; --surface-2:#EEF2FC;
  --ink:#181B34; --ink-2:#5A5F82; --line:#D9DFEF; --line-2:#C6CEE6;
  --blue:#3B5BFF; --blue-deep:#2740C9; --blue-soft:#E1E7FF;
  --gold:#FFB420; --gold-deep:#C98700; --gold-ink:#8A5C00; --gold-soft:#FFF0CC;
  --green:#12B76A; --green-deep:#0A8A4E; --green-soft:#D9F6E8;
  --coral:#FF5A5F; --coral-deep:#D23B40; --coral-soft:#FFE1E2;
  --white:#FFFFFF; --shadow:0 30px 60px -30px rgba(24,27,52,.35);
  --display:'Baloo 2','Trebuchet MS',system-ui,sans-serif;
  --body:'Nunito Sans',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){
  :root{
    color-scheme:dark;
    --bg:#0B0E1F; --app:#11152B; --surface:#191E3A; --surface-2:#20264A;
    --ink:#F1F3FF; --ink-2:#A4AAD0; --line:#2A3060; --line-2:#363D74;
    --blue:#6B83FF; --blue-deep:#3E55D6; --blue-soft:#1F2758;
    --gold-ink:#FFC857; --gold-soft:#3A2E0E; --green-soft:#0F3626; --coral-soft:#3E1A20;
    --shadow:0 30px 60px -30px rgba(0,0,0,.7);
  }
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.45}
a{color:inherit}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
img{max-width:100%}
[hidden]{display:none!important}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--ink-2)}
.fine{font-size:12.5px;color:var(--ink-2);line-height:1.45}
p{margin:0}
h1,h2,h3{margin:0;font-family:var(--display);font-weight:800;text-wrap:balance}
h1{font-size:30px;line-height:1.1}
h2{font-size:22px;line-height:1.15}
h3{font-size:18px;line-height:1.2}
.eyebrow{font:800 12px var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- Shell ---------- */
.shell{position:relative;max-width:480px;margin:0 auto;min-height:100dvh;background:var(--app);display:flex;flex-direction:column}
@media (min-width:560px){
  body{padding-block:24px}
  .shell{min-height:calc(100dvh - 48px);border:1px solid var(--line);border-radius:34px;box-shadow:var(--shadow);overflow:clip}
}
.screen{flex:1;display:flex;flex-direction:column;gap:14px;padding:4px 16px 28px}

.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:12px;padding:calc(14px + env(safe-area-inset-top,0px)) 16px 12px;background:var(--app)}
.avatar{width:44px;height:44px;border-radius:14px;background:var(--gold);color:#3A2600;display:grid;place-items:center;font:800 22px var(--display);box-shadow:0 3px 0 var(--gold-deep);flex:none;text-decoration:none}
.lvl{flex:1;min-width:0}
.lvl-name{font:800 15px var(--display);line-height:1.1;display:flex;gap:6px;align-items:baseline;flex-wrap:wrap}
.lvl-name small{font:700 12px var(--body);color:var(--ink-2)}
.xpbar{height:10px;background:var(--surface-2);border-radius:99px;margin-top:6px;overflow:hidden;border:1px solid var(--line)}
.xpbar i{display:block;height:100%;background:var(--gold);border-radius:99px}

.tabbar{position:sticky;bottom:0;z-index:10;display:grid;grid-template-columns:repeat(5,1fr);align-items:center;padding:8px 10px calc(10px + env(safe-area-inset-bottom,0px));border-top:2px solid var(--line);background:var(--surface)}
.tab{display:grid;justify-items:center;gap:2px;font:800 11px var(--body);color:var(--ink-2);padding:6px 0;border-radius:14px;text-decoration:none}
.tab svg{width:24px;height:24px}
.tab[aria-current="page"]{color:var(--blue);background:var(--blue-soft)}
.fab{justify-self:center;width:56px;height:56px;border-radius:18px;background:var(--blue);color:#fff;box-shadow:0 4px 0 var(--blue-deep);display:grid;place-items:center;margin-top:-22px}
.fab svg{width:28px;height:28px}
.fab:active{transform:translateY(3px);box-shadow:0 1px 0 var(--blue-deep)}

/* ---------- Building blocks ---------- */
.card{background:var(--surface);border:2px solid var(--line);border-bottom-width:4px;border-radius:22px;padding:16px}
.row{display:flex;align-items:center;gap:12px}
.spread{display:flex;align-items:center;justify-content:space-between;gap:12px}
.stack{display:grid;gap:12px}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:16px;padding:12px 18px;font:800 16px var(--display);background:var(--blue);color:var(--white);box-shadow:0 4px 0 var(--blue-deep);text-decoration:none;transition:transform .08s,box-shadow .08s}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--blue-deep)}
.btn svg{width:20px;height:20px}
.btn.block{width:100%}
.btn.big{padding:15px 20px;font-size:18px;border-radius:18px}
.btn.light{background:var(--white);box-shadow:0 4px 0 rgba(0,0,0,.18)}
.btn.gold{background:var(--gold);color:#3A2600;box-shadow:0 4px 0 var(--gold-deep)}
.btn.small{padding:7px 12px;font-size:14px;border-radius:12px}
.btn.ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 2px var(--line-2)}
.btn.ghost:active{box-shadow:inset 0 0 0 2px var(--line-2)}
.icon-btn{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--surface);border:2px solid var(--line);color:var(--ink);flex:none;text-decoration:none}
.icon-btn svg{width:20px;height:20px}

.chip{display:inline-flex;align-items:center;gap:6px;border-radius:99px;padding:3px 10px;font:800 12px var(--body);background:var(--surface-2);color:var(--ink-2);white-space:nowrap}
.chip.need{background:var(--blue-soft);color:var(--blue)}
.chip.want{background:var(--gold-soft);color:var(--gold-ink)}
.chip.warn{background:var(--coral-soft);color:var(--coral-deep)}
.chip.ok{background:var(--green-soft);color:var(--green-deep)}
.chips{display:flex;flex-wrap:wrap;gap:8px}

/* list items */
.item{display:flex;align-items:center;gap:12px;padding:10px 0}
.item + .item{border-top:1px solid var(--line)}
.ico{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;flex:none}
.ico svg{width:21px;height:21px}
.ico.need{background:var(--blue-soft);color:var(--blue)}
.ico.want{background:var(--gold-soft);color:var(--gold-ink)}
.ico.in{background:var(--green-soft);color:var(--green-deep)}
.item .name{font-weight:800;line-height:1.2}
.item .sub{font-size:13px;color:var(--ink-2);font-weight:600}
.item .amt{margin-left:auto;font:800 17px var(--display);text-align:right;white-space:nowrap}
.grow1{flex:1;min-width:0}
.logo{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;font:800 16px var(--display);color:#fff;flex:none;letter-spacing:-.02em}

/* ---------- Home ---------- */
.hero{border-radius:26px;padding:18px 18px 16px;color:var(--white);position:relative;overflow:hidden}
.hero.bad{background:var(--coral);box-shadow:0 6px 0 var(--coral-deep)}
.hero.good{background:var(--green);box-shadow:0 6px 0 var(--green-deep)}
.hero.empty{background:var(--blue);box-shadow:0 6px 0 var(--blue-deep)}
.hero .eyebrow{color:rgba(255,255,255,.88)}
.hero .big{font:800 58px/1 var(--display);letter-spacing:-.02em;margin:6px 0 4px}
.hero p{font-weight:700;opacity:.95;max-width:32ch}
.hero .coin{position:absolute;right:-26px;top:-26px;width:130px;height:130px;border-radius:50%;background:rgba(255,255,255,.14)}
.hero .coin::after{content:"";position:absolute;inset:22px;border-radius:50%;border:6px solid rgba(255,255,255,.18)}
.hero .actions{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap;position:relative}
.bad .btn.light{color:var(--coral-deep)}
.good .btn.light{color:var(--green-deep)}
.empty .btn.light{color:var(--blue-deep)}

.flow{display:grid;gap:10px}
.flow-row{display:grid;grid-template-columns:44px 1fr auto;gap:10px;align-items:center;font-weight:800}
.flow-row .v{font-family:var(--display)}
.track{height:18px;border-radius:8px;background:var(--surface-2);overflow:hidden}
.track i{display:block;height:100%;border-radius:8px}

.lesson{background:var(--blue-soft);border-color:transparent;border-bottom-color:var(--line-2)}
.lesson .tag{display:inline-flex;align-items:center;gap:6px;font:800 12px var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--blue)}
.lesson .tag svg{width:16px;height:16px}

.statgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.stat{background:var(--surface-2);border-radius:14px;padding:10px 12px}
.stat b{display:block;font:800 20px var(--display)}
.stat span{font-size:12px;color:var(--ink-2);font-weight:700}

/* ---------- Bills ---------- */
.bignum{font:800 50px/1 var(--display);letter-spacing:-.02em}
.meter{display:flex;height:26px;border-radius:10px;overflow:hidden;background:var(--surface-2);margin:12px 0 8px}
.meter i{display:block;height:100%}
.legend{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;font-size:13px}
.legend b{display:block;font:800 18px var(--display)}
.dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:middle}
.answer{background:var(--surface-2);border-radius:16px;padding:12px 14px;font-weight:700;font-size:14px}
.answer b{font-family:var(--display);font-size:17px}
.hunter{border-color:var(--gold);border-bottom-color:var(--gold-deep)}
.hunter .eyebrow{color:var(--gold-ink)}
.hunter-total{font:800 40px/1 var(--display);margin-top:6px}
.edit-link{display:inline-flex;align-items:center;gap:6px;font:800 14px var(--display);color:var(--blue);text-decoration:none}
.edit-link svg{width:16px;height:16px}

/* ---------- Locked tabs ---------- */
.locked{display:grid;justify-items:center;text-align:center;gap:10px;padding:28px 18px}
.locked .badge{width:72px;height:72px;border-radius:24px;display:grid;place-items:center;background:var(--gold-soft);color:var(--gold-ink)}
.locked .badge svg{width:36px;height:36px}
.locked p{max-width:34ch}
.preview-list{display:grid;gap:10px;text-align:left;width:100%}
.preview-list li{display:flex;gap:10px;align-items:flex-start;font-weight:700}
.preview-list svg{width:18px;height:18px;color:var(--green);flex:none;margin-top:2px}
ul.plain{list-style:none;margin:0;padding:0}

/* ---------- Forms ---------- */
.field{display:grid;gap:6px}
.field label,.label{font-weight:800;font-size:14px}
.input{width:100%;border:2px solid var(--line);border-bottom-width:3px;background:var(--surface);border-radius:14px;padding:11px 13px;font-size:16px;font-weight:700;min-width:0}
.input:focus{outline:none;border-color:var(--blue)}
.input::placeholder{color:var(--ink-2);opacity:.7;font-weight:600}
select.input{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-2) 50%),linear-gradient(135deg,var(--ink-2) 50%,transparent 50%);background-position:calc(100% - 17px) 52%,calc(100% - 12px) 52%;background-size:5px 5px;background-repeat:no-repeat;padding-right:30px}
.money{position:relative}
.money span{position:absolute;left:13px;top:50%;transform:translateY(-50%);font:800 17px var(--display);color:var(--ink-2);pointer-events:none}
.money .input{padding-left:26px;font:800 17px var(--display)}
.error{color:var(--coral-deep);font-weight:800;font-size:13px}
.input.bad{border-color:var(--coral)}
.alert{background:var(--coral-soft);color:var(--coral-deep);border-radius:14px;padding:10px 14px;font-weight:800;font-size:14px}
.check{display:flex;gap:10px;align-items:center;font-weight:700}
.check input{width:20px;height:20px;accent-color:var(--blue)}

/* ---------- Auth ---------- */
.auth-shell{padding:calc(32px + env(safe-area-inset-top,0px)) 20px 28px;gap:20px}
.brand{display:grid;justify-items:center;gap:6px;text-align:center;padding-top:12px}
.brand img{border-radius:18px;box-shadow:0 4px 0 var(--blue-deep)}
.brand-name{font:800 44px/1 var(--display);letter-spacing:-.02em}
.brand-name span{color:var(--gold)}
.link{color:var(--blue);font-weight:800;text-decoration:none}

/* ---------- Setup ---------- */
.setup-top{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:12px;padding:calc(14px + env(safe-area-inset-top,0px)) 16px 12px;background:var(--app)}
.stepbar{flex:1;height:14px;border-radius:99px;background:var(--surface-2);border:1px solid var(--line);overflow:hidden}
.stepbar i{display:block;height:100%;background:var(--green);border-radius:99px;transition:width .5s}
.setup-screen{padding-bottom:0}
.coachline{display:flex;gap:12px;align-items:flex-start}
.coachline .avatar{width:48px;height:48px;border-radius:16px;background:var(--blue);color:#fff;box-shadow:0 3px 0 var(--blue-deep)}
.coachline .avatar svg{width:24px;height:24px}
.bubble{background:var(--surface);border:2px solid var(--line);border-radius:4px 18px 18px 18px;padding:10px 14px;font-weight:700}
.savebar{position:sticky;bottom:0;z-index:5;margin:6px -16px 0;padding:12px 16px calc(14px + env(safe-area-inset-bottom,0px));background:var(--app);border-top:2px solid var(--line);display:grid;gap:10px}
/* Inside the app, the sticky save bar sits just above the tab bar (73px + safe area). */
.in-app .savebar{bottom:calc(73px + env(safe-area-inset-bottom,0px));padding-bottom:12px;border-bottom:2px solid var(--line)}
.running{display:flex;justify-content:space-between;align-items:baseline;font-weight:800}
.running b{font:800 22px var(--display)}

/* category rows (bills / fun) */
.brow{display:grid;grid-template-columns:40px 1fr;gap:10px 12px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}
.brow:first-child{border-top:0}
.brow .inputs{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.brow .inputs .full{grid-column:1/-1}
.brow .title{font-weight:800;line-height:1.2}
.brow .hint{font-size:12.5px;color:var(--ink-2);font-weight:600}
.brow.filled .ico{outline:3px solid var(--green);outline-offset:2px}
.rm{border:0;background:var(--surface-2);color:var(--ink-2);width:32px;height:32px;border-radius:10px;display:grid;place-items:center;justify-self:end}
.rm svg{width:16px;height:16px}

/* income rows */
.irow{display:grid;gap:10px}
.cats{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}
.cats::-webkit-scrollbar{display:none}
.cat{position:relative;flex:none}
.cat input{position:absolute;opacity:0;pointer-events:none}
.cat span{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--line);border-bottom-width:4px;background:var(--surface);border-radius:14px;padding:7px 11px;font-weight:800;font-size:14px;cursor:pointer}
.cat span svg{width:16px;height:16px}
.cat input:checked + span{border-color:var(--green);background:var(--green-soft);color:var(--green-deep)}
.cat input:focus-visible + span{outline:3px solid var(--blue);outline-offset:2px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:8px;align-items:end}

/* subscription tiles */
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px}
.tile{position:relative;background:var(--surface);border:2px solid var(--line);border-bottom-width:4px;border-radius:18px;padding:12px;display:grid;gap:8px;align-content:start}
.tile > label{display:grid;gap:8px;cursor:pointer}
.tile .toggle{position:absolute;opacity:0;pointer-events:none}
.tile .tname{font-weight:800;line-height:1.2;font-size:14px}
.tile .tprice{font-size:12.5px;color:var(--ink-2);font-weight:700}
.tile .tick{position:absolute;top:10px;right:10px;width:24px;height:24px;border-radius:8px;border:2.5px solid var(--line-2);display:grid;place-items:center;color:#fff}
.tile .tick svg{width:14px;height:14px;opacity:0}
.tile .more{display:none;gap:8px}
.tile:has(.toggle:checked){border-color:var(--blue);background:var(--blue-soft)}
.tile:has(.toggle:checked) .tick{background:var(--blue);border-color:var(--blue)}
.tile:has(.toggle:checked) .tick svg{opacity:1}
.tile:has(.toggle:checked) .more{display:grid}
.tile:has(.toggle:checked) .tprice{display:none}
.tile:has(.toggle:focus-visible){outline:3px solid var(--blue);outline-offset:2px}
.tile .money .input{padding:8px 8px 8px 22px;font-size:15px;border-radius:11px}
.tile .money span{left:10px;font-size:15px}
.tile .check{font-size:12.5px;gap:6px}
.tile .check input{width:16px;height:16px}

/* reveal */
.reveal{display:grid;gap:16px;text-align:center;justify-items:center;padding-top:10px}
.reveal .hero{width:100%;text-align:left}
.xp-pop{display:inline-flex;align-items:center;gap:8px;background:var(--gold-soft);color:var(--gold-ink);border-radius:99px;padding:8px 14px;font:800 16px var(--display)}
.xp-pop svg{width:18px;height:18px}

/* ---------- Log sheet ---------- */
.sheet-wrap{position:fixed;inset:0;z-index:40}
.scrim{position:absolute;inset:0;background:rgba(10,12,30,.5);animation:fadein .2s ease both}
@keyframes fadein{from{opacity:0}}
.sheet{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:min(480px,100%);max-height:92dvh;overflow-y:auto;background:var(--surface);border-radius:28px 28px 0 0;padding:12px 16px calc(20px + env(safe-area-inset-bottom,0px));display:grid;gap:12px;animation:sheetup .28s cubic-bezier(.2,.9,.3,1.1) both}
@keyframes sheetup{from{transform:translate(-50%,40px);opacity:.6}}
.grab{width:44px;height:5px;border-radius:99px;background:var(--line-2);justify-self:center}
.seg{display:grid;grid-template-columns:1fr 1fr;gap:6px;background:var(--surface-2);border-radius:16px;padding:5px}
.seg label{position:relative}
.seg input{position:absolute;opacity:0;pointer-events:none}
.seg span{display:block;text-align:center;padding:9px 6px;border-radius:12px;font:800 15px var(--display);color:var(--ink-2);cursor:pointer}
.seg input:checked + span{background:var(--surface);color:var(--ink);box-shadow:0 2px 0 var(--line-2)}
.seg input:focus-visible + span{outline:3px solid var(--blue)}
.amt-in{display:flex;align-items:center;gap:4px;font:800 44px/1.1 var(--display);border-bottom:3px solid var(--line);padding-bottom:4px;cursor:text}
.amt-in span{color:var(--ink-2)}
.amt-in input{border:0;background:transparent;font:inherit;color:var(--ink);width:100%;min-width:0;outline:none;padding:0}
.amt-in:focus-within{border-color:var(--blue)}
.cats.wrap{flex-wrap:wrap;overflow:visible}
.logform [data-for="earn"]{display:none}
.logform:has(input[name="type"][value="earn"]:checked) [data-for="earn"]{display:flex}
.logform:has(input[name="type"][value="earn"]:checked) [data-for="spend"]{display:none}
.logform:has(input[name="type"][value="earn"]:checked) .amt-in input{color:var(--green-deep)}
.chip[data-set-date]{border:0;cursor:pointer}

/* ---------- Budgets + checklist ---------- */
.budget-row{display:flex;gap:12px;align-items:center;padding:10px 0}
.budget-row + .budget-row{border-top:1px solid var(--line)}
.budget-row .name{font-weight:800}
.budget-row .sub{font-size:12.5px;color:var(--ink-2);font-weight:700;margin-top:3px}
.bar{height:10px;border-radius:99px;background:var(--surface-2);overflow:hidden;margin-top:6px}
.bar i{display:block;height:100%;border-radius:99px;background:var(--green)}
.bar.close i{background:var(--gold)}
.bar.over i{background:var(--coral)}
.paidbox{width:30px;height:30px;border-radius:10px;border:2.5px solid var(--line-2);background:transparent;display:grid;place-items:center;color:transparent;flex:none;padding:0}
.paidbox svg{width:16px;height:16px}
.paidbox[aria-pressed="true"]{background:var(--green);border-color:var(--green);color:#fff}
.item.is-paid .name{text-decoration:line-through;color:var(--ink-2)}
.item.is-paid .amt{color:var(--ink-2)}
.recap{border-color:var(--green);border-bottom-color:var(--green-deep)}
.recap .eyebrow{color:var(--green-deep)}

/* ---------- Phase 3: hunter, gigs, ladder ---------- */
.pill{border:0;border-radius:12px;padding:7px 11px;font:800 13px var(--display);background:var(--coral-soft);color:var(--coral-deep);flex:none;cursor:pointer}
.pill.undo{background:var(--surface-2);color:var(--ink-2)}
.gigs{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.gig{display:flex;flex-direction:column;gap:1px;border:2px solid var(--line);border-bottom-width:4px;background:var(--surface);border-radius:14px;padding:8px 11px;font-weight:800;font-size:14px;line-height:1.25;text-decoration:none;color:var(--ink)}
.gig small{font-size:12px;font-weight:700;color:var(--ink-2)}
.gig[aria-current="true"] small{color:var(--blue)}
.gig[aria-current="true"]{border-color:var(--blue);background:var(--blue-soft);color:var(--blue)}
.ladder{display:grid}
.step{display:grid;grid-template-columns:40px 1fr;gap:12px;position:relative;padding-bottom:18px}
.step:not(:last-child)::before{content:"";position:absolute;left:19px;top:42px;bottom:2px;width:2px;background:var(--line)}
.dotn{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font:800 18px var(--display);background:var(--surface-2);color:var(--ink-2);border:2px solid var(--line)}
.dotn svg{width:20px;height:20px}
.step.done .dotn{background:var(--green);border-color:var(--green);color:#fff}
.step.now .dotn{background:var(--gold);border-color:var(--gold-deep);color:#3A2600;box-shadow:0 0 0 5px var(--gold-soft)}
.step.next{opacity:.62}
.step h3{font-size:17px;padding-top:8px}
.step p{font-size:14px;color:var(--ink-2);margin-top:2px}
.why{margin-top:6px}
.why summary{cursor:pointer;font:800 13px var(--body);color:var(--blue);list-style:none}
.why summary::-webkit-details-marker{display:none}
.why summary::before{content:"+ "}
.why[open] summary::before{content:"− "}
.why p{background:var(--surface-2);border-radius:12px;padding:10px 12px;margin-top:6px;color:var(--ink)}
.range{width:100%;accent-color:var(--blue)}
.calc-out{font:800 44px/1 var(--display);color:var(--blue);margin-top:4px}
.chart{width:100%;height:auto;display:block;margin-top:10px}
[data-tm-out].loading{opacity:.6;transition:opacity .15s}

/* ---------- Phase 4: streak, quests, lessons, notifications ---------- */
.streak{display:flex;align-items:center;gap:3px;font:800 18px var(--display);color:#FF7A1A;text-decoration:none;flex:none;padding:4px 6px;border-radius:12px}
.streak svg{width:22px;height:22px}
.streak.cold{color:var(--ink-2);opacity:.6}
.streak.at-risk svg{animation:flicker 1.6s ease-in-out infinite}
@keyframes flicker{50%{opacity:.45}}
.quest{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:2px dashed var(--line)}
.quest:first-child{border-top:0}
.qbox{width:28px;height:28px;border-radius:9px;border:2.5px solid var(--line-2);display:grid;place-items:center;flex:none;color:#fff}
.qbox svg{width:16px;height:16px}
.quest.ready .qbox,.quest.claimed .qbox{background:var(--green);border-color:var(--green)}
.quest.claimed .qtext{text-decoration:line-through;color:var(--ink-2)}
.qtext{flex:1;font-weight:700;line-height:1.3}
.xp{font:800 13px var(--display);color:var(--gold-ink);background:var(--gold-soft);padding:2px 8px;border-radius:99px;flex:none;white-space:nowrap}
.checkin-row{display:flex;gap:8px;flex-wrap:wrap;padding:0 0 10px 40px}
.lesson-list .item{text-decoration:none}
.lesson-list .num-badge{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;font:800 16px var(--display);background:var(--surface-2);color:var(--ink-2);flex:none}
.lesson-list .read .num-badge{background:var(--green-soft);color:var(--green-deep)}
.lesson-list .today .num-badge{background:var(--gold);color:#3A2600}
.lesson-list .locked-l{opacity:.5}
.lesson-body{font-size:17px;line-height:1.6}
.try{background:var(--gold-soft);border-radius:16px;padding:12px 14px}
.try b{display:block;font:800 13px var(--body);letter-spacing:.06em;text-transform:uppercase;color:var(--gold-ink);margin-bottom:2px}
select.due{font-size:14px;font-weight:700;color:var(--ink-2)}
.notify-state{font-weight:800}

/* ---------- Phase 5: import ---------- */
.dropzone{display:grid;justify-items:center;gap:4px;text-align:center;border:2.5px dashed var(--line-2);border-radius:18px;padding:22px 14px;cursor:pointer;background:var(--surface-2);color:var(--blue)}
.dropzone .name{font-weight:800;color:var(--ink)}
.dropzone .sub{font-size:13px;color:var(--ink-2);font-weight:600;word-break:break-all}
.dropzone:focus-within{outline:3px solid var(--blue);outline-offset:2px}
.dropzone.has-file{border-style:solid;border-color:var(--green);background:var(--green-soft)}
.steps{margin:8px 0 0;padding-left:20px;display:grid;gap:8px;color:var(--ink-2)}
.steps b{color:var(--ink)}
.irow-imp{display:grid;grid-template-columns:1fr auto;gap:6px 12px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.irow-imp:first-child{border-top:0}
.irow-imp .name{font-weight:800;line-height:1.2}
.irow-imp .sub{font-size:12.5px;color:var(--ink-2);font-weight:600}
.irow-imp .amt{font:800 16px var(--display);white-space:nowrap}
.irow-imp select{grid-column:1/-1;padding:8px 30px 8px 11px;font-size:14px}
details.card > summary{list-style:none}
details.card > summary::-webkit-details-marker{display:none}

/* ---------- Phase 6: family ---------- */
.family-btn{position:relative;width:40px;height:40px;border-radius:12px;display:grid;place-items:center;color:var(--ink-2);text-decoration:none;flex:none}
.family-btn svg{width:24px;height:24px}
.family-btn .dot{position:absolute;top:6px;right:6px;width:10px;height:10px;border-radius:50%;background:var(--coral);border:2px solid var(--app)}
.feed-item{display:flex;gap:12px;align-items:center;padding:10px 0;scroll-margin-top:90px}
.feed-item + .feed-item{border-top:1px solid var(--line)}
.feed-item .name{font-weight:600;line-height:1.3}
.feed-item .name b{font-weight:800}
.feed-item .sub{font-size:12.5px;color:var(--ink-2);font-weight:600;margin-top:2px}
.feed-icon{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;flex:none;background:var(--gold-soft);color:var(--gold-ink)}
.feed-icon svg{width:20px;height:20px}
.feed-icon.kind-gap,.feed-icon.kind-ladder{background:var(--green-soft);color:var(--green-deep)}
.feed-icon.kind-lessons,.feed-icon.kind-cut{background:var(--blue-soft);color:var(--blue)}
.cheer{border:2px solid var(--line);border-bottom-width:4px;background:var(--surface);border-radius:12px;padding:6px 10px;font:800 13px var(--display);color:var(--ink);white-space:nowrap;cursor:pointer}
.cheer.on{border-color:var(--gold);background:var(--gold-soft);color:var(--gold-ink)}
.choice{display:flex;gap:12px;align-items:flex-start;border:2px solid var(--line);border-radius:16px;padding:12px;cursor:pointer}
.choice input{width:20px;height:20px;margin-top:2px;accent-color:var(--blue);flex:none}
.choice span{display:grid;gap:2px}
.choice small{color:var(--ink-2);font-weight:600;font-size:13px;line-height:1.4}
.choice:has(input:checked){border-color:var(--blue);background:var(--blue-soft)}

/* toast + confetti */
.toast{position:fixed;left:50%;top:calc(78px + env(safe-area-inset-top,0px));transform:translateX(-50%);z-index:30;background:var(--ink);color:var(--app);padding:10px 16px;border-radius:16px;font-weight:800;font-size:14px;box-shadow:0 10px 30px rgba(0,0,0,.25);max-width:calc(100% - 32px);text-align:center;animation:pop .35s cubic-bezier(.2,.9,.3,1.4) both, fade .4s ease 3.2s forwards}
@keyframes pop{from{transform:translate(-50%,-10px) scale(.9)}to{transform:translate(-50%,0) scale(1)}}
@keyframes fade{to{opacity:0;visibility:hidden}}
#confetti{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:50}

.screen > *{animation:rise .35s ease both}
@keyframes rise{from{transform:translateY(8px)}to{transform:none}}
@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}
