/* Character detail pass. All effect coordinates are relative to the uncut figure. */
.stage{top:6vh;bottom:-6vh}
.stage .paladin{left:40.8%;width:16.4%}
.foreground-art{mask-image:linear-gradient(to bottom,#000 0%,#000 32%,transparent 58%);-webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 32%,transparent 58%)}
.undergrowth{position:absolute;left:-5%;bottom:-12px;width:110%;height:70vh;z-index:16;pointer-events:none;background:url('assets/undergrowth-v4.png') center bottom/100% 100% no-repeat;transform-origin:bottom center}
.character .figure{isolation:isolate}
.eye-glow{position:absolute;display:block;z-index:3;pointer-events:none}
.eye-glow i{position:absolute;display:block;width:24%;height:100%;border-radius:50%;background:#f0d8ff;box-shadow:0 0 4px 1px #ba78f9,0 0 12px 2px #965be799;animation:eye-breathe 3.7s ease-in-out infinite alternate}
.eye-glow i:last-child{left:65%}
.rogue-eyes{left:59.4%;top:15.5%;width:6%;height:.9%;rotate:6deg}
.stealth-smoke{position:absolute;z-index:-1;inset:8% -8% 0;pointer-events:none;filter:blur(8px);opacity:.65}
.stealth-smoke i{position:absolute;left:10%;bottom:0;width:70%;height:62%;border-radius:50%;background:radial-gradient(ellipse,#31223e88,#1b182c66 35%,transparent 69%);animation:shadow-curl 8s ease-in-out infinite}
.stealth-smoke i:nth-child(2){left:30%;height:80%;animation-delay:-2.7s}.stealth-smoke i:nth-child(3){left:-15%;height:45%;animation-delay:-5.3s}
.droplets{position:absolute;display:block;width:4px;height:1px;z-index:4;pointer-events:none;--drop-color:#b37aff;--drop-glow:#9358d788;--fall:48px}
.droplets i{position:absolute;top:0;left:0;display:block;width:3px;height:7px;opacity:0;background:var(--drop-color);border-radius:50% 50% 55% 55%;box-shadow:0 0 5px var(--drop-glow);animation:liquid-drop 3s cubic-bezier(.45,.08,.8,.75) infinite}
.droplets i:nth-child(2){animation-delay:-1s;left:2px;width:2px;height:5px}.droplets i:nth-child(3){animation-delay:-2s;left:-1px;width:2px;height:5px}
.poison-drips{left:96%;top:77%;--fall:44px}
.living-flame{position:absolute;left:73%;top:10%;width:23%;height:16%;z-index:4;pointer-events:none;mix-blend-mode:screen;filter:drop-shadow(0 0 4px #ff6e1a)}
.living-flame i{position:absolute;bottom:8%;left:17%;width:54%;height:80%;border-radius:45% 55% 40% 60% / 75% 75% 25% 25%;background:radial-gradient(ellipse at 50% 82%,#fff9c8 0%,#ffb62c 24%,#ff621c99 50%,transparent 73%);transform-origin:50% 90%;animation:flame-tongue 1.1s ease-in-out infinite alternate;opacity:.85}
.living-flame i:nth-child(2){left:0;width:43%;height:65%;animation-duration:.73s;animation-delay:-.4s}.living-flame i:nth-child(3){left:46%;width:44%;height:94%;animation-duration:.92s;animation-delay:-.6s}.living-flame i:nth-child(4){left:29%;width:24%;height:55%;background:radial-gradient(ellipse at 50% 80%,#fff 0%,#ffe788 30%,transparent 73%);animation-duration:.63s}
.living-flame b{position:absolute;left:48%;bottom:30%;width:3px;height:3px;border-radius:50%;background:#fff4b5;box-shadow:8px 6px 2px #ff9c34,-7px 13px 1px #ffd076;animation:flame-sparks 1.4s ease-out infinite}
.fx.fel{--spell:#007a38;--core:#13b952;mix-blend-mode:normal;box-shadow:0 0 12px #008b3c66;background:radial-gradient(circle,#22c969 0%,#006e3c88 30%,transparent 70%)}
.stage .imp{left:30%;width:5.5%;z-index:10;bottom:0}
.imp-hop{position:relative;transform-origin:bottom center;animation:imp-hop 3.2s ease-in-out infinite}
.imp-hop img{display:block;width:100%;height:auto;filter:drop-shadow(0 3px 2px #15151777)}
.imp .contact-shadow{animation:imp-shadow 3.2s ease-in-out infinite}
.weapon-stain{position:absolute;left:6%;top:64%;width:25%;height:21%;z-index:2;background:linear-gradient(135deg,transparent 24%,#581b22b3 29%,#80242ba6 36%,transparent 43%,#6b1e2599 51%,transparent 60%);clip-path:polygon(25% 0,63% 20%,100% 72%,61% 100%,48% 73%,0 35%);mix-blend-mode:multiply;opacity:.8}
.blood-drips{left:20%;top:82%;--drop-color:#8f252e;--drop-glow:#791e2322;--fall:45px}.blood-drips i{height:5px;width:2px;animation-duration:4.4s}.blood-drips i:nth-child(2){animation-delay:-1.47s}.blood-drips i:nth-child(3){animation-delay:-2.94s}
.healing-signs{position:absolute;left:12%;top:17%;width:1px;height:1px;z-index:5;pointer-events:none}
.healing-signs i{position:absolute;display:block;width:9px;height:9px;opacity:0;filter:drop-shadow(0 0 4px #ffe4a4) drop-shadow(0 0 8px #edc97588);animation:holy-ascent 3.5s ease-out infinite;--sway:0px}
.healing-signs i:before,.healing-signs i:after{content:'';position:absolute;background:linear-gradient(#fffef0,#ffe5a3);border-radius:1px}.healing-signs i:before{left:37%;top:0;width:26%;height:100%}.healing-signs i:after{left:0;top:37%;width:100%;height:26%}
.healing-signs i:nth-child(2){animation-delay:-.5s;--sway:14px;width:7px;height:7px}.healing-signs i:nth-child(3){animation-delay:-1s;--sway:-12px;width:11px;height:11px}.healing-signs i:nth-child(4){animation-delay:-1.5s;--sway:7px;width:6px;height:6px}.healing-signs i:nth-child(5){animation-delay:-2s;--sway:-20px}.healing-signs i:nth-child(6){animation-delay:-2.5s;--sway:20px;width:5px;height:5px}.healing-signs i:nth-child(7){animation-delay:-3s;--sway:-5px;width:7px;height:7px}
.pet-eyes{left:91%;top:51.7%;width:6%;height:.8%;rotate:12deg}.pet-eyes i{background:#e5fdff;box-shadow:0 0 4px 1px #9de3ff,0 0 10px 2px #89d5f980;animation-delay:-1.4s}
.pet-saliva{left:96.4%;top:61%;--drop-color:#bce3de;--drop-glow:#a0d6e333;--fall:35px}.pet-saliva i{width:2px;height:7px;animation-duration:3.8s}.pet-saliva i:nth-child(2){animation-delay:-1.3s}.pet-saliva i:nth-child(3){animation-delay:-2.6s}
@keyframes eye-breathe{to{opacity:.4;filter:brightness(.8)}}
@keyframes shadow-curl{0%,100%{opacity:.3;transform:translate(-3px,6px) scale(.8)}50%{opacity:.8;transform:translate(5px,-14px) scale(1.1)}}
@keyframes liquid-drop{0%,35%{opacity:0;transform:translateY(-2px) scale(.4,.4)}44%{opacity:.9;transform:translateY(0) scale(.7,1)}85%{opacity:.7}100%{opacity:0;transform:translateY(var(--fall)) scale(.3,.7)}}
@keyframes flame-tongue{0%{transform:rotate(-9deg) scale(.8,.8);opacity:.6}55%{transform:rotate(5deg) scale(.95,1.13);opacity:.95}100%{transform:rotate(-3deg) scale(.72,1.25);opacity:.7}}
@keyframes flame-sparks{from{opacity:0;transform:translateY(0) scale(.8)}20%{opacity:1}to{opacity:0;transform:translate(5px,-34px) scale(.1)}}
@keyframes imp-hop{0%,57%,100%{transform:translateY(0) rotate(0)}64%{transform:translateY(0) scale(1.04,.9)}74%{transform:translateY(-11px) rotate(-4deg)}85%{transform:translateY(0) scale(1.04,.96)}92%{transform:translateY(-3px) rotate(2deg)}}
@keyframes imp-shadow{0%,57%,100%{opacity:.65;scale:1 .65}74%{opacity:.3;scale:.75 .5}}
@keyframes holy-ascent{0%{opacity:0;transform:translate(0,4px) scale(.45) rotate(-7deg)}20%{opacity:1}75%{opacity:.8}100%{opacity:0;transform:translate(var(--sway),-64px) scale(.3) rotate(8deg)}}
@media(max-width:700px){.stage{top:3.5vh;bottom:-3.5vh}.undergrowth{height:48vh;bottom:-16px}.stage .imp{width:6%;left:29%}.healing-signs i{width:5px;height:5px}.droplets{--fall:24px}.droplets i{width:2px;height:4px}.pet-eyes i,.rogue-eyes i{box-shadow:0 0 3px #c8b3ff}.living-flame{filter:drop-shadow(0 0 2px #ff6e1a)}}
/* Final alignment against the painted pet and the party's ankle line. */
.undergrowth{height:66vh;bottom:-24px}
.stage .imp{left:29.8%;width:6.3%;bottom:8px}
.pet-eyes{left:89.5%;top:54.7%;width:8%;height:.8%;rotate:18deg}
.pet-saliva{left:95.3%;top:67%;--fall:30px}
@media(max-width:700px){.undergrowth{height:46vh;bottom:-19px}.stage .imp{left:29%;width:6.8%;bottom:3px}}
.healing-signs i{width:12px;height:12px}
.healing-signs i:nth-child(2){width:9px;height:9px}.healing-signs i:nth-child(3){width:14px;height:14px}.healing-signs i:nth-child(4){width:8px;height:8px}.healing-signs i:nth-child(6){width:7px;height:7px}.healing-signs i:nth-child(7){width:10px;height:10px}
@media(max-width:700px){.healing-signs i{width:5px;height:5px}.healing-signs i:nth-child(3){width:7px;height:7px}.healing-signs i:nth-child(6){width:4px;height:4px}}
/* Source-pixel calibrated corrections, revision 5. */
.undergrowth{background-size:auto 100%;background-repeat:repeat-x;background-position:center bottom}
.imp-hop,.imp .contact-shadow{animation:none!important;transform:none!important;scale:none!important}
.imp-hop img{width:100%;height:auto;object-fit:contain;transform:none!important}
.rogue-eyes,.pet-eyes{inset:0;left:0;top:0;width:100%;height:100%;rotate:0deg}
.eye-glow i{transform:translate(-50%,-50%)}
/* Rogue source: 1230 × 1278; pupils (723,155), (767,160). */
.rogue-eyes i{left:58.78%;top:12.13%;width:1.35%;height:.48%;box-shadow:0 0 3px 1px #d7aaff,0 0 8px #8e51dbaa}
.rogue-eyes i:last-child{left:62.36%;top:12.52%;width:1.05%;height:.4%}
/* Hunter source: 1312 × 1199; pupils (1158,705), (1232,708). */
.pet-eyes i{left:88.26%;top:58.8%;width:1.2%;height:.57%;background:#d7f8ff;box-shadow:0 0 3px #8cdbff,0 0 7px #71c7f899}
.pet-eyes i:last-child{left:93.9%;top:59.05%;width:.85%;height:.46%}
.rogue .figure>img{filter:drop-shadow(0 0 9px #100b1df2) drop-shadow(0 0 21px #24152ebf)}
.stealth-smoke{z-index:2;inset:9% -8% -1%;filter:blur(5px);opacity:.9}
.stealth-smoke i{left:3%;width:88%;height:76%;background:radial-gradient(ellipse,#19101f88 5%,#2b1a3f66 42%,transparent 72%)}
.stealth-smoke i:nth-child(2){left:20%;height:86%}.stealth-smoke i:nth-child(3){left:-12%;height:52%}
/* Poison starts at the anatomical left dagger tip: (1210,968). */
.poison-drips{left:98.37%;top:75.74%;--fall:48px;--drop-color:#cb8bff;--drop-glow:#9b42ed}
.droplets i{animation-name:visible-drip;animation-timing-function:cubic-bezier(.35,.03,.75,.75)}
.poison-drips i{width:4px;height:8px;box-shadow:inset 1px 0 #efd2ff,0 0 5px #a44deb;animation-duration:2.8s}
.poison-drips i:nth-child(2){left:1px;width:3px;height:6px;animation-delay:-.93s}.poison-drips i:nth-child(3){left:0;width:3px;height:6px;animation-delay:-1.86s}
.weapon-stain{display:none}
/* Blood follows the lower axe cutting-edge tip. */
.blood-drips{left:25.39%;top:84.77%;--fall:43px;--drop-color:#ae2433;--drop-glow:#3e0c1477}
.blood-drips i{width:4px;height:7px;box-shadow:inset 1px 0 #e85b65,0 0 1px #340910;animation-duration:4.2s}
.blood-drips i:nth-child(2){left:1px;width:3px;height:6px;animation-delay:-1.4s}.blood-drips i:nth-child(3){left:0;width:3px;height:5px;animation-delay:-2.8s}
/* Saliva starts at the visible sabertooth fang tip: (1198,861). */
.pet-saliva{left:91.31%;top:71.81%;--fall:38px;--drop-color:#e2ffff;--drop-glow:#1a546966}
.pet-saliva:before{content:'';position:absolute;width:1px;height:6px;top:0;left:0;background:#d5ece4b3}
.pet-saliva i{width:3px;height:7px;box-shadow:inset 1px 0 #fff,0 0 2px #477c86;animation-duration:3.6s}
.pet-saliva i:nth-child(2){width:2px;height:6px;left:0;animation-delay:-1.2s}.pet-saliva i:nth-child(3){width:2px;height:5px;left:1px;animation-delay:-2.4s}
@keyframes visible-drip{0%{opacity:0;transform:translateY(-2px) scale(.55)}8%{opacity:1;transform:translateY(0) scale(.8,1)}20%{opacity:1;transform:translateY(1px)}80%{opacity:.95}100%{opacity:0;transform:translateY(var(--fall)) scale(.45,.75)}}
@media(max-width:700px){.poison-drips{--fall:28px}.blood-drips{--fall:26px}.pet-saliva{--fall:23px}.poison-drips i,.blood-drips i{width:3px;height:6px}.pet-saliva i{width:2px;height:5px}}
.undergrowth{background-image:url('assets/ground-v5.png')}
.drop-origin{position:absolute;display:block;width:1px;height:1px;pointer-events:none}
.drop-origin:before{display:none!important}
#drop-layer{position:fixed;inset:0;z-index:19;pointer-events:none;overflow:hidden}
.drop-front{position:absolute;rotate:0deg}
/* Organic foreground relief: proportionate cutouts above the low moss carpet. */
.undergrowth{bottom:-44px}
.woodland-shapes{position:absolute;inset:0;z-index:16;pointer-events:none}
.woodland-shapes img{position:absolute;display:block;width:auto;max-width:none;object-fit:contain;user-select:none;filter:drop-shadow(0 6px 6px #0a171b66)}
.wood-stump{left:-2vw;bottom:-2.8vh;height:clamp(110px,15vh,210px)}
.wood-roots-center{left:34%;bottom:-.8vh;height:clamp(75px,11vh,150px)}
.wood-roots-right{right:-2vw;bottom:-2vh;height:clamp(100px,14vh,190px)}
@media(max-width:700px){.undergrowth{bottom:-24px}.wood-stump{left:-26px;bottom:-18px;height:86px}.wood-roots-center{left:30%;bottom:-13px;height:65px}.wood-roots-right{right:-35px;bottom:-20px;height:83px}}
/* Let the relief overlap ankles while exposing only a narrow stone footing. */
.undergrowth{bottom:-30px}
.wood-stump{bottom:1vh}
.wood-roots-center{bottom:1vh;height:clamp(85px,13vh,170px)}
.wood-roots-right{bottom:.5vh;height:clamp(110px,16vh,190px)}
@media(max-width:700px){.undergrowth{bottom:-20px}.wood-stump{bottom:40px;height:86px}.wood-roots-center{bottom:42px;height:65px}.wood-roots-right{bottom:32px;height:83px}}
.wood-roots-center{bottom:3vh}
.wood-roots-right{bottom:2.5vh}
@media(max-width:700px){.wood-roots-center{bottom:54px}.wood-roots-right{bottom:44px}}
/* Break the carpet's actual skyline into rounded banks and exposed stone gaps. */
.undergrowth{-webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20100%20100%22%20preserveAspectRatio%3D%22none%22%3E%0A%20%20%3Cdefs%3E%3Cfilter%20id%3D%22edge%22%20x%3D%22-2%25%22%20y%3D%22-2%25%22%20width%3D%22104%25%22%20height%3D%22104%25%22%3E%3CfeGaussianBlur%20stdDeviation%3D%220.10%22%2F%3E%3C%2Ffilter%3E%3C%2Fdefs%3E%0A%20%20%3Cpath%20fill%3D%22white%22%20filter%3D%22url%28%23edge%29%22%20d%3D%22M-2%2083%20C2%2082%205%2080.5%209%2083%20C13%2085%2015%2090%2020%2088%20C25%2086%2026%2081%2032%2082.5%20C37%2083.5%2039%2089%2044%2087%20C49%2085%2050%2081%2055%2082%20C60%2083%2062%2090%2068%2088.5%20C74%2087%2075%2081%2081%2083%20C86%2085%2088%2090%2093%2086%20C97%2083%2098%2080.5%20102%2082%20L102%20102%20L-2%20102%20Z%22%2F%3E%0A%3C%2Fsvg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20100%20100%22%20preserveAspectRatio%3D%22none%22%3E%0A%20%20%3Cdefs%3E%3Cfilter%20id%3D%22edge%22%20x%3D%22-2%25%22%20y%3D%22-2%25%22%20width%3D%22104%25%22%20height%3D%22104%25%22%3E%3CfeGaussianBlur%20stdDeviation%3D%220.10%22%2F%3E%3C%2Ffilter%3E%3C%2Fdefs%3E%0A%20%20%3Cpath%20fill%3D%22white%22%20filter%3D%22url%28%23edge%29%22%20d%3D%22M-2%2083%20C2%2082%205%2080.5%209%2083%20C13%2085%2015%2090%2020%2088%20C25%2086%2026%2081%2032%2082.5%20C37%2083.5%2039%2089%2044%2087%20C49%2085%2050%2081%2055%2082%20C60%2083%2062%2090%2068%2088.5%20C74%2087%2075%2081%2081%2083%20C86%2085%2088%2090%2093%2086%20C97%2083%2098%2080.5%20102%2082%20L102%20102%20L-2%20102%20Z%22%2F%3E%0A%3C%2Fsvg%3E%0A");-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}

/* Assembly 8: approved flower, trophy and potion foreground, proportional to the scene. */

.blood-drips{left:22%;top:82.5%}


/* Leave room for the party's pointer drift at narrow widths. */
@media(max-width:700px){.stage .company{left:4%;right:4%}.scene{min-height:0}}
@media(max-height:500px) and (min-width:701px){.scene{min-height:0}}
@media(max-height:500px) and (min-width:701px){.guild-title{top:24%}.title-ornament{display:none}.guild-title h1 span{font-size:7vh}.guild-title h1 strong{font-size:10vh;letter-spacing:10px;margin-top:4px}}

/* Individual foreground cutouts: a single size axis preserves native proportions. */
.woodland-shapes .ground-prop{width:auto;max-width:none;object-fit:contain;filter:drop-shadow(0 2px 1px #0b171b77);z-index:2}
.orc-trophy{left:10%;bottom:8vh;height:clamp(36px,5vw,72px)}
.ground-flowers{height:clamp(20px,3vw,43px);bottom:5vh}
.flowers-left{left:19%;rotate:-8deg}.flowers-center{left:47%;bottom:3vh;rotate:6deg}.flowers-right{right:10%;bottom:6vh}
.ground-potion{right:7%;bottom:7vh;height:clamp(27px,3.5vw,48px)}
@media(max-width:700px){
 .orc-trophy{left:7%;bottom:77px;height:30px}
 .ground-flowers{height:19px;bottom:61px}
 .flowers-left{left:20%}.flowers-center{left:47%;bottom:68px}.flowers-right{right:9%;bottom:63px}
 .ground-potion{right:5%;bottom:75px;height:25px}
}
@media(max-height:500px) and (min-width:701px){
 .wood-stump{height:95px}.wood-roots-center{height:65px}.wood-roots-right{height:85px}
 .orc-trophy{height:34px;bottom:10vh}.ground-potion{height:28px}.ground-flowers{height:22px}
}

/* Keep mobile props subordinate to the party, with readable gaps between roots. */
.flowers-center{left:36%;bottom:5vh}
@media(max-width:700px){
 .wood-stump{height:64px}.wood-roots-center{height:46px}.wood-roots-right{height:62px}
 .orc-trophy{height:24px}.ground-potion{height:20px}
 .flowers-center{left:44%;bottom:63px}
}

/* The cloak canvas shares the original image box; pet and effect anchors stay fixed. */
.hunter .figure>.hunter-cloak{position:absolute;inset:0;display:block;width:100%;height:100%;pointer-events:none;filter:drop-shadow(0 4px 3px #0d1e2244)}

/* Small props sit on the exact same ground plane as the adventurers. */
.ground-props{position:absolute;inset:0;z-index:12;pointer-events:none}
.ground-props .prop-anchor{position:absolute;display:block;bottom:-3px;width:clamp(44px,6vw,87px);height:auto;isolation:isolate}
.ground-props .prop-art{position:relative;display:block;width:100%;height:auto;max-width:none;filter:none;z-index:1}
.prop-anchor::after{content:'';position:absolute;z-index:0;left:9%;right:9%;bottom:-2px;height:7px;border-radius:50%;background:#06100ce0;filter:blur(2px)}
/* Sink the trophy into the grass in front of the terrace. */
.ground-props .prop-orc{left:9%;bottom:calc(-3px - 4vh)}
.ground-props .prop-potion{right:6%;width:clamp(25px,3vw,42px);bottom:-9px}
.ground-props .prop-flowers{width:clamp(24px,3.4vw,48px);bottom:-20px}
.ground-props .flowers-left{left:18%;rotate:-8deg}
.ground-props .flowers-center{left:36%;rotate:6deg}
.ground-props .flowers-right{left:auto;right:10%;bottom:-15px}
@media(max-width:700px){
 .ground-props .prop-orc{left:7%;width:30px;bottom:calc(-23px - 4vh)}
 .ground-props .prop-potion{right:5%;width:18px;bottom:-5px}
 .ground-props .prop-flowers{width:19px;bottom:-9px}
 .ground-props .flowers-center{left:43%}
 .ground-props .flowers-right{bottom:-8px}
 .prop-anchor::after{height:4px;filter:blur(1px)}
}
/* This is a single-screen scene; avoid scrolling a second empty part below it. */
.scene-scroll{height:100svh}
