:root{color-scheme:dark;--bg1:#141827;--bg2:#31204b;--card:rgba(255,255,255,.1);--card-strong:rgba(255,255,255,.16);--text:#fff8eb;--muted:#d8cce9;--x:#ffcf5a;--o:#75e6ff;--win:#8cffb5;--shadow:0 24px 80px rgba(0,0,0,.35)}*{box-sizing:border-box}body{min-height:100vh;margin:0;font-family:ui-rounded,"SF Pro Rounded",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--text);background:radial-gradient(circle at 10% 10%,rgba(255,207,90,.28),transparent 30%),radial-gradient(circle at 90% 20%,rgba(117,230,255,.24),transparent 28%),linear-gradient(135deg,var(--bg1),var(--bg2));display:grid;place-items:center;padding:20px}.shell{width:min(760px,100%);display:grid;gap:16px}.hero{text-align:center}.eyebrow{text-transform:uppercase;letter-spacing:.18em;color:var(--x);font-weight:800;margin:0 0 6px}h1{font-size:clamp(3rem,12vw,6.5rem);line-height:.9;margin:0;text-shadow:0 8px 0 rgba(0,0,0,.16)}.subtitle{color:var(--muted);margin:14px auto 0;max-width:560px}.card{background:var(--card);border:1px solid rgba(255,255,255,.18);border-radius:28px;box-shadow:var(--shadow);backdrop-filter:blur(18px)}.setup{display:grid;grid-template-columns:1fr 1fr auto auto;gap:12px;padding:14px;align-items:end}label{display:grid;gap:6px;color:var(--muted);font-weight:700;font-size:.9rem}input,button{border:0;border-radius:16px;padding:13px 14px;font:inherit;font-weight:800}input{background:rgba(255,255,255,.92);color:#20172d;min-width:0}button{cursor:pointer;color:#21152f;background:var(--x);transition:transform .12s ease,filter .12s ease}button:hover{transform:translateY(-1px);filter:brightness(1.06)}.secondary{background:var(--o)}.ghost{background:rgba(255,255,255,.16);color:var(--text)}.scoreboard{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:12px;text-align:center}.scoreboard div{background:rgba(0,0,0,.18);border-radius:20px;padding:12px}.scoreboard span{display:block;color:var(--muted);font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scoreboard strong{display:block;font-size:2rem}.game-card{padding:clamp(14px,3vw,24px)}.status{text-align:center;font-size:1.25rem;font-weight:900;margin:4px 0 18px}.board{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(8px,2vw,14px)}.cell{aspect-ratio:1;border:0;border-radius:clamp(18px,4vw,30px);background:var(--card-strong);color:var(--text);font-size:clamp(3.6rem,15vw,7.8rem);line-height:1;display:grid;place-items:center;box-shadow:inset 0 -8px 0 rgba(0,0,0,.16)}.cell.x{color:var(--x)}.cell.o{color:var(--o)}.cell.win{background:rgba(140,255,181,.24);outline:3px solid var(--win)}.taunt{text-align:center;min-height:1.5em;color:var(--muted);font-weight:700;margin:18px 0 0}@media(max-width:680px){.setup{grid-template-columns:1fr 1fr}.setup button{grid-column:span 1}}@media(max-width:430px){.setup{grid-template-columns:1fr}}

/* Phone-first comfort pass */
html, body {
  width: 100%;
  min-height: 100svh;
  overflow-x: hidden;
}
body {
  padding: max(8px, env(safe-area-inset-top)) 10px max(10px, env(safe-area-inset-bottom));
  align-items: start;
}
.shell {
  width: min(100%, 520px);
  gap: 10px;
}
.hero { margin-top: 2px; }
h1 {
  font-size: clamp(2.15rem, 13vw, 4.2rem);
  text-shadow: 0 5px 0 rgba(0,0,0,.16);
}
.eyebrow { font-size: .72rem; margin-bottom: 4px; }
.subtitle {
  font-size: .9rem;
  line-height: 1.25;
  margin-top: 8px;
}
.card { border-radius: 20px; }
.setup {
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  padding: 10px;
}
.setup label { font-size: .78rem; gap: 4px; }
input, button {
  border-radius: 13px;
  padding: 10px 9px;
  font-size: .95rem;
}
.scoreboard {
  padding: 8px;
  gap: 6px;
}
.scoreboard div {
  border-radius: 15px;
  padding: 7px 4px;
}
.scoreboard span { font-size: .78rem; }
.scoreboard strong { font-size: 1.35rem; }
.game-card { padding: 10px; }
.status {
  font-size: 1rem;
  margin: 2px 0 10px;
}
.board {
  width: min(100%, calc(100svh - 310px));
  max-width: 420px;
  min-width: 260px;
  margin: 0 auto;
  gap: 8px;
}
.cell {
  border-radius: clamp(14px, 4vw, 22px);
  font-size: clamp(2.9rem, 18vw, 5.7rem);
  box-shadow: inset 0 -5px 0 rgba(0,0,0,.16);
  touch-action: manipulation;
}
.taunt {
  font-size: .88rem;
  line-height: 1.25;
  margin-top: 10px;
}
@media (max-width: 430px) {
  body { padding-left: 8px; padding-right: 8px; }
  .shell { gap: 8px; }
  .setup { grid-template-columns: 1fr 1fr; }
  .setup button { grid-column: span 1; }
  .subtitle { display: none; }
  .board { width: min(100%, calc(100svh - 245px)); }
}
@media (max-height: 700px) and (max-width: 520px) {
  .eyebrow, .subtitle { display: none; }
  h1 { font-size: clamp(2rem, 11vw, 3.2rem); }
  .scoreboard strong { font-size: 1.15rem; }
  .setup { padding: 8px; }
  input, button { padding: 8px; font-size: .88rem; }
  .game-card { padding: 8px; }
  .status { margin-bottom: 8px; }
  .taunt { margin-top: 8px; font-size: .8rem; }
  .board { width: min(100%, calc(100svh - 210px)); gap: 6px; }
}
@media (max-height: 590px) and (max-width: 520px) {
  .hero { display: none; }
  .board { width: min(100%, calc(100svh - 170px)); }
}


/* Sparkle makeover: softer, brighter, kid-friendly, and still readable. */
:root {
  color-scheme: light;
  --bg1: #ffe6f4;
  --bg2: #e5dcff;
  --bg3: #c8f7ff;
  --card: rgba(255,255,255,.62);
  --card-strong: rgba(255,255,255,.76);
  --text: #4a245f;
  --muted: #7d5a91;
  --x: #a855f7;
  --o: #ff5fa2;
  --win: #3ddc97;
  --shadow: 0 22px 70px rgba(154, 89, 196, .22);
}
body {
  color: var(--text);
  background:
    radial-gradient(circle at 10% 8%, rgba(255,255,255,.95), transparent 18%),
    radial-gradient(circle at 18% 24%, rgba(255,95,162,.28), transparent 24%),
    radial-gradient(circle at 88% 12%, rgba(168,85,247,.25), transparent 26%),
    radial-gradient(circle at 80% 86%, rgba(56,189,248,.25), transparent 30%),
    linear-gradient(135deg, var(--bg1), var(--bg2) 52%, var(--bg3));
}
.magic-bg { position: fixed; inset: 0; pointer-events: none; overflow: hidden; z-index: 0; }
.magic-bg span {
  position: absolute;
  font-size: clamp(1.4rem, 5vw, 3rem);
  filter: drop-shadow(0 8px 14px rgba(127, 72, 171, .22));
  animation: floaty 7s ease-in-out infinite;
  opacity: .72;
}
.magic-bg span:nth-child(1){ left: 7%; top: 14%; animation-delay: -.8s; }
.magic-bg span:nth-child(2){ right: 8%; top: 18%; animation-delay: -2s; }
.magic-bg span:nth-child(3){ left: 10%; bottom: 16%; animation-delay: -4s; }
.magic-bg span:nth-child(4){ right: 12%; bottom: 12%; animation-delay: -1.4s; }
.magic-bg span:nth-child(5){ left: 48%; top: 5%; animation-delay: -3s; }
@keyframes floaty { 0%,100%{ transform: translateY(0) rotate(-8deg) scale(1); } 50%{ transform: translateY(-18px) rotate(8deg) scale(1.08); } }
.shell { position: relative; z-index: 1; }
.eyebrow {
  color: #ff4fa3;
  text-shadow: 0 2px 0 rgba(255,255,255,.75);
}
h1 {
  color: transparent;
  background: linear-gradient(90deg, #ff4fa3, #a855f7, #38bdf8, #ffb703);
  -webkit-background-clip: text;
  background-clip: text;
  text-shadow: none;
  filter: drop-shadow(0 6px 0 rgba(255,255,255,.7)) drop-shadow(0 16px 24px rgba(168,85,247,.22));
}
.subtitle { color: var(--muted); font-weight: 800; }
.card {
  background: linear-gradient(145deg, rgba(255,255,255,.78), rgba(255,255,255,.46));
  border: 2px solid rgba(255,255,255,.78);
  box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,.85);
}
.setup, .scoreboard, .game-card { outline: 1px solid rgba(255, 95, 162, .12); }
label { color: #85539c; }
input {
  background: rgba(255,255,255,.92);
  color: #4a245f;
  border: 2px solid rgba(255,95,162,.18);
  box-shadow: inset 0 2px 8px rgba(168,85,247,.08);
}
button {
  color: white;
  background: linear-gradient(135deg, #ff5fa2, #ff9ed2);
  box-shadow: 0 10px 22px rgba(255,95,162,.24), inset 0 -4px 0 rgba(133,38,99,.12);
}
.secondary { background: linear-gradient(135deg, #a855f7, #7dd3fc); }
.ghost { background: rgba(255,255,255,.72); color: #7a3f88; }
.scoreboard div {
  background: rgba(255,255,255,.58);
  border: 1px solid rgba(255,255,255,.75);
}
.scoreboard span { color: #8b5aa0; }
.scoreboard strong { color: #ff4fa3; text-shadow: 0 2px 0 white; }
.status {
  color: #733090;
  background: rgba(255,255,255,.48);
  border-radius: 999px;
  padding: 8px 12px;
}
.cell {
  background:
    linear-gradient(145deg, rgba(255,255,255,.92), rgba(255,255,255,.58));
  box-shadow: inset 0 -7px 0 rgba(168,85,247,.10), 0 12px 22px rgba(168,85,247,.12);
  border: 2px solid rgba(255,255,255,.86);
  transform: translateZ(0);
}
.cell:not(:disabled):hover { transform: translateY(-2px) rotate(-1deg); }
.cell.x { color: #a855f7; text-shadow: 0 4px 0 rgba(255,255,255,.8); }
.cell.o { color: #ff4fa3; text-shadow: 0 4px 0 rgba(255,255,255,.8); }
.cell.win {
  background: linear-gradient(145deg, rgba(221,255,238,.98), rgba(255,255,255,.72));
  outline: 4px solid rgba(61,220,151,.75);
  animation: winnerPulse .75s ease-in-out infinite alternate;
}
@keyframes winnerPulse { from { transform: scale(1); } to { transform: scale(1.035) rotate(1deg); } }
.taunt { color: #89579d; font-weight: 900; }
.confetti {
  position: fixed;
  top: -24px;
  z-index: 3;
  pointer-events: none;
  animation: confettiFall 1.5s linear forwards;
  font-size: 1.35rem;
}
@keyframes confettiFall { to { transform: translateY(calc(100vh + 60px)) rotate(420deg); opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
  .magic-bg span, .cell.win, .confetti { animation: none; }
}
