.raffle-stage{position:relative;isolation:isolate;overflow:hidden;display:grid;justify-items:center;gap:12px;padding:clamp(18px,3vh,36px);border:1px solid #ffffff25;border-radius:24px;background:radial-gradient(ellipse at 50% 0,#193e50,transparent 65%),#080f1e;color:#f5f7ff;text-align:center;font-family:system-ui,sans-serif}
.raffle-eyebrow{font-size:clamp(15px,2.5vh,26px);font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:#f8cf65}
.raffle-caption{font-size:clamp(12px,1.8vh,20px);color:#b5c6d9}
.raffle-stage-status{min-height:1.4em;font-size:clamp(15px,2.4vh,26px);font-weight:700}
.raffle-grid{display:grid;grid-template-columns:repeat(var(--raffle-columns,9),minmax(0,1fr));gap:clamp(3px,.6vh,8px);width:min(100%,760px)}
.raffle-ticket{display:grid;place-items:center;min-height:clamp(22px,3.5vh,42px);border:1px solid #ffffff1a;border-radius:6px;background:#ffffff08;color:#95a9c1;font-size:clamp(12px,2vh,22px);font-weight:700;font-variant-numeric:tabular-nums;transition:background .12s,transform .12s}
.raffle-ticket-owned{border-color:hsl(var(--ticket-hue) 45% 40%);background:hsl(var(--ticket-hue) 35% 17%)}
.raffle-ticket-winner{background:#6b511b;color:#ffe5a0;border-color:#f8cf65}
.raffle-ticket-active{position:relative;z-index:1;transform:scale(1.18);background:#f8cf65;color:#111827;box-shadow:0 0 24px #f8cf6580;border-color:#fff0bc}
.raffle-stage .raffle-ball{display:grid;place-items:center;width:clamp(64px,10vh,110px);height:clamp(64px,10vh,110px);border-radius:24px;background:#f8cf65;color:#111827;font-size:clamp(34px,6vh,64px);font-weight:900;box-shadow:0 0 50px #f8cf6520;animation:none}
.raffle-owner{font-size:clamp(24px,4.5vh,56px);font-weight:900;line-height:1.1;overflow-wrap:anywhere}
.raffle-stage-won .raffle-owner{position:relative;width:min(100%,860px);padding:1.8vh 2vw;border:1px solid #f8cf6566;border-radius:22px;background:linear-gradient(135deg,#8d652637,#f8cf6510);box-shadow:0 0 60px #f8cf6515;animation:raffle-arrive .8s cubic-bezier(.2,.8,.2,1) both}
.raffle-stage-won .raffle-owner:before{content:"🏆";display:block;font-size:clamp(36px,7vh,80px);line-height:1.2;margin-bottom:.5vh}
.raffle-winner-label{display:block;color:#f8cf65;font-size:clamp(12px,1.7vh,20px);text-transform:uppercase;letter-spacing:.22em;margin-bottom:1vh}
.raffle-winner-name{display:block;font-size:clamp(26px,5.4vh,72px);line-height:1.08;color:#fff7dc;text-shadow:0 2px 24px #f8cf6540}
.raffle-stage-won .raffle-grid{max-height:22vh;opacity:.75;gap:3px}
.raffle-stage-won .raffle-ticket{min-height:0;font-size:clamp(10px,1.6vh,16px)}
.raffle-stage-won .raffle-stage-status{color:#f8cf65}
.raffle-stage-won .raffle-ball{box-shadow:0 0 0 8px #f8cf6514,0 0 65px #f8cf6550}
.raffle-celebrating:before{content:"";position:absolute;inset:-70%;z-index:-1;background:repeating-conic-gradient(from 0deg,#f8cf6512 0deg 8deg,transparent 8deg 24deg);animation:raffle-rays 18s linear infinite;pointer-events:none}
.raffle-celebrating .raffle-owner:before{animation:raffle-trophy 1s cubic-bezier(.2,.8,.2,1) both}
.raffle-confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:3}
.raffle-confetti i{position:absolute;left:var(--origin);top:65%;width:9px;height:17px;border-radius:2px;background:hsl(var(--hue) 90% 65%);animation:raffle-burst 4.8s var(--delay) cubic-bezier(.15,.65,.55,1) both}
.raffle-confetti i:nth-child(3n){width:7px;height:7px;border-radius:50%}
.raffle-confetti i:nth-child(5n){background:#ffe4a0;width:6px;height:24px}
@keyframes raffle-burst{0%{transform:translate3d(0,0,0) rotate(0);opacity:0}3%{opacity:1}28%{transform:translate3d(var(--mid),var(--rise),0) rotate(180deg);opacity:1}100%{transform:translate3d(var(--dx),65vh,0) rotate(var(--spin));opacity:0}}
@keyframes raffle-rays{to{transform:rotate(90deg)}}
@keyframes raffle-trophy{0%{transform:scale(.3) rotate(-16deg);opacity:0}65%{transform:scale(1.2) rotate(6deg)}100%{transform:scale(1) rotate(0);opacity:1}}
@keyframes raffle-arrive{from{opacity:0;transform:translateY(18px) scale(.92)}to{opacity:1;transform:none}}
#raffle-panel.raffle-expanded{position:fixed;inset:0;z-index:10000;margin:0;overflow:auto;background:#080f1e;padding:16px;border-radius:0}
.raffle-drawing #raffle-history{visibility:hidden}

.raffle-sound{position:absolute;top:10px;right:10px;border:1px solid #ffffff40;border-radius:50%;background:#16283b;color:#f8cf65;width:32px;height:32px;cursor:pointer}
.raffle-sound[aria-pressed=true]{background:#f8cf65;color:#080f1e}
.raffle-expanded #raffle-ranges,.raffle-expanded #raffle-history{display:none}
#raffle-panel.raffle-expanded{height:100dvh;box-sizing:border-box;display:flex;flex-direction:column;gap:8px;padding:8px}
.raffle-expanded .raffle-stage{flex:1;min-height:0;align-content:center;gap:8px;padding:12px}
.raffle-expanded .raffle-grid{height:min(40dvh,420px);grid-template-rows:repeat(var(--raffle-rows,8),minmax(0,1fr))}
.raffle-expanded .raffle-ticket{min-height:0;font-size:clamp(10px,1.9dvh,20px)}
.raffle-expanded .raffle-owner{font-size:clamp(20px,3.5dvh,40px)}
.raffle-expanded .raffle-bounds{display:none}
.raffle-expanded .raffle-stage .raffle-ball{width:8dvh;height:8dvh;font-size:5dvh;border-radius:16px}
@media(max-height:600px){.raffle-expanded .raffle-grid{height:30dvh}.raffle-expanded .raffle-stage{gap:3px}.raffle-expanded .raffle-caption{font-size:11px}}
#raffle-panel.raffle-expanded{color:#f5f7ff}
.raffle-expanded>.raffle-expand,.raffle-expanded>a{align-self:center;padding:5px 14px;border:1px solid #ffffff25;border-radius:20px;background:#152335;color:#cbd9ea;font:600 12px system-ui;text-decoration:none}
.raffle-expanded .raffle-draw-button{width:100%;padding:9px;border:0;border-radius:12px;background:#f8cf65;color:#101827;font-weight:800}

.raffle-expanded .raffle-stage-won .raffle-grid{height:18dvh;max-height:18dvh}
.raffle-expanded .raffle-stage-won .raffle-owner{padding:1.2vh 2vw}
.raffle-expanded .raffle-winner-name{font-size:clamp(24px,4.6dvh,54px)}
@media(max-height:600px){.raffle-stage-won .raffle-owner:before{font-size:28px}.raffle-winner-name{font-size:24px}.raffle-stage-won .raffle-owner{padding:8px}.raffle-winner-label{margin-bottom:4px}}
.raffle-projector-controls{display:grid;gap:8px;padding:12px;border:1px solid #7893ad55;border-radius:12px}
.raffle-projector-buttons{display:flex;gap:8px;flex-wrap:wrap}
.raffle-projector-buttons button{flex:1;padding:10px 12px;border:1px solid #7893ad88;border-radius:10px;cursor:pointer}
.raffle-projector-buttons button[aria-pressed=true]{background:#f8cf65;color:#101827;border-color:#f8cf65;font-weight:800}
.raffle-projector-controls p{margin:0;font-size:12px;line-height:1.4}
.raffle-expanded .raffle-projector-controls{padding:8px;gap:5px}
.raffle-expanded .raffle-projector-controls strong{display:none}
.raffle-expanded .raffle-projector-buttons button{padding:6px 8px}
.raffle-candidate{min-height:1.25em;max-width:100%;font-size:clamp(20px,3.4vh,42px);font-weight:750;color:#dceaff;line-height:1.15;overflow-wrap:anywhere}
.raffle-candidate[hidden]{display:none}
.raffle-expanded .raffle-candidate{font-size:clamp(18px,2.8dvh,30px)}
.raffle-expanded:has(.raffle-projector-controls) .raffle-grid{height:min(28dvh,320px)}
.raffle-expanded:has(.raffle-projector-controls) .raffle-stage-won .raffle-grid{height:18dvh}
