:root{--paper:#eeeae1;--ink:#191a17;--lime:#c2f627;--lavender:#b4a3ce;color-scheme:light;background:var(--paper);color:var(--ink);font-family:Arial,Helvetica,sans-serif}
*{box-sizing:border-box}main{padding:24px;max-width:1050px}.brandbar{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #bdbbb1;padding-bottom:15px;margin-bottom:24px;gap:20px}.oddclub-logo{width:135px;height:90px;object-fit:contain}.brandcaption{font:10px/1.7 monospace;letter-spacing:1.2px;text-align:right}.eyebrow{font:11px/1.7 monospace;letter-spacing:1.5px;color:#505248}h1{color:var(--ink);font-size:clamp(34px,6vw,66px);line-height:1;letter-spacing:-2.5px;margin:12px 0 22px;font-weight:900}h2{letter-spacing:-.6px;line-height:1.15}p{line-height:1.55}.card{background:#f8f5ee;border:1px solid #bdbbb1;border-radius:8px;padding:22px;margin:20px 0}.card:has(#badgeIdea){background:var(--lavender);border-color:var(--ink)}button{background:var(--lime);color:var(--ink);border:1px solid var(--ink);border-radius:8px;font-size:15px;font-weight:800;padding:15px 18px;box-shadow:2px 2px 0 var(--ink);min-height:48px}button:disabled{opacity:.4;box-shadow:none;cursor:default}button:not(:disabled):active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid #7760c0;outline-offset:4px}input,select,textarea{background:#fffdf7;color:var(--ink);border:1px solid #72736a;border-radius:6px;font:inherit;padding:13px}input:not([type=checkbox]),textarea{width:100%}input[type=checkbox]{width:auto}label{font-size:15px;font-weight:bold}label input,label textarea,label select{font-size:17px;font-weight:normal;margin-top:8px}.badge{background:var(--paper);color:var(--ink);border:3px solid var(--badge-color,#191a17);border-radius:12px;box-shadow:5px 5px 0 var(--ink);padding:25px;margin:8px 0 24px}.badge .emblem{color:var(--ink);background:var(--badge-color,#c2f627);width:90px;height:90px;display:flex;align-items:center;justify-content:center;margin:18px auto;border-radius:18px;font-size:65px;flex-shrink:0}.badge>small{color:var(--ink);font:10px/1.6 monospace;letter-spacing:1px}.badge h2{font-weight:900;text-transform:uppercase}.badge p{margin:12px 0}.badge.medallion .emblem{border-radius:50%}.badge.permit{border-width:3px}.permit .badge-body{gap:16px}.permit .emblem{margin:15px 0}.buzz{background:var(--lime);color:var(--ink);border:2px solid var(--ink);font-size:28px;font-weight:900;padding:30px 20px;letter-spacing:-.8px}.timer{color:var(--ink);font-weight:900;letter-spacing:-3px}small{color:#55574e}a{color:var(--ink)}details{padding:14px 0}summary{font-weight:bold;cursor:pointer}.host{border-color:#bdbbb1}#connection{display:inline-block;background:var(--lime);color:var(--ink);padding:5px 10px;border:1px solid var(--ink);border-radius:30px;font:11px monospace;margin-bottom:12px}#connection:empty,#error:empty{display:none}#error{color:#9b241e;padding:12px 0}.grid{gap:18px}.grid>*{min-width:0;flex:1 1 280px}body.stage .card{font-size:24px}@media(max-width:480px){main{padding:20px}.brandbar{margin-bottom:18px}.oddclub-logo{width:110px;height:74px}h1{font-size:36px}.permit .badge-body{display:block}.permit .emblem{margin:18px auto}.card{padding:19px}.badge{padding:20px}button{max-width:100%}}@media(prefers-reduced-motion:reduce){.badge{animation:none}}

@media(max-width:480px){.grid>section:nth-child(2){order:-1}}

.brandbar{position:sticky;top:0;background:var(--paper);z-index:20}.brandcaption strong{display:block;font:900 23px/1.35 monospace;letter-spacing:1px}

/* Credential system: live typography over reusable vector seals and engraved stock. */
.badge{position:relative;overflow:hidden;isolation:isolate;border:1px solid var(--ink);border-radius:15px;background:var(--paper);padding:24px;box-shadow:0 10px 18px #191a1726;text-align:left;margin:8px 0 12px;container-type:inline-size}
.badge:before{content:"";position:absolute;inset:7px;z-index:-1;border:1px solid var(--badge-color);border-radius:10px;background:repeating-radial-gradient(ellipse at 15% 50%,transparent 0 7px,color-mix(in srgb,var(--badge-color) 16%,transparent) 8px 8.6px,transparent 9px 14px);pointer-events:none}
.badge-top{display:flex;justify-content:space-between;border-bottom:2px solid var(--ink);padding-bottom:10px;font:700 8px/1.3 monospace;letter-spacing:1.3px}.badge-top span{font-size:15px}.badge-body,.permit .badge-body{display:flex;align-items:center;gap:17px;min-height:155px}.badge-lettering{min-width:0}.badge-lettering>small{font:700 7px/1.3 monospace;letter-spacing:1.1px}.badge h2{font-family:Impact,'Arial Narrow',sans-serif;font-stretch:condensed;font-size:clamp(19px,7cqw,34px);line-height:1.04;letter-spacing:-.4px;margin:8px 0;overflow-wrap:anywhere}.badge.medallion h2{font-family:Georgia,serif;font-size:clamp(18px,6cqw,30px)}.badge .badge-lettering p{font:600 clamp(12px,4cqw,18px)/1.3 Georgia,serif;margin:0}.badge-seal{width:30%;aspect-ratio:1;flex-shrink:0;position:relative;display:grid;place-items:center;color:var(--ink);border:3px double var(--ink);border-radius:50%;background:linear-gradient(135deg,#fff,var(--badge-color) 26%,#fff9 49%,var(--badge-color) 70%);outline:2px dotted var(--badge-color);outline-offset:3px;box-shadow:0 4px 0 #191a1726}.badge-seal:before{content:"";position:absolute;inset:6px;border:1px dashed var(--ink);border-radius:50%}.badge-seal svg{width:52%;height:52%;fill:currentColor}.badge-holder{display:flex;align-items:end;justify-content:space-between;gap:10px}.badge-holder small{display:block;font:8px monospace;letter-spacing:2px}.badge-holder strong{display:block;font:900 clamp(14px,5cqw,24px)/1.3 Arial,sans-serif;text-transform:uppercase;overflow-wrap:anywhere}.credential-stamp{font:bold clamp(8px,3cqw,14px) monospace;border:2px solid var(--badge-color);color:var(--ink);padding:5px;transform:rotate(-9deg)}.badge footer{display:flex;justify-content:space-between;gap:12px;border-top:1px solid var(--badge-color);margin-top:14px;padding-top:10px;font:italic 9px/1.3 Georgia,serif}.badge footer small{font:8px monospace;white-space:nowrap}
.rack{margin:8px -8px}.private-motive{font-size:12px;color:#5d4b79;margin:6px 8px}.deck-heading{display:flex;justify-content:space-between;align-items:center;margin:0 8px}.deck-heading h2{font-size:25px;margin:10px 0}.deck-heading span{font:10px monospace}.badge-deck{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain;touch-action:pan-x pan-y}.badge-deck::-webkit-scrollbar{display:none}.badge-slide{flex:0 0 100%;min-width:0;padding:0 8px;scroll-snap-align:center;scroll-snap-stop:always}.badge-slide .badge{aspect-ratio:auto}.badge-slide .watching{text-align:center;font-size:12px;margin:10px 0}.claimBadge{width:100%}.deck-nav{display:flex;align-items:center;justify-content:space-between;margin:10px 8px}.deck-nav button{background:transparent;box-shadow:none;padding:0;width:42px;min-height:36px}.deck-nav span{font:10px monospace;text-transform:uppercase;letter-spacing:1px}.case-heading h2{font-size:19px;margin:12px 0}.case-heading p{font-size:15px}.host summary{padding:12px}#customCreator{margin-top:10px;padding:13px}.brandbar{padding-bottom:8px;margin-bottom:10px}.oddclub-logo{width:90px;height:60px}.brandcaption{font-size:9px}body:has(.rack) h1{display:none}body:has(.rack) main{max-width:540px}.timer{font-size:30px;letter-spacing:-1px}.card>h2{font-size:25px}.buzz{border-radius:50%;aspect-ratio:1;width:min(65vw,260px);display:block;margin:20px auto;box-shadow:0 9px 0 #8da92c,0 16px 28px #191a172e}.buzz:active{transform:translateY(6px)!important;box-shadow:0 3px 0 #8da92c!important}
.impact-layer{position:fixed;inset:0;z-index:100;pointer-events:none;display:flex;justify-content:center;align-items:start;padding-top:18vh;overflow:hidden}.impact-stamp{font:900 clamp(26px,7vw,54px)/1 monospace;letter-spacing:3px;color:var(--lime);background:var(--ink);border:4px solid var(--lime);box-shadow:0 0 0 6px var(--ink);padding:16px 24px;transform:rotate(-8deg);animation:stamp-impact .35s cubic-bezier(.2,.8,.25,1.4)}@keyframes stamp-impact{from{transform:scale(2.1) rotate(-18deg);opacity:0}to{transform:scale(1) rotate(-8deg);opacity:1}}.confetti{position:absolute;top:-25px;width:8px;height:15px;animation:confetti-drop 2.8s ease-in var(--delay) both}@keyframes confetti-drop{to{transform:translateY(105vh) rotate(var(--spin));opacity:0}}.credential-reveal{position:fixed;inset:0;width:100%;height:100dvh;z-index:110;background:var(--paper);display:flex;flex-direction:column;align-items:center;justify-content:center;border:0;border-radius:0;padding:16px;box-shadow:none;margin:0}.credential-reveal .badge{width:min(100%,850px);max-height:90dvh}.credential-reveal>span{font:10px monospace;letter-spacing:3px;margin-top:18px}.revealing{overflow:hidden}.credential-reveal .badge-body{min-height:min(40vh,330px)}.credential-reveal:active{transform:none!important}.credential-reveal .badge{pointer-events:none}
@media(min-width:700px){.badge-slide .badge{min-height:320px}.badge-slide .badge-body{min-height:190px}}@media(max-height:700px){main{padding:12px 16px}.brandbar{position:relative}.oddclub-logo{height:42px;width:63px}.badge{padding:18px}.badge-body,.permit .badge-body{min-height:120px}.badge footer{margin-top:9px;padding-top:7px}.deck-nav{margin:6px 8px}.claimBadge{min-height:43px;padding:10px}.deck-heading h2{font-size:22px}.card{margin:10px 0}}
@media(prefers-reduced-motion:reduce){.impact-stamp,.confetti{animation:none}.confetti{display:none}*{scroll-behavior:auto!important}}
body:has(.rack) #appEyebrow{display:none}body:has(.rack) #connection{position:absolute;right:22px;top:102px;font-size:9px;padding:3px 6px}body:has(.rack) #app>.eyebrow{font-size:10px;padding-right:45px}body:has(.rack) .case-heading h2{margin:12px 0 6px}body:has(.rack) .brandbar{margin-bottom:12px}@media(max-height:700px){body:has(.rack) #connection{top:77px}.badge-slide .badge-body{min-height:110px}.badge-slide .badge{margin-top:2px;margin-bottom:6px}.deck-heading h2{margin:7px 0}.badge-slide .watching{margin:6px 0}}
.badge{animation:none}.credential-reveal .badge{animation:badgeReveal .3s ease-out}@media(prefers-reduced-motion:reduce){.credential-reveal .badge{animation:none}}
body.playing h1,body.playing #appEyebrow{display:none}body.playing .case-heading h2{margin:12px 0 6px}body.playing #connection{font:9px monospace;padding:3px 7px;margin-bottom:6px}body.stage.playing .badge{max-width:700px}body.playing .card:has(.badge){padding:14px}

/* Loose case files: backing sheets tilt; the readable surface stays upright. */
.card{position:relative;isolation:isolate;box-shadow:2px 4px 0 #191a171c}
.card:before,.card:after{content:"";position:absolute;inset:2px;z-index:-2;border:1px solid #191a1738;border-radius:8px;pointer-events:none;background:var(--lavender);transform:rotate(-2deg) translate(2px,4px)}
.card:after{z-index:-1;background:inherit;transform:none;inset:0}
.card:nth-of-type(even):before{transform:rotate(2deg) translate(-2px,4px);background:#d9d3c3}
.badge-mount{width:31%;aspect-ratio:150/180;flex-shrink:0;padding:7px;background:#30261f;border-radius:11px;outline:1px dashed #eeeae163;outline-offset:-5px;transform:rotate(-3deg);margin:12px 0}
.badge-seal{width:100%;height:100%;aspect-ratio:auto;outline:0;border:0;border-radius:0;box-shadow:none;background:linear-gradient(125deg,var(--badge-color) 5%,#fff 24%,var(--badge-color) 36%,#fff8 52%,#745e38 75%,var(--badge-color) 90%);clip-path:polygon(50% 0,68% 11%,95% 17%,88% 36%,96% 53%,91% 71%,74% 88%,50% 100%,26% 88%,9% 71%,4% 53%,12% 36%,5% 17%,32% 11%)}
.badge-seal:before{inset:5%;border:1px solid #fffc;border-radius:0;clip-path:inherit;background:linear-gradient(165deg,#fff7,var(--badge-color),#fff6);z-index:-1}
.badge-seal.shape-star{clip-path:polygon(50% 0,66% 25%,93% 25%,82% 50%,93% 75%,66% 75%,50% 100%,34% 75%,7% 75%,18% 50%,7% 25%,34% 25%)}
.badge-seal.shape-seal{clip-path:ellipse(48% 48% at 50% 50%)}
.badge-seal.shape-permit{clip-path:inset(5% 4% round 10%)}
.badge-seal svg{width:48%;height:auto;aspect-ratio:1;padding:9%;border:2px solid var(--badge-color);outline:1px solid #fff7;border-radius:50%;background:var(--ink);color:var(--badge-color);position:absolute;top:34%}
.seal-ribbon,.seal-number{position:absolute;background:#eeeae1d9;border:1px solid #191a1780;border-radius:3px;font:900 clamp(5px,1.8cqw,9px)/1.5 monospace;letter-spacing:0;text-align:center;color:var(--ink)}
.seal-ribbon{top:21%;width:78%}.seal-number{bottom:16%;width:47%;font-size:clamp(7px,2.3cqw,12px);letter-spacing:1px}
.badge-slide{padding:6px 15px 0}.badge-slide .badge{transform:rotate(-1deg);box-shadow:4px 5px 0 #d9d3c3,7px 9px 0 #b4a3ce,0 10px 12px #191a1720;margin-bottom:18px}
.badge-body,.permit .badge-body{gap:16px}.badge-holder{padding-top:5px}
@media(max-width:480px){.badge-mount{padding:5px}.badge-body,.permit .badge-body{gap:12px}.badge-top{font-size:6px;letter-spacing:1px}}

/* Entire paper objects, with independently offset sheets beneath them. */
.card{transform:rotate(-.6deg);margin:28px 5px;background:#eeeae1;border-color:#191a1733;border-radius:6px;box-shadow:0 5px 0 #191a171a}
.card:nth-of-type(even){transform:rotate(.7deg)}
.card:before{background:#b4a3ce;transform:rotate(2.6deg) translate(4px,5px)}
.card:nth-of-type(even):before{background:#c8c3b8;transform:rotate(-2.8deg) translate(-3px,5px)}
.card:after{border-radius:6px}.card>h2{font-weight:900}.card .eyebrow{display:inline-block;background:var(--lime);color:var(--ink);padding:4px 8px;font-weight:900;transform:rotate(-1deg)}
.game-jacket{position:relative;isolation:isolate;max-width:480px;margin:22px auto 26px;padding:12px;color:var(--ink)}
.game-jacket:before,.game-jacket:after{content:"";position:absolute;inset:8px;border:1px solid var(--ink);border-radius:7px;background:var(--lime);transform:rotate(-5deg);z-index:-1;pointer-events:none}
.game-jacket:after{background:#eeeae1;transform:rotate(5deg);z-index:-2}
.jacket-front{background:var(--lavender);border:2px solid var(--ink);border-radius:7px;padding:23px;transform:rotate(-2deg)}
.jacket-label{font:900 10px/1.4 monospace;letter-spacing:1px;border-bottom:2px solid var(--ink);padding-bottom:14px;display:flex;justify-content:space-between;gap:10px}
.game-jacket h2{font-size:clamp(32px,6vw,48px);text-transform:uppercase;font-weight:950;line-height:1;letter-spacing:-1.5px;margin:24px 0}
.jacket-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;font:900 11px monospace;text-transform:uppercase}.jacket-footer strong{border:2px solid var(--ink);padding:7px;transform:rotate(-6deg);font-size:10px}
@media(max-width:480px){.game-jacket{margin:16px auto 22px}.jacket-front{padding:18px}.jacket-label{font-size:8px}.jacket-footer{font-size:9px}.jacket-footer strong{font-size:8px}.card{margin:24px 3px}}

/* Shared member portraits: cached art, brief reactions and quiet idle movement. */
.player-avatar{display:inline-block;position:relative;flex:0 0 var(--avatar-size,48px);width:var(--avatar-size,48px);height:var(--avatar-size,48px);vertical-align:middle;background:var(--lavender,#b4a3ce);border-radius:14%;transform:rotate(3deg);isolation:isolate}
.player-avatar img{width:100%;height:100%;box-sizing:border-box;border:4px solid #eeeae1;border-radius:14%;transform:rotate(-6deg);object-fit:cover;display:block;background:#eeeae1}
.player-avatar b{position:absolute;right:-4px;bottom:-4px;background:#c2f627;border:1.5px solid #1a1b17;border-radius:50%;color:#1a1b17;width:1.4em;height:1.4em;display:grid;place-items:center;font-size:clamp(11px,calc(var(--avatar-size,48px)*.2),24px);line-height:1;transform:rotate(-3deg)}
.player-avatar.mood-offline img{filter:saturate(.15)}.player-avatar.mood-offline b{background:#b4a3ce}
.avatar-identity{display:flex;align-items:center;gap:20px;padding:18px;width:100%;text-align:left;background:#eeeae1;color:#1a1b17;box-sizing:border-box;min-height:110px}
.avatar-identity>span:last-child{display:grid;gap:5px}.avatar-identity small{color:#635274;font:700 10px ui-monospace,monospace;letter-spacing:1px}.avatar-identity strong{font-size:21px}.avatar-identity>span>span{font-size:13px}
.party-portraits{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:14px;margin:20px 0}.party-portrait{display:flex;align-items:center;gap:14px;padding:10px;background:#eeeae1;border-radius:12px;color:#1a1b17;min-width:0}.party-portrait:nth-child(2n){transform:rotate(1deg)}.party-portrait strong{overflow-wrap:anywhere}.party-portrait small{display:block;font-size:11px;color:#635274}
.avatar-editor{padding:0;width:min(540px,calc(100vw - 24px));max-width:none;height:min(820px,calc(100dvh - 24px));max-height:none;border:1px solid #45463a;border-radius:24px;background:#1a1b17;color:#eeeae1;overflow:hidden;box-shadow:0 20px 90px #0008;box-sizing:border-box}
.avatar-editor[open]{display:flex;flex-direction:column}.avatar-editor::backdrop{background:#000b;backdrop-filter:blur(5px)}.avatar-editor header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 0;flex-shrink:0}.avatar-editor h2{font-size:25px;margin:4px 0}.avatar-editor small{color:#b4a3ce;font-size:11px}.avatar-editor button{margin:0;min-height:44px}.avatar-editor header button{background:none;color:#eeeae1;border:0}.avatar-editor-hero{display:flex;gap:25px;align-items:center;padding:15px 25px;flex-shrink:0}.avatar-editor-hero>div{display:grid;gap:8px}.avatar-editor-hero strong{font-size:20px}.avatar-editor-hero button{font-size:13px;padding:6px 12px;background:#303128;color:#eeeae1}.avatar-editor nav{display:flex;overflow:auto;gap:8px;padding:8px 20px;flex-shrink:0}.avatar-editor nav button{white-space:nowrap;border-radius:40px;font-size:13px;background:#303128;color:#eeeae1;padding:8px 14px;border:0}.avatar-editor nav [aria-pressed=true],.avatar-parts [aria-pressed=true]{background:#c2f627!important;color:#1a1b17!important;outline:2px solid #c2f627;outline-offset:2px}.avatar-options{overflow:auto;min-height:70px;flex:1;padding:18px 20px}.avatar-parts{display:grid;grid-template-columns:repeat(auto-fit,minmax(80px,1fr));gap:12px}.avatar-parts button{padding:6px;background:#eeeae1;color:#1a1b17;display:flex;flex-direction:column;align-items:center;gap:5px;border:0}.avatar-parts img{width:100%;aspect-ratio:1;max-width:100px;border-radius:8px}.avatar-parts span{font-size:11px;text-transform:capitalize;min-height:28px}.avatar-editor footer{padding:12px 20px 14px;flex-shrink:0;border-top:1px solid #44463a;display:grid;gap:7px}.avatar-editor footer p{font-size:12px;margin:0}.avatar-editor footer button{background:#c2f627;color:#1a1b17;width:100%;font-weight:900}.avatar-editor footer small{text-align:center}.avatar-editor details{margin:0;font-size:10px}.avatar-editor fieldset{border:0;margin:0 0 18px;padding:0}.avatar-editor legend{font-size:14px;font-weight:700;margin-bottom:10px}.avatar-swatches{display:flex;flex-wrap:wrap;gap:10px}.avatar-swatches button{border-radius:50%;width:44px;height:44px;min-height:44px;border:2px solid #eeeae1;padding:0}.avatar-swatches button[aria-pressed=true]{outline:2px solid #eeeae1;outline-offset:2px}
@media(max-height:620px){.avatar-editor-hero{padding:6px 20px}.avatar-editor-hero .player-avatar{--avatar-size:80px!important}.avatar-editor-hero strong{font-size:15px}.avatar-editor header h2{font-size:20px}.avatar-editor footer{padding:8px 20px}.avatar-editor-hero button{min-height:36px}}
/* Cached expression textures. Only transforms/opacity animate, never SVG paths. */
.avatar-art{position:relative;display:block;width:100%;height:100%;box-sizing:border-box;border:4px solid #eeeae1;border-radius:14%;overflow:hidden;transform:rotate(-6deg)}
.player-avatar .avatar-art img{position:absolute;inset:0;border:0;border-radius:0;transform:none;background:none;animation:none}
.avatar-head-rig{position:absolute;inset:0;transform-origin:50% var(--head-pivot,68%)}
.avatar-idle-head,.avatar-idle-body,.avatar-live-face{position:absolute;inset:0}
.avatar-idle-head{transform-origin:50% var(--head-pivot,68%)}
.avatar-idle-body{transform-origin:50% 100%}
.avatar-blink,.avatar-talk{opacity:0}
.player-avatar.mood-offline .avatar-art{filter:saturate(.15)}
.player-avatar.mood-skeptical .avatar-art{transform:rotate(-9deg)}
.player-avatar.mood-defeated .avatar-art{transform:rotate(5deg) translateY(3%)}
.player-avatar:is(.mood-defeated,.mood-skeptical,.mood-nervous) b{background:#b4a3ce}
@media(prefers-reduced-motion:no-preference){
 .avatar-awake .avatar-idle-body{animation:memberBreathing var(--breath-period,6s) ease-in-out calc(2s + var(--idle-delay,1s)) infinite}
 .avatar-awake .avatar-idle-head{animation:memberIdleLook var(--look-period,11s) ease-in-out calc(2s + var(--idle-delay,1s)) infinite}
 .avatar-awake .avatar-live-face{animation:memberIdleEyes var(--blink-period,5s) steps(1,end) var(--idle-delay,1s) infinite}
 .player-avatar.avatar-awake .avatar-blink{animation:memberIdleBlink var(--blink-period,5s) steps(1,end) var(--idle-delay,1s) infinite}
 .avatar-react .avatar-art{animation:memberHop .65s cubic-bezier(.25,1.3,.4,1)}
 .avatar-react.mood-winner .avatar-art{animation-iteration-count:2}
 .avatar-react:is(.mood-skeptical,.mood-defeated,.mood-nervous) .avatar-art{animation:none}
 .avatar-react .avatar-head-rig{animation:memberNod .72s ease-in-out}
 .avatar-react.mood-winner .avatar-head-rig{animation-iteration-count:2}
 .avatar-react.mood-buzz .avatar-head-rig{animation:memberStartle .6s ease-out}
 .avatar-react.mood-defeated .avatar-head-rig{animation:memberSigh .8s ease-out}
 .player-avatar.avatar-react .avatar-body{animation:memberSquash .72s ease-out;transform-origin:50% 100%}
 .player-avatar.avatar-react.mood-speaking .avatar-face{animation:memberTalkingRest 2s linear}
 .player-avatar.avatar-react.mood-speaking .avatar-talk{animation:memberTalking 2s linear}
 @keyframes memberBreathing{0%,75%,100%{transform:scaleY(1)}38%{transform:scaleY(1.012)}}
 @keyframes memberIdleLook{0%,30%,82%,100%{transform:rotate(0) translateY(0)}47%,60%{transform:rotate(var(--idle-angle,1.8deg)) translateY(-.3%)}}
 @keyframes memberIdleEyes{0%,44%,100%{opacity:1}42%{opacity:0}}
 @keyframes memberIdleBlink{0%,44%,100%{opacity:0}42%{opacity:1}}
 @keyframes memberHop{0%,100%{transform:rotate(-6deg) translateY(0)}18%{transform:rotate(-4deg) translateY(2%) scaleY(.97)}48%{transform:rotate(1deg) translateY(-8%)}75%{transform:rotate(-7deg) translateY(1%)}}
 @keyframes memberNod{0%,100%{transform:rotate(0)}18%{transform:rotate(3deg) translateY(1%)}50%{transform:rotate(-6deg)}78%{transform:rotate(2deg)}}
 @keyframes memberStartle{20%{transform:rotate(-10deg)}48%{transform:rotate(5deg)}80%{transform:rotate(-2deg)}}
 @keyframes memberSigh{0%,100%{transform:rotate(0)}45%{transform:rotate(7deg) translateY(3%)}}
 @keyframes memberSquash{0%,100%{transform:scaleY(1)}18%{transform:scale(1.025,.96)}48%{transform:scale(1,1.02)}}
 @keyframes memberTalkingRest{0%,9.9%,22%,31.9%,44%,53.9%,66%,100%{opacity:1}10%,21.9%,32%,43.9%,54%,65.9%{opacity:0}}
 @keyframes memberTalking{0%,9.9%,22%,31.9%,44%,53.9%,66%,100%{opacity:0}10%,21.9%,32%,43.9%,54%,65.9%{opacity:1}}
}
/* Party expressions: character cameos, temporary costumes, no blocking stage UI. */
.reaction-open{flex:none!important;font-size:15px;padding:10px 14px;min-height:44px;background:var(--lime,#c2f627);color:#1a1b17}
.wardrobe-open{display:flex;align-items:center;justify-content:space-between;gap:14px;width:100%;background:#b4a3ce;color:#1a1b17;text-align:left;font-size:16px}
.wardrobe-open span{font-size:13px;font-weight:500}
.party-expression-dialog{box-sizing:border-box;width:min(94vw,520px);max-height:88dvh;overflow:auto;border:2px solid #eeeae1;border-radius:18px;background:#1a1b17;color:#eeeae1;padding:22px;box-shadow:8px 10px 0 #b4a3ce}
.party-expression-dialog::backdrop{background:#000b;backdrop-filter:blur(5px)}
.party-expression-dialog header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}
.party-expression-dialog header small{font:700 10px monospace;letter-spacing:1px;color:#b4a3ce}
.party-expression-dialog h2{font-size:22px;margin:6px 0}.party-expression-dialog header button{min-width:44px;min-height:44px;background:#eeeae1;color:#1a1b17}
.party-expression-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.party-expression-options button{margin:0;display:flex;flex-direction:column;align-items:center;gap:8px;background:#eeeae1;color:#1a1b17;border:2px solid #1a1b17;border-radius:9px;box-shadow:3px 4px 0 #b4a3ce;transform:rotate(-1.5deg);padding:15px 8px;min-width:0}
.party-expression-options button:nth-child(even){transform:rotate(1.5deg)}
.party-expression-options .reaction-choice{background:#c2f627;font-size:17px}.party-expression-options [data-reaction=really],.party-expression-options [data-reaction=boo]{background:#b4a3ce}
.party-expression-options .wardrobe-choice[aria-pressed=true]{background:#c2f627}.wardrobe-choice small{font-size:12px;color:#45453d}
.expression-status{font-size:13px;color:#b4a3ce;min-height:20px;margin:18px 0 0}
.party-expression-options .wardrobe-choice[data-look=off-duty]{grid-column:1/-1;display:grid;grid-template-columns:44px 1fr;text-align:left;gap:3px 14px;padding:10px 14px;transform:rotate(-.5deg)}
.wardrobe-choice[data-look=off-duty] .player-avatar{--avatar-size:44px!important;grid-row:1/3}.wardrobe-choice[data-look=off-duty] strong,.wardrobe-choice[data-look=off-duty] small{justify-self:start}
/* Cutouts opt in explicitly; membership cards elsewhere keep their frames. */
[data-stage=true],[data-stage=true] .avatar-art,[data-stage=true] img{background:transparent!important;border:0;border-radius:0;box-shadow:none;transform:none;overflow:visible}[data-stage=true]>b{display:none}.avatar-stage-legs{position:absolute;inset:0;transform-origin:50% 58%}[data-stage=true] .avatar-idle-body{transform-origin:50% 65%}
.party-reaction-stage{position:fixed;bottom:110px;left:0;width:100%;height:310px;z-index:30;pointer-events:none;overflow:hidden;--thought-stock:var(--genre-acid,#c2f627)}
.reaction-cameo{position:absolute;width:330px;height:300px;bottom:0;right:0;--entry-x:330px;--entry-y:60px}.reaction-cameo[data-side=left]{left:0;right:auto;--entry-x:-330px}.reaction-cameo[data-side=bottom]{left:calc(50% - 165px);right:auto;--entry-x:0px;--entry-y:310px}
.reaction-cameo>.player-avatar{position:absolute;right:0;bottom:0}.reaction-cameo[data-side=left]>.player-avatar{right:auto;left:0}.reaction-thought{display:flex;flex-direction:column;justify-content:center;position:absolute;top:10px;left:12px;min-height:68px;width:200px;padding:12px 16px;box-sizing:border-box;background:var(--thought-stock,#c2f627);border:3px solid #1a1b17;color:#1a1b17;border-radius:28px;box-shadow:3px 4px #1a1b17bb;transform:rotate(-4deg)}
.reaction-cameo[data-side=left]>.reaction-thought{left:auto;right:12px;transform:rotate(4deg)}.reaction-thought:after,.reaction-thought:before{content:'';position:absolute;right:25px;bottom:-19px;width:14px;height:14px;border:2px solid #1a1b17;background:var(--thought-stock,#c2f627);border-radius:50%}.reaction-thought:after{bottom:-32px;right:18px;width:7px;height:7px;border-width:1.5px}.reaction-cameo[data-side=left]>.reaction-thought:before{right:auto;left:25px}.reaction-cameo[data-side=left]>.reaction-thought:after{right:auto;left:18px}
.reaction-thought strong{font:950 25px/1.1 system-ui;white-space:nowrap}.reaction-thought small{font:900 10px monospace;color:#1a1b17;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin-bottom:5px}.reaction-boo,.reaction-really{--thought-stock:var(--genre-blue,#b4a3ce)}
.party-expression-options .reaction-choice{position:relative;background:transparent!important;border:0;box-shadow:none;height:176px;padding:0;transform:none!important;overflow:hidden}.reaction-choice .player-avatar{position:absolute;bottom:0;right:4px}.reaction-choice .reaction-thought{top:0;left:0;width:136px;min-height:46px;padding:9px 12px}.reaction-choice .reaction-thought strong{font-size:16px}.reaction-choice[data-reaction=really],.reaction-choice[data-reaction=boo]{--thought-stock:#b4a3ce}.reaction-choice:focus-visible{outline:2px solid #c2f627;outline-offset:0}
@media(prefers-reduced-motion:no-preference){.reaction-cameo{animation:cameo-enter .42s cubic-bezier(.15,1.2,.3,1) both}.reaction-cameo.leaving{animation:cameo-exit .28s ease-in forwards}.reaction-cameo .avatar-awake .avatar-idle-body{animation:cameo-sway 1s ease-in-out infinite}.reaction-cameo .avatar-awake .avatar-stage-legs{animation:cameo-legs 1s ease-in-out infinite}.reaction-cameo .avatar-awake .avatar-idle-head{animation:cameo-nod .8s ease-in-out infinite}.reaction-laugh .avatar-awake .avatar-idle-head{animation-duration:.4s}.reaction-cheer .avatar-awake{animation:cameo-hop .7s ease-in-out infinite}.oddio-paused .oddio-finale,.oddio-hidden .oddio-finale{animation-play-state:paused}@keyframes cameo-enter{from{opacity:0;transform:translate(var(--entry-x),var(--entry-y))}to{opacity:1;transform:translate(0,0)}}@keyframes cameo-exit{to{opacity:0;transform:translate(var(--entry-x),var(--entry-y))}}@keyframes cameo-sway{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}@keyframes cameo-legs{0%,100%{transform:rotate(3deg)}50%{transform:rotate(-3deg)}}@keyframes cameo-nod{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(6deg)}}@keyframes cameo-hop{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}}
@media(max-width:700px){.wardrobe-open{flex-direction:column;align-items:flex-start;gap:4px}.party-reaction-stage{bottom:60px;height:245px}.reaction-cameo{width:260px;height:240px}.reaction-cameo:not(:last-child){display:none}.reaction-cameo:last-child{left:auto;right:0}.reaction-cameo>.player-avatar{--avatar-size:200px!important}.reaction-cameo .reaction-thought{width:170px;left:6px;right:auto;min-height:62px}.reaction-thought strong{font-size:21px}.party-expression-dialog{padding:18px}.wardrobe-choice .player-avatar{--avatar-size:112px!important}}
/* The garment rig keeps original textures; elbows and knees inherit their parent joint. */
.avatar-jointed-rig,.rig-joint,.rig-piece{position:absolute;inset:0}.rig-cap{position:absolute;border-radius:50%;transform:translate(-50%,-50%)}[data-stage=true].avatar-react .avatar-art{animation:none}
@media(prefers-reduced-motion:no-preference){
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-arm{animation:rig-arm-l 5.6s ease-in-out infinite;animation-delay:var(--fan-delay,0s)}
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-arm.rig-right{animation-name:rig-arm-r}
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-elbow{animation:rig-elbow-l 1.4s ease-in-out infinite;animation-delay:var(--fan-delay,0s)}
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-right>.rig-elbow{animation-name:rig-elbow-r}
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-leg{animation:rig-leg-l 1.4s ease-in-out infinite;animation-delay:var(--fan-delay,0s)}
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-leg.rig-right{animation-name:rig-leg-r}
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-knee{animation:rig-knee-l 1.4s ease-in-out infinite;animation-delay:var(--fan-delay,0s)}
 :is(.grooving,.oddio-stage-person,.reaction-cameo) .avatar-awake .rig-right>.rig-knee{animation-name:rig-knee-r}
 .reaction-cheer .avatar-awake .rig-arm{animation:rig-pump-l .7s ease-in-out infinite}.reaction-cheer .avatar-awake .rig-arm.rig-right{animation-name:rig-pump-r}
 .reaction-laugh .avatar-awake .rig-arm{animation:none;transform:rotate(-3deg)}.reaction-laugh .avatar-awake .rig-arm.rig-right{transform:rotate(3deg)}
 .reaction-laugh .avatar-awake .rig-elbow{animation:rig-clap-l .55s ease-in-out infinite}.reaction-laugh .avatar-awake .rig-right>.rig-elbow{animation-name:rig-clap-r}
 .reaction-really .avatar-awake .rig-arm{animation:none;transform:rotate(32deg)}.reaction-really .avatar-awake .rig-arm.rig-right{transform:rotate(-62deg)}
 .reaction-really .avatar-awake .rig-right>.rig-elbow{animation:rig-shrug 1s ease-in-out infinite}
 .reaction-boo .avatar-awake .rig-arm{animation:rig-shrug-arm 1.4s ease-in-out infinite}.reaction-boo .avatar-awake .rig-arm.rig-right{animation-direction:reverse}
 @keyframes rig-arm-l{0%,100%{transform:rotate(20deg)}20%,35%{transform:rotate(125deg)}50%,65%{transform:rotate(-3deg)}80%{transform:rotate(145deg)}}
 @keyframes rig-arm-r{0%,100%{transform:rotate(-25deg)}20%,35%{transform:rotate(-130deg)}50%,65%{transform:rotate(3deg)}80%{transform:rotate(-20deg)}}
 @keyframes rig-elbow-l{0%,100%{transform:rotate(-32deg)}50%{transform:rotate(-68deg)}}
 @keyframes rig-elbow-r{0%,100%{transform:rotate(32deg)}50%{transform:rotate(68deg)}}
 @keyframes rig-leg-l{0%,50%,100%{transform:rotate(0)}25%{transform:rotate(20deg)}75%{transform:rotate(-20deg)}}
 @keyframes rig-leg-r{0%,50%,100%{transform:rotate(0)}25%{transform:rotate(-20deg)}75%{transform:rotate(20deg)}}
 @keyframes rig-knee-l{0%,50%,100%{transform:rotate(0)}25%{transform:rotate(-38deg)}}
 @keyframes rig-knee-r{0%,50%,100%{transform:rotate(0)}75%{transform:rotate(38deg)}}
 @keyframes rig-pump-l{0%,100%{transform:rotate(115deg)}50%{transform:rotate(143deg)}}
 @keyframes rig-pump-r{0%,100%{transform:rotate(-115deg)}50%{transform:rotate(-143deg)}}
 @keyframes rig-clap-l{0%,100%{transform:rotate(-36deg)}50%{transform:rotate(-61deg)}}
 @keyframes rig-clap-r{0%,100%{transform:rotate(36deg)}50%{transform:rotate(61deg)}}
 @keyframes rig-shrug{0%,100%{transform:rotate(88deg)}50%{transform:rotate(112deg)}}
 @keyframes rig-shrug-arm{0%,100%{transform:rotate(16deg)}50%{transform:rotate(30deg)}}
}
