:root{--bg: #fafaf9;--surface: #ffffff;--surface-2: #f5f5f4;--surface-3: #ececea;--border: rgba(15, 20, 25, .08);--border-strong: rgba(15, 20, 25, .14);--text: #0f1419;--text-muted: #71717a;--text-subtle: #a1a1aa;--primary: #0f1419;--primary-hover: #000;--accent: #0f1419;--accent-hover: #000;--nav-bg: #fafaf9;--nav-text: #52525b;--nav-active: #0f1419;--ok: #16a34a;--warn: #d97706;--err: #dc2626;--shadow-sm: 0 1px 2px rgba(15, 20, 25, .04);--shadow-md: 0 2px 8px rgba(15, 20, 25, .05);--shadow-lg: 0 12px 32px rgba(15, 20, 25, .1);--radius-sm: 8px;--radius: 12px;--radius-lg: 16px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,Helvetica Neue,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.brand-mark{display:block;width:30px;height:30px;border-radius:8px;object-fit:contain;flex:0 0 auto}.app.shell{display:grid;grid-template-columns:232px 1fr;height:100vh;background:var(--surface-2)}.sidebar{background:var(--surface-2);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:16px 14px;gap:4px;flex-shrink:0}.sidebar .brand{display:flex;align-items:center;gap:11px;padding:4px 10px 16px;font-weight:700;font-size:15px;letter-spacing:-.015em;color:var(--text)}.sidebar .brand-mark{width:30px;height:30px}.side-nav{display:flex;flex-direction:column;gap:2px}.side-nav-item{display:flex;align-items:center;gap:11px;padding:9px 12px;background:transparent;border:none;color:var(--nav-text);font-size:14px;font-weight:500;text-align:left;border-radius:8px;cursor:pointer;font-family:inherit;transition:background .1s,color .1s}.side-nav-item:hover{background:var(--surface);color:var(--text)}.side-nav-item.active{background:var(--surface);color:var(--text);font-weight:600;box-shadow:var(--shadow-sm)}.side-nav-item .icon{width:20px;display:inline-flex;align-items:center;justify-content:center;font-size:16px;color:var(--text-muted)}.side-nav-item.active .icon{color:var(--text)}.sidebar-foot{margin-top:auto;padding:10px;display:flex;align-items:center}.sidebar-foot .ext-status{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text-subtle)}.sidebar-foot .ext-status .dot{width:6px;height:6px;border-radius:50%;background:var(--ok)}.sidebar-foot .ext-status.off .dot{background:var(--err)}.content{display:flex;flex-direction:column;overflow:hidden;background:var(--surface);border-radius:14px 0 0;margin:8px 0 0;box-shadow:inset 1px 1px 0 var(--border)}.browser-block{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px;background:var(--bg, #f7f6f1)}.browser-block-card{max-width:480px;background:#fff;border:1px solid var(--border, #e5e7eb);border-radius:14px;padding:32px 36px;text-align:left;box-shadow:0 8px 24px #0f14190f}.browser-block-card h1{font-size:22px;margin:0 0 12px;letter-spacing:-.01em}.browser-block-card p{font-size:14px;line-height:1.6;color:#374151;margin:0 0 12px}.browser-block-actions{display:flex;gap:10px;margin-top:18px}.browser-block-actions a{padding:10px 16px;border-radius:8px;font-size:13px;font-weight:600;text-decoration:none}.browser-block-actions a.primary{background:#63a89b;color:#111820}.browser-block-actions a.secondary{background:#f3f4f6;color:#1f2937}.ext-install-banner{display:flex;align-items:center;gap:16px;background:#eef8f6;border:1px solid #8fc7bd;border-radius:10px;padding:12px 16px;margin:12px 28px 0}.ext-install-banner-body{flex:1}.ext-install-banner strong{display:block;font-size:13.5px;margin-bottom:2px;color:#1f5f58}.ext-install-banner p{margin:0;font-size:12.5px;line-height:1.5;color:#2f6f67}.ext-install-banner a.primary{background:#63a89b;color:#111820;padding:8px 14px;border-radius:8px;font-size:12.5px;font-weight:600;text-decoration:none;white-space:nowrap}.ext-install-banner a.primary:hover{filter:brightness(1.05)}.main{flex:1;overflow-y:auto;padding:16px 28px 32px}.main>*{max-width:960px;margin-left:auto;margin-right:auto}.main>.detail{max-width:1280px}.main-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;gap:12px;flex-wrap:wrap}.main-header h1{font-size:18px;margin:0;font-weight:600;letter-spacing:-.01em}.main-header .sub{color:var(--text-muted);font-size:12px;margin-top:1px}.main-header .actions{display:flex;gap:8px}button{font-size:13px;font-weight:500;padding:7px 14px;border:1px solid var(--text);background:var(--text);color:#fff;border-radius:8px;cursor:pointer;transition:background .1s,border-color .1s,opacity .1s;font-family:inherit;letter-spacing:-.005em}button:hover:not(:disabled){background:#000;border-color:#000}button:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:var(--surface);color:var(--text);border-color:var(--border-strong)}button.secondary:hover:not(:disabled){background:var(--surface-2);border-color:var(--text-muted)}button.ghost{background:transparent;color:var(--text-muted);border-color:transparent;padding:6px 10px;font-weight:500}button.ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}button.icon{background:transparent;border:none;color:var(--text-subtle);padding:4px 8px;font-size:16px;border-radius:6px}button.icon:hover{background:var(--surface-2);color:var(--text)}button.small{font-size:12px;padding:5px 10px}input[type=text],input[type=search],textarea{font-family:inherit;font-size:13px;padding:9px 12px;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text);transition:border-color .12s,box-shadow .12s;width:100%}input:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #3b82f626}.field{display:block;margin:14px 0}.field span{display:block;margin-bottom:5px;font-size:12px;color:var(--text-muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;resize:vertical}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card.padded{padding:24px}.filter-pills{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:12px}.pill{background:transparent;border:1px solid transparent;color:var(--text-muted);padding:4px 11px;border-radius:999px;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-family:inherit;transition:background .1s,color .1s}.pill:hover{background:var(--surface-2);color:var(--text)}.pill.active{background:var(--text);border-color:var(--text);color:var(--bg)}.pill.active:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.pill-count{background:#00000014;color:inherit;padding:1px 6px;border-radius:999px;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}.pill.active .pill-count{background:#ffffff40}.pill-divider{width:1px;height:18px;background:var(--border);margin:0 6px}.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:10px}.toolbar .filter{flex:1;max-width:320px}.toolbar .count{color:var(--text-muted);font-size:12px}.course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:18px}.course-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;cursor:pointer;transition:transform .12s,box-shadow .12s,border-color .12s;position:relative}.course-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--border-strong)}.course-card.selected{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f626}.course-cover{position:relative;aspect-ratio:1 / 1;background:linear-gradient(135deg,#1f2940,#364056);display:flex;align-items:center;justify-content:center;overflow:hidden}.course-cover img{width:100%;height:100%;object-fit:cover;display:block}.course-cover .fallback{font-size:38px;font-weight:700;color:#fff;opacity:.4;text-transform:uppercase;letter-spacing:-.02em}.course-card .delete-btn{position:absolute;top:6px;right:6px;background:#0000008c;color:#fff;border-radius:4px;font-size:16px;line-height:1;padding:2px 7px;border:none;cursor:pointer;opacity:0;transition:opacity .12s;z-index:2}.course-card:hover .delete-btn{opacity:1}.course-card .delete-btn:hover{background:var(--err)}.course-body{padding:14px 14px 16px;display:flex;flex-direction:column;gap:8px;flex:1}.course-title{font-size:14px;font-weight:600;line-height:1.3;color:var(--text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.6em}.course-author{font-size:12px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-meta{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:var(--text-muted)}.tag{display:inline-flex;align-items:center;background:var(--surface-2);color:var(--text-muted);padding:2px 8px;border-radius:6px;font-size:11px;font-weight:500;letter-spacing:0;text-transform:none}.tag.synced{background:var(--surface-2);color:var(--text)}.tag.unsynced{background:transparent;color:var(--text-subtle);border:1px solid var(--border)}.tag.upload,.tag.pro,.tag.queued{background:var(--surface-2);color:var(--text-muted)}.course-foot{display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding-top:8px;gap:8px}.course-foot .progress{flex:1;height:4px;background:#e5e7eb;border-radius:2px;overflow:hidden}.course-foot .progress>div{height:100%;background:var(--accent);border-radius:2px}.detail{display:flex;flex-direction:column;gap:20px}.detail-header{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px;display:flex;gap:24px;align-items:flex-start}.detail-header .cover{width:120px;aspect-ratio:1 / 1;border-radius:var(--radius-sm);overflow:hidden;background:linear-gradient(135deg,#1f2940,#364056);flex-shrink:0}.detail-header .cover img{width:100%;height:100%;object-fit:cover;display:block}.detail-header .info{flex:1;min-width:0}.detail-header h2{font-size:20px;margin:0 0 6px;font-weight:700;letter-spacing:-.01em}.detail-header .author{color:var(--text-muted);margin-bottom:12px}.detail-header .meta-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.detail-header .actions{display:flex;gap:12px;align-items:center}.external-link{font-size:13px;color:var(--text-muted);text-decoration:none;white-space:nowrap}.external-link:hover{color:var(--accent);text-decoration:underline}.back-link{background:transparent;border:none;color:var(--text-muted);cursor:pointer;font-size:13px;padding:0 0 12px;display:flex;align-items:center;gap:4px}.back-link:hover{color:var(--text);transform:none;box-shadow:none}.detail-body{display:grid;grid-template-columns:280px 1fr;gap:18px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;min-height:400px}.variation-tree{border-right:1px solid var(--border);padding-right:14px;max-height:70vh;overflow-y:auto}.chapter{margin-bottom:18px}.chapter:last-child{margin-bottom:0}.chapter-title{font-size:11px;font-weight:700;color:var(--text-subtle);text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px;padding:0 8px}.chapter ul{list-style:none;margin:0;padding:0}.chapter li{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--text);transition:background .1s}.chapter li:hover{background:#f3f4f6}.chapter li.active{background:#3b82f614;color:var(--primary);font-weight:600}.color-dot{display:inline-block;width:8px;height:8px;border-radius:50%;border:1px solid #cbd5e1;flex-shrink:0}.color-white{background:#fff}.color-black{background:#1f2937;border-color:#1f2937}.color-both{background:linear-gradient(90deg,#fff 0,#fff 50%,#1f2937 50%,#1f2937)}.variation-view{overflow-y:auto;max-height:70vh}.variation-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:10px;margin-bottom:14px;border-bottom:1px solid var(--border)}.variation-head strong{font-size:15px;font-weight:600}.pgn{background:#f9fafb;border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px 16px;white-space:pre-wrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.6}.placeholder{background:var(--surface);border:1px dashed var(--border-strong);border-radius:var(--radius);padding:56px 32px;text-align:center;color:var(--text-muted)}.placeholder h2{font-size:18px;margin:0 0 8px;color:var(--text)}.placeholder p{margin:4px 0}.placeholder em{color:var(--text);font-weight:600;font-style:normal}.form-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:28px;max-width:720px}.form-panel h2{font-size:18px;margin:0 0 6px;font-weight:700}.form-panel .lead{color:var(--text-muted);margin:0 0 20px;font-size:13px}.banner{border-radius:var(--radius-sm);padding:12px 16px;margin:16px 0;border:1px solid;font-size:13px;line-height:1.5}.banner.warn{background:#fffbeb;border-color:#fde68a;color:#92400e}.banner.err{background:#fef2f2;border-color:#fecaca;color:#991b1b}.banner.ok{background:#ecfdf5;border-color:#a7f3d0;color:#065f46}.banner p{margin:4px 0}.banner code{background:#0000000f;padding:1px 5px;border-radius:3px;font-size:12px}.instruction-box{background:#fffbeb;border:1px solid #fde68a;border-radius:8px;padding:12px 16px;margin:12px 0 16px;color:#422006;font-size:13.5px;line-height:1.55}.instruction-box strong{display:block;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#92400e;margin-bottom:6px}.instruction-box ol{margin:0;padding-left:20px}.instruction-box li{margin:3px 0}.instruction-box em{font-style:normal;font-weight:600;color:#1f2937;background:#0000000a;padding:1px 5px;border-radius:3px;font-size:12.5px}.banner-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}.banner-actions a,.banner-actions button{font-size:12px;padding:6px 12px;border-radius:6px;text-decoration:none;font-weight:600;border:1px solid transparent;cursor:pointer}.banner-actions .primary{background:#63a89b;color:#111820}.banner-actions .primary:hover{filter:brightness(1.05)}.banner-actions .secondary{background:transparent;border-color:currentColor;color:inherit}.banner-actions .secondary:hover{background:#0000000a}.muted{color:var(--text-muted);font-size:13px}.small{font-size:12px}.course-list{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 20px;gap:4px}.course-row{display:grid;grid-template-columns:26px 1fr 96px auto;gap:10px;align-items:center;background:transparent;padding:6px 8px;border-radius:8px;cursor:pointer;transition:background .1s;min-height:30px}.course-row:hover{background:var(--surface-2)}.course-row>.muted.small{text-align:right;font-variant-numeric:tabular-nums}.source-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:18px;font-size:9px;font-weight:700;letter-spacing:.04em;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.source-icon.source-chessable{background:transparent;padding:0;width:18px;height:18px}.source-icon.source-chessable img{width:16px;height:16px;border-radius:3px;object-fit:contain;display:block}.source-icon.source-upload{background:var(--surface-2);color:var(--text-muted);border:1px solid var(--border)}.course-row:last-child{border-bottom:none}.course-row:hover,.course-row.checked{background:var(--surface-2)}.course-row.queued{opacity:.7}.course-row-check{display:flex;align-items:center;justify-content:center}.course-row-check input[type=checkbox]{width:14px;height:14px;accent-color:var(--accent);cursor:pointer}.check-placeholder{display:inline-block;width:14px;height:14px}.course-row-name{font-size:13px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-row-time{white-space:nowrap;min-width:60px;text-align:right;font-size:11px}.course-row-actions{display:flex;gap:2px;align-items:center}.course-row-actions button.small{font-size:11px;padding:3px 8px}.active-toggle{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:500;padding:3px 8px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--text-muted);cursor:pointer;font-family:inherit;transition:background .1s,color .1s,border-color .1s}.active-toggle .check{display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;border-radius:3px;border:1px solid var(--border-strong);background:var(--surface);font-size:10px;line-height:1}.active-toggle.active{color:var(--text);border-color:var(--border-strong)}.active-toggle.active .check{background:var(--text);border-color:var(--text);color:#fff}.active-toggle:hover{background:var(--surface-2)}.course-row-main{min-width:0}.course-row-name{font-size:14px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-row-author{font-size:12px;color:var(--text-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-row-tags{display:flex;gap:4px}.course-row-time{white-space:nowrap;min-width:80px;text-align:right}.course-row-actions{display:flex;gap:4px}.bulk-banner{background:var(--surface);border-bottom:1px solid var(--border);border-left:4px solid var(--accent);padding:14px 24px;flex-shrink:0;box-shadow:0 2px 8px #0f172a0d;position:sticky;top:0;z-index:50}.bulk-banner.done{border-left-color:var(--ok)}.bb-row{display:flex;justify-content:space-between;align-items:center;gap:24px;margin-bottom:10px}.bb-main{flex:1;min-width:0}.bb-headline{display:flex;align-items:baseline;gap:6px;margin-bottom:4px}.bb-big{font-size:22px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}.bb-of{color:var(--text-muted);font-size:14px}.bb-total{font-size:18px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}.bb-label{color:var(--text-muted);font-size:13px;margin-right:8px}.bb-pct{margin-left:auto;font-size:14px;font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums}.bulk-banner.done .bb-pct{color:var(--ok)}.bb-sub{font-size:13px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bb-current{color:var(--text);font-weight:500}.bb-stats{display:flex;align-items:center;gap:14px;font-size:12px;color:var(--text-muted);font-variant-numeric:tabular-nums}.bb-bar{height:6px;background:#f3f4f6;border-radius:3px;overflow:hidden;margin-bottom:8px}.bb-bar-fill{height:100%;background:var(--accent);transition:width .4s ease-out;background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:16px 16px;animation:bb-stripes 1s linear infinite}.bulk-banner.done .bb-bar-fill{background:var(--ok);animation:none;background-image:none}@keyframes bb-stripes{0%{background-position:0 0}to{background-position:16px 0}}.bb-queue{font-size:12px;margin-top:4px;margin-bottom:4px}.bb-queue summary{cursor:pointer;color:var(--text-muted);font-weight:500;-webkit-user-select:none;user-select:none;margin-bottom:6px}.bb-queue ul{list-style:none;margin:0;padding:0;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fafafa;max-height:180px;overflow-y:auto}.bb-queue li{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;padding:5px 12px;border-bottom:1px solid var(--border)}.bb-queue li:last-child{border-bottom:none}.q-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.q-vars{font-variant-numeric:tabular-nums}.leaf-link{font-weight:500;color:var(--accent)}.leaf-link:hover{text-decoration:underline}.leaf-chapter{color:var(--text-muted);font-size:11px;text-decoration:none}.leaf-chapter:hover{color:var(--accent);text-decoration:underline}.bb-results{font-size:12px;margin-top:4px}.bb-results summary{cursor:pointer;color:var(--text-muted);font-weight:500;-webkit-user-select:none;user-select:none}.bb-results ul{list-style:none;margin:8px 0 0;padding:0;max-height:200px;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fafafa}.bb-results li{padding:5px 12px;border-bottom:1px solid var(--border)}.bb-results li:last-child{border-bottom:none}.bb-results li.ok{color:var(--text)}.bb-results li.err{color:var(--err)}.bulk-progress{background:var(--surface);border:1px solid var(--accent);border-left-width:4px;border-radius:var(--radius);padding:16px 20px;margin-bottom:16px;box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:5}.bulk-progress.done{border-color:var(--ok);background:#ecfdf5}.bp-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:10px}.bp-title{font-size:14px;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bp-current{color:var(--accent);font-weight:600}.bp-bars{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.bp-bar{height:8px;background:#f3f4f6;border-radius:4px;overflow:hidden}.bp-bar.slim{height:3px;opacity:.7}.bp-bar.accent{height:6px}.bp-bar-fill{height:100%;background:var(--accent);transition:width .3s ease-out}.bp-sub{color:var(--text-muted);font-size:12px;font-weight:400}.bulk-progress.done .bp-bar-fill{background:var(--ok)}.bp-stats{display:flex;flex-wrap:wrap;gap:16px;font-size:12px;color:var(--text-muted);margin-top:6px}.bp-results{font-size:12px;margin-top:10px;border-top:1px solid var(--border);padding-top:8px}.bp-results summary{cursor:pointer;color:var(--text-muted);font-weight:500}.bp-results ul{list-style:none;margin:8px 0 0;padding:0;max-height:180px;overflow-y:auto}.bp-results li{padding:3px 0;font-size:12px}.bp-results li.ok{color:var(--text)}.bp-results li.err{color:var(--err)}.tree-view{display:grid;grid-template-columns:minmax(360px,480px) 1fr;gap:24px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.tv-board{display:flex;flex-direction:column;gap:12px}.tv-board-wrap{width:100%;max-width:420px;aspect-ratio:1 / 1;align-self:flex-start}.tv-board-wrap>div,.tv-board-wrap>div>div{width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important}.tv-controls{display:flex;gap:8px}.tv-path{background:#f9fafb;border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 14px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;color:var(--text);line-height:1.7;word-break:break-word}.path-num{color:var(--text-muted);margin-right:4px;margin-left:8px}.path-num:first-child{margin-left:0}.path-move{cursor:pointer;margin-right:4px;border-radius:3px;padding:1px 4px;transition:background .1s}.path-move:hover{background:#f5863426;color:var(--accent)}.tv-side{display:flex;flex-direction:column;gap:16px;min-width:0}.tv-summary{font-size:14px;color:var(--text)}.tv-summary strong{font-size:22px;color:var(--accent);font-weight:700;margin-right:4px}.tv-table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.tv-table th,.tv-table td{padding:9px 14px;text-align:left;font-size:13px;border-bottom:1px solid var(--border)}.tv-table th{background:#f9fafb;color:var(--text-muted);font-weight:600;text-transform:uppercase;font-size:11px;letter-spacing:.04em}.tv-table td.num,.tv-table th.num{text-align:right;font-variant-numeric:tabular-nums}.tv-table tbody tr{cursor:pointer;transition:background .1s}.tv-table tbody tr:hover{background:#f5863414}.tv-table tbody tr:last-child td{border-bottom:none}.move-san{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;font-size:14px}.ann{color:var(--accent);font-weight:600}.tv-leaf{background:#f9fafb;border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px}.tv-leaf-title{font-size:11px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.tv-leaf ul{list-style:none;margin:0;padding:0}.tv-leaf li{font-size:13px;padding:3px 0}.tv-comment{background:#fffbeb;border-left:3px solid var(--accent);border-radius:var(--radius-sm);padding:10px 14px;font-size:13px}.tv-comment p{margin:4px 0}.tv-errors{font-size:12px;color:var(--text-muted)}.tv-errors summary{cursor:pointer}.tv-errors ul{padding-left:18px;margin:6px 0}.toaster{position:fixed;bottom:20px;right:20px;display:flex;flex-direction:column;gap:10px;z-index:100;pointer-events:none}.toast{pointer-events:auto;background:#1f2937;color:#f9fafb;padding:12px 18px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;max-width:380px;box-shadow:var(--shadow-lg);cursor:pointer;border-left:4px solid var(--primary);animation:slideIn .2s ease-out}.toast-ok{border-left-color:var(--ok)}.toast-err{border-left-color:var(--err)}@keyframes slideIn{0%{transform:translate(20px);opacity:0}to{transform:translate(0);opacity:1}}.hotspots{padding:24px;max-width:920px;margin:0 auto}.hotspots-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px}.hotspots-header h2{margin:0 0 4px}.hotspots-controls{display:flex;gap:10px;align-items:center;flex-shrink:0}.hotspots-controls .tag{background:var(--surface-2, #f3f4f6);padding:4px 8px;border-radius:4px;font-size:12px;display:inline-flex;align-items:center;gap:4px}.hotspots-controls .ghost-link{background:transparent;border:none;color:var(--text-muted);cursor:pointer;font-size:14px;padding:0 2px}.hotspots-empty{background:var(--surface-2, #f3f4f6);padding:16px;border-radius:var(--radius-sm);margin:12px 0}.hotspots-empty .row{display:flex;gap:8px;margin-top:12px}.hotspots-empty input{flex:1;padding:6px 10px;border:1px solid var(--border);border-radius:4px}.error-banner{background:#fef2f2;color:#991b1b;padding:10px 14px;border-radius:var(--radius-sm);margin:8px 0;font-size:13px}.hotspots-progress{margin:8px 0}.hotspots-summary{margin:6px 0 16px}.hotspots-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:16px}.hotspot-row{display:grid;grid-template-columns:36px 220px 1fr;gap:16px;background:var(--surface);padding:16px;border-radius:var(--radius-sm);border:1px solid var(--border)}.hotspot-rank{font-size:22px;font-weight:700;color:var(--text-muted);font-variant-numeric:tabular-nums}.hotspot-board{width:220px;height:220px}.hotspot-board>div{width:100%!important;height:100%!important}.hotspot-summary{font-size:14px;margin-bottom:8px}.hotspot-summary strong{color:var(--err, #dc2626)}.hotspot-expected,.hotspot-plays{font-size:13px;margin:4px 0}.san{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:var(--text)}.san.wrong{color:#dc2626}.hotspot-link{margin-top:10px;font-size:13px}.hotspot-link a{color:var(--primary, #ea580c);text-decoration:none}.hotspot-link a:hover{text-decoration:underline}.hotspot-samples{margin-top:10px;font-size:12px}.hotspot-samples summary{cursor:pointer}.hotspot-samples ul{padding-left:18px;margin:6px 0}.hotspots-maxgames{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text-muted)}.hotspots-maxgames select{padding:4px 6px;border:1px solid var(--border);border-radius:4px;font-size:13px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;display:flex;align-items:flex-start;justify-content:center;padding-top:10vh;z-index:200;animation:fadeIn .12s ease-out}.modal-card{background:var(--bg, #fff);width:100%;border-radius:12px;box-shadow:0 18px 48px #0f172a52;display:flex;flex-direction:column;max-height:80vh;overflow:hidden;animation:slideUp .16s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--border)}.modal-head h3{margin:0;font-size:15px;font-weight:600}.modal-close{background:transparent;border:none;font-size:16px;color:var(--text-muted);cursor:pointer;padding:4px 8px;border-radius:4px}.modal-close:hover{background:var(--surface-2, #f3f4f6);color:var(--text)}.modal-body{padding:20px;overflow-y:auto}.modal-form{display:flex;flex-direction:column;gap:12px}.modal-form .field{display:flex;flex-direction:column;gap:4px}.modal-form .field>span{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.modal-form input[type=text],.modal-form textarea{border:1px solid var(--border);border-radius:6px;padding:8px 10px;font-size:13px;font-family:inherit}.modal-form textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical}.modal-form .lead{margin:0 0 4px;color:var(--text-muted);font-size:13px;line-height:1.5}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}.header-actions{display:flex;gap:8px;align-items:center}.ghost-action{background:var(--surface-2);border:1px solid transparent;color:var(--text);padding:7px 14px;border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;transition:background .1s,border-color .1s}.ghost-action:hover{background:var(--surface-3);border-color:var(--border-strong)}.tabs{display:flex;gap:2px}.tabs button{background:transparent;border:none;padding:6px 14px;border-radius:6px;font-size:13px;color:var(--text-muted);cursor:pointer;font-weight:500}.tabs button.active{color:var(--text);background:var(--surface-2, #f3f4f6)}.tabs button:hover:not(.active){color:var(--text)}.ext-status{display:inline-flex;align-items:center;width:10px;height:10px}.ext-status .dot{width:8px;height:8px;border-radius:50%;background:#10b981}.ext-status.off .dot{background:#ef4444}.sources-panel{display:flex;flex-direction:column;gap:4px;margin:8px 0 14px}.source-row{display:grid;grid-template-columns:18px 100px 1fr auto;gap:10px;align-items:center;padding:8px 12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer;text-align:left;font-family:inherit;font-size:13px;color:var(--text-muted);transition:background .1s,border-color .1s,color .1s}.source-row:hover{background:var(--surface-2)}.source-row.selected{background:var(--surface);border-color:var(--text);color:var(--text)}.source-row .source-label{font-weight:600}.source-radio{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1.5px solid var(--border-strong);background:var(--surface)}.source-radio .dot{width:8px;height:8px;border-radius:50%;background:transparent}.source-radio.on{border-color:var(--text)}.source-radio.on .dot{background:var(--text)}.source-username{font-size:13px;color:var(--text);display:inline-flex;align-items:center;gap:4px}.source-edit{display:inline-flex;gap:6px;align-items:center}.source-edit input{font-size:12px;padding:5px 8px;border:1px solid var(--border-strong);border-radius:6px;width:160px}.source-edit button.small.secondary{padding:5px 10px;font-size:12px}.ghost-link{background:transparent;border:none;color:var(--text-subtle);cursor:pointer;font-size:12px;padding:0 4px}.ghost-link:hover{color:var(--text)}.hotspot-sources{display:flex;gap:6px;margin:4px 0 6px}.src-pill{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:4px;letter-spacing:.02em}.src-pill.src-chesscom{background:#f5863426;color:#b85a18}.src-pill.src-lichess{background:#6366f126;color:#4338ca}.src-tag{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;font-size:9px;font-weight:700;border-radius:3px;vertical-align:middle}.src-tag.src-chesscom{background:#f586342e;color:#b85a18}.src-tag.src-lichess{background:#6366f12e;color:#4338ca}.auth-loading{display:flex;align-items:center;justify-content:center;height:100vh}.auth-screen{display:flex;align-items:center;justify-content:center;height:100vh;background:var(--surface-2)}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:32px 32px 28px;width:100%;max-width:380px;box-shadow:var(--shadow-lg)}.auth-brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;margin-bottom:24px;color:var(--text)}.auth-brand .brand-mark{width:32px;height:32px}.auth-card h2{margin:0 0 8px;font-size:20px;font-weight:600}.auth-card p{margin:0 0 18px;font-size:13px;color:var(--text-muted)}.auth-form{display:flex;flex-direction:column;gap:10px;margin-top:8px}.auth-form input{padding:10px 12px;font-size:14px}.auth-form button{padding:10px 14px;font-size:14px}.auth-sent{font-size:13px;line-height:1.5}.auth-sent strong{color:var(--text)}.auth-sent button{margin-top:12px}.user-chip{position:fixed;bottom:12px;right:16px;display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--surface);border:1px solid var(--border);border-radius:999px;box-shadow:var(--shadow-sm);z-index:90}.user-chip button.small{padding:3px 8px}.auth-google{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;background:var(--surface);color:var(--text);border:1px solid var(--border-strong);font-size:14px;font-weight:500;padding:10px 14px;border-radius:8px;cursor:pointer}.auth-google:hover:not(:disabled){background:var(--surface-2);border-color:var(--text-muted)}.auth-divider{display:flex;align-items:center;gap:10px;margin:16px 0 12px;color:var(--text-subtle);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.auth-divider:before,.auth-divider:after{content:"";flex:1;height:1px;background:var(--border)}.course-row.state-active{border-left:3px solid var(--text);padding-left:9px}.course-row-actions{display:flex;align-items:center;gap:4px}.action-slot{display:inline-flex;justify-content:flex-end;min-width:86px}.action-slot:empty{width:86px}.course-row.state-notImported{background:var(--surface)}.course-row.state-notImported .course-row-name{color:var(--text-muted)}.course-row.state-notImported .source-icon{opacity:.55}.course-row.state-inactive .course-row-name{color:var(--text)}.course-row.state-queued{opacity:.7}.status-pill{display:inline-flex;align-items:center;font-size:11.5px;font-weight:500;padding:3px 9px;border-radius:999px;letter-spacing:.005em}.status-pill.not-imported{background:transparent;color:var(--text-subtle);border:1px dashed var(--border-strong)}.status-pill.queued,.status-pill.inactive{background:var(--surface-2);color:var(--text-muted)}.status-pill.active{background:transparent;color:var(--text);font-weight:600;padding-left:0}.status-pill.active:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ok);margin-right:7px}.my-rep{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 20px;margin:12px 0 20px}.my-rep h2{margin:0 0 4px;font-size:15px;font-weight:600;letter-spacing:-.01em}.my-rep-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px}.my-rep-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.my-rep-item{display:grid;grid-template-columns:26px 1fr 96px 24px;gap:10px;align-items:center;padding:6px 8px;border-radius:8px;cursor:pointer;transition:background .1s}.my-rep-item>.muted.small{text-align:right;font-variant-numeric:tabular-nums}.my-rep-item:hover{background:var(--surface-2)}.my-rep-name{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.my-rep-empty{background:var(--surface-2);border:1px dashed var(--border-strong)}.my-rep-empty p{font-size:13px;margin:8px 0;color:var(--text-muted);line-height:1.55}.my-rep-empty p strong{color:var(--text);font-weight:600}.my-rep-empty ul{margin:8px 0 12px 18px;padding:0;font-size:13px;color:var(--text-muted);line-height:1.7}.lp{background:var(--bg);color:var(--text);min-height:100vh;display:block;font-feature-settings:"ss01","cv11"}.lp h1,.lp h2,.lp h3{letter-spacing:-.025em}.lp h2{font-size:28px;font-weight:600;margin:0 0 28px}.lp h3{font-size:16px;font-weight:600;margin:0 0 6px}.lp p{line-height:1.65}.lp-nav{position:sticky;top:0;z-index:10;background:#fafaf9d9;backdrop-filter:saturate(180%) blur(8px);-webkit-backdrop-filter:saturate(180%) blur(8px);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;padding:12px 32px}.lp-brand{display:inline-flex;align-items:center;gap:10px;font-weight:700;font-size:15px;color:var(--text)}.lp-brand .brand-mark{width:28px;height:28px;border-radius:7px}.lp-nav-links{display:inline-flex;align-items:center;gap:20px;font-size:13px;color:var(--text-muted)}.lp-nav-links a{color:var(--text-muted);text-decoration:none;font-weight:500}.lp-nav-links a:hover{color:var(--text)}.lp-hero{max-width:1280px;margin:0 auto;padding:80px 32px 60px;display:grid;grid-template-columns:1.05fr 1fr;gap:48px;align-items:center}.lp-hero h1{font-size:clamp(40px,6vw,68px);line-height:1.04;margin:0 0 24px;font-weight:600}.lp-lead{font-size:17px;color:var(--text-muted);max-width:540px;margin:0 0 28px}.lp-cta{display:flex;align-items:center;gap:16px;margin-bottom:18px}.lp-cta button{font-size:15px;padding:12px 22px;border-radius:10px}.lp-cta-secondary{font-size:14px;color:var(--text-muted);font-weight:500}.lp-cta-secondary:hover{color:var(--text);text-decoration:none}.lp-trust{font-size:12px}.lp-hero-art{display:flex;justify-content:center;align-items:center}.hero-mock{position:relative;width:100%;max-width:460px;aspect-ratio:1.2}.hero-mock-board{position:absolute;top:0;left:0;width:78%;aspect-ratio:1;border-radius:14px;overflow:hidden;box-shadow:0 24px 60px #0f14192e}.hero-mock-grid{display:grid;grid-template-columns:repeat(8,1fr);width:100%;height:100%}.hm-sq{background:#f0d9b5}.hm-sq.dark{background:#b58863}.hero-mock-overlay{position:absolute;bottom:8%;right:0;width:62%;background:#1f2937;color:#f9fafb;padding:14px 16px;border-radius:10px;font-size:12px;border-left:4px solid #63a89b;box-shadow:0 18px 48px #0f141940}.hm-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.hm-head strong{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#9ca3af}.hm-tag{background:#374151;color:#d1d5db;font-size:10px;padding:2px 7px;border-radius:4px}.hm-status{font-size:12.5px;border-top:1px solid #374151;padding-top:8px;margin-bottom:8px}.hm-section{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#9ca3af;margin-bottom:6px}.hm-lines{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.hm-lines li{display:flex;align-items:center;gap:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hm-lines li span{color:#9ca3af;min-width:12px}.hm-lines li em{margin-left:auto;color:#8fd2c7;font-style:normal}.lp-keymsg{max-width:1280px;margin:-16px auto 0;padding:24px 32px 8px;display:grid;grid-template-columns:repeat(3,1fr);gap:14px}@media (max-width: 760px){.lp-keymsg{grid-template-columns:1fr}}.keymsg-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:14px 16px;font-size:13.5px;line-height:1.55;color:#374151}.keymsg-card strong{display:block;color:#111827;font-size:14px;margin-bottom:4px;letter-spacing:-.005em}.lp-how-lead{text-align:center;max-width:640px;margin:-8px auto 28px;font-size:14.5px;line-height:1.6}.lp-pain{max-width:1280px;margin:0 auto;padding:60px 32px}.lp-pain h2{text-align:center;max-width:720px;margin:0 auto 36px}.lp-pain-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.pain-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:22px}.pain-stat{font-size:36px;font-weight:700;letter-spacing:-.03em;margin-bottom:6px;color:var(--text)}.pain-text{font-size:14px;color:var(--text);margin:0 0 16px}.pain-quote{margin:0;padding:12px 14px;background:var(--surface-2);border-left:3px solid var(--text-subtle);font-style:italic;font-size:13px;color:var(--text-muted);border-radius:4px}.pain-quote cite{display:block;margin-top:6px;font-style:normal;font-size:11px;color:var(--text-subtle)}.lp-how{max-width:900px;margin:0 auto;padding:60px 32px}.lp-how h2{text-align:center}.lp-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.lp-steps li{display:flex;gap:18px;align-items:flex-start;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:22px 24px}.step-num{width:32px;height:32px;border-radius:50%;background:var(--text);color:var(--bg);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;flex-shrink:0}.lp-steps p{margin:0;color:var(--text-muted);font-size:14px}.lp-features{max-width:1280px;margin:0 auto;padding:60px 32px}.lp-features h2{text-align:center}.lp-features-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}.feature-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:22px 24px}.feature-icon{width:38px;height:38px;display:inline-flex;align-items:center;justify-content:center;background:var(--surface-2);border-radius:10px;font-size:18px;color:var(--text);margin-bottom:12px}.feature-card p{margin:0;font-size:14px;color:var(--text-muted)}.lp-final-cta{max-width:700px;margin:0 auto;padding:80px 32px;text-align:center}.lp-final-cta h2{margin-bottom:12px}.lp-final-cta p{font-size:14px;margin:0 0 24px}.lp-final-cta button{font-size:15px;padding:12px 24px;border-radius:10px}.lp-foot{border-top:1px solid var(--border);text-align:center;padding:24px;display:flex;justify-content:center;gap:10px}.lp-foot a{color:var(--text-muted);text-decoration:none}.lp-foot a:hover{color:var(--text)}@media (max-width: 760px){.lp-hero{grid-template-columns:1fr;padding:56px 22px 40px}.lp-pain-grid,.lp-features-grid{grid-template-columns:1fr}.lp h2{font-size:22px}.lp-nav{padding:12px 18px}}@media (max-width: 520px){.lp-nav-links a{display:none}.lp-nav-links{gap:10px}}
