* 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>
77 lines
3.6 KiB
PHP
77 lines
3.6 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="color-scheme" content="light">
|
|
|
|
<title>{{ $pageMeta->title }}</title>
|
|
<x-seo.meta :page-meta="$pageMeta" />
|
|
|
|
<x-fonts />
|
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
</head>
|
|
<body class="min-h-screen antialiased">
|
|
<a href="#conteudo" class="sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-50 focus:rounded-md focus:bg-amare-accent focus:px-4 focus:py-2 focus:text-amare-accent-text">
|
|
Ir para o conteúdo
|
|
</a>
|
|
|
|
<header class="border-b border-amare-border bg-amare-bg">
|
|
<div class="container-amare flex items-center justify-between gap-6 py-4">
|
|
<a href="{{ url('/') }}" class="text-lg font-semibold text-amare-text transition-colors duration-(--amare-duration-normal) ease-(--amare-ease-standard) hover:text-amare-accent">
|
|
{{ $siteSettings->brand_name }}
|
|
</a>
|
|
|
|
<nav aria-label="Principal" class="flex flex-wrap items-center gap-4 text-sm text-amare-text-muted">
|
|
<a href="{{ route('home') }}" class="transition-colors hover:text-amare-accent">Início</a>
|
|
<a href="{{ route('services.index') }}" class="transition-colors hover:text-amare-accent">Serviços</a>
|
|
<a href="{{ route('portfolio.index') }}" class="transition-colors hover:text-amare-accent">Portfólio</a>
|
|
<a href="{{ route('about') }}" class="transition-colors hover:text-amare-accent">Sobre</a>
|
|
<a href="{{ route('contact') }}" class="transition-colors hover:text-amare-accent">Contato</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<main id="conteudo" class="py-12">
|
|
@yield('content')
|
|
</main>
|
|
|
|
<footer class="border-t border-amare-border bg-amare-bg-muted">
|
|
<div class="container-amare flex flex-col gap-4 py-8 text-sm text-amare-text-muted md:flex-row md:items-start md:justify-between">
|
|
<div class="space-y-2">
|
|
<p class="font-medium text-amare-text">{{ $siteSettings->brand_name }}</p>
|
|
@if ($siteSettings->email)
|
|
<p>
|
|
<a href="mailto:{{ $siteSettings->email }}" class="transition-colors hover:text-amare-accent">{{ $siteSettings->email }}</a>
|
|
</p>
|
|
@endif
|
|
@if ($siteSettings->phone)
|
|
<p>{{ $siteSettings->phone }}</p>
|
|
@endif
|
|
@if ($siteSettings->city)
|
|
<p>{{ $siteSettings->city }}</p>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="space-y-2">
|
|
<p class="font-medium text-amare-text">Links</p>
|
|
<p><a href="{{ route('privacy') }}" class="transition-colors hover:text-amare-accent">Política de privacidade</a></p>
|
|
@foreach ($siteSettings->social_links ?? [] as $network => $url)
|
|
@if (filled($url))
|
|
<p>
|
|
<a href="{{ $url }}" class="transition-colors hover:text-amare-accent" rel="noopener noreferrer" target="_blank">{{ ucfirst((string) $network) }}</a>
|
|
</p>
|
|
@endif
|
|
@endforeach
|
|
</div>
|
|
|
|
<p>© {{ now()->year }} {{ $siteSettings->brand_name }}. Todos os direitos reservados.</p>
|
|
</div>
|
|
</footer>
|
|
|
|
@if ($siteSettings->analytics_enabled && filled($siteSettings->analytics_script))
|
|
{!! $siteSettings->analytics_script !!}
|
|
@endif
|
|
</body>
|
|
</html>
|