/*
Theme Name: Oche
Theme URI: https://180score.nl
Author: 180score.nl
Description: Custom dark-only thema voor 180score.nl. Championship Precision: Oswald-koppen, Work Sans-body, JetBrains Mono-labels. Geen framework, geen buildstep, geen jQuery.
Version: 1.0.0
Requires at least: 6.4
Tested up to: 6.7
Requires PHP: 8.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: 180score
Tags: dark, one-column, custom-menu, featured-images, translation-ready
*/

/* ==========================================================================
   1. Design tokens (Championship Precision)
   ========================================================================== */

:root {
	/* Oppervlakken */
	--surface: #131313;
	--surface-container-lowest: #0e0e0e;
	--surface-container-low: #1c1b1b;
	--surface-container: #201f1f;
	--surface-container-high: #2a2a2a;
	--surface-container-highest: #353534;

	/* Accent */
	--primary: #ffb3ad;
	--primary-container: #d01020;
	--on-primary-container: #ffe2df;

	/* Tekst */
	--on-surface: #e5e2e1;
	--on-surface-variant: #e6bdb9;
	--on-secondary-container: #b4b5b5;

	/* Lijnen */
	--outline: #ad8884;
	--outline-variant: #5d3f3d;

	/* Overig */
	--tertiary: #99cbff;

	/* Typografie */
	--font-head: 'Oswald', system-ui, sans-serif;
	--font-body: 'Work Sans', system-ui, sans-serif;
	--font-mono: 'JetBrains Mono', ui-monospace, monospace;

	/* Radius: scherp, dit is een scorebord */
	--radius: 0.125rem;
	--radius-lg: 0.5rem;

	/* Ritme (8px) en maten */
	--unit: 8px;
	--gutter: 24px;
	--container-max: 1200px;
	--margin-mobile: 16px;
	--margin-desktop: 40px;

	/* Felt-texture: pure CSS-gradient, geen extra request, geen data-URI */
	--felt: repeating-linear-gradient(
		45deg,
		transparent,
		transparent 2px,
		rgba(255, 255, 255, 0.015) 2px,
		rgba(255, 255, 255, 0.015) 4px
	);
}

/* ==========================================================================
   2. Reset en basis
   ========================================================================== */

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
}

body {
	margin: 0;
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	background-color: var(--surface);
	color: var(--on-surface);
	font-family: var(--font-body);
	font-size: 16px;
	font-weight: 400;
	line-height: 1.5;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

h1,
h2,
h3,
h4,
h5,
h6 {
	margin: 0;
	font-family: var(--font-head);
	font-weight: 600;
	line-height: 1.2;
	color: var(--on-surface);
	text-transform: uppercase;
	letter-spacing: 0.02em;
}

p {
	margin: 0 0 1em;
}

a {
	color: var(--primary);
	text-decoration: none;
}

a:hover,
a:focus {
	text-decoration: underline;
}

img {
	max-width: 100%;
	height: auto;
	display: block;
}

ul,
ol {
	margin: 0 0 1em;
	padding-left: 1.25em;
}

figure {
	margin: 0;
}

/* Zichtbare focus, overal, in het rood van het merk */
:focus-visible {
	outline: 2px solid var(--primary-container);
	outline-offset: 2px;
}

/* ==========================================================================
   3. Layout-primitieven
   ========================================================================== */

.oche-container {
	width: 100%;
	max-width: var(--container-max);
	margin-inline: auto;
	padding-inline: var(--margin-mobile);
}

@media (min-width: 768px) {
	.oche-container {
		padding-inline: var(--margin-desktop);
	}
}

.oche-main {
	flex: 1 0 auto;
	width: 100%;
}

/* Skip-link: verborgen tot hij focus krijgt */
.oche-skip-link {
	position: absolute;
	left: -9999px;
	top: 0;
	z-index: 100;
	padding: 12px 24px;
	background: var(--primary-container);
	color: var(--on-primary-container);
	font-family: var(--font-mono);
	font-size: 14px;
	text-transform: uppercase;
	letter-spacing: 0.05em;
}

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

/* Alleen voor schermlezers */
.screen-reader-text {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* ==========================================================================
   4. Typografische helpers
   ========================================================================== */

/* Het mono-label: categorie, eyebrow. De handtekening van het merk.
   Let op: #d01020 als TEKST op een donkere achtergrond haalt maar 3,3:1 en
   zakt daarmee onder de WCAG AA-eis van 4,5:1 voor kleine tekst. Daarom is het
   label een gevuld rood vlak met lichte tekst (5,3:1), zoals ook in het
   Stitch-blogoverzicht. Rood blijft dominant, maar nu leesbaar. */
.oche-label {
	display: inline-block;
	align-self: flex-start;
	padding: 5px 10px;
	background: var(--primary-container);
	border-radius: var(--radius);
	font-family: var(--font-mono);
	font-size: 13px;
	font-weight: 500;
	line-height: 1;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--on-primary-container);
	text-decoration: none;
}

a.oche-label:hover,
a.oche-label:focus {
	filter: brightness(1.2);
	color: var(--on-primary-container);
	text-decoration: none;
}

/* Variant zonder vulling: donker vlak met rand, licht-rose tekst (10:1). */
.oche-label--outline {
	background: var(--surface-container-low);
	border: 1px solid var(--outline-variant);
	color: var(--primary);
}

.oche-label--muted {
	background: none;
	padding: 0;
	color: var(--on-secondary-container);
}

.oche-meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	font-family: var(--font-mono);
	font-size: 14px;
	letter-spacing: 0.05em;
	color: var(--on-secondary-container);
}

/* ==========================================================================
   5. Header en navigatie
   ========================================================================== */

.oche-header {
	position: sticky;
	top: 0;
	z-index: 50;
	width: 100%;
	background: var(--surface);
	border-bottom: 1px solid var(--outline-variant);
}

.oche-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--gutter);
	min-height: 80px;
}

.oche-brand {
	font-family: var(--font-head);
	font-size: 28px;
	font-weight: 700;
	line-height: 1;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--primary-container);
	text-decoration: none;
}

.oche-brand:hover,
.oche-brand:focus {
	color: var(--primary);
	text-decoration: none;
}

.oche-nav__list {
	display: flex;
	align-items: center;
	gap: var(--unit);
	margin: 0;
	padding: 0;
	list-style: none;
}

.oche-nav__list a {
	display: block;
	padding: 8px 12px;
	border-radius: var(--radius);
	font-family: var(--font-head);
	font-size: 18px;
	font-weight: 500;
	color: var(--on-surface-variant);
	text-decoration: none;
	transition: color 0.2s, background-color 0.2s;
}

.oche-nav__list a:hover,
.oche-nav__list a:focus {
	color: var(--on-surface);
	background: var(--surface-container-high);
	text-decoration: none;
}

/* Actieve pagina: rode onderstreping. De tekst zelf is licht-rose, want
   #d01020 op #131313 haalt de contrasteis voor 18px-tekst niet. De rode
   onderstreping (een rand, eis 3:1) draagt het signaal. */
.oche-nav__list .current-menu-item > a,
.oche-nav__list .current-menu-parent > a,
.oche-nav__list .current-menu-ancestor > a {
	color: var(--primary);
	box-shadow: inset 0 -2px 0 var(--primary-container);
}

.oche-header__actions {
	display: flex;
	align-items: center;
	gap: var(--unit);
}

.oche-icon-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	padding: 0;
	background: none;
	border: 0;
	border-radius: var(--radius);
	color: var(--on-surface);
	cursor: pointer;
	transition: background-color 0.2s;
}

.oche-icon-btn:hover,
.oche-icon-btn:focus {
	background: var(--surface-container-high);
	color: var(--on-surface);
	text-decoration: none;
}

.oche-icon-btn svg {
	width: 22px;
	height: 22px;
	fill: currentColor;
}

/* Mobiel menu: dicht tenzij open. Zonder JS is de knop verborgen en staat
   de navigatie gewoon in de flow, dus de links blijven altijd bereikbaar. */
.oche-nav-toggle {
	display: none;
}

@media (max-width: 899px) {
	.oche-nav {
		display: none;
		position: absolute;
		top: 100%;
		left: 0;
		right: 0;
		background: var(--surface-container-low);
		border-bottom: 1px solid var(--outline-variant);
		padding: var(--unit) var(--margin-mobile) var(--gutter);
	}

	.oche-nav.is-open {
		display: block;
	}

	.oche-nav__list {
		flex-direction: column;
		align-items: stretch;
		gap: 0;
	}

	.oche-nav__list a {
		padding: 14px 8px;
		font-size: 20px;
		border-bottom: 1px solid var(--outline-variant);
	}

	.js .oche-nav-toggle {
		display: inline-flex;
	}

	/* Zonder JS: menu altijd zichtbaar in de flow, nooit onbereikbaar */
	html:not(.js) .oche-nav {
		display: block;
		position: static;
		padding: 0;
		border: 0;
		background: none;
	}

	html:not(.js) .oche-header__inner {
		flex-wrap: wrap;
		padding-bottom: var(--unit);
	}
}

@media (min-width: 900px) {
	.oche-nav {
		display: block !important;
	}
}

/* ==========================================================================
   6. Footer
   ========================================================================== */

.oche-footer {
	flex-shrink: 0;
	width: 100%;
	margin-top: auto;
	background: var(--surface-container-lowest);
	border-top: 1px solid var(--outline-variant);
}

.oche-footer__inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--gutter);
	padding-block: 48px;
	text-align: center;
}

@media (min-width: 900px) {
	.oche-footer__inner {
		flex-direction: row;
		justify-content: space-between;
		text-align: left;
	}
}

.oche-footer__brand {
	font-family: var(--font-head);
	font-size: 20px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--on-surface);
	text-decoration: none;
}

.oche-footer__brand:hover,
.oche-footer__brand:focus {
	color: var(--primary);
	text-decoration: none;
}

.oche-footer__menu ul {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--gutter);
	margin: 0;
	padding: 0;
	list-style: none;
}

.oche-footer__menu a {
	font-family: var(--font-mono);
	font-size: 14px;
	letter-spacing: 0.05em;
	color: var(--on-secondary-container);
	text-decoration: none;
	transition: color 0.2s;
}

.oche-footer__menu a:hover,
.oche-footer__menu a:focus {
	color: var(--primary);
	text-decoration: underline;
}

.oche-footer__note {
	font-family: var(--font-mono);
	font-size: 13px;
	letter-spacing: 0.05em;
	color: var(--on-secondary-container);
	margin: 0;
}
