:root{--green-950: #030906;--green-900: #06140d;--green-800: #0c2418;--green-700: #123b27;--green-500: #217247;--white: #f8faf7;--muted: #b7c3b7;--gold: #d8b25d;--red: #b51f28;--line: rgba(255, 255, 255, .18)}*{box-sizing:border-box}html,body{width:100%;height:100%;margin:0;overflow:hidden;background:#020503;color:var(--white);font-family:Yu Gothic,Hiragino Kaku Gothic ProN,Meiryo,Noto Sans JP,sans-serif}button{font:inherit}.app{position:relative;width:100vw;height:100vh;overflow:hidden;background:#020503;isolation:isolate}.three-host{position:absolute;inset:0;z-index:0;overflow:hidden}.three-host canvas{display:block;width:100%;height:100%}.label-layer{position:absolute;inset:0;pointer-events:none;z-index:4}.horse-label{display:inline-flex;align-items:center;gap:7px;min-height:34px;margin-left:34px;padding:4px 10px 5px 6px;border:1px solid rgba(255,255,255,.72);background:#030705d1;color:#fff;font-weight:900;line-height:1;text-shadow:0 2px 0 #000;white-space:nowrap;transform:translateY(-12px);box-shadow:0 6px 14px #00000061}.horse-label .label-number{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;color:#050706;background:var(--horse-color);border:2px solid #fff;font-size:16px}.horse-label .label-name{font-size:18px}.horse-label.compact{min-height:30px;margin-left:26px;padding:3px;background:#0307059e}.horse-label.compact .label-number{width:25px;height:25px;font-size:14px}.horse-label.compact .label-name{display:inline;font-size:15px}.horse-label.priority{min-height:42px;border-color:var(--gold);background:#030705e6;box-shadow:0 0 20px #d8b25d40,0 8px 16px #0000006b}.horse-label.priority .label-number{width:34px;height:34px;font-size:19px}.horse-label.priority .label-name{font-size:23px}.horse-label.dimmed{opacity:.55}.fallback-badge{position:absolute;top:14px;left:14px;z-index:8;padding:6px 10px;border:1px solid rgba(255,255,255,.22);background:#050907c7;color:#f7f8f5;font-size:12px;font-weight:900;letter-spacing:.04em}.race-hud{position:absolute;top:18px;left:18px;z-index:6;display:none;min-width:220px;padding:8px 12px;border:1px solid rgba(255,255,255,.18);background:#040805b8;color:var(--white);pointer-events:none}.race-hud span{display:block;color:#ffffffb8;font-size:12px;font-weight:900}.race-hud strong{display:block;margin-top:2px;color:var(--gold);font-size:24px;font-weight:900;line-height:1}.waiting-overlay,.title-overlay,.betting-overlay,.gate-overlay,.photo-overlay,.result-overlay{position:absolute;inset:0;display:none;z-index:10;pointer-events:none}.waiting-overlay{place-items:center;background:radial-gradient(circle at 50% 40%,rgba(18,59,39,.38),transparent 42%),linear-gradient(180deg,#07120c,#020503);pointer-events:auto}.waiting-title{text-align:center}.waiting-title span,.title-panel span{display:block;color:var(--muted);font-size:clamp(22px,2.5vw,42px);font-weight:900}.waiting-title h1,.title-panel h2{margin:8px 0 0;color:#fff;font-size:clamp(64px,8vw,144px);font-weight:900;line-height:.95;text-shadow:0 5px 0 #000}.waiting-controls{display:flex;justify-content:center;gap:14px;margin-top:42px}.primary-button,.secondary-button{min-width:150px;min-height:58px;border:1px solid rgba(255,255,255,.24);color:#fff;font-size:22px;font-weight:900;cursor:pointer}.primary-button{background:var(--green-500)}.secondary-button{background:#ffffff14}.title-overlay{place-items:center;background:linear-gradient(90deg,rgba(181,31,40,.12),transparent 32%,transparent 68%,rgba(18,59,39,.3)),#0205038f}.title-panel{width:min(1120px,84vw);padding:clamp(34px,5vw,78px);border-top:4px solid var(--green-500);border-bottom:4px solid var(--red);background:#030805d1;box-shadow:0 24px 80px #00000073}.title-panel p{margin:30px 0 0;color:#e8eee8;font-size:clamp(21px,2vw,36px);font-weight:900}.betting-overlay{place-items:center;background:radial-gradient(circle at 50% 42%,rgba(18,59,39,.32),transparent 46%),#020503b8;pointer-events:auto}.betting-panel{width:min(1260px,90vw);padding:clamp(22px,3vw,44px);border:1px solid rgba(255,255,255,.22);background:#030805e6;box-shadow:0 24px 80px #0000008f}.betting-heading{display:grid;grid-template-columns:1fr auto;align-items:end;gap:16px;border-bottom:1px solid var(--line);padding-bottom:18px}.betting-heading span{grid-column:1 / -1;color:var(--muted);font-size:clamp(14px,1.1vw,18px);font-weight:900}.betting-heading h2{margin:0;color:#fff;font-size:clamp(42px,4.8vw,88px);font-weight:900;line-height:1}.betting-heading p{margin:0;color:var(--gold);font-size:clamp(16px,1.5vw,25px);font-weight:900;text-align:right}.bet-horse-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:20px}.bet-horse{display:grid;grid-template-columns:46px 1fr;align-items:center;min-height:58px;padding:7px 10px;border-left:5px solid var(--horse-color);background:#ffffff12}.bet-number{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;color:#050706;background:var(--horse-color);border:2px solid #fff;font-size:20px;font-weight:900}.bet-name{min-width:0;color:#fff;font-size:clamp(16px,1.35vw,25px);font-weight:900;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.race-button{display:block;width:min(360px,52vw);min-height:68px;margin:28px auto 0;border:1px solid rgba(255,255,255,.28);background:var(--red);color:#fff;font-size:clamp(28px,3vw,50px);font-weight:900;cursor:pointer;box-shadow:0 14px 36px #b51f2859}.gate-overlay{align-items:start;justify-content:center;padding-top:6vh}.gate-status{padding:12px 26px;border:1px solid rgba(255,255,255,.18);background:#030805bd}.gate-status span{color:var(--gold);font-size:clamp(34px,4vw,76px);font-weight:900;letter-spacing:.05em}.photo-overlay{place-items:center;background:#0205035c}.photo-panel{min-width:min(720px,78vw);padding:clamp(24px,3vw,44px);border:1px solid rgba(255,255,255,.24);background:#030805db;text-align:center;box-shadow:0 24px 70px #0000007a}.photo-panel span{display:block;color:var(--gold);font-size:clamp(44px,6vw,104px);font-weight:900}.photo-panel strong{display:block;margin-top:10px;color:#fff;font-size:clamp(28px,3.5vw,60px);font-weight:900}.result-overlay{place-items:center;z-index:12;background:radial-gradient(circle at 50% 38%,rgba(255,255,255,.08),transparent 48%),#000000c7}.result-board{width:min(1180px,88vw);max-height:90vh;overflow:hidden;border:2px solid rgba(255,255,255,.22);background:#050806;box-shadow:0 24px 80px #00000094}.result-header{display:flex;align-items:center;justify-content:space-between;padding:clamp(18px,2vw,30px) clamp(22px,2.5vw,40px);background:linear-gradient(90deg,var(--green-800),var(--green-700));border-bottom:1px solid var(--line)}.result-header span{color:var(--muted);font-size:clamp(14px,1.1vw,18px);font-weight:900}.result-header h2{margin:4px 0 0;color:#fff;font-size:clamp(32px,3vw,56px);font-weight:900;line-height:1}.result-header strong{display:grid;place-items:center;min-width:clamp(92px,8vw,142px);min-height:clamp(50px,5vh,72px);background:var(--red);color:#fff;font-size:clamp(26px,2.5vw,44px);font-weight:900}.result-columns,.result-item{display:grid;grid-template-columns:clamp(92px,8vw,138px) clamp(72px,6vw,110px) 1fr;align-items:center}.result-columns{min-height:38px;padding:0 clamp(22px,2.5vw,40px);color:var(--muted);background:#ffffff0f;font-size:clamp(13px,1vw,17px);font-weight:900}.result-list{margin:0;padding:0;list-style:none}.result-item{min-height:clamp(42px,4.4vh,60px);padding:0 clamp(22px,2.5vw,40px);border-top:1px solid rgba(255,255,255,.08);color:#fff;font-size:clamp(18px,1.7vw,32px);font-weight:900}.result-item:nth-child(odd){background:#ffffff09}.result-item.top-three{background:#d8b25d1f}.result-rank,.result-number{color:var(--gold)}.state-waiting .waiting-overlay,.state-title .title-overlay,.state-betting .betting-overlay{display:grid}.state-gate .gate-overlay{display:flex}.state-race .race-hud{display:block}.state-photo .photo-overlay,.state-result .result-overlay{display:grid}.race-mode .waiting-overlay,.race-mode .title-overlay,.race-mode .betting-overlay,.race-mode .gate-overlay,.race-mode .photo-overlay,.race-mode .result-overlay,.race-mode .controls,.race-mode .start-button,.race-mode .reset-button,.race-mode .primary-button,.race-mode .secondary-button,.race-mode .race-button,.race-mode .intro-panel,.race-mode .horse-card,.race-mode .mini-map,.race-mode .info-panel,.race-mode .stats-panel,.race-mode .timer{display:none!important}.race-mode .race-hud{display:block}@media(max-width:900px){.horse-label .label-name{font-size:14px}.horse-label.priority .label-name{font-size:17px}}
