/*
 * 6Flaschen WeinApp – Accessibility Foundation
 * Build 8.5.69 · 2026-09-03
 * WCAG-2.2-orientierte Ergänzung: Fokus, Skip-Link, Touch-Ziele,
 * Fokus-Sichtbarkeit bei Sticky Navigation, Forced Colors und Reduced Motion.
 */
:root {
  --a11y-focus: #005fcc;
  --a11y-focus-outer: rgba(255,255,255,.96);
  --a11y-target: 44px;
  --a11y-focus-scroll-top: 108px;
  --a11y-focus-scroll-bottom: 116px;
}
html[data-theme="dark"] {
  --a11y-focus: #ffd47a;
  --a11y-focus-outer: rgba(7,28,39,.96);
}

/* Visually hidden but available to assistive technology. */
.a11y-sr-only,
.sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0,0,0,0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* App skip link. Public pages already have their own public-skip-link. */
.app-skip-link {
  position: fixed;
  z-index: 2147483647;
  top: 10px;
  left: 12px;
  transform: translateY(-180%);
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  padding: 10px 16px;
  border-radius: 999px;
  background: #fff;
  color: #14232d;
  border: 2px solid var(--a11y-focus);
  box-shadow: 0 8px 24px rgba(0,0,0,.22);
  font: 800 14px/1.2 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  text-decoration: none;
  transition: transform .12s ease;
}
.app-skip-link:focus,
.app-skip-link:focus-visible { transform: translateY(0); outline: none; }
html[data-theme="dark"] .app-skip-link { background: #102d3a; color: #fff; }
.app-skip-target { display:block; width:1px; height:1px; scroll-margin-top:var(--a11y-focus-scroll-top); }
.app-skip-target:focus { outline:none; }

/* One consistent keyboard focus indicator on all app modes. */
:where(a,button,input,select,textarea,summary,[tabindex]:not([tabindex="-1"])):focus-visible {
  outline: 3px solid var(--a11y-focus) !important;
  outline-offset: 3px !important;
  box-shadow: 0 0 0 2px var(--a11y-focus-outer) !important;
}
:where(a,button,input,select,textarea,summary,[tabindex]):focus {
  scroll-margin-top: var(--a11y-focus-scroll-top);
  scroll-margin-bottom: var(--a11y-focus-scroll-bottom);
}

/* Keep focused controls clear of sticky top/bottom navigation. */
html { scroll-padding-top: var(--a11y-focus-scroll-top); scroll-padding-bottom: var(--a11y-focus-scroll-bottom); }

/* Robust pointer/touch targets. Inline text links stay untouched. */
:where(button,.btn,[role="button"],summary,.coastal-mobile-icon-button,.coastal-account-action,.archive-mobile-page-nav-button,.scroll-top-button,.profile-r19-info-button,.profile-r19-sheet-close,.weincheck-dialog-close,.archive-buy-dialog-close) {
  min-width: 24px;
  min-height: var(--a11y-target);
}
:where(nav a,.auth-link-button,.public-button,.public-mobile-menu summary,.app-footer-menu-link,.credit-balance-link) {
  min-height: var(--a11y-target);
}
:where(input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]),select,textarea) {
  min-height: 44px;
}
:where(input[type="checkbox"],input[type="radio"]) {
  min-width: 20px;
  min-height: 20px;
}

/* Native details already exposes state; this keeps the hit area usable. */
details > summary { cursor: pointer; }

/* Dialogs need a visible focus context and safe viewport size. */
dialog { max-width: min(94vw, 760px); max-height: min(90dvh, 900px); }
dialog[open] { overflow: auto; }

/* Invalid state must not rely on color alone. */
[aria-invalid="true"] { border-style: solid !important; border-width: 2px !important; }
[aria-invalid="true"]:not(:focus) { outline: 1px dashed currentColor; outline-offset: 2px; }

/* Ensure disabled state remains perceptible. */
:disabled,[aria-disabled="true"] { cursor: not-allowed !important; opacity: .62; }

/* Respect user motion preferences globally, including legacy smooth scrolling. */
@media (prefers-reduced-motion: reduce) {
  html:focus-within { scroll-behavior: auto !important; }
  *,*::before,*::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Windows High Contrast / forced colors. */
@media (forced-colors: active) {
  :where(a,button,input,select,textarea,summary,[tabindex]:not([tabindex="-1"])):focus-visible {
    outline: 3px solid Highlight !important;
    box-shadow: none !important;
  }
  :where(button,.btn,[role="button"],summary) { border: 1px solid ButtonText; }
  [aria-current="page"],[aria-selected="true"],[aria-pressed="true"] { outline: 2px solid Highlight; }
}

@media (max-width: 900px) {
  :root {
    --a11y-focus-scroll-top: 82px;
    --a11y-focus-scroll-bottom: calc(116px + env(safe-area-inset-bottom));
  }
}
