:root{--color-bg: #f5f7fb;--color-surface: #ffffff;--color-surface-alt: #eef2f8;--color-border: #d5dce8;--color-text: #1e293b;--color-text-muted: #64748b;--color-primary: #2563eb;--color-primary-hover: #1d4ed8;--color-accent: #059669;--color-accent-hover: #047857;--color-danger: #dc2626;--font-sans: "Hiragino Sans", "Noto Sans JP", system-ui, sans-serif;--radius: 8px;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--max-width: 980px;--track-height: 120px;--shadow-panel: 0 1px 3px rgba(15, 23, 42, .06), 0 4px 12px rgba(15, 23, 42, .04)}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);line-height:1.5;min-height:100vh}.app{max-width:var(--max-width);margin:0 auto;padding:var(--space-md)}.app-header{text-align:center;margin-bottom:var(--space-lg)}.app-header h1{margin:0;font-size:1.75rem}.tagline{color:var(--color-text-muted);margin:var(--space-xs) 0}.volume-controls{display:flex;gap:var(--space-md);flex-wrap:wrap;font-size:.9rem;margin-bottom:var(--space-md)}.privacy-notice{font-size:.8rem;color:var(--color-text-muted);text-align:center;margin:var(--space-lg) 0 var(--space-md)}.panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--space-lg);margin-bottom:var(--space-lg);box-shadow:var(--shadow-panel)}.status-banner{text-align:center;color:var(--color-primary)}.btn{cursor:pointer;border:none;border-radius:var(--radius);padding:.6rem 1.2rem;font-size:1rem;background:var(--color-surface-alt);color:var(--color-text)}.btn.primary{background:var(--color-primary);color:#fff}.btn.primary:hover{background:var(--color-primary-hover)}.btn.accent{background:var(--color-accent);color:#fff}.btn.accent:hover{background:var(--color-accent-hover)}.field{display:flex;flex-direction:column;gap:var(--space-xs);margin-bottom:var(--space-md)}.field input,.field select,.shop-row select{padding:.5rem;border-radius:var(--radius);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);font-size:1rem}.lobby{display:grid;gap:var(--space-lg)}@media (min-width: 640px){.lobby{grid-template-columns:1fr 1fr}}.hint{font-size:.9rem;color:var(--color-text-muted)}.hint.success{color:var(--color-accent)}.hint.error{color:var(--color-danger)}.btn-link{background:none;border:none;color:var(--color-primary);cursor:pointer;text-decoration:underline;margin-left:var(--space-sm)}.car-preview{max-width:120px;display:block;margin:var(--space-sm) auto}.player-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--space-md)}.enteredcar{background:var(--color-surface-alt);border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--space-sm);text-align:center}.enteredcar .player-id{font-size:.75rem;color:var(--color-text-muted);margin:0}.enteredcar .player-name{margin:var(--space-xs) 0;font-weight:600}.carimg{position:relative;min-height:48px}.carimg img{max-width:100%;height:auto}.carimg .accessories{position:absolute;left:0;top:-8px;width:32px;z-index:1}.lobby-players h2{font-size:.85rem;margin:0 0 var(--space-xs)}.lobby-players .count{font-size:.95em}.lobby-players .player-grid{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-start}.lobby-players .enteredcar{flex:0 0 80px;width:80px;max-width:80px;padding:4px 3px;box-sizing:border-box}.lobby-players .enteredcar .player-id{display:none}.lobby-players .enteredcar .player-name{font-size:.65rem;margin:0;line-height:1.15;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lobby-players .carimg{position:relative;min-height:0;line-height:0}.lobby-players .carimg img{max-width:68px;max-height:44px;width:auto;height:auto;margin:0 auto;display:block}.lobby-players .carimg .accessories{width:22px;top:-4px;left:0}.race-roster{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-top:var(--space-md);padding:var(--space-xs) 0}.race-roster .enteredcar{flex:0 0 auto;width:5.5rem;padding:var(--space-xs)}.race-roster .enteredcar .player-id{font-size:.6rem;line-height:1.2}.race-roster .enteredcar .player-name{font-size:.7rem;margin:2px 0;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.race-roster .carimg{min-height:0}.race-roster .carimg img.race-roster-car,.race-roster .carimg>img:last-child{max-width:52px;max-height:36px;width:auto;height:auto;margin:0 auto;display:block;object-fit:contain}.race-roster .carimg .accessories{width:22px;height:22px;left:0;bottom:2px;top:auto}.race.panel:focus{outline:2px solid var(--color-primary);outline-offset:2px}.race-track{position:relative;height:var(--track-height);background:linear-gradient(180deg,#c8e6c0,#9ccc8f 55%,#7cb86a);border:1px solid #a8c9a0;border-radius:var(--radius);margin-bottom:var(--space-lg);overflow:hidden;box-shadow:inset 0 1px #ffffff80}.track-bg{position:absolute;top:40%;right:0;bottom:0;left:0;background:repeating-linear-gradient(90deg,#8a9aaa 0,#8a9aaa 40px,#9aa8b6 40px,#9aa8b6 80px)}.race-car{position:absolute;bottom:8px;transform:translate(-50%);transition:left .15s linear;text-align:center}.race-car-sprite{display:inline-flex;align-items:flex-end;gap:0;line-height:0}.race-car-img{width:64px;height:auto;display:block;flex-shrink:0}.race-accessory{width:56px;height:56px;object-fit:contain;flex-shrink:0;display:block;pointer-events:none;margin:0;padding:0}.car-label{display:block;font-size:.7rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:80px;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35)}.typing-panel{background:var(--color-surface);border:1px solid var(--color-border);padding:var(--space-md);border-radius:var(--radius);margin-bottom:var(--space-md);box-shadow:var(--shadow-panel)}.typing-category{font-size:.85rem;color:var(--color-text-muted);margin:0 0 var(--space-xs)}.typing-original{font-size:1.25rem;margin:0 0 var(--space-sm)}.typing-remaining{font-size:1.1rem;color:var(--color-text-muted);margin:0 0 var(--space-sm)}.typing-input{font-size:1.5rem;letter-spacing:.1em;color:var(--color-accent);margin:0}.typing-hint{font-size:.85rem;color:var(--color-text-muted)}.result .winner-car{max-width:200px;display:block;margin:var(--space-md) auto}.rankings{text-align:left;max-width:400px;margin:var(--space-md) auto}.shop-compact.panel{padding:var(--space-md)}.shop-header{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;margin-bottom:var(--space-sm)}.shop-header h2{margin:0;font-size:1.1rem}.shop-points{margin:0;font-weight:700;color:var(--color-accent);font-size:.95rem}.shop-equipped-inline{display:flex;gap:4px;margin-left:auto}.shop-equipped-icon{width:32px;height:32px;object-fit:contain}.shop-message{margin:0 0 var(--space-sm);font-size:.85rem;color:var(--color-accent)}.shop-tabs{display:flex;gap:2px;margin-bottom:var(--space-md);border-bottom:1px solid var(--color-border)}.shop-tab{flex:1;padding:.45rem .5rem;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;background:transparent;color:var(--color-text-muted);font-size:.85rem;cursor:pointer;border-radius:var(--radius) var(--radius) 0 0}.shop-tab:hover{color:var(--color-text);background:var(--color-surface-alt)}.shop-tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:600}.shop-tab-panel{min-height:0}.shop-panel-content{display:flex;gap:var(--space-md);align-items:flex-start}.shop-preview{flex:0 0 100px;text-align:center;padding:var(--space-sm);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius)}.shop-preview-img{display:block;width:72px;height:72px;margin:0 auto var(--space-xs);object-fit:contain}.shop-preview-name{margin:0;font-weight:600;font-size:.8rem;line-height:1.3}.shop-preview-price{margin:2px 0 0;color:var(--color-accent);font-weight:700;font-size:.85rem}.shop-preview-desc{margin:4px 0 0;font-size:.7rem;color:var(--color-text-muted);line-height:1.3}.shop-preview--text{flex:1;min-width:100px;text-align:left}.shop-preview--text .shop-preview-name{font-size:.95rem}.shop-preview--text .shop-preview-desc{font-size:.8rem;margin-top:var(--space-xs)}.shop-controls{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--space-sm);justify-content:center}.shop-select-label{display:block}.shop-controls select{width:100%;padding:.4rem .5rem;border-radius:var(--radius);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);font-size:.85rem}.btn-shop-buy{width:100%;padding:.5rem;font-size:.9rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (max-width: 640px){.shop-panel-content{flex-direction:column}.shop-preview{flex:none;width:100%;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);text-align:left}.shop-preview-img{margin:0}.shop-equipped-inline{margin-left:0}}.gt-ad--center{width:100%;max-width:980px;margin:50px auto;text-align:center}.gt-ad--sidebar{position:fixed;z-index:99999;bottom:10%;right:80px;width:100px}@media (max-width: 640px){.gt-ad--sidebar{right:8px;width:80px}}.chat-panel{min-height:200px;margin-top:var(--space-lg)}.app-footer{text-align:center;padding:var(--space-xl) 0;font-size:.9rem}.app-footer a{color:var(--color-primary)}@media (max-width: 640px){.app{padding:var(--space-sm)}.panel{padding:var(--space-md)}.race-car-img{width:48px}.race-accessory{width:40px;height:40px}}
