/* Shared sign-in controls, with a game-specific visual theme.
 * Kept local so a game's entry screen needs no cross-origin asset request. */
body:has(.signin-screen:not([hidden])) {
  --signin-paper: #f5f3eb;
  background: var(--signin-paper);
}
.signin-screen {
  --signin-card: #fffef9;
  --signin-ink: #203d34;
  --signin-muted: #626d65;
  --signin-green: #234c3e;
  --signin-hover: #163c30;
  --signin-line: #d8ddd2;
  --signin-focus: #ab6c26;
  --signin-white: #fff;
  --signin-width: 540px;
  --signin-space: 24px;
  --signin-small: 12px;
  --signin-padding: clamp(24px, 6vw, 56px);
  --signin-radius: 16px;
  --signin-action-radius: 8px;
  --signin-title: clamp(36px, 6vw, 56px);
  --signin-caption: 13px;
  --signin-tracking: 0.14em;
  --signin-border: 1px;
  --signin-outline: 3px;
  --signin-shadow: 0 12px 42px #26382b0b;
  display: grid;
  place-items: center;
  width: 100%;
  height: auto;
  min-height: 85svh;
  padding: var(--signin-padding) var(--signin-space);
  color-scheme: light;
  color: var(--signin-ink);
  background: var(--signin-paper);
  font:
    16px/1.6 system-ui,
    sans-serif;
}
.signin-screen[hidden] {
  display: none;
}
body:has(.signin-screen:not([hidden])) > main:not(.signin-screen) {
  max-width: none;
  padding: 0;
}
.signin-card {
  width: min(100%, var(--signin-width));
  padding: var(--signin-padding);
  border: var(--signin-border) solid var(--signin-line);
  border-radius: var(--signin-radius);
  background: var(--signin-card);
  box-shadow: var(--signin-shadow);
  text-align: center;
}

.signin-card .signin-eyebrow {
  margin: var(--signin-small) 0 var(--signin-space);
  color: var(--signin-muted);
  font-size: var(--signin-caption);
  font-weight: 700;
  letter-spacing: var(--signin-tracking);
}
.signin-card h1 {
  margin: 0 0 var(--signin-space);
  font:
    500 var(--signin-title) / 1.1 Georgia,
    serif;
  letter-spacing: normal;
}
.signin-card .signin-description {
  margin: 0 0 var(--signin-space);
  color: var(--signin-muted);
}
.signin-card .signin-action {
  display: block;
  padding: var(--signin-small) var(--signin-space);
  border-radius: var(--signin-action-radius);
  background: var(--signin-green);
  color: var(--signin-white);
  text-decoration: none;
  font-weight: 600;
}
.signin-card .signin-action:hover {
  background: var(--signin-hover);
}
.signin-card .signin-action:focus-visible {
  outline: var(--signin-outline) solid var(--signin-focus);
  outline-offset: var(--signin-outline);
}
.signin-card .signin-note {
  margin: var(--signin-space) 0 0;
  color: var(--signin-muted);
  font-size: var(--signin-caption);
}

/* Railway poster, punched ticket and connected stations. */
body:has(.signin-screen:not([hidden])) {
  --signin-paper: #e7eced;
}
.signin-screen {
  --signin-card: #fff7e6;
  --signin-ink: #263f51;
  --signin-muted: #536675;
  --signin-green: #a9442f;
  --signin-hover: #853320;
  --signin-line: #d4bc8c;
  --signin-focus: #263f51;
  --art-ticket: #edce8e;
  --art-route: #ac553c;
  --art-width: 240px;
  --art-title: 28px;
  --art-caption: 10px;
  --art-node: 14px;
  --art-line: 3px;
  --art-grid: #3653650c;
  --art-grid-size: 32px;
  --art-poster-border: 8px;
  --art-ticket-angle: -5deg;
  --art-station-offset: -40%;
  background-image:
    linear-gradient(
      var(--art-grid) var(--signin-border),
      transparent var(--signin-border)
    ),
    linear-gradient(
      90deg,
      var(--art-grid) var(--signin-border),
      transparent var(--signin-border)
    );
  background-size: var(--art-grid-size) var(--art-grid-size);
}
.signin-card {
  border-top: var(--art-poster-border) solid var(--signin-green);
}
.signin-art {
  margin-bottom: var(--signin-space);
}
.welcome-ticket {
  display: flex;
  flex-direction: column;
  width: min(100%, var(--art-width));
  margin: var(--signin-small) auto var(--signin-space);
  padding: var(--signin-small);
  border-inline: var(--art-line) dashed var(--signin-card);
  background: var(--art-ticket);
  color: var(--signin-ink);
  transform: rotate(var(--art-ticket-angle));
  letter-spacing: var(--signin-tracking);
}
.welcome-ticket small,
.welcome-ticket > span {
  font-size: var(--art-caption);
}
.welcome-ticket strong {
  font:
    bold var(--art-title) / 1.6 Georgia,
    serif;
}
.welcome-route {
  display: flex;
  justify-content: space-between;
  width: min(100%, var(--art-width));
  height: var(--art-line);
  margin: auto;
  background: var(--art-route);
}
.welcome-route i {
  width: var(--art-node);
  height: var(--art-node);
  border: var(--art-line) solid var(--art-route);
  border-radius: 50%;
  background: var(--signin-card);
  transform: translateY(var(--art-station-offset));
}
