/* ================== Carrot Kings - pixel art retro ================== */

:root {
  --sky: #6cc8e8;
  --sky-dark: #3aa0c4;
  --grass: #5fb04b;
  --grass-dark: #3a7d2c;
  --dirt: #6b4226;
  --dirt-dark: #3f2814;
  --dirt-light: #8a5e36;
  --carrot: #f06b1c;
  --carrot-light: #ff8a3d;
  --leaf: #54c267;
  --ink: #1a1a1a;
  --paper: #fff8e7;
  --paper-shadow: #d8c89c;
  --accent: #ffce4a;
  --danger: #d83a3a;
  --cell: 36px;
  --piece-cell: 28px;
}

@media (max-width: 900px) {
  :root {
    --cell: 32px;
    --piece-cell: 22px;
  }
}

@media (max-width: 480px) {
  :root {
    --cell: 30px;
    --piece-cell: 18px;
  }
}

@media (max-width: 360px) {
  :root {
    --cell: 26px;
    --piece-cell: 16px;
  }
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
  font-family: "Press Start 2P", monospace;
  color: var(--ink);
  background: var(--sky);
  background-image: linear-gradient(
    to bottom,
    var(--sky) 0%,
    var(--sky) 55%,
    var(--sky-dark) 55%,
    var(--sky-dark) 58%,
    var(--grass) 58%,
    var(--grass) 100%
  );
  min-height: 100vh;
  image-rendering: pixelated;
  image-rendering: crisp-edges;
  -webkit-font-smoothing: none;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}

#app {
  max-width: 1100px;
  margin: 0 auto;
  padding: 24px 16px 60px;
}

@media (max-width: 600px) {
  #app {
    padding: 18px 8px 40px;
  }
}

.screen {
  display: none;
  flex-direction: column;
  align-items: center;
  gap: 18px;
}
.screen.active {
  display: flex;
}

/* ================== Mute button ================== */

.mute-btn {
  position: fixed;
  top: 12px;
  right: 12px;
  z-index: 100;
  font-family: inherit;
  font-size: 9px;
  letter-spacing: 1px;
  padding: 6px 10px;
  background: var(--ink);
  color: var(--accent);
  border: 3px solid var(--accent);
  cursor: pointer;
  box-shadow: 3px 3px 0 var(--dirt-dark);
}
.mute-btn:active {
  transform: translate(2px, 2px);
  box-shadow: 1px 1px 0 var(--dirt-dark);
}

/* ================== Typography ================== */

.title {
  font-size: 48px;
  margin: 0;
  letter-spacing: 4px;
  color: var(--paper);
  text-shadow: 4px 4px 0 var(--dirt-dark), 4px 0 0 var(--dirt-dark),
    0 4px 0 var(--dirt-dark), -4px 0 0 var(--dirt-dark),
    0 -4px 0 var(--dirt-dark);
}

.title-accent {
  color: var(--accent);
  text-shadow: 4px 4px 0 var(--dirt-dark), 4px 0 0 var(--dirt-dark),
    0 4px 0 var(--dirt-dark), -4px 0 0 var(--dirt-dark),
    0 -4px 0 var(--dirt-dark);
}

@media (max-width: 600px) {
  .title {
    font-size: 32px;
    letter-spacing: 2px;
  }
}

@media (max-width: 360px) {
  .title {
    font-size: 26px;
  }
}

.title-block {
  text-align: center;
  margin-top: 30px;
}

.subtitle {
  font-size: 10px;
  color: var(--paper);
  margin-top: 8px;
  letter-spacing: 2px;
}

.screen-title {
  font-size: 18px;
  margin: 0;
  color: var(--paper);
  text-shadow: 2px 2px 0 var(--dirt-dark);
  letter-spacing: 2px;
  text-align: center;
}
.screen-title.big {
  font-size: 32px;
}
@media (max-width: 600px) {
  .screen-title {
    font-size: 14px;
  }
  .screen-title.big {
    font-size: 24px;
  }
}

.muted {
  font-size: 10px;
  color: var(--paper);
  text-shadow: 1px 1px 0 var(--dirt-dark);
  letter-spacing: 1px;
  text-align: center;
}
.helper {
  max-width: 480px;
}

.dim {
  opacity: 0.6;
}

.error {
  font-size: 10px;
  color: var(--paper);
  background: var(--danger);
  padding: 6px 10px;
  min-height: 12px;
  border: 2px solid var(--dirt-dark);
  display: inline-block;
}
.error:empty {
  display: none;
}

.blink {
  animation: blink 1s steps(2) infinite;
}
@keyframes blink {
  50% {
    opacity: 0.2;
  }
}

/* ================== Buttons / Inputs ================== */

.pixel-btn {
  font-family: inherit;
  font-size: 12px;
  letter-spacing: 1px;
  color: var(--ink);
  background: var(--paper);
  padding: 12px 18px;
  border: 4px solid var(--ink);
  box-shadow: 4px 4px 0 var(--ink);
  cursor: pointer;
  text-transform: uppercase;
  /* avoid iOS double-tap zoom hesitation */
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}
.pixel-btn:hover:not(:disabled) {
  background: var(--accent);
}
.pixel-btn:active:not(:disabled) {
  transform: translate(2px, 2px);
  box-shadow: 2px 2px 0 var(--ink);
}
.pixel-btn:disabled {
  background: var(--paper-shadow);
  color: #888;
  cursor: not-allowed;
  box-shadow: 4px 4px 0 #777;
}
.pixel-btn.primary {
  background: var(--accent);
}
.pixel-btn.primary:hover:not(:disabled) {
  background: var(--carrot-light);
}
.pixel-btn.small {
  font-size: 10px;
  padding: 8px 12px;
  border-width: 3px;
  box-shadow: 3px 3px 0 var(--ink);
}

.pixel-input {
  font-family: inherit;
  font-size: 16px; /* 16px+ avoids iOS Safari zoom-on-focus */
  letter-spacing: 4px;
  text-align: center;
  text-transform: uppercase;
  width: 110px;
  padding: 12px 8px;
  border: 4px solid var(--ink);
  background: var(--paper);
  color: var(--ink);
  outline: none;
}
.pixel-input:focus {
  background: var(--accent);
}

.lobby-actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  margin-top: 16px;
}

.join-row {
  display: flex;
  gap: 10px;
  align-items: stretch;
  flex-wrap: wrap;
  justify-content: center;
}

.rules {
  margin-top: 26px;
  text-align: center;
  padding: 0 12px;
}
.rules p {
  margin: 4px 0;
  font-size: 9px;
  color: var(--paper);
  text-shadow: 1px 1px 0 var(--dirt-dark);
  letter-spacing: 1px;
}

/* ================== Waiting screen ================== */

.room-code {
  font-size: 48px;
  letter-spacing: 12px;
  color: var(--accent);
  background: var(--ink);
  padding: 18px 26px;
  border: 4px solid var(--paper);
  box-shadow: 6px 6px 0 var(--dirt-dark);
}
@media (max-width: 480px) {
  .room-code {
    font-size: 38px;
    letter-spacing: 8px;
    padding: 14px 18px;
  }
}

/* ================== Grid (shared) ================== */

.grid {
  display: grid;
  grid-template-columns: repeat(10, var(--cell));
  grid-template-rows: repeat(10, var(--cell));
  gap: 2px;
  background: var(--dirt-dark);
  padding: 4px;
  border: 4px solid var(--ink);
  box-shadow: 6px 6px 0 var(--dirt-dark);
  user-select: none;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  max-width: 100%;
}

.cell {
  width: var(--cell);
  height: var(--cell);
  background: var(--grass);
  background-image: linear-gradient(
    135deg,
    var(--grass) 0%,
    var(--grass) 50%,
    var(--grass-dark) 50%,
    var(--grass-dark) 100%
  );
  background-size: 8px 8px;
  position: relative;
  cursor: pointer;
}

.cell.fire-grid {
  background: var(--dirt);
  background-image: linear-gradient(
    135deg,
    var(--dirt) 0%,
    var(--dirt) 50%,
    var(--dirt-light) 50%,
    var(--dirt-light) 100%
  );
  background-size: 6px 6px;
}

.cell.invalid-target {
  cursor: not-allowed;
}

.cell svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
  image-rendering: pixelated;
  pointer-events: none;
}

.cell.has-planter {
  background: var(--dirt);
}

.cell.preview-ok {
  background: var(--accent) !important;
  background-image: none !important;
}
.cell.preview-bad {
  background: var(--danger) !important;
  background-image: none !important;
}

.cell.last-shot {
  outline: 3px solid var(--accent);
  outline-offset: -3px;
  z-index: 2;
}

.cell.harvested-overlay::after {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(216, 58, 58, 0.35);
  pointer-events: none;
}

.cell.shake {
  animation: shake 0.3s steps(4);
}
@keyframes shake {
  0% { transform: translate(0, 0); }
  25% { transform: translate(-2px, 2px); }
  50% { transform: translate(2px, -2px); }
  75% { transform: translate(-2px, -2px); }
  100% { transform: translate(0, 0); }
}

.cell.pop {
  animation: pop 0.35s ease-out;
}
@keyframes pop {
  0% { transform: scale(0.4); }
  60% { transform: scale(1.15); }
  100% { transform: scale(1); }
}

/* ================== Placement screen ================== */

.placement-layout {
  display: flex;
  gap: 30px;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: center;
  width: 100%;
}
@media (max-width: 768px) {
  .placement-layout {
    gap: 16px;
    flex-direction: column;
    align-items: center;
  }
}

.tray {
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: stretch;
  background: var(--paper);
  padding: 14px;
  border: 4px solid var(--ink);
  box-shadow: 6px 6px 0 var(--dirt-dark);
  width: 240px;
  max-width: 100%;
}
@media (max-width: 768px) {
  .tray {
    width: 100%;
    max-width: 380px;
  }
}

.tray-title {
  font-size: 12px;
  margin: 0;
  letter-spacing: 2px;
  text-align: center;
}

.tray-pieces {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 8px;
  background: var(--paper-shadow);
  border: 3px solid var(--ink);
  min-height: 160px;
}

.tray-piece {
  display: flex;
  gap: 2px;
  cursor: pointer;
  background: var(--paper);
  padding: 4px;
  border: 2px solid var(--ink);
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
}
.tray-piece.placed {
  opacity: 0.25;
  cursor: not-allowed;
}
.tray-piece.selected {
  outline: 3px solid var(--carrot);
  outline-offset: 2px;
  background: var(--accent);
}
.tray-piece-cell {
  width: var(--piece-cell);
  height: var(--piece-cell);
  background: var(--dirt);
  border: 1px solid var(--dirt-dark);
  position: relative;
}
.tray-piece-cell svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  image-rendering: pixelated;
}

.tray-buttons {
  display: flex;
  gap: 6px;
  justify-content: space-between;
  flex-wrap: wrap;
}

/* ================== Battle screen ================== */

.battle-header {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}
.harvest-counts {
  font-size: 14px;
  color: var(--paper);
  text-shadow: 2px 2px 0 var(--dirt-dark);
  letter-spacing: 2px;
  display: flex;
  gap: 12px;
  align-items: center;
}

.battle-layout {
  display: flex;
  gap: 30px;
  flex-wrap: wrap;
  justify-content: center;
  align-items: flex-start;
  width: 100%;
}
@media (max-width: 900px) {
  .battle-layout {
    gap: 16px;
    flex-direction: column;
    align-items: center;
  }
}

.board-block {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}

.board-title {
  font-size: 12px;
  margin: 0;
  color: var(--paper);
  text-shadow: 2px 2px 0 var(--dirt-dark);
  letter-spacing: 2px;
}
@media (max-width: 600px) {
  .board-title {
    font-size: 10px;
  }
}

.board-sub {
  margin: 0 0 4px 0;
}

#fire-grid .cell.shot-disabled {
  cursor: not-allowed;
}

.toast {
  font-size: 11px;
  color: var(--paper);
  text-shadow: 1px 1px 0 var(--dirt-dark);
  letter-spacing: 1px;
  min-height: 14px;
  text-align: center;
}

.global-toast {
  position: fixed;
  top: 50px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--ink);
  color: var(--paper);
  padding: 12px 20px;
  border: 3px solid var(--accent);
  font-family: inherit;
  font-size: 11px;
  letter-spacing: 1px;
  display: none;
  z-index: 9999;
  box-shadow: 4px 4px 0 var(--dirt-dark);
  max-width: 90vw;
  text-align: center;
}
.global-toast.show {
  display: block;
}

/* ================== Game over ================== */

.over-actions {
  display: flex;
  gap: 12px;
  margin-top: 18px;
  flex-wrap: wrap;
  justify-content: center;
}

#screen-over.lose .screen-title.big {
  color: var(--danger);
}

/* ================== Rabbit stage ================== */

.rabbit-stage {
  position: relative;
  width: 100%;
  max-width: 480px;
  height: 160px;
  margin: 4px auto 8px;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  pointer-events: none;
}
@media (max-width: 600px) {
  .rabbit-stage {
    height: 120px;
  }
}

.rabbit {
  width: 140px;
  height: 140px;
  position: relative;
  image-rendering: pixelated;
}
@media (max-width: 600px) {
  .rabbit {
    width: 100px;
    height: 100px;
  }
}

.rabbit-svg {
  display: none;
  width: 100%;
  height: 100%;
  image-rendering: pixelated;
}

.rabbit[data-state="idle"] .state-idle {
  display: block;
  animation: rabbit-breathe 2.4s ease-in-out infinite;
}
.rabbit[data-state="dig"] .state-idle {
  display: block;
  animation: rabbit-dig 0.4s ease-in-out 2;
}
.rabbit[data-state="sad"] .state-sad {
  display: block;
  animation: rabbit-sad 1.2s ease-in-out;
}
.rabbit[data-state="happy"] .state-happy {
  display: block;
  animation: rabbit-giggle 0.35s ease-in-out 4;
}
.rabbit[data-state="dance"] .state-dance {
  display: block;
  animation: rabbit-dance 0.4s ease-in-out infinite;
}

@keyframes rabbit-breathe {
  0%, 100% { transform: translateY(0) scaleY(1); }
  50%      { transform: translateY(-2px) scaleY(0.97); }
}

@keyframes rabbit-dig {
  0%   { transform: translateY(0) rotate(0deg); }
  25%  { transform: translateY(8px) rotate(-8deg); }
  50%  { transform: translateY(0) rotate(0deg); }
  75%  { transform: translateY(8px) rotate(8deg); }
  100% { transform: translateY(0) rotate(0deg); }
}

@keyframes rabbit-sad {
  0%   { transform: translateY(0) rotate(0deg); }
  25%  { transform: translateY(4px) rotate(-3deg); }
  50%  { transform: translateY(8px) rotate(0deg); }
  75%  { transform: translateY(4px) rotate(3deg); }
  100% { transform: translateY(0) rotate(0deg); }
}

@keyframes rabbit-giggle {
  0%, 100% { transform: translateY(0) rotate(-2deg) scale(1); }
  50%      { transform: translateY(-12px) rotate(2deg) scale(1.05); }
}

@keyframes rabbit-dance {
  0%   { transform: translateY(0) rotate(-8deg) scale(1); }
  25%  { transform: translateY(-18px) rotate(0deg) scale(1.1); }
  50%  { transform: translateY(0) rotate(8deg) scale(1); }
  75%  { transform: translateY(-18px) rotate(0deg) scale(1.1); }
  100% { transform: translateY(0) rotate(-8deg) scale(1); }
}

/* ================== Confetti ================== */

.confetti {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: visible;
}
.confetti-piece {
  position: absolute;
  width: 10px;
  height: 14px;
  image-rendering: pixelated;
  animation: confetti-fall 1.6s ease-out forwards;
}
@keyframes confetti-fall {
  0% {
    transform: translate(0, -20px) rotate(0deg);
    opacity: 1;
  }
  100% {
    transform: translate(var(--dx, 0), 240px) rotate(720deg);
    opacity: 0;
  }
}

/* ================== Big banner ================== */

.big-banner {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) scale(0);
  font-size: 28px;
  letter-spacing: 3px;
  color: var(--accent);
  background: var(--ink);
  padding: 16px 24px;
  border: 4px solid var(--accent);
  text-align: center;
  box-shadow: 6px 6px 0 var(--dirt-dark);
  pointer-events: none;
  z-index: 5;
  white-space: nowrap;
  text-shadow: 2px 2px 0 var(--carrot);
  opacity: 0;
}
@media (max-width: 600px) {
  .big-banner {
    font-size: 18px;
    padding: 10px 16px;
    letter-spacing: 2px;
  }
}
.big-banner.show {
  animation: banner-pop 2.4s ease-out forwards;
}
@keyframes banner-pop {
  0%   { transform: translate(-50%, -50%) scale(0) rotate(-12deg); opacity: 0; }
  15%  { transform: translate(-50%, -50%) scale(1.25) rotate(6deg);  opacity: 1; }
  25%  { transform: translate(-50%, -50%) scale(1) rotate(-3deg);    opacity: 1; }
  35%  { transform: translate(-50%, -50%) scale(1.1) rotate(2deg);   opacity: 1; }
  80%  { transform: translate(-50%, -50%) scale(1) rotate(0deg);     opacity: 1; }
  100% { transform: translate(-50%, -50%) scale(1) rotate(0deg);     opacity: 0; }
}

/* ================== Misc ================== */

.drag-ghost {
  position: fixed;
  pointer-events: none;
  z-index: 1000;
  opacity: 0.85;
  transform: translate(-50%, -50%);
}
