:root{color-scheme:dark;--bg: #0c0f14;--panel: #141a24;--panel-border: #243044;--text: #e8edf5;--muted: #8b9bb3;--accent: #5eb1ff;--accent-dim: #2a6db8;--danger: #ff6b5a;--safe: #5ddea8;--white-heat: rgba(80, 170, 255, .75);--black-heat: rgba(255, 120, 80, .75);--contested: rgba(180, 120, 255, .7);--heat-cell-light: #2a3140;--heat-cell-dark: #1a2030}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:DM Sans,system-ui,sans-serif}body{background:radial-gradient(ellipse 80% 50% at 50% -20%,#1a2840 0%,transparent 55%),var(--bg)}button,input,select{font:inherit}.app{max-width:1600px;margin:0 auto;padding:1.25rem 1.5rem 2rem}.app-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:.75rem 1.5rem;margin-bottom:1.25rem}.app-header h1{margin:0;font-size:1.75rem;font-weight:700;letter-spacing:-.02em}.app-header p{margin:0;color:var(--muted);font-size:.95rem}.layout-main{display:grid;grid-template-columns:210px minmax(0,1fr) minmax(260px,300px);gap:1.25rem;align-items:start}.layout-main:has(.side-rail.collapsed){grid-template-columns:40px minmax(0,1fr) minmax(260px,300px)}.center-column{display:flex;flex-direction:column;gap:.85rem;min-width:0}.side-rail{position:sticky;top:1rem;align-self:start;min-width:0}.side-rail-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}.side-rail-title{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.side-rail-toggle{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;color:var(--muted);cursor:pointer;font-size:.65rem}.side-rail-toggle:hover{border-color:var(--accent-dim);color:var(--text)}.side-rail.collapsed{display:flex;flex-direction:column;align-items:center;gap:.35rem}.side-rail.collapsed .side-rail-header{margin-bottom:0;justify-content:center}.side-rail-collapsed-label{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);padding:.65rem .35rem;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;color:var(--muted);cursor:pointer;font-size:.7rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.side-rail-collapsed-label:hover{border-color:var(--accent-dim);color:var(--text)}.side-rail-body{max-height:calc(100vh - 5rem);overflow-y:auto}.side-rail .controls{padding:.85rem;background:var(--panel);border:1px solid var(--panel-border);border-radius:12px}.side-rail .controls h2{font-size:.72rem;margin:.65rem 0 .4rem}.side-rail .controls h2:first-child{margin-top:0}.side-rail .controls-footnote{display:none}.side-rail .palette-grid{flex-direction:column}.side-rail .palette-chip{width:100%;justify-content:flex-start}.side-rail .control-row .btn{font-size:.78rem;padding:.35rem .55rem}.board-side-column{display:flex;flex-direction:column;gap:.65rem;min-width:0}.square-detail-panel{padding:.75rem .85rem}.square-detail-panel h2{margin:0 0 .5rem;font-size:.75rem}.board-duo{display:grid;grid-template-columns:minmax(0,1fr) minmax(160px,220px);gap:.85rem;align-items:start;width:100%}.center-column .board-wrap{width:100%;max-width:none}.center-column .heat-map-panel{max-width:none;width:100%;flex:0 0 auto}.position-browser.compact{max-height:min(540px,55vh)}.position-browser.compact .position-browser-hint{display:none}.position-browser.compact .position-browser-toolbar{gap:.35rem}@media(max-width:1280px){.layout-main{grid-template-columns:200px minmax(0,1fr) minmax(240px,280px)}.layout-main:has(.side-rail.collapsed){grid-template-columns:40px minmax(0,1fr) minmax(240px,280px)}}@media(max-width:1100px){.layout-main,.layout-main:has(.side-rail.collapsed){grid-template-columns:1fr}.side-rail.collapsed{flex-direction:row;width:100%}.side-rail-collapsed-label{writing-mode:horizontal-tb;transform:none;width:100%}.board-duo{grid-template-columns:1fr;max-width:480px;margin:0 auto}.center-column .heat-map-panel{max-width:280px;margin:0 auto}.layout-main .sidebar-column{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem}}@media(max-width:900px){.side-rail.open{width:100%}}.layout{display:grid;grid-template-columns:minmax(280px,1fr) minmax(300px,380px);gap:1.25rem;align-items:start}.layout-wide{max-width:1400px;grid-template-columns:minmax(0,1fr) minmax(280px,340px)}.board-column,.sidebar-column{display:flex;flex-direction:column;gap:1rem;min-width:0}@media(max-width:1100px){.layout-wide{grid-template-columns:1fr}}@media(max-width:900px){.layout{grid-template-columns:1fr}}.panel{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:1rem 1.1rem}.panel h2{margin:0 0 .75rem;font-size:.85rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}.board-wrap{position:relative;width:100%;max-width:560px}.board-wrap.main-board{margin:0}.board-stack{position:relative;width:100%;aspect-ratio:1}.heat-layer{position:absolute;inset:0;display:grid;grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(8,1fr);pointer-events:none;border-radius:4px;overflow:hidden}.heat-cell{transition:background .2s ease}.heat-cell.clickable{pointer-events:auto;cursor:pointer}.controls{display:flex;flex-direction:column;gap:.85rem}.controls-footnote{margin:0;font-size:.8rem;color:var(--muted)}.control-row{display:flex;flex-wrap:wrap;gap:.5rem}.btn{background:#1e2a3d;border:1px solid var(--panel-border);color:var(--text);padding:.45rem .75rem;border-radius:8px;cursor:pointer;font-size:.85rem}.btn:hover{border-color:var(--accent-dim)}.btn.active{background:#1a3a5c;border-color:var(--accent);color:#fff}.btn-primary{background:var(--accent-dim);border-color:var(--accent)}.summary{font-size:.95rem;line-height:1.5;color:var(--text)}.metrics{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;font-size:.85rem}.metric{background:#0f141c;border-radius:8px;padding:.5rem .65rem}.metric span{display:block;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}.plan-card{background:#0f141c;border-radius:10px;padding:.75rem;margin-top:.5rem;border-left:3px solid var(--accent)}.plan-card h3{margin:0 0 .35rem;font-size:.95rem}.plan-card p{margin:0;font-size:.85rem;color:var(--muted);line-height:1.45}.plan-card .caveat{margin-top:.5rem;font-size:.8rem;color:#c9a227}.inspector{font-size:.85rem;line-height:1.5}.inspector code{font-family:JetBrains Mono,monospace;font-size:.8rem;color:var(--accent)}.piece-markers{position:absolute;inset:0;pointer-events:none}.piece-marker{position:absolute;width:12.5%;height:12.5%;display:flex;align-items:flex-start;justify-content:flex-end;padding:2px}.piece-marker span{font-size:10px;background:#000000a6;color:#ffdd57;border-radius:4px;padding:1px 4px}.king-danger-ring{box-shadow:inset 0 0 0 3px #ff5a46d9;animation:pulse-ring 1.8s ease-in-out infinite}@keyframes pulse-ring{0%,to{box-shadow:inset 0 0 0 2px #ff5a4680}50%{box-shadow:inset 0 0 0 4px #ff5a46f2}}.heat-map-panel{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:.65rem;display:flex;flex-direction:column;gap:.5rem;width:100%;max-width:240px}.heat-map-header{display:flex;flex-direction:column;gap:.1rem}.heat-map-title{font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.heat-map-sub{font-size:.72rem;color:var(--muted)}.heat-map-grid{display:grid;grid-template-columns:repeat(8,1fr);aspect-ratio:1;border-radius:6px;overflow:hidden;border:1px solid var(--panel-border)}.heat-map-cell{border:none;padding:0;margin:0;cursor:pointer;min-height:0;transition:transform .1s ease,filter .15s ease}.heat-map-cell:hover{filter:brightness(1.15);z-index:1}.heat-map-cell.selected{outline:2px solid var(--accent);outline-offset:-2px;z-index:2}.heat-legend{display:flex;flex-wrap:wrap;gap:.5rem .75rem;font-size:.7rem;color:var(--muted)}.heat-legend-item{display:inline-flex;align-items:center;gap:.3rem}.heat-legend-swatch{width:10px;height:10px;border-radius:2px}.palette-grid{display:flex;flex-wrap:wrap;gap:.45rem}.palette-chip{display:inline-flex;align-items:center;gap:.4rem;background:#1e2a3d;border:1px solid var(--panel-border);color:var(--text);padding:.35rem .55rem;border-radius:8px;cursor:pointer;font-size:.78rem}.palette-chip.active{border-color:var(--accent);background:#1a3a5c}.palette-swatches{display:inline-flex;gap:2px}.palette-swatches span{width:10px;height:10px;border-radius:2px}.palette-desc{margin:0;font-size:.78rem;color:var(--muted)}.position-browser{display:flex;flex-direction:column;max-height:540px;overflow:hidden}.position-browser>.browse-tabs,.position-browser>.position-count{flex-shrink:0}.position-browser-toolbar{flex-shrink:0;display:flex;flex-direction:column;gap:.45rem}.position-browser-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.position-browser-head h2{margin:0}.position-nav{display:flex;gap:.35rem}.btn-icon{min-width:2.25rem;padding:.35rem .5rem;font-size:1rem;line-height:1}.position-search{width:100%;padding:.5rem .65rem;border-radius:8px;border:1px solid var(--panel-border);background:#0f141c;color:var(--text)}.position-search:focus{outline:2px solid var(--accent-dim);border-color:var(--accent)}.position-browser-hint{margin:0;font-size:.75rem;color:var(--muted)}.position-list{flex:1 1 auto;min-height:180px;overflow-y:auto;display:flex;flex-direction:column;gap:.45rem;padding-right:.25rem;margin-top:.35rem;scroll-padding-top:.35rem}.position-list:focus{outline:none}.position-card{text-align:left;background:#0f141c;border:1px solid var(--panel-border);border-radius:10px;padding:.6rem .7rem;cursor:pointer;color:var(--text);display:flex;flex-direction:column;gap:.2rem}.position-card:hover{border-color:var(--accent-dim)}.position-card.active{border-color:var(--accent);background:#152238}.position-card.gm.active{border-left:3px solid #c9a227}.position-card-top{display:flex;justify-content:space-between;align-items:center}.position-badge{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#c9a227;background:#c9a22726;padding:.1rem .35rem;border-radius:4px}.position-card.training .position-badge{color:var(--accent);background:#5eb1ff1f}.position-year{font-size:.72rem;color:var(--muted)}.position-label{font-size:.88rem;line-height:1.3}.position-players{font-size:.8rem;color:var(--muted)}.position-event{font-size:.75rem;color:var(--muted)}.position-theme{font-size:.78rem;color:var(--safe)}.position-hint{font-size:.72rem;color:#c9a227;font-style:italic}.position-empty,.position-count{margin:0;font-size:.78rem;color:var(--muted)}.browse-toggle-row{margin-top:-.25rem}.browse-toggle{font-size:.85rem;color:var(--muted);display:flex;align-items:center;gap:.45rem;cursor:pointer}.browse-tabs{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.65rem}.browse-tab{background:#1e2a3d;border:1px solid var(--panel-border);color:var(--text);padding:.4rem .65rem;border-radius:8px;cursor:pointer;font-size:.8rem}.browse-tab.active{background:#1a3a5c;border-color:var(--accent)}.family-chips{display:flex;flex-wrap:wrap;gap:.35rem;margin:.35rem 0}.gm-collection-chips{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;padding-bottom:.15rem;scrollbar-width:thin}.gm-collection-chips .btn{flex-shrink:0;white-space:nowrap}.game-loading-banner{margin:0 0 .5rem;padding:.4rem .65rem;font-size:.82rem;color:var(--accent);background:#5aa0dc1f;border-radius:6px;border:1px solid rgba(90,160,220,.25)}.pgn-upload-row{display:flex;gap:.5rem;margin:.35rem 0;align-items:center}.pgn-upload-input{display:none}.timeline-heading{margin:1rem 0 .25rem;font-size:.85rem;color:var(--accent)}.timeline-caption{margin:0 0 .5rem;font-size:.78rem;color:var(--muted)}.battlefield-timeline{margin-top:.35rem}.timeline-readout{margin:.45rem 0 0;font-size:.74rem;line-height:1.4;color:var(--text)}.timeline-readout-stats{color:var(--muted);font-size:.72rem}.timeline-legend{display:flex;flex-wrap:wrap;gap:.65rem;font-size:.72rem;color:var(--muted);margin-bottom:.35rem}.legend-eval:before{content:"—";color:#7eb8ff;margin-right:.25rem}.legend-pressure-w:before{content:"—";color:#6fcf97;margin-right:.25rem}.legend-pressure-b:before{content:"—";color:#e07a7a;margin-right:.25rem}.legend-balance:before{content:"—";color:#c9a86c;margin-right:.25rem}.legend-tension:before{content:"—";color:#b088f9;margin-right:.25rem}.legend-swing:before{content:"—";color:#f0c674;margin-right:.25rem}.legend-muted{color:var(--muted);font-size:.68rem}.timeline-chart{width:100%;height:auto;display:block;cursor:crosshair;background:#0003;border-radius:6px;border:1px solid var(--border)}.timeline-zero{stroke:#ffffff26;stroke-width:1}.timeline-eval-line{stroke:#7eb8ff;stroke-width:2}.timeline-eval-fill{fill:#7eb8ff38;stroke:none}.timeline-balance-line{stroke:#c9a86c;stroke-width:2}.timeline-balance-line.thin{stroke-width:1.25;opacity:.75}.timeline-balance-fill{fill:#c9a86c47;stroke:none}.timeline-tension-fill{fill:#b088f959;stroke:#b088f9;stroke-width:1}.timeline-swing-line{stroke:#f0c674;stroke-width:1.5}.timeline-swing-w{fill:#6fcf97}.timeline-swing-b{fill:#e07a7a}.timeline-pressure-w-fill{fill:#6fcf978c;stroke:#6fcf97;stroke-width:1;stroke-linejoin:round}.timeline-pressure-b-fill{fill:#e07a7a8c;stroke:#e07a7a;stroke-width:1;stroke-linejoin:round}.timeline-pressure-w{stroke:#6fcf97;stroke-width:1.5;opacity:.85}.timeline-pressure-b{stroke:#e07a7a;stroke-width:1.5;opacity:.85}.timeline-cursor{stroke:var(--accent);stroke-width:1.5;stroke-dasharray:4 3}.timeline-footer{display:flex;justify-content:space-between;gap:.5rem;font-size:.72rem;color:var(--muted);margin-top:.35rem}.timeline-loading{color:var(--accent)}.timeline-empty,.plan-empty{font-size:.82rem;color:var(--muted)}.family-heading{margin:.65rem 0 .35rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--accent)}.position-family-group:first-child .family-heading{margin-top:0}.position-opening-meta{font-size:.78rem;color:var(--muted);font-family:JetBrains Mono,monospace}.position-card.opening.active{border-left:3px solid var(--safe)}.position-card.opening .position-badge{color:var(--safe);background:#5ddea81f}.opening-landscape{margin-top:0}.landscape-intro,.related-intro{margin:0 0 .75rem;font-size:.85rem;color:var(--muted);line-height:1.45}.cluster-list{display:flex;flex-direction:column;gap:.85rem}.cluster-card{background:#0f141c;border:1px solid var(--panel-border);border-radius:10px;padding:.75rem}.cluster-header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.35rem}.cluster-header h3{margin:0;font-size:.95rem}.cluster-meta{font-size:.72rem;color:var(--muted)}.cluster-reason{margin:.35rem 0 .65rem;font-size:.8rem;color:var(--muted)}.cluster-openings{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.5rem}.cluster-opening{display:flex;flex-direction:column;gap:.35rem;background:#141a24;border:1px solid var(--panel-border);border-radius:8px;padding:.4rem;cursor:pointer;color:var(--text);text-align:left}.cluster-opening:hover{border-color:var(--accent-dim)}.cluster-opening.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.mini-heat-grid{display:grid;grid-template-columns:repeat(8,1fr);aspect-ratio:1;border-radius:4px;overflow:hidden}.mini-heat-cell{min-width:0;min-height:0}.cluster-opening-text{display:flex;flex-direction:column;gap:.1rem;font-size:.75rem}.cluster-opening-text strong{color:var(--accent);font-family:JetBrains Mono,monospace}.cluster-opening-text small{color:var(--muted);font-size:.68rem}.signature-tags{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.65rem}.signature-tag{font-size:.72rem;background:#0f141c;border:1px solid var(--panel-border);border-radius:999px;padding:.2rem .5rem;color:var(--muted)}.relation-list{display:flex;flex-direction:column;gap:.4rem}.relation-row{text-align:left;background:#0f141c;border:1px solid var(--panel-border);border-radius:8px;padding:.55rem .65rem;cursor:pointer;color:var(--text);display:flex;flex-direction:column;gap:.15rem}.relation-row:hover{border-color:var(--accent-dim)}.relation-top{display:flex;align-items:center;gap:.45rem}.relation-eco{font-family:JetBrains Mono,monospace;font-size:.72rem;color:var(--accent);font-weight:600}.relation-name{flex:1;font-size:.85rem;font-weight:600}.relation-pct{font-size:.75rem;color:var(--safe)}.relation-family{font-size:.72rem;color:var(--muted)}.relation-reason{font-size:.72rem;color:#c9a227}.game-navigator{display:flex;flex-direction:column;gap:.65rem;background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:.75rem .85rem}.eval-bar-wrap{display:flex;flex-direction:column;gap:.35rem}.eval-bar-labels{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;font-size:.78rem}.eval-side{color:var(--muted)}.eval-black{text-align:left}.eval-white{text-align:right}.eval-center{text-align:center;font-weight:600;font-family:JetBrains Mono,monospace;display:flex;flex-direction:column;gap:.1rem}.eval-center small{font-size:.65rem;color:var(--muted);font-weight:400;font-family:DM Sans,sans-serif}.eval-bar-track{position:relative;height:14px;border-radius:7px;overflow:hidden;background:linear-gradient(to right,#2a1515,#1a1a1a,#152a20);border:1px solid var(--panel-border)}.eval-bar-white{height:100%;background:linear-gradient(to right,#888,#f0f0f0);transition:width .35s ease}.eval-bar-marker{position:absolute;top:-2px;width:3px;height:18px;background:#fff;border-radius:2px;transform:translate(-50%);transition:left .35s ease;box-shadow:0 0 6px #fff9}.game-nav-meta{display:flex;flex-wrap:wrap;gap:.35rem 1rem;font-size:.82rem}.game-players{font-weight:600}.game-event{color:var(--muted)}.game-nav-controls{display:flex;align-items:center;justify-content:center;gap:.35rem}.game-nav-status{min-width:120px;text-align:center;display:flex;flex-direction:column;gap:.1rem;padding:0 .5rem}.game-ply{font-size:.78rem;color:var(--muted)}.game-san{font-family:JetBrains Mono,monospace;font-size:.9rem;font-weight:600}.game-scrubber{width:100%;accent-color:var(--accent)}.game-nav-hint{margin:0;font-size:.75rem;color:var(--muted);text-align:center}
