:root{--bg:#07111e;--panel:#0f2236;--line:#294158;--text:#f1f7ff;--muted:#99b8ce;--blue:#57c6ee;--gold:#efca7f;--accent:#55e0c9}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Inter,ui-sans-serif,system-ui,'Segoe UI',sans-serif;background:radial-gradient(ellipse 80% 360px at 50% -10%,#204f6c,#07111e 90%);color:var(--text)}body{min-height:100vh}button,input,select{font:inherit}button{cursor:pointer;border:1px solid #365a76;background:#183a55;color:#eaf8ff;border-radius:10px;padding:11px 15px;font-size:13px;font-weight:850;transition:filter .15s}button:hover{filter:brightness(1.2)}button:disabled{opacity:.42;cursor:not-allowed}button.primary{border-color:#42b9d6;background:linear-gradient(120deg,#077aa7,#16b5cd);color:#fff}button.gold{border-color:#bf9657;background:linear-gradient(120deg,#87662c,#ae8543);color:#fff}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #62cdef;outline-offset:2px}.hide{display:none!important}header#top{max-width:1480px;padding:21px 26px;border-bottom:1px solid #28415d;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:12px}.brand{font-weight:1000;font-size:22px;letter-spacing:.16em}.brand small{display:block;letter-spacing:.29em;font-size:9px;color:#9fc5dc;margin-top:5px}.status{font-size:10px;font-weight:900;border:1px solid #4b6574;color:#b5d9e9;padding:10px 12px;border-radius:40px}.shell{max-width:1390px;margin:32px auto;padding:0 24px}.welcome{max-width:660px}.welcome h1{font-size:clamp(46px,6vw,88px);line-height:.99;letter-spacing:-.065em;margin:16px 0 20px}.welcome h1 em,.mobile-head h1 em{font-style:normal;color:var(--gold)}.welcome p,.panel p{color:var(--muted);line-height:1.6;font-size:13px}.eyebrow{color:#74d5ef;font-size:11px;font-weight:950;letter-spacing:.19em}.panel{padding:22px;margin-bottom:18px;background:linear-gradient(125deg,#10283f,#0d1e30);border:1px solid var(--line);border-radius:18px;box-shadow:0 15px 40px #01060c35}.panel h2{font-size:19px;margin:0 0 16px}.setup{max-width:470px;margin:30px 0}.setup h2{font-size:24px}label{display:block;font-size:12px;font-weight:800;color:#b6d4e7;margin:15px 0 11px}label input,label select{display:block;width:100%;margin-top:7px;border:1px solid #385975;border-radius:9px;background:#071b2e;color:#eaf7ff;padding:12px;font-size:13px}label input[type=file]{border:0;padding:8px 0}a{color:#86dfff}.hint{color:#8eb5cc;font-size:11px;line-height:1.7}.setup button{margin-top:9px;width:100%}.foh-head{display:flex;align-items:center;justify-content:space-between;gap:22px;margin-bottom:26px}.foh-head h1{font-size:clamp(26px,3vw,45px);margin:6px 0}.foh-head p{font-size:12px;color:var(--muted)}.foh-actions,.btnrow{display:flex;flex-wrap:wrap;gap:10px}.btnrow{margin:14px 0}.foh-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:20px}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.stats>div{background:#071829;border:1px solid #244660;padding:14px;border-radius:10px}.stats strong{font-size:30px;display:block}.stats small{font-size:11px;color:var(--muted)}.ranktitle{color:#efcd8b;font-size:12px;letter-spacing:.07em;font-weight:900;margin:22px 0 12px}.rankitem{display:grid;grid-template-columns:35px 1fr 52px;gap:10px;align-items:center;margin:12px 0}.rankitem>span{font-size:12px}.track{height:10px;border-radius:9px;background:#071728;margin-top:6px;overflow:hidden}.track>i{display:block;height:100%;border-radius:9px;background:linear-gradient(90deg,#1f92bc,#50dfd0)}.links{display:flex;flex-direction:column;align-items:stretch}.qr-large{width:210px;height:210px;padding:8px;background:#fff;border-radius:12px;margin:15px auto}.candidate-chip{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid #2b455c;font-size:12px}.candidate-chip button{padding:6px 10px}.candidate-chip img{height:39px;width:34px;object-fit:cover;border-radius:5px}.candidate-label{flex:1}.mobile{margin:30px auto 60px;width:min(100% - 26px,445px);background:#f3f7fa;color:#122b42;border:9px solid #061421;border-radius:30px;box-shadow:0 27px 100px #0007;overflow:hidden}.mobile-head{text-align:center;padding:46px 16px 22px;background:radial-gradient(ellipse at top,#245b7b,#071d34 85%);color:#fff}.mobile-head h1{font-size:34px;letter-spacing:-.065em;line-height:1;margin:14px 0 10px}.mobile-head p{font-size:12px;color:#bbd7e5}.badge{font-size:10px;font-weight:900;letter-spacing:.06em;border:1px solid #6dbfcf61;background:#0a648d36;padding:8px 13px;border-radius:30px;display:inline-block;margin-top:5px}.mobile-body{padding:17px 14px}.mobile-footer{font-size:10px;text-align:center;padding:0 12px 20px;color:#8494a3}.cat-heading{display:flex;justify-content:space-between;font-weight:900;font-size:13px;margin:12px 0 10px}.cat-heading small{font-size:10px;background:#e3edf4;border-radius:25px;padding:5px 9px;color:#627c92}.candidate-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-bottom:22px}.candidate{background:#fff;color:#143047;border:2px solid #d9e7ef;border-radius:10px;overflow:hidden;padding:0;text-align:left;min-width:0}.candidate.active{border-color:#10a6c4;box-shadow:0 0 0 2px #0b92a42c}.candidate img,.portrait-placeholder{display:block;width:100%;height:121px;object-fit:cover;background:linear-gradient(135deg,#1a4963,#486980);color:#e1eef5}.portrait-placeholder{display:grid;place-items:center;font-weight:900;font-size:31px;letter-spacing:-.04em}.candidate b{font-size:10px;display:block;padding:8px 6px 3px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.candidate small{font-size:9px;display:block;color:#527891;padding:0 6px 10px}.vote-submit{width:100%;padding:15px;background:linear-gradient(100deg,#077fa7,#18b4bc);border:0;color:#fff}.vote-submit:disabled{background:#94b5c2}.vote-note{font-size:11px;text-align:center;color:#567589;line-height:1.65}.success{text-align:center;padding:35px 9px}.success .check{display:block;font-size:54px;color:#12a97b;margin-bottom:8px}.receipt{background:#fff;padding:12px;border:1px solid #d8e6ee;border-radius:12px;text-align:left;font-size:12px;line-height:2;margin:22px 0}.receipt b{float:right}#toast{position:fixed;right:18px;bottom:18px;z-index:1000;color:#fff;background:#164a68;border:1px solid #54b9d4;padding:12px 17px;border-radius:11px;box-shadow:0 10px 30px #0008;display:none;max-width:360px;font-size:12px}#stagebox{height:min(56.25vw,calc(100vh - 155px));aspect-ratio:16/9;max-width:100vw;max-height:100vh;position:relative;overflow:hidden;background:radial-gradient(ellipse 65% 70% at 50% -9%,#26648a,#081b32 74%,#05101f);margin:15px auto 0;border:2px solid #284b60}.stage-inner{position:absolute;inset:0;display:flex;align-items:center;flex-direction:column;justify-content:center;text-align:center;overflow:hidden}.stage-footer{position:absolute;bottom:0;width:100%;display:flex;justify-content:space-between;padding:12px 22px;color:#8cbed1;font-weight:800;letter-spacing:.16em;font-size:clamp(7px,.9vw,14px);background:#04152599}.stage-buttons{display:flex;align-items:center;gap:15px;margin:10px 20px;font-size:12px;color:#91adc0}.stage-kicker{color:#edc47e;font-size:clamp(12px,1.55vw,24px);letter-spacing:.2em;font-weight:900}.stage-h1{font-size:clamp(32px,5.9vw,116px);letter-spacing:-.06em;line-height:1;margin:14px 0;color:#fff}.stage-sub{color:#bed8e7;font-size:clamp(10px,1.25vw,20px);letter-spacing:.15em}.stage-vote-layout{width:94%;display:grid;grid-template-columns:1fr 20% 1fr;gap:2%;margin-top:4%;align-items:center}.stage-side{min-width:0}.stage-side>h2{font-size:clamp(12px,1.9vw,31px);color:#eec987}.faces{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.stage-person{font-size:clamp(7px,.9vw,15px);font-weight:800;min-width:0}.stage-person img,.stage-person .portrait-placeholder{width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;border-radius:7px}.stage-person small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:5px}.stage-qr{background:#fff;padding:5%;border-radius:12px;color:#062338}.stage-qr .qr-inner{width:100%;aspect-ratio:1}.stage-qr b{font-size:clamp(8px,1.5vw,23px);display:block;margin-top:8px}.closed-text{font-weight:950;font-size:clamp(36px,6vw,110px);letter-spacing:-.06em;margin:16px}.stage-race{width:85%;display:flex;flex-direction:column;gap:clamp(8px,1vw,18px);margin-top:3%}.race-row{display:grid;grid-template-columns:5% 9% 20% 1fr 10%;align-items:center;gap:1%;font-weight:900}.race-row span{font-size:clamp(9px,1.35vw,25px)}.race-row img,.race-row .portrait-placeholder{width:100%;height:auto;aspect-ratio:1;object-fit:cover;border-radius:8px;font-size:1.3vw}.race-bar{background:#071521;border-radius:5px;height:clamp(16px,2.2vw,39px);overflow:hidden}.race-bar>i{display:block;background:linear-gradient(90deg,#158cc1,#61d4e0,#efc67b);height:100%;transition:width .12s}.race-num{text-align:right}.winner-view{height:86%;width:90%;display:grid;grid-template-columns:43% 1fr;align-items:center;gap:4%;position:relative;z-index:2}.winner-view img,.winner-view .portrait-placeholder{width:100%;height:92%;max-height:100%;object-fit:cover;aspect-ratio:4/5;border:2px solid #e4c285a9;border-radius:16px;box-shadow:0 0 65px #e7bc6a40}.winner-text{text-align:left}.winner-text h2{color:#e9be77;font-size:clamp(16px,2vw,35px);margin:0}.winner-text h1{font-size:clamp(43px,5.8vw,116px);line-height:1;letter-spacing:-.06em;margin:3% 0 7%}.winner-text p{font-size:clamp(13px,1.6vw,28px);color:#f9dfad;letter-spacing:.16em}.winner-text small{color:#a3c5d5}.duo-label{font-size:clamp(25px,4.1vw,77px);font-weight:980;letter-spacing:-.05em;color:#f8db9f;position:absolute;top:8%}.duo-wrap{width:88%;height:75%;margin-top:8%;display:grid;grid-template-columns:1fr 1fr;gap:8%;position:relative;z-index:2}.duo-person{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}.duo-person img,.duo-person .portrait-placeholder{height:65%;width:auto;max-width:85%;aspect-ratio:4/5;object-fit:cover;border-radius:15px;border:2px solid #eaca87}.duo-person h2{font-size:clamp(20px,3vw,54px);margin:10px 0 5px}.duo-person span{font-size:clamp(11px,1.3vw,22px);color:#efcf8d;font-weight:900}.celebration-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:4;pointer-events:none}.winner-backdrop{position:absolute;inset:0;background:radial-gradient(ellipse at center,#e0b46a2a,transparent 65%);z-index:1}.flash{position:absolute;inset:0;pointer-events:none;z-index:5;animation:flash .85s ease-out forwards;background:#fff6d9}@keyframes flash{0%{opacity:.8}45%{opacity:.08}100%{opacity:0}}#stagebox:fullscreen{width:100vw;height:100vh;max-width:none;max-height:none;aspect-ratio:auto;margin:0;border:0}.error{background:#f2d4d4;color:#791f30;border-radius:10px;padding:16px;text-align:center;font-size:13px}@media(max-width:820px){.foh-grid{grid-template-columns:1fr}.foh-head{flex-direction:column;align-items:stretch}.shell{margin:18px auto;padding:0 12px}.brand{font-size:15px}.brand small{font-size:7px}.status{font-size:8px}.stage-buttons{flex-direction:column}.mobile{margin-top:16px}.candidate img,.portrait-placeholder{height:105px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001s!important;transition:none!important}}

/* V5.4 LED show-safe 16:9; no event technology footer */
.brand{display:flex;align-items:center;gap:12px}.brand-logo{height:45px;width:auto;max-width:180px;object-fit:contain}.mobile-brand-logo{max-height:65px;width:auto;max-width:200px;object-fit:contain;display:block;margin:0 auto 12px}.stage-brand{position:absolute;top:2.5%;left:3.3%;z-index:8;display:flex;align-items:center;max-width:19%;max-height:8%;color:#c7deea;letter-spacing:.08em;font-size:clamp(8px,1vw,15px);font-weight:750}.stage-brand img{max-width:100%;max-height:60px;object-fit:contain;filter:drop-shadow(0 2px 5px #0009)}.stage-footer{left:0;right:0;justify-content:flex-end;z-index:3;padding:8px 14px;font-size:clamp(7px,.8vw,12px);background:linear-gradient(0deg,#041525a8,transparent)}
#stagebox{container-type:size}.stage-inner{padding:9% 3% 5%;box-sizing:border-box;justify-content:flex-start;gap:0}.stage-kicker{font-size:clamp(11px,1.5cqw,22px)}.stage-h1{font-size:clamp(30px,5.6cqw,105px);margin:1% 0 .8%;line-height:1.03}.stage-sub{font-size:clamp(10px,1.3cqw,20px)}
.stage-vote-layout{width:100%;min-height:0;flex:1;margin-top:3%;display:grid;grid-template-columns:minmax(0,1fr) minmax(165px,23%) minmax(0,1fr);gap:2.2%;align-items:stretch}.stage-side{min-width:0;padding:2.4% 2.5% 3.2%;border-radius:1.2cqw;background:linear-gradient(160deg,#24547240,#0b243038);border:1px solid #6aa4bd45;display:flex;flex-direction:column;align-items:stretch;overflow:hidden}.stage-side>h2{margin:0 0 2.5%;font-size:clamp(13px,2cqw,32px);line-height:1.2;letter-spacing:.04em}.faces{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));justify-items:center;align-items:stretch;gap:min(1cqw,11px)}.stage-person{width:100%;height:100%;min-width:0;min-height:0;display:flex;flex-direction:column;gap:4px;justify-content:center;align-items:stretch;background:#143149aa;border:1px solid #6797b24a;padding:4%;border-radius:9px;box-sizing:border-box;overflow:hidden}.stage-person img,.stage-person .portrait-placeholder{display:block;flex:1;width:100%;height:1px;min-height:0;max-height:100%;aspect-ratio:auto;object-fit:contain;background:#0c2439;border-radius:5px}.stage-person small{flex-shrink:0;max-width:100%;display:block;text-align:center;color:#ecf6ff;font-size:clamp(9px,1.05cqw,16px);line-height:1.2;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-weight:850}.stage-empty{grid-column:span 2;display:grid;place-items:center;font-size:clamp(10px,1.2cqw,18px);color:#bed4df}.stage-qr{align-self:center;width:100%;box-sizing:border-box;min-width:0;background:#fff;border-radius:1.25cqw;padding:7%;color:#062338;box-shadow:0 9px 36px #0009}.stage-qr .qr-inner{width:100%;aspect-ratio:1}.stage-qr b{display:block;margin-top:9px;letter-spacing:.01em;font-size:clamp(11px,1.45cqw,22px)}
/* Prevent winner long names/title cutting off on various LED aspect ratios */
.winner-view{min-width:0;min-height:0;height:100%;width:93%;grid-template-columns:minmax(0,42%) minmax(0,1fr);gap:4%;padding:6% 1% 3%;box-sizing:border-box}.winner-view img,.winner-view .portrait-placeholder{height:100%;max-width:100%;min-width:0;aspect-ratio:auto;object-fit:contain;background:#07172b}.winner-text{min-width:0;overflow-wrap:anywhere}.winner-text h1{font-size:clamp(34px,5.3cqw,96px);line-height:1.02}.duo-label{font-size:clamp(24px,3.65cqw,70px);top:10%;max-width:92%;white-space:normal;line-height:1.1}.duo-wrap{margin-top:9%;height:76%;width:86%;gap:5%}.duo-person{min-width:0}.duo-person img,.duo-person .portrait-placeholder{height:62%;max-width:92%;aspect-ratio:auto;object-fit:contain;background:#07172b}.duo-person h2{overflow-wrap:anywhere;max-width:100%}.logo-setting{display:flex;flex-direction:column;gap:12px}.logo-preview{min-height:92px;background:#0c2034;border:1px dashed #577f9e;border-radius:10px;display:flex;align-items:center;justify-content:center;padding:14px;color:#8eabba;font-size:12px}.logo-preview img{max-width:100%;max-height:110px;object-fit:contain}
@media(max-width:820px){.brand-logo{max-width:125px;height:38px}.stage-brand img{max-height:45px}}

/* Candidate grids are centered for 1–3 finalists, not just four */
.faces:has(.stage-person:only-child){grid-template-columns:minmax(0,70%);grid-template-rows:minmax(0,1fr);justify-content:center}
.faces:has(.stage-person:nth-child(2):last-child){grid-template-rows:minmax(0,1fr)}
.faces:has(.stage-person:nth-child(3):last-child) .stage-person:nth-child(3){grid-column:1 / -1;max-width:49%}
.brand-logo{background:#fff;border-radius:7px;padding:3px;box-sizing:border-box}
.stage-brand img{background:#fff;border-radius:7px;padding:3px;box-sizing:border-box}
.mobile-brand-logo{background:#fff;border-radius:7px;padding:4px;box-sizing:border-box}
