/* V8.9 targeted rollback fixes. Layout/scroll boundary stays original. */

/* Targeted V8.9 rollback patch. No global layout or page-scroll overrides. */
/* The diagonal rain lives underneath the chapter's photographs and typography. */
.chapter{isolation:isolate}
.rain-behind{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0;contain:paint;opacity:1;
 mask-image:linear-gradient(180deg,transparent 0%,rgba(0,0,0,.8) 6%,black 24%,black 90%,transparent 100%)}
.rain-behind .rain-thread{position:absolute;left:var(--left);top:var(--top);height:var(--height);width:.75px;
 transform:rotate(32deg) translateZ(0);
 transform-origin:top center;
 background:linear-gradient(180deg,transparent 0%,rgba(79,121,168,.45) 26%,rgba(96,139,186,.7) 55%,transparent 100%);
 opacity:var(--alpha);animation:v891-rain var(--duration) linear var(--delay) infinite;will-change:transform}
@keyframes v891-rain{0%{transform:translate3d(54px,-125px,0) rotate(32deg);opacity:0}15%{opacity:var(--alpha)}85%{opacity:var(--alpha)}100%{transform:translate3d(-88px,190px,0) rotate(32deg);opacity:0}}
html.motion-off .rain-behind .rain-thread{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){.rain-behind{display:none!important}}
/* 01: sufficient space, no overlapping copy. Preserve the user-selected sentence state. */
.id-quote{display:flex;flex-direction:column;align-items:stretch;gap:15px;margin-top:31px;padding-top:23px}
.id-quote p{width:100%;max-width:100%;line-height:1.85;min-height:2.3em;transition:opacity .22s ease,transform .55s cubic-bezier(.22,.61,.36,1),text-align .2s}
.id-quote p.v891-quote-wait{opacity:0;transform:translateX(25px)}
.id-quote p.v891-quote-kept{margin-left:auto;text-align:right;transform:translateX(0)}
.id-quote .save-line{align-self:flex-end;margin-top:0}
/* Full-screen inside the mobile site, including header and footer. The original
   clipped image panels do the actual cover/reveal, not a white pseudo-layer. */
#transition.scene-transition{position:absolute!important;inset:0!important;z-index:65!important;
 pointer-events:none;overflow:hidden;opacity:1}
#transition.scene-transition::before{display:none!important}
#transition.scene-transition .trans-one,
#transition.scene-transition .trans-two,
#transition.scene-transition .trans-edge{display:block!important}
#transition.scene-transition .trans-two{
 background:linear-gradient(105deg,rgba(65,119,180,.10),rgba(46,109,172,.22)),url('../assets/bg_08.webp') 43% 50%/cover no-repeat!important;
}
/* Preserve original 700 / 540 / 700 ms clip-path sequence. */
/* Strobe is attached to the existing zoom layer (no separate transition). */
.entry-zoom.v891-strobe .entry-zoom-flash{opacity:0;animation:v891-strobe .46s steps(2,end) 1 both!important;mix-blend-mode:screen}
@keyframes v891-strobe{0%,15%,33%,51%,68%,82%,100%{opacity:0}8%,26%,43%,59%,75%,91%{opacity:.88}}
/* Server effects retain V8.9 artwork: only position the three cues separately by option. */
.chapter-server .server-extra{overflow:hidden}
.v891-server-line{font-size:12px;line-height:1.9;color:#496b8b;min-height:28px;
 margin:15px 0 0;opacity:0;transform:translateY(8px);transition:opacity .48s ease,transform .5s ease;
 white-space:nowrap;letter-spacing:-.035em;position:relative;z-index:1}
.v891-server-line.is-visible{opacity:1;transform:translateY(0)}
.v891-server-line[data-server="0"]{text-align:left;padding-left:0}
.v891-server-line[data-server="1"]{text-align:right;padding-right:0}
/* Reinforce that global/CN marker and maps occupy distinct positions within the same photo. */
.server-extra[data-loc="0"] .loc-frame{left:5%;top:8%;right:auto;bottom:auto}
.server-extra[data-loc="0"] .loc-map{right:4%;top:8%;left:auto;bottom:auto}
.server-extra[data-loc="1"] .loc-frame{right:5%;bottom:6%;top:auto;left:auto}
.server-extra[data-loc="1"] .loc-map{left:3%;bottom:6%;top:auto;right:auto}
/* Random choice respects main/secondary existing tags. */
.v89-tag-action{margin:14px 0 6px;cursor:pointer}
.v891-pulse{animation:v891-tag-pulse .42s ease 1}
@keyframes v891-tag-pulse{50%{opacity:.55;transform:translateY(-2px)}}
/* All arrow/symbol glyphs are drawn from SVG paths rather than system fonts. */
.v891-icon{display:inline-flex;vertical-align:-.13em;align-items:center;justify-content:center;width:1em;height:1em;flex:none;line-height:1}
.v891-icon svg{display:block;width:100%;height:100%;overflow:visible;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
@media(max-width:340px){.v891-server-line{font-size:11px;letter-spacing:-.045em}}

/* Signature is nested inside .wipe-photo-image so it receives the same blur as the photograph.
   The condensation canvas stays above both, and wiping reveals them together. */
#wipeScene .signed-photograph,
#wipeScene.is-cleared .signed-photograph{opacity:1!important;transform:none!important;z-index:1!important;background:transparent!important}
#wipeScene .signed-name{color:#26435d;opacity:.92;text-shadow:0 .4px .2px rgba(33,65,94,.22),0 1px 1px rgba(221,235,246,.35);font-weight:500}
#wipeScene .signed-kicker{color:#355d78;opacity:.73;text-shadow:none}
/* Position-matched photograph expansion. The initial frame is the actual wiped image rectangle. */
#entryZoom.photo-story-zoom{background:transparent!important}
#entryZoom.photo-story-zoom .entry-zoom-picture{
 position:absolute!important;
 inset:auto;
 left:var(--wipe-x,10%);top:var(--wipe-y,16%);
 width:var(--wipe-w,80%);height:var(--wipe-h,36%);
 background:url('../assets/entry_fragment.webp') center center/cover no-repeat!important;
 opacity:1;filter:saturate(.82) contrast(.92);
 animation:v892PhotoFromWipe .76s cubic-bezier(.22,.72,.23,1) forwards!important;
 transform:none!important;
}
@keyframes v892PhotoFromWipe{
 0%{left:var(--wipe-x);top:var(--wipe-y);width:var(--wipe-w);height:var(--wipe-h);filter:saturate(.82) contrast(.92)}
 100%{left:-2%;top:-2%;width:104%;height:104%;filter:saturate(.82) contrast(.92)}
}
/* Repeat the physical signature on the zoom layer so the photograph stays continuous. */
#entryZoom .zoom-ink{color:#26435d;opacity:.92;text-shadow:0 .4px .2px rgba(33,65,94,.22),0 1px 1px rgba(221,235,246,.35);font-weight:500;pointer-events:none}
#entryZoom .zoom-kicker{color:#355d78;opacity:.73;text-shadow:none;pointer-events:none}
/* During strobe the zoomed photo is visible; the exit remains the original flash/fade timeline. */
#entryZoom.photo-story-zoom.is-illuminated{background:#eaf3fb!important}
/* Tracking frame remains hollow; never place a color-filled panel over the photo. */
.v89-locator .loc-frame{background:transparent!important;box-shadow:none!important;
 border:1px solid rgba(105,149,186,.58)!important;}
.v89-locator .loc-frame::before,.v89-locator .loc-frame::after{background:transparent!important}
.v89-locator .loc-map{background:none!important;border:0!important;border-radius:0!important;
 box-shadow:none!important;filter:none!important;display:flex;align-items:center;justify-content:center;}
.v89-locator .loc-map img{display:block;width:100%;height:100%;object-fit:contain;opacity:.83;
 filter:drop-shadow(0 0 3px rgba(243,249,255,.3))}
@media (prefers-reduced-motion:reduce){#entryZoom.photo-story-zoom .entry-zoom-picture{animation:none!important;left:0!important;top:0!important;width:100%!important;height:100%!important}}
