body{margin:0;font-family:Plus Jakarta Sans,Segoe UI,sans-serif}.app-shell{color:#0f172a;background:radial-gradient(1300px 500px at 100% -20%,#f2a82838,#0000 65%),radial-gradient(1000px 400px at -10% 20%,#0284c729,#0000 65%),#f8fafc;min-height:100dvh;padding:1rem}.topbar{z-index:30;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffffb8;border:1px solid #94a3b859;border-radius:1rem;justify-content:space-between;align-items:center;gap:1rem;max-width:1300px;margin:0 auto;padding:.8rem 1rem;display:flex;position:sticky;top:.65rem}.topbar-brand{min-width:0}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:#0369a1;margin:0;font-size:.72rem;font-weight:700}.topbar-actions{flex-wrap:nowrap;justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.user-menu{align-items:center;display:inline-flex;position:relative}.menu-toggle{color:#0f172a;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:.75rem;justify-content:center;align-items:center;width:42px;height:42px;padding:0;display:inline-flex}.menu-toggle:hover{background:#f8fafc}.menu-lines{flex-direction:column;justify-content:center;gap:.4rem;width:1.05rem;display:inline-flex}.menu-lines span{background:#0f172a;border-radius:2px;width:1.05rem;height:2px}.menu-badge{color:#fff;background:#ef4444;border-radius:999px;justify-content:center;align-items:center;min-width:1.25rem;height:1.25rem;padding:0 .28rem;font-size:.72rem;font-weight:700;display:inline-flex}.menu-alert-dot{background:#ef4444;border-radius:999px;width:.56rem;height:.56rem;box-shadow:0 0 0 3px #fee2e2}.menu-popover{z-index:20;background:#fff;border:1px solid #dbe4ee;border-radius:.9rem;gap:.65rem;width:min(360px,90vw);padding:.8rem;display:grid;position:absolute;top:calc(100% + .6rem);right:0;box-shadow:0 18px 35px #0f172a29}.menu-profile{background:linear-gradient(130deg,#eff6ff,#f8fafc);border:1px solid #e2e8f0;border-radius:.75rem;padding:.65rem .7rem}.menu-name{color:#0f172a;margin:0;font-weight:800}.menu-email{color:#475569;margin:0;font-size:.84rem}.menu-section{border-top:1px solid #e2e8f0;gap:.5rem;padding-top:.6rem;display:grid}.menu-section-title{color:#334155;margin:0;font-size:.86rem;font-weight:700}.menu-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:.65rem;gap:.45rem;padding:.55rem;display:grid}.menu-item p{margin:0}.menu-link{color:#334155;font:inherit;text-align:left;background:#f8fafc;border:1px solid #cbd5e1;border-radius:.65rem;padding:.52rem .68rem;font-weight:700}.menu-signout{color:#fff;font:inherit;cursor:pointer;background:#dc2626;border:0;border-radius:.65rem;padding:.58rem .75rem;font-weight:700}.conn-dot{border:1px solid #0f172a2e;border-radius:999px;width:12px;height:12px;box-shadow:0 0 0 4px #94a3b833}.conn-connected{background:#22c55e}.conn-reconnecting{background:#eab308}.conn-disconnected{background:#ef4444}.home-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1rem;max-width:1300px;margin:1rem auto 0;display:grid}.game-tile{cursor:pointer;background:#fff;border:1px solid #dbe4ee;border-radius:1rem;padding:1rem;box-shadow:0 10px 30px #0f172a0f}.game-tile h2{margin:0;font-size:1.4rem}.game-tile p{color:#334155;margin:.7rem 0}.game-tile span{color:#fff;background:#f97316;border-radius:999px;justify-content:center;align-items:center;padding:.35rem .9rem;font-size:.82rem;font-weight:700;display:inline-flex}.caro-layout{grid-template-columns:340px 1fr;gap:1rem;max-width:1300px;margin:1rem auto 0;display:grid}.left-panel{overflow-x:hidden}.panel{background:#fff;border:1px solid #b8c8db;border-radius:1rem;padding:1rem;box-shadow:0 12px 30px #0f172a14}.panel h2,.panel h3{margin:0}.panel-head{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.stack{border-top:1px solid #e2e8f0;gap:.6rem;min-width:0;margin-top:1rem;padding-top:1rem;display:grid}.stack.compact{border-top:0;margin-top:.75rem;padding-top:0}.stack label,.stack input,.stack select,.stack button,.inline-form input,.inline-form button,.ghost-btn,.row-actions button{font:inherit}.stack label{color:#0f172a;gap:.35rem;min-width:0;font-size:.88rem;font-weight:700;display:grid}.stack input,.stack select,.inline-form input{box-sizing:border-box;background:#fff;border:1px solid #cbd5e1;border-radius:.7rem;width:100%;min-width:0;padding:.58rem .7rem}.stack button,.inline-form button,.row-actions button,.challenge-banner button{color:#fff;cursor:pointer;background:#0284c7;border:0;border-radius:.7rem;padding:.58rem .76rem;font-weight:700}button:disabled{opacity:.55;cursor:not-allowed}.ghost-btn{color:#1e293b;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:.7rem;padding:.52rem .76rem;font-weight:600}.checkbox-row{flex-wrap:nowrap;align-items:center;gap:.5rem;display:flex!important}.checkbox-row input{flex:none;width:auto}.friend-list,.invite-list,.room-list{gap:.5rem;margin:0;padding:0;list-style:none;display:grid}.friend-list li,.invite-list li,.room-list li{border:1px solid #e2e8f0;border-radius:.8rem;justify-content:space-between;align-items:center;gap:.6rem;padding:.6rem;display:flex}.friend-list p,.invite-list p,.room-list p{margin:0;font-weight:700}.friend-list small{color:#475569}.friend-presence{align-items:center;gap:.38rem;display:inline-flex}.status-dot{border-radius:999px;width:.5rem;height:.5rem;display:inline-block}.status-dot.online{background:#22c55e}.status-dot.offline{background:#94a3b8}.room-list small{color:#334155;margin-top:.12rem;font-size:.78rem;display:block}.row-actions{gap:.35rem;display:flex}.inline-form{grid-template-columns:1fr auto;gap:.45rem;display:grid}.game-panel{gap:.85rem;display:grid}.game-open-rooms{border-top:0;margin-top:0;padding-top:0}.ready-row{justify-content:flex-start;margin-top:.2rem;display:flex}.ready-row button{color:#fff;cursor:pointer;background:#0284c7;border:0;border-radius:.7rem;padding:.58rem .76rem;font-weight:700}.room-settings-list{gap:.35rem;margin:0;padding:0;list-style:none;display:grid}.room-settings-list li{background:#f8fafc;border:1px solid #e2e8f0;border-radius:.6rem;justify-content:space-between;align-items:center;gap:.5rem;padding:.45rem .55rem;display:flex}.room-settings-list li span{color:#334155;font-size:.8rem}.room-settings-list li strong{color:#0f172a;font-size:.82rem}.game-head p{color:#475569;margin:.2rem 0 0}.score-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:stretch;gap:.65rem;display:grid}.player-slot{text-align:left;background:#f8fafc;border:1px solid #9fb2c9;border-radius:.8rem;gap:.15rem;min-height:76px;padding:.55rem .65rem;display:grid}.player-slot strong{color:#0f172a;font-size:.84rem}.player-slot span{color:#0f172a;white-space:nowrap;text-overflow:ellipsis;font-size:.98rem;font-weight:700;overflow:hidden}.player-slot small{color:#1e293b}.player-slot.left{background:#fef2f2;border-color:#fca5a5}.player-slot.left strong,.player-slot.left span{color:#b91c1c}.player-slot.right{background:#eff6ff;border-color:#93c5fd}.player-slot.right strong,.player-slot.right span{color:#1d4ed8}.player-slot.empty{opacity:.9}.player-slot:disabled{cursor:default}.player-slot.actionable{cursor:pointer;transition:transform .12s,box-shadow .12s}.player-slot.actionable:hover{transform:translateY(-1px);box-shadow:0 8px 18px #0f172a14}.match-center{background:#fff;border:1px solid #cbd5e1;border-radius:.8rem;align-content:center;justify-items:center;min-width:185px;padding:.55rem .8rem;display:grid}.match-center strong{color:#0f172a;font-size:1.3rem}.match-center span{color:#334155;font-size:.86rem;font-weight:700}.match-center small{color:#64748b;font-size:.8rem}.player-slot.filled small{font-weight:700}.room-notice{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:.7rem;margin:0;padding:.5rem .7rem;font-weight:700}.result-popup{z-index:60;background:#0f172a6b;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.result-popup-card{text-align:center;background:#fff;border:1px solid #dbe4ee;border-radius:.95rem;gap:.7rem;width:min(360px,95vw);padding:1rem;display:grid;box-shadow:0 18px 40px #0f172a40}.result-popup-card h3{margin:0;font-size:1.25rem}.result-popup-card p{color:#334155;margin:0;font-weight:600}.result-popup-card button{justify-self:center;min-width:120px}.board-scroll{background:radial-gradient(circle at 0 0,#fbbf2433,#0000 45%),#f8fafc;border:1px solid #cbd5e1;border-radius:1rem;padding:.5rem;overflow:auto}.board{gap:2px;width:max-content;min-width:max-content;margin:0 auto;display:grid}.cell{color:#0f172a;cursor:pointer;background:#fff;border:1px solid #8ca3be;border-radius:4px;width:clamp(22px,3.1vw,30px);height:clamp(22px,3.1vw,30px);padding:0;font-size:clamp(.9rem,1.5vw,1rem);font-weight:700}.cell.x-mark{color:#dc2626}.cell.o-mark{color:#2563eb}.cell.pending{background:#fef9c3;border-color:#eab308}.cell.last-move{animation:.9s ease-out lastMovePulse;box-shadow:inset 0 0 0 2px #f59e0b}@keyframes lastMovePulse{0%{background:#fffbeb;transform:scale(1.05)}to{background:#fff;transform:scale(1)}}.chat-card{border:1px solid #e2e8f0;border-radius:.8rem;gap:.6rem;padding:.75rem;display:grid}.spectator-card{border:1px solid #e2e8f0;border-radius:.8rem;gap:.5rem;padding:.75rem;display:grid}.spectator-card h3{margin:0}.spectator-list{gap:.4rem;margin:0;padding:0;list-style:none;display:grid}.spectator-list li{background:#f8fafc;border:1px solid #e2e8f0;border-radius:.65rem;justify-content:space-between;align-items:center;gap:.5rem;padding:.45rem .55rem;display:flex}.spectator-list small{color:#475569}.room-head-main{min-width:0}.room-inline-back{white-space:nowrap}.chat-log{text-align:left;background:#f8fafc;border:1px solid #e2e8f0;border-radius:.6rem;min-height:120px;max-height:220px;padding:.55rem;overflow:auto}.chat-log p{margin:0 0 .35rem}.chat-log p:last-child{margin-bottom:0}.challenge-banner{color:#9a3412;background:#fff7ed;border:1px solid #fed7aa;border-radius:1rem;justify-content:space-between;align-items:center;gap:.8rem;max-width:1300px;margin:.8rem auto 0;padding:.72rem .85rem;display:flex}.challenge-banner p{margin:0}.challenge-banner div{gap:.5rem;display:flex}.auth-shell{background:radial-gradient(950px 450px at 100% 0,#0284c738,#0000 60%),radial-gradient(950px 450px at 0 100%,#fb923c3d,#0000 60%),#f8fafc;justify-content:center;align-items:center;min-height:100dvh;padding:1rem;display:flex}.auth-card{background:#fff;border:1px solid #dbe4ee;border-radius:1rem;width:min(440px,100%);padding:1rem}.auth-card h1{margin:0}.auth-card p{color:#334155;margin:.4rem 0 1rem}.auth-mode-switch{background:#f8fafc;border:1px solid #dbe4ee;border-radius:999px;grid-template-columns:1fr 1fr;gap:.35rem;margin-bottom:.9rem;padding:.25rem;display:inline-grid}.auth-tab{color:#334155;cursor:pointer;background:0 0;border:0;border-radius:999px;padding:.4rem .9rem;font-weight:700}.auth-tab.active{color:#fff;background:#0284c7}.auth-form{gap:.65rem;display:grid}.auth-form label{color:#0f172a;gap:.35rem;font-size:.9rem;font-weight:700;display:grid}.auth-form input{border:1px solid #cbd5e1;border-radius:.7rem;padding:.58rem .7rem}.auth-form button{color:#fff;cursor:pointer;background:#0284c7;border:0;border-radius:.7rem;padding:.62rem .8rem;font-weight:700}.empty,.helper{color:#1e293b;margin:0}.error-msg{color:#b91c1c;margin:.6rem 0 0;font-weight:700}.error-msg.bottom{max-width:1300px;margin:.8rem auto 0}.empty-room{border:1px dashed #cbd5e1;border-radius:.8rem;padding:1rem}@media (width<=1040px){.caro-layout{grid-template-columns:1fr}.caro-layout.in-room .game-panel{order:1}.caro-layout.in-room .left-panel{order:2}.topbar{flex-direction:row;align-items:center;padding:.65rem .75rem}.topbar-actions{flex-wrap:nowrap;justify-content:flex-end;gap:.4rem;width:auto}.left-panel.in-room{padding:.75rem}.left-panel.in-room .panel-head{margin-bottom:.25rem}.left-panel.in-room .stack{margin-top:.5rem;padding-top:.55rem}.left-panel.in-room .room-settings-list{flex-wrap:nowrap;gap:.45rem;padding-bottom:.2rem;display:flex;overflow-x:auto}.left-panel.in-room .room-settings-list li{white-space:nowrap;min-width:max-content}.menu-popover{width:auto;max-width:none;position:fixed;top:4.6rem;left:.75rem;right:.75rem}.score-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:stretch;gap:.4rem}.match-center{min-width:112px;padding:.45rem .5rem}.match-center strong{font-size:1.05rem}.match-center span{font-size:.75rem}.player-slot{align-items:center;gap:.3rem;min-height:0;padding:.42rem .45rem;display:flex}.player-slot strong,.player-slot span,.player-slot small{white-space:nowrap}.player-slot strong{flex:none;font-size:.68rem}.player-slot span{flex:auto;min-width:0;font-size:.78rem}.player-slot small{flex:none;margin-left:auto;font-size:.74rem}.challenge-banner{flex-direction:column;align-items:flex-start}}
