/* Controls shared by the public SSR pages and the SPA shell: the language
   switcher, the menu toggle and the screen-reader helper. Each surface keeps
   only its own sizing, spacing and colour next to its markup. */

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

.language-select {
  display: inline-flex;
  align-items: center;
  min-height: var(--control-height);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: var(--surface);
}

.language-select:focus-within { border-color: var(--focus); }

.language-select svg {
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 1.7;
}

.language-select select {
  -webkit-appearance: none;
  appearance: none;
  border: 0;
  outline: 0;
  background: transparent;
  color: inherit;
  cursor: pointer;
  font: inherit;
}

.language-select select:disabled { cursor: wait; opacity: 0.6; }

.menu-toggle {
  width: var(--control-height);
  height: var(--control-height);
  padding: 0;
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: var(--surface);
  cursor: pointer;
}

.menu-toggle svg {
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-width: 1.8;
}

.menu-toggle__line {
  transform-box: fill-box;
  transform-origin: center;
  transition: transform 180ms ease, opacity 120ms ease;
}

.menu-toggle.is-open .menu-toggle__line--top { transform: translateY(5px) rotate(45deg); }
.menu-toggle.is-open .menu-toggle__line--middle { opacity: 0; }
.menu-toggle.is-open .menu-toggle__line--bottom { transform: translateY(-5px) rotate(-45deg); }

@media (prefers-reduced-motion: reduce) {
  .menu-toggle__line { transition: none; }
}
