ase();
          let target = state.words.find(w => w.id === state.targetId);
          if (target && target.text.toLowerCase().startsWith(next)) {
            state.buffer = next;
            state.correctChars++;
            target.typed = next.length;
            if (target.typed >= target.text.length) completeWord(target);
            updateHUD();
            return;
          }
          let candidate = null, bestY = -Infinity;
          for (const w of state.words) {
            if (w.text.toLowerCase