* {
  -webkit-tap-highlight-color: transparent;
  box-sizing: border-box;
}
button { touch-action: manipulation; }
body {
  height: 100vh; height: 100dvh;
  padding-top: env(safe-area-inset-top);
  overflow-x: hidden; overscroll-behavior: none;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

/* Shake (invalid guess) */
.shake { animation: shake 0.4s ease-in-out; }
@keyframes shake {
  0%,100%{ transform:translateX(0); }
  20%,60%{ transform:translateX(-5px); }
  40%,80%{ transform:translateX(5px); }
}

/* Row sliding in after submit */
.row-reveal { animation: rowReveal 0.3s cubic-bezier(0.34,1.56,0.64,1) both; }
@keyframes rowReveal {
  from { transform:scaleY(0.8) translateY(-8px); opacity:0; }
  to   { transform:scaleY(1)   translateY(0);    opacity:1; }
}

/* Tile locking when a column becomes exact */
.tile-lock { animation: tileLock 0.35s cubic-bezier(0.34,1.56,0.64,1) both; }
@keyframes tileLock {
  0%  { transform:scale(1); }
  40% { transform:scale(1.18); }
  100%{ transform:scale(1); }
}

/* Dial letter tick on rotate */
.dial-tick { animation: dialTick 0.1s ease-out; }
@keyframes dialTick {
  from { transform:translateY(-6px); opacity:0.5; }
  to   { transform:translateY(0);    opacity:1; }
}

/* Hint jiggle nudge */
.hint-jiggle { animation: hint-jiggle 0.5s ease-in-out; transition: none !important; }
@keyframes hint-jiggle {
  0%  { transform:rotate(0deg); }  20%{ transform:rotate(-12deg); }
  40% { transform:rotate(12deg); } 60%{ transform:rotate(-8deg); }
  80% { transform:rotate(8deg); }  100%{ transform:rotate(0deg); }
}

/* Loader */
.loader {
  border:4px solid #fed7aa; border-top-color:#f97316;
  border-radius:50%; width:40px; height:40px;
  animation: spin 0.9s linear infinite;
}
@keyframes spin { to { transform:rotate(360deg); } }
