@import"https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700;800&family=Noto+Sans+SC:wght@400;500;700;900&display=swap";*{box-sizing:border-box}html,body,#app{margin:0;width:100%;height:100%;overflow:hidden}button,input{font:inherit}.screen-shell{--gold: #ffd78a;--red: #ff3159;position:relative;width:100%;height:100%;min-width:960px;color:#fff;background:#08060b url(/gala-bg.png?v=20260918-compressed) center/cover no-repeat;font-family:Noto Sans SC,sans-serif;overflow:hidden}.screen-shell:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 38%,transparent 0 26%,rgba(5,3,8,.34) 70%),linear-gradient(180deg,#07040a33,#07040abd);pointer-events:none}.grid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,215,138,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,215,138,.035) 1px,transparent 1px);background-size:56px 56px;-webkit-mask-image:linear-gradient(to bottom,transparent,#000 35%,#000);mask-image:linear-gradient(to bottom,transparent,#000 35%,#000)}.aurora{position:absolute;width:48vw;height:48vw;border-radius:50%;filter:blur(90px);opacity:.18;animation:float 9s ease-in-out infinite}.a1{left:-15vw;top:-18vw;background:#ff264f}.a2{right:-18vw;bottom:-22vw;background:#ff9a30;animation-delay:-4s}@keyframes float{50%{transform:translate3d(5vw,3vw,0) scale(1.15)}}header{height:17vh;position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.eyebrow{font:600 clamp(10px,1vw,16px) Montserrat;letter-spacing:.55em;color:var(--gold);opacity:.78;margin-bottom:1vh}h1{max-width:94vw;font-size:clamp(20px,2.05vw,38px);line-height:1.15;letter-spacing:.05em;margin:0;white-space:nowrap;text-shadow:0 0 35px rgba(255,124,58,.35)}.live-pill{position:absolute;right:4vw;top:5.2vh;color:#d7c8c6;font-size:14px}.live-pill span,.foot-status span{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:9px;background:#ffb13c;box-shadow:0 0 14px #ffb13c}.lifecycle-banner{position:absolute;z-index:4;top:13.5vh;left:50%;transform:translate(-50%);padding:9px 18px;border:1px solid rgba(255,209,138,.32);border-radius:999px;color:#ffe5b8;background:#701927db;font-size:14px}.readonly-banner{position:absolute;z-index:6;top:19vh;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:66vw;padding:12px 16px;border:1px solid rgba(255,255,255,.22);border-radius:999px;color:#e8ecf5;background:#121620e0;font-size:13px;line-height:1.5}.readonly-banner b{color:#ffd479}.readonly-banner button{flex:none;padding:6px 14px;border:1px solid rgba(255,212,121,.5);border-radius:999px;color:#ffd479;background:#ffd4791f;font-size:13px;cursor:pointer}.readonly-banner button:hover{background:#ffd47938}.fatal-banner{position:absolute;z-index:6;top:19vh;left:50%;transform:translate(-50%);max-width:62vw;padding:14px 22px;border:1px solid rgba(255,138,138,.45);border-radius:14px;color:#ffd9d9;background:#781212eb;font-size:15px;line-height:1.6;text-align:center}.stage{position:relative;z-index:3;width:clamp(650px,62vw,880px);height:62vh;margin:0 auto;display:grid;grid-template-columns:minmax(280px,.88fr) minmax(350px,1.12fr);gap:clamp(10px,1.2vw,22px);isolation:isolate}.stage.density-ultra,.stage.density-max{width:clamp(650px,38vw,720px);grid-template-columns:minmax(280px,.88fr) minmax(350px,1.12fr)}.avatar-wall{position:absolute;z-index:1;top:12.5vh;left:0;width:100%;height:75.5vh;overflow:hidden;pointer-events:none;perspective:1400px}.participant-wall{position:absolute;top:0;width:calc((100vw - clamp(650px,62vw,880px))/2 - 1.2vw);height:100%;display:flex;align-items:stretch;justify-content:center;overflow:visible;transform-style:preserve-3d}.avatar-wall.density-ultra .participant-wall,.avatar-wall.density-max .participant-wall{width:calc((100vw - clamp(650px,38vw,720px))/2 - 1.2vw)}.wall-left{left:1.2vw}.wall-right{right:1.2vw}.wall-column{flex:1 1 0;min-width:0;height:100%;padding:0 calc(var(--wall-gap) / 2);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--wall-gap);opacity:var(--column-opacity);transform:scale(var(--column-scale));transform-origin:center;transform-style:preserve-3d;transition:transform .5s ease,opacity .5s ease}.wall-person{--wall-size: var(--wall-tile);width:var(--wall-size);flex:0 0 var(--wall-size);padding:3px 3px 4px;border:1px solid rgba(255,220,167,.2);border-radius:7px 7px 10px 10px;color:#f8e8db;background:linear-gradient(155deg,#461c25db,#10090deb);box-shadow:0 7px 18px #1203085c,inset 0 1px #ffffff14;text-align:center;transform-style:preserve-3d;animation:wallReveal .55s both;animation-delay:var(--entry-delay);margin-bottom:var(--wall-row-overlap)}.wall-person:last-child{margin-bottom:0}.wall-avatar{width:100%;aspect-ratio:1;padding:1px;border-radius:5px;background:linear-gradient(145deg,#f8d995,#9a5b2c);overflow:hidden;transform-style:preserve-3d;backface-visibility:hidden}.wall-avatar img,.wall-avatar span{width:100%;height:100%;display:grid;place-items:center;border-radius:4px;object-fit:cover;color:#f7dca8;background:#35151e;font-size:calc(var(--wall-size) * .38);font-weight:800;-webkit-user-select:none;user-select:none}.wall-person.placeholder{border-color:#ffd38c1a;background:#23111770;box-shadow:inset 0 0 8px #ffbe5c0f}.wall-person.placeholder .wall-avatar{padding:0;border:1px solid rgba(255,216,150,.1);background:#ffd28b06}.wall-person.placeholder .wall-placeholder{border-radius:3px;background:radial-gradient(circle at 50% 46%,rgba(255,218,151,.34) 0 8%,transparent 10%),linear-gradient(145deg,#ffcd7d12,#3a141c24)}.wall-person b,.wall-person small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wall-person b{margin-top:3px;font-size:clamp(8px,.58vw,11px);font-weight:600}.wall-person small{margin-top:1px;color:#a9938b;font:500 clamp(6px,.44vw,8px) Montserrat}.density-medium .wall-person{padding:2px 2px 3px;border-radius:6px}.density-high .wall-person,.density-ultra .wall-person,.density-max .wall-person{padding:1px;border-radius:4px}.density-high .wall-person b,.density-high .wall-person small,.density-ultra .wall-person b,.density-ultra .wall-person small,.density-max .wall-person b,.density-max .wall-person small{display:none}.wall-idle .wall-avatar{animation:avatarBreathe var(--breath-duration) ease-in-out var(--breath-delay) infinite alternate}.wall-person.newest{z-index:2;border-color:#ffdc94f2;box-shadow:0 0 32px #ffad46cc,inset 0 1px #ffffff2e}.wall-person.newest .wall-avatar{animation:avatarArrival .9s cubic-bezier(.2,.85,.3,1.25) 2 alternate;will-change:transform,filter}.wall-drawing .wall-avatar{animation:avatarFlip .78s linear var(--wave-delay) infinite;backface-visibility:hidden;will-change:transform,filter}.wall-winner .wall-avatar{animation:avatarSettle .58s cubic-bezier(.18,.86,.32,1.18) var(--wave-delay) both}@keyframes wallReveal{0%{opacity:0;transform:translateY(12px) scale(.7)}to{opacity:1;transform:none}}@keyframes avatarBreathe{0%{opacity:.58;transform:scale(.78) translateZ(-10px);filter:brightness(.62) saturate(.78)}to{opacity:1;transform:scale(1) translateZ(8px);filter:brightness(1.32) saturate(1.08)}}@keyframes avatarArrival{0%{transform:scale(.35) translateZ(-80px);filter:brightness(2.2)}to{transform:scale(1.14) translateZ(36px);filter:brightness(1.16)}}@keyframes avatarFlip{0%{transform:rotateX(0) scale(.96);filter:brightness(.9)}45%{transform:rotateX(162deg) scale(.72);filter:brightness(1.8)}to{transform:rotateX(360deg) scale(.96);filter:brightness(.9)}}@keyframes avatarSettle{0%{transform:scale(.6);filter:brightness(2)}55%{transform:scale(1.14);filter:brightness(1.3)}to{transform:scale(1);filter:brightness(1)}}.glass{border:1px solid rgba(255,214,157,.24);background:linear-gradient(135deg,#2e101dd6,#120a14cc);box-shadow:inset 0 1px #ffffff0f,0 26px 70px #0000005c;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.prize-card,.result-card{position:relative;z-index:2;border-radius:24px;overflow:hidden}.prize-card{z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;text-align:center;padding:clamp(12px,1.6vh,20px) clamp(18px,1.8vw,30px) clamp(16px,2vh,24px)}.card-label{align-self:stretch;font:700 11px Montserrat;letter-spacing:.36em;color:#cba78d}.prize-level-row{width:100%;display:grid;grid-template-columns:40px minmax(0,1fr) 40px;align-items:center;gap:clamp(5px,.5vw,10px)}.level{color:var(--gold);min-width:0;font-size:clamp(21px,1.55vw,28px);font-weight:900;line-height:1.2;letter-spacing:.2em;padding-left:.2em;white-space:nowrap}.prize-card h2{font-size:clamp(23px,1.8vw,34px);line-height:1.15;margin:0}.inventory{color:#baa8a5;font-size:15px}.inventory b{color:#fff;font:700 22px Montserrat}.arrow{display:grid;place-items:center;width:40px;height:40px;padding:0;border-radius:50%;border:1px solid rgba(255,215,138,.4);background:#ffffff0a;color:var(--gold);cursor:pointer;outline:none;transition:background .2s ease,border-color .2s ease,box-shadow .2s ease,transform .15s ease}.arrow:before{content:"";width:9px;height:9px;border:solid currentColor;border-width:0 2px 2px 0}.arrow:hover{background:#ffd78a1f;border-color:#ffd78ad1;box-shadow:0 0 16px #ffbe5c24}.arrow:active{transform:translateY(1px) scale(.95)}.arrow:focus-visible{border-color:var(--gold);box-shadow:0 0 0 3px #ffd78a33}.arrow.left:before{transform:translate(1px) rotate(135deg)}.arrow.right:before{transform:translate(-1px) rotate(-45deg)}.counter{display:flex;justify-content:center;align-items:center;gap:16px;margin:0}.counter button{width:35px;height:35px;border:1px solid rgba(255,215,138,.25);border-radius:10px;color:#fff;background:#ffffff0d;cursor:pointer}.counter strong{font:700 24px Montserrat;min-width:44px}.draw-button{position:relative;width:min(260px,80%);height:52px;border:0;border-radius:16px;color:#35120d;background:linear-gradient(100deg,#b9782f,#ffe8ad 50%,#c6883d);box-shadow:0 10px 35px #ffa23d3d;font-size:20px;font-weight:900;letter-spacing:.18em;cursor:pointer;overflow:hidden}.draw-button:after{content:"";position:absolute;inset:-50%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.8),transparent);transform:translate(-70%) rotate(20deg);animation:shine 3s infinite}.draw-button span{position:relative;z-index:1}.draw-button.active{color:#fff;background:linear-gradient(100deg,#971c32,#ff3159,#971c32);box-shadow:0 0 40px #ff315959}@keyframes shine{60%,to{transform:translate(70%) rotate(20deg)}}.result-card{padding:3.2vh 2.6vw}.result-head{display:flex;justify-content:space-between;align-items:center;color:#c7aaa3;font:600 12px Montserrat;letter-spacing:.22em;border-bottom:1px solid rgba(255,255,255,.08);padding-bottom:2vh}.result-head b{font:500 16px Noto Sans SC;letter-spacing:0;color:#fff}.join-panel,.rolling,.winner-board{height:calc(100% - 4vh);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.qr-placeholder{width:min(18vw,220px);aspect-ratio:1;background:#fff;border-radius:16px;padding:14px;box-shadow:0 0 50px #ffcd822e;position:relative}.qr-placeholder span{position:absolute;inset:0;display:grid;place-items:center;color:#151019;font-size:15px;font-weight:900;background:#ffffffd6;margin:36%;border-radius:6px;white-space:nowrap}.qr-grid{width:100%;height:100%;background:repeating-conic-gradient(#131018 0 25%,#fff 0 50%) 0/22px 22px}.join-panel h3{font-size:clamp(22px,2vw,36px);margin:2vh 0 .5vh}.join-default h3{font-size:clamp(22px,1.7vw,31px);line-height:1.25;letter-spacing:.08em;text-wrap:balance}.join-default h3 span{display:block;white-space:nowrap}.join-default h3 span+span{margin-top:.12em}.join-panel p{color:#bba8a6;margin:0}.rolling{position:relative}.rolling .scan{position:absolute;z-index:3;top:24%;left:10%;right:10%;height:2px;background:linear-gradient(90deg,transparent,var(--gold),transparent);box-shadow:0 0 18px var(--gold);animation:scan 1.2s ease-in-out infinite alternate}.rolling.settling .scan{opacity:0;animation:none}@keyframes scan{0%{transform:translateY(0)}to{transform:translateY(28vh)}}.rolling small{color:var(--gold);letter-spacing:.5em;margin-left:.5em}.rolling-avatar-shell{width:clamp(112px,11vw,176px);aspect-ratio:1;margin:2.2vh 0 1.2vh;padding:5px;border-radius:28%;background:linear-gradient(145deg,#fff0bc,#be6e2c 60%,#7f2630);box-shadow:0 0 70px #ff7e4152,0 18px 42px #00000052;animation:rollingAvatarSwap .12s ease-out both}.rolling.settling .rolling-avatar-shell{transform:scale(1.04);box-shadow:0 0 90px #ffc4666b,0 18px 42px #00000052;animation:none}.rolling-avatar{width:100%;height:100%;overflow:hidden;border-radius:calc(28% - 4px);background:#35111b}.rolling-avatar img,.rolling-avatar span{width:100%;height:100%;display:grid;place-items:center;object-fit:cover;color:#ffe1a4;font-size:clamp(52px,5vw,82px);font-weight:900}.rolling-avatar img{display:block;opacity:1;filter:none;transform:none;image-rendering:auto}.rolling-name{max-width:90%;overflow:hidden;color:#fff5e6;font-size:clamp(20px,1.8vw,30px);line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.rolling p{margin:.7vh 0 0;color:#a98c88;font:600 12px Montserrat;letter-spacing:.2em}@keyframes rollingAvatarSwap{0%{box-shadow:0 0 34px #ffe5a6b8,0 18px 42px #00000052}to{box-shadow:0 0 70px #ff7e4152,0 18px 42px #00000052}}.celebrate{font:700 11px Montserrat;letter-spacing:.5em;color:var(--gold)}.winner-board h3{font-size:clamp(30px,3vw,52px);margin:1vh 0 3vh}.winner-grid{display:flex;flex-wrap:wrap;justify-content:center;gap:1.7vw;max-width:100%}.winner{animation:reveal .65s both;animation-delay:var(--delay);display:flex;flex-direction:column;align-items:center;min-width:90px}@keyframes reveal{0%{opacity:0;transform:translateY(35px) scale(.8)}to{opacity:1;transform:none}}.avatar{width:clamp(64px,6vw,104px);aspect-ratio:1;border-radius:50%;padding:4px;background:linear-gradient(135deg,#fff0bc,#c2762a);box-shadow:0 0 35px #ffae4940;margin-bottom:12px}.avatar img,.avatar span{width:100%;height:100%;display:grid;place-items:center;object-fit:cover;border-radius:50%;background:#3d1722;font-size:36px}.winner b{font-size:18px}.winner small{font:500 10px Montserrat;color:#aa9391;margin-top:4px}.dock{position:relative;z-index:3;height:8vh;margin:2vh auto 0;width:max-content;border-radius:22px;display:flex;align-items:center;padding:0 14px}.dock button{border:0;background:none;color:#bca9a7;display:flex;align-items:center;gap:8px;padding:12px 18px;cursor:pointer}.dock button:hover{color:#fff}.dock i{font-style:normal;color:var(--gold);font-size:19px}.foot-status{border-left:1px solid rgba(255,255,255,.1);padding:0 18px;color:#d7c8c6;font-size:13px}.foot-status span.on{background:#39e68c;box-shadow:0 0 14px #39e68c}.particles i{--x: calc((var(--i) * 37) % 100);position:absolute;z-index:1;left:calc(var(--x) * 1%);bottom:-20px;width:3px;height:3px;border-radius:50%;background:var(--gold);opacity:.5;animation:rise calc(5s + var(--i) * .13s) linear infinite;animation-delay:calc(var(--i) * -.31s)}@keyframes rise{to{transform:translateY(-110vh) scale(0);opacity:0}}.toast{position:fixed;z-index:20;left:50%;bottom:12vh;transform:translate(-50%);background:#fff;color:#1b1114;padding:12px 22px;border-radius:12px;box-shadow:0 10px 35px #0008}@media(max-height:720px){.draw-button{height:46px}.stage{height:68vh}}.join-default{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}.qr-placeholder img{width:100%;height:100%;object-fit:contain}.draw-button:disabled{cursor:not-allowed;filter:saturate(.2);opacity:.5}.draw-button:disabled:after{display:none}.draw-button.settling:disabled{cursor:wait;filter:none;opacity:.86}.admin-mask{position:fixed;z-index:30;inset:0;background:#030205db;padding:3vh 4vw;color:#f8eeee;font-family:Noto Sans SC,sans-serif}.admin-panel{width:100%;height:94vh;max-width:1500px;margin:auto;border:1px solid rgba(255,214,157,.25);border-radius:24px;background:#140b10;box-shadow:0 30px 100px #000;overflow:hidden}.admin-head{height:92px;padding:0 30px;display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid rgba(255,255,255,.1);text-align:left}.admin-head small,.admin-section small{color:#dcae69;letter-spacing:.25em;font:700 10px Montserrat}.admin-head h2{font-size:28px;letter-spacing:.08em;margin:4px 0 0}.admin-head-actions{display:flex;gap:10px}.admin-head button,.section-title button,.row-actions button,.recovery-card button,.danger-section button{border:1px solid rgba(255,215,138,.28);border-radius:10px;background:#ffffff0f;color:#f7e7da;padding:9px 15px;cursor:pointer}.admin-head .close-admin{font-size:25px;padding:4px 13px}.admin-body{height:calc(94vh - 92px);padding:24px 30px 50px;overflow:auto;transition:opacity .2s}.admin-body.loading{opacity:.58;pointer-events:none}.audit-card{display:flex;flex-direction:column;gap:3px;border:1px solid rgba(70,224,146,.3);border-radius:14px;background:#46e09214;padding:13px 18px;margin-bottom:14px}.audit-card b{color:#72e6aa}.audit-card span{color:#a4c5b4;font-size:12px}.audit-card.bad{border-color:#ff534759;background:#ff534714}.audit-card.bad b{color:#ff9b8f}.audit-card.bad span{color:#d0a19d}.admin-section{border:1px solid rgba(255,255,255,.09);border-radius:18px;background:#ffffff06;padding:22px;margin-bottom:20px}.section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.section-title h3,.danger-section h3{font-size:20px;margin:4px 0}.section-title h3 em{color:#a89391;font-size:12px;font-style:normal;font-weight:400;margin-left:8px}.section-title .primary-small{border:0;color:#35120d;background:#f2cb83;font-weight:800}.winner-action-guide{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:-4px 0 16px}.winner-action-guide span{padding:10px 12px;border:1px solid rgba(255,210,137,.12);border-radius:9px;color:#ae9998;background:#ffd28909;font-size:12px;line-height:1.55}.winner-action-guide b{margin-right:7px;color:#ebca8d}.event-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.event-fields label,.prize-row label{display:flex;flex-direction:column;gap:6px;color:#9d8989;font-size:12px}.admin-section input{height:40px;border:1px solid rgba(255,255,255,.12);border-radius:9px;background:#21141a;color:#fff;padding:0 12px;outline:none}.prize-editor{display:grid;gap:8px}.prize-row{display:grid;grid-template-columns:.65fr 1.5fr .55fr .55fr;gap:10px;align-items:end}.recovery-card{display:flex;align-items:center;justify-content:space-between;border:1px solid rgba(255,175,79,.45);border-radius:16px;background:#ff8f311a;padding:16px 20px;margin-bottom:20px}.recovery-card div{display:flex;flex-direction:column;gap:4px}.recovery-card span{color:#c2a9a1;font-size:13px}.recovery-card button{border-color:#f0a451;color:#ffd399}.winner-table{display:grid;gap:8px}.winner-row{display:grid;grid-template-columns:46px minmax(100px,.8fr) minmax(150px,1.1fr) 78px minmax(260px,1.4fr);gap:12px;align-items:center;padding:10px 12px;border-radius:12px;background:#ffffff09}.winner-row.invalid{opacity:.42}.mini-avatar{width:40px;height:40px;padding:2px;border-radius:50%;background:#dcae69}.mini-avatar img,.mini-avatar span{width:100%;height:100%;display:grid;place-items:center;object-fit:cover;border-radius:50%;background:#35111b}.winner-person,.winner-prize{display:flex;flex-direction:column;gap:2px}.winner-person span,.winner-prize span{color:#9d8989;font-size:12px}.record-status{color:#e6c680;font-size:12px}.row-actions{display:flex;justify-content:flex-end;gap:7px}.row-actions button{padding:7px 10px;font-size:12px}.row-actions .warn{color:#ffb19f;border-color:#ff5e4c59}.empty-admin{padding:32px;text-align:center;color:#8d797b}@media(max-width:1100px){.admin-mask{padding:0}.admin-panel{height:100vh;border-radius:0}.admin-body{height:calc(100vh - 92px)}.winner-row{grid-template-columns:42px 1fr 1.2fr 70px}.row-actions{grid-column:2/5;justify-content:flex-start}.winner-action-guide{grid-template-columns:1fr}}.qr-placeholder img{width:100%;height:100%;object-fit:contain;border-radius:8px}
