/* GameTracker – visuell identitet.
   Alla vyer ljusa, på --paper. Platt, inga rundade hörn – som ett rutat
   protokoll. Mässing är accenten; kortrött bara för varningar och jumboraden. */

:root {
  --ink: #14161f;
  --ink-raised: #1c1f2b;
  --ink-line: #2a2e3d;
  --paper: #f2f0eb;
  --paper-line: #d6d3cb;
  --paper-alt: #e8e5dd;
  --felt: #17513f;
  --brass: #b8893c;
  --card-red: #c8102e;
  --muted: #7a7f8c;

  --font: "Familjen Grotesk", system-ui, -apple-system, "Segoe UI", Roboto,
    Helvetica, Arial, sans-serif;
}

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

/* [hidden] ska alltid dölja, även när en klass sätter display. */
[hidden] {
  display: none !important;
}

html {
  -webkit-text-size-adjust: 100%;
  background: var(--paper);
}

img,
svg {
  max-width: 100%;
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

body {
  margin: 0;
  /* Fyll den *dynamiska* viewporten (dvh följer Safaris hopfällbara adressfält)
     så bakgrunden alltid täcker skärmen även när innehållet är kort. */
  min-height: 100vh;
  min-height: 100dvh;
  font-family: var(--font);
  font-weight: 400;
  line-height: 1.45;
  background: var(--paper);
  color: var(--ink);
  -webkit-font-smoothing: antialiased;
  -webkit-tap-highlight-color: transparent;
  text-rendering: optimizeLegibility;
}

/* Alla vyer är ljusa. game.config.theme finns kvar på servern men klienten
   renderar bara --paper – inget mörkt läge. */

::selection {
  background: var(--brass);
  color: var(--ink);
}

.wrap {
  max-width: 46rem;
  margin-inline: auto;
  padding: 1.25rem 1rem 3rem;
  /* Sista skyddsnätet mot horisontell scroll (som får iPhone att rita
     innehållet förskjutet). clip, inte hidden – behåller lodrät scroll. */
  overflow-x: clip;
}

/* ---- Sidhuvud ---- */

.topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 1.5rem;
  padding-bottom: 0.9rem;
  border-bottom: 1px solid var(--paper-line);
}

.topbar h1 {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0;
  font-size: 1.2rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  white-space: nowrap;
}

.topbar h1::before {
  content: "";
  flex: none;
  width: 0.7rem;
  height: 0.7rem;
  background: var(--brass);
}

.account {
  position: relative;
  flex: none;
}

#account-btn {
  display: inline-flex;
  align-items: center;
  max-width: 11rem;
  font-weight: 600;
}

#identity-display {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.account-menu {
  position: absolute;
  right: 0;
  top: calc(100% + 0.4rem);
  z-index: 20;
  flex-direction: column;
  min-width: 12rem;
  background: var(--paper);
  border: 1px solid var(--paper-line);
  box-shadow: 0 6px 24px rgba(20, 22, 31, 0.18);
}

.account-menu:not([hidden]) {
  display: flex;
}

.account-status {
  margin: 0;
  padding: 0.55rem 0.9rem;
  border-bottom: 1px solid var(--paper-line);
  font-size: 0.78rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--muted);
}

/* button och a[role=menuitem] (Admin, Skicka feedback/bugg) ser likadana ut. */
.account-menu button,
.account-menu a[role="menuitem"] {
  display: flex;
  align-items: center;
  min-height: 44px;
  border: none;
  border-bottom: 1px solid var(--paper-line);
  text-align: left;
  padding: 0.7rem 0.9rem;
  color: var(--ink);
  text-decoration: none;
}

.account-menu button:last-child,
.account-menu a[role="menuitem"]:last-child {
  border-bottom: none;
}

.account-menu button:hover,
.account-menu a[role="menuitem"]:hover {
  background: var(--paper-alt);
}

/* Bekräftelsedialog (native <dialog>). */
dialog {
  width: calc(100% - 1.5rem);
  max-width: 22rem;
  margin: auto;
  padding: 1.1rem 1.2rem;
  border: 1px solid var(--ink-line);
  background: var(--paper);
  color: var(--ink);
}

dialog::backdrop {
  background: rgba(20, 22, 31, 0.55);
}

dialog p {
  margin: 0;
}

.dialog-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 1rem;
}

.dialog-actions button {
  flex: 1 1 8rem;
}

/* ---- Typografi ---- */

h1 {
  font-size: 1.2rem;
  font-weight: 700;
}

h2 {
  margin: 1.75rem 0 0.6rem;
  font-size: 1.1rem;
  font-weight: 600;
  letter-spacing: -0.01em;
}

h3 {
  margin: 0 0 0.5rem;
  font-size: 1rem;
  font-weight: 600;
}

p {
  margin: 0.6rem 0;
}

a {
  color: var(--felt);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.hint {
  color: var(--brass);
  font-size: 0.92rem;
}

.error,
[role="alert"] {
  color: var(--card-red);
  font-size: 0.95rem;
}

/* En tom felrad ska inte ta vertikal plats (märks i den täta lobbyn). */
.error:empty {
  display: none;
}

/* ---- Kontroller ---- */

/* Synlig, kontrastrik fokusmarkering för tangentbord. */
:focus-visible {
  outline: 3px solid var(--ink);
  outline-offset: 2px;
}

label {
  display: block;
  margin-block: 0.6rem;
  font-weight: 500;
}

select,
input[type="text"] {
  font: inherit;
  width: 100%;
  max-width: 24rem;
  min-height: 44px;
  padding: 0.5rem 0.6rem;
  border: 1px solid var(--paper-line);
  border-radius: 0;
  background: #fff;
  color: var(--ink);
}

/* Sekundärknapp är grundformen: transparent med tunn ram i --ink-line. */
button {
  font: inherit;
  font-weight: 500;
  min-height: 44px;
  padding: 0.55rem 1rem;
  border: 1px solid var(--ink-line);
  border-radius: 0;
  background: transparent;
  color: inherit;
  cursor: pointer;
}

button:hover {
  border-color: var(--brass);
}

/* Primär åtgärd på ljusa vyer (Starta spel, Logga in med Google, Fortsätt som gäst). */
.btn-primary {
  background: var(--ink);
  border-color: var(--ink);
  color: var(--paper);
  font-weight: 600;
}

.btn-primary:hover {
  background: var(--ink-raised);
  border-color: var(--ink-raised);
}

/* Login-sidan: Google-knappen och gästformuläret som två likvärdiga val.
   Google-knappen ligger först och tar full bredd. */
#identity-setup > .btn-primary,
#identity-setup form button {
  display: block;
  width: 100%;
}

#identity-setup form button {
  margin-top: 0.75rem;
}

/* Etiketten som eget block ovanför fältet – annars kan fokusramen lägga sig
   över texten på smala skärmar. */
.field-label {
  display: block;
  margin: 0.6rem 0 0.35rem;
  font-weight: 500;
}

#identity-name {
  display: block;
  width: 100%;
  max-width: none;
  /* 16px hindrar iOS från att zooma in vid fokus, vilket annars skjuter
     layouten så att etiketten hamnar bakom fältet. */
  font-size: 16px;
}

.setup-fineprint {
  margin: 0.5rem 0 0;
  font-size: 0.85rem;
  color: var(--muted);
}

/* Avdelare mellan de två likvärdiga vägarna in. */
.setup-or {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin: 1rem 0;
  color: var(--muted);
  font-size: 0.9rem;
  text-transform: lowercase;
}

.setup-or::before,
.setup-or::after {
  content: "";
  flex: 1;
  border-top: 1px solid var(--paper-line);
}

/* Felt-CTA: full bredd, 60 px hög. "Jag gick ut", "Starta runda", "Ny runda". */
.big-button {
  display: block;
  width: 100%;
  min-height: 60px;
  margin-block: 1rem;
  padding: 0.8rem 1rem;
  border: none;
  border-radius: 0;
  background: var(--felt);
  color: var(--paper);
  font-size: 19px;
  font-weight: 600;
}

.big-button:hover {
  background: color-mix(in srgb, var(--felt) 88%, white);
}


.nav-back {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-weight: 500;
}

/* Samma utseende när nav-back är en <button> (mellan-landningen). */
button.nav-back {
  background: none;
  border: 0;
  padding: 0;
  color: var(--brass);
  font: inherit;
  font-weight: 500;
  cursor: pointer;
}

/* ---- Startsida ---- */

/* Rubrikerna sitter tätt intill sitt innehåll, med måttlig luft ovanför, så
   förstagångsvyn (0 ligor, 0 sessioner) ryms utan scroll på 393 px. */
#home > h2 {
  margin: 1rem 0 0.4rem;
}

#home-active h2,
#home-quick h2 {
  margin: 0 0 0.4rem;
}

#home-active,
#home-quick {
  margin-bottom: 1rem;
}

/* 1. Pågående sessioner */
#mine-list {
  list-style: none;
  margin: 0.25rem 0;
  padding: 0;
}

#mine-list li {
  border-bottom: 1px solid var(--paper-line);
}

#mine-list a {
  display: flex;
  align-items: center;
  min-height: 44px;
  padding: 0.6rem 0.25rem;
  color: var(--ink);
  text-decoration: none;
}

#mine-list a:hover {
  background: var(--paper-alt);
}

/* 2. Snabbligor: namn + speltyp till vänster, "Nytt spel" till höger. */
#quick-leagues {
  list-style: none;
  margin: 0.25rem 0;
  padding: 0;
}

.quick-league {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  min-height: 52px;
  padding: 0.4rem 0;
  border-bottom: 1px solid var(--paper-line);
}

.quick-league-info {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.quick-league-name {
  font-weight: 600;
  overflow-wrap: anywhere;
}

.quick-league-game {
  font-size: 0.82rem;
  color: var(--muted);
}

.quick-league button {
  flex: none;
  min-height: 44px;
  white-space: nowrap;
}

/* 3. Rullista + knappar */
.league-row-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  margin-top: 0.3rem;
}

.league-row-controls select {
  flex: 1 1 10rem;
  min-width: 0;
  min-height: 44px;
}

.league-row-controls button {
  flex: none;
  min-height: 44px;
  white-space: nowrap;
}

/* 4. Skapa liga: knapp som expanderar till ett formulär på plats. */
#home-create {
  margin: 1rem 0;
}

#create-league-toggle {
  min-height: 44px;
}

#create-league-form {
  margin-top: 0.6rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

#create-league-form input {
  min-height: 44px;
}

/* Knappval för speltyp – används av "Skapa liga" och "Spela utanför ligor". */
.type-choice {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.type-choice button {
  flex: 1 1 8rem;
  min-height: 44px;
}

.type-choice button.selected {
  border-color: var(--felt);
  background: color-mix(in srgb, var(--felt) 14%, transparent);
  color: var(--felt);
  font-weight: 600;
}

/* 5. Spela utanför ligor */
#free-play {
  margin: 0.4rem 0;
}

#league-empty,
#home-standings-empty {
  color: var(--muted);
}

/* Ligavyns "Starta nytt spel" strax under rubriken. */
#league-new-game {
  margin: 0.4rem 0 0.6rem;
}

/* ---- Sessionsvy ---- */

/* Mobil: en kolumn. Ordningen (deltagare före QR under en runda) styrs med
   flex-order, inte dubblerad markup. */
#session-body {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

#round-area,
#team-body {
  order: 1;
}
.session-side {
  order: 2;
}
#qr-block {
  order: 4;
}
#copy-block {
  order: 5;
}
#session-back {
  order: 6;
}

/* Från 700 px: vänster = huvudknapp, QR, kopiera länk, tillbaka;
   höger = deltagarlistan; placeringarna i full bredd under båda. */
@media (min-width: 700px) {
  #session-body {
    display: grid;
    grid-template-columns: 1fr 1fr;
    column-gap: 1.5rem;
    row-gap: 0.75rem;
    align-items: start;
  }
  #round-area,
  #team-body {
    grid-column: 1;
    grid-row: 1;
  }
  #qr-block {
    grid-column: 1;
    grid-row: 2;
  }
  #copy-block {
    grid-column: 1;
    grid-row: 3;
  }
  #session-back {
    grid-column: 1;
    grid-row: 4;
  }
  .session-side {
    grid-column: 2;
    grid-row: 1 / 5;
  }
}

.session-side h2 {
  margin-top: 0;
}

/* Deltagarlistan (#seat-list) är den delade .result-table – se avsnittet längre
   ned. Bara sessionsspecifika småsaker ligger kvar här. */
#seat-list {
  margin: 0.5rem 0;
}

/* Diskret: platshållaren kan inte rapportera själv. */
.placeholder-tag {
  margin-left: 0.4rem;
  font-size: 0.8rem;
  font-style: italic;
  color: var(--muted);
}

#add-player-form {
  margin-top: 0.9rem;
}

#add-player-form label {
  margin: 0 0 0.35rem;
  font-size: 0.85rem;
  font-weight: 400;
  color: var(--muted);
}

.add-player-row {
  display: flex;
  gap: 0.5rem;
}

.add-player-row input[type="text"] {
  flex: 1;
  min-width: 0;
}

.add-player-row button {
  flex: none;
  white-space: nowrap;
}

#add-player-error {
  margin: 0.4rem 0 0;
}

#toggle-qr,
#copy-link {
  width: 100%;
}

/* Alltid synlig, markerbar join-länk under Kopiera länk-knappen. */
#join-link {
  width: 100%;
  margin-top: 0.5rem;
  padding: 0.5rem 0.6rem;
  font-size: 0.8rem;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--ink-line);
  user-select: all;
  -webkit-user-select: all;
}

#qrcode {
  width: max-content;
  max-width: 100%;
  padding: 0.75rem;
  background: #fff;
  color: var(--ink); /* för reservtexten om QR-biblioteket inte laddar */
}

#qrcode img,
#qrcode canvas {
  display: block;
  width: 240px;
  height: 240px;
  max-width: 100%;
}

/* Smal skärm: mindre QR så lobbyn inte tvingar fram scroll. Fortfarande
   skannbar på nära håll mellan två telefoner. */
@media (max-width: 420px) {
  #qrcode img,
  #qrcode canvas {
    width: 168px;
    height: 168px;
  }
}

#copy-status {
  min-height: 1.2em;
  margin: 0.4rem 0 0;
  font-size: 0.9rem;
  color: var(--muted);
}

/* Diskret återgång: tummen når den, men den tävlar inte med huvudknappen. */
#session-back {
  width: 100%;
  color: var(--muted);
  font-weight: 500;
}

#session-back:hover {
  border-color: var(--brass);
  color: var(--ink);
}

/* Vägen ut ur en felad session – annars är sidan en återvändsgränd. */
#session-error-back {
  margin-top: 0.75rem;
}

#session-league-link a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-weight: 500;
}

#abandon-round {
  margin-top: 0.75rem;
}

/* ---- Rundrostern + utgångslistan ----
   Kvarvarande spelare som ljusa plattor på det mörka bordet, fast ordning. Ett
   tryck rapporterar direkt; ångra sker inuti raden – .rr-action fylls, raden
   växer nedåt, syskonen ligger still, nedräkningen byter bara en siffra. En rad
   tas bort först när personen är avgjord (då flyttas den till utgångslistan). */
#round-roster-wrap,
#exit-list-wrap {
  margin: 0.5rem 0 1rem;
}

#round-roster-heading,
#exit-list-heading {
  margin: 0 0 0.5rem;
  font-size: 0.78rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--muted);
}

#round-roster {
  list-style: none;
  margin: 0;
  padding: 0;
}

.rr-row {
  margin-block: 4px;
  padding: 0.6rem 0.8rem;
  background: var(--paper-alt);
  border: 1px solid var(--paper-line);
  color: var(--ink);
}

/* Namnraden: namn till vänster, dörr-ikonen ("gå ut") till höger. */
.rr-head {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.rr-name {
  flex: 1;
  min-width: 0;
  font-weight: 500;
}

/* Ett patologiskt långt namn får inte tvinga fram horisontell scroll. */
.rr-name,
.rt-name-text,
.lobby-pos-name,
#mine-list a {
  overflow-wrap: anywhere;
}

.rr-row.is-me {
  border-left: 3px solid var(--felt);
  padding-left: calc(0.8rem - 2px);
}

.rr-row.is-me .rr-name {
  font-weight: 700;
}

/* Åtgärdsdelen: tar ingen höjd när den är tom, växer nedåt när den fylls. */
.rr-action:empty {
  display: none;
}

.rr-action > * {
  margin-top: 0.55rem;
}

/* Knapparna ska skilja sig från plattan de ligger i: egen bakgrund, tydlig kant.
   Samma stil i rundrostern och i deltagartabellens bekräftelse-/ångra-rad. */
.rr-action button,
.result-table tr.rt-sub td button {
  width: 100%;
  min-height: 44px;
  background: #fff;
  border: 2px solid var(--ink-line);
  color: var(--ink);
  font-weight: 600;
}

.rr-action button:hover,
.result-table tr.rt-sub td button:hover {
  border-color: var(--brass);
}

/* "Gå ut": en kvadratisk grön knapp med vit dörr-ikon som kapar radens högra
   ände. Negativa marginaler drar ut den till radens kant och över hela radhöjden
   (radens padding är 0.6rem 0.8rem); namnet ligger kvar centrerat. */
.rr-go {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  margin: -0.6rem -0.8rem -0.6rem 0;
  padding: 0;
  background: var(--felt);
  border: 0;
  color: #fff;
  cursor: pointer;
}

.rr-go svg {
  display: block;
  width: 1.5rem;
  height: 1.5rem;
}

.rr-go:hover {
  background: color-mix(in srgb, var(--felt) 88%, white);
}

.rr-go:disabled {
  opacity: 0.55;
}

.rr-btns {
  display: flex;
  gap: 0.5rem;
}

.rr-btns button {
  flex: 1;
}

.rr-q {
  margin: 0.55rem 0 0;
  font-weight: 600;
}

.rr-undo-text {
  display: block;
  font-size: 0.9rem;
  color: var(--muted);
}

.rr-undo-btn {
  margin-top: 0.4rem;
}

.rr-count {
  font-variant-numeric: tabular-nums;
  font-weight: 700;
}

/* Utgångslistan: löpande resultat, numrerad, i utgångsordning. Egen radnummer-
   kolumn (inte ::marker) så raden kan vara en flexbox med rättningspilar. */
#exit-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

#exit-list li {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.2rem 0;
  color: var(--muted);
}

#exit-list .exit-rank {
  flex: none;
  min-width: 1.5rem;
  text-align: right;
  font-variant-numeric: tabular-nums;
  color: var(--muted);
}

#exit-list .exit-name {
  flex: 1;
  overflow-wrap: anywhere;
}

#exit-list li.is-winner .exit-name {
  color: var(--brass);
  font-weight: 600;
}

/* Rättningspilar på en avslutad runda. 44 px tryckyta även på 375 px. */
.exit-arrows {
  display: flex;
  flex: none;
  gap: 0.25rem;
}

.exit-arrow {
  min-width: 44px;
  min-height: 44px;
  padding: 0;
  background: var(--paper);
  border: 1px solid var(--ink-line);
  color: var(--ink);
  font-size: 0.85rem;
  line-height: 1;
}

.exit-arrow:disabled {
  opacity: 0.3;
}

/* Arkiverad session / annan lägesförklaring högst upp i sessionsvyn. */
.session-note {
  margin: 0 0 0.75rem;
  padding: 0.5rem 0.75rem;
  background: color-mix(in srgb, var(--brass) 16%, transparent);
  border-left: 3px solid var(--brass);
  font-size: 0.9rem;
}

/* "Lägg till spelare" i deltagarlistan – samma komprimerade väljare som lobbyn. */
#add-player {
  margin-top: 0.9rem;
}

#add-player > button {
  min-height: 44px;
}

#add-player .lobby-pos-fill {
  gap: 0.5rem;
}

/* ---- Lagform (bridge) ---- */

.team-vuln {
  margin: 0.9rem 0;
  padding: 0.55rem 0.8rem;
  background: var(--felt);
  color: var(--paper);
  font-weight: 600;
}

#bid-matrix {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 0.3rem;
  max-width: 26rem;
}

#bid-matrix button {
  min-height: 44px;
  padding: 0.3rem;
  font-variant-numeric: tabular-nums;
}

/* Dubblingsrutorna: exakt samma ruta som budrutorna, bara annan text. */
#bid-matrix .bid-doubling {
  font-weight: 700;
  letter-spacing: 0.05em;
}

#team-declarer {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-top: 0.3rem;
}

#team-declarer button {
  flex: 1 1 45%;
  min-height: 44px;
}

.team-field {
  margin-top: 1rem;
}

.team-field-label {
  display: block;
  margin-bottom: 0.35rem;
  font-size: 0.78rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--muted);
}

/* Spara giv / Passad giv – bredvid varandra längst ner. */
.team-deal-actions {
  display: flex;
  gap: 0.6rem;
  align-items: stretch;
  margin-top: 1.2rem;
}

.team-deal-actions #team-save-deal {
  flex: 2;
  width: auto;
  margin: 0;
}

.team-deal-actions #team-pass {
  flex: 1;
  min-height: 60px;
}

#team-abandon {
  margin-top: 0.75rem;
}

/* Vald knapp i matris/deklarant. */
#team-body button.selected {
  border-color: var(--brass);
  color: var(--brass);
  font-weight: 700;
  background: color-mix(in srgb, var(--brass) 14%, transparent);
}

.team-stepper {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  margin: 0.5rem 0;
}

.team-stepper button {
  min-width: 52px;
  min-height: 52px;
  font-size: 1.4rem;
  font-weight: 700;
}

#team-tricks-value {
  font-size: 2rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  min-width: 2.5ch;
  text-align: center;
}

/* Färgade färgsymboler i budmatrisen (och i resultattabellen). */
.suit-clubs {
  color: #2a2e3d;
}
.suit-diamonds {
  color: #e05a5a;
}
.suit-hearts {
  color: var(--card-red);
}
.suit-spades {
  color: var(--ink);
}

/* Resultattabell – i sidokolumnen och på budsidan. */
#team-results h2 {
  margin-top: 0;
}

/* NS/ÖV-totalerna som rubrikrad ovanför tabellen (båda ställena). */
.team-results-head {
  margin: 0 0 0.4rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

#team-recap-results {
  margin-top: 1.2rem;
}

.team-results-table {
  width: 100%;
  border-collapse: collapse;
  font-variant-numeric: tabular-nums;
}

.team-results-table th,
.team-results-table td {
  padding: 0.35rem 0.45rem;
  border-bottom: 1px solid var(--paper-line);
  text-align: right;
  white-space: nowrap;
}

.team-results-table th {
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--muted);
}

.team-results-table td.bid,
.team-results-table th:nth-child(2) {
  text-align: left;
}

/* ---- Lobby ---- */
/* Renderas i sessionsvyn för spel med requiresLobby (bridge). Ljust tema.
   Komprimerad: hela lobbyn med tomma platser ska rymmas utan scroll på 375 px. */
#lobby {
  order: 0;
}

@media (min-width: 700px) {
  #lobby {
    grid-column: 1 / -1;
    grid-row: 1;
  }
}

#lobby h2 {
  margin: 0 0 0.3rem;
  font-size: 1.05rem;
}

#lobby-setup {
  margin: 0 0 0.5rem;
  padding: 0.5rem 0.7rem;
  background: var(--paper-alt);
  border-left: 3px solid var(--felt);
}

.lobby-field {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.15rem 0.9rem;
  margin: 0.35rem 0 0;
  padding: 0;
  border: 0;
  font-weight: 500;
}

.lobby-field:first-child {
  margin-top: 0;
}

.lobby-field legend {
  flex-basis: 100%;
  padding: 0;
  font-weight: 500;
}

#lobby-setup input[type="number"] {
  font: inherit;
  min-height: 40px;
  margin-top: 0.2rem;
  padding: 0.4rem 0.5rem;
  border: 1px solid var(--paper-line);
  background: #fff;
  color: var(--ink);
  width: 6rem;
}

.lobby-field label {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  min-height: 40px;
  margin: 0;
  font-weight: 400;
}

.lobby-pos {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  padding: 0.3rem 0;
  border-bottom: 1px solid var(--paper-line);
}

.lobby-pos-label {
  flex: 0 0 3.5rem;
  font-weight: 600;
}

.lobby-pos-name {
  flex: 1 1 7rem;
}

/* Tom plats: bara "Lägg till", skjuten åt höger. */
.lobby-add-btn {
  margin-left: auto;
  min-height: 40px;
}

.lobby-pos-actions,
.lobby-pos-fill {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  width: 100%;
}

.lobby-add {
  display: flex;
  flex: 1 1 8rem;
  gap: 0.4rem;
}

.lobby-add input[type="text"] {
  flex: 1;
  min-width: 0;
}

.lobby-pos select,
.lobby-pos-fill button,
.lobby-add input[type="text"] {
  min-height: 40px;
}

.lobby-cancel {
  color: var(--muted);
  font-weight: 500;
}

#lobby-start-hint {
  margin: 0 0 0.25rem;
}

#lobby-start {
  min-height: 52px;
  margin: 0;
}

/* Avstängd start: dämpad grå, inte grön – färgen ska inte lova ett tryck. */
#lobby-start:disabled,
#lobby-start:disabled:hover {
  background: var(--paper-line);
  color: var(--muted);
  border: none;
  cursor: not-allowed;
}

/* ---- Delad resultattabell ----
   EN tabell i alla vyer: startsidans topplista, ligatabellen (#/l/ID) och
   sessionens deltagarlista (#seat-list). Kolumner: spelare, vinster, förluster,
   vägd poäng. I removable-läge (lobby / mellan rundor) får varje rad en kompakt
   ta-bort-ikon direkt efter namnet – samma textstorlek som annars. */

.table-scroll {
  overflow-x: auto;
}

.result-table {
  width: 100%;
  border-collapse: collapse;
  font-variant-numeric: tabular-nums;
}

.result-table th,
.result-table td {
  padding: 0.5rem 0.55rem;
  border-bottom: 1px solid var(--paper-line);
  text-align: right;
  white-space: nowrap;
}

.result-table th {
  font-size: 0.8rem;
  font-weight: 600;
  color: color-mix(in srgb, var(--ink) 68%, var(--paper));
}

.result-table th abbr {
  text-decoration: none;
}

/* V/F/Poäng-rubrikerna: ett tryck roterar sorteringen mellan de tre (alla
   fallande). min-height ger 44px tryckyta trots tabellcellens knappa padding. */
.result-table th.rt-sortable {
  min-height: 44px;
  cursor: pointer;
  user-select: none;
}

.result-table th.rt-sortable:hover {
  color: var(--brass);
}

.result-table th.rt-sort-active {
  color: var(--brass);
}

.rt-sort-arrow {
  margin-left: 0.15rem;
  font-size: 0.7em;
}

/* Namnkolumnen sväljer allt utrymme som blir över; sifferkolumnerna krymper
   till innehållet. */
.result-table th.rt-name,
.result-table td.rt-name {
  width: 100%;
  text-align: left;
  white-space: normal;
}

/* Namn till vänster, ta-bort-ikonen direkt efter namnet (inte längst ut). */
.rt-name-line {
  display: flex;
  align-items: center;
  gap: 0.4rem;
}

.rt-name-text {
  flex: 0 1 auto;
  min-width: 0;
}

/* Ta-bort-ikon: en röd cirkel med ett tvärstreck (⊖), liten men med minst 44px
   tryckyta via padding – det synliga och det tryckbara behöver inte vara lika
   stora. Negativ marginal håller radhöjden nere. */
.rt-remove {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: -0.55rem 0;
  padding: 0.55rem;
  min-width: 44px;
  min-height: 44px;
  background: none;
  border: 0;
  color: var(--card-red);
  cursor: pointer;
}

.rt-remove svg {
  display: block;
  width: 1.25rem;
  height: 1.25rem;
}

.rt-remove:hover {
  color: color-mix(in srgb, var(--card-red) 72%, black);
}

/* Etta (topplistorna sorteras på vägd poäng) markeras i mässing. */
.result-table tr.rt-first td {
  color: var(--brass);
  font-weight: 600;
  background: color-mix(in srgb, var(--brass) 9%, transparent);
}

/* Egen rad: samma diskreta feltmarkering som i rundrostern. */
.result-table tr.rt-me td.rt-name {
  box-shadow: inset 3px 0 0 var(--felt);
}

/* Rad med utfälld bekräftelse hör ihop med sin bekräftelserad nedanför. */
.result-table tr.rt-open td {
  border-bottom: 0;
}

/* Bekräftelse-/ångra-rad under en deltagarrad: full bredd, ingen topplinje,
   vänsterställd. Knappstilen delas med rundrostern (.rr-action). */
.result-table tr.rt-sub td {
  padding-top: 0;
  border-bottom: 1px solid var(--paper-line);
  text-align: left;
  white-space: normal;
}

.result-table tr.rt-sub > td > * {
  margin-top: 0.55rem;
}

.window-toggle {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-block: 0.7rem;
}

.window-toggle button {
  flex: 1 1 3.2rem;
  min-height: 44px;
  padding: 0.4rem 0.3rem;
}

.window-toggle button.active {
  border-color: var(--brass);
  color: var(--brass);
  font-weight: 600;
  background: color-mix(in srgb, var(--brass) 12%, transparent);
}

.jumbo-box {
  margin-top: 1rem;
  padding: 0.8rem 0.9rem;
  background: var(--paper-alt);
  border-left: 3px solid var(--card-red);
}

.jumbo-box h3 {
  margin: 0 0 0.25rem;
  font-size: 0.78rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--muted);
}

.jumbo-box p {
  margin: 0;
}

/* ---- Protokollförarflödets mellan-landning (välj deltagare) ---- */

#pick-players-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem 1rem;
  margin: 0.6rem 0;
}

.player-check {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  min-height: 40px;
  font-weight: 400;
}

.player-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.2rem;
  padding: 0.15rem 0.2rem 0.15rem 0.5rem;
  background: color-mix(in srgb, var(--felt) 12%, transparent);
  border: 1px solid var(--felt);
}

.player-chip button {
  min-width: 32px;
  min-height: 32px;
  padding: 0;
  background: none;
  border: 0;
  color: var(--ink);
  font-size: 1.1rem;
  cursor: pointer;
}

.link-button {
  background: none;
  border: 0;
  padding: 0.4rem 0;
  color: var(--brass);
  font-weight: 600;
  cursor: pointer;
  text-decoration: underline;
}

#pick-players-add {
  margin: 0.6rem 0;
}

#pick-players-start {
  margin-top: 0.75rem;
}

/* Sidoväg längst ner: QR + länk för den som vill ansluta själv. */
.pick-share {
  margin-top: 1.5rem;
  padding-top: 1rem;
  border-top: 1px solid var(--paper-line);
}

.pick-share .hint {
  margin-top: 0;
}

#pick-qrcode {
  width: max-content;
  max-width: 100%;
  margin: 0.5rem 0 0.75rem;
  padding: 0.75rem;
  background: #fff;
  color: var(--ink);
}

#pick-qrcode img,
#pick-qrcode canvas {
  display: block;
  width: 220px;
  height: 220px;
  max-width: 100%;
}

#pick-copy-link {
  width: 100%;
}

#pick-join-link {
  width: 100%;
  margin-top: 0.5rem;
  padding: 0.5rem 0.6rem;
  font-size: 0.8rem;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--ink-line);
  user-select: all;
  -webkit-user-select: all;
}

#pick-copy-status {
  min-height: 1.2em;
  margin: 0.4rem 0 0;
  font-size: 0.9rem;
  color: var(--muted);
}

@media (max-width: 420px) {
  #pick-qrcode img,
  #pick-qrcode canvas {
    width: 168px;
    height: 168px;
  }
}

/* ---- Claim & admin ---- */

.claim-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin: 1rem 0;
}

.admin-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.9rem;
}

.admin-table th,
.admin-table td {
  padding: 0.4rem 0.5rem;
  border-bottom: 1px solid var(--paper-line);
  text-align: left;
  vertical-align: top;
}

.admin-table td.num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.admin-table td.admin-email {
  font-size: 0.82rem;
  color: var(--muted);
  overflow-wrap: anywhere;
}

.admin-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}

.admin-actions button {
  padding: 0.3rem 0.5rem;
  font-size: 0.82rem;
}

.admin-actions button.danger {
  border-color: var(--card-red);
  color: var(--card-red);
}

.admin-round {
  margin: 0.6rem 0;
  padding: 0.6rem 0.7rem;
  background: var(--paper-alt);
  border: 1px solid var(--paper-line);
}

.admin-round-head {
  margin: 0 0 0.4rem;
  font-size: 0.82rem;
  color: var(--muted);
}

.admin-round-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.admin-round-list li {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.25rem 0;
}

.admin-round-list .admin-rank {
  width: 1.8rem;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}

.admin-round-list .admin-name {
  flex: 1;
  min-width: 0;
  overflow-wrap: anywhere;
}

.admin-round-list button {
  min-width: 40px;
  min-height: 40px;
}

/* ---- Smalt: ner till 320 px ---- */

@media (max-width: 24rem) {
  .wrap {
    padding: 1rem 0.75rem 2.5rem;
  }
  .topbar h1 {
    font-size: 1.05rem;
  }
  #account-btn {
    max-width: 8.5rem;
  }
  .result-table th,
  .result-table td {
    padding: 0.45rem 0.4rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
