[hidden]{display:none!important}.brand{color:#fff;text-decoration:none}.brand span{color:#bca1ff}header{padding:16px 3vw;min-height:76px}#connection{font-size:13px;color:#c5ed94}main{max-width:1500px;padding:24px 3vw;display:grid;grid-template-columns:360px minmax(0,1fr);gap:22px}.host-controls{align-self:start}.control-content{padding:20px}details summary{font-weight:750;cursor:pointer}textarea{width:100%;display:block;margin:8px 0 14px;background:#101127;color:white;border:1px solid #777;padding:12px;border-radius:8px;font:16px system-ui}p{font-size:14px}a{color:#deffae}.join-block{display:flex;gap:20px;align-items:center;margin:20px 0}.join-block img{max-width:45%;border-radius:10px}.team-row{display:flex;justify-content:space-between;align-items:center;gap:10px;border-bottom:1px solid #ffffff15;padding:10px 0;font-size:14px}.team-row button{font-size:12px;padding:6px 9px}.team-row span{color:#c7efa6}.rules,#error{grid-column:1/-1;margin:0}.rules{font-size:12px;color:#aba8bb}#error:empty{display:none}#error{background:#602e34;padding:14px;border-radius:10px}#join-form{display:grid;gap:16px}.phone main{display:block;max-width:500px}.phone header{flex-wrap:wrap;gap:10px}.phone #connection{width:100%}.phone .audio-controls{justify-content:center}.phone .boardwrap{padding:16px}.phone #phone-status{color:#ffe4b1;font-weight:700;min-height:24px}.phone .rules{margin-top:20px}.phone .ball-panel #roll{margin:16px auto}.phone .feedback{font-size:16px}#schedule{padding-left:22px}#schedule li{font-size:14px;margin:10px 0;line-height:1.4}.audience main{display:block;max-width:1800px;padding:18px 3vw}.audience .lane{height:clamp(52px,calc((100vh - 270px)/var(--lanes,8)),115px)}.audience .road,.audience .road:after{height:100%}.audience .horse{top:50%;margin-top:-47px}.audience .rules{margin-top:10px}.audience .join-block{justify-content:center}.audience #race-result{font-size:22px;font-weight:800;padding:18px}.audience .name{font-size:clamp(12px,1.4vw,20px)}.audience .lane{grid-template-columns:150px minmax(0,1fr) 42px}.audience .stats{font-size:18px}.audience .race-panel{overflow:hidden}.audience .finish{margin:0}.phone .won{box-shadow:0 0 35px #edba6066}.connection-lost #connection{color:#ffbd9b}@media(max-height:800px){.audience .racer-art{height:64px;width:84px}.audience .horse{width:84px;height:64px;margin-top:-32px}}@media(max-width:900px){main{grid-template-columns:1fr}.host-controls{order:0}.race-panel{order:1}.audience .lane{grid-template-columns:95px minmax(0,1fr) 28px}.audience .horse{margin-top:-35px}.audience .name{font-size:12px}header{flex-wrap:wrap}.rules{order:3}}@media(prefers-reduced-motion:reduce){.launch-kick{animation:none}}

#commentary-controls{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:12px 3vw;background:#221e30}#commentary-controls label{display:flex;align-items:center;gap:8px}#commentary-status{font-size:14px;color:#d9ceba}.audience .lane{height:clamp(52px,calc((100vh - 340px)/var(--lanes,8)),115px)}

/* Phone controls sit above Safari's bottom bar and the home indicator. */
.phone{padding-bottom:calc(112px + env(safe-area-inset-bottom,0px))}.phone header{min-height:0;padding:10px 14px;gap:6px}.phone header strong{font-size:14px}.phone #connection{font-size:12px}.phone main{padding:10px 12px}.phone .panelhead{padding:10px 12px}.phone .panelhead h2{font-size:18px}.phone .boardwrap{padding:10px}.phone #phone-status{margin:4px 0 8px;min-height:0;font-size:14px}.phone .hint{font-size:12px;margin:7px 0}.phone .audio-controls{gap:8px}.phone .sound{padding:6px 9px}.phone canvas{height:min(490px,calc(100svh - 420px));min-height:180px;width:auto;max-width:100%;aspect-ratio:360/490}.phone .feedback{margin:8px 0;min-height:22px;font-size:14px}.phone .ball-panel #roll{position:fixed;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;transform:translateX(-50%);width:calc(100% - 28px);max-width:460px;min-height:74px;margin:0;padding:12px 20px;z-index:20;border-radius:16px;box-shadow:0 6px 0 #77491f,0 0 0 12px #1b1713f5}.phone .ball-panel #roll:not(:disabled):active{transform:translate(-50%,4px)}.phone .ball-panel #roll.ready{animation:none}.phone #launch-label{font-size:18px}.phone .rules{margin-top:12px;font-size:11px}

.phone .ball-panel #roll:disabled{opacity:1;background:#68543a;color:#e4d2b5;box-shadow:0 6px 0 #3d3020,0 0 0 12px #1b1713}

.phone-result{padding:28px 14px;text-align:center;background:linear-gradient(145deg,#563c20,#251e18);border:1px solid #d7b16a;border-radius:16px;margin:14px 0}.phone-result>div{font-size:64px}.phone-result h2{font-size:28px;color:#ffe2a0;margin:12px 0}.phone-result p{line-height:1.6}.race-complete canvas,.race-complete .hint,.race-complete .feedback{display:none}.race-complete #roll .launch-icon{display:none}
/* Repeated game taps must not trigger Safari double-tap zoom. Pinch zoom remains available. */
button,button *,a,summary,.ball-panel{touch-action:manipulation}
button,button *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}

#team-management{margin:18px 0}#team-management form{display:grid;gap:8px;margin:16px 0}#team-management input{width:100%;min-height:44px;background:#191525;color:#fff;border:1px solid #8f7956;border-radius:8px;padding:9px;font:16px system-ui}.team-row{flex-wrap:wrap}.team-buttons{display:flex;flex-wrap:wrap;gap:8px;width:100%}.team-buttons button{min-height:40px}.payment-note{font-size:12px;margin:4px 0 8px;color:#e4cf9e}
