{{ partial "head-seo.html" . }} {{/* Brand + locale data exposed to client-side scripts (age gate, locale switcher). safeJS prevents html/template from escaping the JSON into a quoted string. */}} {{/* Add the age-gate class as early as possible to avoid a flash for confirmed visitors. */}} {{/* CSS pipeline: inject brand vars (ExecuteAsTemplate) -> Tailwind/PostCSS -> minify (production only) -> fingerprint. Hugo's [minify] does not minify Pipes resources, so we minify explicitly for production builds. */}} {{ $css := resources.Get "css/main.css" | resources.ExecuteAsTemplate "css/main.css" . | css.PostCSS }} {{ if hugo.IsProduction }}{{ $css = $css | minify }}{{ end }} {{ $css = $css | fingerprint "sha256" }} {{ i18n "skipToContent" }} {{ partial "age-gate-banner.html" . }} {{ partial "header.html" . }}
{{ block "main" . }}{{ end }}
{{ partial "footer.html" . }} {{ partial "cookie-consent.html" . }} {{/* App bundle (age gate, cookie consent, games filter). Loads BEFORE Alpine so the gamesFilter component is registered on the alpine:init event. */}} {{ $appJs := slice (resources.Get "js/age-gate.js") (resources.Get "js/cookie-consent.js") (resources.Get "js/games-filter.js") | resources.Concat "js/app.js" | minify | fingerprint "sha256" }} {{/* Alpine.js — vendored first-party (assets/js/vendor/alpine.js, pinned 3.14.8, refreshed from node_modules by `npm run build:js`) and fingerprinted so it ships with Subresource Integrity like the other assets. Deferred and placed AFTER the app bundle so components register on alpine:init before core runs. */}} {{ $alpine := resources.Get "js/vendor/alpine.js" | fingerprint "sha256" }}