not sure what the right game experience would be for that. a notif that says "You can still solve more words but you'll never solve them all!" doesn't quite work here, because it's sort of saying "there's only one _right_ way to win, but good luck figuring out the right order". Still, it would be better than me finding that out at the very end.
it would probably be pretty important to design levels so that the unwinnable states can't happen early in the game, but it's getting a little abstract to think about at this point. sort of brings me back to that unblock it game from the old ipod touch days.
I actually never came across the situation where my grid was unsolvable. As I was playing I was wondering what kind of algorithm you used to come up with grids that have no possible dead ends. Since this is clearly an issue, I wonder if it's possible to come up with puzzles that always have a solution similar to how the algorithm for creating Sudoku puzzles always guarantees it can be solved without guessing.
Also, the site worked for me in Chrome but doesn't work in Firefox (145.0.2). Do `window.cookieManager = ...` (or even `var cookieManager = ...`) instead of `const cookieManager = ...`. This goes for all variables in the global lexical scope you intend to share across source files.
I didn't like that it's possible to leave the underlying word unchanged by dragging the word containing a letter twice to the second occurence.
The only thing that felt a bit weird was being able to change the word to the same word, if the slid word had the same letter twice.