:root{--felt:#1b2c22;--felt-dark:#122018;--felt-line:#2c4234;--felt-text:#cfc6ac;--felt-text-dim:#8fa392;--paper:#f0e8d4;--paper-edge:#e2d6ba;--ink:#2b2418;--ink-soft:#5c5140;--brass:#b3873e;--stamp:#99392b;--serif-display:"Fraunces", "Georgia", serif;--serif-body:"Literata", "Georgia", serif;--mono:"IBM Plex Mono", "Courier New", monospace}:root[data-theme=light]{--felt:#efe6d2;--felt-dark:#e4d8bf;--felt-line:#cbbc9c;--felt-text:#4a4232;--felt-text-dim:#837860;--paper:#faf5e8;--paper-edge:#eadfc6;--brass:#8a6425;--stamp:#99392b}:root[data-theme=light] .masthead h1,:root[data-theme=light] .scoresheet .san{color:var(--ink)}:root[data-theme=light] .board-frame{border-color:#8a6b4a;box-shadow:0 8px 28px #5a46284d}:root[data-theme=light] .page{box-shadow:0 1px 0 var(--paper-edge) inset, 0 10px 30px #5a462840}:root[data-theme=light] .controls button:hover:not(:disabled),:root[data-theme=light] .presets summary:hover{color:var(--ink)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background-color:var(--felt-dark);background-image:radial-gradient(ellipse 120% 90% at 50% -10%, var(--felt) 0%, var(--felt-dark) 78%);color:var(--felt-text);font-family:var(--serif-body);-webkit-font-smoothing:antialiased;background-attachment:fixed;min-height:100vh}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}button{font:inherit}:focus-visible{outline:2px solid var(--brass);outline-offset:2px}.app{max-width:1180px;margin:0 auto;padding:28px 24px 64px}.masthead{border-bottom:1px solid var(--felt-line);align-items:baseline;gap:16px;margin-bottom:26px;padding-bottom:14px;display:flex}.masthead h1{font-family:var(--serif-display);letter-spacing:.02em;color:var(--paper);margin:0;font-size:1.7rem;font-weight:700}.masthead h1 .knight{color:var(--brass);font-family:var(--serif-body);margin-right:10px}.masthead .tagline{font-family:var(--serif-body);color:var(--felt-text-dim);font-size:.95rem;font-style:italic}.masthead .theme-toggle{border:1px solid var(--felt-line);color:var(--felt-text);cursor:pointer;background:0 0;border-radius:999px;width:34px;height:34px;margin-left:auto;font-size:1rem;line-height:1;transition:border-color .12s,color .12s}.masthead .theme-toggle:hover{border-color:var(--brass);color:var(--brass)}@media (width<=600px){.app{padding:16px 12px 48px}.masthead{flex-wrap:wrap;align-items:center;row-gap:6px}.masthead .theme-toggle{margin-left:auto}.masthead .tagline{flex-basis:100%;order:3}}.layout{grid-template-columns:minmax(320px,480px) minmax(380px,1fr);align-items:start;gap:32px;display:grid}@media (width<=880px){.layout{grid-template-columns:1fr}}.board-side{flex-direction:column;gap:14px;display:flex}.board-row{align-items:stretch;gap:8px;display:flex}.board-frame{border:6px solid #3a2b1c;border-radius:4px;flex:1;min-width:0;position:relative;box-shadow:0 10px 40px #00000073}.eval-bar{border:1px solid var(--felt-line);background:#2e2e2e;border-radius:3px;flex-shrink:0;width:16px;position:relative;overflow:hidden}.eval-white{background:#e8e2d0;transition:height .4s;position:absolute;left:0;right:0}.eval-label{font-family:var(--mono);letter-spacing:-.02em;pointer-events:none;font-size:.52rem;font-weight:600;position:absolute;left:50%;transform:translate(-50%)rotate(0)}.eval-label.on-white{color:#333;bottom:4px}.eval-label.on-black{color:#ddd;top:4px}.promo-overlay{z-index:30;background:#00000073;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.promo-picker{background:var(--paper);color:var(--ink);text-align:center;border-radius:4px;padding:14px 18px;box-shadow:0 12px 40px #00000080}.promo-title{font-family:var(--mono);text-transform:uppercase;letter-spacing:.16em;color:var(--ink-soft);margin-bottom:8px;font-size:.66rem;display:block}.promo-choices{gap:8px;display:flex}.promo-choices button{cursor:pointer;width:52px;height:52px;color:var(--ink);background:0 0;border:1px solid #5c514059;border-radius:4px;font-size:2rem;line-height:1}.promo-choices button:hover{border-color:var(--brass);background:#b3873e1f}.opponent-bar{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.opponent-label{font-family:var(--mono);text-transform:uppercase;letter-spacing:.14em;color:var(--felt-text-dim);font-size:.68rem}.opponent-modes{gap:6px;display:flex}.opponent-modes button,.level-select{font-family:var(--mono);letter-spacing:.02em;color:var(--felt-text);border:1px solid var(--felt-line);cursor:pointer;background:0 0;border-radius:999px;padding:5px 11px;font-size:.74rem;transition:border-color .12s,color .12s}.opponent-modes button:hover{border-color:var(--brass)}.opponent-modes button.active{border-color:var(--brass);color:var(--brass);font-weight:600}.level-select{border-radius:3px}.game-status{font-family:var(--mono);letter-spacing:.04em;color:var(--brass);text-align:center;padding:2px 0;font-size:.78rem}.game-status.thinking{color:var(--felt-text-dim);animation:1.2s ease-in-out infinite pulse}.game-status.viewing{color:var(--felt-text-dim);font-style:italic}.pgn-import{border:1px solid var(--felt-line);border-radius:3px;flex-direction:column;gap:8px;padding:10px;display:flex}.pgn-import textarea{font-family:var(--mono);color:var(--felt-text);border:1px solid var(--felt-line);resize:vertical;background:0 0;border-radius:3px;padding:8px;font-size:.78rem}.pgn-error{font-family:var(--mono);color:var(--stamp);font-size:.72rem}.pgn-actions{gap:8px;display:flex}.pgn-actions button{font-family:var(--mono);color:var(--felt-text);border:1px solid var(--felt-line);cursor:pointer;background:0 0;border-radius:3px;padding:6px 12px;font-size:.76rem}.pgn-actions button:hover:not(:disabled){border-color:var(--brass)}.pgn-actions button:disabled{opacity:.4;cursor:default}.atlas-body{flex-direction:column;gap:8px;padding:10px 12px 12px;display:flex}.atlas-search{font-family:var(--mono);color:var(--felt-text);border:1px solid var(--felt-line);background:0 0;border-radius:3px;width:100%;padding:7px 10px;font-size:.78rem}.atlas-list{max-height:260px;overflow-y:auto}.presets button.atlas-row{padding:4px 6px}.atlas-eco{font-family:var(--mono);color:var(--brass);margin-right:6px;font-size:.68rem}.atlas-more{font-family:var(--mono);color:var(--felt-text-dim);padding:8px 6px 2px;font-size:.7rem;font-style:italic}.controls button.active{border-color:var(--brass);color:var(--brass)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}.controls{flex-wrap:wrap;gap:8px;display:flex}.controls button,.presets summary{font-family:var(--mono);letter-spacing:.03em;color:var(--felt-text);border:1px solid var(--felt-line);cursor:pointer;background:0 0;border-radius:3px;padding:7px 12px;font-size:.78rem;transition:border-color .12s,color .12s}.controls button:hover:not(:disabled),.presets summary:hover{border-color:var(--brass);color:var(--paper)}.controls button:disabled{opacity:.4;cursor:default}.scoresheet{font-family:var(--mono);color:var(--felt-text);border:1px solid var(--felt-line);border-radius:3px;min-height:52px;max-height:168px;padding:10px 14px;font-size:.82rem;line-height:1.9;overflow-y:auto}.scoresheet .move-no{color:var(--felt-text-dim);margin-right:2px}.scoresheet button.san{color:var(--paper);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:2px;margin-right:10px;padding:0 2px}.scoresheet button.san:hover{color:var(--brass)}.scoresheet button.san.current{color:var(--brass);background:#b3873e40}:root[data-theme=light] .scoresheet button.san{color:var(--ink)}.scoresheet .empty{color:var(--felt-text-dim);font-style:italic;font-family:var(--serif-body)}.presets{border:1px solid var(--felt-line);border-radius:3px;padding:0}.presets summary{-webkit-user-select:none;user-select:none;border:none;display:block}.presets[open] summary{border-bottom:1px solid var(--felt-line)}.preset-group{font-family:var(--mono);text-transform:uppercase;letter-spacing:.14em;color:var(--felt-text-dim);padding:8px 14px 4px;font-size:.68rem}.presets button.preset{text-align:left;width:100%;color:var(--felt-text);font-family:var(--serif-body);cursor:pointer;background:0 0;border:none;padding:5px 18px;font-size:.88rem;display:block}.presets button.preset:hover{color:var(--paper);background:#b3873e14}.page{background:var(--paper);color:var(--ink);box-shadow:0 1px 0 var(--paper-edge) inset, 0 14px 44px #00000080;border-radius:3px;padding:34px 38px 38px;position:relative}@media (width<=880px){.page{padding:26px 22px 30px}}.page:before{content:"";pointer-events:none;border:1px solid #5c51402e;border-radius:2px;position:absolute;inset:6px}.page .eyebrow{font-family:var(--mono);text-transform:uppercase;letter-spacing:.16em;color:var(--ink-soft);align-items:center;gap:10px;margin-bottom:10px;font-size:.7rem;display:flex}.eco-stamp{font-family:var(--mono);color:var(--stamp);border:1.5px solid var(--stamp);border-radius:2px;padding:1px 7px;font-weight:600;transform:rotate(-2deg)}.page h2{font-family:var(--serif-display);color:#1f1a10;margin:0 0 6px;font-size:clamp(1.5rem,3.2vw,2.15rem);font-weight:600;line-height:1.12}.page .aka{color:var(--ink-soft);margin-bottom:18px;font-size:.95rem;font-style:italic}.page .detected-detail{color:var(--ink-soft);margin:0 0 18px;font-size:.95rem;font-style:italic}.tabs{gap:6px;margin-bottom:20px;display:flex}.tabs button{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);cursor:pointer;background:0 0;border:1px solid #5c514059;border-radius:999px;padding:4px 12px;font-size:.72rem}.tabs button.active{background:var(--ink);border-color:var(--ink);color:var(--paper)}.ledger{border-top:1px solid #5c51404d;border-bottom:1px solid #5c51404d;margin:0 0 22px;padding:10px 0}.ledger-title{font-family:var(--mono);text-transform:uppercase;letter-spacing:.18em;color:var(--ink-soft);margin-bottom:8px;font-size:.66rem}.ledger ol{margin:0;padding:0;list-style:none}.ledger li{align-items:baseline;gap:10px;padding:3px 0;font-size:.92rem;display:flex}.ledger li .ply{font-family:var(--mono);color:var(--ink-soft);min-width:66px;font-size:.7rem}.ledger li .line-name{color:var(--ink)}.ledger li.current .line-name{font-weight:600}.ledger li.current:after{content:"● here";font-family:var(--mono);letter-spacing:.08em;color:var(--stamp);margin-left:auto;font-size:.62rem}.departed{font-family:var(--mono);color:var(--stamp);margin:-12px 0 20px;font-size:.72rem}.inherited-note{font-family:var(--mono);color:var(--ink-soft);background:#5c514014;border-radius:2px;margin-bottom:18px;padding:6px 10px;font-size:.7rem}.story-section{margin-bottom:18px}.story-section h3{font-family:var(--mono);text-transform:uppercase;letter-spacing:.18em;color:var(--stamp);margin:0 0 5px;font-size:.66rem;font-weight:600}.story-section p{margin:0;font-size:.98rem;line-height:1.62}.story-section ul{margin:0;padding-left:18px;font-size:.94rem;line-height:1.6}.no-story{color:var(--ink-soft);font-size:.98rem;font-style:italic;line-height:1.6}.blank-page{text-align:center;padding:48px 12px}.blank-page .big-knight{color:#5c514059;margin-bottom:14px;font-size:3rem;display:block}.blank-page p{color:var(--ink-soft);max-width:40ch;margin:0 auto;font-style:italic;line-height:1.6}.story-fade{animation:.26s storyfade}@keyframes storyfade{0%{opacity:.25}to{opacity:1}}.footer{font-size:.78rem;font-family:var(--mono);color:var(--felt-text-dim);text-align:center;margin-top:30px}.footer a{color:var(--felt-text-dim)}
