/* forest.css — 新卜森遊戲樣式：原 zoo-v5→v7→v9→v10→v11→v12→v13→v14→v15 @import 鏈依層疊順序攤平。
 * 改動僅限：刪 @import、png→webp、移除 zoo-sage-comic 引用、prefers-reduced-motion 改寫為 html.forest-rm 類別、字型堆疊補簡中。
 * 座標/尺寸/動畫時長一律原值（見 spec §3）。
 * v2：刪除凶籤「雙路都不推薦」的舊樣式，檔尾新增劇情反轉 twist／offer／ritual 與夥伴樣式。 */

/* ── from zoo-v5.css ── */
:root{--ink:#143b48;--teal:#0e6072;--cream:#fff8e9;--gold:#ffda68;--ease:cubic-bezier(.2,.8,.25,1)}
*{box-sizing:border-box}
html{background:#0b333e}
body{margin:0;font:16px/1.55 "Noto Sans TC","Noto Sans SC","PingFang TC","PingFang SC","Microsoft JhengHei",system-ui,sans-serif;color:var(--ink);background:#0b333e}
button,input{font:inherit}
button{cursor:pointer;-webkit-tap-highlight-color:transparent}
button:focus-visible,input:focus-visible{outline:3px solid #ffe070;outline-offset:3px}
button[hidden],[hidden]{display:none!important}
h1,h2,p{margin:0}
.world{position:relative;width:min(100%,490px);min-height:100dvh;margin:auto;overflow:hidden;background:#123f4e;box-shadow:0 0 60px #031820aa}
main{min-height:100dvh}
.masthead{position:absolute;z-index:50;top:0;left:0;right:0;height:68px;padding:0 18px;display:flex;align-items:center;gap:10px;color:#fff;filter:drop-shadow(0 2px 4px #062b3e)}
.masthead button{border:0}
.brand{background:none;color:#c5f1cf;font-size:17px;font-weight:1000;line-height:1;letter-spacing:-.5px;text-align:left}
.brand span{color:#ffe27b}.brand small{display:block;margin-top:5px;color:white;font-size:10px;letter-spacing:1.5px}
#back{width:38px;height:38px;border:2px solid #174554;border-radius:12px;background:#fff8dd;color:#194a59;font-size:24px;line-height:1}
.mast-mark{margin-left:auto;color:#ffe781;font-size:23px}
.scene{position:relative;isolation:isolate;min-height:100dvh;overflow:hidden}
.eyebrow{display:block;color:#ffdc78;font-size:11px;font-weight:1000;letter-spacing:2px}
.gold-button{width:100%;min-height:60px;display:flex;justify-content:center;align-items:center;gap:17px;border:3px solid #194252;border-radius:16px;background:linear-gradient(#ffeba0,#ffcf54);box-shadow:0 6px 0 #134152,0 15px 24px #082b3999;color:#173c4b;font-size:18px;font-weight:1000;letter-spacing:.3px;transition:transform .18s,box-shadow .18s}
.gold-button span{font-size:23px}
.gold-button:active{transform:translateY(4px);box-shadow:0 2px 0 #134152}

/* 1. The actual threshold: door, knock, hinge, forward camera. */
.threshold{height:100dvh;min-height:650px;color:#fff;background:#0d4150}
.threshold-art{position:absolute;inset:0;z-index:-3;background:url("assets/zoo-observatory-exterior-v5.webp") center center/cover}
.threshold:before{content:"";position:absolute;inset:0;z-index:-2;background:linear-gradient(#03283155,transparent 22%,transparent 43%,#07394588 65%,#052c3ef0)}
.threshold-heading{position:absolute;top:91px;left:25px;right:25px;text-shadow:0 3px 8px #0d353e}
.threshold-heading h1{font-size:clamp(31px,8vw,43px);line-height:1.22;letter-spacing:2px;margin:9px 0}
.threshold-heading p{font-weight:850;font-size:15px}
.threshold-bottom{position:absolute;left:24px;right:24px;bottom:max(26px,env(safe-area-inset-bottom));text-align:center;text-shadow:0 2px 5px #0a3542}
.threshold-bottom p{font-size:16px;font-weight:850;line-height:1.7}
.threshold-bottom .gold-button{margin:20px 0 13px;text-shadow:none}
.threshold-bottom small{font-size:11px;color:#e1f5e7}
.fireflies{position:absolute;inset:0;pointer-events:none}.fireflies i{position:absolute;top:var(--y);left:var(--x);width:5px;height:5px;border-radius:50%;background:#fff5af;box-shadow:0 0 15px 5px #ffe07a9a;animation:firefly 3.5s ease-in-out infinite alternate;animation-delay:var(--delay)}
.fireflies i:nth-child(1){--x:14%;--y:38%;--delay:-1s}.fireflies i:nth-child(2){--x:82%;--y:26%;--delay:-2s}.fireflies i:nth-child(3){--x:65%;--y:58%;--delay:-.5s}.fireflies i:nth-child(4){--x:21%;--y:70%;--delay:-3s}.fireflies i:nth-child(5){--x:79%;--y:69%;--delay:-1.7s}
.threshold.knocking:before{animation:knockGlow .48s ease-in-out}
.threshold.door-open:after{content:"";position:absolute;z-index:5;inset:0;background:#fff3bd;animation:doorLight 1.05s both;pointer-events:none}

/* 2. One viewport, unmistakable left/right choice. */
.choice{height:100dvh;min-height:650px;background:#153f4b;color:#fff}
.choice-room{position:absolute;inset:0;z-index:-2;background:url("assets/zoo-sage-opening.webp") center 18%/cover;filter:saturate(.9);animation:roomArrive .9s var(--ease) both}
.room-pages{position:absolute;inset:0;pointer-events:none;overflow:hidden}.room-pages i{position:absolute;top:var(--top);left:var(--left);width:28px;height:19px;border:2px solid #f9e7ae;border-radius:2px;background:#fff9dcbb;box-shadow:0 0 14px #fff9bb91;transform:rotate(var(--rotate));animation:paperDrift 5s ease-in-out infinite alternate;animation-delay:var(--delay)}
.room-pages i:nth-child(1){--top:25%;--left:8%;--rotate:-25deg;--delay:-1s}.room-pages i:nth-child(2){--top:36%;--left:78%;--rotate:20deg;--delay:-2s}.room-pages i:nth-child(3){--top:65%;--left:45%;--rotate:30deg;--delay:-.5s}.room-pages i:nth-child(4){--top:76%;--left:88%;--rotate:-16deg;--delay:-3s}
.choice:before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(#073b4edb,#063b4ca5 28%,#082f3d5e 60%,#062e3edb)}
.choice-heading{position:absolute;z-index:4;top:94px;left:22px;right:22px;text-align:center;text-shadow:0 2px 5px #07313f}
.choice-heading h1{font-size:clamp(27px,7vw,34px);line-height:1.3;margin:7px 0 8px}
.choice-heading p{font-size:14px;font-weight:850}
.choice-halves{position:absolute;z-index:3;left:13px;right:13px;top:32%;bottom:max(38px,env(safe-area-inset-bottom));display:grid;grid-template-columns:1fr 1fr;gap:11px}
.choice-half{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:20px 9px 19px;border:3px solid #fff6d3;border-radius:130px 130px 20px 20px;color:#fff;text-align:center;box-shadow:0 10px 20px #032a3baa, inset 0 0 0 5px #ffffff30;transition:transform .25s,box-shadow .25s}
.choice-half.luck{background:radial-gradient(circle at 50% 28%,#fff5a4 0,#f7b75c 22%,#77bb8a 52%,#155e69 100%)}
.choice-half.wealth{background:radial-gradient(circle at 50% 28%,#ffe89b 0,#d69a3c 23%,#5b9e8b 55%,#174a60 100%)}
.choice-half:before{content:"";position:absolute;inset:0;background:linear-gradient(transparent 35%,#073547b5);pointer-events:none}
.choice-half:hover{transform:translateY(-5px);box-shadow:0 14px 25px #032a3baa,inset 0 0 0 5px #ffffff50}
.choice-half.selected{box-shadow:0 0 0 5px #fff6a7,0 15px 30px #052c3e}
.symbol{position:relative;z-index:1;width:100%;height:66%;display:flex;justify-content:center;align-items:center;color:#fff8c3;text-shadow:0 0 26px #fff5ab;font-size:clamp(72px,20vw,114px);animation:symbolFloat 4s ease-in-out infinite}
.symbol.treasure{height:66%;align-items:center;overflow:visible}
.symbol.luck-emblem{height:66%;align-items:center;overflow:visible}
.symbol.luck-emblem img{display:block;width:150%;max-width:none;max-height:102%;object-fit:contain;filter:drop-shadow(0 15px 13px #2d603c8a);animation:treasureLift 4.2s ease-in-out infinite}
.symbol.luck-emblem .coin{position:absolute;font-style:normal;color:#fff7ae;font-size:25px;text-shadow:0 0 11px #fff4af;animation:coinRise 3.4s ease-out infinite}
.symbol.luck-emblem .c1{left:8%;top:24%}.symbol.luck-emblem .c2{right:11%;top:9%;animation-delay:-1.5s}
.symbol.treasure img{display:block;width:155%;max-width:none;max-height:102%;object-fit:contain;filter:drop-shadow(0 17px 13px #68451a91);animation:treasureLift 4s ease-in-out infinite}
.symbol.treasure .coin{position:absolute;font-style:normal;color:#fff3a3;font-size:25px;text-shadow:0 0 11px #ffda6e;animation:coinRise 3s ease-out infinite}
.symbol.treasure .c1{left:12%;top:30%}.symbol.treasure .c2{right:4%;top:18%;animation-delay:-1s}.symbol.treasure .c3{left:52%;top:4%;animation-delay:-1.9s}
.choice-half.wealth{background:radial-gradient(circle at 50% 24%,#ffe5a0 0,#d49c41 31%,#715b37 57%,#1b4e5a 100%)}
.choice-caption{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;gap:7px;text-shadow:0 2px 5px #153d49}
.choice-caption small{font-size:10px;font-weight:1000;letter-spacing:1px}.choice-caption strong{font-size:clamp(29px,8vw,39px);line-height:1.1;white-space:nowrap}.choice-caption em{font-size:13px;line-height:1.35;font-style:normal;font-weight:850}
.choice-floor{position:absolute;bottom:-45px;left:-15%;width:130%;height:110px;border-radius:50%;background:#70523980;filter:blur(15px)}
.choice[data-route=today] .choice-room{animation:cameraLeft .9s var(--ease) both}.choice[data-route=wealth] .choice-room{animation:cameraRight .9s var(--ease) both}
.choice[data-route] .choice-half:not(.selected){opacity:.3;transition:opacity .3s}

/* 3. Sage's book is a genuine scene, not another generic card. */
.profile{min-height:100dvh;padding:140px 18px 28px;background:#e9efd9 url("assets/zoo-sage-opening.webp") center top/auto 100% no-repeat}
.profile:before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(transparent 0 12%,#19465180 24%,#f7f4daa8 37%,#edf3df 100%)}
.profile-sage{position:absolute;top:57px;right:0;width:52%;height:290px;background:url("assets/zoo-sage-opening.webp") 56% 26%/auto 455px no-repeat;clip-path:ellipse(45% 42% at 52% 50%);filter:drop-shadow(0 10px 5px #15555a);animation:sageLean .9s var(--ease) both}
.profile-book{position:relative;max-width:440px;margin:90px auto 0;padding:23px 20px 24px;border:4px solid #aa7743;border-radius:18px 25px 17px 21px;background:repeating-linear-gradient(90deg,#fffbee 0 24px,#f8efd8 25px 26px);box-shadow:0 7px 0 #674827,0 16px 28px #19435484;color:#234f52;animation:bookArrive .8s var(--ease) both}
.profile-book:before{content:"";position:absolute;inset:8px;border:2px solid #c79b5d;border-radius:12px;pointer-events:none}
.profile-book>*{position:relative;z-index:1}
.profile-book .eyebrow{color:#a36a31}
.profile-book h1{font-size:31px;line-height:1.23;margin:8px 0 9px;color:#174957}
.profile-intro{font-size:14px;font-weight:700;line-height:1.55;margin-bottom:14px}
form{display:grid;gap:5px}
form label{font-size:14px;font-weight:950;margin-top:7px}
form label small{font-size:11px;color:#60817d;margin-left:6px}
input{width:100%;min-height:48px;padding:9px 12px;border:2px solid #649293;border-radius:10px;background:#fffdf5;color:#173e4b}
input::placeholder{color:#8aa8a6}
.privacy{font-size:11px;line-height:1.45;color:#577b79;font-weight:700;margin-top:4px}
.form-error{font-size:12px;font-weight:850;color:#b53833}
form .gold-button{margin-top:11px;min-height:52px;font-size:16px}
.profile.ink-seal .profile-book{animation:inkSeal .7s ease-in both}

/* 4. Book ritual: light orbit, leaf touch, book closure. */
.attune{height:100dvh;min-height:650px;background:radial-gradient(circle at 50% 43%,#4eb7a5,#0a5969 60%,#073548);color:#fff}
.attune:before{content:"";position:absolute;inset:0;background:none center 50%/auto 300% no-repeat;opacity:.43}
.attune-world{position:absolute;top:17%;left:0;right:0;height:55%;display:grid;place-items:center;perspective:800px}
.book-spread{position:relative;width:76%;height:42%;transform:rotateX(27deg) rotate(-5deg);filter:drop-shadow(0 18px 13px #062c3f9e)}
.book-spread .page{position:absolute;top:0;width:50%;height:100%;border:5px solid #9f6b32;background:repeating-linear-gradient(#fffcde 0 19px,#e7ce9c 20px 21px);box-shadow:inset 0 0 25px #dcaf68;border-radius:6px 30px 20px 6px}
.book-spread .left-page{left:0;transform-origin:right center;transform:rotateY(-13deg)}.book-spread .right-page{right:0;transform-origin:left center;transform:rotateY(13deg);border-radius:30px 6px 6px 20px}.book-spine{position:absolute;left:49%;top:0;width:2%;height:100%;background:#8c612f}
.leaf-light{position:absolute;color:#fff7a8;font-size:105px;text-shadow:0 0 12px white,0 0 50px #fff7ac;animation:leafPulse 2s ease-in-out infinite}
.leaf-orbit{position:absolute;color:#fff5a4;font-size:30px;animation:orbit 4s linear infinite}.leaf-orbit.two{animation-delay:-1.3s}.leaf-orbit.three{animation-delay:-2.6s}
.attune-copy{position:absolute;left:25px;right:25px;bottom:max(33px,env(safe-area-inset-bottom));text-align:center;text-shadow:0 2px 6px #063d4f}
.attune-copy h1{font-size:30px;line-height:1.2;margin:8px 0}.attune-copy p{font-size:15px;font-weight:750}.attune-copy .gold-button{margin-top:24px;text-shadow:none}
.attune.awaken .leaf-light{animation:leafBurst 1.15s ease-in both}.attune.awaken .book-spread{animation:bookClose 1.2s ease-in-out both}.attune.awaken:after{content:"";position:absolute;inset:0;background:#fff6b1;animation:flash .9s .35s both;pointer-events:none}

/* 5. Each beat has different spatial movement and graphic treatment. */
.vision{height:100dvh;min-height:650px;color:#fff;background:#0b5261}
.vision-visual,.vision-wash{position:absolute;inset:0}.vision-visual{z-index:-3;overflow:hidden}.vision-wash{z-index:-2;background:linear-gradient(#07354666,transparent 28%,#093c5066 51%,#062e42ed 83%)}
.vision-top{position:absolute;top:90px;left:23px;right:23px;display:flex;justify-content:space-between;font-size:11px;font-weight:900;letter-spacing:2px}
.vision-copy{position:absolute;left:22px;right:22px;bottom:max(95px,calc(env(safe-area-inset-bottom) + 76px));text-shadow:0 2px 8px #06394f}
.vision-copy h1{font-size:clamp(28px,7.6vw,38px);line-height:1.28;margin:10px 0 14px}
.vision-copy h1 em{font-style:normal;color:#ffe485}
.vision-copy p{font-size:16px;line-height:1.7;font-weight:800}
.skip{position:absolute;z-index:3;bottom:max(31px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:max-content;border:1px solid #fff8c7a6;border-radius:20px;padding:8px 14px;background:#0d4b60bb;color:#fff4c6;font-size:12px;font-weight:850}
.vision-progress{position:absolute;bottom:0;left:0;right:0;height:5px;background:#104e5c}.vision-progress i{display:block;width:var(--progress);height:100%;background:#ffdb6f;transition:width .3s}
.sage-portrait{position:absolute;inset:0;background:url("assets/zoo-sage-opening.webp") 48% 20%/cover;animation:sageClose 2.8s var(--ease) both}
.speaking-stars{position:absolute;top:27%;right:11%;color:#fff3a0;font-size:27px;letter-spacing:6px;animation:speechSpark 2s both}
.beat-call .vision-copy{border-left:5px solid #ffe28a;padding-left:16px;animation:speechArrive .8s .25s both}
.beat-call .name-call{font-size:clamp(38px,10vw,51px);color:#fff2af}
.beat-call .name-call{animation:nameReveal 1.1s steps(12,end) .35s both}
.beat-status{background:#8c6b43}
.beat-status .vision-visual{background:none center 50%/auto 300% no-repeat;animation:paperZoom 2.8s both}
.living-book{position:absolute;top:22%;left:12%;right:12%;height:34%;border:6px solid #a06e37;border-radius:14px 30px 20px 14px;background:#fff2c3;box-shadow:0 16px 30px #352513a0, inset 0 0 0 8px #e8d2a0;transform:perspective(700px) rotateX(20deg) rotate(-5deg);overflow:hidden}
.living-book:before{content:"";position:absolute;inset:18px;border:3px solid #b89a68;border-radius:8px;background:repeating-linear-gradient(#ffffff00 0 23px,#bba77f77 24px 25px)}
.living-book i{position:absolute;inset:0;background:#fff6df;transform-origin:left center;animation:singlePage 2.1s .2s both}.living-book b{position:absolute;left:46%;top:28%;color:#c89e5c;font-size:58px;animation:inkAppear 2s .8s both}
.beat-status .vision-copy{animation:inkAppear 1s .9s both}
.game-picture{position:absolute;inset:0;background-repeat:no-repeat;background-size:auto 300%}
.game-picture[data-game=slot]{background-image:url("assets/zoo-games-a-v3.webp");background-position:41% 0%}
.game-picture[data-game=bingo]{background-image:url("assets/zoo-games-a-v3.webp");background-position:40% 50%}
.game-picture[data-game=roulette]{background-image:url("assets/zoo-games-a-v3.webp");background-position:40% 100%}
.game-picture[data-game=sic_bo]{background-image:url("assets/zoo-games-b-v3.webp");background-position:39% 0%}
.game-picture[data-game=fishing]{background-image:url("assets/zoo-games-b-v3.webp");background-position:43% 50%}
.game-picture[data-game=baccarat]{background-image:url("assets/zoo-games-b-v3.webp");background-position:42% 100%}
.glimmer{position:absolute;color:#fff7a2;font-size:27px;text-shadow:0 0 8px white;animation:glimmerDrift 2.5s ease-in-out infinite alternate}.g1{left:12%;top:24%}.g2{right:17%;top:33%;animation-delay:-.8s}.g3{left:71%;top:52%;animation-delay:-1.6s}
.activity{position:absolute;z-index:1;left:50%;top:26%;transform:translateX(-50%);pointer-events:none;filter:drop-shadow(0 4px 9px #063c4db0)}
.activity i{font-style:normal;display:grid;place-items:center}
.card-hero .activity,.card-hero .game-picture:before{display:none}
.beat-recommend .game-picture{animation:gameUnfold 2.6s var(--ease) both}
.beat-recommend .vision-copy{animation:speechArrive .7s .4s both}
.beat-contrast .game-picture{animation:sideTrail 2.7s var(--ease) both}
.beat-contrast .vision-wash{background:linear-gradient(#072f4680,transparent 24%,#06445f88 50%,#042d44f2 85%)}
.beat-contrast .vision-copy{animation:contrastArrive .8s .4s both}
.exit-forest{position:absolute;inset:0;background:url("assets/zoo-observatory-exterior-v5.webp") center/cover;animation:forestExit 2.6s var(--ease) both}
.closing-book{position:absolute;left:43%;top:41%;width:70px;height:100px;border:6px solid #a07437;border-radius:9px;background:#f6d88f;color:#a6763d;text-align:center;line-height:85px;font-size:35px;box-shadow:0 12px 25px #092b3e9d;animation:bookDepart 2.7s var(--ease) both}
.beat-farewell .vision-copy{animation:farewellText 1s .5s both}

/* 6. The result is a full-height, full-width field note, not a small dialogue bubble. */
.final-scene{background:#0b5860;padding:74px 10px 18px}
.final-forest{position:absolute;inset:0;z-index:-2;background:url("assets/zoo-observatory-exterior-v5.webp") center/cover;filter:blur(6px) saturate(.9)}
.final-scene:before{content:"";position:absolute;inset:0;z-index:-1;background:#083b4da6}
.fortune-card{position:relative;overflow:hidden;width:100%;min-height:calc(100dvh - 92px);padding:20px 18px 24px;border:5px solid #e6bf69;border-radius:22px;background:linear-gradient(130deg,#fffbec,#f7ecd3 60%,#e8efdb);box-shadow:0 8px 0 #6f562e,0 22px 45px #052d3aab;color:#244c51;animation:cardUnfurl 1.1s var(--ease) both}
.fortune-card:before{content:"";position:absolute;inset:10px;border:2px solid #cfa660;border-radius:14px;pointer-events:none}
.fortune-card>*{position:relative;z-index:1}
.card-top{display:flex;justify-content:space-between;gap:8px;color:#91683d;font-size:9px;font-weight:1000;letter-spacing:1px}
.card-intro{padding:20px 3px 15px;text-align:center}
.card-intro .eyebrow{color:#a46d3b}.card-intro h1{font-size:clamp(29px,7.6vw,39px);line-height:1.23;margin:8px 0;color:#164b58}
.card-intro p{font-size:14px;font-weight:750}
.card-hero{position:relative;height:265px;overflow:hidden;border:4px solid #fff9e6;border-radius:15px;background:#1e7a82;box-shadow:0 5px 0 #b69562}
.card-hero .game-picture{animation:heroFloat 9s ease-in-out infinite alternate}
.card-hero:after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 35%,#053c54e5)}
.hero-label{position:absolute;z-index:2;left:18px;right:18px;bottom:13px;display:flex;flex-direction:column;color:#fff;text-shadow:0 2px 6px #073a4b}
.hero-label small{font-size:15px;font-weight:900}.hero-label strong{font-size:clamp(37px,10vw,52px);line-height:1.1;color:#ffe591}.hero-label span{font-size:15px;font-weight:850}
.card-reading,.card-contrast{padding:20px 7px;border-bottom:2px dashed #c69d69}
.section-num{color:#a26c37;font-size:12px;letter-spacing:1.5px;font-weight:1000}
.card-reading h2,.card-contrast h2{font-size:clamp(23px,6.1vw,29px);line-height:1.32;margin:9px 0;color:#164d59}
.card-reading p,.card-contrast p{font-size:16px;line-height:1.65;font-weight:750}
.card-contrast{background:#eaf2e97a;border-radius:12px;padding-left:12px;padding-right:12px}
.card-seal{text-align:center;padding:19px 8px}.card-seal span{color:#976a3a;font-size:12px;font-weight:1000;letter-spacing:2px}.card-seal p{font-size:13px;line-height:1.6;font-weight:700;margin-top:7px}
.fortune-card .gold-button{min-height:53px;margin-top:4px;font-size:16px}

/* Matched open/closed frames of the same illustrated doorway. */
.open-door-art{position:absolute;inset:0;z-index:-2;background:url("assets/zoo-observatory-open-v5.webp") center/cover;opacity:0;pointer-events:none}
.door-leaf{position:absolute;z-index:2;background-image:url("assets/zoo-observatory-exterior-v5.webp");background-repeat:no-repeat;pointer-events:none;backface-visibility:hidden;opacity:0}
.door-leaf.left{transform-origin:2% 55%;clip-path:polygon(0 9%,20% 4%,45% 1%,100% 0,100% 100%,0 100%)}
.door-leaf.right{transform-origin:98% 55%;clip-path:polygon(0 0,55% 1%,80% 4%,100% 9%,100% 100%,0 100%)}
.threshold.door-open .door-leaf.left{animation:actualDoorLeft .78s cubic-bezier(.55,.01,.25,.98) both}
.threshold.door-open .door-leaf.right{animation:actualDoorRight .78s cubic-bezier(.55,.01,.25,.98) both}
.threshold.door-open .door-leaf{opacity:1;filter:drop-shadow(0 4px 3px #1a180e4d)}
.inner-room-art{position:absolute;inset:0;z-index:5;background:url("assets/zoo-sage-opening.webp") center 20%/cover;opacity:0;pointer-events:none}
.threshold.door-open .open-door-art{opacity:1}
.threshold.entering .threshold-art,.threshold.entering .open-door-art{animation:intoDoor 1.05s cubic-bezier(.62,.02,.96,.49) both;transform-origin:50% 51%}
.threshold.entering .open-door-art{opacity:1}
.threshold.entering .inner-room-art{animation:roomCross 1.05s ease-in both}
.threshold.entering .threshold-heading,.threshold.entering .threshold-bottom{animation:exitCopy .25s both}
.threshold.entering:after{content:"";position:absolute;z-index:7;inset:0;background:#fff4c6;pointer-events:none;animation:thresholdGlint 1.05s both}
@keyframes actualDoorLeft{to{transform:perspective(450px) rotateY(-115deg)}}
@keyframes actualDoorRight{to{transform:perspective(450px) rotateY(115deg)}}
@keyframes intoDoor{from{transform:scale(1)}to{transform:scale(3.1)}}
@keyframes roomCross{0%,45%{opacity:0;transform:scale(1.35)}100%{opacity:1;transform:scale(1.04)}}
@keyframes exitCopy{to{opacity:0}}
@keyframes thresholdGlint{0%,50%,100%{opacity:0}76%{opacity:.55}}

@keyframes firefly{to{transform:translate(13px,-20px);opacity:.35}}
@keyframes knockGlow{0%,100%{opacity:1}45%{opacity:.48}}
@keyframes doorLight{0%,40%{opacity:0}70%{opacity:.65}100%{opacity:0}}
@keyframes roomArrive{from{transform:scale(1.5);filter:brightness(2)}to{transform:scale(1);filter:brightness(1)}}
@keyframes paperDrift{to{transform:translate(16px,-35px) rotate(35deg);opacity:.2}}
@keyframes symbolFloat{50%{transform:translateY(-12px)}}
@keyframes turn{to{transform:rotate(360deg)}}
@keyframes cameraLeft{to{transform:scale(1.45) translateX(18%);filter:brightness(1.4)}}
@keyframes cameraRight{to{transform:scale(1.45) translateX(-18%);filter:brightness(1.4)}}
@keyframes sageLean{from{opacity:0;transform:translateY(25px) rotate(7deg)}to{opacity:1;transform:none}}
@keyframes bookArrive{from{opacity:0;transform:perspective(800px) rotateX(25deg) translateY(120px)}to{opacity:1;transform:none}}
@keyframes inkSeal{to{transform:scale(.92) rotateX(15deg);opacity:.25}}
@keyframes leafPulse{50%{transform:scale(1.15);filter:brightness(1.35)}}
@keyframes orbit{from{transform:rotate(0deg) translateX(115px) rotate(0deg)}to{transform:rotate(360deg) translateX(115px) rotate(-360deg)}}
@keyframes leafBurst{to{transform:scale(5) rotate(160deg);opacity:0}}
@keyframes bookClose{50%{transform:rotateX(60deg) scale(.8)}100%{transform:rotateX(0) scale(1.4)}}
@keyframes flash{0%,100%{opacity:0}50%{opacity:.8}}
@keyframes sageClose{from{transform:scale(1.25) translateY(9%)}to{transform:scale(1.06) translateY(-1%)}}
@keyframes speechSpark{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:none}}
@keyframes speechArrive{from{opacity:0;transform:translateX(-35px)}to{opacity:1;transform:none}}
@keyframes nameReveal{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes paperZoom{from{transform:scale(1.3) rotate(5deg)}to{transform:scale(1) rotate(0)}}
@keyframes singlePage{0%{transform:rotateY(0)}70%,100%{transform:rotateY(-175deg)}}
@keyframes inkAppear{from{opacity:0;filter:blur(8px)}to{opacity:1;filter:blur(0)}}
@keyframes gameUnfold{from{opacity:0;transform:perspective(900px) rotateY(-65deg) scale(.8)}to{opacity:1;transform:perspective(900px) rotateY(0) scale(1.06)}}
@keyframes sideTrail{from{transform:translateX(60%) scale(1.15)}to{transform:translateX(-4%) scale(1.03)}}
@keyframes contrastArrive{from{opacity:0;transform:translateX(40px)}to{opacity:1;transform:none}}
@keyframes glimmerDrift{to{transform:translateY(-15px) rotate(15deg);opacity:.45}}
@keyframes forestExit{from{transform:scale(1.8);filter:brightness(1.5)}to{transform:scale(1);filter:brightness(.8)}}
@keyframes bookDepart{to{transform:translateY(140px) rotate(-28deg) scale(.3);opacity:0}}
@keyframes farewellText{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
@keyframes cardUnfurl{from{opacity:0;transform:perspective(900px) rotateX(55deg) translateY(80px)}to{opacity:1;transform:none}}
@keyframes heroFloat{to{transform:scale(1.08) translateY(-2%)}}
@keyframes treasureLift{50%{transform:translateY(-9px) rotate(-2deg)}}
@keyframes coinRise{0%{transform:translateY(25px) scale(.6);opacity:0}45%{opacity:1}100%{transform:translateY(-45px) scale(1.15);opacity:0}}
@media(max-height:730px){.threshold{min-height:580px}.threshold-heading{top:77px}.threshold-heading h1{font-size:30px}.choice{min-height:580px}.choice-heading{top:78px}.choice-halves{top:30%}.profile{padding-top:92px}.profile-sage{height:225px}.profile-book{margin-top:55px;padding-top:18px}.profile-book h1{font-size:27px}.profile-intro{font-size:12px;margin-bottom:7px}input{min-height:42px}.privacy{font-size:10px}.attune{min-height:580px}.vision{min-height:580px}.vision-top{top:77px}.vision-copy{bottom:75px}.vision-copy h1{font-size:26px}.vision-copy p{font-size:14px}}
@media(min-width:650px){.world{border-left:4px solid #e3bf66;border-right:4px solid #e3bf66}}
html.forest-rm *,html.forest-rm *:before,html.forest-rm *:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}

/* ── from zoo-v7.css ── */
.v7-scene{height:100dvh;min-height:650px;color:#fff;background:#0b4253}
.v7-scene:before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none}
.v7-scene button{color:inherit}
.v7-scene .eyebrow{font-size:11px}
.v7-scene h1{font-size:clamp(27px,7.4vw,38px);line-height:1.27;text-shadow:0 3px 9px #062c3d}
.v7-scene p{font-size:15px;line-height:1.65;font-weight:780;text-shadow:0 2px 6px #062e3e}

/* Sage recognizes the player before the book opens. */
.summons{background:#0b5465}
.summons-room{position:absolute;inset:0;z-index:-3;background:url("assets/zoo-sage-opening.webp") center 18%/cover;animation:summonsCamera 10s ease-in-out infinite alternate}
.summons:before{background:linear-gradient(#073b4bcf,#0a4f5b7d 30%,#0b495355 60%,#073242f0)}
.summons-light{position:absolute;inset:0;background:radial-gradient(circle at 50% 61%,#ffe89585,transparent 34%);animation:bookHalo 3s ease-in-out infinite alternate;pointer-events:none}
.summons-copy{position:absolute;z-index:3;left:22px;right:22px;top:96px;text-align:center}
.summons-copy h1{margin:9px 0 10px}.summons-copy p{font-size:14px}
.living-book-trigger{position:absolute;z-index:4;left:2%;right:2%;top:41%;height:47%;border:0;background:none;padding:0;filter:drop-shadow(0 17px 17px #062c3699);transition:transform .3s}
.living-book-trigger:hover{transform:translateY(-7px)}
.living-book-trigger img{width:100%;height:100%;object-fit:contain;animation:bookHover 3.5s ease-in-out infinite}
.book-tap-hint{position:absolute;left:50%;bottom:-2%;transform:translateX(-50%);width:max-content;max-width:90%;padding:8px 13px;border:2px solid #ffe7a6;border-radius:18px;background:#0b6173d9;color:#fff1c0;font-size:13px;font-weight:950;letter-spacing:1px;text-shadow:0 2px 4px #064455;animation:hintBreath 2s ease-in-out infinite}
.scene-footnote{position:absolute;left:12px;right:12px;bottom:max(19px,env(safe-area-inset-bottom));text-align:center;font-size:11px;color:#e1f8e8}
.flip-pages{position:absolute;left:16%;right:11%;top:20%;height:44%;perspective:650px;pointer-events:none}
.flip-pages i{position:absolute;right:0;top:0;width:49%;height:100%;border:2px solid #d6ad68;border-radius:2px 13px 12px 2px;background:linear-gradient(100deg,#d3b37c 0,#fff7d8 13%,#fff9e8 72%,#e3c18a 100%);box-shadow:-5px 5px 13px #49361d77;transform-origin:left center;opacity:0}
.flip-pages i:after{content:"✦   ❧   ✦";position:absolute;top:28%;left:16%;color:#b7915d;letter-spacing:5px;font-size:18px}
.summons.flipping .flip-pages i{animation:rapidPage .48s cubic-bezier(.63,.01,.24,1) both}
.summons.flipping .flip-pages i:nth-child(1){animation-delay:.05s}.summons.flipping .flip-pages i:nth-child(2){animation-delay:.30s}.summons.flipping .flip-pages i:nth-child(3){animation-delay:.55s}.summons.flipping .flip-pages i:nth-child(4){animation-delay:.80s}.summons.flipping .flip-pages i:nth-child(5){animation-delay:1.05s}.summons.flipping .flip-pages i:nth-child(6){animation-delay:1.30s}
.summons.flipping .living-book-trigger img{animation:bookShudder 1.8s both}
.summons.flipping .book-tap-hint,.summons.flipping .scene-footnote{opacity:0}
.summons.flipping .summons-light{animation:bookBurst 2s both}

/* Branch-specific messenger, not generic narration. */
.messenger-scene{background:#0b4d5b}
.messenger-room{position:absolute;inset:0;z-index:-3;background:url("assets/zoo-sage-opening.webp") center 22%/cover;filter:brightness(.6);animation:roomDepth 8s ease-in-out infinite alternate}
.messenger-scene:before{background:radial-gradient(circle at 52% 39%,#fce28988,transparent 31%),linear-gradient(#073c50ba,#0b526388 50%,#073347ea)}
.messenger-scene.leaf-route:before{background:radial-gradient(circle at 52% 39%,#b4ff9a88,transparent 31%),linear-gradient(#073c50ba,#0b5d6388 50%,#073347ea)}
.messenger-book{position:absolute;left:11%;right:11%;top:33%;height:39%;background:url("assets/zoo-living-book-v7.webp") center/contain no-repeat;opacity:.56;filter:blur(2px);transform:perspective(800px) rotateX(34deg)}
.messenger-copy{position:absolute;z-index:3;left:21px;right:21px;top:94px;text-align:center}
.messenger-copy h1{margin:8px 0}.messenger-copy p{font-size:14px}
.messenger-hotspot{position:absolute;z-index:5;left:13%;right:13%;top:36%;height:46%;border:0;background:none;filter:drop-shadow(0 12px 22px #ffe38c66)}
.messenger-hotspot img{width:100%;height:82%;object-fit:contain;animation:messengerFly 3s ease-in-out infinite}
.messenger-hotspot span{position:absolute;left:0;right:0;bottom:0;display:block;padding:7px 9px;border:2px solid #fff0bd;border-radius:20px;background:#0c5468d8;color:#fff7d3;font-size:13px;font-weight:900}
.leaf-route .messenger-hotspot{filter:drop-shadow(0 12px 22px #a4f7b266)}
.messenger-motes{position:absolute;inset:0;pointer-events:none}.messenger-motes i{position:absolute;top:var(--y);left:var(--x);font-style:normal;color:#ffe88b;font-size:28px;animation:moteDrift 3s ease-in-out infinite alternate;animation-delay:var(--delay)}
.messenger-motes i:nth-child(1){--x:13%;--y:28%;--delay:-.3s}.messenger-motes i:nth-child(2){--x:82%;--y:32%;--delay:-1.2s}.messenger-motes i:nth-child(3){--x:22%;--y:66%;--delay:-2s}.messenger-motes i:nth-child(4){--x:74%;--y:74%;--delay:-.8s}.leaf-route .messenger-motes i{color:#c9ffae}

/* Four reproducible narrative weather states. */
.omen-scene{background:#205c67}
.omen-room{position:absolute;inset:0;z-index:-3;background:url("assets/zoo-living-book-v7.webp") center 39%/110% auto no-repeat;opacity:.47;animation:bookHover 6s ease-in-out infinite}
.omen-scene:before{background:radial-gradient(circle at 50% 40%,var(--omen-glow),transparent 43%),linear-gradient(var(--omen-top),var(--omen-bottom))}
.omen-radiant{--omen-glow:#fff1a8d6;--omen-top:#307e7b;--omen-bottom:#0a5262}.omen-bright{--omen-glow:#e7f0a5b5;--omen-top:#326d75;--omen-bottom:#0a4758}.omen-still{--omen-glow:#c5d7be88;--omen-top:#3a6672;--omen-bottom:#113e50}.omen-mist{--omen-glow:#a5b2c15e;--omen-top:#30475c;--omen-bottom:#1b3147}
.omen-atmosphere{position:absolute;inset:0;pointer-events:none;z-index:1}.omen-atmosphere i{position:absolute;left:var(--x);top:var(--y);width:7px;height:7px;border-radius:50%;background:var(--mote);box-shadow:0 0 19px 8px var(--mote);animation:omenDrift 4s ease-in-out infinite alternate;animation-delay:var(--delay)}
.omen-atmosphere i:nth-child(1){--x:13%;--y:22%;--delay:-.1s}.omen-atmosphere i:nth-child(2){--x:74%;--y:20%;--delay:-1s}.omen-atmosphere i:nth-child(3){--x:25%;--y:57%;--delay:-2s}.omen-atmosphere i:nth-child(4){--x:83%;--y:51%;--delay:-2.8s}.omen-atmosphere i:nth-child(5){--x:43%;--y:15%;--delay:-1.7s}.omen-atmosphere i:nth-child(6){--x:60%;--y:68%;--delay:-3.2s}
.omen-radiant{--mote:#fff6b3}.omen-bright{--mote:#f8e8ac}.omen-still{--mote:#d0e2be}.omen-mist{--mote:#acc1d0}
.omen-radiant .omen-atmosphere i{width:10px;height:10px;box-shadow:0 0 30px 13px #fff4a0}
.omen-mist .omen-atmosphere i{opacity:.35;animation-duration:7s}
.omen-copy{position:absolute;z-index:3;left:23px;right:23px;top:98px;text-align:center}.omen-copy h1{margin:8px 0 10px}.omen-copy p{font-size:15px}
.omen-seal{position:absolute;z-index:4;top:45%;left:50%;width:160px;height:160px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:6px double #ffe7ac;border-radius:50%;background:radial-gradient(circle,#fff6c6,#ce9d55 62%,#73573b);box-shadow:0 0 0 11px #fff3b444,0 0 40px 20px var(--omen-glow),0 15px 25px #092e42a8;color:#55402b!important;text-shadow:0 1px #fff0b0;animation:sealPulse 3s ease-in-out infinite}
.omen-seal .omen-icon{font-size:25px}.omen-seal strong{font-size:44px;line-height:1.1}.omen-seal small{position:absolute;top:calc(100% + 23px);left:50%;transform:translateX(-50%);width:250px;color:#fff8d5;text-shadow:0 2px 7px #092d39;font-size:13px;font-weight:900}
.omen-mist .omen-seal{filter:saturate(.55);box-shadow:0 0 0 11px #b8ccd322,0 0 25px 8px #aabdc18a,0 15px 25px #092e42a8}
.omen-disclaimer{position:absolute;z-index:3;left:20px;right:20px;bottom:max(26px,env(safe-area-inset-bottom));text-align:center;font-size:11px!important;color:#e2e9e3}
.omen-scene.turning .omen-seal{animation:sealOpen .85s ease-in both}

/* Page artwork becomes a path before any category is spoken. */
.path-scene{background:#12556b}
.path-art{position:absolute;inset:0;z-index:-3;background:none center 100%/auto 300% no-repeat;animation:pathBreath 8s ease-in-out infinite alternate}
.path-scene:before{background:linear-gradient(#0b5867a6,transparent 30%,#0c5e6a88 55%,#063c55f2)}
.path-light{position:absolute;left:50%;top:29%;width:220px;height:270px;transform:translateX(-50%);border-radius:50%;background:radial-gradient(circle,#fff7b99c,transparent 65%);animation:followLight 4s ease-in-out infinite alternate}
.path-scene.leaf-route .path-light{background:radial-gradient(circle,#d6ffb9a6,transparent 65%)}
.path-copy{position:absolute;z-index:3;left:22px;right:22px;bottom:max(33px,env(safe-area-inset-bottom));text-align:left}
.path-copy h1{margin:9px 0}.path-copy p{font-size:15px}
.path-hotspot{position:absolute;z-index:5;top:31%;left:21%;width:58%;height:29%;border:0;border-radius:50%;background:radial-gradient(circle,#fff7b679,#fff7b50a 69%,transparent);display:flex;flex-direction:column;justify-content:center;align-items:center;gap:12px;font-weight:950;text-shadow:0 3px 6px #093c47}
.path-hotspot .path-orb{font-size:84px;color:#fff2a6;text-shadow:0 0 27px white;animation:orbApproach 3s ease-in-out infinite}
.path-hotspot span:last-child{font-size:13px;background:#0b596dbb;border:2px solid #fff4b5;border-radius:18px;padding:5px 10px}
.path-scene.enter-path .path-art{animation:pathEnter 1s ease-in both}.path-scene.enter-path .path-light{animation:pathFlash 1s both}

/* The recommended game is performed before its name is exposed. */
.story-game{background:#14576b}.game-stage,.game-color,.contrast-stage,.contrast-mist{position:absolute;inset:0}.game-stage,.contrast-stage{z-index:-3;overflow:hidden}.game-color{z-index:-2;background:linear-gradient(#0d526277,transparent 25%,#0b536755 50%,#063b53ec 86%)}
.game-prelude,.game-reveal{position:absolute;z-index:3;left:22px;right:22px;bottom:max(30px,env(safe-area-inset-bottom))}
.game-prelude h1,.game-reveal h1{margin:8px 0}.game-reveal h1 em{color:#ffe485;font-style:normal}.game-prelude p,.game-reveal p{font-size:15px}
.game-reveal{opacity:0;visibility:hidden;transform:translateY(25px);transition:opacity .7s,transform .7s,visibility .7s}
.story-game.revealed .game-reveal{opacity:1;visibility:visible;transform:none}.story-game.revealed .game-prelude{display:none}
.prop-hotspot{position:absolute;z-index:5;left:13%;right:13%;top:22%;height:36%;border:0;background:radial-gradient(circle,#fff8b24d,transparent 58%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;text-shadow:0 2px 6px #0b4354}
.prop-hotspot .prop-ring{display:grid;place-items:center;width:120px;height:120px;border:4px dashed #fff2b3;border-radius:50%;color:#fff8cc;font-size:60px;box-shadow:0 0 18px #ffe7a0;animation:propCall 3s ease-in-out infinite}
.prop-hotspot span:last-child{padding:6px 12px;border:2px solid #fff0b2;border-radius:18px;background:#0b5265d9;font-size:14px;font-weight:950}
.story-game.playing .prop-hotspot,.story-game.revealed .prop-hotspot{opacity:0;pointer-events:none}.story-game.playing .game-prelude{opacity:0}
.story-next{display:block;width:100%;min-height:49px;margin-top:20px;padding:10px;border:2px solid #fff2bf;border-radius:12px;background:#fff1b8eb;color:#204759!important;font-size:15px;font-weight:950;text-shadow:none;box-shadow:0 5px 0 #17445a}
.story-game.playing .game-color{animation:sceneFlash 1.8s both}

.contrast-scene{background:#164353}
.contrast-stage{filter:saturate(.72) brightness(.78);animation:sideTrail 2s ease-out both}
.contrast-mist{z-index:-2;background:linear-gradient(#12384a80,transparent 24%,#16495994 50%,#123448f1 86%)}
.contrast-copy{position:absolute;left:22px;right:22px;bottom:max(28px,env(safe-area-inset-bottom));z-index:3}
.contrast-copy h1{margin:9px 0}.contrast-copy p{font-size:15px}

.farewell-scene{background:#0e4a57}
.farewell-door{position:absolute;inset:0;z-index:-3;background:url("assets/zoo-observatory-open-v5.webp") center/cover;animation:forestExit 5s ease-out both}
.farewell-scene:before{background:linear-gradient(#092f42af,transparent 40%,#083448d4)}
.farewell-book{position:absolute;left:42%;top:39%;width:70px;height:100px;border:6px solid #a07437;border-radius:9px;background:#f6d88f;color:#a6763d;text-align:center;line-height:85px;font-size:35px;box-shadow:0 12px 25px #092b3e9d;animation:bookDepart 2.7s var(--ease) both}
.farewell-copy{position:absolute;z-index:4;left:22px;right:22px;top:97px}.farewell-copy h1{margin:9px 0}.farewell-copy p{font-size:14px}
.exit-door-hotspot{position:absolute;z-index:5;left:23%;right:23%;top:44%;height:30%;border:3px solid #ffe6a5;border-radius:47% 47% 6% 6%;background:radial-gradient(circle,#ffe7a244,#ffe7a208 72%);box-shadow:0 0 24px #ffe49f}
.exit-door-hotspot span{position:absolute;left:50%;bottom:-45px;transform:translateX(-50%);width:230px;padding:6px 10px;border:2px solid #fff0bd;border-radius:20px;background:#0b5669d9;font-size:13px;font-weight:950}
.farewell-scene.leaving .farewell-door{animation:intoDoor 1s ease-in both;transform-origin:50% 53%}.farewell-scene.leaving:after{content:"";position:absolute;inset:0;background:#fff6c7;animation:doorLight 1s both}
.card-omen{display:inline-block;margin-top:12px;padding:5px 13px;border:2px solid #cda65f;border-radius:20px;background:#ffedb8;color:#805a2d;font-size:14px;font-weight:950}
.card-omen.omen-mist{background:#d9e5e9;border-color:#98b3be;color:#3a6170}

@keyframes summonsCamera{to{transform:scale(1.08) translateY(-2%)}}
@keyframes bookHalo{to{opacity:.45;transform:scale(1.25)}}
@keyframes bookHover{50%{transform:translateY(-9px)}}
@keyframes hintBreath{50%{box-shadow:0 0 19px #ffe48f;transform:translateX(-50%) scale(1.04)}}
@keyframes rapidPage{0%{opacity:0;transform:rotateY(0)}15%{opacity:1}70%{opacity:1}100%{opacity:0;transform:rotateY(-178deg)}}
@keyframes bookShudder{0%,100%{transform:none}20%{transform:rotate(-2deg) scale(1.03)}40%{transform:rotate(2deg) scale(1.06)}65%{transform:rotate(-2deg) scale(1.09)}85%{transform:rotate(1deg) scale(1.12)}}
@keyframes bookBurst{to{transform:scale(2);opacity:0}}
@keyframes roomDepth{to{transform:scale(1.08) translateY(-2%)}}
@keyframes messengerFly{0%,100%{transform:translateY(4px) rotate(-3deg)}50%{transform:translateY(-20px) rotate(4deg)}}
@keyframes moteDrift{to{transform:translate(20px,-24px);opacity:.25}}
@keyframes omenDrift{to{transform:translate(23px,-27px);opacity:.25}}
@keyframes sealPulse{50%{transform:translateX(-50%) scale(1.07)}}
@keyframes sealOpen{to{transform:translateX(-50%) rotateY(160deg) scale(.2);opacity:0}}
@keyframes pathBreath{to{transform:scale(1.1) translateY(-2%)}}
@keyframes followLight{to{transform:translate(-50%,-25px) scale(1.25);opacity:.42}}
@keyframes orbApproach{50%{transform:scale(1.16);filter:brightness(1.5)}}
@keyframes pathEnter{to{transform:scale(1.75) translateY(8%)}}
@keyframes pathFlash{to{transform:translateX(-50%) scale(3);opacity:0}}
@keyframes propCall{50%{transform:scale(1.08) rotate(10deg);box-shadow:0 0 34px #ffe7a0}}
@keyframes sceneFlash{0%,100%{opacity:1}50%{opacity:.4}}
@media(max-height:730px){.summons-copy,.messenger-copy,.omen-copy,.farewell-copy{top:78px}.summons-copy h1,.messenger-copy h1,.omen-copy h1,.farewell-copy h1{font-size:26px}.summons-copy p,.messenger-copy p,.omen-copy p{font-size:12px}.living-book-trigger{top:39%;height:48%}.messenger-hotspot{top:32%}.omen-seal{top:43%;width:130px;height:130px}.omen-seal strong{font-size:35px}.path-copy p,.contrast-copy p,.game-prelude p,.game-reveal p{font-size:13px}}
html.forest-rm .story-game.playing .game-stage,html.forest-rm .farewell-scene.leaving .farewell-door,html.forest-rm .summons.flipping .flip-pages i{animation-duration:.01ms!important}html.forest-rm .summons.flipping .flip-pages i{opacity:0!important}

/* V8: make the illustration itself turn, instead of floating loose rectangles above it. */
.summons .living-book-trigger{top:38%;height:52%;perspective:1000px;overflow:visible}
.summons .living-book-trigger img{animation:none;transform-origin:50% 65%;filter:drop-shadow(0 13px 12px #173b37a0)}
.summons .book-tap-hint{bottom:-1%;border:0;background:#0b5268ea;box-shadow:0 3px 12px #092c38b5}
.summons .page-turn{position:absolute;left:51%;top:16%;width:37%;height:44%;pointer-events:none;perspective:850px;transform:rotate(-7deg) skewY(-5deg)}
.summons .page-turn i{position:absolute;inset:0;background:linear-gradient(95deg,#b58a52 0%,#fff1c5 5%,#fffaf0 30%,#f5e2ad 85%,#c69a5d 100%);border-radius:3% 35% 19% 3%;clip-path:polygon(0 10%,88% 0,100% 9%,99% 89%,15% 100%,0 91%);box-shadow:8px 7px 20px #4d331b77;opacity:0;transform-origin:0 61%;backface-visibility:hidden}
.summons .page-turn i:after{content:"";position:absolute;inset:18% 14% 20%;background:radial-gradient(circle at 64% 37%,#bd9b5d 0 2px,transparent 3px),linear-gradient(125deg,transparent 38%,#b99f749c 40%,transparent 42%);opacity:.45}
.summons.flipping .page-turn i{animation:bookLeafTurn .53s cubic-bezier(.54,.07,.18,.96) both}
.summons.flipping .page-turn i:nth-child(2){animation-delay:.35s}.summons.flipping .page-turn i:nth-child(3){animation-delay:.7s}
.summons.flipping .living-book-trigger img{animation:realBookMove 1.72s ease-in-out both}
.summons.flipping .summons-room{animation:bookCameraPush 1.8s ease-in both}
.summons.flipping .summons-light{animation:bookBurst 1.8s both}
.summons.flipping:after{content:"";position:absolute;inset:0;background:#fff2bc;pointer-events:none;animation:bookSceneWipe 1.8s both}
.summons.flipping .book-tap-hint,.summons.flipping .scene-footnote{opacity:0}
@keyframes bookLeafTurn{0%{opacity:0;transform:rotateY(2deg) scaleX(1)}8%{opacity:1}52%{opacity:1;transform:rotateY(-88deg) scaleX(.94)}90%{opacity:1}100%{opacity:0;transform:rotateY(-176deg) scaleX(.9)}}
@keyframes realBookMove{0%{transform:scale(1)}45%{transform:scale(1.14) translateY(-1%)}100%{transform:scale(1.55) translateY(8%);filter:brightness(1.4)}}
@keyframes bookCameraPush{to{transform:scale(1.23) translateY(6%)}}
@keyframes bookSceneWipe{0%,58%{opacity:0}100%{opacity:.95}}

/* The omen is a short atmospheric reveal, never another gate. */
.omen-scene{animation:omenArrival 3.5s ease-out both}
.omen-scene .omen-copy{animation:omenWords 3.5s ease-out both}
.omen-scene .omen-seal{pointer-events:none;animation:omenMark 3.5s ease-in-out both}
.omen-scene .omen-room{background-image:url("assets/zoo-sage-opening.webp");background-size:cover;background-position:center 20%;opacity:.72;animation:omenRoom 3.5s ease-in-out both}
.omen-scene.gold-route:before{background:radial-gradient(circle at 52% 49%,#f3d4739c,transparent 40%),linear-gradient(#304e5caa,#204c54ac 55%,#153d50ef)}
.omen-scene.leaf-route:before{background:radial-gradient(circle at 52% 49%,#b1ebb591,transparent 40%),linear-gradient(#235466a8,#22605ca1 55%,#134657ef)}
.omen-scene.omen-mist:before{filter:saturate(.6) brightness(.66)}
.omen-scene.omen-radiant:before{filter:brightness(1.22) saturate(1.22)}
.omen-disclaimer{z-index:5}
@keyframes omenArrival{0%{filter:blur(12px)}20%{filter:blur(0)}100%{filter:none}}
@keyframes omenWords{0%,17%{opacity:0;transform:translateY(25px)}35%,83%{opacity:1;transform:none}100%{opacity:.12;transform:translateY(-15px)}}
@keyframes omenMark{0%,30%{opacity:0;transform:translateX(-50%) scale(.45) rotate(-40deg)}52%,80%{opacity:1;transform:translateX(-50%) scale(1) rotate(0)}100%{opacity:0;transform:translateX(-50%) scale(1.6) rotate(8deg)}}
@keyframes omenRoom{0%{transform:scale(1.22)}80%{transform:scale(1)}100%{transform:scale(1.16)}}

/* One continuous vertical roll. No three strips or repeated screen-cutting lines. */
.story-game .prop-hotspot{top:19%;height:41%;background:none;justify-content:flex-end;padding-bottom:3%;filter:none}
.story-game .prop-focus{position:absolute;top:7%;left:29%;width:42%;height:57%;border:2px solid #ffe8a895;border-radius:50%;background:radial-gradient(circle,#ffe4a52e,transparent 70%);box-shadow:0 0 30px #ffe7a079, inset 0 0 20px #ffe7a045;animation:propCall 2.8s ease-in-out infinite}
.story-game .prop-hotspot span:last-child{z-index:1;background:#0c4b60e8;box-shadow:0 4px 12px #082e3b9e}
.story-game[data-game=slot] .prop-hotspot{left:28%;right:13%;top:7%;height:47%}
.story-game[data-game=slot] .prop-focus{left:18%;top:0;width:63%;height:65%}
.story-game[data-game=roulette] .prop-hotspot{top:22%;height:41%}
html.forest-rm .summons.flipping .page-turn i,html.forest-rm .summons.flipping .living-book-trigger img,html.forest-rm .omen-scene,html.forest-rm .omen-scene .omen-copy,html.forest-rm .omen-scene .omen-seal{animation-duration:.01ms!important}

/* ── from zoo-v9.css ── */
/* The writing is part of the illustrated book; there is no page-flip overlay. */
.summons{overflow:hidden}
.summons-copy{top:92px}
.summons-copy h1{font-size:clamp(29px,7.7vw,39px)}
.summons-copy p{max-width:390px;margin:auto}
.book-writing-stage{position:absolute;z-index:5;left:1%;right:1%;top:37%;height:51%;min-height:270px;isolation:isolate}
.book-writing-stage>img{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 18px 16px #062d3bac)}
.book-hold-zone{position:absolute;inset:0;border:0;background:none;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.book-hold-zone span{position:absolute;left:50%;bottom:-2%;transform:translateX(-50%);width:max-content;max-width:90%;padding:8px 16px;border:1px solid #edce8a;border-radius:24px;background:#0a4455e8;box-shadow:0 6px 14px #062d3b9c;color:#fff1c3;font-size:13px;font-weight:850;letter-spacing:1px;white-space:nowrap;animation:writeHintPulse 2.6s ease-in-out infinite}
.book-writing-stage textarea{position:absolute;z-index:5;left:54%;top:20%;width:32%;height:38%;padding:4px 2px;border:0;border-radius:0;outline:0;resize:none;overflow-y:auto;background:transparent;color:#5b452c;font:700 clamp(12px,3.5vw,16px)/1.55 "Noto Serif TC","Noto Serif SC","Songti TC","Songti SC","PMingLiU",serif;text-align:left;letter-spacing:1px;transform:rotate(-7deg) skewY(-2deg);caret-color:#a97031;text-shadow:0 1px 0 #fff9e3;box-shadow:none;scrollbar-width:thin}
.book-writing-stage textarea::placeholder{color:#a79578a8;font-size:13px}
.book-writing-stage textarea:focus-visible{outline:none}
.book-commit{position:absolute;z-index:6;left:19%;right:19%;bottom:-3%;min-height:47px;padding:8px 11px;border:2px solid #f4d88f;border-radius:25px;background:linear-gradient(120deg,#124a55,#166876);box-shadow:0 5px 18px #082f3f9e;color:#fff2c7!important;font-size:14px;font-weight:900;letter-spacing:1px}
.book-commit:disabled{opacity:.58;filter:grayscale(.5);cursor:default}
.book-writing-stage .ink-radiance{position:absolute;z-index:4;left:48%;top:13%;width:46%;height:54%;border-radius:50%;background:radial-gradient(circle,#fff7c8 0%,#ffe084bd 22%,#f8d06b66 48%,transparent 72%);opacity:0;pointer-events:none;mix-blend-mode:screen}
.summons.writing .summons-light{opacity:.6;animation:bookHalo 3s ease-in-out infinite alternate}
.summons.illuminating .book-writing-stage textarea{animation:inkLettersGlow 2.2s ease-in-out both;pointer-events:none}
.summons.illuminating .ink-radiance{animation:writtenLight 2.2s ease-in-out both}
.summons.illuminating .book-writing-stage>img{animation:writtenBookLift 2.2s ease-in-out both}
.summons.illuminating .summons-room{animation:writingCamera 2.2s ease-in both}
.summons.illuminating:after{content:"";position:absolute;z-index:8;inset:0;background:#fff7d5;pointer-events:none;animation:writtenWipe 2.2s both}
.summons.illuminating .scene-footnote{opacity:0}
@keyframes writeHintPulse{50%{box-shadow:0 5px 23px #ffe5a0a1;transform:translateX(-50%) scale(1.035)}}
@keyframes inkLettersGlow{0%{color:#5b452c;text-shadow:0 1px 0 #fff9e3}30%{color:#ad771e;text-shadow:0 0 5px #ffe283}62%{color:#fff7ce;text-shadow:0 0 7px #fff,0 0 20px #ffd95a,0 0 37px #ffc341}100%{color:#fff;text-shadow:0 0 15px #fff,0 0 40px #ffdf69}}
@keyframes writtenLight{0%,12%{opacity:0;transform:scale(.4)}57%{opacity:.88;transform:scale(1.3)}100%{opacity:1;transform:scale(2.8)}}
@keyframes writtenBookLift{0%,40%{transform:none}100%{transform:scale(1.18) translateY(7%);filter:brightness(1.55)}}
@keyframes writingCamera{to{transform:scale(1.08) translateY(2%)}}
@keyframes writtenWipe{0%,68%{opacity:0}100%{opacity:.96}}

/* The omen is a full forest vista. Grades are conveyed by weather and light. */
.omen-scene{background:#102d33;animation:none!important}
.omen-scene:before{display:none}
.omen-landscape,.omen-weather,.omen-rays,.omen-forest-motes{position:absolute;inset:0;pointer-events:none}
.omen-landscape{z-index:-3;background:url("assets/zoo-omen-forest-v9.webp") center 49%/cover no-repeat;animation:forestVista 4.4s ease-out both}
.omen-weather{z-index:-2;background:linear-gradient(180deg,#09292f8f 0%,#092d3475 23%,#0b323a54 44%,#09292d9c 70%,#071d27f5 100%)}
.omen-rays{z-index:-1;opacity:.8;background:radial-gradient(ellipse at 53% 54%,#ffeca674,transparent 40%),linear-gradient(115deg,transparent 30%,#fff3ba13 45%,transparent 57%);mix-blend-mode:screen;animation:forestRays 4.4s ease-in-out both}
.omen-forest-motes{z-index:2;overflow:hidden}.omen-forest-motes i{position:absolute;left:var(--x);top:var(--y);width:6px;height:6px;border-radius:50%;background:#ffe8a9;box-shadow:0 0 17px 6px #ffdf84a0;animation:forestMote 4s ease-in-out infinite alternate;animation-delay:var(--delay)}
.omen-forest-motes i:nth-child(1){--x:16%;--y:30%;--delay:-.1s}.omen-forest-motes i:nth-child(2){--x:76%;--y:24%;--delay:-1.3s}.omen-forest-motes i:nth-child(3){--x:28%;--y:60%;--delay:-2s}.omen-forest-motes i:nth-child(4){--x:79%;--y:67%;--delay:-.7s}.omen-forest-motes i:nth-child(5){--x:51%;--y:43%;--delay:-1.8s}
.omen-story{position:absolute;z-index:4;inset:0;display:flex;flex-direction:column;align-items:center;padding:clamp(94px,12vh,122px) 26px 79px;text-align:center;color:#fffaf0}
.omen-story .eyebrow{color:#ffe2a1;font-size:12px;letter-spacing:2.4px;text-shadow:0 2px 8px #102c30}
.omen-written{max-width:350px;margin-top:15px!important;color:#f4ead4;font:600 15px/1.6 "Noto Serif TC","Noto Serif SC","Songti TC","Songti SC",serif!important;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-shadow:0 2px 8px #092c35!important;animation:forestQuestion 4.4s ease-out both}
.omen-rule{width:75px;height:1px;margin:20px auto 0;background:linear-gradient(90deg,transparent,#ffe2a1,transparent);box-shadow:0 0 14px #ffe2a1}
.omen-kicker{margin-top:auto;color:#f5d99b;font-size:13px;font-weight:850;letter-spacing:3px;text-shadow:0 2px 8px #0b242d;animation:omenWordsV9 4.4s both}
.omen-title{margin:8px 0 2px!important;color:#fff4c8;font-family:"Noto Serif TC","Noto Serif SC","Songti TC","Songti SC","PMingLiU",serif;font-size:clamp(76px,20vw,111px)!important;font-weight:800;letter-spacing:8px;line-height:1.05!important;text-shadow:0 3px 1px #8d672d,0 0 18px #ffea9f,0 0 45px #ffdb75;animation:omenTitleV9 4.4s cubic-bezier(.23,.74,.25,1) both}
.omen-reading{max-width:360px;min-height:88px;margin:10px auto 0!important;color:#fffaf0;font-size:14px!important;line-height:1.66!important;font-weight:750!important;text-shadow:0 2px 8px #061e2a,0 0 4px #061e2a!important;animation:omenWordsV9 4.4s both}
.omen-disclaimer{bottom:max(20px,env(safe-area-inset-bottom));font-size:10px!important;color:#c6d5d0}
.omen-scene.gold-route .omen-rays{filter:saturate(1.3)}
.omen-scene.leaf-route .omen-rays{background:radial-gradient(ellipse at 53% 54%,#c9efb670,transparent 40%),linear-gradient(115deg,transparent 30%,#d7ffbe1c 45%,transparent 57%)}
.omen-radiant .omen-landscape{filter:saturate(1.2) brightness(1.18)}
.omen-radiant .omen-rays{opacity:1.35}
.omen-radiant .omen-forest-motes i{box-shadow:0 0 23px 10px #ffedaaa8}
.omen-bright .omen-landscape{filter:saturate(1.08) brightness(1.03)}
.omen-still .omen-landscape{filter:saturate(.78) brightness(.75)}
.omen-still .omen-rays{opacity:.38}
.omen-mist .omen-landscape{filter:saturate(.43) brightness(.49) hue-rotate(12deg)}
.omen-mist .omen-weather{background:linear-gradient(180deg,#0a1b28b2,#243b47b8 44%,#0a1e2aed 100%)}
.omen-mist .omen-rays{opacity:.11}
.omen-mist .omen-forest-motes i{background:#becfcd;box-shadow:0 0 15px 8px #a9c5cc70;animation-duration:7s;opacity:.65}
.omen-mist .omen-title{color:#e6eef0;text-shadow:0 3px 1px #344956,0 0 20px #b0d0d4}
.omen-mist .omen-story .eyebrow,.omen-mist .omen-kicker{color:#d0e0df}
@keyframes forestVista{0%{transform:scale(1.18);filter:blur(8px)}40%{filter:blur(0)}100%{transform:scale(1.04)}}
@keyframes forestRays{0%,18%{opacity:0;transform:scale(.7)}62%{opacity:1;transform:scale(1.1)}100%{opacity:.75;transform:scale(1.2)}}
@keyframes forestMote{to{transform:translate(18px,-30px);opacity:.25}}
@keyframes forestQuestion{0%,12%{opacity:0;transform:translateY(14px)}30%,100%{opacity:1;transform:none}}
@keyframes omenTitleV9{0%,27%{opacity:0;filter:blur(15px);transform:translateY(30px) scale(.88)}50%,100%{opacity:1;filter:none;transform:none}}
@keyframes omenWordsV9{0%,43%{opacity:0;transform:translateY(15px)}66%,100%{opacity:1;transform:none}}
@media(max-height:730px){.summons-copy{top:80px}.book-writing-stage{top:38%;height:49%}.book-writing-stage textarea{top:21%;height:37%}.omen-story{padding-top:83px;padding-bottom:63px}.omen-title{font-size:76px!important}.omen-reading{font-size:12px!important;min-height:64px}.omen-disclaimer{bottom:12px}}
html.forest-rm .summons.illuminating .book-writing-stage textarea,html.forest-rm .summons.illuminating .ink-radiance,html.forest-rm .summons.illuminating .book-writing-stage>img,html.forest-rm .summons.illuminating .summons-room,html.forest-rm .summons.illuminating:after,html.forest-rm .omen-landscape,html.forest-rm .omen-rays,html.forest-rm .omen-forest-motes i,html.forest-rm .omen-written,html.forest-rm .omen-title,html.forest-rm .omen-kicker,html.forest-rm .omen-reading{animation-duration:.01ms!important}

/* ── from zoo-v10.css ── */
/* Finger-drawn ink stays under the fingertip until release. */
.book-ink-canvas{position:absolute;z-index:6;inset:0;display:block;width:100%;height:100%;touch-action:none;cursor:crosshair;user-select:none;-webkit-user-select:none}
.book-draw-hint{position:absolute;z-index:7;left:50%;bottom:10%;transform:translateX(-50%);width:max-content;max-width:88%;padding:9px 16px;border:1px solid #f4d697;border-radius:22px;background:#0b5266dc;box-shadow:0 5px 17px #062b3da8;color:#fff0c0;font-size:13px;font-weight:900;text-align:center;letter-spacing:.7px;pointer-events:none;animation:writeHintPulse 2.5s ease-in-out infinite}
.summons.drawing .book-draw-hint{background:#225e5cda;color:#fff8d9;animation:none}
.summons.illuminating .book-draw-hint{opacity:0}
.summons.illuminating .book-ink-canvas{animation:inkTrailBloom 2.1s ease-in-out both}
.summons.illuminating .book-writing-stage .ink-radiance{animation:writtenLight 2.1s ease-in-out both}
.summons.illuminating .book-writing-stage>img{animation:writtenBookLift 2.1s ease-in-out both}
.summons.illuminating .summons-room{animation:writingCamera 2.1s ease-in both}
.summons.illuminating:after{animation:writtenWipe 2.1s both}
.omen-ink-mark{position:absolute;z-index:3;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none;mix-blend-mode:screen;animation:inkIntoForest 3.2s ease-in-out both}
@keyframes inkTrailBloom{0%{filter:drop-shadow(0 0 0 #ffdf8e);opacity:1}48%{filter:brightness(1.45) drop-shadow(0 0 13px #ffdf8e) drop-shadow(0 0 29px #ffe684);opacity:1}100%{filter:brightness(2) drop-shadow(0 0 37px #fff4b8);opacity:.05}}
@keyframes inkIntoForest{0%{opacity:.85;filter:brightness(1.5)}65%{opacity:.45;filter:blur(7px) brightness(1.7)}100%{opacity:0;filter:blur(25px)}}

/* 老虎機：場景底色與文字卡；機台上的三個轉軸與拉桿由 forest-slot.js＋forest-slot.css 繪製（spec 2026-09-27-forest-slot-boost）。 */
.story-game[data-game=slot]{background:#123e3c}
.story-game[data-game=slot] .game-color{background:linear-gradient(#0b373d59,transparent 28%,#123d3852 60%,#082c38e8 85%)}
.story-game[data-game=slot] .game-prelude h1{font-size:clamp(28px,7.5vw,38px)}
.story-game[data-game=slot] .game-prelude p{font-size:14px;line-height:1.55}
@media(max-height:730px){.book-draw-hint{bottom:9%;font-size:12px}}
html.forest-rm .summons.illuminating .book-ink-canvas,html.forest-rm .omen-ink-mark{animation-duration:.01ms!important}

/* ── from zoo-v11.css ── */
/* 輪盤（Roulette）：場景圖只畫碗緣與素面球道，中央平塗圓由 forest-roulette.js 的 37 格 SVG 轉子蓋住；白色小球在另一層。
 * .roulette-spin 跟著轉子轉，小球層在它裡面（世界角＝轉子角＋本地角）。位置由 ForestRoulette.sync() 依來源圖量測值給 --roulette-*。 */
.story-game[data-game=roulette]{background:#174a54}
.story-game[data-game=roulette] .game-color{background:linear-gradient(#0b415043,transparent 25%,#0b455020 51%,#082f3fdc 78%,#072a39f5)}
.story-game .roulette-picture,.contrast-scene .roulette-picture,.card-hero .roulette-picture{background-image:url("assets/zoo-roulette-scene-v12.webp")!important;background-size:cover!important;background-position:center top!important;background-color:#143e4b}
.roulette-spin{position:absolute;z-index:2;left:var(--roulette-x,50%);top:var(--roulette-y,34%);width:var(--roulette-size,min(50vw,25vh));aspect-ratio:1;transform:translate(-50%,-50%) rotate(var(--spin,0deg));pointer-events:none}
.roulette-rotor{position:absolute;inset:0;display:block;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 3px 5px #0d2a2a73)}
.roulette-ball-layer{position:absolute;left:50%;top:50%;display:block;width:var(--roulette-track,108%);height:auto;aspect-ratio:1;overflow:visible;transform:translate(-50%,-50%) rotate(225deg);opacity:0;transition:opacity .15s ease}
.story-game.playing .roulette-ball-layer{opacity:1}
.roulette-touch{position:absolute;z-index:6;left:var(--roulette-x,50%);top:var(--roulette-y,34%);width:var(--roulette-size,min(50vw,25vh));aspect-ratio:1;padding:0;border:0;border-radius:50%;background:transparent;transform:translate(-50%,-50%);touch-action:manipulation;cursor:pointer}
.roulette-touch:focus-visible{outline:3px solid #fff0ab;outline-offset:8px}
.roulette-touch-hint{position:absolute;left:50%;bottom:-43px;width:max-content;padding:8px 15px;border:1px solid #ffe1a1;border-radius:18px;background:#0b4a57e8;box-shadow:0 5px 13px #052d3999;color:#fff4c9;font-size:13px;font-weight:900;letter-spacing:.7px;transform:translateX(-50%);pointer-events:none}
.story-game[data-game=roulette].playing .game-stage{animation:none!important}
.story-game[data-game=roulette].playing .roulette-touch,.story-game[data-game=roulette].revealed .roulette-touch{opacity:0;pointer-events:none}
.story-game[data-game=roulette].playing .game-color{animation:rouletteLight 3.2s ease-out both}
.story-game[data-game=roulette] .game-prelude h1{font-size:clamp(27px,7.4vw,37px)}
.story-game[data-game=roulette] .game-prelude p{font-size:14px;line-height:1.55}
.roulette-result{position:absolute;z-index:5;left:var(--roulette-x,50%);top:calc(var(--roulette-y,34%) + var(--roulette-track,54vw) * .5 + 12px);display:flex;align-items:center;gap:9px;width:max-content;max-width:calc(100% - 32px);margin:0;padding:8px 17px;border:1px solid #ffe1a1;border-radius:18px;background:#0b4a57f0;box-shadow:0 5px 13px #052d3999;color:#fff4c9;font-size:15px;font-weight:900;letter-spacing:.5px;opacity:0;transform:translate(-50%,8px);transition:opacity .35s ease,transform .35s ease;pointer-events:none}
.story-game.landed .roulette-result{opacity:1;transform:translate(-50%,0)}
.roulette-dot{flex:none;width:14px;height:14px;border:2px solid #fff4c9;border-radius:50%}
.roulette-dot.dot-red{background:#C62828}.roulette-dot.dot-black{background:#1B1B1B}.roulette-dot.dot-green{background:#1E8C4E}
.card-hero .roulette-picture{background-size:100% auto!important;background-position:center 25%!important}
.card-hero .roulette-spin{top:var(--roulette-y,44%);width:var(--roulette-size,48%)}
.contrast-scene .roulette-spin{opacity:.85}
@keyframes rouletteLight{0%,100%{opacity:1}36%{opacity:.45}68%{opacity:.72}}
html.forest-rm .story-game[data-game=roulette].playing .game-color{animation-duration:.01ms!important}
/* 骰寶（Sic Bo）：場景圖只畫阿勇與骰寶桌，桌面中央平塗橢圓由 forest-sicbo.js 的骰碟＋骰盅＋三顆點數骰蓋住。
 * 位置由 ForestSicbo.sync() 依來源圖量測值給 --sicbo-*（錨點＝viewBox 500,1000＝rig 高度的 76.92%）。 */
.story-game[data-game=sic_bo]{background:#3a1a1e}
.story-game[data-game=sic_bo] .game-color{background:linear-gradient(#2a0d1040,transparent 25%,#2a0d1018 52%,#240a0ed8 78%,#1c0709f5)}
.story-game .sicbo-picture,.contrast-scene .sicbo-picture{background-image:url("assets/zoo-sicbo-scene-v1.webp")!important;background-size:cover!important;background-position:center top!important;background-color:#3a1a1e}
.sicbo-picture:before{display:none}
.sicbo-rig,.sicbo-touch{position:absolute;left:calc(var(--sicbo-x,50%) - var(--sicbo-w,60vw)/2);top:calc(var(--sicbo-y,45%) - var(--sicbo-w,60vw));width:var(--sicbo-w,60vw);height:calc(var(--sicbo-w,60vw)*1.3)}
.sicbo-rig{z-index:2;pointer-events:none}
.sicbo-shadow,.sicbo-shake,.sicbo-base,.sicbo-lid{position:absolute;inset:0;width:100%;height:100%;display:block;overflow:visible}
.sicbo-shake{transform-origin:50% 76.92%}.sicbo-lid{transform-origin:50% 60%;filter:drop-shadow(0 4px 6px #1a060880)}
.sicbo-touch{z-index:6;padding:0;border:0;background:transparent;touch-action:manipulation;cursor:pointer}
.sicbo-touch:focus-visible{outline:3px solid #fff0ab;outline-offset:6px;border-radius:24px}
.sicbo-touch-hint,.sicbo-result{position:absolute;display:flex;align-items:center;gap:8px;width:max-content;max-width:calc(100vw - 32px);margin:0;padding:8px 15px;border:1px solid #ffe1a1;border-radius:18px;background:#5a1a22ec;box-shadow:0 5px 13px #1c070999;color:#fff4c9;font-size:13px;font-weight:900;letter-spacing:.5px;pointer-events:none}
.sicbo-touch-hint{left:50%;top:calc(100% - var(--sicbo-w,60vw)*.3 + var(--sicbo-ry,20vw) + 14px);transform:translateX(-50%)}
.sicbo-result{z-index:5;left:var(--sicbo-x,50%);top:calc(var(--sicbo-y,45%) + var(--sicbo-ry,20vw) + 14px);font-size:15px;opacity:0;transform:translate(-50%,8px);transition:opacity .35s ease,transform .35s ease}
.story-game.landed .sicbo-result{opacity:1;transform:translate(-50%,0)}
.story-game[data-game=sic_bo].playing .sicbo-touch{opacity:0;pointer-events:none}
.story-game[data-game=sic_bo].playing .game-stage{animation:none!important}
.story-game[data-game=sic_bo].playing .path-shift{animation:none}
.story-game[data-game=sic_bo].shifting .path-shift{animation:pathShiftToShade 1.1s cubic-bezier(.22,.55,.2,1) both}
.contrast-scene .sicbo-rig{opacity:.85}
.sb-mini{width:1.15em;height:1.15em;flex:none}.sicbo-result .sb-mini+.sb-mini,.hero-roll .sb-mini+.sb-mini{margin-left:-4px}
.hero-roll{font-size:13px!important;font-weight:850;display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:3px}
.dice-scene-v2{display:flex;gap:7px}.dice-scene-v2 .sb-mini{width:46px;height:46px}
html.forest-rm .story-game[data-game=sic_bo].playing .game-color{animation-duration:.01ms!important}

/* ── from zoo-v12.css ── */
/* Let the game object carry the invitation; no floating breathing circle. */
.story-game .prop-hotspot{left:13%;right:13%;top:19%;height:41%;padding:0;background:none;filter:none;justify-content:flex-end;align-items:center;touch-action:manipulation}
.story-game .prop-hotspot span.prop-cue{position:relative;z-index:2;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:39px;padding:7px 17px;border:1.5px solid #ffecb8;border-radius:7px;background:linear-gradient(115deg,#0b4555ed,#0d5b6ded);box-shadow:0 5px 13px #092d3caf;color:#fff5cd;font-size:13px;font-weight:950;letter-spacing:.4px;clip-path:polygon(8px 0,calc(100% - 8px) 0,100% 8px,100% calc(100% - 8px),calc(100% - 8px) 100%,8px 100%,0 calc(100% - 8px),0 8px);transition:transform .18s ease,background .18s ease}
.story-game .prop-hotspot:hover .prop-cue,.story-game .prop-hotspot:focus-visible .prop-cue{transform:translateY(-3px);background:linear-gradient(115deg,#116272,#13798a)}
.story-game .prop-hotspot .prop-cue:before{font-size:18px;line-height:1;color:#ffe49b}
.story-game[data-game=bingo] .prop-cue:before{content:'✦'}
.story-game[data-game=fishing] .prop-cue:before{content:'≈'}
.story-game[data-game=baccarat] .prop-cue:before{content:'▣'}
.story-game .prop-hotspot .prop-focus{display:none!important}
@media(max-height:730px){.story-game .prop-hotspot{top:17%;height:44%}.story-game .prop-hotspot .prop-cue{font-size:12px}}

/* ── from zoo-v13.css ── */

/* ── from zoo-v14.css ── */
/* Keep the verdict itself at eye level while the setup stays above it. */
.omen-story{display:block;padding:0 24px}
.omen-story>.eyebrow{position:absolute;top:clamp(91px,12vh,121px);left:20px;right:20px}
.omen-written{position:absolute;top:clamp(118px,17vh,162px);left:20px;right:20px;margin:0 auto!important}
.omen-verdict{position:absolute;left:22px;right:22px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center}
.omen-verdict .omen-rule{margin:0 auto 19px}
.omen-verdict .omen-kicker{margin-top:0}
.omen-verdict .omen-reading{min-height:0;margin-top:13px!important}


@media(max-height:730px){.omen-story{padding:0}.omen-verdict{top:51%}.omen-verdict .omen-rule{margin-bottom:11px}.omen-verdict .omen-reading{font-size:12px!important;min-height:0}}

/* ── from zoo-v15.css ── */
/* The first path is already readable; touching its object turns the story toward the second path. */
.story-game .game-prelude h1 em{color:#ffe58e;font-style:normal}
.story-game .game-prelude{transition:opacity .35s ease,transform .5s ease}
.story-game.playing .game-prelude{display:block;opacity:0;transform:translateY(-18px)}
.story-game .path-shift{position:absolute;inset:0;z-index:6;pointer-events:none;opacity:0;background:radial-gradient(ellipse at 49% 45%,#d4e5dd17 0%,#17333acb 60%,#061923 100%),url("assets/zoo-omen-forest-v9.webp") center/cover no-repeat;transform:scale(1.13)}
.story-game.playing .path-shift{animation:pathShiftToShade var(--shift-duration,1.95s) cubic-bezier(.22,.55,.2,1) both}
/* 輪盤：落定標籤先停 1.2s，再由 .shifting 開始轉場（forest-app.js launchBall） */
.story-game[data-game=roulette].playing .path-shift{animation:none}
.story-game[data-game=roulette].shifting .path-shift{animation:pathShiftToShade 1.1s cubic-bezier(.22,.55,.2,1) both}

/* A cold wash, moving shadow and reduced saturation make the other road distinct. */
.contrast-scene{background:#0c202d}
.contrast-scene .contrast-stage{filter:saturate(.26) brightness(.54) hue-rotate(17deg);animation:contrastApproach 2.7s cubic-bezier(.2,.68,.2,1) both}
.contrast-scene .contrast-mist{background:linear-gradient(180deg,#102a3aa8 0%,#122f3d31 32%,#09202cbc 66%,#061b27f5 100%)}
.contrast-shadow{position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(ellipse at 53% 35%,transparent 10%,#09192356 52%,#031520d7 100%),linear-gradient(140deg,#a9d2c615 0%,transparent 33%,#2c566357 100%);animation:contrastShadow 3.2s ease-out both}
.contrast-copy{z-index:3;animation:contrastWords 1.45s ease-out both}
.contrast-copy h1{font-size:clamp(31px,8.4vw,43px);line-height:1.18;color:#f5f5e6;text-shadow:0 3px 12px #021620}
.contrast-copy p{max-width:440px;color:#e8eee9;line-height:1.68;text-shadow:0 2px 8px #021620}
.contrast-copy .eyebrow{color:#c7d7c9}
.report-coming{display:block;margin-top:19px;padding-top:11px;border-top:1px solid #bacdc08c;color:#d2dbd4;font-size:11px;font-weight:850;letter-spacing:1px}

@keyframes pathShiftToShade{0%,52%{opacity:0;transform:scale(1.13)}80%{opacity:.45;transform:scale(1.07)}100%{opacity:1;transform:scale(1)}}
@keyframes contrastApproach{from{transform:scale(1.19);opacity:.5}to{transform:scale(1);opacity:1}}
@keyframes contrastShadow{from{opacity:.2;transform:translateY(-4%)}to{opacity:1;transform:none}}
@keyframes contrastWords{0%,22%{opacity:0;transform:translateY(24px)}100%{opacity:1;transform:none}}
html.forest-rm .story-game.playing .path-shift,html.forest-rm .contrast-scene .contrast-stage,html.forest-rm .contrast-shadow,html.forest-rm .contrast-copy{animation-duration:.01ms!important}html.forest-rm .story-game .game-prelude{transition-duration:.01ms!important}

/* ── v2 新卜森：凶籤劇情反轉（twist → offer → ritual）＋夥伴出場（spec 2026-09-24-quiz-shinbokusen-v2 §4）── */
.twist-scene,.offer-scene,.ritual-scene{color:#fff;background:#0f2b33}
.helper-card,.offer-scene,.ritual-scene{--accent:#e6bf69}
[data-helper=llama]{--accent:#d9564a}
[data-helper=bear]{--accent:#3f8a55}
[data-helper=rabbit]{--accent:#6fcbb3}
.twist-art,.offer-art,.ritual-art{position:absolute;inset:0;z-index:-3;background:#16343d center/cover no-repeat}

/* B. twist：霧裡走出三個剪影，畫面輕晃、霧往兩邊散 */
.twist-art{background-image:url("assets/zoo-twist-mist.webp");background-position:center 38%;animation:twistArrive 1.6s ease-out both,twistShake .55s ease-in-out .2s both}
.twist-veil{position:absolute;inset:0;z-index:-2;background:linear-gradient(#0a222bb3 0%,transparent 27%,transparent 44%,#0a2530d9 62%,#061b25f7 100%)}
.twist-scene:before,.twist-scene:after{content:"";position:absolute;top:8%;bottom:30%;width:70%;z-index:-1;pointer-events:none;background:radial-gradient(ellipse at center,#d8e6e6e6,#a9c1c566 55%,transparent 74%);animation:mistPartL 1.9s ease-out both}
.twist-scene:before{left:-12%}
.twist-scene:after{right:-12%;animation-name:mistPartR}
.twist-copy{position:absolute;top:calc(82px + env(safe-area-inset-top,0px));left:22px;right:22px;text-shadow:0 3px 10px #04161e}
.twist-copy h1{margin:8px 0 6px;font-size:clamp(28px,7.6vw,38px);line-height:1.2}
.twist-copy p{font-size:14px;line-height:1.6;font-weight:800;max-width:430px}
.helper-cards{position:absolute;left:14px;right:14px;bottom:max(16px,env(safe-area-inset-bottom));display:grid;gap:9px}
.helper-card{display:flex;align-items:center;gap:12px;width:100%;min-height:80px;padding:8px 12px 8px 8px;border:3px solid var(--accent);border-radius:18px;background:linear-gradient(120deg,#fffbecf7,#f3e7c8f2);box-shadow:0 5px 0 #6f562e66,0 12px 22px #031820aa;color:#244c51;text-align:left;opacity:0;transform:translateY(26px);pointer-events:none;transition:transform .5s var(--ease),opacity .4s ease,box-shadow .4s ease}
.twist-scene.cards-in .helper-card{pointer-events:auto;animation:helperRise .55s var(--ease) calc(var(--i,0) * 180ms) both}
.helper-avatar{flex:none;width:64px;height:64px;border-radius:50%;object-fit:cover;object-position:50% 40%;border:3px solid #fff;box-shadow:0 0 0 3px var(--accent)}
.helper-meta{display:flex;flex-direction:column;min-width:0}
.helper-meta strong{font-size:17px;font-weight:950;line-height:1.25;color:#164b58}
.helper-meta small{font-size:11px;font-weight:900;letter-spacing:.8px;color:#a46d3b}
.helper-meta em{margin-top:2px;font-style:normal;font-size:12.5px;line-height:1.4;font-weight:750}
.helper-card:hover,.helper-card:focus-visible{box-shadow:0 5px 0 #6f562e66,0 0 0 3px #ffe070,0 12px 22px #031820aa}
.twist-scene.picked .helper-card{animation:none;opacity:.35;transform:scale(.97)}
.twist-scene.picked .helper-card.chosen{opacity:1;transform:scale(1.06);box-shadow:0 0 0 4px #ffe070,0 0 34px #ffe39b,0 12px 22px #031820aa}

/* C. offer：被選夥伴當背景（模糊）＋大頭像＋對話框 */
.offer-art{filter:blur(10px) saturate(1.05) brightness(.6);transform:scale(1.14)}
.offer-scene[data-helper=llama] .offer-art{background-image:url("assets/zoo-helper-llama.webp")}
.offer-scene[data-helper=bear] .offer-art{background-image:url("assets/zoo-helper-bear.webp")}
.offer-scene[data-helper=rabbit] .offer-art{background-image:url("assets/zoo-helper-rabbit.webp")}
.offer-veil{position:absolute;inset:0;z-index:-2;background:linear-gradient(#0a2530b3,#0a253040 34%,#061b25e0 82%)}
.offer-body{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:100dvh;padding:calc(80px + env(safe-area-inset-top,0px)) 20px max(22px,env(safe-area-inset-bottom))}
.offer-avatar{width:clamp(118px,34vw,156px);height:auto;aspect-ratio:1;border-radius:50%;object-fit:cover;object-position:50% 40%;border:5px solid #fff4d2;box-shadow:0 0 0 4px var(--accent),0 14px 30px #031820aa;animation:offerPop .7s var(--ease) both}
.offer-bubble{position:relative;width:100%;margin-top:8px;padding:14px 18px 16px;border:3px solid #e6bf69;border-radius:18px;background:#fffbecf7;box-shadow:0 7px 0 #6f562e66;color:#244c51;animation:offerWords .8s var(--ease) .15s both}
.offer-bubble:before{content:"";position:absolute;top:-14px;left:50%;margin-left:-12px;border:12px solid transparent;border-top:0;border-bottom:13px solid #e6bf69}
.offer-bubble .eyebrow{color:#a46d3b}
.offer-bubble strong{display:block;margin-top:4px;font-size:20px;font-weight:950;color:#164b58}
.offer-bubble small{display:block;font-size:12px;font-weight:850;color:#8a6a45}
.offer-bubble p{margin-top:8px;font-size:16px;line-height:1.62;font-weight:750}
.offer-retry{margin-top:8px;min-height:56px;font-size:17px}
.offer-note{font-size:12px;font-weight:850;color:#e3efe6;text-align:center;text-shadow:0 2px 6px #04161e}
.offer-accept{width:100%;min-height:50px;border:2px solid #fff3cf!important;border-radius:14px;background:#0e3c49d9;color:#fff5d6;font-size:16px;font-weight:900;transition:background .18s}
.offer-accept:hover{background:#155566e6}
.offer-change{min-height:44px;padding:0 12px;border:0;background:none;color:#cfe6dc;font-size:14px;font-weight:850;text-decoration:underline;text-underline-offset:4px}
.offer-scene.leaving .offer-body{animation:offerFade .6s ease-in both}

/* D. ritual：夥伴使出招牌道具，暖光把霧推開（點熱區才開始） */
.ritual-scene[data-helper=llama] .ritual-art{background-image:url("assets/zoo-ritual-llama.webp")}
.ritual-scene[data-helper=bear] .ritual-art{background-image:url("assets/zoo-ritual-bear.webp")}
.ritual-scene[data-helper=rabbit] .ritual-art{background-image:url("assets/zoo-ritual-rabbit.webp")}
.ritual-art{background-position:center 55%;animation:ritualArrive 1.4s ease-out both}
.ritual-veil{position:absolute;inset:0;z-index:-2;background:linear-gradient(#0a2530cc 0%,#0a253033 27%,transparent 48%,transparent 70%,#061b25d9 88%,#061b25f2 100%)}
.ritual-glow{position:absolute;left:50%;top:56%;width:130vmax;height:130vmax;z-index:-1;border-radius:50%;transform:translate(-50%,-50%) scale(.1);opacity:0;pointer-events:none;background:radial-gradient(circle,#fff6d2 0%,#ffd98acc 16%,#ffcf7a55 34%,transparent 58%)}
.ritual-scene[data-helper=bear] .ritual-glow{background:radial-gradient(circle,#fff1cf 0%,#ffb95ccc 16%,#ff9f4a55 34%,transparent 58%)}
.ritual-scene[data-helper=rabbit] .ritual-glow{background:radial-gradient(circle,#fff3f8 0%,#ffbcd7cc 16%,#a8f0dc55 34%,transparent 58%)}
.ritual-copy{position:absolute;top:calc(82px + env(safe-area-inset-top,0px));left:22px;right:22px;text-shadow:0 3px 10px #04161e}
.ritual-copy h1{margin-top:8px;font-size:clamp(21px,5.9vw,28px);line-height:1.4}
.ritual-touch{--ring:min(58vw,240px);position:absolute;z-index:4;left:12%;right:12%;top:40%;height:40%;padding:0;border:0;background:transparent;color:#fff5cd;touch-action:manipulation}
.ritual-touch:before{content:"";position:absolute;left:50%;top:44%;width:var(--ring);height:var(--ring);margin-left:calc(var(--ring) / -2);margin-top:calc(var(--ring) / -2);border:2px solid #ffe8a8b3;border-radius:50%;background:radial-gradient(circle,#ffe4a53d,transparent 70%);box-shadow:0 0 34px #ffe7a088,inset 0 0 22px #ffe7a055;animation:propCall 2.8s ease-in-out infinite}
.ritual-touch span{position:absolute;left:50%;bottom:-18%;transform:translateX(-50%);width:max-content;max-width:92%;padding:10px 20px;border:1.5px solid #ffecb8;border-radius:999px;background:linear-gradient(115deg,#0b4555f0,#0d5b6df0);box-shadow:0 5px 13px #092d3caf;font-size:15px;font-weight:950;letter-spacing:.4px}
.ritual-touch:focus-visible{outline:3px solid #ffe070;outline-offset:4px}
.ritual-scene.casting .ritual-touch{opacity:0;pointer-events:none;transition:opacity .4s}
.ritual-scene.casting .ritual-glow{animation:ritualBloom 2.6s ease-out both}
.ritual-scene.casting .ritual-art{animation:ritualCast 2.6s ease-in-out both}
.ritual-scene.casting .ritual-copy{opacity:.35;transition:opacity 1.2s}

/* E/F. 改運後的籤象與第一條路：夥伴小頭像泡泡 */
.omen-retry .omen-story .eyebrow{color:#ffe8b0}
/* 放在頂部左側（masthead 下方）：底部 prelude 高度隨語系變動，放那裡會和道具提示鈕重疊 */
.helper-cameo{position:absolute;z-index:4;top:calc(76px + env(safe-area-inset-top,0px));left:14px;display:flex;align-items:center;gap:10px;width:max-content;max-width:calc(100% - 28px);padding:6px 14px 6px 6px;border-radius:999px 18px 18px 999px;background:#fffbecf2;box-shadow:0 6px 14px #04202b80;color:#244c51;text-shadow:none;animation:cameoIn .6s var(--ease) .3s both}
.helper-cameo img{flex:none;width:52px;height:52px;border-radius:50%;object-fit:cover;object-position:50% 40%;border:3px solid #fff;box-shadow:0 0 0 2px var(--accent,#e6bf69)}
.story-game .helper-cameo p{font-size:13px;line-height:1.45;font-weight:800;text-shadow:none} /* 淺底泡泡：蓋掉 .v7-scene p 的深色字影 */
.story-game.playing .helper-cameo{opacity:0;transition:opacity .35s}
.helper-cameo strong{display:block;font-size:12px;color:#a46d3b}

/* H. 結尾卡：夥伴段落、休息／接受命運的 hero */
.card-helper-row{display:flex;align-items:flex-start;gap:14px;margin-top:10px}
.card-helper-avatar{flex:none;width:64px;height:64px;border-radius:50%;object-fit:cover;object-position:50% 40%;border:3px solid #fff9e6;box-shadow:0 3px 0 #b69562}
.card-helper-row h2{margin:0 0 4px;font-size:clamp(20px,5.4vw,24px)}
.card-helper-row p{font-size:15px}
.card-helper{border-bottom:2px dashed #c69d69}
.rest-card-hero{background:#1b2f3a}
.rest-card-art{position:absolute;inset:0;background:url("assets/zoo-rest-cozy.webp") center 53%/cover no-repeat;animation:heroFloat 9s ease-in-out infinite alternate}
.rest-card-hero:after{background:linear-gradient(transparent 30%,#0a2230eb 92%)}
.rest-card-hero .hero-label strong{font-size:clamp(30px,8.4vw,44px);color:#ffe9b0}

@keyframes twistArrive{from{filter:blur(6px) brightness(.55);transform:scale(1.1)}to{filter:none;transform:scale(1)}}
@keyframes twistShake{0%,100%{translate:0 0}20%{translate:-7px 0}40%{translate:6px 0}60%{translate:-4px 0}80%{translate:2px 0}}
@keyframes mistPartL{from{opacity:.95;transform:translateX(18%)}to{opacity:0;transform:translateX(-75%)}}
@keyframes mistPartR{from{opacity:.95;transform:translateX(-18%)}to{opacity:0;transform:translateX(75%)}}
@keyframes helperRise{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}
@keyframes offerPop{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}
@keyframes offerWords{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes offerFade{to{opacity:0;transform:translateY(12px)}}
@keyframes ritualArrive{from{filter:brightness(.5) blur(4px);transform:scale(1.08)}to{filter:none;transform:none}}
@keyframes ritualBloom{0%{opacity:0;transform:translate(-50%,-50%) scale(.1)}45%{opacity:.85}100%{opacity:1;transform:translate(-50%,-50%) scale(1.25)}}
@keyframes ritualCast{0%{filter:none;transform:none}60%{filter:brightness(1.3) saturate(1.2)}100%{filter:brightness(1.75) saturate(.85);transform:scale(1.06)}}
@keyframes cameoIn{from{opacity:0;transform:translateX(-16px)}to{opacity:1;transform:none}}
@media(max-height:730px){.twist-copy{top:calc(74px + env(safe-area-inset-top,0px))}.twist-copy h1{font-size:26px}.twist-copy p{font-size:12.5px}.helper-card{min-height:70px}.helper-avatar{width:54px;height:54px}.helper-meta em{font-size:11.5px}.offer-avatar{width:104px}.offer-bubble p{font-size:14.5px}.ritual-copy h1{font-size:20px}}
html.forest-rm .twist-art,html.forest-rm .twist-scene:before,html.forest-rm .twist-scene:after,html.forest-rm .helper-card,html.forest-rm .offer-avatar,html.forest-rm .offer-bubble,html.forest-rm .ritual-art,html.forest-rm .ritual-touch:before,html.forest-rm .ritual-glow,html.forest-rm .helper-cameo,html.forest-rm .rest-card-art{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
