/* Luminara read-along app · warm light, big friendly controls, works on every screen */
:root{--cream:#fff8e8;--paper:#fffdf6;--ink:#2b2a26;--green:#1f5a33;--green2:#2e7d45;--gold:#d9a92b;--gold2:#f3cf6a;--amber:#f0a73a;--night:#102242;--muted:#6b665b;--hl:#ffe08a;--r:22px;--safe-b:env(safe-area-inset-bottom);--safe-t:env(safe-area-inset-top)}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{font-family:"Atkinson Hyperlegible","Nunito","Quicksand","Segoe UI",system-ui,-apple-system,Roboto,sans-serif;background:var(--night);color:var(--ink);overflow:hidden;position:fixed;inset:0;-webkit-user-select:none;user-select:none;touch-action:manipulation}
button{font:inherit;border:0;cursor:pointer;background:none;color:inherit;border-radius:50%;display:inline-flex;align-items:center;justify-content:center}
button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:4px solid var(--gold2);outline-offset:3px}
[hidden]{display:none!important}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
svg{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}

/* ---------- shelf (home) ---------- */
.shelf{position:absolute;inset:0;overflow:auto;background:radial-gradient(ellipse at 50% 0%,#1d3a6b,#102242 60%);color:#fff;padding:calc(20px + var(--safe-t)) 20px calc(30px + var(--safe-b));display:flex;flex-direction:column;align-items:center;gap:18px}
.shelf .logo{width:min(220px,55vw)}
.shelf h1{font-size:clamp(1.4rem,5vw,2rem);text-align:center;font-weight:800;letter-spacing:.01em}
.shelf p.sub{color:#cfd8ea;text-align:center;max-width:460px}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,260px));gap:18px;justify-content:center;width:100%;max-width:900px}
.bcard{background:var(--paper);color:var(--ink);border-radius:var(--r);padding:12px;display:grid;gap:10px;box-shadow:0 16px 40px rgba(0,0,0,.35);text-decoration:none;border:0;text-align:left;font:inherit;cursor:pointer}
.bcard img{width:100%;border-radius:14px;aspect-ratio:2/3;object-fit:cover}
.bcard b{font-size:1.05rem;line-height:1.25}
.bcard small{color:var(--muted)}
.bcard .go{background:var(--green);color:#fff;border-radius:40px;padding:12px 16px;font-weight:800;text-align:center;font-size:1rem}
.bcard.soon{opacity:.75}
.bcard.soon .go{background:#8a8f99}
.shelf .foot{color:#9fb0cc;font-size:.82rem;text-align:center;margin-top:auto;max-width:520px;line-height:1.5}
.shelf .foot button{border-radius:30px;padding:8px 14px;color:#fff;background:rgba(255,255,255,.12);font-size:.85rem;margin-top:8px}
.installbar{display:none;background:rgba(255,255,255,.1);border-radius:16px;padding:12px 16px;gap:12px;align-items:center;max-width:520px;width:100%}
.installbar.show{display:flex}
.installbar button{background:var(--gold);color:#2b2a26;border-radius:30px;padding:10px 16px;font-weight:800}
.offline-badge{font-size:.75rem;color:#9fb0cc}

/* ---------- reader ---------- */
.reader{position:absolute;inset:0;display:grid;grid-template-rows:auto 1fr auto;background:#0e1d38}
.rtop{display:flex;align-items:center;justify-content:space-between;padding:calc(8px + var(--safe-t)) 10px 6px;color:#fff;gap:8px}
.rtop .ttl{min-width:0;font-weight:800;font-size:.95rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;flex:1;color:#e8eefb}
.ib{width:50px;height:50px;font-size:26px;background:rgba(255,255,255,.1);color:#fff}
.ib.on{background:var(--gold);color:#2b2a26}
.stage{position:relative;overflow:hidden;display:grid;grid-template-rows:auto minmax(0,1fr);align-content:center;padding:0 10px 6px}
.art{position:relative;width:100%;max-width:100%;aspect-ratio:var(--ar,2/3);max-height:52vh;justify-self:center;overflow:hidden}
.art img{width:100%;height:100%;object-fit:contain;border-radius:18px;filter:drop-shadow(0 14px 30px rgba(0,0,0,.45));display:block}
.art .tapzone{position:absolute;top:0;bottom:0;width:30%;background:transparent;border-radius:0}
.art .tapzone.l{left:0}.art .tapzone.r{right:0}
.panel{background:var(--paper);border:4px solid var(--gold);border-radius:var(--r);margin-top:8px;padding:12px 14px 14px;min-height:0;overflow:auto;align-self:start;box-shadow:0 10px 30px rgba(0,0,0,.35);position:relative}
.panel p{font-size:clamp(1.05rem,2.3vmax,1.6rem);line-height:1.5;margin:0 0 .4em;font-weight:600;text-wrap:pretty}
.panel p:last-child{margin-bottom:0}
.panel .w{display:inline;border-radius:8px;padding:0 .08em;margin:0 -.08em;cursor:pointer}
.panel .w.on{background:var(--hl);color:#1a1a1a;box-shadow:0 0 0 3px var(--hl)}
.panel .w.said{color:#5a4a16}
.panel .w:active{background:var(--gold2)}
.panel.cover p{text-align:center;font-weight:800;font-size:clamp(1.25rem,3vmax,2.1rem);color:var(--green)}
.panel.cover p+p{font-size:1rem;color:var(--muted);font-weight:600}
.panel .pines{position:absolute;bottom:6px;right:12px;width:34px;color:var(--green);opacity:.6}
@media(min-width:900px) and (orientation:landscape){
  .stage{grid-template-rows:1fr;grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);gap:14px;padding:0 14px 10px;align-items:center}
  .art{height:100%;max-height:100%;width:auto;max-width:100%}
  .panel{max-height:100%;margin-top:0;padding:28px 30px;align-self:center}
  .panel p{font-size:clamp(1.3rem,2.2vw,2rem);line-height:1.6}
}
.rbar{display:flex;align-items:center;justify-content:center;gap:12px;padding:8px 10px calc(10px + var(--safe-b));color:#fff}
.big{width:64px;height:64px;background:rgba(255,255,255,.12);font-size:30px}
.big.play{width:80px;height:80px;background:var(--gold);color:#2b2a26;font-size:36px}
.big:disabled{opacity:.3}
.mode{display:flex;background:rgba(255,255,255,.1);border-radius:40px;padding:4px;gap:4px;font-size:.85rem;font-weight:800}
.mode button{border-radius:40px;padding:10px 14px;color:#cfd8ea;min-height:44px}
.mode button.on{background:#fff;color:var(--green)}
.pcount{font-size:.85rem;color:#cfd8ea;min-width:60px;text-align:center}
@media(max-width:560px){.pcount{display:none}.mode button{padding:10px 12px}.mode button .t{display:none}.mode button svg{font-size:1.4rem}.big{width:56px;height:56px}.big.play{width:72px;height:72px}.rbar{gap:8px}}

/* ---------- parent gate and settings ---------- */
.modal{position:fixed;inset:0;background:rgba(10,20,40,.72);display:grid;place-items:center;padding:16px;z-index:20}
.box{background:var(--paper);color:var(--ink);border-radius:var(--r);padding:22px;max-width:460px;width:100%;max-height:90vh;overflow:auto;display:grid;gap:14px;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.box h2{font-size:1.3rem}
.box p{color:var(--muted);line-height:1.5}
.box label{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid #eee5cf;font-weight:700}
.box label span small{display:block;font-weight:500;color:var(--muted)}
.box input[type=number],.box input[type=text]{font:inherit;font-size:1.4rem;padding:10px 14px;border:2px solid var(--gold);border-radius:12px;width:120px;text-align:center}
.box select,.box input[type=range]{font:inherit;min-height:40px}
.box .row{display:flex;gap:10px;flex-wrap:wrap}
.btn{border-radius:40px;padding:14px 20px;font-weight:800;background:var(--green);color:#fff;min-height:48px}
.btn.alt{background:#eee5cf;color:var(--ink)}
.switch{appearance:none;width:54px;height:32px;border-radius:30px;background:#cfc7b2;position:relative;cursor:pointer;flex:none}
.switch::after{content:"";position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;background:#fff;transition:left .2s}
.switch:checked{background:var(--green2)}.switch:checked::after{left:25px}
.toast{position:fixed;left:50%;bottom:calc(110px + var(--safe-b));transform:translateX(-50%);background:#fff;color:var(--ink);padding:10px 16px;border-radius:30px;font-weight:700;box-shadow:0 10px 30px rgba(0,0,0,.4);z-index:30;max-width:90vw;text-align:center}
.celebrate{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none;font-size:clamp(2rem,8vw,4rem)}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- progress, finish, landscape phones ---------- */
.rtop{flex-wrap:wrap}
.prog{flex-basis:100%;height:4px;background:rgba(255,255,255,.12);border-radius:4px;overflow:hidden;margin-top:4px}
.prog i{display:block;height:100%;width:0;background:var(--gold);border-radius:4px;transition:width .3s}
.box.fin{text-align:center}.box.fin .stars{font-size:2.2rem}.box.fin .row{justify-content:center}
@media(orientation:landscape) and (max-height:600px){
  .stage{grid-template-rows:1fr;grid-template-columns:minmax(0,1.1fr) minmax(260px,.9fr);gap:10px;padding:0 10px 4px;align-items:center}
  .art{height:100%;max-height:100%;width:auto;max-width:100%}
  .panel{max-height:100%;margin-top:0;padding:12px 14px;align-self:center}
  .panel p{font-size:clamp(1rem,2.6vh,1.3rem);line-height:1.45}
  .rtop{padding-top:calc(4px + var(--safe-t))}.ib{width:40px;height:40px;font-size:20px}
  .rbar{padding:4px 10px calc(4px + var(--safe-b))}.big{width:46px;height:46px;font-size:22px}.big.play{width:56px;height:56px;font-size:26px}
}

.promises{list-style:none;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;max-width:520px}
.promises li{border:1px solid rgba(255,255,255,.35);border-radius:30px;padding:7px 14px;font-weight:800;font-size:.85rem;color:#fff;display:inline-flex;align-items:center;gap:7px}
.promises li::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--gold)}
