/* ── Retro 50's Theme ── */
@import url('https://fonts.googleapis.com/css2?family=Pacifico&family=VT323&family=Oswald:wght@400;600;700&display=swap');

:root {
  --red:      #C8232A;
  --red-dark: #9A1A20;
  --teal:     #0B8A94;
  --teal-lt:  #12B5C2;
  --cream:    #FFF8E7;
  --black:    #1A1109;
  --gold:     #F5B800;
  --pink:     #E8497A;
  --white:    #FFFFFF;
  --ink:      #2C1810;
  --shadow:   5px 5px 0 rgba(0,0,0,.35);
  --checker:  repeating-conic-gradient(#EAE0CA 0% 25%, transparent 0% 50%) 0 0 / 28px 28px;
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html { scroll-behavior: smooth; }

body {
  font-family: 'Oswald', sans-serif;
  background-color: #F5EDD8;
  background-image: var(--checker);
  color: var(--ink);
  min-height: 100vh;
}

/* ── Header ──────────────────────────────────────────────────────────────── */
header {
  background: var(--red);
  border-bottom: 6px solid var(--black);
  overflow: hidden;
}

.header-stripe {
  height: 12px;
  background: repeating-linear-gradient(
    90deg,
    var(--black)  0 20px,
    var(--gold)  20px 40px,
    var(--black) 40px 60px,
    var(--white) 60px 80px
  );
}

.header-content {
  padding: 1.5rem 2rem 1.75rem;
  text-align: center;
}

.title {
  font-family: 'Pacifico', cursive;
  font-size: clamp(2.6rem, 8vw, 5rem);
  color: var(--white);
  text-shadow:
    3px  3px 0 var(--black),
    6px  6px 0 rgba(0,0,0,.2);
  letter-spacing: 2px;
  line-height: 1.1;
}

.subtitle {
  font-size: clamp(.9rem, 2.5vw, 1.2rem);
  color: var(--gold);
  text-transform: uppercase;
  letter-spacing: 5px;
  margin-top: .4rem;
}

.header-deco {
  color: var(--gold);
  font-size: 1.4rem;
  letter-spacing: .5rem;
  margin: .3rem 0;
}

/* ── Main ────────────────────────────────────────────────────────────────── */
main {
  max-width: 1140px;
  margin: 0 auto;
  padding: 2rem 1rem 4rem;
}

.loading {
  text-align: center;
  font-family: 'Pacifico', cursive;
  font-size: 1.6rem;
  color: var(--ink);
  padding: 4rem;
  opacity: .7;
}

.ball { font-size: 2.5rem; display: inline-block; animation: bounce .7s infinite alternate; }

/* ── Controls ────────────────────────────────────────────────────────────── */
.controls {
  display: flex;
  justify-content: flex-end;
  margin-bottom: 1.75rem;
}

/* ── Buttons ─────────────────────────────────────────────────────────────── */
.btn {
  font-family: 'Oswald', sans-serif;
  font-size: 1rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  padding: .55rem 1.4rem;
  border: 3px solid var(--black);
  cursor: pointer;
  box-shadow: var(--shadow);
  transition: transform .08s, box-shadow .08s;
  user-select: none;
}

.btn:active { transform: translate(3px,3px); box-shadow: 2px 2px 0 rgba(0,0,0,.35); }

.btn-primary  { background: var(--teal);  color: var(--white); }
.btn-primary:hover  { background: var(--teal-lt); }

.btn-danger   { background: var(--red);   color: var(--white); }
.btn-danger:hover   { background: var(--red-dark); }

.btn-secondary { background: var(--cream); color: var(--black); }
.btn-secondary:hover { background: var(--white); }

/* ── Date group ──────────────────────────────────────────────────────────── */
.date-group   { margin-bottom: 3rem; }

.date-header {
  display: flex;
  align-items: center;
  gap: .75rem;
  padding: .7rem 1.4rem;
  background: var(--black);
  border: 3px solid var(--black);
  margin-bottom: 1.5rem;
  box-shadow: 4px 4px 0 rgba(0,0,0,.3);
}

.date-header h2 {
  font-family: 'Oswald', sans-serif;
  font-size: 1.3rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 3px;
  color: var(--gold);
  flex: 1;
  text-align: center;
}

.date-star { color: var(--gold); font-size: 1.4rem; }

/* ── Matches grid ────────────────────────────────────────────────────────── */
.matches-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
  gap: 1.5rem;
}

/* ── Match card ──────────────────────────────────────────────────────────── */
.match-card {
  background: var(--white);
  border: 4px solid var(--black);
  box-shadow: 7px 7px 0 var(--black);
  position: relative;
  overflow: hidden;
}

/* rainbow top stripe */
.match-card::before {
  content: '';
  display: block;
  height: 8px;
  background: repeating-linear-gradient(
    90deg,
    var(--red)  0 25%, var(--gold) 25% 50%,
    var(--teal) 50% 75%, var(--pink) 75% 100%
  );
}

.match-header {
  display: flex;
  align-items: center;
  padding: .85rem 4.5rem;
  background: var(--cream);
  border-bottom: 3px solid var(--black);
  gap: .4rem;
  position: relative;
}

.player {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .2rem;
}

.player-name {
  font-size: 1rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 1px;
  text-align: center;
  word-break: break-word;
  max-width: 120px;
}

.player.winner .player-name { color: var(--red); }

.wins-badge {
  font-family: 'VT323', monospace;
  font-size: 2.2rem;
  line-height: 1;
  width: 2.2rem;
  height: 2.2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--black);
  color: var(--gold);
  border-radius: 50%;
  border: 2px solid var(--black);
}

.player.winner .wins-badge {
  background: var(--red);
  color: var(--white);
}

.crown { font-size: 1.1rem; line-height: 1; display: block; }
.crown-hidden { visibility: hidden; }

.vs-divider {
  font-family: 'Pacifico', cursive;
  font-size: 1.1rem;
  color: var(--black);
  padding: 0 .4rem;
  flex-shrink: 0;
}

.match-actions {
  position: absolute;
  top: .45rem; right: .5rem;
  display: flex;
  align-items: center;
  gap: .1rem;
}

.delete-btn {
  background: none;
  border: none;
  color: #bbb;
  font-size: 1rem;
  cursor: pointer;
  line-height: 1;
  padding: .2rem .35rem;
  font-family: 'Oswald', sans-serif;
  font-weight: 700;
  transition: color .15s;
}
.delete-btn:hover { color: var(--red); }
.delete-btn-disabled,
.delete-btn-disabled:hover { color: #ddd; cursor: not-allowed; }

.lock-btn {
  background: none;
  border: none;
  font-size: .95rem;
  line-height: 1;
  padding: .2rem .25rem;
  cursor: pointer;
  transition: opacity .15s;
  user-select: none;
}
.lock-btn:hover { opacity: .7; }
.lock-btn-static { cursor: default; opacity: .45; }
.lock-btn-static:hover { opacity: .45; }

/* ── Match name ──────────────────────────────────────────────────────────── */
.match-name {
  font-family: 'Pacifico', cursive;
  font-size: .95rem;
  text-align: center;
  padding: .45rem 3rem;
  background: var(--cream);
  color: var(--ink);
  border-bottom: 2px solid rgba(0,0,0,.08);
  word-break: break-word;
}

/* ── Name field row (input + reroll btn) ─────────────────────────────────── */
.name-field-row {
  display: flex;
  gap: .5rem;
  align-items: stretch;
}
.name-field-row input { flex: 1; }

.reroll-btn {
  font-size: 1.2rem;
  padding: 0 .6rem;
  border: 2px solid var(--black);
  background: var(--cream);
  cursor: pointer;
  transition: background .1s;
  flex-shrink: 0;
}
.reroll-btn:hover { background: var(--gold); }

.match-card.match-locked .match-header { background: #F5F0E8; }
.match-card.match-locked::before {
  background: repeating-linear-gradient(
    90deg,
    #999 0 25%, #bbb 25% 50%, #999 50% 75%, #bbb 75% 100%
  );
}

/* ── Games table ─────────────────────────────────────────────────────────── */
.games-table {
  width: 100%;
  border-collapse: collapse;
}

.games-table thead th {
  font-family: 'Oswald', sans-serif;
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: var(--black);
  color: var(--white);
  padding: .35rem .5rem;
  text-align: center;
}

.games-table thead th:first-child { width: 2.8rem; }
.games-table thead th:nth-child(3) { width: 2rem; }

.game-row { border-bottom: 1px solid #E0D5C0; }
.game-row:nth-child(even) { background: #FEF9EE; }
.game-row:last-child { border-bottom: none; }

.game-num {
  font-family: 'VT323', monospace;
  font-size: 1.4rem;
  color: var(--teal);
  text-align: center;
  padding: .2rem .5rem;
  white-space: nowrap;
}

.score-cell { text-align: center; padding: .25rem .4rem; }

.score-sep {
  font-family: 'VT323', monospace;
  font-size: 1.4rem;
  color: #ccc;
  text-align: center;
  padding: 0 .2rem;
  user-select: none;
}

.score-input {
  font-family: 'VT323', monospace;
  font-size: 2rem;
  width: 3.8rem;
  text-align: center;
  border: 2px solid #D0C8B0;
  background: transparent;
  color: var(--ink);
  padding: .05rem .2rem;
  transition: border-color .15s, background .15s, color .15s;
  -moz-appearance: textfield;
}
.score-input::-webkit-inner-spin-button,
.score-input::-webkit-outer-spin-button { -webkit-appearance: none; }
.score-input:focus {
  outline: none;
  border-color: var(--teal);
  background: #EEF9FA;
}

.score-cell.score-winner .score-input {
  color: var(--red);
  border-color: var(--red);
  font-weight: bold;
}

/* ── Empty state ─────────────────────────────────────────────────────────── */
.empty-state {
  text-align: center;
  padding: 5rem 2rem 3rem;
}
.empty-ball {
  font-size: 5rem;
  margin-bottom: 1rem;
  display: block;
  animation: bounce .8s infinite alternate;
}
.empty-state p {
  font-family: 'Pacifico', cursive;
  font-size: 1.6rem;
  color: var(--ink);
  margin-bottom: 2rem;
}

/* ── Modal ───────────────────────────────────────────────────────────────── */
.modal {
  position: fixed; inset: 0;
  display: flex; align-items: center; justify-content: center;
  z-index: 200;
}
.modal.hidden { display: none; }

.modal-backdrop {
  position: absolute; inset: 0;
  background: rgba(26,17,9,.65);
}

.modal-box {
  position: relative;
  background: var(--white);
  border: 4px solid var(--black);
  box-shadow: 10px 10px 0 var(--black);
  width: 100%; max-width: 440px;
  padding: 0 2rem 2rem;
  overflow: hidden;
}

.modal-rainbow {
  height: 10px;
  background: repeating-linear-gradient(
    90deg,
    var(--red) 0 20%, var(--gold) 20% 40%,
    var(--teal) 40% 60%, var(--pink) 60% 80%,
    var(--black) 80% 100%
  );
  margin: 0 -2rem 1.5rem;
}

.modal-title {
  font-family: 'Pacifico', cursive;
  font-size: 2rem;
  text-align: center;
  color: var(--red);
  margin-bottom: 1.5rem;
}

.versus-divider {
  font-family: 'Pacifico', cursive;
  font-size: 1.5rem;
  text-align: center;
  color: var(--teal);
  margin: .25rem 0 1rem;
}

.form-group { margin-bottom: 1.1rem; }

.form-group label {
  display: block;
  font-size: .8rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  margin-bottom: .35rem;
  color: var(--ink);
}

.form-group input,
.form-group select {
  width: 100%;
  padding: .55rem .75rem;
  border: 2px solid var(--black);
  font-family: 'Oswald', sans-serif;
  font-size: 1.05rem;
  background: var(--cream);
  color: var(--ink);
}
.form-group input:focus,
.form-group select:focus {
  outline: none;
  border-color: var(--teal);
  background: var(--white);
}
.guest-name-input { margin-top: .4rem; }

.form-actions {
  display: flex; gap: .75rem;
  justify-content: flex-end;
  margin-top: 1.5rem;
}

/* ── Utility ─────────────────────────────────────────────────────────────── */
.hidden { display: none !important; }

/* ── Auth bar ────────────────────────────────────────────────────────────── */
.auth-bar {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: .75rem;
  padding: .45rem 1.25rem;
  background: rgba(0,0,0,.25);
}

.auth-user {
  font-family: 'Oswald', sans-serif;
  font-size: .85rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  color: var(--gold);
}

.auth-btn {
  font-family: 'Oswald', sans-serif;
  font-size: .8rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  padding: .3rem .9rem;
  border: 2px solid var(--gold);
  background: transparent;
  color: var(--gold);
  cursor: pointer;
  transition: background .12s, color .12s;
}
.auth-btn:hover { background: var(--gold); color: var(--black); }

/* ── Invite banner ───────────────────────────────────────────────────────── */
.invite-banner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .35rem;
  background: var(--gold);
  color: var(--black);
  font-family: 'Oswald', sans-serif;
  font-size: .9rem;
  font-weight: 600;
  text-align: center;
  padding: .75rem 1.25rem;
  border: 3px solid var(--black);
  border-radius: 0;
  margin: 1.5rem 0;
  box-shadow: 4px 4px 0 rgba(0,0,0,.25);
}

.invite-banner-member {
  background: var(--teal);
  color: var(--white);
}

.invite-msg {
  font-family: 'Pacifico', cursive;
  font-size: 1rem;
  color: var(--white);
  flex: 1;
}

.invite-copy-btn-main {
  font-family: 'Oswald', sans-serif;
  font-size: .85rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  padding: .4rem 1.2rem;
  border: 2px solid var(--white);
  background: var(--white);
  color: var(--teal);
  cursor: pointer;
  transition: background .12s, border-color .12s, color .12s;
  white-space: nowrap;
  flex-shrink: 0;
}
.invite-copy-btn-main:hover  { background: var(--gold); border-color: var(--gold); color: var(--black); }
.invite-copy-btn-main:disabled { opacity: .65; cursor: default; }
.auth-btn-inline {
  border-color: var(--black);
  color: var(--black);
  font-size: .75rem;
  padding: .2rem .7rem;
  margin-top: .2rem;
}
.auth-btn-inline:hover { background: var(--black); color: var(--gold); }

/* ── Read-only score inputs ──────────────────────────────────────────────── */
.score-input.score-readonly {
  color: #999;
  border-color: #ddd;
  cursor: default;
  pointer-events: none;
}

/* ── Signup page ─────────────────────────────────────────────────────────── */
.signup-box {
  max-width: 460px;
  margin: 3rem auto;
  background: var(--white);
  border: 4px solid var(--black);
  box-shadow: 8px 8px 0 var(--black);
  padding: 0 2rem 2rem;
  overflow: hidden;
}

.signup-step { /* each step shown/hidden via .hidden */ }

.signup-hint {
  font-family: 'Oswald', sans-serif;
  font-size: 1rem;
  color: #555;
  text-align: center;
  margin-bottom: 1.5rem;
  line-height: 1.5;
}

.signup-error {
  background: #FEE;
  border: 2px solid var(--red);
  color: var(--red);
  font-family: 'Oswald', sans-serif;
  font-size: .9rem;
  font-weight: 600;
  padding: .5rem .75rem;
  margin-top: .5rem;
}

.qr-container {
  display: flex;
  justify-content: center;
  margin: 1rem 0 .75rem;
  background: var(--white);
  padding: .5rem;
  border: 2px solid #ddd;
}
.qr-container img { max-width: 220px; height: auto; display: block; image-rendering: pixelated; }

.totp-secret {
  font-family: 'VT323', monospace;
  font-size: 1.4rem;
  letter-spacing: 2px;
  text-align: center;
  background: var(--cream);
  border: 2px solid #ddd;
  padding: .4rem .75rem;
  margin-bottom: .5rem;
  word-break: break-all;
  user-select: all;
}

.totp-secret-copyable {
  cursor: pointer;
  transition: background .12s, border-color .12s;
}
.totp-secret-copyable:hover { background: #EEF9FA; border-color: var(--teal); }

.signup-center {
  text-align: center;
  padding: 2rem 0 1rem;
}

/* ── Login error ─────────────────────────────────────────────────────────── */
#login-error {
  background: #FEE;
  border: 2px solid var(--red);
  color: var(--red);
  font-family: 'Oswald', sans-serif;
  font-size: .9rem;
  font-weight: 600;
  padding: .5rem .75rem;
  margin-top: .5rem;
}

/* ── Snackbar ────────────────────────────────────────────────────────────── */
#snackbar-container {
  position: fixed;
  bottom: 2rem; left: 50%;
  transform: translateX(-50%);
  z-index: 8000;
  display: flex; flex-direction: column-reverse;
  align-items: center; gap: .5rem;
  pointer-events: none;
}

.snackbar {
  font-family: 'Oswald', sans-serif;
  font-size: .9rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: 2px;
  padding: .65rem 1.4rem;
  border: 3px solid var(--black);
  box-shadow: 4px 4px 0 var(--black);
  max-width: 90vw;
  text-align: center;
  animation: snackbar-life 5s ease forwards;
  pointer-events: auto;
}
.snackbar-error   { background: var(--red);   color: var(--white); }
.snackbar-success { background: var(--teal);  color: var(--white); }
.snackbar-warn    { background: var(--gold);  color: var(--black); }

@keyframes snackbar-life {
  0%   { transform: translateY(1.5rem); opacity: 0; }
  8%   { transform: translateY(0);      opacity: 1; }
  82%  { transform: translateY(0);      opacity: 1; }
  100% { transform: translateY(1.5rem); opacity: 0; }
}

/* ── Celebration overlay ─────────────────────────────────────────────────── */
#cel-overlay {
  position: fixed; inset: 0;
  z-index: 9999;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  cursor: pointer;
  animation: cel-bg-pulse 2s ease-in-out infinite alternate;
}
@keyframes cel-bg-pulse {
  from { filter: brightness(1); }
  to   { filter: brightness(1.15); }
}

#cel-canvas {
  position: absolute; inset: 0;
  pointer-events: none;
  width: 100%; height: 100%;
}

.cel-content {
  position: relative; z-index: 2;
  text-align: center;
  padding: 2rem;
}

.cel-name {
  font-family: 'Pacifico', cursive;
  font-size: clamp(3.5rem, 14vw, 9rem);
  color: #fff;
  text-shadow: 4px 4px 0 rgba(0,0,0,.4), 0 0 60px rgba(255,255,255,.4);
  line-height: 1.1;
  will-change: transform;
}

.cel-subtitle {
  font-family: 'Oswald', sans-serif;
  font-size: clamp(1.8rem, 6vw, 3.5rem);
  color: #fff;
  letter-spacing: 6px;
  text-transform: uppercase;
  text-shadow: 2px 2px 0 rgba(0,0,0,.4);
  margin-top: .75rem;
  animation: cel-subtitle-pop .5s .4s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes cel-subtitle-pop {
  from { transform: scale(0) rotate(-5deg); opacity: 0; }
  to   { transform: scale(1) rotate(0); opacity: 1; }
}

.cel-dismiss {
  position: absolute; bottom: 2rem;
  font-family: 'Oswald', sans-serif;
  font-size: .9rem; letter-spacing: 3px;
  text-transform: uppercase;
  color: rgba(255,255,255,.6);
  animation: cel-blink 1.5s 2s ease-in-out infinite;
}
@keyframes cel-blink { 50% { opacity: 0; } }

/* ── 10 name animation classes ───────────────────────────────────────────── */

/* 0: Drop + bounce */
.cel-drop-bounce {
  animation: _cel-drop-bounce .7s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes _cel-drop-bounce {
  from { transform: translateY(-120vh) scale(.6); opacity: 0; }
  to   { transform: translateY(0) scale(1); opacity: 1; }
}

/* 1: Spin zoom */
.cel-spin-zoom {
  animation: _cel-spin-zoom .8s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes _cel-spin-zoom {
  from { transform: rotate(-540deg) scale(0); opacity: 0; }
  to   { transform: rotate(0) scale(1); opacity: 1; }
}

/* 2: Glitch (looping) */
.cel-glitch {
  animation: _cel-glitch-in .5s ease both, _cel-glitch-loop 2.5s .6s ease-in-out infinite;
}
@keyframes _cel-glitch-in {
  from { opacity: 0; transform: scale(1.3); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes _cel-glitch-loop {
  0%,100% { transform: none; text-shadow: 5px 0 #ff0080, -5px 0 #00ffff, 4px 4px 0 rgba(0,0,0,.4); }
  20%  { transform: skew(-8deg); text-shadow: -5px 0 #ff0080, 5px 0 #00ffff; }
  40%  { transform: translate(-4px,2px) skew(5deg); text-shadow: 7px 0 #00ffff, -7px 0 #ff0080; }
  60%  { transform: translate(4px,-2px) skew(-5deg); text-shadow: -4px 0 #ff0080, 6px 0 #00ff88; }
  80%  { transform: skew(4deg); }
}

/* 3: Rainbow text slide */
.cel-rainbow-text {
  animation: _cel-rainbow-in .5s ease both;
  background: linear-gradient(90deg,#ff0080,#ff8c00,#ffe100,#00fa9a,#00bfff,#cc00ff,#ff0080);
  background-size: 300% 100%;
  -webkit-background-clip: text; background-clip: text;
  color: transparent !important;
  -webkit-text-fill-color: transparent;
  animation: _cel-rainbow-in .5s ease both, _cel-rainbow-slide 2s .5s linear infinite;
}
@keyframes _cel-rainbow-in {
  from { opacity: 0; transform: scale(.5); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes _cel-rainbow-slide {
  to { background-position: -300% 0; }
}

/* 4: Shake in */
.cel-shake-in {
  animation: _cel-shake-in .6s ease both;
}
@keyframes _cel-shake-in {
  0%   { transform: translateX(-120vw); opacity: 0; }
  60%  { transform: translateX(20px); opacity: 1; }
  70%  { transform: translateX(-15px); }
  80%  { transform: translateX(10px); }
  90%  { transform: translateX(-5px); }
  100% { transform: translateX(0); }
}

/* 5: Slide up */
.cel-slide-up {
  animation: _cel-slide-up .65s cubic-bezier(.22,1,.36,1) both;
}
@keyframes _cel-slide-up {
  from { transform: translateY(100vh); opacity: 0; }
  to   { transform: translateY(0); opacity: 1; }
}

/* 6: Flash burst */
.cel-flash {
  animation: _cel-flash .7s ease both;
}
@keyframes _cel-flash {
  0%   { opacity: 0; transform: scale(3); filter: brightness(5); }
  40%  { opacity: 1; transform: scale(.9); filter: brightness(1.5); }
  100% { opacity: 1; transform: scale(1); filter: brightness(1); }
}

/* 7: Zoom pop */
.cel-zoom-pop {
  animation: _cel-zoom-pop .65s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes _cel-zoom-pop {
  from { transform: scale(0); opacity: 0; }
  to   { transform: scale(1); opacity: 1; }
}

/* 8: Swing in */
.cel-swing-in {
  transform-origin: top center;
  animation: _cel-swing-in .7s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes _cel-swing-in {
  from { transform: rotateX(-90deg); opacity: 0; }
  to   { transform: rotateX(0); opacity: 1; }
}

/* 9: Explode in from tiny */
.cel-explode-in {
  animation: _cel-explode-in .8s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes _cel-explode-in {
  0%   { transform: scale(0) rotate(180deg); opacity: 0; filter: blur(20px); }
  80%  { filter: blur(0); }
  100% { transform: scale(1) rotate(0); opacity: 1; }
}

/* ── Auth user button (clickable username) ───────────────────────────────── */
.auth-user-btn {
  background: none;
  border: none;
  cursor: pointer;
  font-family: 'Oswald', sans-serif;
  font-size: .85rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  color: var(--gold);
  padding: .3rem .5rem;
  transition: opacity .15s;
}
.auth-user-btn:hover { opacity: .7; }

/* ── Profile modal ───────────────────────────────────────────────────────── */
.profile-loading {
  font-family: 'Oswald', sans-serif;
  text-align: center;
  color: #aaa;
  padding: 1.5rem 0;
  letter-spacing: 2px;
  text-transform: uppercase;
  font-size: .85rem;
}

.profile-since {
  font-family: 'Oswald', sans-serif;
  font-size: .78rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 2px;
  color: #999;
  text-align: center;
  margin-bottom: 1.1rem;
}

.profile-stats {
  border: 2px solid #E0D5C0;
  margin-bottom: 1.4rem;
  overflow: hidden;
}

.profile-stat {
  display: flex;
  align-items: center;
  gap: .75rem;
  padding: .4rem .75rem;
  border-bottom: 1px solid #E0D5C0;
}
.profile-stat:last-child { border-bottom: none; }
.profile-stat:nth-child(even) { background: #FEF9EE; }

.profile-stat-icon { font-size: .95rem; width: 1.4rem; text-align: center; }

.profile-stat-label {
  flex: 1;
  font-family: 'Oswald', sans-serif;
  font-size: .8rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--ink);
}

.profile-stat-val {
  font-family: 'VT323', monospace;
  font-size: 1.7rem;
  color: var(--teal);
  line-height: 1;
}

/* ── Biometric ───────────────────────────────────────────────────────────── */
.btn-biometric {
  display: block;
  width: 100%;
  padding: .7rem 1.4rem;
  background: var(--black);
  color: var(--gold);
  font-family: 'Oswald', sans-serif;
  font-size: 1rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  border: 3px solid var(--black);
  cursor: pointer;
  box-shadow: var(--shadow);
  transition: background .1s, color .1s;
  margin-bottom: .5rem;
}
.btn-biometric:hover { background: #333; }

.biometric-or {
  text-align: center;
  font-family: 'Oswald', sans-serif;
  font-size: .72rem;
  color: #aaa;
  letter-spacing: 2px;
  text-transform: uppercase;
  margin: .25rem 0 1.1rem;
}

.auth-bio-btn {
  border-color: rgba(245,184,0,.5);
  font-size: .72rem;
  padding: .25rem .7rem;
}

.cookie-warn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .25rem;
  background: #fff3cd;
  border: 2px solid #e6a817;
  color: #5a3e00;
  font-family: 'Oswald', sans-serif;
  font-size: .85rem;
  font-weight: 600;
  padding: .65rem .9rem;
  margin-bottom: 1rem;
  text-align: center;
  line-height: 1.4;
}
.cookie-warn-icon { font-size: 1.2rem; line-height: 1; }

/* ── Profile auth section ────────────────────────────────────────────────── */
.profile-auth-section {
  border: 2px solid #E0D5C0;
  margin-bottom: 1.4rem;
  overflow: hidden;
}

.profile-auth-label {
  font-family: 'Oswald', sans-serif;
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: var(--black);
  color: var(--white);
  padding: .3rem .75rem;
}

.profile-auth-item {
  padding: .5rem .75rem;
  border-top: 1px solid #E0D5C0;
  font-family: 'Oswald', sans-serif;
  font-size: .9rem;
}
.profile-auth-item:first-of-type { border-top: none; }

.profile-auth-set {
  color: #27ae60;
  font-weight: 600;
}

.profile-auth-btn {
  font-size: .8rem;
  padding: .25rem .75rem;
  box-shadow: none;
}

.profile-totp-qr-wrap {
  display: flex;
  justify-content: center;
  margin: .5rem 0 .6rem;
  background: var(--white);
  padding: .4rem;
  border: 2px solid #ddd;
}

.profile-totp-qr {
  max-width: 180px;
  height: auto;
  display: block;
  image-rendering: pixelated;
}

/* ── Inline link button ──────────────────────────────────────────────────── */
.link-btn {
  background: none;
  border: none;
  color: var(--teal);
  font-family: 'Oswald', sans-serif;
  font-size: inherit;
  font-weight: 600;
  cursor: pointer;
  padding: 0;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.link-btn:hover { color: var(--teal-lt); }

/* ── Character counter ───────────────────────────────────────────────────── */
.char-counter {
  font-family: 'Oswald', sans-serif;
  font-size: .72rem;
  font-weight: 600;
  text-align: right;
  color: #aaa;
  letter-spacing: 1px;
  margin-top: .2rem;
  transition: color .15s;
}
.char-counter.warn  { color: var(--gold); }
.char-counter.full  { color: var(--red); font-weight: 700; }

/* ── Leaderboard ─────────────────────────────────────────────────────────── */
#invite-wrap {
  max-width: 1140px;
  margin: 0 auto;
  padding: 0 1rem;
}

.lb-container {
  max-width: 1140px;
  margin: 0 auto;
  padding: 0 1rem;
}

.lb-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: .55rem 1.2rem;
  background: var(--black);
  border: 3px solid var(--black);
  cursor: pointer;
  user-select: none;
  box-shadow: 4px 4px 0 rgba(0,0,0,.3);
}

.lb-title {
  font-family: 'Pacifico', cursive;
  font-size: 1.1rem;
  color: var(--gold);
}

.lb-toggle {
  color: var(--gold);
  font-size: .85rem;
  font-weight: 700;
}

.lb-table-wrap {
  overflow-x: auto;
  background: var(--white);
  border: 3px solid var(--black);
  border-top: none;
  box-shadow: 4px 4px 0 rgba(0,0,0,.25);
  margin-bottom: .25rem;
}

.lb-table {
  width: 100%;
  border-collapse: collapse;
}

.lb-table thead th {
  background: var(--red);
  color: var(--white);
  font-family: 'Oswald', sans-serif;
  font-size: .85rem;
  font-weight: 700;
  padding: .4rem .5rem;
  text-align: center;
  white-space: nowrap;
  border-bottom: 3px solid var(--black);
}
.lb-th-name { text-align: left !important; padding-left: .75rem !important; }

.lb-table tbody tr { border-bottom: 1px solid #E0D5C0; }
.lb-table tbody tr:last-child { border-bottom: none; }
.lb-table tbody tr:nth-child(even) { background: #FEF9EE; }
.lb-table tbody tr:hover { background: #EEF9FA; }

.lb-rank {
  font-family: 'VT323', monospace;
  font-size: 1.4rem;
  color: var(--teal);
  text-align: center;
  padding: .2rem .5rem;
  width: 2.5rem;
}

.lb-name {
  font-family: 'Oswald', sans-serif;
  font-size: .9rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .5px;
  padding: .3rem .5rem .3rem .75rem;
  word-break: break-word;
}

.lb-stat {
  font-family: 'VT323', monospace;
  font-size: 1.5rem;
  text-align: center;
  padding: .15rem .4rem;
  color: var(--ink);
}

.lb-trends {
  text-align: center;
  padding: .2rem .5rem;
  white-space: nowrap;
}

.lb-ti {
  display: inline-block;
  font-size: .72rem;
  margin-right: .3rem;
  white-space: nowrap;
}
.lb-ti:last-child { margin-right: 0; }

.lb-up   { color: #27ae60; font-weight: 700; }
.lb-down { color: var(--red); font-weight: 700; }
.lb-flat { color: #bbb; }

/* ── Loser overlay ───────────────────────────────────────────────────────── */
#loser-overlay {
  position: fixed; inset: 0;
  z-index: 9999;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  cursor: pointer;
}
#loser-overlay.hidden { display: none; }

#loser-canvas {
  position: absolute; inset: 0;
  pointer-events: none;
  width: 100%; height: 100%;
}

.loser-content {
  position: relative; z-index: 2;
  text-align: center;
  padding: 1.5rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .85rem;
}

.loser-title {
  font-family: 'Pacifico', cursive;
  font-size: clamp(2.5rem, 11vw, 6.5rem);
  color: #888;
  text-shadow: 3px 3px 0 rgba(0,0,0,.55);
  line-height: 1.1;
}

.loser-gif {
  width: min(280px, 78vw);
  display: block;
  border: 4px solid #444;
}

.loser-beaten {
  font-family: 'Oswald', sans-serif;
  font-size: clamp(.85rem, 3vw, 1.35rem);
  color: #777;
  letter-spacing: 4px;
  text-transform: uppercase;
}

@keyframes loser-droop {
  0%   { transform: translateY(-70px) rotate(10deg); opacity: 0; }
  65%  { transform: translateY(10px) rotate(-3deg);  opacity: 1; }
  100% { transform: translateY(0)    rotate(0);      opacity: 1; }
}

/* ── Animations ──────────────────────────────────────────────────────────── */
@keyframes bounce {
  from { transform: translateY(0); }
  to   { transform: translateY(-18px); }
}

/* ── Responsive ──────────────────────────────────────────────────────────── */
@media (max-width: 520px) {
  .matches-grid { grid-template-columns: 1fr; }
  .score-input  { width: 3.2rem; }
  .player-name  { max-width: 80px; font-size: .9rem; }
  .modal-box    { margin: .75rem; }
  .lb-container { padding: 0 .5rem; }
  .lb-name      { font-size: .8rem; max-width: 90px; }
  .lb-stat      { font-size: 1.25rem; padding: .15rem .25rem; }
  .lb-ti        { font-size: .65rem; margin-right: .15rem; }
}
