:root{--night:#120d1e;--parchment:#f3e6c8;--ink:#2b1d12;--gold:#e9c46a;--plum:#3a2746;--lilac:#cdbfe6;--moth:#b8f0c8;--hand:"Caveat", cursive;--serif:"Cormorant Garamond", Georgia, serif;--scene-w:max(100vw, 160vh);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{min-height:100vh;color:var(--parchment);font-family:var(--serif);background:#0d0814;margin:0;overflow:hidden}button{font:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.app{position:fixed;inset:0;overflow:hidden}.scene{width:var(--scene-w);aspect-ratio:16/10;-webkit-user-select:none;user-select:none;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%);container-type:inline-size}.scene.dragging,.scene.dragging *{cursor:grabbing!important}.scene-svg{width:100%;height:100%;transition:filter 1.5s;display:block}.hotspot{cursor:pointer;filter:drop-shadow(0 0 #ffe29600);outline:none;transition:filter .35s}.hotspot:hover,.hotspot:focus-visible{filter:drop-shadow(0 0 10px #ffe296bf)}.hotspot-label{font-family:var(--hand);fill:#fff3d6;stroke:#140f22;stroke-width:7px;paint-order:stroke;opacity:0;pointer-events:none;font-size:34px;font-weight:700;transition:opacity .2s}.hotspot-label.visible{opacity:1}.bottle{cursor:grab;touch-action:none;transition:opacity 1.2s,filter .35s}.bottle.used{opacity:.35}.glow-steady{opacity:.55;animation:5s ease-in-out infinite glow-steady}@keyframes glow-steady{50%{opacity:.48}}.glow-twinkle{animation:3.7s ease-in-out infinite twinkle-a}.glow-twinkle path{animation:2.3s ease-in-out infinite twinkle-b}@keyframes twinkle-a{0%{opacity:.55}18%{opacity:.9}31%{opacity:.6}47%{opacity:1}58%{opacity:.5}72%{opacity:.85}86%{opacity:.65}to{opacity:.55}}@keyframes twinkle-b{0%{opacity:.6}23%{opacity:1}41%{opacity:.55}64%{opacity:.9}80%{opacity:.7}to{opacity:.6}}.glow-fire{opacity:.62;mix-blend-mode:screen}.glow-fire .fire-core,.fire-glow .fire-core{animation:.55s ease-in-out infinite alternate fire-core}@keyframes fire-core{0%{opacity:.35}to{opacity:.7}}.dragon-flame{animation:1.1s ease-in-out infinite dragon-flicker}.dragon-flame-inner{animation:1.73s ease-in-out infinite dragon-flicker-2}@keyframes dragon-flicker-2{0%{transform:scale(1)skew(0)}13%{transform:scale(.98,1.08)skew(2deg)}29%{transform:scale(1.03,.95)skew(-3deg)}44%{transform:scale(.99,1.12)skew(1deg)}61%{transform:scale(1.02,.98)skew(3deg)}77%{transform:scale(.97,1.05)skew(-2deg)}to{transform:scale(1)skew(0)}}@keyframes dragon-flicker{0%{transform:scale(1)skew(0)}18%{transform:scale(1.04,1.1)skew(-3deg)}37%{transform:scale(.97,.94)skew(2deg)}55%{transform:scale(1.02,1.14)skew(3deg)}72%{transform:scale(.98,.97)skew(-2deg)}88%{transform:scale(1.03,1.06)skew(1deg)}to{transform:scale(1)skew(0)}}.dragon-flame .lick-a{transform-box:fill-box;transform-origin:50% 100%;animation:.7s ease-in-out infinite alternate lick}.dragon-flame .lick-b{transform-box:fill-box;transform-origin:50% 100%;animation:.9s ease-in-out infinite alternate-reverse lick}@keyframes lick{0%{transform:scaleY(.7)rotate(-4deg)}to{transform:scaleY(1.15)rotate(4deg)}}.dragon-flame .ember{opacity:0;animation:1.6s ease-out infinite ember}.dragon-flame .ember-1{animation-delay:.4s}.dragon-flame .ember-2{animation-delay:.8s}.dragon-flame .ember-3{animation-delay:1.2s}.coal-glow{animation:2.4s ease-in-out infinite alternate coal}.cauldron g:nth-child(odd) .coal-glow{animation-delay:-1.2s}@keyframes coal{0%{opacity:.45}to{opacity:1}}@keyframes ember{0%{opacity:0;transform:translateY(0)}20%{opacity:1}to{opacity:0;transform:translateY(-18px)}}.moth .wings,.moth .wings-far{transform-box:view-box;transform-origin:0 -4px}.moth .wings{transform:translateY(-2px)scaleY(1)}.moth .wings-far{transform:translate(6px,1px)scale(.92)scaleY(1)}.moth-flutter .wings{animation:flap-near var(--flap,1.7s) ease-in-out var(--flaps,1)}.moth-flutter .wings-far{animation:flap-far var(--flap,1.7s) ease-in-out var(--flaps,1)}.moth-flying .wings{animation:flap-near var(--flap-d,.85s) ease-in-out infinite}.moth-flying .wings-far{animation:flap-far var(--flap-d,.85s) ease-in-out infinite}@keyframes flap-near{0%,to{transform:translateY(-2px)scaleY(1)}50%{transform:translateY(-2px)scaleY(-.26)}}@keyframes flap-far{0%,to{transform:translate(6px,1px)scale(.92)scaleY(1)}50%{transform:translate(6px,-3px)scale(.92)scaleY(-.18)}}.ripple{animation:3s ease-in-out infinite alternate ripple}.ripple.slow{animation-duration:4.6s;animation-direction:alternate-reverse}@keyframes ripple{0%{transform:translate(0)}to{transform:translate(8px)}}.water-bubble{animation:3.4s ease-in infinite water-bubble}@keyframes water-bubble{0%{opacity:0;transform:translateY(0)}20%{opacity:.7}to{opacity:0;transform:translateY(-34px)}}.eye-bob{animation:4s ease-in-out infinite eye-bob}@keyframes eye-bob{0%,to{transform:translate(0)}25%{transform:translate(3px,-2px)}50%{transform:translate(1px,-4px)}75%{transform:translate(-3px,-1px)}}.eye-roll{transform-box:view-box;transform-origin:0 0;animation:6s ease-in-out infinite eye-roll}@keyframes eye-roll{0%{transform:rotate(0)}30%{transform:rotate(140deg)}55%{transform:rotate(60deg)}80%{transform:rotate(300deg)}to{transform:rotate(360deg)}}@keyframes breathe{50%{opacity:.35}}.cottage-light{animation:6s ease-in-out infinite twinkle}.clouds{animation:60s linear infinite alternate drift}@keyframes drift{to{transform:translate(120px)}}.twinkle{animation:3.5s ease-in-out infinite twinkle}@keyframes twinkle{50%{opacity:.25}}.moon-glow{transition:r .9s}.dimmer{transition:opacity .6s}.grain{pointer-events:none;opacity:.16;mix-blend-mode:overlay;background-size:180px;position:absolute;inset:0}.moon-shaft,.lights,.brew-glow,.fire-glow{mix-blend-mode:screen}.nameplate{pointer-events:none;background:repeating-linear-gradient(176deg,#0000 0 .6cqw,#0000001f .6cqw .7cqw),linear-gradient(#6b4329,#4a2c19);border:3px solid #150d1d;border-radius:.6cqw;padding:.5cqw 1.6cqw .7cqw;position:absolute;top:8.5%;left:7.5%;transform:rotate(-2deg);box-shadow:0 .6cqw 1.6cqw #0009,inset 0 0 0 2px #e2b45359}.nameplate:before,.nameplate:after{content:"";background:#c8b48a;width:2px;height:9cqw;position:absolute;bottom:100%}.nameplate:before{left:14%}.nameplate:after{right:14%}.nameplate h1{letter-spacing:.02em;color:#f6e3b4;text-shadow:0 2px #150d1d;margin:0;font-size:2.7cqw;font-weight:700}.nameplate p{font-family:var(--hand);color:#e9d6ff;margin:0;font-size:1.35cqw}.nameplate em{color:var(--moth);font-style:normal}.liquid,.cauldron .bubble circle{transition:fill 1.6s}.cauldron stop{transition:stop-color 1.6s,stop-opacity 1.6s}.bubble{opacity:0;animation:2.4s ease-in infinite bubble}.phase-stirring .bubble{animation-duration:.7s!important}.pop{opacity:0;animation:3.2s ease-out infinite pop}@keyframes pop{0%{opacity:0;transform:scale(.6)}}@keyframes bubble{0%{opacity:0;transform:translateY(0)}30%{opacity:1}to{opacity:0;transform:translateY(-36px)}}.phase-stirring .liquid-swirl{animation:.4s ease-in-out infinite alternate swirl}@keyframes swirl{0%{transform:translate(-45px)}to{transform:translate(45px)}}.ladle{transform-origin:770px 684px}.phase-stirring .ladle{animation:1.1s ease-in-out infinite stir}@keyframes stir{0%{transform:translate(0)rotate(0)}25%{transform:translate(46px)rotate(16deg)}50%{transform:translate(96px)rotate(2deg)}75%{transform:translate(44px)rotate(-18deg)}to{transform:translate(0)rotate(0)}}.steam{filter:blur(1.2px)}.steam .wisp{opacity:0;will-change:transform, opacity;animation:16s ease-in-out infinite wisp}.steam .wisp-wave{animation:2.4s linear infinite wisp-swim}@keyframes wisp-swim{0%{transform:translateY(0)}to{transform:translateY(calc(-1 * var(--period,56px)))}}@keyframes wisp{0%{opacity:0;transform:translate(0)}5%{opacity:var(--o,.3)}12%{transform:translate(calc(var(--sway) * .6), calc(var(--rise) * -.3))}22%{transform:translate(calc(var(--sway) * -.4), calc(var(--rise) * -.58));opacity:calc(var(--o,.3) * .6)}31%{transform:translate(calc(var(--sway) * .3), calc(var(--rise) * -.82));opacity:calc(var(--o,.3) * .2)}38%{transform:translate(0, calc(var(--rise) * -1));opacity:0}to{transform:translate(0, calc(var(--rise) * -1));opacity:0}}.spark{animation:1.5s ease-out both spark}@keyframes spark{0%{opacity:0;transform:translateY(0)}15%{opacity:1}to{transform:translateY(var(--rise));opacity:0}}.cauldron.drop-active{filter:drop-shadow(0 0 22px var(--moth))}.flame{transform-box:view-box}@keyframes flicker{0%{transform:scale(.92,.85)}to{transform:scale(1.05,1.1)}}.candle .dragon-flame{animation-duration:var(--f1,1.1s);animation-delay:var(--d1,0s)}.candle .dragon-flame-inner{animation-duration:var(--f2,1.73s);animation-delay:var(--d2,0s)}.candle.witchfire .flame{animation:.25s ease-in-out infinite alternate witchflare}@keyframes witchflare{0%{transform:scale(1.4,1.8)}to{transform:scale(1.6,2.2)}}.smoke{filter:blur(.8px);will-change:transform, opacity;animation:3.2s ease-out forwards smoke}@keyframes smoke{0%{opacity:0;transform:translateY(0)}10%{opacity:.85}65%{opacity:.4}to{opacity:0;transform:translateY(-80px)}}.smoke-wave{animation:1.8s linear infinite wisp-swim}.cat-eyes-open{animation:6s step-end infinite blink-open}.cat-eyes-closed{animation:6s step-end infinite blink-closed}@keyframes blink-open{0%,to{opacity:1}93%,96%{opacity:0}}@keyframes blink-closed{0%,to{opacity:0}93%,96%{opacity:1}}.cat.purring .cat-body{animation:.1s linear infinite alternate purr}@keyframes purr{to{transform:translate(.8px,1.2px)}}.purr-text text{font-family:var(--hand);fill:#f3d9ff;opacity:0;font-size:30px;animation:1.4s ease-out infinite purrfloat}@keyframes purrfloat{0%{opacity:0;transform:translate(0)}30%{opacity:1}to{opacity:0;transform:translate(14px,-50px)}}.cat{transform-box:fill-box;transform-origin:50% 100%;transition:filter .35s,transform 1.6s cubic-bezier(.34,1.56,.64,1)}.cat.kitten{transform:scale(.6)}.moonlight-wash{fill:#cfe0ff;opacity:0;mix-blend-mode:soft-light;transition:opacity .9s}.effect-moonlight .moonlight-wash{opacity:.7}.scene-svg{transition:filter .9s}.effect-moonlight .scene-svg{filter:saturate(.55)brightness(1.2)hue-rotate(-12deg)}.shooting-star{opacity:0;will-change:transform, opacity;animation:.55s linear infinite shoot}.shooting-star.once{animation:.55s linear both shoot}@keyframes shoot{0%{opacity:0;transform:translate(0)}8%{opacity:1}55%{opacity:1}to{transform:translate(var(--dx,-320px), var(--dy,180px));opacity:0}}@property --amp{syntax:"<length>";inherits:true;initial-value:0}.float-lift{--amp:0px;transition:transform 2.2s cubic-bezier(.4,0,.2,1),--amp 2.2s;transform:translateY(0)}.float-lift.levitating{--amp:22px;transform:translateY(-26px)}.float-bob{animation:3s ease-in-out infinite bob}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(calc(-1 * var(--amp)))}}.moth-swarm{pointer-events:none;position:absolute;inset:0;overflow:hidden}.swarm-moth{animation:linear both swarm;position:absolute;left:0}@keyframes swarm{0%{transform:translate(-12cqw)}to{transform:translate(110cqw)}}.swarm-moth-inner{width:100%;animation:.9s ease-in-out infinite alternate wobble;display:block}@keyframes wobble{0%{transform:translateY(-1.5cqw)rotate(-8deg)}to{transform:translateY(1.5cqw)rotate(8deg)}}.hud{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:5;font-family:var(--hand);white-space:nowrap;background:#0d0814b8;border:1px solid #e9c46a73;border-radius:999px;align-items:center;gap:12px;padding:6px 8px 6px 18px;font-size:19px;display:flex;position:fixed;bottom:14px;left:50%;transform:translate(-50%);box-shadow:0 6px 24px #00000080}.brew-result-anchor{pointer-events:none;font-family:var(--hand);white-space:nowrap;z-index:2;font-size:max(16px,1.5cqw);position:absolute;top:25%;left:50%;transform:translate(-50%,-50%)}.brew-chips{gap:.8em;margin:0;padding:0;list-style:none;display:flex}.brew-chips li{align-items:center;gap:.3em;animation:.25s ease-out pop;display:flex}.brew-chips .count{color:var(--gold)}.dot{border-radius:50%;width:.65em;height:.65em;display:inline-block;box-shadow:0 0 6px}.brew-result{background:var(--parchment);color:var(--ink);animation:result-card var(--result-ms,6.5s) ease-in-out both;border-radius:14px;flex-direction:column;align-items:center;gap:.1em;padding:.5em 1.4em;display:flex;box-shadow:0 6px 30px #00000080,0 0 30px #e9c46a59}@keyframes result-card{0%{opacity:0;transform:scale(.8)translateY(8px)}7%{opacity:1;transform:scale(1.04)translateY(0)}10%{transform:scale(1)}78%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-16px)}}.brew-result strong{font-size:1.4em}.brew-result.fizzle{background:#c9c6b4;box-shadow:0 6px 30px #00000080}.corner button,.book-nav button{font-family:var(--hand);border:2px solid var(--gold);background:var(--plum);color:var(--parchment);border-radius:999px;padding:0 1em;font-size:20px;transition:transform .15s,background .15s}.corner button:hover,.book-nav button:hover:not(:disabled){background:#523863;transform:translateY(-1px)}.book-nav button:disabled{opacity:.4;cursor:default}.corner{z-index:10;gap:8px;display:flex;position:fixed;top:12px;right:12px}.corner button{background:#3a2746cc;border-color:#e9c46a99;font-size:16px}.drag-ghost{width:calc(var(--scene-w) / 16 * .9);transform:translate(-50%, -75%) rotate(calc(-6deg + var(--tilt,0deg)));pointer-events:none;z-index:50;transition:transform .12s ease-out;position:fixed}.drag-ghost svg{width:100%;display:block;overflow:visible}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#080510b8;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.modal{max-height:92vh;position:relative;overflow:auto}.modal-close{z-index:1;width:34px;height:34px;color:inherit;background:#0000001f;border:none;border-radius:50%;font-size:16px;position:absolute;top:10px;right:10px}.parchment,.plain{aspect-ratio:8.5/11;width:min(67.9976vh,100%);max-height:88vh;color:var(--ink);background:radial-gradient(ellipse at center, transparent 60%, #78501e40), var(--parchment);transform-origin:top;border-radius:6px;padding:0;font-size:1.15rem;overflow:hidden;box-shadow:0 20px 60px #0009}.parchment.entering{animation:.6s cubic-bezier(.2,1.2,.4,1) both unfold}.parchment.closing{animation:.55s cubic-bezier(.4,0,.6,1) reverse both unfold}@keyframes unfold{0%{opacity:0;transform:scaleY(.08)}22%{opacity:1}to{opacity:1;transform:scaleY(1)}}.plain{color:#1d1d1f;background:#fff}.resume h1{margin:0;font-size:2.4em;line-height:1.1}.resume h2{letter-spacing:.06em;text-transform:uppercase;border-bottom:1px solid;margin:1.4em 0 .4em;padding-bottom:.15em;font-size:1.25em}.resume h3{margin:.6em 0 0;font-size:1.1em}.resume h3 span{opacity:.8;font-weight:500}.resume ul{margin:.3em 0;padding-left:1.2em}.resume a{color:#7a2a4a}.plain .resume a{color:#5b2bb5}.resume-title{margin:.1em 0;font-size:1.15em;font-style:italic}.resume-contact{flex-wrap:wrap;gap:.4em 1.2em;margin:.4em 0 1em;display:flex}.resume-dates{opacity:.7;margin:0;font-size:.9em}.resume-skills{margin:0}.resume-skills div{gap:.6em;margin:.2em 0;display:flex}.resume-skills dt{min-width:6.5em;font-weight:700}.resume-skills dd{margin:0}.placeholder-note{background:#ffe69666;border:1px dashed #b08a3a;border-radius:6px;margin:0 0 1em;padding:.4em .8em;font-size:.9em}.grimoire{width:min(920px,100%);overflow:visible}.grimoire .modal-close{background:var(--plum);color:var(--parchment);border:2px solid var(--gold);top:-14px;right:-14px}.modal-backdrop.entering{animation:backdrop-in var(--enter-ms,.3s) ease-out both}.modal-backdrop.closing{animation:backdrop-in var(--exit-ms,.3s) ease-in reverse both}@keyframes backdrop-in{0%{opacity:0}}.grimoire.entering{animation:.5s cubic-bezier(.2,.8,.2,1) both book-in}.grimoire.closing{animation:.9s cubic-bezier(.1,.9,.2,1) reverse both book-in}@keyframes book-in{0%{opacity:0;transform:translateY(24px)scale(.92)}18%{opacity:1}to{opacity:1;transform:translateY(0)scale(1)}}.grimoire.entering .leaf{animation:1.1s cubic-bezier(.3,.7,.2,1) both leaf-open}.grimoire.closing .leaf{animation:.9s cubic-bezier(.3,.7,.2,1) reverse both leaf-open}@keyframes leaf-open{0%{transform:translateZ(2px)rotateY(-180deg)}to{transform:translateZ(2px)rotateY(0)}}.grimoire.entering .book{animation:1.1s cubic-bezier(.3,.7,.2,1) both book-centre}.grimoire.closing .book{animation:.9s cubic-bezier(.3,.7,.2,1) reverse both book-centre}@keyframes book-centre{0%{transform:translate(25%)}to{transform:translate(0)}}@media (prefers-reduced-motion:reduce){.modal-backdrop.entering,.modal-backdrop.closing,.grimoire.entering,.grimoire.closing,.grimoire.entering .leaf,.grimoire.closing .leaf,.grimoire.entering .book,.grimoire.closing .book{animation-duration:10ms}}.book{perspective:1800px;transform-style:preserve-3d;filter:drop-shadow(0 25px 40px #0009);grid-template-columns:1fr 1fr;display:grid;position:relative}.half{background:linear-gradient(135deg,#4a2763,#2c1540);padding:14px;display:grid;position:relative;box-shadow:inset 0 0 0 3px #e9c46a59}.half-left{border-radius:12px 0 0 12px;padding-right:0}.half-right{backface-visibility:hidden;border-radius:0 12px 12px 0;padding-left:0}.leaf{transform-origin:0;transform-style:preserve-3d;position:relative;transform:translateZ(2px)rotateY(0)}.cover-face{backface-visibility:hidden;color:var(--gold);background:linear-gradient(135deg,#4a2763,#2c1540);border-radius:0 12px 12px 0;place-items:center;display:grid;position:absolute;inset:0;transform:rotateY(180deg);box-shadow:inset 0 0 0 3px #e9c46a59,inset 0 0 0 10px #3a1f50,inset 0 0 0 12px #e9c46a40}.cover-sigil{width:46%;max-width:220px}.page{min-height:520px;color:var(--ink);background:#f1e4c4;padding:2.4rem 2.4rem 3rem;font-size:1.15rem}.page-left{border-radius:6px 0 0 6px;box-shadow:inset -18px 0 24px -16px #50321473}.page-right{border-radius:0 6px 6px 0;box-shadow:inset 18px 0 24px -16px #50321473}@keyframes pagein{0%{opacity:0;transform:translate(10px)}}.page h2{text-align:center;margin:0 0 .3em;font-size:2em}.page h3{font-family:var(--hand);color:#6b2f63;margin:.8em 0 .2em;font-size:1.6em}.page h3:first-child{margin-top:0}.page-left:not(.potion-portrait){text-align:center;flex-direction:column;justify-content:center;display:flex}.flourish{color:#8a6a2a;margin:0;font-size:1.6em}.potion-portrait{flex-direction:column;justify-content:center;align-items:center;display:flex}.unknown{font-family:var(--hand);opacity:.6;margin:0;font-size:1.3em}.riddle{font-style:italic}.inkblot{opacity:.55;font-family:var(--hand);font-size:1.3em}.recipe{margin:0;padding:0;list-style:none}.recipe li{align-items:center;gap:.5em;display:flex}.effect-text{font-family:var(--hand);color:#3f5f2a;margin-top:1em;font-size:1.35em}.tally{color:#6b2f63;margin:0;font-size:4em;font-weight:700}.celebrate{font-family:var(--hand);color:#8a6a2a;overflow-wrap:anywhere;text-wrap:balance;margin:.4em 0 0;font-size:1.3em;line-height:1.25}.tally-list{padding:0;font-size:1.2em;line-height:1.8;list-style:none}.tally-list .known{color:#6b2f63;font-weight:700}.link-button{color:#7a2a4a;background:0 0;border:none;padding:0;font-size:.95em;text-decoration:underline}.book-nav{color:var(--lilac);font-family:var(--hand);justify-content:space-between;align-items:center;margin-top:12px;font-size:1.3rem;display:flex}@media (width<=640px){.book{grid-template-columns:1fr}.page{min-height:0;box-shadow:none;border-radius:6px}.page-left{border-radius:6px 6px 0 0}.page-right{border-radius:0 0 6px 6px}.parchment{padding:2rem 1.4rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.dog-ear{cursor:pointer;background:0 0;border:0;outline:none;width:64px;height:64px;padding:0;position:absolute;bottom:14px}.dog-ear-left{left:14px}.dog-ear-right{right:14px}.dog-ear:before,.dog-ear:after{content:"";position:absolute;inset:0}.dog-ear:before{background:linear-gradient(135deg,#4a2763,#2c1540)}.dog-ear:after{filter:drop-shadow(-2px -2px 3px #3c1e0a59);background:linear-gradient(to bottom right,#fbf3dd,#e2d2ad)}.dog-ear-left:before{clip-path:polygon(0 0,0 100%,100% 100%)}.dog-ear-left:after{clip-path:polygon(0 0,100% 0,100% 100%);transform-origin:100% 0}.dog-ear-right:before{clip-path:polygon(100% 0,100% 100%,0 100%)}.dog-ear-right:after{clip-path:polygon(0 0,100% 0,0 100%);transform-origin:0 0;filter:drop-shadow(2px -2px 3px #3c1e0a59)}.dog-ear{transition:width .22s,height .22s}.dog-ear:hover:not(:disabled),.dog-ear:focus-visible{width:82px;height:82px}.dog-ear:disabled{cursor:default}.folio{text-align:center;font-family:var(--hand);color:#7a6446;pointer-events:none;font-size:16px;position:absolute;bottom:22px;left:0;right:0}.turn{width:50%;transform-style:preserve-3d;pointer-events:none;z-index:2;position:absolute;top:0;bottom:0}.turn-next{transform-origin:0;animation:.8s cubic-bezier(.45,.05,.3,1) both turn-next;left:50%}.turn-prev{transform-origin:100%;animation:.8s cubic-bezier(.45,.05,.3,1) both turn-prev;left:0}@keyframes turn-next{0%{transform:translateZ(4px)rotateY(0)}to{transform:translateZ(4px)rotateY(-180deg)}}@keyframes turn-prev{0%{transform:translateZ(4px)rotateY(0)}to{transform:translateZ(4px)rotateY(180deg)}}.turn-face{backface-visibility:hidden;position:absolute;inset:0}.turn-back{transform:rotateY(180deg)}@media (prefers-reduced-motion:reduce){.turn-next,.turn-prev{animation-duration:10ms}}.desk-shadow{transition:opacity 1.6s}.effect-levitation .desk-shadow{opacity:0}.cauldron{--fire-outer:#ff6a1f;--fire-mid:#ffc02a;--fire-core:#fff4c0;--fire-glow-core:#ffd21f;--fire-spill:#ff9a3d}.effect-witchfire .cauldron{--fire-outer:#a44dff;--fire-mid:#d08cff;--fire-core:#f3e2ff;--fire-glow-core:#c77dff;--fire-spill:#b86cff}.candle{--flame-outer:#ff6a1f;--flame-mid:#ffc02a;--flame-core:#fff4c0;--flame-edge:#9a2e10;--light-a:#ffb85c;--light-b:#ff9a3d}.effect-witchfire .candle{--flame-outer:#b45cff;--flame-mid:#d9a3ff;--flame-core:#f6e6ff;--flame-edge:#5a1f8a;--light-a:#d27bff;--light-b:#c46bff}.fire-tint{transition:fill 1.4s,stroke 1.4s}.cauldron stop,.candle stop{transition:stop-color 1.4s,stop-opacity 1.4s}.inkwell .quill{transform-box:view-box;transform-origin:0 -70px}.inkwell.writing .quill{animation:4s ease-in-out both quill-write}@keyframes quill-write{0%{transform:translate(0)rotate(0)}18%{transform:translate(-316px,60px)rotate(-14deg)}24%{transform:translate(-316px,86px)rotate(-16deg)}34%{transform:translate(-300px,84px)rotate(-18deg)}44%{transform:translate(-282px,87px)rotate(-14deg)}54%{transform:translate(-264px,85px)rotate(-17deg)}64%{transform:translate(-246px,86px)rotate(-15deg)}72%{transform:translate(-246px,60px)rotate(-10deg)}to{transform:translate(0)rotate(0)}}.fresh-ink .ink-word{stroke-dasharray:100;stroke-dashoffset:100px;animation:.42s linear both ink;animation-delay:calc(.96s + var(--i,0) * .3s)}@keyframes ink{to{stroke-dashoffset:0}}.fresh-ink{animation:1.3s ease-in 2.9s both ink-dry}@keyframes ink-dry{to{opacity:0}}.flame-fade{transition:opacity .3s}.flame-fade.out{opacity:0}.light-fade{transition:opacity .5s}.light-fade.out{opacity:0}.scroll-tools{z-index:1;gap:8px;display:flex;position:absolute;top:14px;right:14px}.icon-btn{border:2px solid var(--gold);background:var(--plum);width:36px;height:36px;color:var(--parchment);cursor:pointer;border-radius:50%;place-items:center;padding:0;text-decoration:none;transition:transform .15s,background .15s;display:grid}.icon-btn svg{width:20px;height:20px}.icon-btn:hover,.icon-btn:focus-visible{background:#523863;outline:none;transform:translateY(-1px)}.modal.parchment,.modal.plain{transition:background .5s,color .5s,width .5s,padding .5s,border-radius .5s,box-shadow .5s}.view{opacity:0;pointer-events:none;transition:opacity .45s;position:absolute;inset:0}.view.active{opacity:1;pointer-events:auto}.view-scroll{padding:2.5rem 2.8rem;overflow:auto}.view-pdf{background:#fff}.pdf-frame{border:0;width:100%;height:100%;display:block}.pan-hint{color:var(--lilac);font-family:var(--hand);white-space:nowrap;pointer-events:none;z-index:40;background:#140c1ecc;border:1px solid #e9c46a80;border-radius:999px;align-items:center;gap:.5em;padding:.45em 1.1em;font-size:17px;animation:5.5s ease-in-out both pan-hint;display:none;position:fixed;top:16px;left:50%;transform:translate(-50%)}@keyframes pan-hint{0%{opacity:0;transform:translate(-50%)translateY(-8px)}12%,75%{opacity:1;transform:translate(-50%)translateY(0)}to{opacity:0;transform:translate(-50%)translateY(-8px)}}@media (aspect-ratio<=1){:root{--scene-w:max(100vw, 160svh)}.app{-webkit-overflow-scrolling:touch;scrollbar-width:none;overflow:auto hidden}.app::-webkit-scrollbar{display:none}.scene{left:0;transform:translateY(-50%)}.pan-hint{display:flex}}
