feat: recreate public frontend with Heritage Editorial identity
Replace placeholder visual system with EB Garamond/olive tokens, brand assets, editorial home narrative, São Paulo settings, real testimonials, and regenerated visual baselines. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,39 +1,46 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('content')
|
||||
<div class="container-amare space-y-10">
|
||||
<div class="max-w-2xl space-y-3">
|
||||
<h1 class="text-4xl font-semibold text-amare-text">Portfólio</h1>
|
||||
<p class="text-lg text-amare-text-muted">Casos reais de celebrações conduzidas com atenção a cada detalhe.</p>
|
||||
<div class="border-b border-amare-border bg-amare-bg-deep">
|
||||
<div class="container-amare space-y-10 py-16 md:py-24">
|
||||
<div class="max-w-2xl space-y-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">Portfólio</p>
|
||||
<h1 class="text-4xl font-medium tracking-tight text-amare-text md:text-5xl">Atmosferas que contam histórias.</h1>
|
||||
<p class="text-lg text-amare-muted">Casos conduzidos com atenção a ritmo, composição e cada detalhe da experiência.</p>
|
||||
</div>
|
||||
|
||||
@if ($cases->isEmpty())
|
||||
<p class="text-amare-muted">Em breve publicaremos novos casos.</p>
|
||||
@else
|
||||
<div class="grid gap-10 md:grid-cols-2">
|
||||
@foreach ($cases as $case)
|
||||
<article class="space-y-4">
|
||||
@if (filled($case->cover_image_path))
|
||||
<a href="{{ route('portfolio.show', $case->slug) }}" class="block overflow-hidden">
|
||||
<x-media.image
|
||||
:path="$case->cover_image_path"
|
||||
:alt="$case->cover_image_alt ?: $case->title"
|
||||
sizes="(max-width: 768px) 100vw, 50vw"
|
||||
class="img-editorial aspect-[4/3] w-full object-cover transition-transform duration-(--amare-duration-slow) ease-(--amare-ease-standard) motion-safe:hover:scale-[1.02]"
|
||||
/>
|
||||
</a>
|
||||
@endif
|
||||
<div class="space-y-2 border-t border-amare-border pt-4">
|
||||
<h2 class="text-2xl font-medium text-amare-text">
|
||||
<a href="{{ route('portfolio.show', $case->slug) }}" class="transition-colors hover:text-amare-accent">{{ $case->title }}</a>
|
||||
</h2>
|
||||
<p class="text-sm text-amare-muted">{{ $case->summary }}</p>
|
||||
</div>
|
||||
</article>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{{ $cases->links() }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<p class="text-sm text-amare-accent">Imagens demonstrativas até existir acervo autorizado da Amare.</p>
|
||||
</div>
|
||||
|
||||
@if ($cases->isEmpty())
|
||||
<p class="text-amare-text-muted">Em breve publicaremos novos casos.</p>
|
||||
@else
|
||||
<div class="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
|
||||
@foreach ($cases as $case)
|
||||
<article class="space-y-3">
|
||||
@if (filled($case->cover_image_path))
|
||||
<a href="{{ route('portfolio.show', $case->slug) }}">
|
||||
<x-media.image
|
||||
:path="$case->cover_image_path"
|
||||
:alt="$case->cover_image_alt ?: $case->title"
|
||||
sizes="(max-width: 768px) 100vw, 33vw"
|
||||
class="aspect-[4/3] w-full object-cover"
|
||||
/>
|
||||
</a>
|
||||
@endif
|
||||
<h2 class="text-xl font-semibold text-amare-text">
|
||||
<a href="{{ route('portfolio.show', $case->slug) }}" class="hover:text-amare-accent">{{ $case->title }}</a>
|
||||
</h2>
|
||||
<p class="text-sm text-amare-text-muted">{{ $case->summary }}</p>
|
||||
</article>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{{ $cases->links() }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@@ -1,62 +1,70 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('content')
|
||||
<article class="container-amare space-y-10">
|
||||
<header class="max-w-3xl space-y-4">
|
||||
<p class="text-sm uppercase tracking-[0.18em] text-amare-accent">{{ $case->event_type }}</p>
|
||||
<h1 class="text-4xl font-semibold text-amare-text">{{ $case->title }}</h1>
|
||||
<p class="text-lg text-amare-text-muted">{{ $case->summary }}</p>
|
||||
<p class="text-sm text-amare-text-muted">
|
||||
@if ($case->city){{ $case->city }}@endif
|
||||
@if ($case->venue) · {{ $case->venue }}@endif
|
||||
@if ($case->event_date) · {{ $case->event_date->format('d/m/Y') }}@endif
|
||||
</p>
|
||||
</header>
|
||||
<article>
|
||||
<div class="border-b border-amare-border bg-amare-bg">
|
||||
<div class="container-amare space-y-8 py-16 md:py-24">
|
||||
<header class="max-w-3xl space-y-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">{{ $case->event_type }}</p>
|
||||
<h1 class="text-4xl font-medium tracking-tight text-amare-text md:text-5xl">{{ $case->title }}</h1>
|
||||
<p class="text-lg text-amare-muted">{{ $case->summary }}</p>
|
||||
<p class="text-sm text-amare-muted">
|
||||
@if ($case->city){{ $case->city }}@endif
|
||||
@if ($case->venue) · {{ $case->venue }}@endif
|
||||
@if ($case->event_date) · {{ $case->event_date->format('d/m/Y') }}@endif
|
||||
</p>
|
||||
</header>
|
||||
|
||||
@if (filled($case->cover_image_path))
|
||||
<x-media.image
|
||||
:path="$case->cover_image_path"
|
||||
:alt="$case->cover_image_alt ?: $case->title"
|
||||
loading="eager"
|
||||
sizes="(max-width: 1024px) 100vw, 72rem"
|
||||
class="aspect-[16/9] w-full object-cover"
|
||||
/>
|
||||
@endif
|
||||
@if (filled($case->cover_image_path))
|
||||
<x-media.image
|
||||
:path="$case->cover_image_path"
|
||||
:alt="$case->cover_image_alt ?: $case->title"
|
||||
loading="eager"
|
||||
sizes="(max-width: 1024px) 100vw, 1120px"
|
||||
class="img-editorial aspect-[16/9] w-full object-cover"
|
||||
/>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-8 md:grid-cols-3">
|
||||
<section class="space-y-2">
|
||||
<h2 class="text-xl font-semibold text-amare-text">Desafio</h2>
|
||||
<p class="text-amare-text-muted">{!! nl2br(e($case->challenge)) !!}</p>
|
||||
</section>
|
||||
<section class="space-y-2">
|
||||
<h2 class="text-xl font-semibold text-amare-text">Solução</h2>
|
||||
<p class="text-amare-text-muted">{!! nl2br(e($case->solution)) !!}</p>
|
||||
</section>
|
||||
@if (filled($case->result))
|
||||
<section class="space-y-2">
|
||||
<h2 class="text-xl font-semibold text-amare-text">Resultado</h2>
|
||||
<p class="text-amare-text-muted">{!! nl2br(e($case->result)) !!}</p>
|
||||
<div class="border-b border-amare-border bg-amare-bg-deep">
|
||||
<div class="container-amare grid gap-10 py-16 md:grid-cols-3">
|
||||
<section class="space-y-3">
|
||||
<h2 class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">Desafio</h2>
|
||||
<p class="text-amare-muted">{!! nl2br(e($case->challenge)) !!}</p>
|
||||
</section>
|
||||
@endif
|
||||
<section class="space-y-3">
|
||||
<h2 class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">Solução</h2>
|
||||
<p class="text-amare-muted">{!! nl2br(e($case->solution)) !!}</p>
|
||||
</section>
|
||||
@if (filled($case->result))
|
||||
<section class="space-y-3">
|
||||
<h2 class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">Resultado</h2>
|
||||
<p class="text-amare-muted">{!! nl2br(e($case->result)) !!}</p>
|
||||
</section>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($case->images->isNotEmpty())
|
||||
<section aria-labelledby="gallery-heading" class="space-y-6">
|
||||
<h2 id="gallery-heading" class="text-2xl font-semibold text-amare-text">Galeria</h2>
|
||||
<div class="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
|
||||
@foreach ($case->images as $image)
|
||||
<figure class="space-y-2">
|
||||
<x-media.image
|
||||
:path="$image->path"
|
||||
:alt="$image->alt_text"
|
||||
sizes="(max-width: 768px) 100vw, 33vw"
|
||||
class="aspect-square w-full object-cover"
|
||||
/>
|
||||
@if (filled($image->caption))
|
||||
<figcaption class="text-sm text-amare-text-muted">{{ $image->caption }}</figcaption>
|
||||
@endif
|
||||
</figure>
|
||||
@endforeach
|
||||
<section aria-labelledby="gallery-heading" class="bg-amare-bg">
|
||||
<div class="container-amare space-y-8 py-16">
|
||||
<h2 id="gallery-heading" class="text-3xl font-medium text-amare-text">Galeria</h2>
|
||||
<div class="grid gap-6 md:grid-cols-2">
|
||||
@foreach ($case->images as $image)
|
||||
<figure class="space-y-2">
|
||||
<x-media.image
|
||||
:path="$image->path"
|
||||
:alt="$image->alt_text"
|
||||
sizes="(max-width: 768px) 100vw, 50vw"
|
||||
class="img-editorial aspect-[4/3] w-full object-cover"
|
||||
/>
|
||||
@if (filled($image->caption))
|
||||
<figcaption class="text-sm text-amare-muted">{{ $image->caption }}</figcaption>
|
||||
@endif
|
||||
</figure>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endif
|
||||
|
||||
Reference in New Issue
Block a user