*{box-sizing:border-box}body{color:#24293b;background:linear-gradient(160deg,#f4f7fc 0%,#eef3fb 55%,#f6f9f4 100%);min-height:100vh;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,system-ui,sans-serif}#root{justify-content:center;align-items:flex-start;min-height:100vh;padding:24px 12px;display:flex}button{cursor:pointer;font-family:inherit}code{background:#f0eee6;border-radius:6px;padding:2px 6px;font-size:.95em}.app{width:100%;max-width:560px;transition:max-width .15s}.app:has(.card.game){max-width:1120px}.card{text-align:center;background:#fff;border-radius:18px;padding:28px;box-shadow:0 1px 2px #0f172a0f,0 10px 28px #0f172a14}h1{margin:0 0 8px;font-size:1.7rem;font-weight:700}.subtitle{color:#5a5a72;font-size:1.1rem}.error{color:#b3261e;background:#fdecea;border-radius:10px;padding:10px}.hint{color:#777;font-size:.9rem}.user-list{flex-direction:column;gap:12px;margin-top:16px;display:flex}.user-btn{background:#f6f9ff;border:2px solid #d3ddf0;border-radius:14px;justify-content:space-between;align-items:center;padding:14px 20px;font-size:1.2rem;transition:transform .1s,background .15s,border-color .15s;display:flex}.user-btn:hover{background:#eaf1ff;border-color:#a9c2f0;transform:translateY(-1px)}.user-name{font-weight:700}.user-solved{color:#6a7a8c;font-size:.95rem}.card.game{text-align:center}.game-layout{text-align:left;align-items:flex-start;gap:32px;display:flex}.board-column{text-align:center;flex-direction:column;flex:auto;align-items:center;min-width:0;display:flex}.side-column{flex-direction:column;flex-shrink:0;gap:16px;width:250px;display:flex}.side-brand{color:#1f2740;font-size:1.15rem;font-weight:700}.side-header{background:#f6f8fc;border:1px solid #e6eaf3;border-radius:12px;flex-direction:column;gap:6px;padding:14px 16px;display:flex}.side-header .player{font-size:1.05rem;font-weight:700}.side-header .progress{color:#4a5568;font-size:.9rem;font-weight:600}.side-header .score{color:#b8860b;font-size:.95rem;font-weight:700}.side-links{gap:16px;display:flex}@media (width<=760px){.app:has(.card.game){max-width:560px}.game-layout{flex-direction:column;align-items:stretch}.board-column,.side-column{width:100%}}@media (width>=761px){#root:has(.card.game){align-items:center;height:100dvh;padding:14px 12px;overflow:auto}.card.game,.game-layout,.board-column{max-height:100%}.app:has(.card.game){max-height:100%}.card.game{padding:18px 22px}.side-column{max-height:100%;overflow-y:auto}.card.game .board-column{--above-board:0px;--below-board:66px;--board-chrome:calc(64px + var(--above-board) + var(--below-board) + 20px)}.card.game .board-column:has(.puzzle-theme){--above-board:42px}.card.game .board-column:has(.answer-badge){--below-board:116px}.card.game .board-column:has(.answer-form){--below-board:196px}.card.game .board,.card.game .board-wrap{width:min(100%, max(260px, calc(100dvh - var(--board-chrome))))}}.progress{font-weight:700}.link{color:#3562d6;background:0 0;border:none;padding:2px;font-size:.85rem;font-weight:600;text-decoration:none}.link:hover{text-decoration:underline}.to-move{border-radius:999px;margin-bottom:12px;padding:8px 22px;font-size:1.25rem;font-weight:700;display:inline-block}.to-move.white{background:#f5f5f0;border:2px solid #bbb}.to-move.black{color:#fff;background:#2b2b3a}.retry-note{color:#7a5b00;background:#fff3cd;border:1px solid #ffd97a;border-radius:12px;margin:0 0 8px;padding:8px 14px;font-weight:700;animation:.3s pop}.try-count{white-space:nowrap;background:#ffe08a;border-radius:999px;margin-left:4px;padding:1px 8px;font-size:.82rem;display:inline-block}.puzzle-theme{color:#35507d;background:#eef4ff;border:1px solid #cfe0ff;border-radius:999px;margin:0 0 10px;padding:6px 14px;font-size:.95rem;font-weight:700}.board-row{justify-content:center;align-items:flex-start;gap:18px;width:100%;display:flex}.move-indicator{flex-direction:column;flex-shrink:0;align-items:center;gap:6px;padding-top:10px;display:flex}.move-dot{border:2px solid #a8adb8;border-radius:50%;width:26px;height:26px;box-shadow:0 1px 3px #0f172a26}.move-dot.white{background:#fff}.move-dot.black{background:#23262f;border-color:#23262f}.move-count{color:#5a6478;white-space:nowrap;font-size:.8rem;font-weight:600}.board-area,img.board{flex:auto;min-width:0}.difficulty-btns{justify-content:center;gap:14px;margin:16px 0 8px;display:flex}.big-btn.hard{background:#e5484d;box-shadow:0 2px 8px #e5484d47}.board{border:4px solid #8a5a2b;border-radius:10px;width:min(100%,74vh);max-width:640px}.board-wrap{border:4px solid #8a5a2b;border-radius:10px;width:min(100%,74vh);max-width:640px;margin:0 auto;position:relative;overflow:hidden}.promo-picker{z-index:10;background:#ffffffeb;justify-content:center;align-items:center;gap:10px;font-size:1.1rem;font-weight:700;display:flex;position:absolute;inset:0}.promo-picker button{background:#fff;border:2px solid #c7d2e8;border-radius:10px;padding:8px 12px;font-size:2rem;line-height:1}.promo-picker button:hover{background:#eaf3ff;transform:scale(1.08)}.board-controls{justify-content:center;align-items:center;gap:12px;min-height:52px;margin-top:14px;display:flex}.board-controls .big-btn.reset{color:#384153;box-shadow:none;background:#eef1f6}.board-hint{margin:0}.puzzle-nav{flex-direction:column;gap:8px;margin-top:14px;display:flex}.puzzle-nav-btns{gap:10px;display:flex}.nav-btn{color:#33507d;background:#fff;border:1.5px solid #c7d2e8;border-radius:10px;padding:9px 16px;font-size:.9rem;font-weight:600;transition:transform 80ms,background .15s,border-color .15s}.nav-btn:hover:not(:disabled){background:#eef3fc;border-color:#a9c2f0;transform:translateY(-1px)}.nav-btn:disabled{opacity:.5}.nav-hint{color:#8a92a5;font-size:.82rem}.answer-form{justify-content:center;gap:10px;margin-top:14px;display:flex}.answer-form input{border:2px solid #c7d2e8;border-radius:10px;flex:1;max-width:320px;padding:12px 14px;font-family:inherit;font-size:1.1rem}.answer-form input:focus{border-color:#3562d6;outline:none}.answer-form button,.big-btn{color:#fff;letter-spacing:.01em;background:#3562d6;border:none;border-radius:10px;padding:12px 22px;font-size:1rem;font-weight:700;transition:transform 80ms,box-shadow .15s;box-shadow:0 2px 8px #3562d647}.answer-form button:hover:not(:disabled),.big-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px #3562d652}.answer-form button:disabled,.big-btn:disabled{opacity:.5;cursor:default;box-shadow:none;transform:none}.feedback{text-align:center;background:#f6f8fc;border:1px solid #e6eaf3;border-radius:12px;flex-direction:column;align-items:stretch;padding:14px 16px;font-size:1rem;display:flex}.feedback-big{font-size:1.4rem;font-weight:700}.feedback .points-earned{margin:4px 0 0;font-size:1.05rem}.feedback .hint{margin:4px 0 0}.feedback .banner{max-width:none;margin:10px 0 0;padding:10px 12px;font-size:.95rem}.feedback .big-btn{width:100%;margin-top:12px}.verdict-board{margin:2px 0}.feedback-big.good{color:#1d8a3c}.feedback-big.bad{color:#c0392b}.big-btn{margin-top:14px;display:inline-block}.final-score{font-size:1.3rem}.summary h2{margin-top:20px;font-size:1.05rem}.missed{text-align:left;margin:0 0 10px;padding:0;font-size:.92rem;list-style:none}.missed li{border-bottom:1px dashed #ddd;flex-direction:column;padding:8px 12px;display:flex}.summary .link{margin:10px auto 0;display:block}.level-emoji{font-size:1.3rem}.streak{color:#e25822;font-weight:700}.points-earned{color:#b8860b;margin:4px 0;font-size:1.25rem;font-weight:700}.banner{border-radius:14px;max-width:420px;margin:10px auto;padding:12px 16px;font-size:1.05rem;animation:.4s pop}.banner.level-up{background:linear-gradient(90deg,#fff3b0,#ffd166);border:2px solid #e0a800}.banner.badge-new{background:linear-gradient(90deg,#d9f2ff,#b5e2ff);border:2px solid #5aa9e6}@keyframes pop{0%{opacity:0;transform:scale(.6)}70%{transform:scale(1.06)}to{opacity:1;transform:scale(1)}}.level-line{margin:8px 0 4px;font-size:1.05rem}.level-bar-wrap{max-width:360px;margin:0 auto 12px}.level-bar{background:#eee;border:2px solid #ddd;border-radius:999px;height:16px;overflow:hidden}.level-bar-fill{background:linear-gradient(90deg,#7ed957,#38b000);border-radius:999px;height:100%;transition:width .6s}.level-bar-label{color:#777;font-size:.8rem}.modal-backdrop{z-index:10;background:#14142873;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:520px;max-height:86vh;overflow-y:auto}.badge-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin:14px 0;display:grid}.badge{border-radius:14px;flex-direction:column;align-items:center;gap:2px;padding:10px 8px;display:flex}.badge.earned{background:#fff8e1;border:2px solid #ffd166}.badge.locked{opacity:.65;background:#f4f4f6;border:2px dashed #ccc}.badge-emoji{font-size:1.7rem}.badge-name{font-size:.85rem;font-weight:700}.set-list{flex-direction:column;gap:8px;margin:14px 0;padding:0;list-style:none;display:flex}.set-item{background:#f4f4f6;border:2px solid #0000;border-radius:12px;align-items:center;gap:10px;padding:10px 12px;display:flex}.set-item.active{background:#fff8e1;border-color:#ffd166}.set-diff{font-size:1.4rem}.set-info{flex-direction:column;gap:2px;display:flex}.set-score{font-size:.9rem;font-weight:700}.set-dates{color:#777;font-size:.72rem}.set-chapter{color:#3f5bb0;font-size:.78rem;font-weight:700}.chapter-intro{text-align:left;margin:0 0 8px}.book-list{flex-direction:column;gap:8px;margin-bottom:6px;display:flex}.book{background:#fafbfe;border:2px solid #e6e8ef;border-radius:12px;overflow:hidden}.book.open{border-color:#c3d0f0}.book-head{width:100%;font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:10px;padding:10px 12px;display:flex}.book-head:hover{background:#eef2fc}.book-caret{color:#7b87a8;font-size:.9rem}.book-name{flex:1;font-weight:700}.book-count{color:#667;font-size:.82rem;font-weight:700}.chapter-list{flex-direction:column;gap:6px;margin:0;padding:0 8px 8px;list-style:none;display:flex}.chapter-item{width:100%;font:inherit;text-align:left;cursor:pointer;background:#fff;border:2px solid #0000;border-radius:10px;align-items:center;gap:10px;padding:8px 10px;transition:transform 80ms,border-color .15s;display:flex}.chapter-item:hover:not(:disabled){border-color:#a9c2f0;transform:translateY(-1px)}.chapter-item:disabled{cursor:default;opacity:.75}.chapter-item.started{background:#fff8e1}.chapter-item.done{background:#eef7ee}.chapter-num{color:#3f5bb0;background:#e8edf9;border-radius:50%;flex:none;place-items:center;width:26px;height:26px;font-size:.82rem;font-weight:700;display:grid}.chapter-body{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.chapter-title{font-size:.92rem;font-weight:700}.chapter-bar{background:#e6e8ef;border-radius:999px;height:5px;display:block;overflow:hidden}.chapter-bar-fill{background:linear-gradient(90deg,#7ed957,#35c759);border-radius:999px;height:100%;display:block}.chapter-meta{color:#777;font-size:.72rem}.chapter-go{color:#9aa4bb;flex:none;font-size:1.1rem;font-weight:700}.home-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.home-player{font-size:1.1rem;font-weight:700}.home-score{color:#b8860b;font-weight:700}.home-links{justify-content:center;margin:4px 0 10px}.home-sets-title{color:#4a5568;text-align:left;margin:22px 0 6px;font-size:1.05rem}.set-item-btn{cursor:pointer;text-align:left;width:100%;font:inherit;transition:transform 80ms,box-shadow .15s,border-color .15s}.set-item-btn:hover{border-color:#a9c2f0;transform:translateY(-1px);box-shadow:0 3px 10px #3562d61f}.set-item.completed{background:#eef7ee}.set-item.abandoned{background:#f0f4fb}.set-item .set-info{flex:1}.set-open{color:#9aa4bb;font-size:1.5rem;font-weight:700}.review-controls{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;display:flex}.review-controls .nav-btn{padding:8px 12px}.review-ply{text-align:center;color:#4a5568;min-width:84px;font-size:.9rem;font-weight:600}.review-image{flex-direction:column;align-items:center;gap:6px;display:flex}.answer-badge{text-align:center;border-radius:10px;margin-top:10px;padding:8px 14px;font-weight:700}.answer-badge.good{color:#1f7a35;background:#e3f6e5}.answer-badge.bad{color:#b23b3b;background:#fdeaea}.review-toggle{color:#4a5568;cursor:pointer;align-items:center;gap:8px;margin-top:14px;font-size:.85rem;font-weight:600;display:flex}.review-toggle input{cursor:pointer;width:16px;height:16px}.badge-desc{color:#777;font-size:.72rem}.confetti{pointer-events:none;z-index:20;position:fixed;inset:0;overflow:hidden}.confetti span{animation:2.6s linear forwards fall;position:absolute;top:-30px}@keyframes fall{0%{opacity:1;transform:translateY(0)rotate(0)}85%{opacity:1}to{opacity:0;transform:translateY(105vh)rotate(360deg)}}.review-board{flex-direction:column;align-items:center;gap:6px;margin:6px 0;display:flex}.review-board .to-move{margin-bottom:8px;padding:4px 14px;font-size:.95rem}.board.small{max-width:300px}.admin{text-align:left}.admin h1{text-align:center}.admin-header{color:#4a4a63;justify-content:space-between;align-items:center;margin-bottom:14px;font-weight:700;display:flex}.admin-form{flex-direction:column;align-items:center;gap:10px;display:flex}.admin-form.row{flex-direction:row}.admin-form input{border:2px solid #c7d2e8;border-radius:10px;flex:1;width:100%;padding:11px 13px;font-family:inherit;font-size:1.05rem}.admin-form input:focus{border-color:#3562d6;outline:none}.admin-form button{color:#fff;background:#3562d6;border:none;border-radius:10px;padding:11px 22px;font-size:1rem;font-weight:700;box-shadow:0 2px 8px #3562d647}.admin-puzzle{border-top:2px solid #eee;margin-top:18px;padding-top:16px}.admin-title{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.admin-code{font-family:ui-monospace,monospace;font-size:1.3rem;font-weight:700}.admin-badge{border-radius:999px;padding:4px 12px;font-size:.95rem;font-weight:700}.admin-badge.ok{color:#1d8a3c;background:#e3f6e8}.admin-badge.bad{color:#b3261e;background:#fdecea}.admin-facts{grid-template-columns:max-content 1fr;gap:4px 16px;margin:14px 0;display:grid}.admin-facts dt{color:#5a5a72;font-weight:700}.admin-facts dd{margin:0}.admin-solution{background:#f6f8ff;border-radius:12px;margin:14px 0;padding:12px 16px}.admin-solution h3{margin:0 0 6px}.admin-line{margin:4px 0;font-family:ui-monospace,monospace;font-size:1.15rem}.admin-fen,.admin-accepted{color:#666;word-break:break-all;margin:4px 0 0;font-family:ui-monospace,monospace;font-size:.82rem}.nav-btn.show-solution{margin:4px 0}.reveal-toggle{margin-top:6px;font-size:.8rem;display:inline-block}.fen-warning-banner{background:#fff8ee;border:2px solid #ffd591;border-radius:12px;margin:14px 0;padding:12px 16px}.fen-warning-title{color:#8a5a00;margin:0 0 8px;font-weight:700}.fen-warning-list{color:#6a4a00;margin:0 0 10px;padding-left:20px;font-size:.88rem}.fen-warning-list li{margin:2px 0}.admin-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:12px;display:flex}.admin-actions input{border:2px solid #e3c9c9;border-radius:10px;flex:1;min-width:160px;padding:10px 12px;font-family:inherit;font-size:1rem}.admin-tabs{border-bottom:2px solid #eee;gap:8px;margin-bottom:16px;display:flex}.admin-tab{color:#888;cursor:pointer;background:0 0;border:none;border-bottom:3px solid #0000;margin-bottom:-2px;padding:8px 14px;font-size:1rem;font-weight:700}.admin-tab.active{color:#3562d6;border-bottom-color:#3562d6}.tab-count{color:#fff;background:#b3261e;border-radius:999px;min-width:20px;margin-left:6px;padding:1px 6px;font-size:.75rem;display:inline-block}.flagged-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.flag-card{background:#fffdf8;border:2px solid #ffe0b3;border-radius:14px;gap:14px;margin-bottom:14px;padding:12px;display:flex}.flag-body{flex:1;min-width:0}.fen-review-card{flex-direction:column}.fen-compare{flex-wrap:wrap;align-items:flex-start;gap:14px;display:flex}.fen-compare figure{flex:220px;min-width:0;max-width:300px;margin:0}.fen-compare figcaption{text-transform:uppercase;letter-spacing:.04em;color:#8a6a3a;margin-bottom:5px;font-size:.72rem;font-weight:700}.fen-tomove{color:#4a4a63;flex:0 0 100%;font-size:.82rem;font-weight:700}.fen-compare.compact .fen-tomove{font-size:.68rem}.fen-compare img.fen-diagram{background:#fff;border:2px solid #ffe0b3;border-radius:8px;width:100%}.fen-mini-board{border:2px solid #8a5a2b;border-radius:8px;width:100%;overflow:hidden}.fen-mini-missing{aspect-ratio:1;text-align:center;color:#a07a4a;border:2px dashed #d8b48a;border-radius:8px;justify-content:center;align-items:center;padding:12px;font-size:.85rem;display:flex}.fen-compare.compact{flex:0 0 232px;gap:8px;max-width:232px}.fen-compare.compact figure{flex:1 1 0;min-width:0;max-width:none}.fen-compare.compact figcaption{margin-bottom:3px;font-size:.62rem}.fen-compare.compact .fen-mini-missing{padding:8px;font-size:.72rem}.link-code{cursor:pointer;color:#3562d6;background:0 0;border:none;padding:0;text-decoration:underline}.admin-badge.warn{color:#8a5a00;background:#fff3cd}.flag-sol{word-break:break-word;margin:8px 0;font-family:ui-monospace,monospace;font-size:.95rem}.flag-reports{margin:8px 0;padding:0;list-style:none}.flag-reports li{border-top:1px solid #f0e6d6;padding:4px 0;font-size:.9rem}.flag-reports li.resolved{opacity:.55}.flag-who{font-weight:700}.flag-when{color:#999;margin-left:8px;font-size:.78rem}.flag-done{color:#1d8a3c;font-weight:700}.flag-card-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.flag-reason{border:2px solid #e3c9c9;border-radius:10px;flex:1;min-width:140px;padding:8px 10px;font-family:inherit;font-size:.9rem}.nav-btn.danger{color:#b3261e;border-color:#e3a5a5}.nav-btn.danger:hover:not(:disabled){background:#fdecea}.crumbs{align-items:center;gap:8px;margin-bottom:14px;font-weight:600;display:flex}.crumb-sep{color:#bbb}.crumb-here{color:#4a4a63}.section-h{border-top:2px solid #eee;margin:20px 0 8px;padding-top:14px}.user-list,.set-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.user-row,.set-row{text-align:left;cursor:pointer;background:#f6f8ff;border:1.5px solid #dce4f5;border-radius:12px;justify-content:space-between;align-items:center;gap:12px;width:100%;padding:12px 16px;font-family:inherit;transition:transform 80ms,border-color .15s,background .15s;display:flex}.user-row:hover:not(:disabled),.set-row:hover:not(:disabled){background:#eef3fc;border-color:#a9c2f0;transform:translateY(-1px)}.user-row:disabled,.set-row:disabled{opacity:.55}.user-name{color:#33507d;font-size:1.05rem;font-weight:700}.lock{font-size:.85rem}.user-meta{color:#5a5a72;flex-wrap:wrap;justify-content:flex-end;gap:14px;font-size:.85rem;display:flex}.pill-live{color:#1d8a3c;font-weight:700}.user-item{align-items:stretch;gap:8px;display:flex}.user-item .user-row{flex:1;min-width:0}.user-item.is-hidden .user-row{background:#f4f0f9;border-color:#d9cdec}.pill-hidden{color:#7a5ba6;font-size:.8rem;font-weight:600}.user-visibility{white-space:nowrap;align-self:center}.badge-chip{background:#eef3fc;border:1px solid #dce4f5;border-radius:999px;margin:0 6px 6px 0;padding:2px 10px;font-size:.85rem;display:inline-block}.set-status{white-space:nowrap;font-size:.9rem;font-weight:700}.set-status.active{color:#1d8a3c}.set-status.completed{color:#3562d6}.set-status.abandoned{color:#999}.set-mid{flex-direction:column;flex:1;align-items:center;gap:2px;display:flex}.set-diff{text-transform:capitalize;color:#5a5a72;font-weight:600}.set-score{color:#33507d;white-space:nowrap;font-weight:700}.puzzle-rows{flex-direction:column;gap:10px;margin:12px 0 0;padding:0;list-style:none;display:flex}.puzzle-row{background:#fff;border:1.5px solid #eee;border-left:5px solid #ccc;border-radius:12px;flex-wrap:wrap;align-items:flex-start;gap:12px;padding:10px 12px;display:flex}.puzzle-row.ok{border-left-color:#1d8a3c}.puzzle-row.bad{border-left-color:#b3261e}.puzzle-row.current{background:#fffdf8;border-left-color:#f0a020}.puzzle-row.open{opacity:.75}.pz-num{color:#8a92a5;text-align:right;min-width:22px;padding-top:18px;font-weight:700}.pz-body{flex:1;min-width:0}.pz-line1{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:4px;display:flex}.pz-outcome{padding:2px 10px;font-size:.82rem}.pz-answer{word-break:break-word;margin:3px 0;font-size:.9rem}.mono{font-family:ui-monospace,monospace}.set-actions{margin:12px 0 4px}.reset-confirm{background:#fff8ee;border:2px solid #ffd591;border-radius:12px;margin:12px 0 4px;padding:12px 16px}.reset-warn{color:#8a5a00;margin:0 0 10px;font-size:.9rem}
