:root{background:#0f0f0f;color:#f5f5f5}*{box-sizing:border-box;margin:0;padding:0}body{min-width:320px;background:#0f0f0f;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:inherit;text-decoration:none}::selection{background:#00d4aa47;color:#f5f5f5}:focus-visible{outline:2px solid #00d4aa;outline-offset:3px;border-radius:4px}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:8px}::-webkit-scrollbar-track{background:transparent}:root{color-scheme:dark;--font-display: "Fredoka", "Nunito", -apple-system, "Segoe UI", sans-serif;--font-ui: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "Azeret Mono", ui-monospace, "SF Mono", monospace;--bg-root: #101014;--bg-surface: #17171e;--bg-card: #1c1c24;--bg-hover: #25252f;--b-subtle: rgba(247, 243, 234, .07);--b-normal: rgba(247, 243, 234, .12);--t-primary: #f7f3ea;--t-secondary: #bcb6a8;--t-muted: #8f8a7d;--t-dim: #63605a;--accent: #2dd4a7;--accent-deep: #0a2e26;--accent-dim: rgba(45, 212, 167, .12);--sunny: #ffd166;--error: #ff7aa2;--error-dim: rgba(255, 122, 162, .12);--error-past: #ffb86c;--error-corrected: #c4a7ff;--r-small: 8px;--r-medium: 14px;--r-large: 22px;--r-pill: 999px;--ease: .16s ease;--spring: cubic-bezier(.34, 1.56, .64, 1);--drift: cubic-bezier(.22, 1, .36, 1);--shadow-card: 0 18px 50px rgba(0, 0, 0, .42), inset 0 1px 0 rgba(255, 255, 255, .05);--shadow-pop: 0 8px 24px rgba(0, 0, 0, .35);font-family:var(--font-ui);font-size:16px;line-height:1.55;color:var(--t-primary);background:var(--bg-root);text-rendering:optimizeLegibility}body{margin:0;padding:0;font-weight:500}button,select,input{font:inherit}button{cursor:pointer;border:none;background:none;color:inherit;padding:0}.app-shell{min-height:100dvh;display:flex;flex-direction:column;background:radial-gradient(900px 320px at 50% -120px,rgba(247,243,234,.045),transparent 70%),var(--bg-root);overflow-x:hidden}.loading-shell{height:100dvh;display:grid;place-items:center;background:var(--bg-root);font-family:var(--font-mono);color:var(--t-muted)}.loading-panel{font-family:var(--font-display);font-size:1.1rem;letter-spacing:.02em;color:var(--t-secondary);background:var(--bg-surface);border:1px solid var(--b-normal);border-radius:var(--r-pill);padding:.7rem 1.4rem;animation:bob 1.6s ease-in-out infinite}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.workspace{flex:1;display:flex;flex-direction:column;align-items:center;padding:1.75rem 1.5rem 3rem;width:100%;max-width:60rem;margin:0 auto}.brand-row{width:100%;display:flex;align-items:center;gap:.8rem;margin-bottom:1.6rem}.brand-mark{width:2.4rem;height:2.4rem;border-radius:.8rem;display:grid;place-items:center;font-family:var(--font-display);font-weight:600;font-size:1.25rem;line-height:1;color:var(--t-primary);background:var(--bg-surface);border:1px solid var(--b-normal);-webkit-user-select:none;user-select:none}.brand-word{font-family:var(--font-display);font-weight:600;font-size:1.15rem;letter-spacing:.01em;line-height:1.1}.brand-word small{display:block;font-family:var(--font-ui);font-weight:700;font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--t-muted);margin-top:.15rem}.brand-stats{margin-left:auto;font-family:var(--font-mono);font-size:.72rem;color:var(--t-muted);background:#f7f3ea0a;border:1px solid var(--b-subtle);border-radius:var(--r-pill);padding:.35rem .8rem;white-space:nowrap;font-variant-numeric:tabular-nums}.brand-stats strong{color:var(--t-primary);font-weight:600}.typing-container{width:100%;display:flex;flex-direction:column;align-items:center;perspective:1400px}.control-stack{display:flex;flex-direction:column;align-items:center;gap:.6rem;margin-bottom:1.4rem;width:100%}.control-row{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.3rem;padding:.3rem;border:1px solid var(--b-normal);border-radius:var(--r-pill);background:linear-gradient(180deg,#ffffff0e,#ffffff05),#17171eb8;box-shadow:inset 0 1px #ffffff0d;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.control-row--actions{border-color:var(--b-subtle);background:transparent;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;gap:.15rem}.control-row--actions .btn--minimal{min-height:1.9rem;padding:.4rem .7rem;font-size:.78rem;color:var(--t-muted)}.practice-surface{position:relative;width:100%;padding:0;outline:none;contain:layout;cursor:text;overflow:hidden;border:none;border-radius:var(--r-large);background:linear-gradient(180deg,#131318,#0a0a0d 60%,#08080a);box-shadow:inset 0 24px 60px #000000a6,inset 0 2px 10px #000c,0 50px 100px -20px #000000e6,0 18px 36px #0009;transform:rotateX(2.5deg) translateY(0) scale(.995);transform-origin:center top;transition:transform .45s var(--drift),box-shadow .45s var(--drift)}.practice-surface:after{content:"";position:absolute;inset:auto 8% -28px;height:56px;background:radial-gradient(50% 100% at 50% 0%,rgba(0,0,0,.75),transparent 70%);filter:blur(12px);pointer-events:none}.practice-surface--focused{border:none;background:linear-gradient(180deg,#131318,#0a0a0d 60%,#08080a);box-shadow:inset 0 18px 50px #0009,inset 0 2px 8px #000000bf,0 60px 120px -20px #000000f2,0 24px 48px #000000a6;transform:rotateX(0) translateY(-3px) scale(1)}.practice-surface--idle:hover{border:none;box-shadow:inset 0 24px 60px #000000a6,inset 0 2px 10px #000c,0 55px 110px -20px #000000eb,0 20px 40px #0000009e;transform:rotateX(1.2deg) translateY(-2px) scale(.998)}.practice-surface:focus-visible{outline:none}.practice-text-stage{width:100%;min-height:clamp(15rem,38vh,21rem);display:grid;place-items:center;position:relative;padding:clamp(1.5rem,4vw,2.75rem) clamp(1.25rem,4vw,2.5rem)}.practice-text-layer{width:100%;min-height:inherit;display:grid;place-items:center;position:relative;z-index:1;transition:filter .18s ease,opacity .18s ease,transform .24s var(--drift)}.practice-text-layer--blurred{filter:blur(7px);opacity:.35;transform:scale(.988)}.practice-text{width:min(100%,40rem);font-family:var(--font-mono);font-size:clamp(1.45rem,3vw,2rem);line-height:1.75;letter-spacing:.01em;color:var(--t-dim);-webkit-user-select:none;user-select:none;word-wrap:break-word;text-align:center;max-width:100%;transition:color var(--ease);display:flex;flex-wrap:wrap;justify-content:center;align-content:center;row-gap:.6rem;margin:0 auto}.practice-text__word{display:inline-flex;white-space:pre}.practice-text__char{position:relative;display:inline-block;transition:color .1s ease;min-height:1.2em;vertical-align:baseline}.practice-text__char--done{color:var(--t-primary)}.practice-text__char--current{color:var(--accent)}.practice-text__char--current:after{content:"";position:absolute;bottom:-6px;left:6%;width:88%;height:3px;border-radius:999px;background:var(--accent)}.practice-text__char--error-current{color:var(--error)}.practice-text__char--error-current:after{background:var(--error)}.practice-text__char--error-past{color:var(--error-past)}.practice-text__char--error-corrected{color:var(--error-corrected)}.practice-text__char--space{min-width:.55em}.practice-focus-hint{position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%);z-index:2;text-align:center;pointer-events:none}.practice-focus-hint strong{display:inline-block;font-family:var(--font-display);font-weight:500;font-size:.95rem;letter-spacing:.01em;color:var(--t-secondary);background:#17171eeb;border:1px solid var(--b-normal);border-radius:var(--r-pill);padding:.6rem 1.2rem;white-space:nowrap}.live-metrics{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1.1rem;margin-top:1.1rem;justify-content:center;font-variant-numeric:tabular-nums}.live-metrics .metric-item{background:#f7f3ea0b;border:1px solid var(--b-subtle);border-radius:var(--r-pill);padding:.42rem .9rem .42rem .75rem;font-family:var(--font-mono);font-size:.85rem}.live-metrics .metric-item span{font-family:var(--font-display);font-weight:500;font-size:.72rem;letter-spacing:.08em;text-transform:lowercase;color:var(--t-muted)}.live-metrics .metric-item strong{font-size:.92rem}.metric-item{display:flex;align-items:baseline;gap:.45rem}.metric-item span{color:var(--t-muted);font-size:.8rem}.metric-item strong{color:var(--t-primary);font-weight:600;font-variant-numeric:tabular-nums}.metric--met{color:var(--accent)!important}.metric--unmet{color:var(--t-secondary)!important}.unlock-progress-container{display:flex;flex-direction:column;align-items:center;gap:.6rem;margin-top:1.25rem;contain:layout;width:100%}.unlock-progress-strip{display:flex;font-family:var(--font-mono);font-size:.88rem;color:var(--t-muted);align-items:center;justify-content:center;gap:clamp(.7rem,2.5vw,1.4rem);width:100%;min-height:1.75rem;flex-wrap:wrap}.unlock-progress-strip__core{display:flex;align-items:center;justify-content:center;gap:.55rem;flex-wrap:wrap}.unlock-progress-strip__title{position:relative;text-transform:uppercase;letter-spacing:.14em;font-size:.66rem;font-weight:800;font-family:var(--font-ui);color:var(--t-muted);min-height:1em;min-width:17ch;margin-bottom:.15rem;text-align:center}.unlock-progress-strip__title-text{position:absolute;inset:0;white-space:nowrap;text-align:center;opacity:1;transform:translateY(0);transition:opacity .22s ease,transform .28s var(--drift)}.unlock-progress-strip__title-text--hidden{opacity:0;transform:translateY(.35rem)}.unlock-target-chip{min-height:2.4rem;padding:.45rem .9rem;border:1px solid transparent;border-radius:var(--r-pill);background:#f7f3ea0a;transition:border-color var(--ease),background var(--ease),transform .2s var(--spring)}button.unlock-target-chip:hover,button.unlock-target-chip:focus-visible{outline:none;border-color:#f7f3ea24;background:#f7f3ea12;transform:translateY(-1px)}button.unlock-target-chip:focus-visible{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:2px}.unlock-target-chip--editing{border-color:#2dd4a773;background:#2dd4a714}.unlock-target-editor{display:inline-flex;align-items:baseline;gap:.12rem}.unlock-target-editor strong{white-space:nowrap}.unlock-target-editor__input{width:4ch;padding:0;border:none;border-bottom:2px solid rgba(45,212,167,.55);border-radius:0;background:transparent;color:var(--t-primary);font-family:inherit;font-size:inherit;font-weight:600;line-height:1;text-align:left;outline:none;appearance:textfield}.unlock-target-editor__input::-webkit-outer-spin-button,.unlock-target-editor__input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.unlock-target-editor__input--error{border-bottom-color:var(--error);color:var(--error)}.unlock-target-editor__suffix{color:var(--t-secondary)}.unlock-progress-strip__hint{min-height:.95rem;font-family:var(--font-mono);font-size:.72rem;color:var(--t-secondary);text-align:center}.unlock-progress-strip__hint--error{color:var(--error)}.free-mode-panel{display:flex;align-items:center;gap:.9rem;padding:.7rem 1.1rem;border:1px dashed rgba(247,243,234,.16);border-radius:var(--r-pill);background:transparent;font-family:var(--font-mono);color:var(--t-secondary);flex-wrap:wrap;justify-content:center}.free-mode-panel__copy{margin:0;color:var(--t-muted);font-size:.76rem;font-family:var(--font-ui)}.metric-item--next-letter{white-space:nowrap;background:transparent;border:1px solid var(--b-normal);border-radius:var(--r-pill);padding:.45rem .9rem;transition:opacity .18s ease,transform .32s var(--drift)}.metric-item--next-letter span{color:var(--t-muted)}.metric-item--next-letter strong{color:var(--t-primary)}.metric-item--next-letter-hidden{opacity:0;transform:translate3d(.8rem,0,0);pointer-events:none}@media(prefers-reduced-motion:reduce){.practice-text{transition:color var(--ease)}.practice-surface,.practice-text-layer,.unlock-progress-strip__core,.unlock-progress-strip__title-text,.metric-item--next-letter,.unlock-target-chip,.loading-panel,.practice-focus-hint strong,.practice-text__char--current:after{transition:none;animation:none}.practice-surface,.practice-surface--focused,.practice-surface--idle:hover{transform:none}}@media(max-width:760px){.unlock-progress-strip{gap:.6rem}.unlock-progress-strip__core{flex-wrap:wrap;gap:.5rem}.metric-item--next-letter{justify-self:center}.free-mode-panel{border-radius:1rem}.brand-stats{display:none}}@supports (view-transition-name: none){.practice-surface{view-transition-name:practice-surface}.unlock-progress-container{view-transition-name:progress-strip}::view-transition-old(practice-surface),::view-transition-new(practice-surface),::view-transition-old(progress-strip),::view-transition-new(progress-strip){animation-duration:.42s;animation-timing-function:var(--drift)}::view-transition-old(practice-surface),::view-transition-old(progress-strip){animation-name:content-fade-out}::view-transition-new(practice-surface),::view-transition-new(progress-strip){animation-name:content-fade-in}@keyframes content-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-.4rem)}}@keyframes content-fade-in{0%{opacity:0;transform:translateY(.65rem)}to{opacity:1;transform:translateY(0)}}}.secondary-info{width:100%;margin-top:2.25rem;display:flex;flex-direction:column;align-items:stretch;gap:1.1rem;border-top:1px dashed var(--b-normal);padding-top:1.75rem}.info-section-title{font-family:var(--font-display);font-size:.95rem;font-weight:600;letter-spacing:.01em;text-transform:none;color:var(--t-primary);margin-bottom:0}.info-section-sub{font-size:.78rem;color:var(--t-muted);margin:.25rem 0 0}.session-history,.kbd,.ehm{background:linear-gradient(180deg,#ffffff09,#ffffff03),var(--bg-surface);border:1px solid var(--b-subtle);border-radius:var(--r-large);box-shadow:var(--shadow-card);padding:1.6rem 1.6rem 1.75rem}.session-history{display:flex;flex-direction:column;gap:1rem}.session-history__header{display:flex;align-items:center;justify-content:space-between;gap:1rem}.session-history__list{display:flex;flex-direction:column;gap:.5rem}.progress-section{display:flex;flex-direction:column;gap:3rem}.unlock-bars{display:grid;gap:1.5rem}.progress-meter{display:grid;gap:.5rem}.progress-meter__header{display:flex;align-items:baseline;flex-wrap:wrap;gap:.5rem 1rem;justify-content:space-between;font-size:.8rem;color:var(--t-secondary)}.progress-meter__text{font-family:var(--font-mono);color:var(--t-muted)}.progress-meter__track{height:2px;background:var(--b-subtle);border-radius:1px;overflow:hidden}.progress-meter__value{height:100%;background:var(--accent);transition:width .3s ease}.sessions-list{display:flex;flex-direction:column;gap:.7rem}.sessions-group{width:min(100%,52rem);margin:0 auto}.session-row{display:grid;grid-template-columns:.9fr .7fr 1fr 1fr auto;gap:1rem;align-items:center;padding:.7rem 1rem;border-radius:var(--r-small);border:1px solid transparent;background:#f7f3ea08;font-size:.85rem;color:var(--t-secondary);transition:background var(--ease),transform var(--ease),border-color var(--ease)}.session-row:hover{background:#f7f3ea0e;border-color:var(--b-subtle);transform:translateY(-1px)}.session-row__cell{min-width:0;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-row__mode,.session-row__detail,.session-row__stat,.session-row__time{text-align:left}.session-row__mode{color:var(--t-primary);font-weight:700;font-size:.76rem;text-transform:capitalize;font-family:var(--font-display);letter-spacing:.02em}.session-row__detail{color:var(--t-primary);font-family:var(--font-mono);font-weight:600}.session-row__stat{color:#c9c3b6;font-family:var(--font-mono);font-size:.8rem}.session-row__time{color:var(--t-muted);font-size:.78rem}.session-row--empty{color:var(--t-muted);font-size:.85rem;padding:1rem 0}.empty-state{color:var(--t-muted);font-size:.85rem;font-family:var(--font-ui);background:#f7f3ea08;border:1px dashed var(--b-normal);border-radius:var(--r-medium);padding:1.1rem;text-align:center}@media(max-width:760px){.session-row{grid-template-columns:1fr 1fr auto;gap:.6rem .9rem}.session-row__stat:nth-child(4),.session-row__time{display:none}}.kbd{display:flex;flex-direction:column;align-items:center;gap:1.6rem;width:100%;margin:0 auto}.kbd__header{display:flex;flex-direction:column;align-items:center;gap:.25rem;text-align:center}.kbd__board{display:flex;flex-direction:column;align-items:center;gap:.55rem}.kbd__row{display:flex;gap:.55rem}.kbd__key{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:3.9rem;height:3.9rem;border-radius:1rem;border:1px solid rgba(247,243,234,.1);background:#202028;font-family:var(--font-mono);cursor:pointer;-webkit-user-select:none;user-select:none;transition:border-color .15s ease,transform .15s var(--spring),background .15s ease}.kbd__key:hover{transform:translateY(-2px);border-color:#f7f3ea40}.kbd__key:active{transform:translateY(0) scale(.98)}.kbd__key:focus-visible{outline:2px solid var(--t-primary);outline-offset:3px}.kbd__letter{font-family:var(--font-display);font-size:1.35rem;font-weight:600;line-height:1;color:var(--t-muted);transition:color .15s ease}.kbd__key--locked{background:#141419;border-color:#f7f3ea0f}.kbd__key--locked .kbd__letter{color:#f7f3ea52}.kbd__key--unlocked{border-color:#f7f3ea2e;background:#24242c}.kbd__key--unlocked .kbd__letter{color:var(--t-primary)}.kbd__key--mastered{border-color:var(--t-primary);background:var(--t-primary)}.kbd__key--mastered .kbd__letter{color:#101014}.kbd__key--active{border-color:var(--accent)}.kbd__key--active .kbd__letter{color:var(--accent)}.kbd__legend{display:flex;justify-content:center;align-items:center;gap:1.25rem;flex-wrap:wrap}.kbd__legend-item{display:inline-flex;align-items:center;gap:.5rem;color:var(--t-muted);font-size:.7rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.kbd__legend-item--hint{color:var(--t-dim);text-transform:none;font-size:.72rem;letter-spacing:.01em;font-weight:600;background:#f7f3ea0a;border:1px solid var(--b-subtle);padding:.3rem .7rem;border-radius:var(--r-pill)}.kbd__dot{display:none}@media(max-width:1200px){.kbd__key{width:3.5rem;height:3.5rem;border-radius:.9rem}.kbd__letter{font-size:1.2rem}}@media(max-width:800px){.kbd__key{width:2.9rem;height:2.9rem;border-radius:.75rem}.kbd__letter{font-size:1.05rem}.kbd__row,.kbd__board{gap:.4rem}}@media(max-width:600px){.kbd__key{width:2.5rem;height:2.5rem;border-radius:.65rem}.kbd__letter{font-size:.95rem}.kbd__legend-item--hint{display:none}.session-history,.kbd,.ehm{padding:1.2rem 1rem 1.35rem;border-radius:1.1rem}}.btn{padding:.4rem .8rem;font-family:var(--font-display);font-size:.86rem;font-weight:500;letter-spacing:.01em;border-radius:var(--r-pill);transition:all var(--ease);color:var(--t-secondary)}.btn:hover{background:var(--bg-hover);color:var(--t-primary)}.btn--active{color:var(--accent)}.btn--minimal{min-height:2.2rem;padding:.55rem 1rem;border:1px solid transparent;border-radius:var(--r-pill);background:transparent;line-height:1;letter-spacing:.01em;transition:background var(--ease),color var(--ease),border-color var(--ease),transform .18s var(--spring),box-shadow var(--ease)}.btn--minimal:hover{border-color:#f7f3ea1f;background:#f7f3ea0f;color:var(--t-primary);transform:translateY(-1px)}.btn--minimal:active{transform:translateY(0) scale(.98)}.btn--minimal.btn--active{color:#06281f;border-color:transparent;background:var(--accent);font-weight:600}.btn--minimal:focus-visible{outline:2px solid var(--t-primary);outline-offset:2px;border-color:var(--b-normal)}.btn--danger{color:var(--t-muted)}.btn--danger:hover,.btn--danger:focus-visible{border-color:#ff7aa259;background:#ff7aa21a;color:var(--error)}.target-select{display:flex;align-items:center;gap:.5rem;min-height:2.2rem;padding:.2rem .3rem .2rem .8rem;border:1px solid var(--b-normal);border-radius:var(--r-pill);background:#f7f3ea08;font-size:.78rem;color:var(--t-muted)}.target-select span{font-family:var(--font-display);font-size:.7rem;font-weight:500;letter-spacing:.1em;text-transform:lowercase;color:var(--t-muted)}.target-select select{min-height:1.85rem;background:#10101499;border:1px solid rgba(247,243,234,.1);border-radius:var(--r-pill);color:var(--t-primary);font-family:var(--font-mono);font-weight:600;padding:.25rem .7rem .25rem .6rem;outline:none;cursor:pointer}.target-select select:focus{border-color:#2dd4a780}.target-select:focus-within{border-color:var(--t-muted)}.ehm{display:flex;flex-direction:column;align-items:center;gap:1.4rem;width:100%}.ehm__header{display:flex;flex-direction:column;align-items:center;gap:.45rem;text-align:center}.ehm__header .info-section-title{margin-bottom:0}.ehm__header-meta{display:flex;align-items:center;gap:.6rem}.ehm__session-count{font-family:var(--font-mono);font-size:.68rem;color:var(--t-muted);letter-spacing:.04em;background:#f7f3ea0a;border:1px solid var(--b-subtle);padding:.2rem .65rem;border-radius:var(--r-pill)}.ehm__reset-btn{font-family:var(--font-mono);font-size:.62rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--t-dim);background:transparent;border:1px solid rgba(247,243,234,.12);border-radius:.45rem;padding:.25rem .6rem;cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease}.ehm__reset-btn:hover{color:var(--error);border-color:#ff7aa266;background:#ff7aa214}.ehm__empty{color:var(--t-muted);font-size:.85rem;font-family:var(--font-ui);padding:2rem 1rem;text-align:center;background:#f7f3ea06;border:1px dashed var(--b-normal);border-radius:var(--r-medium);width:100%}.ehm__board{display:flex;flex-direction:column;align-items:flex-start;gap:.45rem;background:#00000038;border:1px solid var(--b-subtle);border-radius:var(--r-medium);padding:1rem 1.1rem}.ehm__row{display:flex;gap:.45rem}.ehm__key{position:relative;display:flex;align-items:center;justify-content:center;width:3.4rem;height:3.4rem;border-radius:.8rem;border:1.5px solid rgba(247,243,234,.08);background:#202028;font-family:var(--font-mono);cursor:default;-webkit-user-select:none;user-select:none;overflow:hidden;transition:transform .15s var(--spring),border-color .2s ease}.ehm__key:hover,.ehm__key--active{transform:translateY(-2px)}.ehm__key--no-data{opacity:.32}.ehm__key--no-data:hover{transform:none;box-shadow:none}.ehm__key--clickable{cursor:pointer}.ehm__key--clickable:active{transform:translateY(0) scale(.97);transition-duration:60ms}.ehm__key--confirm-target{border-color:#ff7aa299!important}.ehm__letter{font-family:var(--font-display);font-size:1.05rem;font-weight:600;line-height:1;color:var(--t-primary)}.ehm__key--no-data .ehm__letter{color:var(--t-dim);font-weight:500}.ehm__detail-container{min-height:6.5rem;width:min(100%,22rem);display:flex;align-items:flex-start;justify-content:center}.ehm__detail{width:100%;padding:1rem 1.2rem;border:1px solid var(--b-normal);border-radius:var(--r-medium);background:var(--bg-card);font-family:var(--font-mono);animation:ehm-fade-in .14s var(--drift);box-shadow:var(--shadow-pop)}.ehm__detail--placeholder{border-style:dashed;border-color:var(--b-normal);background:transparent;color:var(--t-muted);text-align:center;padding:1.4rem 1.2rem;font-size:.74rem;font-family:var(--font-ui);letter-spacing:.01em;box-shadow:none}@keyframes ehm-fade-in{0%{opacity:0;transform:translateY(4px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}.ehm__confirm{width:100%;padding:1rem 1.2rem;border:1px solid rgba(255,122,162,.35);border-radius:var(--r-medium);background:var(--bg-card);font-family:var(--font-mono);animation:ehm-fade-in .12s ease;display:flex;align-items:center;justify-content:space-between;gap:1rem}.ehm__confirm-text{font-size:.78rem;color:var(--t-muted);letter-spacing:.02em}.ehm__confirm-actions{display:flex;gap:.5rem;flex-shrink:0}.ehm__confirm-btn{font-family:var(--font-display);font-size:.72rem;font-weight:600;letter-spacing:.05em;text-transform:lowercase;border-radius:var(--r-pill);padding:.35rem .9rem;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .15s var(--spring)}.ehm__confirm-btn:hover{transform:translateY(-1px)}.ehm__confirm-btn--yes{background:#ff7aa224;border:1px solid rgba(255,122,162,.45);color:var(--error)}.ehm__confirm-btn--yes:hover{background:#ff7aa23d;border-color:#ff7aa2b3}.ehm__confirm-btn--no{background:transparent;border:1px solid rgba(247,243,234,.12);color:var(--t-muted)}.ehm__confirm-btn--no:hover{background:#f7f3ea0f;border-color:#f7f3ea38;color:var(--t-secondary)}.ehm__detail-header{display:flex;align-items:baseline;gap:.5rem;margin-bottom:.85rem}.ehm__detail-letter{font-family:var(--font-display);font-size:1.2rem;font-weight:600;color:var(--t-primary);line-height:1}.ehm__detail-rate{font-size:.82rem;font-weight:600;color:var(--error);line-height:1}.ehm__detail-summary{color:var(--t-muted);font-size:.68rem;line-height:1;margin-left:auto}.ehm__confusions{display:flex;flex-direction:column;gap:.45rem}.ehm__confusions-label{font-family:var(--font-ui);font-size:.62rem;color:var(--t-dim);text-transform:uppercase;letter-spacing:.12em;font-weight:800;margin-bottom:.1rem}.ehm__confusion-row{display:grid;grid-template-columns:2.4rem 1fr 2.2rem;align-items:center;gap:.7rem;height:1.2rem}.ehm__confusion-key{font-weight:700;font-size:.78rem;color:var(--t-primary)}.ehm__confusion-bar-track{height:4px;background:#f7f3ea14;border-radius:999px;overflow:hidden}.ehm__confusion-bar{height:100%;background:var(--t-secondary);border-radius:999px;min-width:4px}.ehm__confusion-count{text-align:right;color:var(--t-muted);font-size:.65rem;font-variant-numeric:tabular-nums}.ehm__legend{display:flex;align-items:center;justify-content:center;gap:1.1rem;flex-wrap:wrap}.ehm__legend-item{display:flex;align-items:center;gap:.45rem}.ehm__legend-dot{display:none}.ehm__legend-label{font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--t-muted)}.ehm__legend-sep{color:var(--t-dim);-webkit-user-select:none;user-select:none}@media(max-width:1200px){.ehm__key{width:3rem;height:3rem;border-radius:.7rem}.ehm__letter{font-size:.95rem}.ehm__row{gap:.4rem}.ehm__board{gap:.4rem;padding:.85rem .9rem}}@media(max-width:800px){.ehm__key{width:2.4rem;height:2.4rem;border-radius:.55rem}.ehm__letter{font-size:.82rem}.ehm__row{gap:.3rem}.ehm__board{gap:.3rem;padding:.7rem}}@media(prefers-reduced-motion:reduce){.ehm__key{transition:none}.ehm__detail,.kbd__key--active{animation:none}}.focus-badge{font-size:.7rem;font-family:var(--font-mono);color:var(--t-muted)}.footer{width:100%;max-width:60rem;margin:0 auto;padding:1.5rem 1.5rem 2rem;border-top:1px dashed var(--b-normal);text-align:center;font-family:var(--font-mono);font-size:.72rem;color:var(--t-muted);letter-spacing:.02em}.footer a{color:var(--t-secondary);text-decoration:none;border-radius:4px;transition:color var(--ease)}.footer a:hover{color:var(--accent)}.footer__separator{margin:0 .6rem;color:var(--t-dim);-webkit-user-select:none;user-select:none}.mobile-overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center;background:var(--bg-root);z-index:9999;font-family:var(--font-display);font-size:1.3rem;color:var(--t-secondary);padding:2rem}@media(min-width:801px){.mobile-overlay{display:none}}@media(max-width:800px){.secondary-info{gap:1rem}.workspace{padding:1.25rem 1rem 2.5rem}.practice-text-stage{min-height:13rem}}
