*{box-sizing:border-box}html,body,#root{margin:0;width:100%;height:100%;overflow:hidden;font-family:Inter,Segoe UI,system-ui,sans-serif;background:#0f1117;color:#e8eaed}html:has(.join-screen),body:has(.join-screen){overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}#root:has(.join-screen){overflow:visible;height:auto;min-height:100%}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{display:grid;grid-template-columns:280px 1fr 300px;grid-template-rows:56px 1fr;width:100%;height:100%}.app-shell-spectator{grid-template-columns:1fr}.app-shell-spectator .canvas-area{grid-column:1}.app-header{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 16px;background:#151923;border-bottom:1px solid #2a3142}.app-header h1{font-size:16px;margin:0;font-weight:600}.sidebar,.panel{overflow:auto;background:#151923;border-right:1px solid #2a3142;padding:12px}.panel{border-right:none;border-left:1px solid #2a3142}.canvas-area{position:relative;overflow:hidden;background:#0b0d12}.section{margin-bottom:16px}.section h2{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#9aa4b2;margin:0 0 8px}.tool-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.btn{border:1px solid #334155;background:#1e293b;color:#e2e8f0;border-radius:8px;padding:8px 10px}.btn:hover{background:#273449}.btn.active,.btn-primary{background:#2563eb;border-color:#2563eb}.btn-danger{background:#7f1d1d;border-color:#991b1b}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.field label{font-size:12px;color:#94a3b8}.field input,.field select,.field textarea{background:#0f172a;border:1px solid #334155;border-radius:6px;color:#e2e8f0;padding:8px}.field-hint{margin:6px 0 0;font-size:12px;color:#94a3b8;line-height:1.4}.field-hint code{font-size:11px;color:#cbd5e1}.role-toggle{display:grid;grid-template-columns:1fr 1fr;gap:8px}.role-toggle-btn{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;border:1px solid #334155;border-radius:8px;background:#0f172a;color:#e2e8f0;cursor:pointer;font-size:14px;font-weight:600;min-height:unset}.role-toggle-btn:hover{border-color:#475569;background:#1e293b}.role-toggle-btn.active{border-color:#3b82f6;background:#172554;box-shadow:inset 0 0 0 1px #3b82f6}.role-toggle-hint{font-size:11px;font-weight:400;color:#94a3b8}.log-list{display:flex;flex-direction:column;gap:6px;max-height:240px;overflow:auto}.log-item{font-size:12px;padding:8px;border-radius:6px;background:#0f172a;border:1px solid #1e293b}.score-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.player-chip{display:inline-flex;align-items:center;gap:6px}.player-dot{width:10px;height:10px;border-radius:50%}.join-screen{display:flex;flex-direction:column;align-items:center;width:100%;min-height:100%;padding:24px 16px;box-sizing:border-box;background:radial-gradient(circle at top,#1e293b,#0f1117 60%)}.join-card{width:min(420px,92vw);margin-top:auto;margin-bottom:auto;flex-shrink:0;background:#151923;border:1px solid #2a3142;border-radius:16px;padding:24px;display:flex;flex-direction:column;gap:12px}.join-card h1{margin:0;font-size:24px}.join-card p{margin:0;color:#94a3b8;font-size:14px}.recent-rooms-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.saved-game-row{display:flex;gap:6px;align-items:stretch}.saved-game-select{flex:1;text-align:left}.saved-game-delete{flex-shrink:0;align-self:stretch}.btn-link{background:none;border:none;color:#94a3b8;font-size:12px;padding:0;min-height:unset;text-decoration:underline;text-underline-offset:2px}.btn-link:hover{color:#e2e8f0;background:none}.status-bar{font-size:12px;color:#94a3b8}.measure-readout,.tool-hint{position:absolute;left:12px;bottom:12px;background:#0f172aeb;border:1px solid #334155;border-radius:8px;padding:8px 12px;font-size:13px;pointer-events:none;z-index:5}.profile-card{border:1px solid #334155;border-radius:8px;padding:10px;margin-bottom:8px;background:#0f172a}.profile-card h3{margin:0 0 6px;font-size:14px}.profile-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;font-size:11px;color:#94a3b8}.rotate-actions{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:8px}.rotate-actions .btn{padding:6px 4px;font-size:11px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:24px 16px;background:#000000a6}.modal-card{width:min(480px,100%);max-height:min(90vh,720px);overflow:auto;background:#151923;border:1px solid #2a3142;border-radius:16px;padding:20px;box-shadow:0 24px 48px #00000073}.modal-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.modal-header h2{margin:0;font-size:18px;font-weight:600}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.btn-icon{min-width:36px;padding:4px 10px;font-size:20px;line-height:1}.deploy-modal .status-bar{margin:0 0 12px}.loadout-mix-section{padding:12px;border:1px solid #3b4a63;border-radius:12px;background:#111622}@media(max-width:960px){.app-shell{grid-template-columns:1fr;grid-template-rows:56px auto 1fr auto}.sidebar,.panel{max-height:220px;border:none;border-bottom:1px solid #2a3142}.panel{border-top:1px solid #2a3142}}
