* feat: ship public site with SEO and visuals Publish CMS content on public routes with responsive media, accessibility checks, and deterministic visual baselines. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: make browser visual CI deterministic for media Mount host public storage into FrankenPHP so seeded fixtures are served, and replace PNG-as-JPG fixtures with real JPEGs so Chromium can render them. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: serve public media on same-origin storage paths Pest Browser hosts on 127.0.0.1:port while Storage::url used http://localhost, so screenshots captured broken images. Use relative /storage URLs for media and absolutize only OG tags via url(). Co-authored-by: Cursor <cursoragent@cursor.com> * test: refresh visual baselines from CI Ubuntu screenshots Media now loads on same-origin /storage paths, so baselines must capture the rendered fixtures. Use full-page snapshots from the CI runner to keep Pest's exact snapshot match stable across environments. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
44 lines
2.0 KiB
PHP
44 lines
2.0 KiB
PHP
@props([
|
|
'settings',
|
|
])
|
|
|
|
<section aria-labelledby="hero-heading" class="relative overflow-hidden border-b border-amare-border bg-amare-bg">
|
|
<div class="container-amare grid gap-10 py-16 md:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)] md:items-center md:py-24">
|
|
<div class="space-y-6">
|
|
@if (filled($settings->hero_eyebrow))
|
|
<p class="text-sm font-medium uppercase tracking-[0.18em] text-amare-accent">{{ $settings->hero_eyebrow }}</p>
|
|
@endif
|
|
|
|
<h1 id="hero-heading" class="max-w-3xl text-4xl font-semibold tracking-tight text-amare-text md:text-5xl">
|
|
{{ $settings->hero_title }}
|
|
</h1>
|
|
|
|
@if (filled($settings->hero_subtitle))
|
|
<p class="max-w-2xl text-lg text-amare-text-muted">{{ $settings->hero_subtitle }}</p>
|
|
@endif
|
|
|
|
<div>
|
|
<a
|
|
href="{{ route('contact') }}"
|
|
data-testid="home-primary-cta"
|
|
class="inline-flex items-center rounded-md bg-amare-accent px-5 py-3 text-sm font-semibold text-amare-accent-text transition-colors duration-(--amare-duration-normal) ease-(--amare-ease-standard) hover:bg-amare-accent-hover focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-3 focus-visible:outline-amare-accent"
|
|
>
|
|
{{ $settings->hero_cta_label }}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
@if (filled($settings->default_og_image_path))
|
|
<div class="min-h-72 overflow-hidden rounded-xl bg-amare-bg-muted">
|
|
<x-media.image
|
|
:path="$settings->default_og_image_path"
|
|
:alt="$settings->default_og_image_alt ?: $settings->brand_name"
|
|
loading="eager"
|
|
sizes="(max-width: 768px) 100vw, 40vw"
|
|
class="h-full w-full object-cover"
|
|
/>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</section>
|