:root{--bg:#eef1f5;--surface:#fff;--surface-2:#e7ecf2;--border:#d3dae3;--text:#16202e;--text-dim:#5c6b7e;--accent:#0891b2;--good:#1a9e6a;--warn:#d98016;--bad:#d43d51;--f-pinky:#9b5de5;--f-ring:#5a6ee0;--f-middle:#3b82f6;--f-index:#12a5c9;--f-thumb:#d6559b;--shadow:0 1px 2px #141e2d0f, 0 6px 20px #141e2d0f;--mono:ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Menlo, Consolas, monospace;--sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}@media (prefers-color-scheme:dark){:root{--bg:#0d1117;--surface:#161c26;--surface-2:#1d2530;--border:#2b3542;--text:#e7edf4;--text-dim:#8c9aad;--accent:#2bc4e6;--good:#33c88a;--warn:#eda13c;--bad:#f16171;--f-pinky:#b07df0;--f-ring:#7b8cf0;--f-middle:#5b9bff;--f-index:#35c0e0;--shadow:0 1px 2px #0000004d, 0 8px 26px #00000059}}:root[data-theme=light]{--bg:#eef1f5;--surface:#fff;--surface-2:#e7ecf2;--border:#d3dae3;--text:#16202e;--text-dim:#5c6b7e;--accent:#0891b2;--good:#1a9e6a;--warn:#d98016;--bad:#d43d51;--f-pinky:#9b5de5;--f-ring:#5a6ee0;--f-middle:#3b82f6;--f-index:#12a5c9;--shadow:0 1px 2px #141e2d0f, 0 6px 20px #141e2d0f}:root[data-theme=dark]{--bg:#0d1117;--surface:#161c26;--surface-2:#1d2530;--border:#2b3542;--text:#e7edf4;--text-dim:#8c9aad;--accent:#2bc4e6;--good:#33c88a;--warn:#eda13c;--bad:#f16171;--f-pinky:#b07df0;--f-ring:#7b8cf0;--f-middle:#5b9bff;--f-index:#35c0e0;--shadow:0 1px 2px #0000004d, 0 8px 26px #00000059}*{box-sizing:border-box}body{margin:0}.wrap{font-family:var(--sans);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;min-height:100vh;padding:clamp(16px,3vw,32px);line-height:1.5;overflow-x:hidden}.head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:22px;display:flex}.title{letter-spacing:-.02em;text-wrap:balance;margin:0;font-size:clamp(20px,2.6vw,28px);font-weight:640}.title-sub{color:var(--text-dim);letter-spacing:0;font-size:.6em;font-weight:400}.sub{color:var(--text-dim);max-width:58ch;margin:4px 0 0;font-size:14px}.head-tools{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.delete-btn{color:var(--bad);border:1px solid var(--bad);background:0 0;border-radius:6px;margin-left:-6px;padding:4px 8px;font-size:16px;font-weight:700;line-height:1}.delete-btn:hover{background:var(--bad);color:#fff}select,button{font-family:var(--sans);color:var(--text);background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:9px;padding:8px 11px;font-size:13px;transition:border-color .15s,background .15s}select:hover,button:hover{border-color:var(--accent)}button.seg{border-radius:8px;padding:6px 11px}button.seg[aria-pressed=true]{background:color-mix(in srgb, var(--accent) 16%, var(--surface));border-color:var(--accent);color:var(--text)}.sep{color:var(--border);margin:0 2px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.grid{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);align-items:stretch;gap:20px;height:calc(100vh - 120px);min-height:500px;display:grid}.grid>section{min-width:0;padding-right:8px;overflow:hidden auto}.grid>section::-webkit-scrollbar{width:6px}.grid>section::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.grid>section::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}@media (width<=900px){.grid{grid-template-columns:1fr;height:auto}.grid>section{overflow-y:visible}}.card{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:16px;padding:18px;overflow:hidden}.card h2{text-transform:uppercase;letter-spacing:.09em;color:var(--text-dim);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:0 0 14px;font-size:12px;font-weight:600;display:flex}.board-wrap{position:relative;overflow-x:auto}.board{justify-content:center;gap:clamp(18px,4vw,40px);min-width:max-content;display:flex}.board-positioned{margin:0 auto}.board-positioned .key{aspect-ratio:auto;width:44px;height:44px}.hand{flex-direction:column;gap:9px;display:flex}.main{grid-template-columns:repeat(5,1fr);gap:7px;display:grid}.thumbs{gap:7px;display:flex}.hand.L .thumbs{justify-content:flex-end;padding-right:3px}.hand.R .thumbs{justify-content:flex-start;padding-left:3px}.key.thumb{aspect-ratio:1/.8;border-radius:13px}.key{aspect-ratio:1;background:color-mix(in srgb, var(--kf) 20%, var(--surface));width:clamp(38px,5.2vw,52px);font-family:var(--mono);color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;border:1.5px solid #0000;border-radius:10px;justify-content:center;align-items:center;font-size:clamp(15px,2vw,19px);font-weight:600;transition:transform .12s,box-shadow .12s,border-color .12s,background .12s;display:flex;position:relative}.key:hover{transform:translateY(-2px)}.key .fg{font-family:var(--sans);letter-spacing:.04em;color:var(--kf);opacity:.85;font-size:8px;font-weight:700;position:absolute;top:4px;left:5px}.key.home:after{content:"";background:var(--kf);opacity:.8;border-radius:2px;width:40%;height:2.5px;position:absolute;bottom:5px;left:50%;transform:translate(-50%)}.key.sel{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 28%, transparent)}.key.hl{border-color:var(--bad);box-shadow:0 0 0 3px color-mix(in srgb, var(--bad) 34%, transparent);z-index:3;transform:translateY(-2px)}.key.hl.ok{border-color:var(--good);box-shadow:0 0 0 3px color-mix(in srgb, var(--good) 34%, transparent)}.key.hl-colored{border-color:var(--hl-color);box-shadow:0 0 0 3px color-mix(in srgb, var(--hl-color) 40%, transparent)}.key.hl-modifier{border-color:color-mix(in srgb, var(--hl-color) 55%, var(--border))}.key.hl-modifier:before{content:"";z-index:4;background:var(--hl-color);border:2px solid var(--surface);border-radius:50%;width:12px;height:12px;position:absolute;top:-5px;right:-5px}.board svg{pointer-events:none;z-index:2;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.legend{color:var(--text-dim);flex-wrap:wrap;justify-content:center;gap:14px;margin-top:16px;font-size:12px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.legend-hint{opacity:.7;margin-left:8px;font-style:italic}.dot{border-radius:3px;width:11px;height:11px}.inspector{border-top:1px solid var(--border);min-height:40px;color:var(--text-dim);flex-wrap:wrap;align-items:center;gap:14px;margin-top:16px;padding-top:14px;font-size:13px;display:flex}.inspector label{color:var(--text);align-items:center;gap:7px;font-weight:500;display:inline-flex}.inspector-close{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:4px;margin-left:auto;padding:4px 8px;font-size:18px;line-height:1}.inspector-close:hover{background:var(--surface-2);color:var(--text)}.inspector input[type=text]{text-align:center;width:40px;font-family:var(--mono);border:1px solid var(--border);background:var(--surface-2);color:var(--text);text-transform:lowercase;border-radius:8px;padding:5px;font-size:16px}.chk{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.metrics{grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px;display:grid}@media (width<=560px){.metrics{grid-template-columns:repeat(2,1fr)}}.tile{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:14px;padding:14px 15px}.tile .v{font-family:var(--mono);letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:26px;font-weight:600;line-height:1.1}.tile .k{text-transform:uppercase;letter-spacing:.07em;color:var(--text-dim);margin-top:4px;font-size:11px}.tile .hint{color:var(--text-dim);opacity:.85;margin-top:3px;font-size:10.5px}.tile.hero .v{color:var(--bad)}.tile.hero.low .v{color:var(--good)}.tile.hero.mid .v{color:var(--warn)}.heat{flex-wrap:wrap;gap:6px;display:flex}.chip{font-family:var(--mono);cursor:default;letter-spacing:.02em;background:color-mix(in srgb, var(--c) 20%, var(--surface));color:var(--text);border:1px solid #0000;border-color:color-mix(in srgb, var(--c) 40%, transparent);border-radius:8px;padding:6px 9px;font-size:13px;font-weight:600;transition:transform .1s;position:relative}.chip:hover{border-color:var(--c);transform:translateY(-2px)}.chip .fq{font-family:var(--sans);opacity:.7;margin-left:4px;font-size:8.5px;font-weight:600}.chip.unmeasured{background:var(--surface-2);border-color:var(--border);opacity:.5}.unmeasured-dot{background:var(--surface-2);border:1px solid var(--border)}.offenders{flex-direction:column;gap:2px;display:flex}.off-row{border-radius:8px;grid-template-columns:44px 1fr auto;align-items:center;gap:10px;padding:7px 8px;display:grid}.off-row:hover{background:var(--surface-2)}.off-bg{font-family:var(--mono);text-align:center;background:color-mix(in srgb, var(--bad) 18%, var(--surface));color:var(--text);border-radius:6px;padding:3px 0;font-size:15px;font-weight:700}.off-desc{color:var(--text-dim);font-size:12.5px}.off-desc b{color:var(--text);font-weight:600}.off-fq{font-family:var(--mono);color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:13px}.empty{color:var(--good);padding:8px;font-size:13px}.tt{z-index:50;pointer-events:none;background:var(--text);color:var(--bg);opacity:0;max-width:240px;font-size:11.5px;line-height:1.5;font-family:var(--sans);border-radius:8px;padding:7px 10px;transition:opacity .12s;position:fixed;transform:translateY(4px);box-shadow:0 6px 24px #0000004d}.tt.show{opacity:1;transform:translateY(0)}.tt .mono{font-family:var(--mono);font-weight:700}.foot{color:var(--text-dim);text-align:center;margin-top:18px;font-size:12px}.foot b{color:var(--text);font-weight:600}.import-wrap{display:contents}.save-status{letter-spacing:.03em;background:color-mix(in srgb, var(--good) 15%, var(--surface));color:var(--good);text-transform:none;border-radius:5px;padding:2px 7px;font-size:10px;font-weight:500}.save-status.modified{background:color-mix(in srgb, var(--warn) 15%, var(--surface));color:var(--warn)}.save-status:empty{display:none}.practice-overlay{z-index:100;background:var(--bg);color:var(--text);opacity:0;pointer-events:none;flex-direction:column;justify-content:center;align-items:center;transition:opacity .2s;display:flex;position:fixed;inset:0}.practice-overlay.active{opacity:1;pointer-events:auto}.practice-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:16px 24px;display:flex;position:absolute;top:0;left:0;right:0}.practice-header h2{margin:0;font-size:16px;font-weight:600}.practice-field{align-items:center;gap:6px;display:flex}.practice-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);font-size:11px}#practiceFocus{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 10px;font-size:13px}#practiceFocus:focus{border-color:var(--accent);outline:none}#practiceFilter{border:1px solid var(--border);background:var(--surface);color:var(--text);width:120px;font-size:13px;font-family:var(--mono);border-radius:6px;padding:6px 10px}#practiceFilter:focus{border-color:var(--accent);outline:none}#practiceFilter::placeholder{color:var(--text-dim);opacity:.7}.practice-stats{color:var(--text-dim);gap:20px;font-size:13px;display:flex}.practice-stats span{align-items:center;gap:6px;display:flex}.practice-stats .val{font-family:var(--mono);color:var(--text);font-weight:600}.practice-main{text-align:center}.practice-prompt{font-family:var(--mono);letter-spacing:.05em;color:var(--text);-webkit-user-select:none;user-select:none;margin-bottom:16px;font-size:clamp(64px,12vw,120px);font-weight:700}.practice-prompt.error{color:var(--bad);animation:.3s shake}@keyframes shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-6px)}40%,80%{transform:translate(6px)}}.practice-queue{font-family:var(--mono);color:var(--text-dim);opacity:.5;gap:12px;margin-bottom:40px;font-size:20px;display:flex}.practice-input{font-family:var(--mono);border:2px solid var(--border);background:var(--surface);color:var(--text);text-align:center;border-radius:12px;outline:none;width:120px;padding:12px 24px;font-size:24px}.practice-input:focus{border-color:var(--accent)}.practice-layer-hint{font-size:15px;font-family:var(--mono);color:var(--accent);opacity:0;min-height:24px;margin-top:16px;transition:opacity .5s ease-in}.practice-layer-hint.visible{opacity:1}.practice-hint{color:var(--text-dim);margin-top:12px;font-size:13px}.practice-hint kbd{font-family:var(--mono);background:var(--surface-2);border-radius:4px;padding:2px 6px}.practice-summary{text-align:center}.practice-summary h3{margin:0 0 24px;font-size:24px}.tp-problem-note{color:var(--text-dim);margin:4px 0 0;font-size:13px}.tp-problem-note:empty{display:none}.practice-summary-grid{grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:24px;display:grid}.practice-summary .tile{min-width:100px}.practice-slowest{margin-top:20px}.practice-slowest h4{text-transform:uppercase;letter-spacing:.07em;color:var(--text-dim);margin:0 0 10px;font-size:13px}.practice-slowest-list{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.practice-slowest-item{font-family:var(--mono);background:color-mix(in srgb, var(--warn) 15%, var(--surface));color:var(--text);border-radius:8px;padding:6px 10px;font-size:14px}.practice-slowest-item .ms{color:var(--text-dim);margin-left:4px;font-size:11px}.tp-setup{flex-direction:column;align-items:center;gap:16px;width:min(700px,90vw);display:flex}.tp-setup-hint{color:var(--text-dim);text-align:center;max-width:60ch;margin:0;font-size:14px}.tp-passage-input{border:2px solid var(--border);background:var(--surface);width:100%;min-height:160px;color:var(--text);font-family:var(--mono);resize:vertical;border-radius:12px;padding:14px 16px;font-size:15px;line-height:1.6}.tp-passage-input:focus{border-color:var(--accent);outline:none}.tp-setup-footer{justify-content:space-between;align-items:center;width:100%;display:flex}.tp-char-counter{font-family:var(--mono);color:var(--text-dim);font-size:12px}.tp-setup-actions{align-items:center;gap:14px;display:flex}.tp-save-toggle{color:var(--text-dim);cursor:pointer;align-items:center;gap:6px;font-size:13px;display:flex}.tp-saved{width:100%}.tp-saved-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);margin-bottom:8px;font-size:11px}.tp-saved-items{flex-wrap:wrap;gap:8px;display:flex}.tp-saved-item{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);cursor:pointer;border-radius:8px;align-items:center;gap:6px;max-width:260px;padding:6px 10px;font-size:13px;display:flex}.tp-saved-item:hover{border-color:var(--accent)}.tp-saved-item-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-saved-item-delete{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:0 0 0 4px;font-size:14px;line-height:1}.tp-saved-item-delete:hover{color:var(--bad)}.tp-main{flex-direction:column;align-items:center;gap:20px;width:min(900px,92vw);display:flex}.tp-passage{font-family:var(--mono);white-space:pre-wrap;text-align:left;font-variant-ligatures:none;font-feature-settings:"liga" 0, "calt" 0;outline:none;max-height:60vh;padding-left:4px;font-size:22px;line-height:1.7;overflow-y:auto}.tp-hint{color:var(--text-dim);font-size:13px}.tp-hint kbd{font-family:var(--mono);background:var(--surface-2);border-radius:4px;padding:2px 6px}.tp-char{color:var(--text-dim)}.tp-char.correct{color:var(--text)}.tp-char.mistake{color:var(--bad);background:color-mix(in srgb, var(--bad) 20%, var(--surface));border-radius:2px}.tp-char.current{box-shadow:-2px 0 0 var(--accent)}.tp-nl{opacity:.55;font-size:.75em}#tpSetup[hidden],#tpMain[hidden],#tpStats[hidden]{display:none}.practice-summary-grid.text-practice-summary-grid{grid-template-columns:repeat(4,1fr)}@media (width<=560px){.practice-summary-grid.text-practice-summary-grid{grid-template-columns:repeat(2,1fr)}}.fl-setup{flex-direction:column;align-items:center;gap:16px;width:min(700px,90vw);display:flex}.fl-main{flex-direction:column;align-items:center;gap:16px;width:min(900px,92vw);display:flex}.fl-field{border:2px solid var(--border);background:var(--surface);border-radius:12px;outline:none;width:100%;height:min(60vh,480px);position:relative;overflow:hidden}.fl-item{font-family:var(--mono);background:var(--surface-2);color:var(--text-dim);white-space:nowrap;will-change:transform;border-radius:6px;padding:3px 8px;font-size:20px;position:absolute;top:0;left:0}.fl-item .fl-typed{color:var(--accent)}.fl-item.targeted{color:var(--text);border:1px solid var(--accent);background:color-mix(in srgb, var(--accent) 12%, var(--surface-2))}.fl-leaderboard{width:100%}.fl-leaderboard-list{flex-direction:column;gap:4px;display:flex}.fl-leaderboard-row{background:var(--surface-2);border-radius:8px;justify-content:space-between;gap:10px;padding:6px 10px;font-size:13px;display:flex}.fl-leaderboard-row .rank{color:var(--text-dim);width:1.5em;display:inline-block}.fl-leaderboard-row .name{flex:1;font-weight:600}.fl-leaderboard-row .time{font-family:var(--mono);color:var(--text-dim)}.fl-leaderboard-empty{color:var(--text-dim);font-size:13px}.fl-speed-meter{background:var(--surface-2);vertical-align:middle;border-radius:4px;width:70px;height:8px;margin-left:6px;display:inline-block;overflow:hidden}.fl-speed-meter-fill{background:var(--good);width:0%;height:100%;transition:width .25s,background-color .25s;display:block}#flSetup[hidden],#flMain[hidden],#flStats[hidden]{display:none}#practiceHistoryContent{max-height:60vh;overflow-y:auto}.pqh-empty{color:var(--text-dim);padding:12px 0;font-size:13px}.pqh-entry{border:1px solid var(--border);border-radius:10px;margin-bottom:8px;overflow:hidden}.pqh-header{cursor:pointer;background:var(--surface-2);align-items:center;gap:10px;padding:10px 12px;font-size:13px;display:flex}.pqh-header:hover{background:color-mix(in srgb, var(--accent) 8%, var(--surface-2))}.pqh-time{color:var(--text-dim);white-space:nowrap}.pqh-focus{font-weight:600}.pqh-summary{color:var(--text-dim);text-align:right;margin-left:auto}.pqh-items{flex-wrap:wrap;gap:6px;padding:10px 12px;display:flex}.pqh-item{font-family:var(--mono);border-radius:6px;padding:3px 8px;font-size:12px}.pqh-item.problem-word{background:color-mix(in srgb, var(--accent) 18%, var(--bg));color:var(--accent)}.pqh-item.weak{background:color-mix(in srgb, var(--bad) 18%, var(--bg));color:var(--bad)}.pqh-item.weighted{background:var(--surface-2);color:var(--text-dim)}.modal-overlay{z-index:200;opacity:0;pointer-events:none;background:#00000080;justify-content:center;align-items:center;transition:opacity .2s;display:flex;position:fixed;inset:0}.modal-overlay.active{opacity:1;pointer-events:auto}.modal{background:var(--surface);border:1px solid var(--border);width:90%;max-width:500px;box-shadow:var(--shadow);border-radius:16px;padding:24px}.modal h3{margin:0 0 12px;font-size:18px}.modal p{color:var(--text-dim);margin:0 0 12px;font-size:14px}.kle-input{border:1px solid var(--border);background:var(--surface-2);width:100%;color:var(--text);font-family:var(--mono);border-radius:8px;padding:10px 12px;font-size:13px}.kle-input:focus{border-color:var(--accent);outline:none}.modal-hint{color:var(--text-dim);margin:16px 0 8px;font-size:12px}.kle-textarea{border:1px solid var(--border);background:var(--surface-2);width:100%;color:var(--text);font-family:var(--mono);resize:vertical;border-radius:8px;padding:10px 12px;font-size:12px}.kle-textarea:focus{border-color:var(--accent);outline:none}.feedback-textarea{border:1px solid var(--border);background:var(--surface-2);width:100%;color:var(--text);font-family:var(--sans);resize:vertical;border-radius:8px;min-height:100px;padding:10px 12px;font-size:14px}.feedback-textarea:focus{border-color:var(--accent);outline:none}.feedback-list{max-height:350px;margin-bottom:16px;overflow-y:auto}.feedback-list:empty:before{content:"No submissions yet";color:var(--text-dim);text-align:center;padding:30px;font-size:13px;font-style:italic;display:block}.feedback-item{background:var(--surface-2);border-radius:10px;margin-bottom:10px;padding:12px 14px}.feedback-item-header{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.feedback-item-type{text-transform:uppercase;letter-spacing:.04em;border-radius:4px;padding:2px 7px;font-size:11px;font-weight:600}.feedback-item-type.bug{background:color-mix(in srgb, var(--bad) 20%, transparent);color:var(--bad)}.feedback-item-type.feature{background:color-mix(in srgb, var(--accent) 20%, transparent);color:var(--accent)}.feedback-item-type.comment{background:color-mix(in srgb, var(--text-dim) 20%, transparent);color:var(--text-dim)}.feedback-item-status{color:var(--text-dim);font-size:11px}.feedback-item-status.new{color:var(--warn)}.feedback-item-status.fixed,.feedback-item-status.implemented,.feedback-item-status.replied{color:var(--good)}.feedback-item-status.working-on-it,.feedback-item-status.planned,.feedback-item-status.considering{color:var(--accent)}.feedback-item-message{white-space:pre-wrap;word-break:break-word;font-size:13px}.feedback-item-date{color:var(--text-dim);margin-top:6px;font-size:11px}.modal-buttons{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button:disabled{opacity:.45;cursor:not-allowed}button.danger{background:var(--bad);color:#fff;border-color:var(--bad);opacity:.8}button.danger:hover{opacity:1}.kle-error{color:var(--bad);margin-top:12px;font-size:13px}.kle-error:empty{display:none}.teach-modal{max-width:550px}.teach-list{max-height:200px;margin-bottom:16px;overflow-y:auto}.teach-list:empty:before{content:"No combinations defined";color:var(--text-dim);font-size:13px;font-style:italic}.teach-item{background:var(--surface-2);border-radius:8px;align-items:center;gap:12px;margin-bottom:6px;padding:8px 12px;display:flex}.teach-item .char{font-size:18px;font-family:var(--mono);text-align:center;min-width:30px}.teach-item .combo{font-family:var(--mono);color:var(--text-dim);flex:1;font-size:13px}.teach-item .delete{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-size:16px}.teach-item .delete:hover{background:var(--bad);color:#fff}.teach-add{background:var(--bg);border-radius:10px;margin-bottom:16px;padding:16px}.teach-add h4{color:var(--text-dim);margin:0 0 12px;font-size:14px}.teach-form{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.teach-form label{flex-direction:column;gap:4px;display:flex}.teach-form label span{text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);font-size:11px}.teach-input{border:1px solid var(--border);background:var(--surface);width:60px;color:var(--text);font-family:var(--mono);text-align:center;border-radius:6px;padding:8px 10px;font-size:14px}.teach-input:focus{border-color:var(--accent);outline:none}.teach-select{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:6px;min-width:90px;padding:8px 10px;font-size:13px}.teach-select:focus{border-color:var(--accent);outline:none}.teach-unknown-list{background:var(--surface-2);border-radius:10px;flex-wrap:wrap;gap:8px;min-height:40px;margin-bottom:16px;padding:12px;display:flex}.teach-unknown-list:empty:before{content:"All characters known!";color:var(--good);font-size:13px}.teach-unknown-char{font-family:var(--mono);background:color-mix(in srgb, var(--warn) 20%, var(--bg));color:var(--warn);cursor:pointer;border:1px solid #0000;border-radius:6px;padding:6px 12px;font-size:16px;transition:all .15s}.teach-unknown-char:hover{border-color:var(--warn);background:color-mix(in srgb, var(--warn) 30%, var(--bg))}.teach-form-section{background:var(--bg);border-radius:10px;margin-bottom:16px;padding:16px}.teach-form-section h4{margin:0 0 12px;font-size:14px}.teach-target{font-family:var(--mono);color:var(--accent);font-size:20px}.teach-error{color:var(--bad);min-height:18px;margin-top:8px;font-size:12px}.teach-error:empty{display:none}.progress-card{margin-top:20px}.progress-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:12px;display:flex}.progress-toggle:hover{color:var(--accent)}.progress-summary{color:var(--text-dim);margin-left:auto;font-size:13px;font-weight:400}.toggle-icon{color:var(--text-dim);font-size:12px;transition:transform .2s}.progress-card.collapsed .toggle-icon{transform:rotate(-90deg)}.progress-card.collapsed .progress-body{display:none}.progress-body{margin-top:16px}.progress-stats{grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px;display:grid}@media (width<=600px){.progress-stats{grid-template-columns:repeat(2,1fr)}}.progress-grid{grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:24px;display:grid}@media (width<=900px){.progress-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=500px){.progress-grid{grid-template-columns:1fr}}.progress-section h3{text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);align-items:center;gap:8px;margin:0 0 10px;font-size:14px;display:flex}.progress-count{background:var(--surface-2);border-radius:10px;padding:2px 8px;font-size:12px}.progress-items{background:var(--surface-2);border-radius:10px;flex-wrap:wrap;gap:6px;min-height:40px;padding:12px;display:flex}.progress-items .item{font-family:var(--mono);background:var(--bg);border-radius:6px;padding:4px 8px;font-size:13px}.progress-items.mastered .item{background:color-mix(in srgb, var(--good) 20%, var(--bg));color:var(--good)}.progress-items.improving .item{background:color-mix(in srgb, var(--warn) 20%, var(--bg));color:var(--warn)}.progress-items.learning .item{background:color-mix(in srgb, var(--accent) 20%, var(--bg));color:var(--accent)}.progress-items.weak .item{background:color-mix(in srgb, var(--bad) 20%, var(--bg));color:var(--bad)}.progress-insights{grid-template-columns:1fr 1fr;gap:20px;margin-bottom:24px;display:grid}@media (width<=600px){.progress-insights{grid-template-columns:1fr}}.progress-insight{background:var(--surface-2);border-radius:10px;padding:16px}.progress-insight h4{text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);margin:0 0 12px;font-size:13px}.progress-insight .row{border-bottom:1px solid var(--border);justify-content:space-between;padding:6px 0;font-size:14px;display:flex}.progress-insight .row[data-tip]{cursor:help}.progress-insight .row:last-child{border-bottom:none}.progress-insight .item-name{font-family:var(--mono)}.progress-insight .item-stat{color:var(--text-dim)}.progress-insight .improved{color:var(--good)}.progress-insight .struggling{color:var(--bad)}.progress-insight:empty,.progress-insight div:empty{display:none}.settings-field{margin-bottom:14px;display:block}.settings-field span{color:var(--text);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.settings-input{border:1px solid var(--border);background:var(--surface-2);width:100%;color:var(--text);font-family:var(--mono);border-radius:8px;padding:10px 12px;font-size:13px}.settings-input:focus{border-color:var(--accent);outline:none}.password-wrapper{display:flex;position:relative}.password-wrapper .settings-input{padding-right:40px}.password-toggle{cursor:pointer;opacity:.6;background:0 0;border:none;padding:4px;font-size:16px;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.password-toggle:hover{opacity:1}.settings-checkbox{cursor:pointer;align-items:center;gap:10px;margin:16px 0;font-size:14px;display:flex}.settings-checkbox input{width:18px;height:18px}.settings-status{min-height:24px;padding:8px 0;font-size:13px}.settings-status.ok{color:var(--good)}.settings-status.error{color:var(--bad)}.settings-status.info{color:var(--accent)}.settings-register{flex-wrap:wrap;align-items:flex-end;gap:10px;margin-bottom:14px;display:flex}.settings-register .settings-field{flex:45%;min-width:120px;margin-bottom:0}.settings-auth-buttons{flex:0 0 100%;justify-content:flex-start;gap:8px;margin-top:4px;display:flex}.settings-auth-buttons button{white-space:nowrap;height:36px}.remote-sync-section{border-top:1px solid var(--border);margin-top:20px;padding-top:16px}.remote-sync-section h4{margin:0 0 8px;font-size:14px;font-weight:600}.remote-sync-desc{color:var(--text-dim);margin:0 0 14px;font-size:13px}.remote-sync-info{margin:0 0 12px;font-size:13px}.remote-sync-buttons{gap:8px;margin-top:12px;display:flex}.sync-progress{margin:12px 0}.sync-progress-text{color:var(--text-dim);margin-bottom:6px;font-size:12px}.sync-progress-bar{background:var(--surface-2);border-radius:3px;height:6px;overflow:hidden}.sync-progress-fill{background:var(--accent);border-radius:3px;width:0%;height:100%;transition:width .2s}.record-overlay{z-index:100;background:#000c;justify-content:center;align-items:center;display:none;position:fixed;inset:0}.record-overlay.active{display:flex}.record-panel{background:var(--surface);border-radius:16px;width:90%;max-width:700px;padding:28px;box-shadow:0 20px 60px #00000080}.record-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.record-header h2{margin:0;font-size:22px}.record-progress{color:var(--text-dim);font-size:14px;font-family:var(--mono)}.record-geometry{align-items:center;gap:10px;margin-bottom:12px;display:flex}.record-geometry label{color:var(--text-dim);font-size:13px}.record-geometry select{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;padding:6px 10px;font-size:13px}.record-instruction{color:var(--text-dim);margin:0 0 16px;font-size:14px}.record-board-wrap{justify-content:center;margin-bottom:16px;display:flex}.record-board{gap:3px;display:grid;position:relative}.record-key{background:var(--surface-2);border:2px solid var(--border);width:38px;height:38px;font-family:var(--mono);color:var(--text);border-radius:5px;justify-content:center;align-items:center;font-size:16px;transition:all .15s;display:flex;position:relative}.record-key.captured{background:color-mix(in srgb, var(--good) 15%, var(--surface-2));border-color:var(--good)}.record-key.captured.empty-key{background:color-mix(in srgb, var(--accent) 10%, var(--surface-2));border-color:var(--accent);color:var(--text-dim)}.record-key.current{background:var(--accent);border-color:var(--accent);color:#fff;animation:1s infinite pulse-key}.record-key.skipped{background:var(--surface-2);border-color:var(--border);color:var(--text-dim)}.record-key.skipped:after{content:"×";font-size:12px}@keyframes pulse-key{0%,to{box-shadow:0 0 #3b82f680}50%{box-shadow:0 0 0 8px #3b82f600}}.record-modifiers{background:var(--surface-2);border:1px dashed var(--border);border-radius:8px;flex-direction:column;gap:8px;margin-bottom:16px;padding:12px;display:flex}.record-modifier{justify-content:space-between;align-items:center;gap:12px;display:flex}.record-modifier-label{color:var(--text-dim);font-size:13px}.record-modifier-hint{color:var(--text-dim);margin-top:4px;font-size:12px;font-style:italic}.record-modifier .record-key{opacity:.4}.record-modifier .record-key.current,.record-modifier .record-key.captured,.record-modifier .record-key.skipped{opacity:1}.record-captured{background:var(--surface-2);border-radius:8px;flex-wrap:wrap;gap:6px;min-height:28px;margin-bottom:16px;padding:10px;display:flex}.record-captured span{font-family:var(--mono);background:var(--bg);border-radius:4px;padding:3px 8px;font-size:13px}.record-hint{color:var(--text-dim);text-align:center;margin-bottom:12px;font-size:12px}.record-hint kbd{background:var(--surface-2);font-family:var(--mono);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-size:11px}.record-warning{color:var(--warn);text-align:center;min-height:20px;margin-bottom:12px;font-size:13px}.record-buttons{justify-content:flex-end;gap:10px;display:flex}.record-name-row{gap:10px;margin-top:12px;display:flex}.record-name-input{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:8px;flex:1;padding:10px 14px;font-size:14px}.import-text-options{grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:14px;display:grid}@media (width<=500px){.import-text-options{grid-template-columns:1fr}}.import-textarea{border:1px solid var(--border);background:var(--surface-2);width:100%;color:var(--text);font-family:var(--mono);resize:vertical;border-radius:8px;min-height:120px;padding:12px;font-size:13px}.import-textarea:focus{border-color:var(--accent);outline:none}.import-preview{background:var(--surface-2);border-radius:8px;margin-top:16px;padding:12px}.import-preview h4{color:var(--text-dim);margin:0 0 10px;font-size:13px}.import-items{flex-wrap:wrap;gap:6px;display:flex}.import-item{font-family:var(--mono);background:var(--bg);border-radius:4px;align-items:center;gap:6px;padding:4px 10px;font-size:13px;display:flex}.import-item .freq{color:var(--text-dim);font-size:11px}.import-stats{color:var(--text-dim);margin:10px 0 0;font-size:12px}.wordlists-tabs{flex-wrap:wrap;gap:4px;margin-bottom:14px;display:flex}.wl-tab{border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:6px;padding:8px 14px;font-size:13px}.wl-tab:hover{background:var(--surface-2)}.wl-tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}.wordlists-items{max-height:300px;overflow-y:auto}.wl-item{background:var(--surface-2);border-radius:8px;align-items:center;gap:12px;margin-bottom:8px;padding:10px 12px;display:flex}.wl-item.system{opacity:.85}.wl-item .wl-icon{font-size:18px}.wl-item .wl-info{flex:1}.wl-item .wl-name{color:var(--text);font-size:14px;font-weight:500}.wl-item .wl-meta{color:var(--text-dim);font-size:12px}.wl-item .wl-actions{gap:6px;display:flex}.wl-item .wl-actions button{padding:4px 10px;font-size:12px}.wl-badge{text-transform:uppercase;border-radius:4px;margin-left:6px;padding:2px 6px;font-size:10px;display:inline-block}.wl-badge.system{background:var(--accent);color:#fff}.wl-badge.public{background:var(--good);color:#fff}.wordlist-viewer{border-top:1px solid var(--border);margin-top:16px;padding-top:16px}.wordlist-viewer-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.wordlist-viewer-header h4{color:var(--text);margin:0;font-size:14px;font-weight:600}.wordlist-viewer-header button{cursor:pointer;color:var(--text-dim);background:0 0;border:none;padding:0 4px;font-size:20px}.wordlist-viewer-header button:hover{color:var(--text)}.wordlist-viewer-items{flex-wrap:wrap;gap:6px;max-height:200px;display:flex;overflow-y:auto}.wordlist-viewer-item{font-family:var(--mono);background:var(--surface-2);color:var(--text);border-radius:6px;padding:4px 8px;font-size:12px}.wordlist-viewer-item .freq{color:var(--text-dim);margin-left:4px;font-size:10px}.wordlist-viewer-remove{cursor:pointer;color:var(--text-dim);background:0 0;border:none;padding:0 0 0 6px;font-size:13px;line-height:1}.wordlist-viewer-remove:hover{color:var(--bad)}.wordlist-viewer-remove:disabled{opacity:.5;cursor:default}.problem-words-section{border-bottom:1px solid var(--border);margin-bottom:16px;padding-bottom:16px}.problem-words-label{color:var(--text-dim);margin-bottom:6px;font-size:13px;display:block}.problem-words-input-row{gap:8px;display:flex}.problem-words-input{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:6px;flex:1;padding:8px 12px;font-size:14px}.problem-words-input:focus{border-color:var(--accent);outline:none}.problem-word-status{min-height:18px;margin-top:6px;font-size:12px}.problem-word-status.success{color:var(--good)}.problem-word-status.error{color:var(--bad)}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
