/* ============================================================
   GAMEWEB — Spielhalle
   Riso-Arcade: Aubergine-Nacht, harte Schlagschatten, Marquee-Typo
   ============================================================ */

@font-face{font-family:'Rubik';src:url('../fonts/rubik-latin-400-normal.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'Rubik';src:url('../fonts/rubik-latin-500-normal.woff2') format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:'Rubik';src:url('../fonts/rubik-latin-700-normal.woff2') format('woff2');font-weight:700;font-display:swap}
@font-face{font-family:'Rubik';src:url('../fonts/rubik-latin-900-normal.woff2') format('woff2');font-weight:900;font-display:swap}
@font-face{font-family:'Marquee';src:url('../fonts/rubik-mono-one-latin-400-normal.woff2') format('woff2');font-weight:400;font-display:swap}

:root{
  --ink:#1A1033;
  --ink-deep:#120A25;
  --panel:#2B1A52;
  --panel-2:#352062;
  --paper:#FFF3DC;
  --paper-dim:#C9B8E0;
  --gold:#FFC24B;
  --pink:#FF3F7D;
  --cyan:#2FE3D4;
  --lime:#BDF24A;
  --line:rgba(255,243,220,.16);

  --s1:4px; --s2:8px; --s3:12px; --s4:20px; --s5:32px; --s6:52px; --s7:84px;

  --t-xs:12.8px; --t-sm:14.5px; --t-base:16.5px; --t-md:21px; --t-lg:28px; --t-xl:37px; --t-2xl:50px; --t-3xl:67px;
}

*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%}

body{
  background:var(--ink);
  color:var(--paper);
  font:400 var(--t-base)/1.55 'Rubik',system-ui,-apple-system,sans-serif;
  min-height:100vh;
  overflow-x:hidden;
}

/* dot grid: the arcade carpet, very quiet */
body::before{
  content:'';position:fixed;inset:0;z-index:0;pointer-events:none;
  background-image:radial-gradient(rgba(255,243,220,.07) 1px,transparent 1px);
  background-size:22px 22px;
}

h1,h2,h3{margin:0;font-weight:900;line-height:1.08}
p{margin:0}
button{font:inherit;color:inherit}
a{color:var(--cyan)}

.wrap{position:relative;z-index:1;max-width:1120px;margin:0 auto;padding:0 var(--s4)}

/* ---------- Topbar ---------- */
.topbar{
  position:relative;z-index:2;
  display:flex;align-items:center;gap:var(--s4);
  padding:var(--s4) 0 var(--s3);
  border-bottom:2px solid var(--line);
  flex-wrap:wrap;
}
.mark{
  font-family:'Marquee';font-size:var(--t-md);letter-spacing:.02em;
  color:var(--gold);text-decoration:none;
  display:inline-flex;align-items:baseline;gap:.5ch;
}
.mark b{color:var(--paper);font-weight:400}
.mark-dot{width:10px;height:10px;border-radius:50%;background:var(--pink);display:inline-block;margin-left:2px}
.topbar .spacer{flex:1}
/* Wie viele gerade in den Hallen sind — oben rechts, klein und ruhig */
.online{
  display:flex;align-items:center;gap:7px;
  padding:5px 11px;border-radius:999px;
  background:rgba(255,243,220,.06);border:1px solid rgba(255,243,220,.12);
  font-size:13px;color:var(--paper-dim);white-space:nowrap;
}
.online b{color:var(--lime);font-size:15px}
.online .punkt{width:7px;height:7px;border-radius:50%;background:#6A5A86}
.online.da .punkt{background:var(--lime);box-shadow:0 0 0 3px rgba(189,242,74,.18)}
@media (max-width:520px){ .online .wort{display:none} }

/* name badge */
.badge{
  display:none;align-items:center;gap:var(--s2);
  background:var(--panel);border:2px solid var(--line);border-radius:999px;
  padding:6px 6px 6px 14px;box-shadow:3px 3px 0 rgba(0,0,0,.45);
}
.badge.on{display:inline-flex}
.badge .dot{width:9px;height:9px;border-radius:50%;background:var(--paper-dim);flex:none}
.badge.live .dot{background:var(--lime);box-shadow:0 0 0 3px rgba(189,242,74,.22)}
.badge .nm{font-weight:700;max-width:12ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.badge .st{font-size:var(--t-xs);color:var(--paper-dim)}

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);
  background:var(--gold);color:#2A1500;border:none;border-radius:999px;
  font-weight:700;font-size:var(--t-base);padding:12px 22px;cursor:pointer;
  box-shadow:0 4px 0 #B07A16;
  transition:transform .06s ease,box-shadow .06s ease;
}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 #B07A16}
.btn.pink{background:var(--pink);color:#3A0014;box-shadow:0 4px 0 #A8224F}
.btn.pink:active{box-shadow:0 1px 0 #A8224F}
.btn.cyan{background:var(--cyan);color:#00302C;box-shadow:0 4px 0 #189186}
.btn.cyan:active{box-shadow:0 1px 0 #189186}
.btn.ghost{background:transparent;color:var(--paper);border:2px solid var(--line);box-shadow:none;padding:10px 20px}
.btn.ghost:active{transform:translateY(2px)}
.btn.ghost:hover{border-color:var(--paper-dim)}
.btn.sm{font-size:var(--t-sm);padding:9px 16px}
.btn[disabled]{opacity:.45;cursor:not-allowed;box-shadow:none;transform:none}

:where(button,input,a,[tabindex]):focus-visible{
  outline:3px solid var(--cyan);outline-offset:3px;border-radius:4px;
}

/* ---------- Inputs ---------- */
.field{
  background:var(--ink-deep);color:var(--paper);
  border:2px solid var(--line);border-radius:10px;
  font:700 var(--t-md)/1.2 'Rubik',sans-serif;
  padding:13px 16px;width:100%;min-width:0;
}
.field::placeholder{color:#6A5A86;font-weight:400}
.field:focus{border-color:var(--cyan);outline:none}

/* ---------- Hero / Lobby ---------- */
.hero{padding:var(--s6) 0 var(--s5)}
.hero h1{
  font-family:'Marquee';font-weight:400;
  font-size:clamp(34px,8.5vw,var(--t-3xl));
  line-height:1;letter-spacing:-.01em;max-width:18ch;
}
.hero h1 em{font-style:normal;color:var(--gold)}
/* Gross der Titel, klein die Zeile darunter */
.hero h1 .klein{
  display:block;margin-top:var(--s2);
  font-family:'Rubik',system-ui,sans-serif;font-weight:400;
  font-size:clamp(18px,4.4vw,26px);letter-spacing:.01em;
  color:var(--paper-dim);
}

.lobby{
  margin-top:var(--s5);background:var(--panel);
  border:2px solid var(--line);border-radius:14px;
  box-shadow:8px 8px 0 rgba(0,0,0,.5);
  padding:var(--s4);
}
.lobby h2{font-size:var(--t-md);margin-bottom:var(--s3)}
.lobby .row{display:flex;gap:var(--s2);align-items:stretch;flex-wrap:wrap}
.lobby .row .field{flex:1 1 200px}
.lobby .hint{margin-top:var(--s3);font-size:var(--t-sm);color:var(--paper-dim);max-width:60ch}
.lobby .hint code{
  font-family:'Marquee';font-size:.92em;color:var(--gold);
  background:var(--ink-deep);padding:2px 7px;border-radius:5px;
}
.lobby-split{display:grid;gap:var(--s4);grid-template-columns:1fr 1fr;align-items:start}
@media(max-width:720px){.lobby-split{grid-template-columns:1fr}}
.lobby-split>div{min-width:0}
.sep-label{font-size:var(--t-sm);color:var(--paper-dim);margin-bottom:var(--s2)}

/* connection state strip */
.linkbar{
  display:none;margin-top:var(--s4);align-items:center;gap:var(--s3);flex-wrap:wrap;
  background:var(--ink-deep);border:2px solid var(--lime);border-radius:12px;padding:var(--s3) var(--s4);
}
.linkbar.on{display:flex}
.linkbar .crew{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.crew .one{
  display:inline-flex;align-items:center;gap:6px;
  background:var(--panel);border:2px solid var(--line);border-radius:999px;
  padding:5px 12px;font-weight:700;font-size:var(--t-sm);
}
.crew .one.ich{border-color:var(--lime);color:var(--lime)}
.crew .one b{font-size:11px;font-weight:700;color:var(--gold);font-family:'Marquee'}
.linkbar .msg{color:var(--paper-dim);font-size:var(--t-sm);flex:1}

/* ---------- Cabinet grid ---------- */
.shelf{padding:var(--s4) 0 var(--s7)}
.shelf-head{display:flex;align-items:baseline;gap:var(--s3);margin-bottom:var(--s4);flex-wrap:wrap}
.shelf-head h2{font-family:'Marquee';font-weight:400;font-size:var(--t-lg)}
.shelf-head .count{color:var(--paper-dim);font-size:var(--t-sm)}

.grid{display:grid;gap:var(--s4);grid-template-columns:repeat(auto-fill,minmax(258px,1fr))}
/* Steht nur ein Automat im Regal, soll er nicht verloren in der Ecke kleben */
.grid.eins{grid-template-columns:minmax(0,min(560px,100%));justify-content:center}

.cab{
  --acc:var(--cyan);
  position:relative;display:flex;flex-direction:column;text-align:left;
  background:var(--panel);border:2px solid var(--line);border-radius:12px;
  padding:0;cursor:pointer;overflow:hidden;
  box-shadow:5px 5px 0 var(--acc);
  transition:box-shadow .1s ease,border-color .1s ease;
}
.cab:hover,.cab:focus-visible{box-shadow:8px 8px 0 var(--acc);border-color:var(--paper-dim)}
.cab:active{box-shadow:2px 2px 0 var(--acc)}
.cab .screen{
  display:block;width:100%;aspect-ratio:16/9;background:var(--ink-deep);
  border-bottom:2px solid var(--line);
}
.cab .plate{padding:var(--s3) var(--s3) var(--s4)}
.cab .ttl{font-family:'Marquee';font-weight:400;font-size:var(--t-base);color:var(--acc);line-height:1.2}
.cab .tag{margin-top:6px;font-size:var(--t-sm);color:var(--paper-dim)}
.cab .marks{display:flex;gap:5px;margin-top:var(--s3);flex-wrap:wrap}
.chip{
  font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:999px;
  background:var(--ink-deep);color:var(--paper-dim);border:1px solid var(--line);
}
.chip.hot{background:var(--acc);color:#140A28;border-color:transparent}

/* ---------- Öffentliche Hallen ---------- */
.raeume{margin-top:var(--s4);padding-top:var(--s4);border-top:2px dashed var(--line)}
.raumliste{display:flex;flex-wrap:wrap;gap:var(--s2);margin:var(--s2) 0}
.raumzahl{font-size:var(--t-sm);color:var(--paper-dim);margin-top:var(--s2)}
.raumzahl b{color:var(--lime);font-size:var(--t-base)}
.raumliste .btn .zahl{opacity:.75;font-weight:400;margin-left:.4ch}
.raummsg{font-weight:700;color:var(--lime);font-size:var(--t-sm);min-height:1.3em;margin-bottom:var(--s2)}

/* ---------- Geheimcode ---------- */
.coderow{
  display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap;
  margin-top:var(--s4);padding-top:var(--s4);
  border-top:2px dashed var(--line);
}
.coderow .sep-label{margin:0;flex:none}
.coderow .field{flex:1;min-width:150px;max-width:280px;font-size:var(--t-base)}

/* ---------- Game shell ---------- */
.stage{
  position:fixed;inset:0;z-index:50;display:none;
  flex-direction:column;background:var(--ink-deep);
}
.stage.on{display:flex}
.stage-bar{
  display:flex;align-items:center;gap:var(--s3);
  padding:var(--s2) var(--s3);border-bottom:2px solid var(--line);
  flex:none;min-height:54px;
}
.stage-bar .gname{font-family:'Marquee';font-size:var(--t-sm);color:var(--gold);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stage-bar .score{
  display:flex;align-items:center;gap:var(--s2);margin:0 auto;
  font-family:'Marquee';font-size:var(--t-md);
}
.stage-bar .score .p1{color:var(--cyan)}
.stage-bar .score .p2{color:var(--pink)}
.stage-bar .score .vs{color:var(--paper-dim);font-size:var(--t-sm)}
.stage-bar .nm{font-family:'Rubik';font-weight:700;font-size:var(--t-sm);max-width:9ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stage-bar .goal{font-size:11.5px;font-weight:700;color:var(--paper-dim);white-space:nowrap}
.stage.solo .score,.stage.solo .goal{display:none}
.stage-wrap{flex:1;position:relative;display:flex;align-items:center;justify-content:center;min-height:0;padding:var(--s2)}
#play{
  display:block;max-width:100%;max-height:100%;
  background:#0C0618;border-radius:10px;border:2px solid var(--line);
  touch-action:none;
}
.lag{
  position:absolute;top:var(--s2);right:var(--s3);
  font-size:11px;color:var(--paper-dim);font-weight:700;
  background:rgba(18,10,37,.8);padding:3px 8px;border-radius:999px;
}

/* overlay card inside stage */
.curtain{
  position:absolute;inset:0;display:none;align-items:flex-start;justify-content:center;
  background:rgba(18,10,37,.86);padding:var(--s4);
  overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
}
.curtain.on{display:flex}
.curtain .card{margin:auto}
.card{
  background:var(--panel);border:2px solid var(--line);border-radius:14px;
  box-shadow:8px 8px 0 rgba(0,0,0,.5);
  padding:var(--s5) var(--s4);max-width:460px;width:100%;text-align:center;
}
.card h3{font-family:'Marquee';font-weight:400;font-size:var(--t-lg);margin-bottom:var(--s2)}
.card .big{font-family:'Marquee';font-size:var(--t-xl);color:var(--gold);margin-bottom:var(--s2)}
.card p{color:var(--paper-dim);margin-bottom:var(--s4)}
.card .acts{display:flex;gap:var(--s2);justify-content:center;flex-wrap:wrap}
.keys{
  display:grid;grid-template-columns:max-content 1fr;gap:6px var(--s3);
  text-align:left;margin:0 auto var(--s4);max-width:320px;font-size:var(--t-sm);
}
.keys kbd{justify-self:start}
.keys kbd{
  font-family:'Marquee';font-size:11.5px;background:var(--ink-deep);
  border:1px solid var(--line);border-bottom-width:3px;border-radius:6px;padding:4px 8px;
  display:inline-block;min-width:2.2em;text-align:center;
}
.keys span{color:var(--paper-dim);align-self:center}

/* mode picker */
.modes{display:flex;flex-direction:column;gap:var(--s2);margin-bottom:var(--s4)}
.mode{
  display:flex;align-items:center;gap:var(--s3);text-align:left;width:100%;
  background:var(--ink-deep);border:2px solid var(--line);border-radius:10px;
  padding:var(--s3);cursor:pointer;
}
.mode:hover:not([disabled]){border-color:var(--cyan)}
.mode[disabled]{opacity:.4;cursor:not-allowed}
.mode .ic{font-family:'Marquee';font-size:var(--t-md);color:var(--gold);width:1.6em;text-align:center;flex:none}
.mode .tx b{display:block;font-weight:700}
.mode .tx small{color:var(--paper-dim)}

/* ---------- Touch controls ---------- */
.pad{position:absolute;inset:auto 0 0 0;display:none;justify-content:space-between;padding:var(--s3);pointer-events:none}
.pad.on{display:flex}
.pad .cluster{display:grid;grid-template-columns:repeat(3,54px);grid-template-rows:repeat(3,54px);pointer-events:auto}
.pad .cluster b{
  grid-area:var(--ga);display:flex;align-items:center;justify-content:center;
  background:rgba(43,26,82,.82);border:2px solid var(--line);border-radius:12px;
  font-size:22px;color:var(--paper);user-select:none;-webkit-user-select:none;
}
.pad .cluster b.press{background:var(--cyan);color:#00302C}
.pad .acts{display:flex;align-items:flex-end;gap:var(--s2);pointer-events:auto}
.pad .acts b{
  width:74px;height:74px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(255,63,125,.86);border:2px solid rgba(255,243,220,.3);
  font-family:'Marquee';font-size:var(--t-base);color:#3A0014;user-select:none;-webkit-user-select:none;
}
.pad .acts b.press{background:var(--gold);color:#2A1500}

/* ---------- Toast ---------- */
.toasts{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:90;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{
  background:var(--panel);border:2px solid var(--line);border-radius:999px;
  padding:10px 20px;font-weight:700;font-size:var(--t-sm);
  box-shadow:4px 4px 0 rgba(0,0,0,.5);max-width:min(92vw,460px);text-align:center;
}
.toast.bad{border-color:var(--pink)}
.toast.good{border-color:var(--lime)}

/* emoji ping row */
.pings{display:flex;gap:6px;flex-wrap:wrap}
.ping{
  background:var(--ink-deep);border:2px solid var(--line);border-radius:10px;
  font-size:19px;line-height:1;padding:7px 10px;cursor:pointer;
}
.ping:hover{border-color:var(--gold)}

/* Wenn das Touch-Pad an ist, soll das Spielfeld nicht darunter liegen */
.stage.padded .stage-wrap{padding-bottom:168px}

/* ---------- Tablet und Finger ---------- */
/* Beim Halten (Bogen spannen) darf weder Text markiert noch das Lupen-Menü
   aufgehen, und die Seite soll beim Wischen nicht mitfedern. */
html,body{overscroll-behavior:none}
.stage{
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}
#play{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
.quer{
  display:none;position:absolute;inset:8px 0 auto 0;text-align:center;
  font-size:var(--t-sm);font-weight:700;color:var(--paper-dim);pointer-events:none;
}

@media(pointer:coarse){
  .btn{min-height:48px}
  .btn.sm{min-height:42px;padding:10px 15px}
  .field{min-height:54px}
  .ping{padding:10px 14px;font-size:22px}
  .mode{padding:var(--s4) var(--s3)}
  .cab .plate{padding:var(--s3) var(--s3) var(--s5)}
}
@media(pointer:coarse) and (orientation:portrait){
  .stage.on .quer{display:block}
  /* Hochkant das Feld nach oben rücken — unten bleibt Platz für die Daumen */
  .stage-wrap{align-items:flex-start;padding-top:34px}
}
/* Auf dem Tablet ist Platz — da darf das Daumenkreuz gross sein */
@media(pointer:coarse) and (min-width:760px){
  .pad{padding:var(--s3) var(--s4)}
  .pad .cluster{grid-template-columns:repeat(3,62px);grid-template-rows:repeat(3,62px)}
  .pad .acts b{width:86px;height:86px;font-size:var(--t-md)}
  .stage.padded .stage-wrap{padding-bottom:196px}
}

@media(max-width:860px) and (orientation:portrait){
  .stage-bar{min-height:46px;padding:6px 8px;gap:8px}
  .stage-bar .btn.sm{padding:7px 12px;font-size:12.5px}
  .stage-bar .gname{display:none}
  .stage-bar .score{font-size:var(--t-base)}
}

@media(max-width:560px){
  .hero{padding:var(--s5) 0 var(--s4)}
  .lobby{padding:var(--s3);box-shadow:5px 5px 0 rgba(0,0,0,.5)}
  .grid{grid-template-columns:1fr}
  .stage-bar .nm{max-width:6ch}
}

@media(prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;transition-duration:.001ms!important}
}

/* ---------- Auswahl-Blatt ---------- */
.sheet{
  position:fixed;inset:0;z-index:70;display:none;
  align-items:flex-start;justify-content:center;padding:var(--s4);
  background:rgba(18,10,37,.84);
  /* Passt die Anleitung nicht aufs Handy, scrollt das Blatt statt abzuschneiden */
  overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
}
.sheet.on{display:flex}
.sheet .card{margin:auto}
