/* Movement is concentrated around choices and reveals, never the reading state. */
#app{position:relative;overflow:hidden;isolation:isolate}
.screen{animation:none;perspective:1200px}
.primary,.secondary,.drink-button,.nav-icon,.spin-go{transition:transform .16s ease,box-shadow .2s ease,background .2s ease}
.primary:active,.secondary:active,.drink-button:active,.nav-icon:active{transform:scale(.95)}
.primary{position:relative;overflow:hidden}
.primary:after{content:'';position:absolute;inset:0;background:linear-gradient(110deg,transparent 20%,#fff4 48%,transparent 75%);transform:translateX(-120%);animation:button-sheen 3s ease 1.4s 2;pointer-events:none}
.hero-art .mini-card.spark{--fan-x:-92px;--fan-y:0px;--fan-r:-15deg;animation:fan-deal 1.3s cubic-bezier(.16,1,.3,1) both}
.hero-art .mini-card.desire{--fan-x:0px;--fan-y:-12px;--fan-r:0deg;animation:fan-deal 1.3s .08s cubic-bezier(.16,1,.3,1) both}
.hero-art .mini-card.heat{--fan-x:92px;--fan-y:0px;--fan-r:15deg;animation:fan-deal 1.3s .16s cubic-bezier(.16,1,.3,1) both}
.hero-art:before{animation:glow-breathe 3s ease-in-out 3}
.hero .flourish{animation:flourish-in 1.1s .35s ease both}
.screen-setup .player-field{animation:panel-rise .5s cubic-bezier(.16,1,.3,1) both}
.screen-setup .player-field:nth-child(2){animation-delay:.09s}
.screen-transition .centerpiece>div>.icon{width:100px;height:100px;color:var(--pink);animation:motif-arrive .7s cubic-bezier(.16,1,.3,1)}
.card-back{overflow:hidden;transform-origin:center;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.card-back:after{content:'';position:absolute;inset:-30%;background:linear-gradient(125deg,transparent 35%,#e9519125 48%,#e7d9fa30 50%,transparent 65%);transform:translateX(-90%);animation:card-glint 2.4s .4s ease 2;pointer-events:none}
.card-back .icon{animation:motif-breathe 2s ease-in-out 2}
.playing-card{backface-visibility:hidden;-webkit-backface-visibility:hidden;transform-origin:center;transform-style:preserve-3d}
.progress span.past:last-of-type{animation:progress-pop .5s ease both}
.ready-buttons{position:relative}
.ready-buttons button{transition:background .2s,transform .2s}
.ready-buttons button:active{transform:scale(.96)}
.centerpiece{position:relative}
.finish-heart{animation:heart-arrive 1s cubic-bezier(.16,1,.3,1) both}
.toast{animation:modal-rise .65s cubic-bezier(.16,1,.3,1) both}
.toast h2{animation:panel-rise .5s .12s cubic-bezier(.16,1,.3,1) both}
.toast .flourish{animation:flourish-in .6s ease both}
.spin-intro{text-align:center;padding-top:38px}
.spin-intro h1{font-size:45px}
.orbit-scene{height:360px;max-width:360px;width:100%;margin:32px auto auto;position:relative;isolation:isolate}
.orbit-scene:before{content:'';position:absolute;inset:30px;border-radius:50%;background:radial-gradient(circle,#da2a8e66 0,#7424b833 45%,transparent 70%);filter:blur(18px)}
.orbit-ring{position:absolute;border:1px solid #e9519140;border-radius:50%;pointer-events:none}
.ring-one{inset:8px;box-shadow:0 0 40px #e9519110}
.ring-two{inset:52px;border-color:#b76be333}
.ring-three{inset:98px;border-color:#e9519170;background:#e9519112}
.orbit-track{position:absolute;inset:0;z-index:2}
.name-orbit{position:absolute;top:calc(50% - 51px);width:102px;height:102px;border-radius:50%;background:var(--pink);color:#32102a;display:grid;place-items:center;box-shadow:0 8px 35px #16061780;border:1px solid #ffa6cb80}
.name-orbit>span{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;font:600 24px/1.05 var(--serif);width:90px;min-height:80px;overflow-wrap:anywhere;padding:5px}
.name-orbit small{font:600 9px var(--sans);letter-spacing:2px;margin-bottom:7px}
.player-0{left:0;background:var(--lilac);border-color:#fff6}
.player-1{right:0}
.spin-go{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:112px;height:112px;border:1px solid #ff95c780;background:#421238;color:var(--blush);border-radius:50%;z-index:3;box-shadow:0 0 30px #e9519155;font:600 29px var(--serif);display:flex;align-items:center;justify-content:center;gap:4px;flex-direction:column}
.spin-go span{font:400 20px var(--sans);color:var(--pink)}
.spin-go:active{transform:translate(-50%,-50%) scale(.9)}
.spinning .spin-go{opacity:0;transform:translate(-50%,-50%) scale(.5);transition:.2s;pointer-events:none}
.spinning .ring-one{animation:ring-charge .7s ease-in-out infinite alternate}
.spinning .ring-two{animation:ring-charge .7s .15s ease-in-out infinite alternate}
.spinning .ring-three{animation:ring-charge .7s .3s ease-in-out infinite alternate}
.settled .spin-go{opacity:0;pointer-events:none}
.settled .not-chosen{opacity:.15;transition:opacity .3s}
.settled .chosen{box-shadow:0 0 0 7px #fff1,0 0 55px #e95191bb}
.spin-result{position:absolute;top:calc(100% + 10px);left:0;right:0;text-align:center;pointer-events:none}
.spin-result small{display:block;letter-spacing:2px;font-size:10px;color:var(--pink)}
.spin-result strong{font:500 35px var(--serif);display:block;margin-top:6px;overflow-wrap:anywhere}
.screen-chooser .bottom{padding-top:80px}
.burst{position:absolute;inset:0;pointer-events:none;overflow:visible;z-index:6}
.burst>span{position:absolute;left:50%;top:50%;width:16px;height:16px;color:var(--pink);animation:motif-burst .8s cubic-bezier(.1,.5,.2,1) both}
.burst svg{width:100%;height:100%}
.playing-card>.burst>span{top:16%}
.stage-wipe{position:absolute;z-index:10;inset:0;background:radial-gradient(circle at 50% 65%,#f47eb1,#E95191 70%);color:var(--plum);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;pointer-events:none}
.stage-wipe.heat{background:radial-gradient(circle at 50% 65%,#7c205a,#421238 70%);color:var(--blush)}
.stage-wipe>.icon{width:125px;height:125px}
.stage-wipe strong{font:600 62px var(--serif);letter-spacing:-1px}
.stage-wipe small{font-size:10px;letter-spacing:2px}
@keyframes fan-deal{from{transform:translate(0,40px) rotate(0) scale(.82);opacity:0}to{transform:translate(var(--fan-x),var(--fan-y)) rotate(var(--fan-r));opacity:1}}
@keyframes glow-breathe{0%,100%{opacity:.5;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}
@keyframes flourish-in{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes panel-rise{from{transform:translateY(24px);opacity:0}to{transform:translateY(0);opacity:1}}
@keyframes motif-arrive{from{transform:scale(.5) rotate(-30deg);opacity:0}to{transform:scale(1) rotate(0);opacity:1}}
@keyframes card-glint{0%{transform:translateX(-90%)}65%,100%{transform:translateX(90%)}}
@keyframes motif-breathe{0%,100%{transform:scale(1);filter:drop-shadow(0 0 5px #e9519140)}50%{transform:scale(1.08);filter:drop-shadow(0 0 18px #e95191bb)}}
@keyframes button-sheen{0%{transform:translateX(-120%)}50%,100%{transform:translateX(120%)}}
@keyframes progress-pop{from{transform:scaleX(.2)}to{transform:scaleX(1)}}
@keyframes heart-arrive{0%{transform:scale(.3) rotate(-12deg);opacity:0}60%{transform:scale(1.15) rotate(4deg);opacity:1}100%{transform:scale(1) rotate(0)}}
@keyframes modal-rise{from{opacity:0;transform:translateY(45px)}to{opacity:1;transform:translateY(0)}}
@keyframes ring-charge{from{transform:scale(.93);opacity:.35}to{transform:scale(1.05);opacity:1}}
@keyframes motif-burst{0%{transform:translate(-50%,-50%) scale(0);opacity:0}20%{opacity:1}100%{transform:translate(calc(-50% + var(--x)),calc(-50% + var(--y))) rotate(var(--r)) scale(.35);opacity:0}}
@media(max-width:370px){.hero-art .mini-card.spark{--fan-x:-77px;--fan-r:-13deg}.hero-art .mini-card.heat{--fan-x:77px;--fan-r:13deg}.name-orbit{width:86px;height:86px;top:calc(50% - 43px)}.name-orbit>span{width:77px;font-size:21px}.spin-go{width:95px;height:95px}.orbit-scene{height:300px}}
@media(max-height:820px) and (max-width:720px){.spin-intro{padding-top:22px}.spin-intro h1{font-size:38px}.orbit-scene{height:300px}.screen-chooser .bottom{padding-top:70px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.hero-art .mini-card.spark{transform:translateX(var(--fan-x)) rotate(var(--fan-r))}.hero-art .mini-card.desire{transform:translateY(-12px)}.hero-art .mini-card.heat{transform:translateX(var(--fan-x)) rotate(var(--fan-r))}.burst{display:none}}

/* Name-only play and a clear setup back button. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.topbar{display:grid;grid-template-columns:72px 1fr 72px;gap:0}
.topbar .brand{justify-self:center}
.topbar-spacer{width:72px}
.topbar .text-nav{justify-self:end}
.back-button{background:none;border:0;color:var(--blush);font-size:13px;min-width:64px;min-height:44px;text-align:left;padding:6px 0}
.back-button:active{transform:translateX(-3px)}
.spin-go{display:grid;place-items:center;line-height:1;padding:0;gap:0}
.name-orbit>span{padding:5px;line-height:1.15}
@media(max-width:370px){.topbar{grid-template-columns:62px 1fr 62px}.topbar-spacer{width:62px}.topbar .brand,.topbar .brand svg{width:130px}}

/* Give the revealed card the space previously occupied by the turn heading. */
.screen-card .playing-card,.screen-handover .playing-card{margin-top:20px}
.card-player{font:600 12px/1.3 var(--sans);letter-spacing:1px;margin-bottom:16px;max-width:100%;overflow-wrap:anywhere}

.screen-handover .card-player{position:absolute;top:30px;left:26px;right:26px;margin:0}

/* Opening only: two orbiting names merge into one central starting-player badge. */
.orbit-scene .spin-result{top:50%;left:50%;right:auto;width:150px;height:150px;transform:translate(-50%,-50%);border-radius:50%;background:linear-gradient(140deg,var(--lilac),var(--pink));color:var(--plum);border:1px solid #fff8;box-shadow:0 0 0 8px #e9519115,0 0 65px #e9519160;display:none;align-items:center;justify-content:center;flex-direction:column;padding:12px;z-index:4}
.orbit-scene.settled .spin-result{display:flex}
.orbit-scene .spin-result small{color:var(--plum);font-size:9px;letter-spacing:1.8px}
.orbit-scene .spin-result strong{font-size:32px;line-height:1.1;margin-top:9px;max-width:100%}
.merging .name-orbit>span{opacity:0;transition:opacity .7s ease}
.merging .name-orbit{box-shadow:0 0 40px #e9519155}
