:root{--bg-primary: #0f0f1a;--bg-secondary: #1a1a2e;--bg-card: #16213e;--bg-card-hover: #1e2d4f;--color-x: #ff6b6b;--color-o: #4ecdc4;--color-text: #e8e8e8;--color-text-dim: #8888aa;--color-accent: #ffd93d;--color-border: #2a2a4a;--color-success: #4ecdc4;--color-error: #ff6b6b;--radius: 12px;--radius-sm: 8px}*{margin:0;padding:0;box-sizing:border-box}body{font-family:SF Mono,Fira Code,JetBrains Mono,monospace;background:var(--bg-primary);color:var(--color-text);min-height:100vh;-webkit-font-smoothing:antialiased}a{color:var(--color-accent);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer;border:none;border-radius:var(--radius-sm);padding:10px 20px;font-size:14px;font-weight:600;transition:all .2s ease}button:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-accent);color:#000}.btn-primary:hover:not(:disabled){filter:brightness(1.1);transform:translateY(-1px)}.btn-secondary{background:var(--bg-card);color:var(--color-text);border:1px solid var(--color-border)}.btn-secondary:hover:not(:disabled){background:var(--bg-card-hover)}.btn-danger{background:var(--color-error);color:#fff}input,select{font-family:inherit;padding:10px 14px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--bg-secondary);color:var(--color-text);font-size:14px;outline:none;transition:border-color .2s}input:focus,select:focus{border-color:var(--color-accent)}.container{max-width:960px;margin:0 auto;padding:0 20px}.card{background:var(--bg-card);border:1px solid var(--color-border);border-radius:var(--radius);padding:24px}.badge{display:inline-block;padding:4px 10px;border-radius:100px;font-size:12px;font-weight:600}.badge-waiting{background:#ffd93d26;color:var(--color-accent)}.badge-playing{background:#4ecdc426;color:var(--color-success)}.badge-ended{background:#8888aa26;color:var(--color-text-dim)}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes drawLine{0%{stroke-dashoffset:500}to{stroke-dashoffset:0}}
