feat: strengthen operator template and localized SEO UX

This commit is contained in:
pipeline
2026-07-21 04:01:15 +03:00
parent 363810024b
commit 14d616d1c9
18 changed files with 271 additions and 95 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="{{ .Site.LanguageCode | default "en" }}">
<html lang="{{ .Language.LanguageCode | default .Language.Lang | default "en" }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
+13 -11
View File
@@ -1,36 +1,38 @@
{{ define "main" }}
{{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{- $hideCta := or .Params.hideCta (in $noCtaSlugs .Slug) (eq .Section "authors") -}}
{{ partial "breadcrumbs.html" . }}
<article class="site-container section">
<header class="mb-8 max-w-3xl">
<h1 class="text-3xl font-extrabold tracking-tight sm:text-4xl">{{ .Params.h1 | default .Title }}</h1>
{{ with .Params.description }}<p class="mt-3 text-lg text-secondary/70">{{ . }}</p>{{ end }}
{{ if not .Lastmod.IsZero }}<p class="mt-2 text-xs text-secondary/70">Last updated {{ .Lastmod.Format "2 January 2006" }}</p>{{ end }}
{{ if not .Lastmod.IsZero }}<p class="mt-2 text-xs text-secondary/70">{{ i18n "lastUpdated" }} {{ .Lastmod | time.Format ":date_long" }}</p>{{ end }}
</header>
{{ with .Content }}<div class="prose-content max-w-3xl">{{ . }}</div>{{ end }}
{{ if or .Params.pros .Params.cons }}
<section class="mt-12 max-w-3xl">
<h2 class="mb-4 text-2xl font-bold">Pros &amp; cons at a glance</h2>
<h2 class="mb-4 text-2xl font-bold">{{ i18n "prosCons" }}</h2>
{{ partial "pros-cons-table.html" . }}
</section>
{{ end }}
{{ if .Params.showRatingWidget }}
<section class="mt-12 max-w-3xl">
<h2 class="mb-4 text-2xl font-bold">Our verdict</h2>
<h2 class="mb-4 text-2xl font-bold">{{ i18n "ourVerdict" }}</h2>
{{ partial "rating-widget.html" . }}
</section>
{{ end }}
{{ if .Params.showKycByLocale }}
<section class="mt-12 max-w-4xl">
<h2 class="mb-3 text-2xl font-bold">Verification documents by region</h2>
<p class="mb-4 text-secondary/70">KYC requirements vary by market. Choose your region in the header to highlight your row; the full list is below.</p>
<h2 class="mb-3 text-2xl font-bold">{{ i18n "kycByRegion" }}</h2>
<p class="mb-4 text-secondary/70">{{ i18n "kycByRegionIntro" }}</p>
<div class="overflow-x-auto">
<table class="data-table">
<thead><tr><th scope="col">Region</th><th scope="col">Required documents (KYC)</th></tr></thead>
<thead><tr><th scope="col">{{ i18n "region" }}</th><th scope="col">{{ i18n "requiredKyc" }}</th></tr></thead>
<tbody>
{{- range .Site.Data.locales -}}
<tr data-kyc-row data-locale="{{ .locale }}">
@@ -46,7 +48,7 @@
{{ if .Params.showFaqAccordion }}
<section class="mt-12">
<h2 class="mb-6 text-2xl font-bold">Frequently asked questions</h2>
<h2 class="mb-6 text-2xl font-bold">{{ i18n "frequentlyAskedQuestions" }}</h2>
{{ partial "faq-accordion.html" . }}
</section>
{{ end }}
@@ -57,11 +59,11 @@
</section>
{{ end }}
{{ if not .Params.hideCta }}
{{ if not $hideCta }}
<div class="mt-12 max-w-3xl rounded-2xl border border-primary/20 bg-primary/5 p-6">
<h2 class="text-xl font-bold">Ready to get started?</h2>
<p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ only. T&amp;Cs apply. Please gamble responsibly.</p>
<div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" "Visit Casino" "size" "lg") }}</div>
<h2 class="text-xl font-bold">{{ i18n "readyToStart" }}</h2>
<p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ {{ i18n "termsResponsible" }}</p>
<div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" (i18n "visitCasino") "size" "lg") }}</div>
</div>
{{ end }}
</article>
+18 -7
View File
@@ -9,10 +9,10 @@
<h1 class="mt-2 text-4xl font-extrabold leading-tight tracking-tight sm:text-5xl">{{ .Params.h1 | default .Title }}</h1>
<p class="mt-4 max-w-xl text-lg text-white/90">{{ .Params.description | default $brand.tagline }}</p>
<div class="mt-8 flex flex-wrap gap-3">
{{ partial "cta-button.html" (dict "page" . "text" "Play Now" "size" "lg") }}
{{ with site.GetPage "bonuses" }}<a href="{{ .RelPermalink }}" class="btn border-2 border-white/80 text-white hover:bg-white hover:text-secondary">See bonuses</a>{{ end }}
{{ partial "cta-button.html" (dict "page" . "text" (i18n "playNow") "size" "lg") }}
{{ with site.GetPage "bonuses" }}<a href="{{ .RelPermalink }}" class="btn border-2 border-white/80 text-white hover:bg-white hover:text-secondary">{{ i18n "seeBonuses" }}</a>{{ end }}
</div>
<p class="mt-5 text-sm text-white/70"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ only &bull; T&amp;Cs apply &bull; Please gamble responsibly</p>
<p class="mt-5 text-sm text-white/70"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ {{ i18n "termsResponsible" }}</p>
</div>
<div class="relative">
{{ $hero := resources.Get "images/hero.png" }}
@@ -57,16 +57,27 @@
</section>
{{ end }}
{{/* The homepage uses the same accessible FAQ source and accordion as /faq/. */}}
<section class="site-container section pt-0" aria-labelledby="home-faq-heading">
<div class="mb-6 max-w-3xl">
<p class="eyebrow">{{ i18n "playerHelp" }}</p>
<h2 id="home-faq-heading" class="mt-2 text-2xl font-bold">{{ i18n "frequentlyAskedQuestions" }}</h2>
<p class="mt-2 text-secondary/70">{{ i18n "faqIntro" }}</p>
</div>
{{ partial "faq-accordion.html" . }}
{{ with site.GetPage "faq" }}<p class="mt-5 text-center"><a href="{{ .RelPermalink }}" class="font-semibold text-primary">{{ i18n "viewAllFaq" }} &rarr;</a></p>{{ end }}
</section>
{{/* Quick shortcuts */}}
<section class="site-container section pt-0">
<h2 class="mb-6 text-2xl font-bold">Start here</h2>
<h2 class="mb-6 text-2xl font-bold">{{ i18n "startHere" }}</h2>
<div class="grid gap-4 sm:grid-cols-3">
{{- range slice "registration" "slots" "bonuses" -}}
{{ with site.GetPage . }}
<a href="{{ .RelPermalink }}" class="card card-hover block no-underline">
<span class="badge-primary">{{ .LinkTitle }}</span>
<p class="mt-2 text-secondary/70">{{ .Params.description | truncate 90 }}</p>
<span class="mt-3 inline-block font-semibold text-primary">Explore &rarr;</span>
<span class="mt-3 inline-block font-semibold text-primary">{{ i18n "explore" }} &rarr;</span>
</a>
{{ end }}
{{- end -}}
@@ -78,8 +89,8 @@
{{ with $featured }}
<section class="site-container section pt-0">
<div class="mb-6 flex items-end justify-between">
<h2 class="text-2xl font-bold">Featured games</h2>
{{ with site.GetPage "slots" }}<a href="{{ .RelPermalink }}" class="font-semibold text-primary">All games &rarr;</a>{{ end }}
<h2 class="text-2xl font-bold">{{ i18n "featuredGames" }}</h2>
{{ with site.GetPage "slots" }}<a href="{{ .RelPermalink }}" class="font-semibold text-primary">{{ i18n "allGames" }} &rarr;</a>{{ end }}
</div>
<div class="grid gap-5 sm:grid-cols-2 lg:grid-cols-4">
{{- range first 4 . -}}
+2 -7
View File
@@ -9,16 +9,11 @@
<span><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+</span>
</div>
<h2 id="age-gate-title" class="text-2xl font-bold text-secondary">{{ i18n "ageGateTitle" }}</h2>
<p id="age-gate-desc" class="mt-3 text-secondary/80">
This website is intended for users aged <span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ only.
By entering, you confirm you meet the legal gambling age in your jurisdiction. Gamble responsibly.
</p>
<p id="age-gate-desc" class="mt-3 text-secondary/80">{{ printf (i18n "ageGateDescription") $brand.ageRestrictionDefault }}</p>
<div class="mt-6 flex flex-col gap-3">
<button type="button" data-age-confirm class="btn-primary btn-lg">{{ i18n "ageGateConfirm" }}</button>
<button type="button" data-age-exit class="btn-ghost">{{ i18n "ageGateExit" }}</button>
</div>
<p class="mt-4 text-xs text-secondary/60">
Underage gambling is an offence. This is an independent affiliate resource, not the operator.
</p>
<p class="mt-4 text-xs text-secondary/60">{{ i18n "ageGateNotice" }}</p>
</div>
</div>
+4 -1
View File
@@ -4,7 +4,10 @@
Alpine (when present) layers single-open accordion behaviour on top via
x-bind:open + the native `toggle` event — never hiding content with
x-cloak. The FAQPage JSON-LD is emitted separately by schema-jsonld.html. */ -}}
{{- $faqs := sort .Site.Data.faq "weight" -}}
{{- $faqKey := printf "faq.%s" .Language.Lang -}}
{{- $faqs := index .Site.Data $faqKey -}}
{{- if not $faqs -}}{{- $faqs = .Site.Data.faq -}}{{- end -}}
{{- $faqs = sort $faqs "weight" -}}
<div class="mx-auto max-w-3xl divide-y divide-secondary/10 rounded-xl border border-secondary/10" x-data="{ open: null }">
{{- range $i, $f := $faqs -}}
<details class="group"
+5 -7
View File
@@ -1,5 +1,4 @@
{{- /* footer.html — appears on every page. Includes (per spec): affiliate
disclosure link, licence/authority text (from data/brand.yaml),
{{- /* footer.html — appears on every page. Includes licence/authority text,
responsible-gambling links, cookie policy link, an "18+ Gamble
Responsibly" badge and a dynamic copyright year. */ -}}
{{- $brand := .Site.Data.brand -}}
@@ -37,7 +36,7 @@
</div>
{{/* Explore */}}
<nav aria-label="Footer">
<nav aria-label="{{ i18n "footerExplore" }}">
<h2 class="text-sm font-semibold uppercase tracking-wider text-white/60">{{ i18n "footerExplore" }}</h2>
<ul class="mt-3 space-y-2 text-sm">
{{- range $primary -}}
@@ -47,7 +46,7 @@
</nav>
{{/* Legal & safety */}}
<nav aria-label="Legal and safety">
<nav aria-label="{{ i18n "footerLegal" }}">
<h2 class="text-sm font-semibold uppercase tracking-wider text-white/60">{{ i18n "footerLegal" }}</h2>
<ul class="mt-3 space-y-2 text-sm">
{{- range $legal -}}
@@ -74,12 +73,11 @@
<div class="border-t border-white/10">
<div class="site-container flex flex-col gap-3 py-6 text-xs text-white/60 md:flex-row md:items-center md:justify-between">
<p>
<span class="mr-2 inline-flex items-center rounded bg-white/10 px-2 py-1 font-bold text-white"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ Gamble Responsibly</span>
{{ $brand.legalOperatorName }} is licensed and regulated by the {{ $brand.licenseAuthority }} (Licence No. {{ $brand.licenseNumber }}).
<span class="mr-2 inline-flex items-center rounded bg-white/10 px-2 py-1 font-bold text-white"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ {{ i18n "gambleResponsibly" }}</span>
{{ printf (i18n "licenceStatement") $brand.legalOperatorName $brand.licenseAuthority $brand.licenseNumber }}
</p>
<p>
&copy; {{ now.Year }} {{ $brand.name }}. {{ i18n "allRightsReserved" }}
{{ with site.GetPage "affiliate-disclosure" }}<a href="{{ .RelPermalink }}" class="ml-2 text-white/80 underline hover:text-white">{{ i18n "affiliateDisclosure" }}</a>{{ end }}
</p>
</div>
</div>
+2 -2
View File
@@ -5,7 +5,7 @@
{{- $title := "" -}}
{{- if .IsHome -}}
{{- $title = printf "%s | %s" $brand.name $brand.tagline -}}
{{- $title = .Params.title | default (printf "%s | %s" $brand.name $brand.tagline) -}}
{{- else -}}
{{- $title = printf "%s | %s" (.Params.title | default .Title) $brand.name -}}
{{- end -}}
@@ -33,7 +33,7 @@
<meta property="og:description" content="{{ $desc }}">
<meta property="og:url" content="{{ .Permalink }}">
<meta property="og:site_name" content="{{ $brand.name }}">
<meta property="og:locale" content="{{ replace $brand.defaultLocale "-" "_" }}">
<meta property="og:locale" content="{{ replace (.Language.LanguageCode | default .Language.Lang) "-" "_" }}">
<meta property="og:image" content="{{ $ogImage }}">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
+8 -4
View File
@@ -4,9 +4,11 @@
The region/compliance data layer (age/RG/currency/payment filtering) is
applied headlessly by locale-switcher.html — it no longer renders a visible
selector, but its script must still run on every page. */ -}}
{{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{- $hideCta := or .Params.hideCta (in $noCtaSlugs .Slug) (eq .Section "authors") -}}
<header class="sticky top-0 z-40 border-b border-secondary/10 bg-white/95 backdrop-blur">
<div class="site-container flex h-16 items-center gap-3 md:gap-4">
<a href="{{ "/" | relURL }}" class="flex shrink-0 items-center gap-2 no-underline" aria-label="{{ .Site.Data.brand.name }} home">
<a href="{{ site.Home.RelPermalink }}" class="flex shrink-0 items-center gap-2 no-underline" aria-label="{{ .Site.Data.brand.name }} {{ i18n "home" }}">
{{ partial "responsive-image.html" (dict
"src" .Site.Data.brand.logoPath
"alt" (printf "%s logo" .Site.Data.brand.name)
@@ -19,9 +21,11 @@
<div class="ml-auto flex shrink-0 items-center gap-2">
{{ if gt (len site.Languages) 1 }}{{ partial "language-switcher.html" . }}{{ end }}
<span class="hidden sm:inline-flex">
{{ partial "cta-button.html" (dict "page" . "text" (i18n "playNow")) }}
</span>
{{ if not $hideCta }}
<span class="hidden sm:inline-flex">
{{ partial "cta-button.html" (dict "page" . "text" (i18n "playNow")) }}
</span>
{{ end }}
</div>
</div>
{{ partial "locale-switcher.html" . }}
+6 -2
View File
@@ -2,11 +2,13 @@
ordered by weight. Desktop = inline list; mobile = Alpine.js toggle. */ -}}
{{- $current := . -}}
{{- $navPages := sort (where .Site.Pages "Params.showInNav" true) "Weight" -}}
{{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{- $hideCta := or $current.Params.hideCta (in $noCtaSlugs $current.Slug) (eq $current.Section "authors") -}}
{{/* Desktop — min-w-0 lets the nav shrink inside the flex row; overflow-x-auto
keeps a long section list on one line and scrollable instead of pushing the
header past the viewport. */}}
<nav aria-label="Primary" class="hidden min-w-0 flex-1 lg:block">
<nav aria-label="{{ i18n "primaryNavigation" }}" class="hidden min-w-0 flex-1 lg:block">
<ul class="nav-scroll flex items-center gap-1 overflow-x-auto whitespace-nowrap">
{{- range $navPages -}}
{{- $active := eq $current.RelPermalink .RelPermalink -}}
@@ -41,7 +43,9 @@
{{- range $navPages -}}
<li><a href="{{ .RelPermalink }}" class="nav-link block">{{ .LinkTitle }}</a></li>
{{- end -}}
<li class="pt-3">{{ partial "cta-button.html" (dict "page" $current "text" (i18n "playNow") "block" true) }}</li>
{{ if not $hideCta }}
<li class="pt-3">{{ partial "cta-button.html" (dict "page" $current "text" (i18n "playNow") "block" true) }}</li>
{{ end }}
</ul>
</div>
</details>
+12 -11
View File
@@ -6,7 +6,7 @@
{{- $page := .page -}}
{{- $brand := $page.Site.Data.brand -}}
{{- $methods := $page.Site.Data.payment_methods -}}
{{- $locale := .locale -}}
{{- $locale := .locale | default $page.Language.LanguageCode -}}
{{- if $locale -}}
{{- $f := slice -}}
{{- range $methods -}}{{ if in .availableLocales $locale }}{{ $f = $f | append . }}{{ end }}{{- end -}}
@@ -14,18 +14,19 @@
{{- end -}}
{{- $curr := "£" -}}
{{- with where $page.Site.Data.locales "locale" $brand.defaultLocale -}}{{- $curr = (index . 0).currencySymbol -}}{{- end -}}
{{- with where $page.Site.Data.locales "locale" $locale -}}{{- $curr = (index . 0).currencySymbol -}}{{- end -}}
{{- $isWithdrawal := eq $page.Slug "withdrawal" -}}
<div class="overflow-x-auto">
<table class="data-table">
<thead>
<tr>
<th scope="col">Method</th>
<th scope="col">Type</th>
<th scope="col">Min. deposit</th>
<th scope="col">Max. deposit</th>
<th scope="col">Processing time</th>
<th scope="col">Fees</th>
<th scope="col">{{ i18n "paymentMethod" }}</th>
<th scope="col">{{ i18n "paymentType" }}</th>
{{ if not $isWithdrawal }}<th scope="col">{{ i18n "minimumDeposit" }}</th>{{ end }}
{{ if not $isWithdrawal }}<th scope="col">{{ i18n "maximumDeposit" }}</th>{{ end }}
<th scope="col">{{ i18n "processingTime" }}</th>
<th scope="col">{{ i18n "fees" }}</th>
</tr>
</thead>
<tbody>
@@ -38,8 +39,8 @@
</span>
</th>
<td><span class="badge-muted capitalize">{{ .type }}</span></td>
<td><span data-locale-currency>{{ $curr }}</span>{{ .minDeposit }}</td>
<td><span data-locale-currency>{{ $curr }}</span>{{ .maxDeposit }}</td>
{{ if not $isWithdrawal }}<td><span data-locale-currency>{{ $curr }}</span>{{ .minDeposit }}</td>{{ end }}
{{ if not $isWithdrawal }}<td><span data-locale-currency>{{ $curr }}</span>{{ .maxDeposit }}</td>{{ end }}
<td>{{ .processingTime }}</td>
<td>{{ .fees }}</td>
</tr>
@@ -47,4 +48,4 @@
</tbody>
</table>
</div>
<p class="mt-2 text-xs text-secondary/70">Availability and limits vary by region and are shown for your selected market. Select your region in the header to update this table.</p>
<p class="mt-2 text-xs text-secondary/70">{{ i18n "paymentAvailabilityNote" }}</p>
+2 -2
View File
@@ -15,13 +15,13 @@
{{- end -}}
{{- with $found -}}
<section class="site-container section" aria-labelledby="related-heading">
<h2 id="related-heading" class="text-xl font-bold">Related pages</h2>
<h2 id="related-heading" class="text-xl font-bold">{{ i18n "relatedPages" }}</h2>
<div class="mt-4 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{{- range . -}}
<a href="{{ .RelPermalink }}" class="card card-hover block no-underline">
<span class="badge-primary">{{ .LinkTitle }}</span>
<p class="mt-2 text-sm text-secondary/70">{{ .Params.description | default (.Summary | plainify) | truncate 110 }}</p>
<span class="mt-3 inline-block text-sm font-semibold text-primary">Read more &rarr;</span>
<span class="mt-3 inline-block text-sm font-semibold text-primary">{{ i18n "readMore" }} &rarr;</span>
</a>
{{- end -}}
</div>
@@ -6,8 +6,9 @@
{{- $variant := .variant | default "full" -}}
{{- $brand := $page.Site.Data.brand -}}
{{- $locales := $page.Site.Data.locales -}}
{{- $currentLocale := $page.Language.LanguageCode | default $brand.defaultLocale -}}
{{- $default := "" -}}
{{- with where $locales "locale" $brand.defaultLocale -}}{{- $default = index . 0 -}}{{- end -}}
{{- with where $locales "locale" $currentLocale -}}{{- $default = index . 0 -}}{{- end -}}
{{- $age := $brand.ageRestrictionDefault -}}
{{- $orgName := "your national support service" -}}
{{- $orgUrl := "#" -}}
@@ -18,36 +19,33 @@
{{- end -}}
{{- if eq $variant "compact" -}}
<p>This site is intended for adults aged <span data-age-value>{{ $age }}</span>+ only. Gambling should be entertainment, never a way to make money.</p>
<p class="mt-2">Need help? Contact <a data-rg-link href="{{ $orgUrl }}" target="_blank" rel="noopener nofollow" class="font-semibold text-white underline"><span data-rg-name>{{ $orgName }}</span></a>.</p>
<p>{{ printf (i18n "rgCompactIntro") $age }}</p>
<p class="mt-2">{{ i18n "rgNeedHelp" }} <a data-rg-link href="{{ $orgUrl }}" target="_blank" rel="noopener nofollow" class="font-semibold text-white underline"><span data-rg-name>{{ $orgName }}</span></a>.</p>
{{- else -}}
<div class="prose-content">
<p>
Gambling must stay fun. This site is intended for adults aged
<strong><span data-age-value>{{ $age }}</span>+</strong> only. Never bet more than you can afford to
lose, never chase losses, and never gamble to escape stress or debt. If it stops being enjoyable,
it is time to stop.
{{ printf (i18n "rgFullIntro") $age }}
</p>
<h3>Tools to stay in control</h3>
<h3>{{ i18n "rgControlTools" }}</h3>
<ul>
<li><strong>Deposit limits</strong> &mdash; cap how much you can add to your account per day, week or month.</li>
<li><strong>Loss &amp; wager limits</strong> &mdash; set a ceiling on stakes or net losses over a period.</li>
<li><strong>Reality checks</strong> &mdash; on-screen reminders of how long you have been playing.</li>
<li><strong>Time-outs</strong> &mdash; lock yourself out for 24 hours up to several weeks.</li>
<li><strong>Self-exclusion</strong> &mdash; block access for months or years, including national schemes.</li>
<li>{{ i18n "rgDepositLimits" | safeHTML }}</li>
<li>{{ i18n "rgLossLimits" | safeHTML }}</li>
<li>{{ i18n "rgRealityChecks" | safeHTML }}</li>
<li>{{ i18n "rgTimeouts" | safeHTML }}</li>
<li>{{ i18n "rgSelfExclusion" | safeHTML }}</li>
</ul>
<h3>Find local support</h3>
<h3>{{ i18n "rgFindSupport" }}</h3>
<p>
Your currently selected region recommends
{{ i18n "rgRegionRecommends" }}
<a data-rg-link href="{{ $orgUrl }}" target="_blank" rel="noopener nofollow"><span data-rg-name>{{ $orgName }}</span></a>.
Support services for every market we cover are listed below &mdash; all offer free, confidential help.
{{ i18n "rgSupportIntro" }}
</p>
<div class="overflow-x-auto">
<table class="data-table">
<thead>
<tr><th scope="col">Region</th><th scope="col">Min. age</th><th scope="col">Support organisation</th></tr>
<tr><th scope="col">{{ i18n "region" }}</th><th scope="col">{{ i18n "minimumAge" }}</th><th scope="col">{{ i18n "supportOrganisation" }}</th></tr>
</thead>
<tbody>
{{- range $locales -}}
+26 -7
View File
@@ -22,9 +22,14 @@
-}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- else if eq $type "FAQPage" -}}
{{- end -}}
{{- if or .IsHome (eq $type "FAQPage") .Params.showFaqAccordion -}}
{{- $faqKey := printf "faq.%s" .Language.Lang -}}
{{- $faqs := index .Site.Data $faqKey -}}
{{- if not $faqs -}}{{- $faqs = .Site.Data.faq -}}{{- end -}}
{{- $items := slice -}}
{{- range .Site.Data.faq -}}
{{- range $faqs -}}
{{- $items = $items | append (dict
"@type" "Question"
"name" .question
@@ -38,9 +43,11 @@
-}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- else if eq $type "Article" -}}
{{- /* The About page is an editorial review, so we emit a Review with the
promoted operator as the reviewed item. */ -}}
{{- end -}}
{{- if and (eq $type "Article") .Params.showRatingWidget -}}
{{- $authorName := .Params.authorName | default $brand.name -}}
{{- $authorType := cond (isset .Params "authorName") "Person" "Organization" -}}
{{- $data := dict
"@context" "https://schema.org"
"@type" "Review"
@@ -48,10 +55,22 @@
"url" .Permalink
"datePublished" (.Date.Format "2006-01-02")
"dateModified" (.Lastmod.Format "2006-01-02")
"author" (dict "@type" $authorType "name" $authorName)
"publisher" (dict "@type" "Organization" "name" $brand.name "logo" (dict "@type" "ImageObject" "url" ($brand.logoPath | absURL)))
"itemReviewed" (dict "@type" "Organization" "name" $brand.name)
"reviewRating" (dict "@type" "Rating" "ratingValue" (.Params.rating | default $brand.ratingValue) "bestRating" 5 "worstRating" 1)
-}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- else if eq $type "Article" -}}
{{- $data := dict
"@context" "https://schema.org"
"@type" "Article"
"headline" (.Params.h1 | default .Title)
"url" .Permalink
"datePublished" (.Date.Format "2006-01-02")
"dateModified" (.Lastmod.Format "2006-01-02")
"author" (dict "@type" "Organization" "name" $brand.name)
"publisher" (dict "@type" "Organization" "name" $brand.name "logo" (dict "@type" "ImageObject" "url" ($brand.logoPath | absURL)))
"itemReviewed" (dict "@type" "Organization" "name" $brand.legalOperatorName)
"reviewRating" (dict "@type" "Rating" "ratingValue" $brand.ratingValue "bestRating" 5 "worstRating" 1)
-}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- end -}}
+3 -3
View File
@@ -5,7 +5,7 @@
<div class="site-container flex flex-wrap items-center justify-center gap-4 py-5 text-xs text-white/70">
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1 font-semibold">
<span class="grid h-5 w-5 place-items-center rounded-full bg-white/20"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span></span>
Over-age play only
{{ i18n "overAgeOnly" }}
</span>
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1">
<svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3l7 4v5c0 4.4-3 8.3-7 9-4-0.7-7-4.6-7-9V7l7-4z"/></svg>
@@ -13,10 +13,10 @@
</span>
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1">
<svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
SSL secured
{{ i18n "sslSecured" }}
</span>
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1">
Independent affiliate &mdash; not the operator
{{ i18n "licensedOperator" }}
</span>
</div>
</div>
+12 -8
View File
@@ -1,10 +1,14 @@
{{- /* {{< cta text="Play Now" style="primary" size="lg" subid="custom" >}}
Reuses partials/cta-button.html so the affiliate link is built in ONE place. */ -}}
<div class="my-6">
{{ partial "cta-button.html" (dict
"page" .Page
"text" (.Get "text" | default "Play Now")
"style" (.Get "style")
"size" (.Get "size")
"subid" (.Get "subid")) }}
</div>
{{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{- $hideCta := or .Page.Params.hideCta (in $noCtaSlugs .Page.Slug) (eq .Page.Section "authors") -}}
{{- if not $hideCta -}}
<div class="my-6">
{{ partial "cta-button.html" (dict
"page" .Page
"text" (.Get "text" | default (i18n "playNow"))
"style" (.Get "style")
"size" (.Get "size")
"subid" (.Get "subid")) }}
</div>
{{- end -}}
+5 -5
View File
@@ -10,19 +10,19 @@
{{ with .Content }}<div class="prose-content max-w-3xl">{{ . }}</div>{{ end }}
{{ $games := sort (where .Site.RegularPages "Section" "slots") "Title" }}
<section class="mt-10" aria-label="Game library">
<section class="mt-10" aria-label="{{ i18n "gameLibrary" }}">
{{ if $games }}
{{ partial "games-filter.html" (dict "page" . "games" $games) }}
{{ else }}
<p class="rounded-lg bg-secondary/5 p-6 text-secondary/70">No games have been added yet. Add page bundles under <code>content/slots/games/&lt;slug&gt;/index.md</code>.</p>
<p class="rounded-lg bg-secondary/5 p-6 text-secondary/70">{{ i18n "noGames" }}</p>
{{ end }}
</section>
{{ if not .Params.hideCta }}
<div class="mt-12 max-w-3xl rounded-2xl border border-primary/20 bg-primary/5 p-6">
<h2 class="text-xl font-bold">Ready to spin?</h2>
<p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ only. T&amp;Cs apply. Please gamble responsibly.</p>
<div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" "Play the Slots" "size" "lg") }}</div>
<h2 class="text-xl font-bold">{{ i18n "readyToPlay" }}</h2>
<p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ {{ i18n "termsResponsible" }}</p>
<div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" (i18n "playSlots") "size" "lg") }}</div>
</div>
{{ end }}
</div>