*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #0f172a;--surface: #1e293b;--surface2: #334155;--text: #f1f5f9;--muted: #94a3b8;--accent: #6366f1;--accent-hover: #818cf8;--danger: #ef4444;--success: #22c55e;--warning: #f97316}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100vh}#app{min-height:100vh}button{font:inherit;cursor:pointer;border:none;border-radius:8px;padding:.5rem 1rem;background:var(--accent);color:#fff;transition:background .15s}button:hover:not(:disabled){background:var(--accent-hover)}button:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:var(--surface2)}button.danger{background:var(--danger)}input,textarea{font:inherit;padding:.5rem .75rem;border-radius:8px;border:1px solid var(--surface2);background:var(--bg);color:var(--text);width:100%}textarea{resize:vertical;min-height:4rem}label{display:block;font-size:.85rem;color:var(--muted);margin-bottom:.25rem}.form-group{margin-bottom:1rem}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--surface);border-radius:12px;padding:1.5rem;width:min(420px,90vw);max-height:90vh;overflow-y:auto}.modal h2{margin-bottom:1rem}.modal-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:1rem}.error-msg{color:var(--danger);font-size:.85rem;margin-top:.5rem}.homescreen{max-width:960px;margin:0 auto;padding:2rem 1rem}.homescreen-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.homescreen-header h1{font-size:1.75rem}.match-bar{background:var(--surface);border-radius:12px;padding:1rem;margin-bottom:1.5rem;display:flex;flex-wrap:wrap;gap:1rem;align-items:center}.match-bar .selection{flex:1;min-width:200px}.match-bar .selection span{color:var(--muted);font-size:.9rem}.match-bar .selection strong{color:var(--text)}.character-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.character-card{background:var(--surface);border-radius:12px;padding:1rem;border:2px solid transparent;transition:border-color .15s}.character-card.selected-p1{border-color:#3b82f6}.character-card.selected-p2{border-color:#ec4899}.character-card-header{display:flex;gap:.75rem;align-items:flex-start;margin-bottom:.75rem}.character-avatar{font-size:2.5rem;line-height:1}.character-card h3{font-size:1.1rem}.character-card .description{color:var(--muted);font-size:.85rem;margin-top:.25rem}.character-stats{display:flex;gap:1rem;font-size:.85rem;color:var(--muted);margin-bottom:.75rem}.character-stats strong{color:var(--text)}.character-actions{display:flex;flex-wrap:wrap;gap:.5rem}.character-actions button{font-size:.85rem;padding:.35rem .65rem}.empty-state{text-align:center;color:var(--muted);padding:3rem 1rem}.p2p-setup{max-width:42rem;margin:0 auto;padding:1.5rem 1.25rem 2.5rem}.p2p-setup-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.25rem}.p2p-setup-header-text h1{font-size:1.5rem;font-weight:700;line-height:1.2;color:var(--text)}.p2p-setup-subtitle{margin-top:.35rem;font-size:.95rem;line-height:1.45;color:var(--muted)}.p2p-character-preview{display:flex;align-items:center;gap:.85rem;padding:.85rem 1rem;margin-bottom:1.25rem;background:var(--surface);border-radius:12px;border:1px solid var(--surface2)}.p2p-character-preview .avatar{font-size:2.25rem;line-height:1;flex-shrink:0}.p2p-character-meta{display:flex;flex-direction:column;gap:.15rem}.p2p-playing-as{font-size:.75rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.p2p-character-meta h2{font-size:1.1rem;font-weight:600;color:var(--text)}.p2p-character-meta p{font-size:.9rem;color:var(--muted)}.p2p-unavailable{padding:.85rem 1rem;margin-bottom:1rem;border-radius:10px;background:color-mix(in srgb,var(--warning) 18%,var(--surface));border:1px solid color-mix(in srgb,var(--warning) 45%,var(--surface2));color:var(--text);font-size:.9rem}.p2p-tabs{display:flex;gap:.5rem;margin-bottom:1rem}.p2p-tab{flex:1;background:var(--surface2);color:var(--text);font-weight:600}.p2p-tab.active{background:var(--accent);color:#fff}.p2p-tab.active:hover:not(:disabled){background:var(--accent-hover)}.p2p-panel{background:var(--surface);border:1px solid var(--surface2);border-radius:14px;padding:1.15rem 1.1rem 1.25rem}.p2p-panel[hidden]{display:none!important}.p2p-panel-title{font-size:1.05rem;font-weight:600;margin-bottom:.65rem;color:var(--text)}.p2p-status{font-size:.9rem;color:var(--muted);min-height:1.35rem;margin-bottom:.85rem}.p2p-status.error{color:var(--danger)}.p2p-status.warning{color:var(--warning)}.p2p-status.success{color:var(--success)}.p2p-steps{display:flex;flex-direction:column;gap:1rem}.p2p-step{padding:.85rem .9rem;border-radius:10px;background:var(--bg);border:1px solid var(--surface2)}.p2p-step-header{display:flex;align-items:center;gap:.6rem;margin-bottom:.65rem}.p2p-step-badge{display:inline-flex;align-items:center;justify-content:center;width:1.65rem;height:1.65rem;border-radius:999px;font-size:.8rem;font-weight:700;background:var(--accent);color:#fff;flex-shrink:0}.p2p-step-title{font-size:.98rem;font-weight:600;color:var(--text)}.p2p-step-body{display:flex;flex-direction:column;gap:.6rem}.p2p-step-hint{font-size:.82rem;line-height:1.4;color:var(--muted)}.p2p-code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.72rem;line-height:1.35;width:100%;padding:.55rem .65rem;border-radius:8px;border:1px solid var(--surface2);background:var(--surface);color:var(--text);resize:vertical}.p2p-code:focus{outline:2px solid color-mix(in srgb,var(--accent) 55%,transparent);outline-offset:1px}.p2p-action-row{display:flex;flex-wrap:wrap;gap:.5rem}.match-view{display:flex;flex-direction:column;min-height:100vh;padding:.75rem;gap:.75rem}.match-main{display:flex;flex:1;gap:.75rem;align-items:flex-start;justify-content:center;flex-wrap:wrap}.player-column{display:flex;flex-direction:column;gap:.5rem;width:180px;flex-shrink:0}.player-column.active-player .player-skills{border-color:var(--success)}.player-skills{background:var(--surface);border-radius:12px;padding:.6rem;border:2px solid var(--surface2);transition:opacity .15s,border-color .15s}.player-column:not(.active-player) .player-skills{opacity:.55}.player-skills-title{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:.4rem;text-align:center}.player-skills .skills{flex-direction:column}.player-skills .skill-btn{width:100%;font-size:.8rem;padding:.4rem .5rem}.player-turn-controls{display:none;margin-top:.6rem;padding-top:.6rem;border-top:1px solid var(--surface2);flex-direction:row;flex-wrap:wrap;gap:.5rem;align-items:center;justify-content:center}.player-column.active-player .player-turn-controls{display:flex}.player-turn-controls .turn-timer{font-size:1.1rem;min-width:3.5rem}.player-turn-controls .turn-timer.warning{color:var(--warning)}.player-turn-controls .turn-timer.critical{color:var(--danger)}.player-turn-controls button{font-size:.8rem;padding:.4rem .75rem;flex:1;min-width:5rem}.player-card{background:var(--surface);border-radius:12px;padding:1rem;width:100%;border:2px solid transparent;transition:border-color .15s,box-shadow .15s}.player-card.active-turn{border-color:var(--success);box-shadow:0 0 12px #22c55e59}.player-card .avatar{font-size:2.5rem;text-align:center;margin-bottom:.5rem}.player-card h3{text-align:center;font-size:1rem;margin-bottom:.75rem}.player-card .stat-row{display:flex;justify-content:space-between;font-size:.85rem;padding:.2rem 0;color:var(--muted)}.player-card .stat-row span:last-child{color:var(--text);font-weight:600}.board-area{flex:1;display:flex;justify-content:center;align-items:center;min-width:0;overflow:auto}.board-wrapper{padding:.5rem}.board-grid{position:relative;margin:0 auto;overflow:visible}.hex-cell{position:absolute;width:var(--hex-w, 52px);height:var(--hex-h, 60px);pointer-events:none}.hex-cell:has(button.hex-tile.in-range:hover),.hex-cell:has(button.hex-tile.in-range:focus-visible){z-index:10000}.hex-layer{position:absolute;top:0;right:0;bottom:0;left:0;clip-path:var(--hex-clip);pointer-events:none}.hex-layer-ground{z-index:0;background:var(--ground-color)}.hex-layer-range{z-index:1;opacity:0}.hex-tile.in-range .hex-layer-range{opacity:1;background:#ffffff59}.hex-tile.in-range.applicable:hover .hex-layer-range,.hex-tile.in-range.applicable:focus-visible .hex-layer-range{background:#22c55e73}.hex-tile.in-range:not(.applicable):hover .hex-layer-range,.hex-tile.in-range:not(.applicable):focus-visible .hex-layer-range{background:#ef444473}.hex-layer-entity{z-index:2;font-size:1.5rem;display:flex;align-items:center;justify-content:center;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}button.hex-tile{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;padding:0;margin:0;box-sizing:border-box;background:transparent!important;color:inherit;border-radius:0;clip-path:var(--hex-clip);border:none;cursor:default;display:flex;align-items:center;justify-content:center;transition:filter .15s ease;outline:none;z-index:1;pointer-events:none}button.hex-tile:hover,button.hex-tile:focus,button.hex-tile:focus-visible{background:transparent!important;outline:none;box-shadow:none}button.hex-tile.in-range{pointer-events:auto;cursor:pointer}button.hex-tile.in-range:not(.applicable){cursor:not-allowed}.skills{display:flex;gap:.35rem;flex-wrap:wrap}.skills button.selected{outline:2px solid var(--success);outline-offset:2px}.turn-timer{font-weight:700;font-variant-numeric:tabular-nums;text-align:center}.run-log{background:var(--surface);border-radius:12px;padding:.75rem 1rem;max-height:140px;overflow-y:auto;font-size:.85rem;line-height:1.5}.run-log .log-entry{color:var(--muted);border-bottom:1px solid var(--surface2);padding:.2rem 0}.run-log .log-entry:last-child{border-bottom:none;color:var(--text)}.win-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:200}.win-panel{background:var(--surface);border-radius:16px;padding:2rem;text-align:center;max-width:400px}.win-panel h2{font-size:1.5rem;margin-bottom:.5rem}.win-panel .winner-avatar{font-size:4rem;margin:1rem 0}.win-panel p{color:var(--muted);margin-bottom:1.5rem}@media(max-width:900px){.match-main{flex-direction:column;align-items:center}.player-column{width:100%;max-width:320px}}
