/* ============================================================
   CFL — shared accessibility behaviour. Still colourless:
   focus colour comes from each direction's --focus token.
   ============================================================ */

:focus { outline: none; }

:focus-visible {
  outline: var(--focus-w, 2px) solid var(--focus, currentColor);
  outline-offset: var(--focus-offset, 3px);
  border-radius: var(--focus-radius, 2px);
}

.skip-link {
  position: absolute;
  left: 12px;
  top: -100px;
  z-index: 999;
  padding: 12px 18px;
  background: var(--skip-bg, Canvas);
  color: var(--skip-fg, CanvasText);
  font-weight: 600;
  transition: top .12s ease;
}
.skip-link:focus-visible { top: 12px; }

/* Minimum comfortable hit area for anything interactive. */
a, button, input, select, textarea, summary { touch-action: manipulation; }
.hit { min-height: 44px; display: inline-flex; align-items: center; }

/* Reduced motion: animations resolve INSTANTLY to their end state,
   they do not merely slow down. Each direction adds its own overrides
   for scroll-linked drawing (dashoffset → 0, transforms → identity). */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  [data-reveal] { opacity: 1 !important; transform: none !important; }
  [data-draw]   { stroke-dashoffset: 0 !important; }
}

/* Placeholder / to-be-confirmed marker. Kept subtle: these read as
   real content in the comps, and the audit list lives in FACTS-TO-CONFIRM.md. */
.tbc { border-bottom: 1px dotted currentColor; cursor: help; }

@media print {
  .no-print { display: none !important; }
}
