/*
Theme Name: Finkers Hairdesign
Theme URI: https://shop.finkers.com
Author: Willem Online / Sander van Gool
Author URI: https://willemonline.nl
Description: Custom thema voor de webshop van Finkers Hairdesign. WooCommerce met prijzen achter de inlog, koppeling met King, en de maatwerkconfigurator. Opmaak 1:1 met het goedgekeurde ontwerpvoorstel. Zie changelogblok hieronder voor versiehistorie.
Version: 1.10.4
Requires at least: 6.0
Tested up to: 6.8
Requires PHP: 7.4
License: GPL v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: finkers
Tags: custom, woocommerce, business
*/

/* ═══════════════════════════════════════════════════════════════════════════
   CHANGELOG
   ───────────────────────────────────────────────────────────────────────────
   v1.10.3 (1 okt 2026) - Beveiliging compleet en in een eigen bestand,
     inc/security.php. Nieuw: beveiligingsheaders, gebruikersnamen niet meer
     opvraagbaar via REST, ?author= en de sitemap, versienummers achter eigen
     bestanden als hash, en een neutrale inlogfout met wachtwoord vergeten erin.
     XML-RPC en de generator-tag ongewijzigd verhuisd uit functions.php sectie 5.
   v1.10.2 (29 sep 2026) - Cursuspagina over de volle breedte, de kaarten stonden
     in de smalle leeskolom van page.php.
   v1.10.1 (29 sep 2026) - Tegel Educatie op de homepagina naar de eigen pagina
     /cursussen/ in de webshop in plaats van finkers.com (mail Roy 29 sep). Bij een
     gekozen productlijn staat de binnenzijde voorop en de foto bij aanwijzen, in het
     algemene overzicht blijft het andersom (mail Roy 29 sep, haarstuk heren).
   v1.10.0 (29 sep 2026) - Beoordelingen onder het product (mail Roy 29 sep,
     "Graag aanzetten"). Elke beoordeling wacht op goedkeuring door Finkers en
     Finkers krijgt een mail. functions.php sectie 13.
   v1.9.7 (15 sep 2026) - Opmerkingen
     Roy van 14 sep, winkel. (1) Productfoto's heel: WooCommerce sneed de miniatuur
     vierkant bij, bij FM Folie viel het haar weg. Op de voorkant nu het niet
     bijgesneden formaat, ook in winkelwagen en afrekenen. (2) /winkel/ begint met
     drie ingangen, Haarwerken, Aanvullende producten en Op=op, Follea Op=op gaat
     in Op=op op. Aanvullende producten toont zijn zeven onderdelen als tegels.
     Kruimelpad terug. (3) Filterkolom alleen bij de haarwerken en bij zoeken, met
     de drie hoofdfilters. Kleur en kleurnummer staan op de productpagina: knoppen
     per kleur die de keuzelijst en de kleurplaatjes beperken, op basis van de
     kleur per artikel uit King (kleurdata.php). Keuzelijst per model in de
     volgorde van zijn eigen kleurenring.
   v1.9.6 (12 sep 2026) - De kleurnummers in het filter staan nu in de volgorde van
     Roys kleurenringen en niet op alfabet, waar 100 tussen 10 en 11 belandde. De
     volgorde komt uit zijn Kleurenoverzicht, eerst de EVA SH ring, dan EVA HH, dan
     Adam SH en Adam HH.
   v1.9.5 (12 sep 2026) - De filterkolom telde over de hele winkel. Koos je Haarstuk
     heren, dan stonden de kleuren en kleurnummers van de dameshaarstukken er nog bij,
     terwijl die series een andere kleurenring gebruiken. De lijsten en de aantallen
     bewegen nu mee met wat je hebt gekozen, waarbij de groep die je zelf openhebt
     buiten de selectie blijft zodat je er een tweede kleur bij kunt vinken.
   v1.9.4 (12 sep 2026) - Zoekbalk in de kop. De winkel heeft 1127 producten
     waarvan er 1024 nog geen categorie hebben, dus die waren alleen via een
     directe link te vinden. Zoeken op een exact artikelnummer springt meteen
     naar het product, en bij de sku van een kleur naar het model met die kleur
     al gekozen. Op een telefoon staat het zoekveld op een eigen rij.
   v1.9.3 (10 sep 2026) - De vier ingangen op de startpagina stonden scheef. Het
     woord Bekijken zakte mee met de lengte van de tekst erboven, dus stond het
     bij elke kaart op een andere hoogte. De kaart is nu een kolom waarin de
     tekst de ruimte opvult, waardoor Bekijken in alle vier op dezelfde lijn
     eindigt.
   v1.9.2 (9 sep 2026) - Afzendernaam van mail was WordPress, staat nu op Finkers
     Hairdesign. Alleen de naam, want het afzenderadres hangt aan de SPF en hoort
     bij het DNS-werk van de livegang.
   v1.9.1 (9 sep 2026) - Drie van de vijf filters deden niets. Nagemeten:
     Productlijn, Kleur en Kleurnummer gaven gewoon alle 104 producten terug,
     terwijl Haarsoort en Haarlengte wel filterden. Het verschil was de
     instelling Archieven inschakelen op het kenmerk. Aangezet voor alle drie,
     daarna filteren ze en laten ze zich ook combineren. Die archieven leveren
     wel 129 kleurnummerpagina's op met bijna dezelfde inhoud, dus die staan nu
     op noindex.
   v1.9.0 (9 sep 2026) - De winkel op een telefoon, na kijken op een echt
     toestel. Twee dingen deugden niet. Je scrolde langs vijf filtergroepen,
     bijna drie schermen vinkjes, voordat je een product zag. De filters staan nu
     dichtgeklapt achter een knop Filters tonen, met een merkje als er een filter
     aanstaat. En er stond een kaart per rij, bijna schermvullend, waardoor je
     104 keer moest scrollen. Nu twee naast elkaar.
   v1.8.2 (9 sep 2026) - De kop op een telefoon. Mijn account en de winkelwagen
     plakten tegen het logo aan en het menu viel erbovenuit, omdat de
     automatische marge op smalle schermen wegviel. Nu twee rijen: logo links met
     de acties rechts, daaronder het menu over de volle breedte met een scheiding
     erboven. Gezien op een echte telefoon, niet op een verkleind venster.
   v1.8.1 (9 sep 2026) - De accountindeling klopte niet. Twee oorzaken, allebei
     nagemeten. WooCommerce zet een leeg meldingenvak voor de navigatie, dat
     pakte de eerste rastercel waardoor de navigatie rechts kwam en de inhoud een
     rij lager. En de leesbreedte van 72 tekens knelde ook hier, net als bij de
     configurator. Mijn account, winkelwagen en afrekenen lopen namelijk via
     page.php.
   v1.8.0 (9 sep 2026) - Het accountgedeelte. Inloggen, mijn account, de
     bestellingen- en adrestabellen en de meldingen van WooCommerce. Het
     inlogscherm is het eerste dat een salon ziet, want de prijzen zitten achter
     de inlog, en dat was tot nu toe een kaal formulier. De accountnavigatie was
     een opsomming met bolletjes en is nu een kolom naast de inhoud.
   v1.7.1 (9 sep 2026) - Kleurbepaling stond als enige veld smal naast zijn
     label, omdat de plugin alleen select, number en textarea op volle breedte
     zet en niet input type text.
   v1.7.0 (9 sep 2026) - De configurator stond op 619 pixels in een kader van
     1240. Oorzaak was onze eigen leesbreedte van 72 tekens op .pagina-tekst.
     Die vervalt nu op een pagina met de configurator.
   v1.6.0 (9 sep 2026) - De configurator in de huisstijl. De plugin heeft een
     eigen stylesheet die het zware werk al doet, kolommen en een meeschuivend
     prijsblok, en die stelt de variabelen fhd-lijn en fhd-accent beschikbaar.
     Daar gaat de huisstijl nu overheen zonder de plugin aan te raken. Het
     prijsblok heeft de magenta streep uit het ontwerp gekregen, en de knop
     Aanvraag versturen was een standaard browserknop omdat hij buiten
     WooCommerce staat.
   v1.5.0 (9 sep 2026) - Twee reparaties na meten op de productpagina.
     (1) De prijs bleef 0,00. Het filter uit 1.3.0 besliste op get_price(), en die
     geeft op een variabel product gewoon 403. De King-plugin maakt er daarna
     0,00 van voor wie geen prijsafspraak heeft, dus het filter liet die staan.
     Nu kijkt het naar de uitkomst en draait het op priority 999.
     (2) De binnenwerktekening kwam als 100 bij 100 binnen en werd opgeblazen
     naar 568. Galerij vraagt nu het formaat large op, want juist die nummers
     moeten leesbaar zijn.
   v1.4.0 (9 sep 2026) - Productpagina. De galerij van WooCommerce kreeg hoogte
     nul door het schuifsysteem, waardoor de hoofdfoto buiten beeld viel en er
     een leeg vlak overbleef. Nagemeten: wrapper 0 pixels hoog terwijl de foto
     800 bij 1031 was. Slider en zoom eruit, foto's staan nu onder elkaar met het
     binnenwerk direct onder het haarwerk. Verder heeft de hele productpagina nu
     opmaak: twee kolommen, de titel, de prijs, de kleurkeuze, het aantal en de
     tabbladen.
   v1.3.0 (9 sep 2026) - Prijzen toonden 0,00 aan wie geen prijsafspraak uit King
     heeft, en dat leest als gratis of als kapot. Nagemeten: de prijzen zijn er
     wel, alle 104 producten en alle 649 variaties, FW 975 staat gewoon op 403.
     Het is dus weergave en geen data. Nu Prijs zichtbaar na inloggen voor wie
     niet is ingelogd en Prijs op aanvraag voor wie wel is ingelogd maar geen
     afspraak heeft.
   v1.2.0 (9 sep 2026) - Kleurnummer als vijfde filter toegevoegd, honderd waarden
     in Roys eigen ringvolgorde, achter de uitklap. En twee waarschuwingen in
     wp-admin die stil falen bij de livegang moeten voorkomen: een rode als de
     site op noindex staat en een oranje als de winkel nog op binnenkort
     beschikbaar staat. Allebei verdwijnen ze vanzelf zodra de instelling om is.
     Aanleiding: de noindex stond aan en gaat ongemerkt mee naar productie,
     waarmee het hele SEO- en GEO-werk zou worden uitgeschakeld.
   v1.1.0 (9 sep 2026) - Twee stukken uit het goedgekeurde ontwerp die er nog
     niet in zaten. (1) De filterkolom van 236 pixels naast het assortiment,
     op haarsoort, haarlengte, productlijn en kleur. Filtert via de eigen
     filter_pa parameters van WooCommerce. Lange lijsten zoals de kleuren staan
     achter een uitklap. Meteen het antwoord op de te grote kaarten, want zonder
     die kolom kreeg het raster de volle breedte. (2) Een echte homepage. De
     startpagina stond ingesteld op de Winkel, dus een salon viel meteen in het
     assortiment. Opzet aangehouden van de oude shop, welkom plus vier ingangen
     plus openingstijden, in de nieuwe huisstijl.
     Verder staan de productfoto's nu passend in plaats van bijgesneden. Een
     haarwerk vult de 3:4 vanzelf, maar een clip werd tot een portret gesneden
     en uitvergroot waardoor je het product niet meer zag.
   v1.0.2 (9 sep 2026) - Kaarten stonden op 117 pixels in een kolom van 380. Niet
     de laadvolgorde maar de specificiteit: woocommerce-layout.css zet
     .columns-3 li.product op 30,75 procent en woocommerce.css zet
     li.product a img op height auto. Beide wegen zwaarder dan onze kortere
     selector, dus die regels stonden er wel en deden niets. Nu met de volle
     keten ervoor. Kaarten zijn tegelijk flexkolommen geworden zodat de knoppen
     op een lijn staan.
   v1.0.1 (9 sep 2026) - Twee bevindingen uit de QA-pass na de eerste upload.
     (1) llms.txt serveerde zijn inhoud met statuscode 404, want op
     template_redirect staat de 404 al vast. Nu met status_header(200).
     (2) xmlrpc.php gaf nog drie system.* methoden terug. Die voegt WordPress toe
     NA het xmlrpc_methods filter en xmlrpc_call vuurt er niet op, dus bij Cander
     bleven ze bereikbaar. Vierde laag toegevoegd die het hele verzoek op init
     afkapt.
   v1.0.0 (9 sep 2026) — Eerste versie. Vervangt het kindthema van Twenty
     Twenty-Five dat er eerder stond. Eigen klassiek thema volgens het
     Cander-patroon, zoals vastgelegd in context/business/website-build-playbook.md.
     Erin: huisstijl uit het goedgekeurde ontwerpvoorstel, Archivo lokaal
     meegeleverd zonder Google Fonts, de binnenwerkwissel die Roy vroeg
     (aanwijzen op een muis, tikken op een aanraakscherm, focus voor
     toetsenbord), JSON-LD schema, en de vaste beveiligingsset.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ---------- Lettertype, lokaal zodat er niets naar Google gaat ---------- */

@font-face {
	font-family: "Archivo";
	font-style: normal;
	font-weight: 100 900;
	font-display: swap;
	src: url("assets/fonts/archivo-latin.woff2") format("woff2");
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
		U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: "Archivo";
	font-style: normal;
	font-weight: 100 900;
	font-display: swap;
	src: url("assets/fonts/archivo-latin-ext.woff2") format("woff2");
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304,
		U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0,
		U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ---------- Huisstijl ---------- */

:root {
	--magenta: #e2007a;
	--inkt: #1a1a1a;
	--grafiet: #343434;
	--grijs: #8a8a8a;
	--lijn: #e1e1e1;
	--mist: #f4f4f4;
	--papier: #ffffff;
	--kader: 1240px;
}

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

body {
	margin: 0;
	background: var(--papier);
	color: var(--inkt);
	font-family: "Archivo", -apple-system, "Helvetica Neue", Helvetica, Arial, sans-serif;
	font-size: 15px;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
}

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

a {
	color: inherit;
}

h1, h2, h3, h4 {
	margin: 0 0 0.5em;
	font-weight: 700;
	line-height: 1.1;
	letter-spacing: -0.02em;
}

.kader {
	max-width: var(--kader);
	margin: 0 auto;
	padding: 0 28px;
}

.enkel-schermlezer {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}
