/**
 * Base reset and sitewide accessibility/interaction primitives.
 *
 * Ported from the identical rules duplicated across all nine Version 1.0
 * pages. See docs/ARCHITECTURE.md §7 and docs/PRODUCTION_READINESS.md §5
 * (these rules implement the skip-link, focus-visible, and
 * prefers-reduced-motion requirements named there as a non-negotiable
 * floor).
 */

*  {
	box-sizing: border-box;
}

html {
	scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}
}

body {
	margin: 0;
	background: var(--paper);
	color: var(--ink);
	font-family: var(--font-sans);
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
	overflow-x: hidden;
	background-image: radial-gradient(circle, rgba(30, 26, 22, .05) 1px, transparent 1px);
	background-size: 26px 26px;
}

a {
	color: inherit;
}

p {
	margin: 0;
}

::selection {
	background: var(--oxblood);
	color: #fff;
}

/* Every interactive element gets a visible focus ring — never suppressed
   without a compliant replacement. docs/PRODUCTION_READINESS.md §5. */
:focus-visible {
	outline: 2px solid var(--oxblood);
	outline-offset: 3px;
}

/* Skip-to-content link. Must remain the first focusable element on every
   page. docs/PRODUCTION_READINESS.md §5. */
.skip-link {
	position: absolute;
	left: -9999px;
	top: auto;
	background: var(--oxblood);
	color: #fff;
	padding: 12px 22px;
	z-index: 300;
	text-decoration: none;
	font-size: 14px;
	font-weight: 600;
	border-radius: 0 0 8px 0;
}

.skip-link:focus {
	left: 0;
	top: 0;
}

/* Scroll-reveal fade-in, used sitewide on section headings/cards. Degrades
   to fully visible, no animation, when reduced motion is requested —
   never gated behind JavaScript alone. See assets/js/navigation.js. */
.reveal {
	opacity: 0;
	transform: translateY(10px);
	transition: opacity .5s ease, transform .5s ease;
}

.reveal.in {
	opacity: 1;
	transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
	.reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}
}
