:root{--bg:#0b1016;--panel:#121a23;--line:#263341;--text:#edf3f8;--muted:#8da1b3;--accent:#58b4ff;--good:#54d68b;--warn:#ffc857}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,"Noto Sans KR",sans-serif}header{height:62px;padding:0 22px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);background:#0e151d;position:sticky;top:0;z-index:5}header b{font-size:19px;letter-spacing:.7px}header span{margin-left:10px;font-size:11px;padding:4px 7px;border-radius:6px;background:#493a13;color:#ffd76a}.layout{display:grid;grid-template-columns:210px 1fr;min-height:calc(100vh - 62px)}aside{padding:18px 10px;border-right:1px solid var(--line);background:#0e151d}.nav{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--muted);padding:12px;border-radius:8px;margin:3px 0;font-size:14px}.nav:hover,.nav.active{background:#172331;color:white}main{padding:24px;max-width:1550px;width:100%;margin:auto}.hidden{display:none}.panel{background:var(--panel);border:1px solid var(--line);padding:16px;border-radius:12px;margin:14px 0}.cards{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:12px}.card{background:linear-gradient(145deg,#131d27,#101821);border:1px solid var(--line);border-radius:12px;padding:18px}.card b{font-size:30px;display:block}.card small{color:var(--muted)}input,select,textarea,button{background:#0e151d;color:var(--text);border:1px solid #314253;border-radius:8px;padding:10px;font:inherit}button{cursor:pointer;background:#17283a}button:hover{border-color:var(--accent)}textarea{min-height:76px}.formgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.formgrid textarea{grid-column:span 3}.table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden}.table th,.table td{padding:10px;border-bottom:1px solid var(--line);text-align:left;font-size:13px}.table th{color:var(--muted);background:#0f1720}.badge{display:inline-block;padding:3px 7px;border-radius:12px;background:#25364a}.badge.EMTB{background:#4b2e1c}.badge.ROAD{background:#173d32}.racegrid{display:grid;grid-template-columns:420px 1fr;gap:14px}.checks label{display:flex;gap:8px;padding:7px 0}.row{display:flex;gap:10px;align-items:center;margin-top:12px}#raceMap{width:100%;min-height:500px;background:#091016;border:1px solid var(--line);border-radius:8px}.route{fill:none;stroke:#557087;stroke-width:3}.riderDot{stroke:#fff;stroke-width:1.5}.overlay{position:fixed;inset:0;background:#070b10ee;z-index:99;display:flex;align-items:center;justify-content:center}.loginbox{width:360px;background:#111a24;border:1px solid var(--line);border-radius:16px;padding:26px;display:grid;gap:12px}.loginbox h1{font-size:20px;margin:0}.loginbox p,.loginbox small{color:var(--muted)}@media(max-width:900px){.layout{grid-template-columns:1fr}aside{display:flex;overflow:auto;border-right:0}.nav{min-width:130px}.cards{grid-template-columns:repeat(2,1fr)}.formgrid,.racegrid{grid-template-columns:1fr}.formgrid textarea{grid-column:auto}}
.livegrid{display:grid;grid-template-columns:480px 1fr;gap:14px}.liveSummary{margin-top:10px;color:var(--muted)}#liveMap{width:100%;min-height:520px;background:#091016;border:1px solid var(--line);border-radius:8px}.liveDot{stroke:#fff;stroke-width:1.5}.liveLabel{fill:#fff;font-size:13px;font-weight:700;paint-order:stroke;stroke:#071019;stroke-width:4px}.muted{color:var(--muted);padding:10px 0}@media(max-width:900px){.livegrid{grid-template-columns:1fr}}

.liveRoomPanel{margin-bottom:10px}.liveRoomHead{display:flex;justify-content:space-between;gap:12px;align-items:center}.liveRooms{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.liveRoomBtn{min-width:180px;text-align:left;display:grid;gap:3px}.liveRoomBtn small{color:var(--muted);font-size:11px}.liveControls{display:grid;grid-template-columns:minmax(150px,.8fr) minmax(220px,1.2fr);gap:10px}.liveButtons{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:10px}.liveButtons button{min-height:44px}@media(max-width:1100px){.livegrid{grid-template-columns:1fr}.liveControls{grid-template-columns:1fr 1fr}}@media(max-width:650px){.liveControls,.liveButtons{grid-template-columns:1fr}}

.simPresetForm{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:10px}.simPresetForm textarea{grid-column:span 2;min-height:74px}.virtualLab{border-color:#3c4d61}.virtualControls{display:grid;grid-template-columns:1.2fr .7fr 1.4fr 1.1fr;gap:10px;align-items:center}.virtualChecks{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:6px 14px;margin-top:12px}.virtualChecks label{background:#0e151d;border:1px solid #263341;border-radius:8px;padding:9px}.liveDot.virtual{stroke-dasharray:2 2}@media(max-width:1000px){.simPresetForm,.virtualControls,.virtualChecks{grid-template-columns:1fr 1fr}}@media(max-width:650px){.simPresetForm,.virtualControls,.virtualChecks{grid-template-columns:1fr}.simPresetForm textarea{grid-column:auto}}
.commentatorPanel{border-color:#40506a}.commentatorHead{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.commentatorHead h3{margin:0}.commentatorControls{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.commentatorControls label{display:flex;gap:6px;align-items:center}.commentaryFeed{max-height:260px;overflow:auto;margin-top:12px;display:grid;gap:7px}.commentaryLine{display:grid;grid-template-columns:92px 1fr;gap:10px;padding:9px 11px;background:#0d151d;border:1px solid #253342;border-radius:8px}.commentaryLine span{color:var(--muted);font-size:12px}.commentaryLine b{font-weight:650;line-height:1.45}.commentaryLine.kind-lead,.commentaryLine.kind-checkpoint,.commentaryLine.kind-finish{border-color:#5a6d86}@media(max-width:650px){.commentaryLine{grid-template-columns:1fr}.commentatorControls{display:grid;grid-template-columns:1fr 1fr;width:100%}}

.roomCreateGrid{display:grid;grid-template-columns:1.4fr .7fr 1.2fr auto auto;gap:8px;align-items:center}.roomPublic{white-space:nowrap}@media(max-width:1000px){.roomCreateGrid{grid-template-columns:1fr 1fr}.roomCreateGrid button{grid-column:span 2}}@media(max-width:650px){.roomCreateGrid{grid-template-columns:1fr}.roomCreateGrid button{grid-column:auto}}
