/* Only copy changes; scene and WebGL elements keep their live state. */
.language-button { position: relative; }
details.language-control > summary::after,
details.language-control[open] > summary::after { content: none; }
.language-menu {
  width: max-content;
  min-width: 184px;
  max-width: min(280px, calc(100vw - 32px));
  max-height: min(28rem, calc(100dvh - 120px));
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: thin;
  scroll-padding: 8px;
}
.language-menu a { min-height: 44px; border-radius: 4px; }
.language-control > summary:focus-visible,
.language-menu a:focus-visible,
.menu-languages a:focus-visible { outline: 2px solid currentColor; outline-offset: -3px; }
.menu-languages .button-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  max-height: min(22rem, 48dvh);
  overflow-y: auto;
  overscroll-behavior: contain;
  scroll-padding: 4px;
  padding: 3px;
}
.menu-languages a { min-height: 44px; padding: 10px 12px; text-align: center; white-space: normal; }
.menu-languages a[aria-current="true"] { background: var(--accent-soft); border-color: currentColor; }
.is-language-loading .language-button { cursor: progress; }
.is-language-loading .language-button::before {
  content: ''; position: absolute; bottom: 1px; left: 10px; right: 10px;
  height: 2px; background: currentColor; opacity: .55;
  transform-origin: left; animation: language-progress 1s ease-in-out infinite alternate;
}
@keyframes language-progress { from { transform: scaleX(.2); } to { transform: scaleX(1); } }
::view-transition-old(root), ::view-transition-new(root) { animation-duration: 180ms; animation-timing-function: ease-out; }
@media (prefers-reduced-motion: reduce) { .is-language-loading .language-button::before { animation: none; } }
