/* Snug and the Dark: Flipsy read-along story reader */
*,*::before,*::after{box-sizing:border-box}
body{margin:0}
[hidden]{display:none!important}
img{max-width:100%}
/* Layout: a storybook — illustrated page beside (landscape) or above (portrait) a paper text panel the parent reads from. One committed night-time look. */
:root{
  --night:#141B44; --night2:#1E2A5A; --ink:#15172B;
  --paper:#FFF8EC; --paperInk:#1E2A5A; --muted:#6A6F8F;
  --sun:#FFC928; --tomato:#FF4F3F; --sky:#2FA8FF; --grass:#3DCB6C; --bubble:#FF7AC6;
  --display:'Bagel Fat One', 'Arial Rounded MT Bold', system-ui, sans-serif;
  --read:'Andika', 'Trebuchet MS', system-ui, sans-serif;
  color-scheme: dark;
}
html,body{height:100%}
body{background:var(--night);color:#F4EEDD;font-family:var(--read);overflow:hidden;-webkit-tap-highlight-color:transparent}
.app{height:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:10px;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-top:max(10px,env(safe-area-inset-top,0px));padding-bottom:max(10px,env(safe-area-inset-bottom,0px))}

/* top bar */
.bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:0 0 auto}
.brand{display:flex;align-items:baseline;gap:12px;min-width:0}
.wm{text-decoration:none;font-family:var(--display);font-size:22px;letter-spacing:.02em;display:inline-block;transform:rotate(180deg);
  background:linear-gradient(90deg,var(--tomato) 0 20%,var(--sun) 20% 40%,var(--grass) 40% 60%,var(--sky) 60% 80%,var(--bubble) 80% 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.btitle{font-size:15px;color:#C9CCE8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tools{display:flex;gap:8px}
.tool{display:flex;align-items:center;gap:6px;height:40px;padding:0 14px;border-radius:20px;border:2px solid #3A4585;background:transparent;color:#DDE0F5;font:600 14px var(--read);cursor:pointer}
.tool svg{width:18px;height:18px;flex:none}
.tool[aria-pressed="true"]{background:var(--sun);border-color:var(--sun);color:var(--ink)}
.tool:focus-visible,.nav button:focus-visible,.dot:focus-visible,.endbtn:focus-visible{outline:3px solid var(--sky);outline-offset:2px}
@media (max-width:560px){.tool span{display:none}.tool{padding:0 10px}.btitle{display:none}}

/* book */
.book{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:12px;touch-action:pan-y}
.artwrap{flex:1 1 56%;min-height:0;display:grid;place-items:center;container-type:size}
.art{position:relative;width:min(100cqw,133.33cqh);aspect-ratio:4/3;max-width:100%;border-radius:20px;overflow:hidden;background:#1B2558;
  box-shadow:0 0 0 4px var(--ink),0 18px 40px rgba(0,0,0,.45)}
.page{position:absolute;inset:0;opacity:0;transition:opacity .5s ease}
.page.show{opacity:1}
.page svg{display:block;width:100%;height:100%}

.panel{flex:0 1 auto;max-height:46%;min-height:0;overflow:auto;background:var(--paper);color:var(--paperInk);border-radius:20px;
  padding:20px 24px 16px;display:flex;flex-direction:column;gap:14px;box-shadow:0 0 0 4px var(--ink)}
.story{margin:0;font-size:clamp(20px,2.3vw + 8px,30px);line-height:1.45;text-wrap:pretty;max-width:34ch;transition:opacity .3s}
.story.fade{opacity:0}
.sfx{font-family:var(--display);color:var(--tomato);letter-spacing:.02em;font-weight:400}
.story em{font-style:normal;font-weight:700;text-decoration:underline;text-decoration-color:var(--sun);text-decoration-thickness:4px;text-underline-offset:3px}
.say{color:#2B3A8A}
.tip{display:flex;gap:10px;align-items:flex-start;background:#FFF0C9;border-radius:14px;padding:10px 14px;font-size:16px;line-height:1.4;color:#4A4030;max-width:46ch}
.tip svg{width:20px;height:20px;flex:none;margin-top:1px}
.tip b{display:block;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#9A7B1F;margin-bottom:1px}
body.notips .tip{display:none}
.endrow{display:flex;flex-wrap:wrap;gap:10px}
.endbtn{display:inline-flex;align-items:center;gap:8px;height:46px;padding:0 20px;border-radius:23px;border:3px solid var(--ink);background:var(--sun);color:var(--ink);font:700 17px var(--read);text-decoration:none;cursor:pointer}
.endbtn.alt{background:#fff}
.nav{margin-top:auto;display:flex;align-items:center;gap:12px;padding-top:4px}
.nav button.arrow{width:52px;height:52px;border-radius:50%;border:3px solid var(--ink);background:#fff;color:var(--ink);display:grid;place-items:center;cursor:pointer;flex:none}
.nav button.next{width:auto;padding:0 22px 0 24px;border-radius:26px;background:var(--sun);gap:8px;display:flex;align-items:center;font:700 18px var(--read)}
.nav button:disabled{opacity:.3;cursor:default}
.nav svg{width:22px;height:22px}
.dots{flex:1;display:flex;justify-content:center;gap:6px;flex-wrap:wrap;min-width:0}
.dot{width:10px;height:10px;border-radius:50%;border:2px solid var(--paperInk);background:transparent;padding:0;cursor:pointer}
.dot.on{background:var(--paperInk)}

@media (min-aspect-ratio:5/4) and (min-width:700px){
  .book{flex-direction:row;align-items:stretch}
  .artwrap{flex:1.55 1 0}
  .panel{flex:1 1 0;max-height:none;justify-content:center;padding:28px 30px 20px}
  .story{font-size:clamp(20px,1.5vw + 8px,30px)}
}

/* bedtime mode: dimmer, warmer, no bright paper */
body.bedtime .art{filter:brightness(.72) sepia(.28) saturate(.85)}
body.bedtime .panel{background:#2C2645;color:#F2E2BF}
body.bedtime .say{color:#FFD98A}
body.bedtime .tip{background:#3A3258;color:#E8DCC0}
body.bedtime .tip b{color:#E9C46A}
body.bedtime .dot{border-color:#F2E2BF}
body.bedtime .dot.on{background:#F2E2BF}
body.bedtime .story em{text-decoration-color:#9C7B2A}

/* ---- scene animation (inside SVG) ---- */
.blink,.breathe,.shiver,.teeth,.gshiv,.horn,.snugbody,.twinkle,.hint,.pop,.bob,.boing,.zz,.peek,.tog{transform-box:fill-box}
.blink{transform-origin:center;animation:blink 5s infinite}
.blink.b2{animation-delay:1.7s}
@keyframes blink{0%,91%,100%{transform:scaleY(1)}94%{transform:scaleY(.08)}97%{transform:scaleY(1)}}
.breathe{transform-origin:50% 100%;animation:breathe 3.4s ease-in-out infinite}
@keyframes breathe{50%{transform:scale(1.015,1.03)}}
.shiver{animation:shiv .16s linear infinite}
@keyframes shiv{0%,100%{transform:translateX(-1.6px)}50%{transform:translateX(1.6px)}}
.teeth{animation:chat .24s steps(2) infinite}
.chathard .teeth{animation-duration:.08s}
@keyframes chat{to{transform:translateY(2px)}}
.dark .gshiv{animation:shiv .14s linear infinite}
.shmarks{opacity:0;transition:opacity .6s .5s}
.dark .shmarks{opacity:1}
.wobble .horn{transform-origin:50% 100%;animation:wob 1.4s ease-in-out infinite}
@keyframes wob{25%{transform:rotate(-9deg)}75%{transform:rotate(9deg)}}
.nodding .snugbody{animation:nod .5s ease-in-out 3}
@keyframes nod{50%{transform:translateY(10px)}}
.boop .snugbody{animation:boop .5s ease-out}
@keyframes boop{40%{transform:translateY(-16px)}}
.twinkle{animation:tw 2.6s ease-in-out infinite alternate}
@keyframes tw{to{opacity:.25}}
.hint{transform-origin:center;animation:hint 1.8s ease-out infinite;pointer-events:none}
@keyframes hint{0%{transform:scale(.8);opacity:1}100%{transform:scale(1.35);opacity:0}}
.glowlines{opacity:0;transition:opacity .8s}
.litnl .glowlines,.glow .glowlines{opacity:1}
.crescent{fill:#D8CB98;transition:fill .8s}
.litnl .crescent,.glow .crescent{fill:#FFF4BE}
.warm{opacity:0;transition:opacity 1.4s ease}
.glow .warm,.warm.on{opacity:1}
.pop{opacity:0;transform-origin:50% 100%;transform:scale(.6);transition:opacity .25s,transform .35s cubic-bezier(.3,1.6,.5,1)}
.say-on .pop{opacity:1;transform:scale(1)}
.bob{animation:bob 2.8s ease-in-out infinite;transform-origin:center}
@keyframes bob{50%{transform:translateY(-6px)}}
.boing{animation:boing .6s cubic-bezier(.3,1.6,.5,1)}
@keyframes boing{30%{transform:scale(1.12)}}
.zz{animation:zz 4s ease-in infinite;opacity:0}
@keyframes zz{0%{opacity:0;transform:translate(0,0) scale(.6)}20%{opacity:1}100%{opacity:0;transform:translate(40px,-130px) scale(1.2)}}
.peek{transform-origin:center;transition:transform .35s cubic-bezier(.3,1.6,.5,1)}
.wide .peek{transform:scale(1.5)}
.tog{transition:transform .25s}
.dark .tog{transform:translateY(16px)}
/* night recolour for the bedroom */
.w,.w2,.fl,.pl,.rug,.red,.duv,.dt,.lin,.plate,.cur{transition:fill .9s,stroke .9s}
.dark .w{fill:#2A3474}.dark .w2{fill:#313D84}.dark .fl{fill:#4A3C70}.dark .pl{stroke:#3A2E5C}
.dark .rug{fill:#2D6A5C}.dark .red{fill:#8C3552}.dark .duv{fill:#9A4A8C}.dark .dt{fill:#A68A34}
.dark .lin{fill:#C4C7E4}.dark .plate{fill:#B9BCDB}.dark .cur{fill:#A24C86}
.glow .w{fill:#5B4C7E}.glow .w2{fill:#62528A}.glow .fl{fill:#7A5A6E}.glow .rug{fill:#3E8366}
.glow .red{fill:#B54452}.glow .duv{fill:#C35D9E}.glow .dt{fill:#D2A93C}.glow .lin{fill:#EDE3D4}.glow .cur{fill:#C95E9E}

@media (prefers-reduced-motion:reduce){
  .art svg *{animation:none!important;transition:none!important}
  .page,.story{transition:none}
}

/* Flipsy (Rive) hiding on each page */
.flipsy{position:absolute;z-index:5;aspect-ratio:4/5;transition:left .5s ease,top .5s ease,width .5s ease,opacity .3s}
.flipsy canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.flipsy .hit{cursor:pointer;touch-action:manipulation}
.flipsy.off{opacity:0;pointer-events:none}
.found{display:inline-flex;align-items:center;gap:6px;height:40px;padding:0 14px;border-radius:20px;background:#232C66;color:#F4EEDD;font:700 14px var(--read);white-space:nowrap}
.found b{font-family:var(--display);font-weight:400;font-size:16px;color:var(--sun)}
.found.bump{animation:fpop .5s cubic-bezier(.3,1.6,.5,1)}
@keyframes fpop{40%{transform:scale(1.15)}}
@media (max-width:560px){.found .lbl{display:none}}

.snugR{position:absolute;z-index:4;aspect-ratio:1000/1240;transition:left .5s ease,top .5s ease,width .5s ease,opacity .35s}
.snugR canvas{position:absolute;inset:0;width:100%;height:100%;display:block;cursor:pointer;touch-action:manipulation}
.snugR.off{opacity:0;pointer-events:none}
.snugR .ring{position:absolute;left:60%;top:56%;width:22%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;border:4px dashed var(--sun);pointer-events:none;animation:ringp 1.8s ease-out infinite}
@keyframes ringp{0%{transform:translate(-50%,-50%) scale(.8);opacity:1}100%{transform:translate(-50%,-50%) scale(1.35);opacity:0}}
@media (prefers-reduced-motion:reduce){.snugR .ring{animation:none}}
