Very cool take on the theme. It took me quite a while to beat the (normal) CPU, eventually the strategy I used was to just copy whatever it was doing, and then play very obstinate 3-stack movements. There does seem to be a rather powerful strategy which is to just get a 3-stack onto the fourth row (from the enemy backline) by any means necessary. Once you're there, you just keep moving it around wherever it would pose a threat, and the CPU eventually repeats moves because it runs out of ways to block the threat. I'm not nearly good enough at the game to have any idea if this is just a flaw in the AI's depth algorithm, or if this strategy is actually kind of oppressive, but I am kind of curious where the rule that you lose on repeat comes from? This strategy forces the AI to lose, either by not blocking the threat or by making a repeat. If repeat was a draw this strategy would not work at all.
Actually... scratch all that I just said, I just tried again and maybe I was actually losing in these cases but just didn't notice? It does make sense that I would be the one repeating the move... maybe I thought the lose screen was appearing on the enemy's turn and that meant they lost? Not sure exactly what happened or what was going through my mind.
One nitpick: I often wanted to undo the move I was currently making, but accidentally undid the move before that. Part of the problem here is it is actually kind of hard to tell when your current move is finished.
I like the bottlecap sounds and aesthetics, they are quite satisfying to play with. Nice job!