/* Fine fractured glass: edge detail stays outside the reading layer. */
.cover{isolation:isolate;overflow:hidden}
.cover h1{position:relative;z-index:1}
.cover-overline,.scroll-cue{z-index:2}
.fx-cover-glass{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden;opacity:.78}
.fx-cover-glass svg{display:block;width:100%;height:100%}
.fx-cover-glass .glass-facet{fill:#c6c4e7;fill-opacity:.023;stroke:none}
.fx-cover-glass .glass-seam{fill:none;stroke:#aea8bd;stroke-width:.65;stroke-opacity:.27;vector-effect:non-scaling-stroke}
.fx-cover-glass .glass-edge{fill:none;stroke:#e5e2f1;stroke-width:.8;stroke-opacity:.51;vector-effect:non-scaling-stroke}
.fx-cover-glass .glass-refraction{fill:none;stroke:#b089c6;stroke-width:1.2;stroke-opacity:.27;vector-effect:non-scaling-stroke}
.cover h1>img.fx-chroma-copy{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:0;pointer-events:none;filter:drop-shadow(-3px 0 #73c7ce) drop-shadow(3px 0 #ba7ba9);clip-path:polygon(0 26%,100% 26%,100% 29%,0 29%,0 45%,100% 45%,100% 48%,0 48%,0 68%,100% 68%,100% 70%,0 70%)}
.cover.fx-enter h1>img.fx-chroma-copy{animation:fx-title-displacement 650ms steps(1,end) both}
@keyframes fx-title-displacement{0%,17%,24%,38%,100%{opacity:0;transform:translateX(0)}18%{opacity:.7;transform:translateX(5px)}21%{opacity:.5;transform:translateX(-3px)}31%{opacity:.45;transform:translateX(2px)}35%{opacity:.2;transform:translateX(-1px)}}
.chapter-label{position:relative}
.chapter-label>i{position:relative;background:linear-gradient(90deg,#51465d 0 38%,transparent 38% 41%,#8b728d 41% 49%,#302736 49% 100%);transform:skewY(-1deg)}
.chapter-label>i:before,.chapter-label>i:after{content:'';position:absolute;right:17%;height:12px;width:1px;background:linear-gradient(transparent,#a096ac77);bottom:0;transform:rotate(37deg);transform-origin:bottom}
.chapter-label>i:after{right:17%;height:9px;bottom:auto;top:0;transform:rotate(-43deg);transform-origin:top;background:linear-gradient(#8c6f9c66,transparent)}
.chapter-label.fx-enter>i{animation:fx-rule-split 480ms steps(1,end) both}
@keyframes fx-rule-split{0%,21%,39%,100%{filter:none;opacity:1}19%{filter:drop-shadow(-2px 0 #77bdc2) drop-shadow(2px 0 #b67eac);opacity:.75}35%{filter:drop-shadow(2px 0 #b67eac);opacity:.85}}
.fx-glass-rim{display:block;position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden;color:transparent}
.fx-glass-rim:before,.fx-glass-rim:after{content:'';position:absolute;width:49%;height:24%;opacity:.45;background:linear-gradient(145deg,transparent 49.5%,#d9deed50 50%,transparent 50.5%),linear-gradient(34deg,transparent 67%,#c9bbd628 67.5%,transparent 68%);clip-path:polygon(0 0,100% 0,75% 32%,60% 29%,0 100%)}
.fx-glass-rim:before{left:0;top:0}
.fx-glass-rim:after{right:0;bottom:0;transform:rotate(180deg);opacity:.32}
.fx-glass-rim>span{position:absolute;inset:0;opacity:0;background:linear-gradient(112deg,transparent 31%,#e9e4f80d 46%,#f1f5ff2b 47%,#c4b9e20b 48%,transparent 62%);transform:translateX(115%);clip-path:polygon(0 0,100% 0,100% 7%,71% 9%,100% 17%,100% 100%,0 100%,0 96%,43% 94%,0 89%)}
.fx-enter>.fx-glass-rim>span{animation:fx-glass-catch .8s cubic-bezier(.2,.65,.4,1) both}
@keyframes fx-glass-catch{0%{opacity:0;transform:translateX(100%)}20%{opacity:.85}85%{opacity:.45}100%{opacity:0;transform:translateX(-100%)}}
.fracture-surface{position:relative;isolation:isolate}
.fracture-surface:after{content:'';position:absolute;inset:0;pointer-events:none;border:1px solid #cfc7df1f;clip-path:polygon(0 0,31% 0,31% 1px,1px 1px,1px 23%,0 23%,0 0,100% 77%,100% 100%,69% 100%,69% calc(100% - 1px),calc(100% - 1px) calc(100% - 1px),calc(100% - 1px) 77%);z-index:4}
@media(prefers-reduced-motion:reduce){
  .fx-chroma-copy,.fx-glass-rim>span{display:none!important}
  .fx-enter,.fx-enter *,.fx-enter:before,.fx-enter:after{animation:none!important}
}

/* Intermittent signals occupy the gaps that were already there. */
.fx-gap-chapter,.fx-gap-note,.fx-gap-article,.fx-gap-command,.fx-gap-story,.fx-gap-intro{position:relative}
.fx-burst-band{display:block;position:absolute;height:22px;width:clamp(110px,35%,190px);pointer-events:none;z-index:1;contain:layout paint;opacity:.96;overflow:hidden}
.fx-gap-chapter>.fx-burst-band{bottom:18px;left:var(--pad)}
.fx-gap-chapter:nth-of-type(even)>.fx-burst-band{left:auto;right:var(--pad)}
.fx-gap-note>.fx-burst-band{top:-47px;right:5%;width:34%;}
.fx-gap-article>.fx-burst-band{bottom:17px;right:0;width:38%;}
.fx-gap-command>.fx-burst-band{bottom:-49px;left:var(--pad);width:34%;}
.fx-gap-command:nth-of-type(even)>.fx-burst-band{left:auto;right:var(--pad)}
.fx-gap-story>.fx-burst-band{bottom:-32px;left:var(--pad);width:38%}
.welcome.fx-gap-story>.fx-burst-band{bottom:24px;left:auto;right:var(--pad)}
.fx-gap-intro>.fx-burst-band{bottom:-40px;left:0;width:43%}
.command-intro.fx-gap-intro>.fx-burst-band{bottom:-36px;left:auto;right:0}
.fx-burst-band>i{position:absolute;display:block;left:0;top:4px;height:2px;width:75%;background:linear-gradient(90deg,transparent 0 9%,#ae81e0 9% 35%,transparent 35% 41%,#d0b4f0 41% 67%,transparent 67% 73%,#7bbaca 73% 100%);opacity:0;animation:fx-signal-fragment var(--burst-cycle,3.6s) steps(1,end) var(--burst-phase,0s) infinite;animation-play-state:paused;filter:drop-shadow(0 0 3px #9b69cf55)}
.fx-burst-band>i:nth-child(2){width:48%;left:31%;top:8px;height:1px;animation-name:fx-signal-echo;background:linear-gradient(90deg,#7fc8d0 0 22%,transparent 22% 31%,#ad80cb 31% 88%,transparent 88%)}
.fx-burst-band>i:nth-child(3){width:27%;left:12%;top:11px;height:2px;animation-name:fx-signal-echo;animation-direction:reverse;background:linear-gradient(90deg,#be99e1 0 49%,transparent 49% 65%,#638eab 65%)}
.fx-burst-band>i:nth-child(4){width:9%;left:84%;top:2px;height:1px;animation-name:fx-signal-fragment;background:#98c7d5}
.fx-burst-band.fx-active>i{animation-play-state:running}
@keyframes fx-signal-fragment{0%,58%,67%,72%,100%{opacity:0;translate:0 0}59%{opacity:.8;translate:6px 0}60.8%{opacity:.28;translate:-3px 1px}62%{opacity:0}64%{opacity:.7;translate:-8px 0}65.5%{opacity:.35;translate:3px -1px}69%{opacity:.55;translate:-1px 0}70%{opacity:0}}
@keyframes fx-signal-echo{0%,60%,65%,73%,100%{opacity:0;translate:0 0}61%{opacity:.75;translate:-5px 0}62.5%{opacity:.2;translate:5px 0}66%{opacity:.6;translate:7px 1px}67.5%{opacity:0}70%{opacity:.35;translate:-4px 0}71%{opacity:0}}
/* Border-only chromatic faults are limited to commands. */
.fx-signal-surface{position:relative}
.fx-edge-signal{position:absolute;inset:-2px;display:block;pointer-events:none;z-index:3;overflow:hidden}
.fx-edge-signal>i{display:block;position:absolute;height:3px;left:2px;right:2px;top:0;opacity:0;background:linear-gradient(90deg,transparent 0 5%,#b690db 5% 17%,transparent 17% 28%,#7bc4d0 28% 40%,transparent 40% 67%,#b786b2 67% 77%,transparent 77%);animation:fx-edge-crackle var(--edge-cycle,3s) steps(1,end) var(--edge-phase,0s) infinite;animation-play-state:paused}
.fx-edge-signal>i:nth-child(2){top:auto;bottom:0;left:15%;height:2px;animation-direction:reverse;filter:drop-shadow(0 -1px #7193c977)}
.fx-edge-signal>i:nth-child(3){top:22%;bottom:17%;left:0;right:auto;width:2px;height:auto;background:linear-gradient(transparent 0 5%,#77becb 5% 14%,transparent 14% 69%,#b996d8 69% 75%,transparent 75%);animation-name:fx-edge-echo}
.fx-edge-signal.fx-active>i{animation-play-state:running}
.command-feature>.fx-edge-signal{left:var(--pad);right:var(--pad);top:-15px;bottom:-18px}
.command-feature>.fx-edge-signal>i:nth-child(3){left:auto;right:0;top:4%;bottom:84%}
@keyframes fx-edge-crackle{0%,31%,40%,48%,100%{opacity:0;translate:0 0}32%{opacity:.8;translate:-5px 0}35%{opacity:.25;translate:7px 1px}37%{opacity:.9;translate:2px 0}43%{opacity:.45;translate:-3px 0}45%{opacity:0}}
@keyframes fx-edge-echo{0%,35%,43%,100%{opacity:0;translate:0 0}36%{opacity:.6;translate:0 3px}39%{opacity:.3;translate:1px -4px}41%{opacity:.75;translate:0 0}}
.command-cursor{display:inline-block;margin-left:.16em;color:#d5b7ec;font-weight:400;line-height:1;vertical-align:.04em;animation:fx-command-caret .72s steps(1,end) infinite;animation-play-state:paused}
.command-cursor.fx-active{animation-play-state:running}
@keyframes fx-command-caret{0%,49%{opacity:1}50%,100%{opacity:0}}
/* The archive's full perimeter glows; an absolute layer preserves reading layout. */
.monster-archive{position:relative;isolation:isolate}
.fx-ember-field{position:absolute;inset:-36px 0 -96px;z-index:3;overflow:hidden;contain:layout paint;pointer-events:none;isolation:isolate;-webkit-mask-image:linear-gradient(transparent,#000 24px,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(transparent,#000 24px,#000 calc(100% - 20px),transparent)}
.fx-ember-field:before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 2% 56%,#73399412,transparent 40%),radial-gradient(ellipse at 98% 72%,#73399412,transparent 40%);pointer-events:none}
.fx-ember-field>i{position:absolute;left:var(--mote-x);top:var(--mote-top);width:var(--mote-size);height:var(--mote-size);border-radius:50%;background:#d4a5ff;box-shadow:0 0 8px #b97debcc,0 0 20px #9852c77a;opacity:0;animation:fx-violet-rise var(--mote-cycle,4s) linear var(--mote-phase,0s) infinite;animation-play-state:paused}
.fx-ember-field>i:nth-child(4n){width:2.6px;height:13px;border-radius:50%;background:linear-gradient(transparent,#c99bea);box-shadow:0 0 6px #b77cdeaa}
.fx-ember-field>i:nth-child(3n){background:#ebd2ff;box-shadow:0 0 6px #d0a5f0bb,0 0 12px #a969cf66}
.fx-ember-field.fx-active>i{animation-play-state:running}
@keyframes fx-violet-rise{0%{opacity:0;transform:translate3d(0,0,0) scale(1)}15%{opacity:calc(var(--mote-opacity,.95) * .68)}43%{opacity:var(--mote-opacity,.95)}75%{opacity:calc(var(--mote-opacity,.95) * .47)}100%{opacity:0;transform:translate3d(var(--mote-drift),calc(-1 * var(--mote-rise)),0) scale(.7)}}
/* Individual transform properties preserve the original art's rotation. */
.fx-float-note{animation:fx-note-drift var(--float-cycle,5s) ease-in-out var(--float-phase,0s) infinite;animation-play-state:paused;transform-origin:50% 50%}
.fx-float-symbol{display:inline-block;animation:fx-symbol-drift var(--float-cycle,4s) ease-in-out var(--float-phase,0s) infinite;animation-play-state:paused;transform-origin:50% 70%}
.fx-float-note.fx-active,.fx-float-symbol.fx-active{animation-play-state:running}
@keyframes fx-note-drift{0%,100%{translate:0 1px;rotate:-.6deg}50%{translate:1px -5px;rotate:.7deg}}
@keyframes fx-symbol-drift{0%,100%{translate:0 1px}50%{translate:1.5px -8px}}
@media(prefers-reduced-motion:reduce){
  .fx-burst-band,.fx-edge-signal{display:none!important}
  .fx-ember-field>i{animation:none!important;opacity:0!important}
  .command-cursor{animation:none!important;opacity:1!important}
  .fx-float-note,.fx-float-symbol{animation:none!important;translate:none!important;rotate:none!important}
}
