.ts-surface{position:relative;width:100%;unicode-bidi:plaintext;text-align:start;font-family:var(--font-estedad),system-ui,sans-serif;font-size:clamp(1.3rem,2.2vw,2.05rem);line-height:2.1;letter-spacing:0;word-spacing:.35ch;max-height:100%;height:calc(2.1em * 3);overflow:hidden}.ts-track{position:relative;will-change:transform;transition:transform .25s var(--ease)}.ts-surface .ch{position:relative;color:var(--faint);transition:color .12s var(--ease)}.ts-surface .ch.correct{color:var(--syn-str);animation:chPop 90ms var(--ease)}.ts-surface .ch.active{color:var(--fg)}.ts-surface .ch.error{color:color-mix(in oklch,var(--err) 90%,var(--fg))}.ts-surface .ch.active.flash{animation:chShake .12s var(--ease)}.ts-surface .ch.zwnj:after{content:"⌷";color:var(--faint);opacity:.55;font-size:.7em;vertical-align:.06em}.ts-surface .ch.zwnj.correct:after{color:var(--syn-str);opacity:.8}.ts-surface .ch.zwnj.active:after{color:var(--acc-1);opacity:1}@keyframes chPop{50%{transform:scale(1.14)}}@keyframes chShake{25%{transform:translateX(2px)}75%{transform:translateX(-2px)}}.ts-surface .ch-ghost{position:absolute;top:-.7em;right:0;font-size:.55em;font-family:var(--font-jetbrains);color:var(--mut);pointer-events:none;animation:ghostFade .9s var(--ease) forwards}@keyframes ghostFade{0%{opacity:0;transform:translateY(4px)}20%{opacity:.95;transform:translateY(0)}to{opacity:0}}.ts-caret{position:absolute;top:0;left:0;width:2px;height:1.15em;border-radius:2px;background:linear-gradient(180deg,var(--acc-1),var(--acc-2));box-shadow:0 0 10px var(--acc-glow);transition:transform .09s var(--ease);animation:caretBreathe 1.4s var(--ease) infinite;pointer-events:none}.ts-caret.err{background:var(--err);box-shadow:0 0 10px color-mix(in oklch,var(--err) 60%,transparent)}@keyframes caretBreathe{50%{opacity:.45}}.ts-placeholder{position:absolute;inset:0;display:grid;place-items:center;color:var(--faint);font-size:1rem;font-weight:700;pointer-events:none;animation:phPulse 1.8s var(--ease) infinite}@keyframes phPulse{50%{opacity:.5}}.vkbd .key{transition:opacity .3s var(--ease)}.vkbd .key .cap{fill:var(--panel-2);stroke:var(--line);stroke-width:1;transition:fill .1s var(--ease),stroke .1s var(--ease)}.vkbd .key .band{fill:var(--kf);opacity:.34}.vkbd .key .glyph{fill:var(--fg);font-size:22px;font-weight:600}.vkbd .key .glyph,.vkbd .key .shift{font-family:var(--font-estedad),sans-serif}.vkbd .key .shift{fill:var(--faint);font-size:12px}.vkbd .key .bump{fill:var(--mut)}.vkbd .key.home .cap{stroke:color-mix(in oklch,var(--acc-1) 55%,var(--line));stroke-width:1.5}.vkbd .key .halo{fill:none;stroke:var(--kf);stroke-width:2;opacity:0;transform-box:fill-box;transform-origin:center}.vkbd .key.dim{opacity:.3}.vkbd .key.next .cap{fill:color-mix(in oklch,var(--kf) 22%,var(--panel-2));stroke:var(--kf);stroke-width:2.5;filter:drop-shadow(0 0 9px var(--kf))}.vkbd .key.next .band{opacity:.9}.vkbd .key.next .glyph{fill:var(--fg);font-weight:800}.vkbd .key.next .halo{animation:keyPulse 1.3s var(--ease) infinite}@keyframes keyPulse{0%{opacity:.55;transform:scale(1)}70%{opacity:0;transform:scale(1.14)}to{opacity:0}}.vkbd .key.down{transform:translateY(2px)}.vkbd .key.down.correct .cap{fill:color-mix(in oklch,var(--syn-str) 30%,var(--panel-2));stroke:var(--syn-str)}.vkbd .key.down.wrong .cap{fill:color-mix(in oklch,var(--err) 30%,var(--panel-2));stroke:var(--err)}.vkbd .key.down.wrong{animation:keyShake .1s var(--ease)}@keyframes keyShake{25%{transform:translate(2px,2px)}75%{transform:translate(-2px,2px)}}.theme-scope-light .vkbd .key.next .cap,body.theme-light .vkbd .key.next .cap{filter:drop-shadow(0 0 5px var(--kf))}.finger-guide .ft .bone,.finger-guide .palm{fill:var(--panel-2);stroke:var(--line);stroke-width:1.5}.finger-guide .ft .bone{transition:transform .2s var(--ease)}.finger-guide .ft .tip{fill:var(--kf);opacity:.4;transition:opacity .2s var(--ease),transform .2s var(--ease)}.finger-guide .ft .ft-halo{fill:none;stroke:var(--kf);stroke-width:2;transform-box:fill-box;transform-origin:center;animation:keyPulse 1.3s var(--ease) infinite}.finger-guide .ft.active .tip{opacity:1;transform:translateY(-6px)}.finger-guide .ft.active .bone{transform:translateY(-3px)}.finger-guide .ft:not(.active) .tip{opacity:.22}.finger-guide .fg-label{text-align:center;margin-top:4px;min-height:1.2em;font-size:.82rem;font-weight:700;color:var(--mut);opacity:0;transition:opacity .2s var(--ease)}.finger-guide .fg-label.show{opacity:1}