/* Ẹ̀kọ́ Yorùbá — IbileWorld learning app. Colours match the main site. */
@font-face{font-family:"IW Inter";src:url("fonts/inter-400.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"IW Inter";src:url("fonts/inter-600.woff2") format("woff2");font-weight:500 600;font-display:swap}
@font-face{font-family:"IW Inter";src:url("fonts/inter-700.woff2") format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"IW Inter";src:url("fonts/inter-800.woff2") format("woff2");font-weight:800 900;font-display:swap}

:root{
  --red:#FE3130;--red-ink:#D7231C;--ink:#1B1712;--ink-2:#5A5248;--paper:#FBF5EA;--paper-2:#F4EBDB;
  --card:#FFFDF8;--sun:#FFC63D;--leaf:#2F9E6B;--leaf-bg:#DDF3E7;--bad:#D7231C;--bad-bg:#FDE3E1;
  --indigo:#2B3290;--sky:#6FC3E8;--grey:#D9D1C3;--gold:#FFC63D;
  --r:18px;--b:2.5px solid var(--ink);
  --h:"IW Inter",system-ui,sans-serif;--t:"IW Inter",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:var(--t);color:var(--ink);background:var(--paper);font-size:17px;line-height:1.45;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:0}
button:disabled{cursor:default}
a{color:inherit}
:focus-visible{outline:3px solid var(--sky);outline-offset:3px}
h1,h2,h3,.h{font-family:var(--h);font-weight:800;line-height:1.15}
.en{color:var(--ink-2);font-weight:600;font-size:.88em}
.hidden{display:none!important}

#app{min-height:100%;display:flex;flex-direction:column}
.shell{max-width:560px;width:100%;margin:0 auto;flex:1;display:flex;flex-direction:column}

/* ---------- buttons ---------- */
.btn{display:flex;align-items:center;justify-content:center;gap:.5em;width:100%;border:var(--b);border-radius:16px;padding:.85em 1.2em;
  font-family:var(--h);font-weight:800;font-size:1rem;letter-spacing:.02em;background:var(--card);box-shadow:0 4px 0 var(--ink);transition:transform .08s,box-shadow .08s;text-decoration:none;text-align:center}
.btn:active:not(:disabled){transform:translateY(3px);box-shadow:0 1px 0 var(--ink)}
.btn small{font-family:var(--t);font-weight:600;opacity:.8;font-size:.78em}
.btn.red{background:var(--red);color:#fff}
.btn.green{background:var(--leaf);color:#fff}
.btn.sun{background:var(--sun)}
.btn.bad{background:var(--bad);color:#fff}
.btn.ghost{background:transparent;box-shadow:none;border-color:transparent;text-decoration:underline}
.btn:disabled{background:var(--grey);color:#8b8376;border-color:#b5ab9b;box-shadow:0 4px 0 #b5ab9b}

/* ---------- top bar ---------- */
.topbar{position:sticky;top:0;z-index:20;background:rgba(251,245,234,.94);backdrop-filter:blur(8px);border-bottom:var(--b);
  display:flex;align-items:center;justify-content:space-between;padding:10px 16px;padding-top:max(10px,env(safe-area-inset-top))}
.brand{display:flex;align-items:center;gap:8px;text-decoration:none;font-family:var(--h);font-weight:900;font-size:1.2rem;color:var(--red)}
.brand span{font-size:1.5rem}
.stats{display:flex;gap:14px;font-family:var(--h);font-weight:800}
.stat{display:flex;align-items:center;gap:4px}
.stat.off{filter:grayscale(1);opacity:.55}

/* ---------- home ---------- */
main{flex:1;padding:16px 16px 110px}
.goal{display:flex;gap:12px;align-items:center;background:var(--card);border:var(--b);border-radius:var(--r);padding:12px 14px;box-shadow:0 4px 0 var(--ink);margin-bottom:22px}
.goal .ring{font-size:1.8rem}
.goal .grow{flex:1}
.bar{height:14px;border-radius:99px;background:var(--paper-2);border:2px solid var(--ink);overflow:hidden}
.bar i{display:block;height:100%;background:var(--sun);border-radius:99px;transition:width .4s}
.bar.green i{background:var(--leaf)}

.unit{margin-bottom:36px}
.unit-head{background:var(--c);color:#fff;border:var(--b);border-radius:var(--r);padding:14px 16px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 0 var(--ink)}
.unit-head .k{font-family:var(--h);font-weight:800;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;opacity:.9}
.unit-head h2{font-size:1.5rem}
.unit-head p{font-weight:600;opacity:.95}
.unit-head .grow{flex:1}
.unit-head .tipbtn{background:rgba(255,255,255,.2);border:2px solid #fff;border-radius:12px;padding:8px 10px;color:#fff;font-family:var(--h);font-weight:800;font-size:.8rem;white-space:nowrap}
.unit.locked .unit-head{background:#9c9284}
.club-tag{display:inline-block;background:var(--sun);color:var(--ink);border:2px solid var(--ink);border-radius:99px;font-size:.7rem;padding:1px 8px;margin-left:6px;vertical-align:middle;font-family:var(--h);font-weight:800}

.path{position:relative;display:flex;flex-direction:column;align-items:center;gap:18px;padding:26px 0 6px}
.node{position:relative;width:76px;height:70px;border-radius:50%;border:var(--b);background:var(--c);color:#fff;font-size:1.9rem;display:grid;place-items:center;
  box-shadow:0 7px 0 var(--ink);transition:transform .08s,box-shadow .08s}
.node:active:not(:disabled){transform:translateY(5px);box-shadow:0 2px 0 var(--ink)}
.node.done{background:var(--gold);color:var(--ink)}
.node.locked{background:var(--grey);color:#8b8376;border-color:#a39a8b;box-shadow:0 7px 0 #a39a8b}
.node.current{animation:bob 1.6s ease-in-out infinite}
.node.current::after{content:"";position:absolute;inset:-10px;border-radius:50%;border:4px solid var(--c);opacity:.35}
@keyframes bob{50%{transform:translateY(-5px)}}
.start-bubble{position:absolute;bottom:calc(100% + 14px);left:50%;transform:translateX(-50%);background:var(--card);color:var(--c);border:var(--b);border-radius:12px;
  padding:5px 12px;font-family:var(--h);font-weight:900;font-size:.85rem;white-space:nowrap;box-shadow:0 3px 0 var(--ink);animation:none}
.start-bubble::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);border:8px solid transparent;border-top-color:var(--ink)}
.mascot-side{position:absolute;font-size:3rem;top:50%;pointer-events:none;filter:drop-shadow(2px 3px 0 rgba(0,0,0,.15))}

/* ---------- bottom nav ---------- */
.tabs{position:fixed;left:0;right:0;bottom:0;z-index:30;background:var(--card);border-top:var(--b);padding-bottom:env(safe-area-inset-bottom)}
.tabs .in{max-width:560px;margin:0 auto;display:grid;grid-template-columns:repeat(4,1fr)}
.tab{display:flex;flex-direction:column;align-items:center;padding:8px 2px 10px;font-family:var(--h);font-weight:800;font-size:.78rem;gap:1px;border-top:4px solid transparent}
.tab span{font-size:1.45rem;line-height:1.2}
.tab small{font-family:var(--t);font-weight:600;font-size:.66rem;color:var(--ink-2)}
.tab[aria-current="page"]{border-top-color:var(--red);color:var(--red-ink)}

/* ---------- cards / lists ---------- */
.card{background:var(--card);border:var(--b);border-radius:var(--r);padding:16px;box-shadow:0 4px 0 var(--ink);margin-bottom:16px}
.card h3{margin-bottom:6px}
.pagetitle{margin:4px 0 16px}
.pagetitle h1{font-size:1.7rem}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
.tile{background:var(--card);border:var(--b);border-radius:16px;padding:12px;display:flex;gap:10px;align-items:center}
.tile b{font-family:var(--h);font-size:1.25rem;display:block;line-height:1.1}
.tile span.ic{font-size:1.6rem}
.wordrow{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1.5px dashed var(--grey)}
.wordrow:last-child{border-bottom:0}
.wordrow .e{font-size:1.6rem;width:36px;text-align:center}
.wordrow .w{flex:1}
.wordrow .w b{font-family:var(--h);font-size:1.08rem}
.strength{display:flex;gap:3px}
.strength i{width:7px;height:18px;border-radius:3px;background:var(--grey)}
.strength i.on{background:var(--leaf)}
.week{display:flex;gap:8px;align-items:end;height:110px;margin-top:10px}
.week div{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;height:100%;justify-content:flex-end;font-size:.72rem;font-weight:700;color:var(--ink-2)}
.week i{width:100%;background:var(--sun);border:2px solid var(--ink);border-radius:6px 6px 2px 2px;min-height:4px}
.week div.today i{background:var(--red)}
.badges{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.badge{text-align:center;border:2px solid var(--ink);border-radius:14px;padding:10px 4px;background:var(--paper-2);font-size:.72rem;font-weight:700}
.badge span{font-size:1.8rem;display:block}
.badge.off{opacity:.35;filter:grayscale(1)}
.setting{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1.5px dashed var(--grey)}
.setting:last-child{border-bottom:0}
.seg{display:flex;border:2px solid var(--ink);border-radius:12px;overflow:hidden}
.seg button{padding:6px 10px;font-weight:700;font-size:.85rem}
.seg button[aria-pressed="true"]{background:var(--ink);color:#fff}
.switch{width:52px;height:30px;border-radius:99px;border:2px solid var(--ink);background:var(--grey);position:relative;flex:none}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:22px;height:22px;border-radius:50%;background:#fff;border:2px solid var(--ink);transition:left .15s}
.switch[aria-checked="true"]{background:var(--leaf)}
.switch[aria-checked="true"]::after{left:24px}
.linkcard{display:flex;gap:12px;align-items:center;text-decoration:none;padding:12px 0;border-bottom:1.5px dashed var(--grey)}
.linkcard:last-child{border-bottom:0}
.linkcard .ic{font-size:1.7rem}
.linkcard .grow{flex:1}
.linkcard b{font-family:var(--h)}
.input{width:100%;font:inherit;font-size:1.1rem;border:var(--b);border-radius:14px;padding:.75em .9em;background:#fff}
.cta{background:var(--indigo);color:#fff}
.cta .en{color:#dfe2ff}
.cta .btn{margin-top:12px}

/* ---------- onboarding ---------- */
.onb{flex:1;display:flex;flex-direction:column;padding:28px 20px;padding-top:max(28px,env(safe-area-inset-top));gap:18px}
.onb .hero{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px}
.onb .big{font-size:5.5rem;animation:bob 2s ease-in-out infinite}
.onb h1{font-size:2rem}
.choices{display:flex;flex-direction:column;gap:12px;width:100%}
.choice{display:flex;align-items:center;gap:14px;text-align:left;border:var(--b);border-radius:16px;padding:14px;background:var(--card);box-shadow:0 4px 0 var(--ink)}
.choice span{font-size:2rem}
.choice b{font-family:var(--h);display:block}
.choice[aria-pressed="true"]{background:#E6F0FF;border-color:var(--indigo);box-shadow:0 4px 0 var(--indigo)}

/* ---------- lesson ---------- */
.lesson{flex:1;display:flex;flex-direction:column;min-height:100dvh}
.lbar{display:flex;align-items:center;gap:12px;padding:14px 16px;padding-top:max(14px,env(safe-area-inset-top))}
.lbar .x{font-size:1.5rem;width:36px;height:36px;color:var(--ink-2)}
.lbar .bar{flex:1;height:18px}
.lbar .bar i{background:var(--leaf)}
.lbar .hearts{font-family:var(--h);font-weight:800;display:flex;gap:4px;align-items:center}
.stage{flex:1;padding:8px 18px 20px;display:flex;flex-direction:column;gap:18px}
.prompt-k{font-family:var(--h);font-weight:800;font-size:1.25rem}
.prompt-k .en{display:block;font-family:var(--t);font-size:.82rem}
.say{display:inline-grid;place-items:center;width:46px;height:46px;border-radius:14px;background:var(--sky);border:var(--b);box-shadow:0 3px 0 var(--ink);font-size:1.3rem;flex:none}
.say:active{transform:translateY(2px);box-shadow:0 1px 0 var(--ink)}
.bubble-row{display:flex;align-items:center;gap:12px}
.bubble-row .m{font-size:3.4rem;flex:none}
.bubble{position:relative;border:var(--b);border-radius:16px;padding:12px 16px;background:var(--card);display:flex;gap:10px;align-items:center;font-family:var(--h);font-weight:800;font-size:1.35rem}
.bubble::before{content:"";position:absolute;left:-11px;top:50%;margin-top:-8px;border:8px solid transparent;border-right-color:var(--ink);border-left:0}
.intro{display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px;background:var(--card);border:var(--b);border-radius:24px;padding:26px 18px;box-shadow:0 5px 0 var(--ink)}
.intro .pic{font-size:5rem;line-height:1}
.intro .yo{font-family:var(--h);font-weight:900;font-size:2.2rem;line-height:1.1;color:var(--red-ink)}
.intro .meaning{font-size:1.2rem;font-weight:700}
.intro .note{font-size:.92rem;color:var(--ink-2);background:var(--paper-2);border-radius:12px;padding:8px 12px}
.newtag{font-family:var(--h);font-weight:800;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;background:var(--indigo);color:#fff;border-radius:99px;padding:3px 10px}
.opts{display:grid;gap:12px}
.opts.pics{grid-template-columns:1fr 1fr}
.opt{display:flex;align-items:center;gap:12px;border:var(--b);border-radius:16px;padding:14px;background:var(--card);box-shadow:0 4px 0 var(--ink);text-align:left;font-weight:700;font-size:1.08rem;min-height:60px}
.opts.pics .opt{flex-direction:column;justify-content:center;text-align:center;gap:6px;min-height:130px}
.opt .pic{font-size:2.8rem;line-height:1}
.opt .num{display:inline-grid;place-items:center;width:26px;height:26px;border:2px solid var(--grey);border-radius:8px;font-size:.8rem;color:var(--ink-2);flex:none}
.opts.pics .opt .num{display:none}
.opt.yo{font-family:var(--h);font-size:1.2rem}
.opt[aria-pressed="true"]{background:#E6F0FF;border-color:var(--indigo);box-shadow:0 4px 0 var(--indigo);color:var(--indigo)}
.opt.right{background:var(--leaf-bg);border-color:var(--leaf);box-shadow:0 4px 0 var(--leaf);color:#17603f}
.opt.wrong{background:var(--bad-bg);border-color:var(--bad);box-shadow:0 4px 0 var(--bad);color:var(--bad);animation:shake .35s}
.opt.gone{opacity:.25;box-shadow:none;transform:translateY(4px);pointer-events:none}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.match{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.match .col{display:flex;flex-direction:column;gap:12px}
.match .opt{justify-content:center;text-align:center;min-height:58px;padding:10px}
.answer-line{min-height:64px;border-bottom:2.5px solid var(--ink);border-top:2.5px solid var(--grey);display:flex;flex-wrap:wrap;gap:8px;align-content:flex-start;padding:10px 0}
.bank{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding-top:6px}
.chip{border:var(--b);border-radius:12px;padding:8px 14px;background:var(--card);box-shadow:0 3px 0 var(--ink);font-family:var(--h);font-weight:700;font-size:1.1rem}
.chip.used{visibility:hidden}
.typebox textarea{width:100%;min-height:110px;font:inherit;font-family:var(--h);font-weight:700;font-size:1.3rem;border:var(--b);border-radius:16px;padding:14px;background:#fff;resize:none}
.tonekeys{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.tonekeys button{border:2px solid var(--ink);border-radius:10px;padding:6px 12px;background:var(--paper-2);font-family:var(--h);font-weight:700;font-size:1.15rem;min-width:46px;box-shadow:0 2px 0 var(--ink)}
.tonekeys button small{display:block;font-family:var(--t);font-size:.6rem;font-weight:600;color:var(--ink-2)}

.foot{position:sticky;bottom:0;padding:16px 18px;padding-bottom:max(16px,env(safe-area-inset-bottom));border-top:2px solid var(--paper-2);background:var(--paper)}
.foot.ok{background:var(--leaf-bg);border-top-color:var(--leaf)}
.foot.no{background:var(--bad-bg);border-top-color:var(--bad)}
.fb{display:flex;gap:12px;align-items:flex-start;margin-bottom:14px}
.fb .ic{font-size:2.2rem;line-height:1}
.fb h3{font-size:1.25rem}
.foot.ok h3{color:#17603f}
.foot.no h3{color:var(--bad)}
.fb p{font-weight:600}
.fb .ans{font-family:var(--h);font-weight:800;font-size:1.1rem}

/* ---------- results ---------- */
.result{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:16px;padding:30px 20px}
.result .big{font-size:5rem;animation:bob 2s ease-in-out infinite}
.result h1{font-size:2rem;color:var(--red-ink)}
.rstats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;width:100%}
.rstat{border:var(--b);border-radius:14px;overflow:hidden;background:var(--card)}
.rstat .k{font-family:var(--h);font-weight:800;font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;padding:4px;color:#fff;background:var(--c)}
.rstat b{display:block;font-family:var(--h);font-size:1.4rem;padding:8px 4px}
.owe{background:var(--paper-2);border-left:5px solid var(--red);border-radius:12px;padding:12px 14px;text-align:left;width:100%}
.owe b{font-family:var(--h)}
.streak-pop{background:var(--sun);border:var(--b);border-radius:16px;padding:10px 16px;font-family:var(--h);font-weight:800;box-shadow:0 4px 0 var(--ink)}

/* ---------- modal ---------- */
.scrim{position:fixed;inset:0;z-index:60;background:rgba(27,23,18,.5);display:flex;align-items:flex-end;justify-content:center;animation:fade .2s}
.sheet{width:100%;max-width:560px;background:var(--paper);border:var(--b);border-bottom:0;border-radius:24px 24px 0 0;padding:22px 20px;padding-bottom:max(22px,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:14px;animation:up .25s ease;max-height:90vh;overflow:auto}
.sheet .top{display:flex;gap:12px;align-items:center}
.sheet .top .e{font-size:2.6rem}
.sheet p{color:var(--ink-2)}
@keyframes fade{from{opacity:0}}
@keyframes up{from{transform:translateY(40px);opacity:0}}
.toast{position:fixed;left:50%;top:18px;transform:translateX(-50%);z-index:80;background:var(--ink);color:#fff;padding:10px 16px;border-radius:12px;font-weight:700;animation:up .2s}

.confetti{position:fixed;inset:0;pointer-events:none;z-index:70;overflow:hidden}
.confetti i{position:absolute;top:-20px;width:10px;height:14px;border-radius:2px;animation:fall linear forwards}
@keyframes fall{to{transform:translateY(110vh) rotate(720deg)}}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (min-width:600px){body{font-size:18px}}
[hidden]{display:none!important}
