@layer utilities {

	/* Skip link (add once in parts/header.html) */
	.skip-link {
	position: absolute;
	top: 0;
	left: 0;
	padding: var(--space-sm);
	background: var(--color-primary);
	color: var(--color-base);
	transform: translateY(-120%);
	z-index: 1000;
	text-decoration: none;
	}

	.skip-link:focus-visible {
	transform: translateY(0);
	}

	/* Screen reader only */
	.sr-only,
	.visually-hidden,
	.screen-reader-text {
	position: absolute !important;
	width: 1px !important;
	height: 1px !important;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
	}

	/* Focus styles (keyboard) */
	:where(a, button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])):focus-visible {
	outline: 2px solid var(--color-primary);
	outline-offset: var(--space-xs);
	}

	/* Remove default focus ring only when we provide our own */
	:where(a, button, input, select, textarea, summary):focus {
	outline: none;
	}

	/* Navigation: extra visible focus */
	:where(.wp-block-navigation a):focus-visible {
	text-decoration: underline;
	text-underline-offset: 0.2em;
	}

	/* Links should be recognizable (WCAG-friendly) */
	:where(.wp-site-blocks a):not(.wp-element-button):not(.wp-block-button__link) {
	text-decoration-thickness: 0.08em;
	text-underline-offset: 0.18em;
	}

	:where(.wp-site-blocks a):not(.wp-element-button):not(.wp-block-button__link):hover {
	text-decoration-thickness: 0.12em;
	}

	/* Touch targets (WCAG 2.5.5) */
	:where(.wp-block-navigation a) {
	padding-block: var(--space-xs);
	}

	:where(.wp-block-button__link) {
	min-height: 44px;
	display: inline-flex;
	align-items: center;
	}

	/* Forms (generic, plugin-friendly) */
	:where(input, select, textarea) {
	line-height: 1.2;
	}

	/* Invalid state (works with many plugins incl. GravityForms) */
	:where(input, select, textarea)[aria-invalid="true"] {
	outline-color: var(--color-primary);
	}

	/* Make labels clickable & readable */
	:where(label) {
	cursor: pointer;
	}

	/* Reduced motion (WCAG 2.3.3) */
	@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: 0.001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.001ms !important;
		scroll-behavior: auto !important;
	}
	}

	/* Forced colors / High Contrast Mode (Windows) */
	@media (forced-colors: active) {
	:where(a, button, input, select, textarea, summary):focus-visible {
		outline: 2px solid CanvasText;
	}

	.skip-link {
		forced-color-adjust: none;
		background: Canvas;
		color: CanvasText;
		border: 1px solid CanvasText;
	}
	}

	/* Tables (keyboard + readability) */
	:where(table) {
	border-collapse: collapse;
	}

	:where(th, td) {
	padding: var(--space-xs);
	}

	/* Details / summary (keyboard affordance) */
	:where(summary) {
	cursor: pointer;
	}

	:where(summary):focus-visible {
	outline: 2px solid var(--color-primary);
	outline-offset: var(--space-xs);
	}

	/* Text selection (nice UX, keeps contrast decent) */
	::selection {
	background: color-mix(in srgb, var(--color-primary) 25%, transparent);
	}
}

@media print {
	header, footer, nav { display: none !important; }
	a { text-decoration: underline; }
	a[href^="http"]::after { content: " (" attr(href) ")"; }
}
