.entry-spell{position:fixed;inset:0;z-index:1000;isolation:isolate;overflow:hidden;--spell-x:50vw;--spell-y:50vh;--spell-size:min(88vw,570px)}
.spell-shade{position:absolute;inset:0;background:radial-gradient(ellipse at var(--spell-x) var(--spell-y),#10212c08 0,#0b192445 55%,#050f1bcc 100%);opacity:0}
.spell-position{position:absolute;width:var(--spell-size);height:var(--spell-size);left:var(--spell-x);top:var(--spell-y);transform:translate(-50%,-50%)}
.spell-sigil{width:100%;height:100%;display:block;overflow:visible;opacity:0;filter:drop-shadow(0 0 14px #94d8ff33)}
.spell-framework{transform-origin:360px 360px;opacity:.85}
.spell-trace{stroke-dasharray:100;stroke-dashoffset:100}
.spell-orbit{transform-origin:360px 360px;opacity:0}
.spell-core{filter:drop-shadow(0 0 7px #d4ddbb66);transform-origin:360px 360px}
.spell-sparks{opacity:0;transform-origin:360px 360px}
.spell-caption{position:absolute;bottom:max(26px,env(safe-area-inset-bottom));width:100%;text-align:center;color:#dce8e9;opacity:0;font-family:Paperlogy,'Malgun Gothic',sans-serif;padding:0 18px}
.spell-caption p{font-size:13px;letter-spacing:.11em;line-height:1.8;text-shadow:0 1px 8px #06131e}
.spell-caption button{font:10px/1.8 Paperlogy,'Malgun Gothic',sans-serif;color:#b7c3c9;background:transparent;border:0;border-bottom:1px solid #c2b48f66;padding:5px 0;margin-top:9px}
.spell-caption button:focus-visible{outline:2px solid #d1bc83;outline-offset:5px}
.is-opening-register{overflow:hidden}
.book-cover.is-activating{animation:coverWake 1.63s cubic-bezier(.3,0,.35,1) both;cursor:wait;opacity:1}
.is-casting .spell-shade{animation:spellShade .3s ease-out both}
.is-casting .spell-sigil{animation:spellManifest .4s cubic-bezier(.15,.7,.25,1) both}
.is-casting .spell-framework{animation:spellGeometry 1.62s ease-out both}
.is-casting .spell-trace{animation:spellTrace 1.3s .32s linear both}
.is-casting .spell-orbit{animation:spellOrbit 1.3s .32s linear both}
.is-casting .spell-core{animation:spellCore 1.62s ease-out both}
.is-casting .spell-sparks{animation:spellSparks 1.3s .32s ease-out both}
.is-casting .spell-caption{animation:spellCaption .4s .16s ease-out both}
.entry-spell.is-revealing{pointer-events:none;animation:spellDissolve .42s ease-out both}
.archive-arriving .archive-book{animation:archiveArrive .44s cubic-bezier(.15,.7,.25,1) both}
.is-reduced .spell-sigil{opacity:.55}.is-reduced .spell-shade{opacity:.55}.is-reduced .spell-orbit,.is-reduced .spell-caption{display:none}
@keyframes spellShade{to{opacity:1}}
@keyframes spellManifest{0%{opacity:0;transform:scale(.65) rotate(-11deg)}100%{opacity:1;transform:scale(1) rotate(0)}}
@keyframes spellGeometry{0%{opacity:0;transform:rotate(-12deg)}25%{opacity:.65}80%{opacity:.85}100%{opacity:1;transform:rotate(0)}}
@keyframes spellTrace{0%{stroke-dashoffset:100}100%{stroke-dashoffset:0}}
@keyframes spellOrbit{0%{opacity:1;transform:rotate(0)}95%{opacity:1}100%{opacity:1;transform:rotate(360deg)}}
@keyframes spellCore{0%{opacity:0;transform:scale(.7)}25%{opacity:.7;transform:scale(1)}80%{opacity:1;transform:scale(1)}100%{opacity:1;transform:scale(1.08)}}
@keyframes spellSparks{0%{opacity:0;transform:scale(.96)}30%{opacity:.8}100%{opacity:.15;transform:scale(1.08)}}
@keyframes spellCaption{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
@keyframes spellDissolve{0%{opacity:1;filter:brightness(1)}25%{filter:brightness(1.25)}100%{opacity:0;filter:brightness(1)}}
@keyframes coverWake{0%{transform:var(--rest-transform) scale(1);filter:brightness(1)}10%{transform:var(--rest-transform) scale(.98);filter:brightness(1.1)}75%{opacity:1;transform:var(--rest-transform) scale(1);filter:brightness(1.2)}100%{opacity:.35;transform:var(--rest-transform) scale(.96) rotateY(-16deg);filter:brightness(1.4)}}
@keyframes archiveArrive{from{opacity:.35;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:650px){.spell-caption p{font-size:12px;letter-spacing:.06em}.spell-caption button{font-size:10px}.spell-sigil{filter:drop-shadow(0 0 9px #94d8ff44)}}
@media(prefers-reduced-motion:reduce){.entry-spell *,.book-cover.is-activating,.archive-arriving .archive-book{animation:none!important;transition:none!important}.entry-spell.is-revealing{animation:none}.is-reduced .spell-sigil{opacity:.5}}
