.portrait-dancer{display:none}
html[data-layout=portrait] .portrait-dancer{display:block;position:absolute;left:50%;top:48.7%;width:35%;aspect-ratio:448/668;transform:translateX(-50%);z-index:2;pointer-events:none;isolation:isolate}
html[data-layout=portrait] .portrait-dancer::before{content:'';position:absolute;left:22%;right:19%;bottom:2%;height:5%;background:radial-gradient(ellipse,#08001070,transparent 70%);pointer-events:none;z-index:-1}
html[data-layout=portrait] .portrait-dancer-poster,html[data-layout=portrait] .portrait-dancer-canvas{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:contain;pointer-events:none}
html[data-layout=portrait] .portrait-dancer-canvas{opacity:0}
html[data-layout=portrait] .portrait-dancer[data-ready=true] .portrait-dancer-canvas{opacity:1}
html[data-layout=portrait] .portrait-dancer[data-ready=true] .portrait-dancer-poster{opacity:0}
/* A raw chroma video is never composited into the UI, even during first decode. */
html[data-layout=portrait] .portrait-dancer-source{position:absolute;left:50%;bottom:0;width:1px;height:1px;opacity:0;pointer-events:none}
/* Every mode shares the regular dancer footprint; bonus plaques flank it. */
html[data-layout=portrait] .pulse-side{top:67.7%;width:24%;height:9%}
html[data-layout=portrait] .pulse-side-left{left:7%}
html[data-layout=portrait] .pulse-side-right{right:7%}
html[data-layout=portrait] .pulse-jackpot{left:7%;right:auto;top:51%;height:12.2%;width:24%;gap:1.2cqw;padding:1.8cqw;border-radius:2cqw}
html[data-layout=portrait] .pulse-jackpot>span{height:3.4cqw;width:100%}
html[data-layout=portrait] .pulse-jackpot>strong{height:6.2cqw;width:100%}
html[data-layout=portrait] .pulse-jackpot small{font-size:2.2cqw;line-height:1.2;letter-spacing:.06cqw}
