/* =========================================================================
   N8Stallung — Messe-App
   Corporate Design: Signet-Grau #545A6A, Wortmarken-Schrift Montserrat
   ========================================================================= */

@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('../fonts/montserrat-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
                 U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
                 U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('../fonts/montserrat-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304,
                 U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB,
                 U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
  --brand:        #545A6A;
  --brand-deep:   #3E4453;
  --brand-night:  #2C313C;
  --brand-blue:   #304863;
  --paper:        #F4F1EC;
  --paper-pure:   #FFFFFF;
  --ink:          #24262E;
  --ink-soft:     #5C6068;
  --line:         #DCD7CF;
  --danger:       #9E3A2F;
  --ok:           #FFFFFF;

  --radius:       14px;
  --radius-lg:    22px;
  --tap:          4.25rem;
  --shadow:       0 2px 4px rgba(36,38,46,.05), 0 12px 32px rgba(36,38,46,.10);
  --shadow-lift:  0 4px 8px rgba(36,38,46,.08), 0 22px 48px rgba(36,38,46,.16);

  --pad-t: env(safe-area-inset-top, 0px);
  --pad-r: env(safe-area-inset-right, 0px);
  --pad-b: env(safe-area-inset-bottom, 0px);
  --pad-l: env(safe-area-inset-left, 0px);
}

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

/* Muss stärker sein als eigene display-Regeln (z. B. .grid { display: grid }) */
[hidden] { display: none !important; }

html {
  font-size: 17px;
  -webkit-text-size-adjust: 100%;
  height: 100%;
}
@media (min-width: 760px)  { html { font-size: 18px; } }
@media (min-width: 1100px) { html { font-size: 19px; } }

body {
  margin: 0;
  min-height: 100%;
  font-family: 'Montserrat', system-ui, -apple-system, 'Segoe UI', sans-serif;
  color: var(--ink);
  background: var(--brand);
  -webkit-font-smoothing: antialiased;
  -webkit-tap-highlight-color: transparent;
  overscroll-behavior: none;
}
body.is-booting .screen { visibility: hidden; }

img { max-width: 100%; height: auto; display: block; }
button, input, select, textarea { font: inherit; color: inherit; }

/* ---------------------------------------------------------------- Screens */
.screen {
  position: fixed;
  inset: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.screen[hidden] { display: none; }

/* ---------------------------------------------------------------- Attract */
.screen--attract {
  background:
    radial-gradient(120% 90% at 50% -10%, rgba(255,255,255,.14) 0%, rgba(255,255,255,0) 58%),
    linear-gradient(168deg, var(--brand) 0%, var(--brand-deep) 55%, var(--brand-night) 100%);
  color: #fff;
  align-items: center;
  justify-content: center;
  padding: calc(1.5rem + var(--pad-t)) calc(1.5rem + var(--pad-r))
           calc(1.5rem + var(--pad-b)) calc(1.5rem + var(--pad-l));
  text-align: center;
}
.attract__inner {
  width: min(52rem, 100%);
  max-height: 100%;
  overflow: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.5rem;
  padding: .5rem 0;
}

.brand {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .55rem;
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
  cursor: default;
  padding: .25rem 1.25rem;
}
.brand__mark { width: auto; height: clamp(4.5rem, 13vh, 7.5rem); }
.brand__claim {
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .34em;
  text-transform: uppercase;
  opacity: .85;
  padding-left: .34em;
}
.brand__word {
  font-size: clamp(1.3rem, 3.4vh, 1.85rem);
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  padding-left: .1em;
}

.attract__title {
  margin: 0;
  font-size: clamp(1.9rem, 5.2vh, 3.1rem);
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -.01em;
}
.attract__lead {
  margin: 0;
  max-width: 38rem;
  font-size: clamp(1rem, 2.2vh, 1.2rem);
  line-height: 1.6;
  color: rgba(255,255,255,.86);
}
.attract__foot {
  margin: .25rem 0 0;
  font-size: .8rem;
  letter-spacing: .06em;
  color: rgba(255,255,255,.6);
}
.attract__badge {
  position: absolute;
  top: calc(1rem + var(--pad-t));
  right: calc(1.25rem + var(--pad-r));
  margin: 0;
  font-size: .72rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(255,255,255,.45);
}

.tags {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: .5rem;
  margin: 0;
  padding: 0;
  list-style: none;
}
.tag {
  padding: .45rem 1rem;
  border: 1px solid rgba(255,255,255,.3);
  border-radius: 999px;
  font-size: .82rem;
  font-weight: 500;
  letter-spacing: .04em;
  color: rgba(255,255,255,.9);
}

/* ---------------------------------------------------------------- Buttons */
.btn {
  appearance: none;
  border: 0;
  border-radius: var(--radius);
  font-family: inherit;
  font-weight: 600;
  cursor: pointer;
  min-height: var(--tap);
  padding: 1rem 2rem;
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: .2rem;
  transition: transform .12s ease, box-shadow .18s ease, background-color .18s ease;
  touch-action: manipulation;
}
.btn:active { transform: translateY(1px) scale(.995); }
.btn:focus-visible { outline: 3px solid var(--brand-blue); outline-offset: 3px; }

.btn--cta {
  background: var(--paper-pure);
  color: var(--brand-deep);
  box-shadow: var(--shadow-lift);
  width: min(30rem, 100%);
  padding: 1.15rem 2rem;
}
.btn__label { font-size: clamp(1.05rem, 2.3vh, 1.25rem); letter-spacing: .01em; }
.btn__hint  { font-size: .78rem; font-weight: 500; opacity: .6; letter-spacing: .04em; }

.screen--form .btn--cta,
.screen--panel .btn--cta {
  background: var(--brand);
  color: #fff;
}
.btn--submit { width: 100%; margin-top: .5rem; }

.btn--ghost {
  background: transparent;
  color: inherit;
  border: 1.5px solid currentColor;
  min-height: 3.5rem;
  padding: .85rem 1.6rem;
  font-size: 1rem;
}
.screen--panel .btn--ghost { color: var(--brand-deep); }

.btn--small {
  min-height: 3rem;
  padding: .6rem 1.2rem;
  font-size: .9rem;
  background: var(--line);
  color: var(--ink);
}
.btn--danger { background: var(--danger); color: #fff; min-height: 3.5rem; font-size: 1rem; }

/* ---------------------------------------------------------------- Formular */
.screen--form { background: var(--paper); }

.bar {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  background: var(--brand);
  color: #fff;
  padding: calc(.7rem + var(--pad-t)) calc(1.1rem + var(--pad-r)) .7rem calc(1.1rem + var(--pad-l));
}
.bar__back {
  appearance: none;
  border: 0;
  background: rgba(255,255,255,.12);
  color: #fff;
  border-radius: 999px;
  padding: .7rem 1.3rem;
  min-height: 3.1rem;
  font-size: .95rem;
  font-weight: 500;
  cursor: pointer;
  touch-action: manipulation;
}
.bar__back:active { background: rgba(255,255,255,.22); }
.bar__mark { height: 2.1rem; width: auto; opacity: .95; }

.form-scroll {
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
  padding: 1.75rem calc(1.25rem + var(--pad-r)) calc(2.5rem + var(--pad-b)) calc(1.25rem + var(--pad-l));
}
.form {
  width: min(46rem, 100%);
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 1.35rem;
}
.form__title {
  margin: 0;
  font-size: clamp(1.45rem, 3.6vh, 2rem);
  font-weight: 600;
  line-height: 1.2;
}
.form__sub { margin: -.9rem 0 0; color: var(--ink-soft); font-size: 1rem; }

.grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.1rem;
}
@media (min-width: 640px) {
  .grid { grid-template-columns: 1fr 1fr; }
  .field--wide { grid-column: 1 / -1; }
}

.field { display: flex; flex-direction: column; gap: .45rem; min-width: 0; }
.label {
  font-size: .86rem;
  font-weight: 600;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.req { color: var(--danger); }
.opt {
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  opacity: .7;
  font-size: .82rem;
}

.input {
  width: 100%;
  min-height: var(--tap);
  padding: .95rem 1.1rem;
  font-size: 1.12rem;
  background: var(--paper-pure);
  border: 1.5px solid var(--line);
  border-radius: var(--radius);
  appearance: none;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.input:focus {
  outline: none;
  border-color: var(--brand);
  box-shadow: 0 0 0 4px rgba(84,90,106,.16);
}
.input--area { min-height: 6.5rem; resize: none; line-height: 1.5; }
.input--pin { letter-spacing: .5em; font-size: 1.4rem; }
select.input { background-image: none; }
.input[aria-invalid="true"] { border-color: var(--danger); background: #FDF5F4; }

.hint { margin: 0; font-size: .88rem; color: var(--ink-soft); line-height: 1.5; }
.error { margin: 0; font-size: .86rem; font-weight: 500; color: var(--danger); }
.form__error {
  margin: 0;
  padding: 1rem 1.2rem;
  background: #FBEEEC;
  border-left: 4px solid var(--danger);
  border-radius: 8px;
  color: var(--danger);
  font-size: .95rem;
}

.fieldset { border: 0; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .7rem; }
.fieldset .label { padding: 0; }

.chips { display: flex; flex-wrap: wrap; gap: .6rem; }
.chip {
  appearance: none;
  border: 1.5px solid var(--line);
  background: var(--paper-pure);
  color: var(--ink);
  border-radius: 999px;
  padding: .85rem 1.35rem;
  min-height: 3.4rem;
  font-size: 1rem;
  font-weight: 500;
  cursor: pointer;
  touch-action: manipulation;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.chip[aria-pressed="true"] {
  background: var(--brand);
  border-color: var(--brand);
  color: #fff;
}
.chip:focus-visible { outline: 3px solid var(--brand-blue); outline-offset: 2px; }

.reveal { animation: fade .25s ease both; }
@keyframes fade { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }

/* ------------------------------------------------------------- Einwilligung */
.consents { display: flex; flex-direction: column; gap: .9rem; }
.consent {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
  padding: 1.05rem 1.15rem;
  background: var(--paper-pure);
  border: 1.5px solid var(--line);
  border-radius: var(--radius);
  cursor: pointer;
  line-height: 1.55;
  font-size: .97rem;
}
/* Checkbox bleibt für Tastatur und Screenreader erhalten, sichtbar ist .consent__box */
.consent input {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}
.consent__box {
  flex: 0 0 auto;
  width: 1.85rem;
  height: 1.85rem;
  margin-top: .05rem;
  border: 2px solid var(--brand);
  border-radius: 7px;
  background: #fff;
  position: relative;
  transition: background-color .15s ease;
}
.consent__box::after {
  content: '';
  position: absolute;
  left: .55rem;
  top: .22rem;
  width: .45rem;
  height: .85rem;
  border: solid #fff;
  border-width: 0 3px 3px 0;
  transform: rotate(45deg) scale(0);
  transition: transform .15s ease;
}
.consent input:checked + .consent__box { background: var(--brand); }
.consent input:checked + .consent__box::after { transform: rotate(45deg) scale(1); }
.consent input:focus-visible + .consent__box { outline: 3px solid var(--brand-blue); outline-offset: 3px; }
.consent--invalid { border-color: var(--danger); background: #FDF5F4; }
.consent__text { min-width: 0; }
.consent__link {
  align-self: flex-start;
  margin: -.2rem 0 .1rem;
  padding: .55rem .2rem;
  min-height: 2.75rem;
  background: none;
  border: 0;
  color: var(--brand-blue);
  font-weight: 600;
  font-size: inherit;
  text-decoration: underline;
  text-underline-offset: 3px;
  cursor: pointer;
}
.form__legal {
  margin: 0;
  font-size: .82rem;
  line-height: 1.6;
  color: var(--ink-soft);
}

/* ---------------------------------------------------------------- Erfolg */
.screen--success {
  background: linear-gradient(168deg, var(--brand) 0%, var(--brand-deep) 60%, var(--brand-night) 100%);
  color: #fff;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: calc(1.5rem + var(--pad-t)) 1.5rem calc(1.5rem + var(--pad-b));
}
.success__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.35rem;
  width: min(34rem, 100%);
}
.success__mark { animation: pop .45s cubic-bezier(.2,.9,.3,1.3) both; }
.success__ring { stroke: rgba(255,255,255,.35); }
.success__tick {
  stroke: #fff;
  stroke-dasharray: 60;
  stroke-dashoffset: 60;
  animation: draw .5s .2s ease forwards;
}
@keyframes pop  { from { opacity: 0; transform: scale(.7); } to { opacity: 1; transform: none; } }
@keyframes draw { to { stroke-dashoffset: 0; } }

.success__title { margin: 0; font-size: clamp(2rem, 6vh, 3rem); font-weight: 600; }
.success__text { margin: 0; font-size: clamp(1.02rem, 2.4vh, 1.2rem); line-height: 1.65; color: rgba(255,255,255,.88); }
.success__count { margin: 0; font-size: .82rem; letter-spacing: .08em; color: rgba(255,255,255,.55); }
.success__bar {
  width: min(18rem, 70%);
  height: 4px;
  border-radius: 999px;
  background: rgba(255,255,255,.2);
  overflow: hidden;
}
.success__bar i { display: block; height: 100%; width: 100%; background: rgba(255,255,255,.75); }
.screen--success .btn--ghost { color: #fff; }

/* ------------------------------------------------------- Panels (Setup/Admin) */
.screen--panel {
  background: var(--paper);
  overflow-y: auto;
  padding: calc(1.5rem + var(--pad-t)) calc(1.25rem + var(--pad-r))
           calc(2.5rem + var(--pad-b)) calc(1.25rem + var(--pad-l));
  display: block;
}
/* iOS blendet die Statusleiste über die App (black-translucent). Auf hellem
   Grund wären ihre weißen Symbole unlesbar — daher ein Streifen in Markenfarbe. */
.screen--panel::before {
  content: '';
  position: fixed;
  top: 0; left: 0; right: 0;
  height: var(--pad-t);
  background: var(--brand);
  z-index: 10;
}

.panel {
  width: min(40rem, 100%);
  margin: 0 auto;
  background: var(--paper-pure);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow);
  padding: 1.9rem;
  display: flex;
  flex-direction: column;
  gap: 1.15rem;
}
.panel--wide { width: min(62rem, 100%); }
.panel__bar { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.panel__title { margin: 0; font-size: 1.55rem; font-weight: 600; }
.panel__sub { margin: 1rem 0 .25rem; font-size: 1.05rem; font-weight: 600; }
.panel__text { margin: 0; color: var(--ink-soft); line-height: 1.6; }
.panel__warn {
  margin: 0;
  padding: 1rem 1.15rem;
  background: #FBF4E8;
  border-left: 4px solid #B8873B;
  border-radius: 8px;
  font-size: .92rem;
  line-height: 1.6;
}
.panel form { display: flex; flex-direction: column; gap: 1.1rem; }

.stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: .9rem; }
.stat {
  background: var(--paper);
  border-radius: var(--radius);
  padding: 1.1rem;
  text-align: center;
  display: flex;
  flex-direction: column;
  gap: .25rem;
}
.stat b { font-size: 1.9rem; font-weight: 700; color: var(--brand-deep); }
.stat span { font-size: .78rem; letter-spacing: .05em; text-transform: uppercase; color: var(--ink-soft); }

.admin-actions { display: flex; flex-wrap: wrap; gap: .8rem; }
.admin-actions .btn { flex: 1 1 14rem; }

.table-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); }
.table { width: 100%; border-collapse: collapse; font-size: .9rem; }
.table th, .table td { padding: .8rem .9rem; text-align: left; border-bottom: 1px solid var(--line); vertical-align: top; }
.table th { background: var(--paper); font-size: .76rem; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-soft); }
.table tr:last-child td { border-bottom: 0; }
.table .row-del {
  appearance: none; border: 0; background: none; color: var(--danger);
  font-size: .85rem; font-weight: 600; cursor: pointer; padding: .4rem .6rem;
}
.danger { margin-top: 1rem; padding-top: 1.25rem; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: .8rem; }

/* ---------------------------------------------------------------- Overlays */
.overlay {
  position: fixed;
  inset: 0;
  z-index: 50;
  background: rgba(44,49,60,.72);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
}
.overlay[hidden] { display: none; }

/* Reihenfolge der Ebenen: Inhalt < Hinweise < Inaktivitätswarnung < Toast < Startfehler */
#idle-overlay { z-index: 65; }
.overlay--blocking { z-index: 80; }
.overlay__box {
  background: var(--paper-pure);
  border-radius: var(--radius-lg);
  padding: 2rem;
  width: min(32rem, 100%);
  text-align: center;
  display: flex;
  flex-direction: column;
  gap: 1.2rem;
  box-shadow: var(--shadow-lift);
}
.overlay__box--text { text-align: left; width: min(46rem, 100%); }
.overlay__box--text .btn--cta { align-self: center; }
.legal {
  max-height: min(58vh, 32rem);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
  padding-right: .5rem;
  font-size: .93rem;
  line-height: 1.65;
  color: var(--ink-soft);
}
.legal h3 {
  margin: 1.1rem 0 .3rem;
  font-size: .82rem;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--brand-deep);
}
.legal h3:first-child { margin-top: 0; }
.legal p { margin: 0; }
.legal b { color: var(--ink); }

.overlay__title { margin: 0; font-size: 1.5rem; font-weight: 600; }
.overlay__text { margin: 0; color: var(--ink-soft); line-height: 1.6; }
.overlay__box .admin-actions { justify-content: center; }

.toast {
  position: fixed;
  left: 50%;
  bottom: calc(1.5rem + var(--pad-b));
  transform: translateX(-50%);
  z-index: 70;
  background: var(--brand-night);
  color: #fff;
  padding: .95rem 1.5rem;
  border-radius: 999px;
  font-size: .95rem;
  font-weight: 500;
  box-shadow: var(--shadow-lift);
  max-width: min(32rem, calc(100% - 2rem));
  text-align: center;
}
.toast[hidden] { display: none; }

/* ------------------------------------------------------------ Querformat */

/* Auf breiten Tablets kompakter setzen, damit das Formular ohne viel Scrollen
   erfassbar bleibt. Alle Bedienelemente bleiben über 44 px hoch. */
@media (min-width: 900px) {
  .form { width: min(58rem, 100%); gap: 1.05rem; }
  .form-scroll { padding-top: 1.35rem; }
  .grid { gap: .85rem; column-gap: 1.25rem; }
  .input { min-height: 3.6rem; padding: .75rem 1rem; }
  .input--area { min-height: 5rem; }
  .chip { min-height: 3.1rem; padding: .7rem 1.15rem; font-size: .95rem; }
  .chips { gap: .5rem; }
  .consent { padding: .85rem 1rem; font-size: .93rem; }
  .consents { gap: .65rem; }
  .form__title { font-size: 1.6rem; }
  .form__sub { margin-top: -.75rem; font-size: .95rem; }
  .btn--submit { min-height: 4rem; margin-top: .25rem; }
}

/* Drei Spalten auf breiten Displays: Vorname | Nachname | Unternehmen */
@media (min-width: 1180px) {
  .grid { grid-template-columns: repeat(3, 1fr); }
  .field--wide { grid-column: auto; }
  #contact-hint { grid-column: 1 / -1; }
  #event-details { grid-template-columns: repeat(2, 1fr); max-width: 66%; }
}

@media (orientation: landscape) and (max-height: 560px) {
  .attract__inner { gap: 1rem; }
  .brand__mark { height: 3.6rem; }
  .attract__lead { font-size: .95rem; }
  .form-scroll { padding-top: 1.1rem; }
}

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