:root{
  --ground:#14120f; --surface:#1d1a16; --raised:#27231d; --line:#3a342b; --line-soft:#2c2822;
  --text:#f3eee5; --muted:#a89e8e; --faint:#6f675b;
  --ember:#ff7a2f; --ember-deep:#e0551a; --gold:#f4c35a;
  --str:#f0605a; --end:#ff9e45; --dis:#5ed39b; --rec:#62adf5; --kit:#f2779a; --good:#5ed39b;
  --r-sm:10px; --r:16px; --tab-h:64px;
  --display:"Chakra Petch","Noto Sans TC",system-ui,sans-serif;
  --body:"Noto Sans TC",-apple-system,"PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
  color-scheme:dark;
}
html,body{height:100%}
body{background:var(--ground);color:var(--text);font-family:var(--body);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer;touch-action:manipulation}
:focus-visible{outline:2px solid var(--gold);outline-offset:2px;border-radius:6px}
.num{font-family:var(--display);font-variant-numeric:tabular-nums}
.app{max-width:480px;margin:0 auto;min-height:100%;position:relative;padding-bottom:calc(var(--tab-h) + env(safe-area-inset-bottom,0px) + 24px)}
@media (min-width:520px){ body{background:radial-gradient(1200px 600px at 50% -10%,#2a1c12 0,var(--ground) 60%) fixed} .app{border-inline:1px solid var(--line-soft);background:var(--ground)} }

/* ---------- HUD ---------- */
.hud{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:linear-gradient(var(--ground) 80%,rgba(20,18,15,.92));padding:14px 16px 12px;border-bottom:1px solid var(--line-soft)}
.hud-row{display:flex;align-items:center;gap:12px}
.lv{position:relative;width:52px;height:52px;flex:none}
.lv svg{position:absolute;inset:0;transform:rotate(-90deg)}
.lv-ring-bg{stroke:var(--raised)} .lv-ring{stroke:url(#emberGrad);transition:stroke-dashoffset .6s cubic-bezier(.2,.8,.2,1)}
.lv-num{position:absolute;inset:0;display:grid;place-items:center;line-height:1}
.lv-num small{display:block;font-size:9px;letter-spacing:.12em;color:var(--muted);font-family:var(--display)}
.lv-num b{font-family:var(--display);font-size:20px;font-weight:700}
.hud-title{flex:1;min-width:0}
.hud-title .t{font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hud-title .xp{font-size:12px;color:var(--muted)}
.streak{text-align:right}
.streak b{font-family:var(--display);font-size:22px;color:var(--ember);display:flex;align-items:center;gap:4px;justify-content:flex-end}
.streak b svg{width:18px;height:18px}
.streak span{font-size:11px;color:var(--muted)}
.xpbar{height:6px;background:var(--raised);border-radius:99px;overflow:hidden;margin-top:10px}
.xpbar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--ember-deep),var(--ember),var(--gold));border-radius:inherit;transition:width .6s cubic-bezier(.2,.8,.2,1)}
.xpmeta{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-top:5px;gap:8px}

/* ---------- 共用 ---------- */
main{padding:4px 16px 0}
.view{display:flex;flex-direction:column;gap:18px;padding-top:14px;animation:viewIn .25s ease-out}
@keyframes viewIn{from{opacity:.4;transform:translateY(6px)}to{opacity:1;transform:none}}
h2.sec{font-size:12px;letter-spacing:.14em;color:var(--muted);font-weight:700;margin:0 0 8px;display:flex;align-items:center;justify-content:space-between}
h2.sec em{font-style:normal;font-family:var(--display);letter-spacing:0;color:var(--faint);font-weight:500}
.card{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--r);padding:14px}
.list{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--r);overflow:hidden}
.muted{color:var(--muted)} .small{font-size:12px} .tiny{font-size:11px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 16px;border-radius:12px;border:1px solid var(--line);background:var(--raised);font-weight:700;transition:transform .12s,background .15s}
.btn:active{transform:scale(.97)}
.btn.primary{background:var(--ember);border-color:var(--ember);color:#1a0d05}
.btn.kit{background:rgba(242,119,154,.12);border-color:rgba(242,119,154,.35);color:var(--kit)}
.btn.block{width:100%}
.btn svg{width:18px;height:18px}
.row-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pill{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;background:var(--raised);color:var(--muted)}
.bar{height:6px;background:var(--raised);border-radius:99px;overflow:hidden}
.bar i{display:block;height:100%;border-radius:inherit;transition:width .5s cubic-bezier(.2,.8,.2,1)}
svg.ic{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}

/* ---------- 日期列 ---------- */
.daynav{display:flex;align-items:center;gap:8px}
.daynav .mid{flex:1;text-align:center}
.daynav .date{font-family:var(--display);font-size:20px;font-weight:700}
.daynav .ch{font-size:12px;color:var(--muted)}
.icon-btn{width:44px;height:44px;border-radius:12px;border:1px solid var(--line-soft);background:var(--surface);display:grid;place-items:center;transition:transform .12s}
.icon-btn:active{transform:scale(.92)}
.today-link{display:block;margin:6px auto 0;background:none;border:0;color:var(--gold);font-size:12px;font-weight:700;min-height:28px}
.dayprog{margin-top:12px}
.dayprog .lbl{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-bottom:6px}
.dayprog .lbl b{color:var(--text);font-family:var(--display)}
.dayprog.cleared .lbl b{color:var(--good)}
.toggle-row{display:flex;align-items:center;gap:12px;padding:12px 14px;min-height:52px}
.toggle-row + .toggle-row{border-top:1px solid var(--line-soft)}
.toggle-row .txt{flex:1}
.toggle-row .txt b{display:block;font-size:14px}
.switch{position:relative;width:50px;height:30px;flex:none}
.switch input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.switch span{position:absolute;inset:0;background:var(--raised);border:1px solid var(--line);border-radius:99px;transition:background .2s}
.switch span::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:var(--text);transition:transform .22s cubic-bezier(.2,.8,.2,1)}
.switch input:checked + span{background:#7a5cff;border-color:#7a5cff}
.switch input:checked + span::after{transform:translateX(20px)}
.switch input:focus-visible + span{outline:2px solid var(--gold);outline-offset:2px}
.banner{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--r);background:rgba(242,119,154,.1);border:1px solid rgba(242,119,154,.3);color:#ffd1de;font-size:13px}
.banner svg{color:var(--kit)}
.banner.info{background:rgba(244,195,90,.08);border-color:rgba(244,195,90,.25);color:#f7e2b0}
.banner.info svg{color:var(--gold)}

/* ---------- 任務 ---------- */
.task{display:grid;grid-template-columns:44px 1fr auto;align-items:center;gap:4px 8px;padding:8px 10px 8px 6px;position:relative}
.task + .task{border-top:1px solid var(--line-soft)}
.chk{width:44px;height:44px;display:grid;place-items:center;background:none;border:0;padding:0}
.chk .box{width:26px;height:26px;border-radius:8px;border:2px solid var(--line);display:grid;place-items:center;transition:background .18s,border-color .18s,transform .18s}
.chk .box svg{width:16px;height:16px;stroke:#14120f;stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:24;stroke-dashoffset:24;transition:stroke-dashoffset .25s ease-out .05s}
.task.done .chk .box{background:var(--c);border-color:var(--c)}
.task.done .chk .box svg{stroke-dashoffset:0}
.chk:active .box{transform:scale(.88)}
.chk:disabled{opacity:.35;cursor:not-allowed}
.tmain{min-width:0;display:flex;gap:10px;align-items:center;background:none;border:0;padding:4px 0;text-align:left;min-height:44px}
.tmain .ti{color:var(--c);display:grid;place-items:center;width:32px;height:32px;border-radius:9px;background:color-mix(in srgb,var(--c) 14%,transparent);flex:none}
.tmain .ti svg{width:18px;height:18px}
.tt{min-width:0}
.tt b{display:block;font-size:14px;font-weight:700;line-height:1.35;transition:color .2s}
.tt .meta{display:flex;gap:6px;align-items:center;margin-top:3px;flex-wrap:wrap}
.xp-tag{font-family:var(--display);font-size:11px;font-weight:700;color:var(--c);background:color-mix(in srgb,var(--c) 15%,transparent);padding:1px 7px;border-radius:99px}
.opt-tag{font-size:10px;font-weight:700;color:var(--gold);border:1px solid rgba(244,195,90,.4);padding:0 6px;border-radius:99px}
.task.done .tt b{color:var(--faint);text-decoration:line-through;text-decoration-color:var(--faint)}
.exp{width:36px;height:44px;display:grid;place-items:center;background:none;border:0;color:var(--faint);transition:transform .2s}
.task.open .exp{transform:rotate(180deg)}
.detail{grid-column:2 / -1;font-size:13px;color:var(--muted);white-space:pre-line;line-height:1.65;padding:0 6px 8px 42px;display:none}
.task.open .detail{display:block;animation:viewIn .2s ease-out}
.float-xp{position:fixed;pointer-events:none;z-index:60;font-family:var(--display);font-weight:700;font-size:16px;color:var(--gold);text-shadow:0 2px 10px rgba(0,0,0,.6);animation:floatUp .9s ease-out forwards}
@keyframes floatUp{from{opacity:0;transform:translateY(0) scale(.8)}20%{opacity:1;transform:translateY(-8px) scale(1.1)}to{opacity:0;transform:translateY(-46px) scale(1)}}

.quest .ql + .ql{margin-top:10px}
.ql .top{display:flex;justify-content:space-between;font-size:12px;margin-bottom:5px}
.ql .top b{font-family:var(--display)}
.quest-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.quest-head b{font-size:14px}

/* ---------- 角色 ---------- */
.stats{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stat{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--r);padding:12px}
.stat .h{display:flex;align-items:center;gap:8px;color:var(--c);font-weight:700;font-size:13px}
.stat .v{font-family:var(--display);font-size:26px;font-weight:700;margin:4px 0 2px}
.stat .s{font-size:11px;color:var(--muted);margin-bottom:8px}
.boss{display:grid;grid-template-columns:48px 1fr;gap:12px;padding:14px}
.boss + .boss{border-top:1px solid var(--line-soft)}
.boss .face{width:48px;height:48px;border-radius:12px;background:var(--raised);display:grid;place-items:center;font-size:26px}
.boss.down .face{filter:grayscale(1);opacity:.45}
.boss .nm{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.boss .nm b{font-size:14px}
.boss .rw{font-family:var(--display);font-size:12px;font-weight:700;color:var(--ember);white-space:nowrap}
.boss.down .rw{color:var(--good)}
.boss.down .nm b{text-decoration:line-through;color:var(--muted)}
.boss .cond{font-size:11px;color:var(--muted);margin:2px 0 7px}
.boss .hp{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted)}
.boss .hp .bar{flex:1;height:8px}
.boss .hp .bar i{background:linear-gradient(90deg,#b8322c,var(--str))}
.boss .lore{font-size:12px;color:var(--faint);margin-top:6px}
.boss.next{background:linear-gradient(90deg,rgba(240,96,90,.08),transparent 70%)}
.ach-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ach{background:var(--surface);border:1px solid var(--line-soft);border-radius:14px;padding:10px 6px;text-align:center}
.ach .e{font-size:28px;line-height:1.2;filter:grayscale(1);opacity:.3}
.ach.on{border-color:rgba(244,195,90,.4);background:linear-gradient(180deg,rgba(244,195,90,.1),var(--surface))}
.ach.on .e{filter:none;opacity:1}
.ach b{display:block;font-size:12px;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ach span{font-family:var(--display);font-size:11px;color:var(--muted)}
.ach.on span{color:var(--gold)}
.log{display:flex;justify-content:space-between;gap:10px;padding:11px 14px;font-size:13px}
.log + .log{border-top:1px solid var(--line-soft)}
.log b{font-family:var(--display);color:var(--gold);white-space:nowrap}

/* ---------- 紀錄 ---------- */
.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:var(--surface);border:1px solid var(--line-soft);border-radius:12px;padding:3px;gap:3px}
.seg button{min-height:36px;border:0;border-radius:9px;background:none;font-size:13px;font-weight:700;color:var(--muted);transition:background .2s,color .2s}
.seg button[aria-pressed="true"]{background:var(--raised);color:var(--text)}
.chart{width:100%;height:auto;display:block;margin-top:10px}
.chart text{fill:var(--muted);font-family:var(--display);font-size:10px}
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.tile{background:var(--surface);border:1px solid var(--line-soft);border-radius:14px;padding:10px}
.tile span{font-size:11px;color:var(--muted);display:block}
.tile b{font-family:var(--display);font-size:20px;color:var(--c,var(--text))}
.tile small{font-size:11px;color:var(--muted);margin-left:2px}
.entry{display:flex;align-items:center;gap:10px;padding:10px 8px 10px 14px;font-size:14px}
.entry + .entry{border-top:1px solid var(--line-soft)}
.entry .d{color:var(--muted);font-size:13px;flex:1}
.entry b{font-family:var(--display)}
.del{width:40px;height:40px;border:0;background:none;color:var(--faint);display:grid;place-items:center;border-radius:10px}
.del:active{background:var(--raised)}
.ratio{display:flex;gap:14px;align-items:center}
.ratio .big{font-family:var(--display);font-size:38px;font-weight:700;line-height:1}
.tri{width:56px;height:56px;flex:none}

/* ---------- 計劃 ---------- */
.phase{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--r);padding:16px;display:flex;flex-direction:column;gap:12px}
.phase.cur{border-color:rgba(255,122,47,.55);box-shadow:0 0 0 1px rgba(255,122,47,.25) inset}
.phase .top{display:flex;justify-content:space-between;gap:10px}
.phase .eyebrow{font-size:11px;letter-spacing:.12em;color:var(--ember);font-weight:700}
.phase h3{margin:2px 0 0;font-size:19px;text-wrap:balance}
.phase .kg{text-align:right}
.phase .kg b{font-family:var(--display);font-size:28px;display:block;line-height:1}
.phase .kg span{font-size:11px;color:var(--muted)}
.here{align-self:flex-start;font-size:11px;font-weight:700;color:#1a0d05;background:var(--ember);padding:2px 10px;border-radius:99px}
.info h4{margin:0 0 4px;font-size:12px;color:var(--muted);display:flex;gap:6px;align-items:center;font-weight:700}
.info h4 svg{width:15px;height:15px}
.info p{margin:0;font-size:13px;white-space:pre-line;line-height:1.65}
details.w{border-top:1px solid var(--line-soft)}
details.w:first-child{border-top:0}
details.w summary,.wleaf{display:flex;gap:10px;padding:10px 14px;list-style:none;cursor:pointer;font-size:14px;align-items:baseline;min-height:44px}
details.w summary::-webkit-details-marker{display:none}
details.w summary::after{content:"";margin-left:auto;width:8px;height:8px;border-right:2px solid var(--faint);border-bottom:2px solid var(--faint);transform:rotate(45deg);transition:transform .2s;align-self:center;flex:none}
details.w[open] > summary::after{transform:rotate(-135deg)}
.wcode{font-family:var(--display);font-size:12px;color:var(--ember);min-width:48px;font-weight:700}
details.w .kids{padding-left:14px;border-left:1px dashed var(--line);margin-left:22px}
.wleaf{cursor:default;border-top:1px solid var(--line-soft)}
.wleaf .wcode{color:var(--faint)}

/* ---------- 設定 ---------- */
.field{display:flex;align-items:center;gap:12px;padding:8px 14px;min-height:52px}
.field + .field{border-top:1px solid var(--line-soft)}
.field label{flex:1;font-size:14px}
.field input,.field select{box-sizing:border-box;height:40px;background:var(--raised);border:1px solid var(--line);border-radius:10px;padding:0 10px;width:112px;min-width:0;text-align:right;font-size:15px;line-height:38px}
.field input[type=date]{width:150px}
.field input[type=text]{width:150px}
.field select{width:112px}
.field select{text-align:left;padding-right:6px}
.field .unit{font-size:12px;color:var(--muted);width:26px}
.chips{display:flex;flex-wrap:wrap;gap:8px;padding:0 14px 14px}
.chip{display:inline-flex;align-items:center;gap:4px;background:var(--raised);border:1px solid var(--line);border-radius:99px;padding:4px 4px 4px 12px;font-family:var(--display);font-size:13px}
.chip button{width:28px;height:28px;border:0;background:none;color:var(--faint);border-radius:50%}
.sync{display:flex;gap:10px;align-items:center;font-size:13px}
.dot{width:8px;height:8px;border-radius:50%;background:var(--faint);flex:none}
.dot.on{background:var(--good);box-shadow:0 0 0 4px rgba(94,211,155,.15)}

/* ---------- Tab bar ---------- */
.tabs{position:fixed;left:0;right:0;bottom:0;z-index:30;padding-bottom:env(safe-area-inset-bottom,0px);background:rgba(20,18,15,.94);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--line-soft)}
.tabs nav{max-width:480px;margin:0 auto;display:grid;grid-template-columns:repeat(5,1fr);height:var(--tab-h)}
.tabs button{border:0;background:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--faint);font-size:11px;font-weight:700;transition:color .15s}
.tabs button svg{width:24px;height:24px}
.tabs button[aria-current="page"]{color:var(--ember)}
.tabs button:active svg{transform:scale(.9)}

/* ---------- Sheet ---------- */
.sheet-bg{position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.55);display:flex;align-items:flex-end;justify-content:center;animation:fade .2s}
@keyframes fade{from{opacity:0}}
.sheet{width:100%;max-width:480px;max-height:92%;overflow:auto;background:var(--surface);border-radius:22px 22px 0 0;border:1px solid var(--line);border-bottom:0;padding:10px 16px calc(20px + env(safe-area-inset-bottom,0px));animation:up .32s cubic-bezier(.2,.9,.25,1)}
@keyframes up{from{transform:translateY(100%)}}
.grab{width:40px;height:5px;background:var(--line);border-radius:99px;margin:0 auto 10px}
.sheet-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.sheet-h h3{margin:0;font-size:17px}
.sheet-h button{min-height:40px;border:0;background:none;color:var(--muted);font-weight:700;padding:0 4px}
.form{display:flex;flex-direction:column;gap:12px}
.form label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}
.form input{box-sizing:border-box;width:100%;min-width:0;height:48px;background:var(--raised);border:1px solid var(--line);border-radius:12px;padding:12px;font-size:17px;color:var(--text);font-family:var(--display)}
.form .two{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
.hint{font-size:12px;color:var(--muted);line-height:1.6}

/* 急救包 */
.kit-steps{display:flex;gap:6px;margin-bottom:18px}
.kit-steps i{flex:1;height:4px;border-radius:99px;background:var(--raised);transition:background .3s}
.kit-steps i.on{background:var(--kit)}
.kit-body{min-height:340px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px}
.kit-body h4{margin:0;font-size:22px}
.kit-body p{margin:0;color:var(--muted);font-size:14px;max-width:32ch}
.kit-glyph{width:84px;height:84px;border-radius:50%;background:rgba(242,119,154,.12);display:grid;place-items:center;color:var(--kit)}
.kit-glyph svg{width:40px;height:40px}
.range{width:100%;accent-color:var(--kit);height:32px}
.hunger{font-family:var(--display);font-size:34px;font-weight:700}
.breath{width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(242,119,154,.35),rgba(242,119,154,.08));display:grid;place-items:center;font-weight:700;animation:breathe 16s ease-in-out infinite}
@keyframes breathe{0%{transform:scale(.6)}25%{transform:scale(1)}50%{transform:scale(1)}75%{transform:scale(.6)}100%{transform:scale(.6)}}
.snacks{display:grid;grid-template-columns:1fr 1fr;gap:6px;width:100%;text-align:left}
.snacks span{font-size:13px;background:rgba(94,211,155,.08);border:1px solid rgba(94,211,155,.2);color:#bfeed6;border-radius:10px;padding:8px 10px}
.trig{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}
.trig button{border:1px solid var(--line);background:var(--raised);border-radius:99px;padding:6px 12px;font-size:13px;min-height:36px}
.trig button[aria-pressed="true"]{border-color:var(--kit);color:var(--kit);background:rgba(242,119,154,.12)}
.outcome{display:flex;align-items:center;gap:12px;width:100%;padding:14px;border-radius:14px;background:var(--raised);border:1px solid var(--line);text-align:left;font-weight:700;min-height:56px;transition:transform .12s}
.outcome:active{transform:scale(.98)}
.outcome span{flex:1}
.outcome b{font-family:var(--display);color:var(--gold)}

/* ---------- 慶祝 ---------- */
.celebrate{position:fixed;inset:0;z-index:70;display:grid;place-items:center;background:radial-gradient(circle at 50% 42%,rgba(255,122,47,.28),rgba(8,6,4,.9) 60%);animation:fade .25s;padding:24px}
.celebrate canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.cel{position:relative;text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px;max-width:340px}
.cel .badge{width:120px;height:120px;border-radius:50%;display:grid;place-items:center;font-size:60px;background:radial-gradient(circle at 35% 30%,#3a2a1a,#1a130c);border:2px solid var(--gold);box-shadow:0 0 60px rgba(244,195,90,.35);animation:pop .6s cubic-bezier(.2,1.6,.4,1)}
.cel .badge .num{font-size:52px;font-weight:700;color:var(--gold)}
@keyframes pop{from{transform:scale(.2) rotate(-25deg);opacity:0}}
.cel .eyebrow{font-family:var(--display);font-weight:700;letter-spacing:.2em;font-size:14px;color:var(--gold);margin-top:6px}
.cel h3{margin:0;font-size:26px}
.cel p{margin:0;color:#e3d7c6;font-size:14px}
.cel .btn{margin-top:14px;min-width:180px}

/* 建立角色 */
.onb{position:fixed;inset:0;z-index:80;background:var(--ground);overflow:auto;padding:calc(env(safe-area-inset-top,0px) + 24px) 16px calc(env(safe-area-inset-bottom,0px) + 24px)}
.onb-in{max-width:440px;margin:0 auto;display:flex;flex-direction:column;gap:18px}
.onb .kicker{font-family:var(--display);color:var(--ember);letter-spacing:.2em;font-size:12px;font-weight:700}
.onb h1{margin:4px 0 6px;font-size:26px;line-height:1.2;text-wrap:balance}
.onb-map{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.onb-map div{background:var(--surface);border:1px solid var(--line-soft);border-radius:12px;padding:10px 8px}
.onb-map b{display:block;font-family:var(--display);font-size:18px}
.onb-map span{font-size:11px;color:var(--muted)}
.toast{position:fixed;left:50%;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom,0px) + 14px);transform:translateX(-50%);z-index:45;background:var(--raised);border:1px solid var(--line);padding:10px 16px;border-radius:12px;font-size:13px;font-weight:700;animation:up .25s ease-out;max-width:90%}

@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
