/* Reading, scenery and content are separate blocks; no text scrims over artwork. */
.band.has-rendered-art{padding:clamp(28px,4vw,60px) 0;background:#0b2b23;display:block;min-height:0}
.band.has-rendered-art:nth-of-type(even){background:#102f29}
.band.has-rendered-art>.wrap{width:min(1280px,92vw)}
.band.has-rendered-art .intro{min-height:0!important;max-width:100%;padding:0 0 24px;margin:0;text-align:left;color:#eef3e7;position:relative;z-index:3}
.band.has-rendered-art .intro h2{font-family:var(--karat);font-size:clamp(2rem,4vw,3.4rem);font-weight:700;line-height:1.15;letter-spacing:-.025em;color:#f7df9b;text-shadow:none;-webkit-text-stroke:0}
.band.has-rendered-art .intro p{max-width:72ch;margin:16px 0 0;color:#e5eee4;font-size:clamp(1rem,1.4vw,1.125rem);line-height:1.75;text-shadow:none;font-weight:400;text-align:left}
.band.has-rendered-art .intro .foldbtn{margin:20px 0 0;min-height:44px;padding:10px 22px;color:#f8e2a2;background:#164637;border:1px solid #b4a267;text-shadow:none}
.band.has-rendered-art .foldscene{position:relative;inset:auto;width:100%;height:clamp(270px,36vw,520px);overflow:hidden;border:1px solid #395a45;border-radius:10px;opacity:1!important;margin:0 0 30px;isolation:isolate}
.band.has-rendered-art .scene-stage{position:absolute;inset:0;height:100%;width:100%}
.band.has-rendered-art .panel{margin-top:0}
.band.has-rendered-art .panel.shut{margin:0}
.band.has-rendered-art .scene-overlay{left:0!important;width:100%!important;max-height:none}
.band.has-rendered-art .scene-car{left:auto!important;width:min(65%,700px)!important;max-height:none}
.privacy-link{font-family:var(--karat);font-size:.9rem;padding:10px 0;text-align:center}
.topbar{background:#0c2e26;border-bottom:1px solid #577553;padding:10px 0}
.topbar.stuck{background:#0c2e26;backdrop-filter:none;padding:10px 0}
.topbar nav{flex-wrap:nowrap;justify-content:center;gap:clamp(13px,1.5vw,24px)}
.topbar a{font-size:clamp(.76rem,1vw,.94rem);padding:8px 0;-webkit-text-stroke:0;text-shadow:none}
.hero.art-refreshed{height:768px;min-height:768px;padding-top:80px;overflow:hidden}
.hero.art-refreshed .hero-grid{width:min(850px,94vw);margin:0 auto;align-self:flex-start}
.hero.art-refreshed .hero-copy{width:100%}
.hero.art-refreshed h1.oz-brand{width:min(790px,100%);margin:0 auto;line-height:1;filter:none;animation:none}
.oz-brand img{width:100%;height:auto;display:block;filter:none}
.hero.art-refreshed .tagline{margin:8px auto 16px;font-size:clamp(1.05rem,1.8vw,1.4rem);line-height:1.4;color:#133d29;text-shadow:none}
.hero.art-refreshed .buttons{margin:0}
.hero.art-refreshed #hero-company{--cast-unit:clamp(180px,22vw,260px);position:absolute;display:block;left:3%;right:3%;bottom:40px;width:94%;height:calc(var(--cast-unit)*1.65);max-width:1400px;min-height:0;filter:none}
.hero.art-refreshed #hero-company .hero-figure{--visible-height:calc(var(--cast-unit)*var(--figure-scale)*var(--figure-depth));position:absolute;display:block;left:var(--figure-x);bottom:var(--figure-ground);height:calc(var(--visible-height)*var(--figure-alpha));width:auto;max-width:none;max-height:none;object-fit:contain;transform:translateX(-50%) translateX(calc(var(--visible-height)*var(--figure-center))) translateY(calc(var(--visible-height)*var(--figure-pad)));z-index:var(--figure-z);filter:none;pointer-events:none}
@media(min-width:1490px){.hero.art-refreshed #hero-company{left:calc(50% - 700px);right:auto;width:1400px}}
@media(max-width:1000px){
  .topbar>.wrap{width:100%}
  .topbar nav{justify-content:flex-start;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;gap:22px;padding:0 20px}
  .topbar a{flex:0 0 auto;font-size:.83rem}
  html{scroll-padding-top:80px}
}
@media(max-width:700px){
  .band.has-rendered-art>.wrap{width:92vw}
  .band.has-rendered-art .intro{padding-bottom:20px}
  .band.has-rendered-art .intro h2{font-size:2rem}
  .band.has-rendered-art .intro p{font-size:1rem;line-height:1.7}
  .band.has-rendered-art .foldscene{height:300px;margin-bottom:24px;border-radius:7px}
  .band.has-rendered-art .scene-car{width:95%!important;right:1%;bottom:2%}
  .hero.art-refreshed{padding-top:85px;padding-bottom:0;min-height:760px;height:760px}
  .hero.art-refreshed .hero-grid{margin:0 auto}
  .hero.art-refreshed h1.oz-brand{width:100%;font-size:initial}
  .hero.art-refreshed .tagline{font-size:1.05rem;margin:12px auto 18px}
  .hero.art-refreshed #hero-company{--cast-unit:clamp(180px,34vw,240px);left:0;right:0;bottom:55px;width:100%;height:calc(var(--cast-unit)*1.65)}
  .hero.art-refreshed #hero-company .hero-figure:nth-child(-n+6){--figure-ground:38%!important}
}
@media(prefers-reduced-motion:reduce){.oz-brand,.oz-brand *{animation:none!important}}

/* The prior illustration remains a readable fallback until its replacement loads. */

/* Keyboard and reading cues stay available without a transparent navigation bar. */
#topbar.topbar:not(.stuck),#topbar.topbar.stuck{background:#0c2e26;backdrop-filter:none}
.topbar>.wrap{width:min(1440px,100%)}
.topbar nav{justify-content:flex-start;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;padding:0 20px}
.band.has-rendered-art.folded .intro>p:not(.tiny){display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;max-height:3.5em}
.starfield,#dust{display:none!important}

/* Readable copy, complete illustration frames, and visible keyboard focus. */
.band.has-rendered-art .intro p,.band.has-rendered-art .intro .foldbtn{-webkit-text-stroke:0;paint-order:normal}
.topbar nav{padding-block:6px}
.film-illustration{margin:0;background:#163b30;overflow:hidden}
.film-illustration img{display:block;width:100%;height:auto;max-height:none;object-fit:contain}
.film-illustration figcaption{padding:12px 16px;color:#e5eee4;font-size:.85rem;line-height:1.5;text-align:left}
.collectmedia.illustrated-prop{aspect-ratio:auto;height:auto;min-height:0;background:#143d30}
.collectmedia.illustrated-prop::after{display:none}
.collectmedia.illustrated-prop>.wiki-fallback{display:none}
.collectmedia.illustrated-prop .film-illustration img{position:static;height:auto;object-fit:contain}
@media print{#teach .foldscene{display:none!important}}

@media(max-width:620px){.charcurtain .charbook{grid-template-columns:minmax(0,1fr);width:100%;min-width:0}.charcurtain .charimage{max-height:340px;min-height:0}.charcurtain .charimage img{height:auto;max-height:340px;object-fit:contain}.charcurtain .charcopy{min-width:0;overflow-wrap:anywhere}}

/* These controls now sit on reading panels, without artwork behind their text. */
#teach .teachtab,#teach .gradetab,#teach .qzopt{-webkit-text-stroke:0;paint-order:normal;text-shadow:none}
.band.has-rendered-art .intro h2{text-shadow:none!important}

.hero.art-refreshed h1.oz-brand::before{display:none!important;animation:none!important}
/* Preserve full-size figures at the narrowest supported phone width. Move
   the two right figures together so Jack's pumpkin face stays clear. */
@media(max-width:350px){
  .hero.art-refreshed #hero-company .hero-figure.wogglebug{--figure-x:84.8%!important}
  .hero.art-refreshed #hero-company .hero-figure.jack{--figure-x:67.3%!important}
  .hero.art-refreshed #hero-company .hero-figure.scraps{--figure-x:14.5%!important}
}
.hero.stilled .cue,.hero.stilled .cue *,html.oz-paused .cue,html.oz-paused .cue *{animation-play-state:paused!important}
.film-illustration a{color:#fff0b5;text-underline-offset:3px}
.film-player{margin:0;padding-top:12px;background:#e3edce;color:#143d2c}
.film-player video{display:block;width:100%;max-width:320px;height:auto;margin:auto;background:#000}
.film-player figcaption{padding:12px 16px;font-size:.85rem;line-height:1.6;text-align:left}
.film-player a{color:#17563f;text-underline-offset:3px;overflow-wrap:anywhere}
.film-player video:focus-visible,.film-player a:focus-visible{outline:3px solid #805300;outline-offset:3px}
@media print{.film-player video{display:none}}

/* Missing reference media leaves a readable text card, never a large empty panel. */
.screenmedia:not(:has(img)),.collectmedia:not(:has(img)){display:none}
#maptip{width:min(300px,calc(100% - 24px));max-width:calc(100% - 24px);box-sizing:border-box}
#ozmap .pin:focus-visible{outline:3px solid #315bc4;outline-offset:4px}

.screenmedia::after{display:none}
.ozarchive-art img,.ozarchive-card:hover .ozarchive-art img{filter:none}

.map-place-guide{margin:20px 0;padding:22px;border:1px solid #7b9979;border-radius:7px;background:#e3edce;color:#143d2c;text-align:left}
.map-place-guide label{display:block;font-size:1.1rem;font-weight:600}
.map-place-guide p{color:#143d2c;max-width:72ch;line-height:1.6}
.map-place-guide select{width:100%;min-height:44px;font:inherit;font-size:16px;padding:10px;background:#fffef7;color:#143d2c;border:1px solid #63876c;border-radius:4px}
.map-place-guide h3{font-size:1.2rem;margin:20px 0 8px;color:#143d2c}
#maptip{pointer-events:auto}
.mapctl button{min-width:44px;min-height:44px}
.maplayers button{min-height:44px}

.family-portraits{margin:32px 0;text-align:left}
.family-portraits h3{color:#f7df9b;font-family:var(--karat);font-size:1.6rem;line-height:1.3}
.family-portraits>p{max-width:72ch;color:#e5eee4;line-height:1.7}
.family-portraits .portraits{margin-top:20px}
@media(max-width:700px){.scene-family{display:none}.family-portraits h3{font-size:1.35rem}}

.char-sources{display:block;margin-top:1em;font-size:.85rem;line-height:1.6}.char-sources a{color:#fff0b5;text-underline-offset:3px}

/* Hidden descriptions must not intercept map taps or drags. */
#maptip{pointer-events:none}
#maptip.on{pointer-events:auto}

/* Keep the local author illustration at its native portrait ratio. */
.about .portraitframe{align-self:start;min-height:0;height:auto;aspect-ratio:2/3;background:#172c2b}
.about .portraitframe img{width:100%;height:auto;min-height:0;object-fit:contain;object-position:center bottom}

/* Center the reading layout and controls as requested. */
.band :is(h2,h3,h4,p,dd),
.band.has-rendered-art .intro,
.band.has-rendered-art .intro p,
.family-portraits,.storybook-copy,.magiccopy,.lorecard,.era-item,.vol,
.screening,.screencopy,.collectcopy,.ozarchive-copy,
.aboutgrid,.about .prose,.about .prose p,#playbill,
.film-illustration figcaption,.film-player figcaption,.map-place-guide,
.charcopy h3,.charcopy p,.charcopy .charrole,.charcopy .char-sources,
.curtain p,footer .footgrid,footer .footgrid p {text-align:center}
.band.has-rendered-art .intro p{margin:16px auto 0}
.band.has-rendered-art .intro .foldbtn{margin:20px auto 0}
.family-portraits>p,.ozarchive-head p,.map-place-guide p,
.story .body,.spineitem p{margin-inline:auto}
.band>.wrap,.band .panel,.band .foldscene,
.storygrid,.trilogy-story,.familyforest,.aboutgrid,
.film-illustration,.film-player{margin-inline:auto}
.pic,.screening,.collectcard,.ozarchive-card{padding-inline:0}
.vol{padding-inline:15px}
.vol.textonly{padding-inline:18px}
.vol .bookmini{justify-self:center}
.stall{align-items:center;padding-inline:2.4em;text-align:center}
.aboutgrid{justify-items:center}
.about .lead::first-letter{float:none;padding:0;font-size:inherit;line-height:inherit}
.tabrow,.buttons,.teachbar,.gradebar,.qzopts,.lesson-h,.mapkey{justify-content:center}
.topbar nav{justify-content:flex-start;justify-content:safe center}
.archive-tools label,.archive-tools .archive-tools-count,
.map-place-guide label,.map-place-guide h3{text-align:center}
/* Keep list markers and text entry predictable inside the centered panels. */
#teach :is(.lsteps,.promptlist),#teach :is(.lsteps,.promptlist) li{text-align:start}
.archive-tools input,.archive-tools select,.map-place-guide select{text-align:start}
.about .portraitframe::after{box-shadow:none}

/* Complete map, section motion and bright chapter styles. */
.oz-map-banner{display:block;width:100%;height:auto;max-width:none;overflow:visible;background:#f3ca80;font-family:'Arial Rounded MT Bold','Trebuchet MS',Arial,sans-serif}
.ozmapb-phone{display:none}
.oz-map-banner text{fill:#1c332b;paint-order:stroke fill;stroke-linejoin:round}
.ozmapb-country{font-size:22px;font-weight:900;letter-spacing:1px;stroke:#fff6dd;stroke-width:3px}
.ozmapb-direction{font-size:12px;font-weight:800;letter-spacing:1.2px;stroke:#fff3d2;stroke-width:2px}
.ozmapb-landmark{font-size:14px;font-weight:800;stroke:#fff6d9;stroke-width:3px}
.ozmapb-city-label{font-size:18px;font-weight:900;letter-spacing:1.3px;stroke:#d7ffcd;stroke-width:4px}
.ozmapb-road-label{font-size:11px;font-weight:900;letter-spacing:.9px;stroke:#d3f2ff;stroke-width:3px}
.ozmapb-desert-label{font-size:13px;font-weight:900;letter-spacing:4px;stroke:#f9dfa6;stroke-width:3px}
.ozmapb-map-title{font-size:17px;font-weight:900;letter-spacing:4px;stroke:#ffe7b1;stroke-width:3px}
.ozmapb-road-trace{animation:ozmapb-road 7s linear infinite;animation-play-state:paused!important}
.ozmapb-city-light-a{animation:ozmapb-city-a 4.8s ease-in-out infinite;animation-play-state:paused!important}
.ozmapb-city-light-b{animation:ozmapb-city-b 4.8s ease-in-out infinite;animation-play-state:paused!important}
:is(.stage,.scene-stage).oz-motion-on :is(.ozmapb-road-trace,.ozmapb-city-light-a,.ozmapb-city-light-b){animation-play-state:running!important}
@keyframes ozmapb-road{to{stroke-dashoffset:-133}}
@keyframes ozmapb-city-a{0%,100%{opacity:.5}50%{opacity:1}}
@keyframes ozmapb-city-b{0%,100%{opacity:1}50%{opacity:.45}}
.ozmapb-phone .ozmapb-country{font-size:20px;letter-spacing:.5px}.ozmapb-phone .ozmapb-direction{font-size:11px;letter-spacing:.6px}.ozmapb-phone .ozmapb-landmark{font-size:13px}.ozmapb-phone .ozmapb-city-label{font-size:15px;letter-spacing:.8px}.ozmapb-phone .ozmapb-map-title{font-size:15px;letter-spacing:3px}.ozmapb-phone .ozmapb-desert-label{font-size:12px;letter-spacing:3px}
@media(max-width:680px){.ozmapb-wide{display:none}.ozmapb-phone{display:block}}
@media(prefers-reduced-motion:reduce){.oz-map-banner :is(.ozmapb-road-trace,.ozmapb-city-light-a,.ozmapb-city-light-b){animation:none!important;animation-play-state:paused!important}}

/* No observer, SMIL, frame pan, filter or dark overlay. The shared framework owns visibility. */
.ozfxb-page{transform-origin:0 0;animation:ozfxb-page-turn 7.6s ease-in-out infinite;animation-play-state:paused}
.ozfxb-press-trace{animation:ozfxb-press-turn 6s linear infinite;animation-play-state:paused}
.ozfxb-feed-sheet{transform-origin:0 0;animation:ozfxb-paper-feed 6s ease-in-out infinite;animation-play-state:paused}
.ozfxb-library-volume{transform-origin:0 0;animation:ozfxb-volume-hover 6.4s ease-in-out infinite;animation-play-state:paused}
.ozfxb-library-ribbon{transform-origin:0 0;animation:ozfxb-ribbon-sway 3.2s ease-in-out infinite;animation-play-state:paused}
.ozfxb-receipt-tail{transform-origin:0 0;animation:ozfxb-receipt-flutter 5.8s ease-in-out infinite;animation-play-state:paused}
.scene-stage.oz-motion-on :is(.ozfxb-page,.ozfxb-press-trace,.ozfxb-feed-sheet,.ozfxb-library-volume,.ozfxb-library-ribbon,.ozfxb-receipt-tail){animation-play-state:running}
@keyframes ozfxb-page-turn{0%,55%,100%{transform:scaleX(1) skewY(0)}64%{transform:scaleX(.13) skewY(-6deg)}75%{transform:scaleX(-.92) skewY(-4deg)}84%{transform:scaleX(-.92) skewY(-4deg)}94%{transform:scaleX(.13) skewY(-6deg)}}
@keyframes ozfxb-press-turn{to{stroke-dashoffset:-544}}
@keyframes ozfxb-paper-feed{0%,22%,100%{transform:translate(0,0) rotate(0)}42%,62%{transform:translate(4px,-17px) rotate(-3deg)}80%{transform:translate(1px,-5px) rotate(1deg)}}
@keyframes ozfxb-volume-hover{0%,100%{transform:translate(0,0) rotate(-3deg)}50%{transform:translate(-3px,-9px) rotate(4deg)}}
@keyframes ozfxb-ribbon-sway{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(8deg)}}
@keyframes ozfxb-receipt-flutter{0%,45%,100%{transform:rotate(0) scaleY(1)}58%{transform:rotate(-5deg) scaleY(.88)}68%{transform:rotate(2deg) scaleY(1.02)}80%{transform:rotate(-2deg) scaleY(.96)}}
@media(prefers-reduced-motion:reduce){.scene-stage :is(.ozfxb-page,.ozfxb-press-trace,.ozfxb-feed-sheet,.ozfxb-library-volume,.ozfxb-library-ribbon,.ozfxb-receipt-tail){animation:none!important}}

/* Private candidate: actual scene objects, no viewport/observer ownership. */
.ozfx4-funnel-flow{stroke:#c0c7d8;stroke-width:2;opacity:.65;stroke-dasharray:20 31;animation:ozfx4-vortex 2.8s linear infinite}
.ozfx4-funnel-small{stroke-width:1.4;opacity:.55;animation-duration:2.1s;animation-direction:reverse}
.ozfx4-rain{stroke-width:1.25;opacity:.32;stroke-dasharray:12 92;animation:ozfx4-rainfall 1.35s linear infinite}
.ozfx4-rain-far{stroke-width:.8;opacity:.2;stroke-dasharray:7 92;animation-duration:2.2s;animation-delay:-.8s}
.ozfx4-sea-flow{stroke:#e4f8ff;stroke-width:2.4;opacity:.82;stroke-dasharray:40 74;animation:ozfx4-wave-crest 5.8s linear infinite}
.ozfx4-sea-far{stroke-width:1.4;opacity:.65;stroke-dasharray:27 89;animation-duration:8.6s;animation-direction:reverse}
.ozfx4-sea-undertow{stroke:#99d8ef;stroke-width:1;opacity:.48;stroke-dasharray:17 51;animation:ozfx4-wave-under 7s linear infinite}
.ozfx4-reel{transform-box:fill-box;transform-origin:center;animation:ozfx4-reel-turn 3.2s linear infinite}
.ozfx4-reel-reverse{animation-direction:reverse}
.ozfx4-projector-beam{opacity:.09;animation:ozfx4-projection 5.2s ease-in-out infinite}
.ozfx4-screen-light{opacity:.1;animation:ozfx4-screen-breathe 5.2s ease-in-out infinite}
.ozfx4-projector-grain{opacity:.12;animation:ozfx4-film-travel 4.6s linear infinite}
.ozfx4-lens-light{opacity:.75;animation:ozfx4-lens-breathe 5.2s ease-in-out infinite}
.ozfx4-book-page{transform-box:view-box;transform-origin:0 0;opacity:0;animation:ozfx4-page-turn 8.5s ease-in-out infinite}
.ozfx4-cap-glint{opacity:.72;animation:ozfx4-cap-sheen 6.5s linear infinite}
.ozfx4-candle-flame{transform-box:fill-box;transform-origin:center bottom;animation:ozfx4-flame 1.8s ease-in-out infinite}
.ozfx4-candle-heart{transform-box:fill-box;transform-origin:center bottom;animation:ozfx4-flame-heart 1.8s ease-in-out infinite}
.ozfx4-orb-gleam{opacity:.65;animation:ozfx4-orb-sheen 5.6s ease-in-out infinite}
/* Deliberately last after animation shorthands: nothing starts on insertion. */
.ozfx4-animated{animation-play-state:paused!important}
:is(.stage,.scene-stage).oz-motion-on .ozfx4-animated{animation-play-state:running!important}
@keyframes ozfx4-vortex{to{stroke-dashoffset:-102}}
@keyframes ozfx4-rainfall{to{stroke-dashoffset:-104}}
@keyframes ozfx4-wave-crest{0%{stroke-dashoffset:0}50%{opacity:.56}100%{stroke-dashoffset:-114;opacity:.82}}
@keyframes ozfx4-wave-under{to{stroke-dashoffset:68}}
@keyframes ozfx4-reel-turn{to{transform:rotate(360deg)}}
@keyframes ozfx4-projection{0%,100%{opacity:.08}50%{opacity:.17}}
@keyframes ozfx4-screen-breathe{0%,100%{opacity:.05}50%{opacity:.15}}
@keyframes ozfx4-film-travel{to{stroke-dashoffset:-77}}
@keyframes ozfx4-lens-breathe{0%,100%{opacity:.6}50%{opacity:.95}}
@keyframes ozfx4-page-turn{0%,58%{opacity:0;transform:scaleX(1)}61%{opacity:1;transform:scaleX(1)}72%{opacity:1;transform:scaleX(.05)}83%{opacity:1;transform:scaleX(-1)}88%,100%{opacity:0;transform:scaleX(-1)}}
@keyframes ozfx4-cap-sheen{0%{stroke-dashoffset:0;opacity:.4}50%{opacity:.85}100%{stroke-dashoffset:-100;opacity:.4}}
@keyframes ozfx4-flame{0%,100%{transform:scale(.92,1)}35%{transform:scale(1.04,.86) skewX(-5deg)}70%{transform:scale(.85,1.1) skewX(4deg)}}
@keyframes ozfx4-flame-heart{0%,100%{transform:scale(.9,1)}50%{transform:scale(1.05,.85)}}
@keyframes ozfx4-orb-sheen{0%,100%{stroke-dashoffset:0;opacity:.4}50%{stroke-dashoffset:-32;opacity:.8}}
@media(prefers-reduced-motion:reduce){.ozfx4-animated{animation:none!important;animation-play-state:paused!important}.ozfx4-book-page{opacity:0}.ozfx4-rain{opacity:.12}}

/* Local prop animation only. Framework owns lazy mounting, object-fit
   projection, hidden-document pausing and reduced-motion preferences. */
.ozfxg-type{stroke-dasharray:140;stroke-dashoffset:140;animation:ozfxg-type 12s ease-in-out infinite;animation-play-state:paused}
.ozfxg-type-b{animation-delay:1s}.ozfxg-type-c{animation-delay:2s}
.ozfxg-caret{opacity:0;animation:ozfxg-caret 1s steps(1,end) infinite;animation-play-state:paused}
.ozfxg-draft-flight{opacity:0;animation:ozfxg-draft-flight 12s ease-in-out infinite;animation-play-state:paused}
.ozfxg-manuscript-ink{stroke-dasharray:300;stroke-dashoffset:300;opacity:0;animation:ozfxg-manuscript-ink 12s ease-in-out infinite;animation-play-state:paused}
.ozfxg-map-route{stroke-dasharray:100;stroke-dashoffset:100;opacity:0;animation:ozfxg-map-route 9s ease-in-out infinite;animation-play-state:paused}
.ozfxg-lesson-brick{opacity:0;animation:ozfxg-lesson-brick 9s ease-in-out infinite;animation-play-state:paused}
.ozfxg-city-check{stroke-dasharray:28;stroke-dashoffset:28;opacity:0;animation:ozfxg-city-check 9s ease-in-out infinite;animation-play-state:paused}
.ozfxg-lesson-page{transform-origin:0 0;opacity:0;animation:ozfxg-lesson-page 9s ease-in-out infinite;animation-play-state:paused}
.ozfxg-key-journey{opacity:0;animation:ozfxg-key-journey 13s ease-in-out infinite;animation-play-state:paused}
.ozfxg-lock-answer{opacity:0;animation:ozfxg-lock-answer 13s ease-in-out infinite;animation-play-state:paused}
.ozfxg-memory-book{opacity:0;animation:ozfxg-memory-book 13s ease-in-out infinite;animation-play-state:paused;transform-origin:0 0}
.ozfxg-memory-lines{stroke-dasharray:240;stroke-dashoffset:240;animation:ozfxg-memory-lines 13s ease-in-out infinite;animation-play-state:paused}
.scene-stage.oz-motion-on .ozfxg-layer *{animation-play-state:running}
@keyframes ozfxg-type{0%,8%{stroke-dashoffset:140;opacity:0}12%{opacity:1}34%,68%{stroke-dashoffset:0;opacity:1}78%,100%{stroke-dashoffset:0;opacity:0}}
@keyframes ozfxg-caret{0%,48%{opacity:1}49%,100%{opacity:0}}
@keyframes ozfxg-draft-flight{0%,35%{opacity:0;transform:translate(0,0) scale(.15)}41%{opacity:1;transform:translate(-5px,0) scale(.35)}59%{opacity:1;transform:translate(-145px,-54px) rotate(-13deg) scale(.8)}77%,84%{opacity:1;transform:translate(-305px,132px) rotate(0) scale(.65)}91%,100%{opacity:0;transform:translate(-305px,132px) scale(.6)}}
@keyframes ozfxg-manuscript-ink{0%,75%{opacity:0;stroke-dashoffset:300}80%{opacity:1}91%{opacity:1;stroke-dashoffset:0}99%,100%{opacity:0;stroke-dashoffset:0}}
@keyframes ozfxg-map-route{0%,9%{opacity:0;stroke-dashoffset:100}14%{opacity:1}48%,65%{opacity:1;stroke-dashoffset:0}77%,100%{opacity:0;stroke-dashoffset:0}}
@keyframes ozfxg-lesson-brick{0%,10%{opacity:0;transform:translate(0,0) scale(.65)}16%{opacity:1;transform:translate(-3px,-1px) scale(.8)}37%{opacity:1;transform:translate(-47px,-2px) scale(.8)}53%,59%{opacity:1;transform:translate(-76px,0) scale(.7)}66%,100%{opacity:0;transform:translate(-76px,0) scale(.5)}}
@keyframes ozfxg-city-check{0%,48%{opacity:0;stroke-dashoffset:28}53%{opacity:1}64%,74%{opacity:1;stroke-dashoffset:0}83%,100%{opacity:0;stroke-dashoffset:0}}
@keyframes ozfxg-lesson-page{0%,54%{opacity:0;transform:scaleX(1)}60%{opacity:.95;transform:scaleX(1)}68%{opacity:.95;transform:scaleX(.05)}76%{opacity:.95;transform:scaleX(-1)}87%,100%{opacity:0;transform:scaleX(-1)}}
@keyframes ozfxg-key-journey{0%,9%{opacity:0;transform:translate(0,0) scale(.15)}16%{opacity:1;transform:translate(0,-5px) scale(.6)}34%{opacity:1;transform:translate(190px,-83px) rotate(-25deg) scale(.9)}49%,55%{opacity:1;transform:translate(394px,-34px) rotate(-90deg) scale(.75)}61%,100%{opacity:0;transform:translate(394px,-34px) rotate(-90deg) scale(.6)}}
@keyframes ozfxg-lock-answer{0%,49%{opacity:0}54%,58%{opacity:1}64%,100%{opacity:0}}
@keyframes ozfxg-memory-book{0%,57%{opacity:0;transform:scale(.1,.3)}65%{opacity:1;transform:scale(1,1)}83%{opacity:1;transform:scale(1,1)}94%,100%{opacity:0;transform:scale(.9,.2)}}
@keyframes ozfxg-memory-lines{0%,65%{stroke-dashoffset:240}82%,100%{stroke-dashoffset:0}}
@media(prefers-reduced-motion:reduce){.ozfxg-layer *{animation:none}}

/* Candidate scene-local SVG effects. Stage visibility, tab and reduced-motion control stay with the host. */
.ozfxa-atlas-scroll{opacity:.28}
.ozfxa-atlas-scroll-light{opacity:.78;stroke-dasharray:45 260;stroke-dashoffset:280;animation:ozfxa-scrolltrace 5.8s linear infinite}
.ozfxa-atlas-hinge{opacity:.4;animation:ozfxa-hinge 5.8s ease-in-out infinite}
.ozfxa-atlas-moon{animation:ozfxa-moon 7s ease-in-out infinite}
.ozfxa-palace-inlay{opacity:.16;animation:ozfxa-inlay 8s ease-in-out infinite}
.ozfxa-palace-two{animation-delay:1.4s}
.ozfxa-palace-three{animation-delay:2.8s}
.ozfxa-palace-window{animation:ozfxa-window 10s ease-in-out infinite}
.ozfxa-volkov-book{opacity:.18;animation:ozfxa-book 9s ease-in-out infinite}
.ozfxa-volkov-b2{animation-delay:1s}
.ozfxa-volkov-b3{animation-delay:2s}
.ozfxa-volkov-b4{animation-delay:3s}
.ozfxa-volkov-b5{animation-delay:4s}
.ozfxa-volkov-b6{animation-delay:5s}
.ozfxa-volkov-city{opacity:.15;animation:ozfxa-city 9s ease-in-out 6s infinite}
.ozfxa-cabinet-crown,.ozfxa-cabinet-wand,.ozfxa-cabinet-shoes,.ozfxa-cabinet-globe{opacity:.1;animation:ozfxa-artifact 7s ease-in-out infinite}
.ozfxa-cabinet-wand{animation-delay:1.3s}
.ozfxa-cabinet-shoes{animation-delay:2.6s}
.ozfxa-cabinet-globe{animation-delay:3.9s}
@keyframes ozfxa-scrolltrace{0%{stroke-dashoffset:280;opacity:0}18%{opacity:.85}75%{opacity:.85}100%{stroke-dashoffset:-70;opacity:0}}
@keyframes ozfxa-hinge{0%,25%,100%{opacity:.25}45%{opacity:.9}60%{opacity:.25}}
@keyframes ozfxa-moon{0%,100%{opacity:.12}50%{opacity:.32}}
@keyframes ozfxa-inlay{0%,20%,100%{opacity:.12}42%{opacity:.72}58%{opacity:.35}}
@keyframes ozfxa-window{0%,100%{opacity:.18}50%{opacity:.5}}
@keyframes ozfxa-book{0%,15%,48%,100%{opacity:.14}25%,33%{opacity:.9}}
@keyframes ozfxa-city{0%,18%,55%,100%{opacity:.12}28%,40%{opacity:.8}}
@keyframes ozfxa-artifact{0%,15%,52%,100%{opacity:.1}27%,34%{opacity:.8}}
/* The host provides .oz-motion-on only while visible, tab active and motion permitted. */
.ozfxa-atlas *, .ozfxa-palace *, .ozfxa-volkov *, .ozfxa-cabinet *{animation-play-state:paused}
.oz-motion-on .ozfxa-atlas *, .oz-motion-on .ozfxa-palace *, .oz-motion-on .ozfxa-volkov *, .oz-motion-on .ozfxa-cabinet *{animation-play-state:running}
@media (prefers-reduced-motion:reduce){
  .ozfxa-atlas *, .ozfxa-palace *, .ozfxa-volkov *, .ozfxa-cabinet *{animation:none!important;opacity:.22!important}
}

/* Effects occupy the image plane, not the whole section. */
.scene-stage > .oz-effect-overlay {
  position: absolute;
  z-index: 1;
  display: block;
  overflow: visible;
  visibility: hidden;
  pointer-events: none;
  animation: none !important;
}

/* Stage controller sets oz-motion-on only when visible, the tab is foreground,
   and the visitor has not requested reduced motion. */
.scene-stage .oz-effect-overlay *,
.scene-stage .oz-effect-overlay *::before,
.scene-stage .oz-effect-overlay *::after {
  animation-play-state: paused !important;
}
.scene-stage.oz-motion-on .oz-effect-overlay *,
.scene-stage.oz-motion-on .oz-effect-overlay *::before,
.scene-stage.oz-motion-on .oz-effect-overlay *::after {
  animation-play-state: running !important;
}
html.oz-paused .scene-stage .oz-effect-overlay *,
html.oz-paused .scene-stage .oz-effect-overlay *::before,
html.oz-paused .scene-stage .oz-effect-overlay *::after {
  animation-play-state: paused !important;
}
@media (prefers-reduced-motion: reduce) {
  .scene-stage .oz-effect-overlay *,
  .scene-stage .oz-effect-overlay *::before,
  .scene-stage .oz-effect-overlay *::after {
    animation: none !important;
    transition: none !important;
  }
}

/* PRIVATE candidate. No backdrop movement or flashes. Every moving part starts
   paused; the host's shared controller enables visible, foreground stages. */
.ozlv-body{animation:ozlv-funnel-form 7s ease-in-out infinite}
.ozlv-secondary .ozlv-body{animation-duration:8.3s;animation-delay:-3s}
.ozlv-spin{animation:ozlv-rotation 3s linear infinite;stroke-linecap:round;opacity:.74}
.ozlv-dust{animation:ozlv-dust-form 3.7s ease-in-out infinite}
.ozlv-ground-spin{animation:ozlv-ground-flow 1.4s linear infinite;opacity:.8}
.ozlv-debris{animation:ozlv-debris-orbit 1.8s linear infinite}
.ozlv-debris-b{animation-delay:-.6s;animation-duration:2.2s}
.ozlv-debris-c{animation-delay:-1.3s;animation-duration:1.6s}
.ozlv-rain{stroke-width:1.25;opacity:.27;stroke-dasharray:12 92;animation:ozlv-rainfall 1.35s linear infinite}
.ozlv-rain-far{stroke-width:.8;opacity:.16;stroke-dasharray:7 92;animation-duration:2.2s;animation-delay:-.8s}
.ozlv-story *{animation-play-state:paused!important}
.scene-stage.oz-motion-on .ozlv-story *{animation-play-state:running!important}
html.oz-paused .scene-stage .ozlv-story *{animation-play-state:paused!important}
/* CSS path interpolation changes the silhouette itself. Browsers without CSS
   d support retain the complete static d attribute rather than losing funnels. */
@keyframes ozlv-funnel-form{
  0%,100%{d:path('M536 78C558 94 594 97 619 77C605 105 597 126 598 151C599 183 610 207 603 234C598 237 593 236 590 231C595 209 579 191 579 170C578 135 551 115 536 78Z')}
  35%{d:path('M536 78C558 94 594 97 619 77C610 105 594 128 596 153C599 182 603 210 596 234C591 237 586 235 585 230C591 210 580 189 575 170C571 137 553 115 536 78Z')}
  70%{d:path('M536 78C558 94 594 97 619 77C604 108 600 126 603 150C604 180 617 209 609 234C605 237 599 236 596 232C602 211 585 192 585 170C581 136 550 116 536 78Z')}
}
@keyframes ozlv-rotation{to{stroke-dashoffset:-240}}
@keyframes ozlv-ground-flow{to{stroke-dashoffset:-52}}
@keyframes ozlv-dust-form{0%,100%{d:path('M574 237C568 233 573 229 581 230C582 224 589 225 594 230C599 226 607 225 611 231C621 228 628 235 620 239C604 244 586 243 574 237Z')}50%{d:path('M572 237C566 232 575 226 582 230C585 225 592 224 596 229C602 224 609 227 613 232C624 229 630 236 621 240C604 244 583 242 572 237Z')}}
@keyframes ozlv-debris-orbit{0%,100%{transform:translate(-21px,0) rotate(0);opacity:.5}25%{transform:translate(0,-8px) rotate(110deg);opacity:.35}50%{transform:translate(21px,-2px) rotate(210deg);opacity:.7}75%{transform:translate(0,4px) rotate(290deg);opacity:1}}
@keyframes ozlv-rainfall{to{stroke-dashoffset:-104}}
@media(prefers-reduced-motion:reduce){.scene-stage .ozlv-story *{animation:none!important;animation-play-state:paused!important}.ozlv-debris{display:none}.ozlv-rain{opacity:.1}}

.oz-charm-light{animation:ozCharmLight 3.8s ease-in-out infinite;opacity:.2;transform-origin:center;transform-box:fill-box}
@keyframes ozCharmLight{0%,100%{opacity:.12;scale:.7}50%{opacity:.4;scale:1.15}}
.oz-army-footstep{animation:ozArmyFootstep 2s ease-out infinite;transform-box:fill-box;transform-origin:center}
@keyframes ozArmyFootstep{0%,70%,100%{opacity:0;transform:translateX(0) scale(.3)}18%{opacity:.65}55%{opacity:0;transform:translateX(-15px) scale(1.2,.65)}}

/* One purposeful book cover opening; host retains all visibility ownership. */
.ozfd-opening-cover{transform-origin:0 0;animation:ozfd-book-open 9s ease-in-out infinite;animation-play-state:paused!important}
.scene-stage.oz-motion-on .ozfd-opening-cover{animation-play-state:running!important}
html.oz-paused .scene-stage .ozfd-opening-cover{animation-play-state:paused!important}
@keyframes ozfd-book-open{0%,50%,100%{transform:scaleX(1) skewY(0)}62%,74%{transform:scaleX(.16) skewY(-9deg)}86%{transform:scaleX(1) skewY(0)}}
@media(prefers-reduced-motion:reduce){.scene-stage .ozfd-opening-cover{animation:none!important;animation-play-state:paused!important;transform:none}}

/* Bright chapter entrances; artwork and reading panels keep separate space. */
body :is(#story,#books,#guardians,#places,#cast,#magic,#history,#forty,#magicland,#screen,#collect,#beyond,#about,#teach,#shop).band.has-rendered-art{background:var(--chapter-paper,#edf4d6);padding-block:clamp(32px,4vw,60px)}
body #story{--chapter-paper:#e9e5fa}body #books{--chapter-paper:#fff0c0}
body #guardians{--chapter-paper:#fce2e9}body #places{--chapter-paper:#e2f0cc}
body #cast{--chapter-paper:#ffe5d0}body #magic{--chapter-paper:#dff2f5}
body #history{--chapter-paper:#f6e9d0}body #forty{--chapter-paper:#e0eafa}
body #magicland{--chapter-paper:#f3e6c8}body #screen{--chapter-paper:#eee0f6}
body #collect{--chapter-paper:#fff0c9}body #beyond{--chapter-paper:#dceff1}
body #about{--chapter-paper:#e2f1dc}body #teach{--chapter-paper:#f9edcb}
body #shop{--chapter-paper:#dff0d5}
body .band.has-rendered-art::before{display:none}
body .band.has-rendered-art .intro,body .band.has-rendered-art .intro p{color:#234835}
body .band.has-rendered-art .intro h2{color:#174934;font-size:clamp(2rem,4vw,3.4rem)}
body .band.has-rendered-art .intro p{max-width:58ch;font-size:clamp(1.05rem,1.6vw,1.2rem);font-weight:500;line-height:1.6}
body .band.has-rendered-art.folded .intro>p:not(.tiny){display:block;max-height:none;overflow:visible}
body .band.has-rendered-art .intro .foldbtn{background:#1c6244;border:2px solid #12432f;color:#fff3c4;border-radius:30px;padding:11px 25px;font-size:.92rem;box-shadow:0 3px 0 #12432f;min-height:48px}
body .band.has-rendered-art .intro .foldbtn:hover{background:#26774f;transform:translateY(-1px)}
body .band.has-rendered-art .intro .foldbtn:focus-visible{outline:3px solid #815416;outline-offset:5px}
body .band.has-rendered-art .foldscene{border:3px solid #254c35;border-radius:18px;box-shadow:0 5px 0 #254c351c}
body .band.has-rendered-art .panel:not(.shut){background:#103b2d;color:#f2f4df;border:2px solid #315b41;border-radius:18px;padding:clamp(18px,3vw,36px);margin-top:12px}
.section-story-note{max-width:74ch;margin:0 auto 30px;color:#e6efdf;font-size:1rem;line-height:1.8}
body #forty.band.has-rendered-art{padding-bottom:clamp(32px,4vw,60px)}
/* Phone panoramas keep the full four-person tableau rather than losing faces. */
@media(max-width:680px){#guardians.band.has-rendered-art .foldscene{height:auto;aspect-ratio:2.5}#guardians .scene-backdrop{object-fit:contain}body .band.has-rendered-art .foldscene{border-radius:12px}body .band.has-rendered-art .panel:not(.shut){padding:18px 12px}}
@media print{body .band.has-rendered-art,body .band.has-rendered-art .panel:not(.shut){background:white!important;color:black!important;border:0;box-shadow:none}body .band.has-rendered-art .intro h2,body .band.has-rendered-art .intro p,.section-story-note{color:black!important}}
/* Leave storm sky above a substantial foreground car so both story beats read. */
#story.band.has-rendered-art .foldscene{height:clamp(420px,46vw,600px)}
#story .story-vehicle{width:min(85%,820px)}
@media(max-width:680px){#story.band.has-rendered-art .foldscene{height:320px}#story .story-vehicle{width:98%}}

.source-notes{max-width:72ch;margin:16px auto 24px;font-size:.9rem;line-height:1.7;color:#e5efdc;text-align:center}.source-notes summary{cursor:pointer;min-height:44px;padding:10px}.source-notes p{margin:12px auto 0}.source-notes summary:focus-visible{outline:3px solid #f0ca64;outline-offset:3px}

/* Accessible lookup within the single, alphabetized character collection. */
.character-search{max-width:40rem;margin:1rem auto 1.5rem;text-align:left}
.character-search label{display:block;font-weight:bold;margin-bottom:.45rem}
.character-search-controls{display:flex;gap:.65rem}
.character-search input{flex:1;min-width:0;padding:.7rem .85rem;border:2px solid #c8a963;border-radius:.6rem;background:#fffdf5;color:#17261e;font:inherit}
.character-search button{padding:.7rem 1rem;border:2px solid #c8a963;border-radius:.6rem;background:#174d36;color:#fffdf5;font:inherit;cursor:pointer}
.character-search button:disabled{opacity:.55;cursor:default}
.character-search input:focus-visible,.character-search button:focus-visible{outline:3px solid #f9da7a;outline-offset:3px}
.character-search p{margin:.5rem 0;color:inherit}
#castGrid [data-character][hidden]{display:none!important}

/* Student quiz printouts omit answers unless a teacher requests a key. */
.quiz-print-options{display:flex;align-items:center;justify-content:center;gap:.6rem;margin:1rem auto;font:inherit;color:inherit}
.quiz-print-options input{width:1.15rem;height:1.15rem;accent-color:#1b6d49}
@media print{
 #teach .quiz-print-options,#teach .classroom-print,#teach .gradebar{display:none!important}
 #teach .qzexp,#teach .quiz-answer-key{display:none!important}
 #teach:has(#quiz-print-answers:checked) .qzexp,#teach:has(#quiz-print-answers:checked) .quiz-answer-key{display:block!important}
 #teach .qzopt,#teach .qzopt.right,#teach .qzopt.wrong{background:#fff!important;color:#000!important;border:1px solid #777!important;opacity:1!important;box-shadow:none!important;transition:none!important;animation:none!important}
 #teach .qzopt::before{content:counter(quiz-option,upper-alpha) ". ";font-weight:bold}
 #teach .qzopts{counter-reset:quiz-option}
 #teach .qzopt{counter-increment:quiz-option}
}

/* Source-grounded introduction to the earlier Guardian generation. */
.guardian-era{max-width:72rem;margin:2rem auto}
.guardian-era>p{max-width:68ch;margin:1rem auto;text-align:center}
.guardian-era-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.guardian-era-card{padding:1.25rem;border:1px solid currentColor;border-radius:1rem;background:rgba(255,255,255,.06)}
.guardian-era-card h4{margin:0 0 .7rem;font-size:1.35rem}
.guardian-era-card p{margin:0;line-height:1.7}
@media(max-width:620px){.guardian-era-grid{grid-template-columns:1fr}.guardian-era-card{padding:1rem}}

/* Quiz outcomes remain understandable without red/green color cues. */
.qzresult:empty{display:none}
.qzresult{font-weight:bold;line-height:1.6;margin:.9rem 0}
.qzresult:focus{outline:3px solid #f0ca64;outline-offset:4px}
@media print{#teach .qzresult{display:none!important}}
