Compare commits
1 Commits
f4c2e4ed2f
...
feat/remod
| Author | SHA1 | Date | |
|---|---|---|---|
| d17ab82055 |
@@ -2,13 +2,19 @@
|
|||||||
'settings',
|
'settings',
|
||||||
])
|
])
|
||||||
|
|
||||||
<section aria-labelledby="about-cta-heading" class="border-b border-amare-border bg-amare-bg-deep py-20 md:py-24" data-about-cta data-reveal-group>
|
<section aria-labelledby="about-cta-heading" class="border-b border-amare-border bg-amare-bg py-6 md:py-7" data-about-cta>
|
||||||
<div class="container-amare max-w-4xl space-y-6" data-reveal data-reveal-from="up">
|
<div class="container-amare grid items-center gap-7 md:grid-cols-[auto_minmax(0,1fr)_auto]" data-reveal-group>
|
||||||
<p class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">Próximo passo</p>
|
<svg class="mx-auto h-11 w-11 text-amare-accent md:mx-0" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true" data-reveal data-reveal-from="up">
|
||||||
<h2 id="about-cta-heading" class="text-headline font-medium text-amare-text">Vamos criar algo inesquecível juntos?</h2>
|
<rect x="7" y="12" width="34" height="26" rx="2"/>
|
||||||
<p class="max-w-2xl text-amare-muted">Conte com a Amare para transformar seu evento em uma experiência organizada, cuidadosa e memorável.</p>
|
<path d="m8 15 16 13 16-13"/>
|
||||||
<div>
|
<path d="M18 12v-2a6 6 0 0 1 12 0v2"/>
|
||||||
<a href="{{ route('briefing') }}" class="btn btn-primary text-sm font-semibold uppercase tracking-[0.12em]">
|
</svg>
|
||||||
|
<div class="text-center md:text-left" data-reveal data-reveal-from="up">
|
||||||
|
<h2 id="about-cta-heading" class="text-[clamp(1.75rem,3vw,2rem)] font-medium text-amare-accent-deep">Vamos criar algo inesquecível juntos?</h2>
|
||||||
|
<p class="mt-1 text-base leading-relaxed text-amare-text">Conte com a Amare para transformar seu evento em uma experiência organizada, cuidadosa e memorável.</p>
|
||||||
|
</div>
|
||||||
|
<div class="justify-self-center md:justify-self-end" data-reveal data-reveal-from="up">
|
||||||
|
<a href="{{ route('briefing') }}" class="btn btn-primary text-xs font-bold uppercase tracking-[0.11em]">
|
||||||
{{ $settings->hero_cta_label ?: 'Solicitar proposta' }}
|
{{ $settings->hero_cta_label ?: 'Solicitar proposta' }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,9 +7,9 @@
|
|||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
<section id="michele" aria-labelledby="founder-heading" class="border-b border-amare-border bg-amare-bg" data-about-founder>
|
<section id="michele" aria-labelledby="founder-heading" class="border-b border-amare-border bg-amare-bg" data-about-founder>
|
||||||
<div class="grid min-h-[500px] lg:grid-cols-12" data-reveal-group>
|
<div class="grid min-h-[500px] lg:grid-cols-2" data-reveal-group>
|
||||||
@if ($hasImage)
|
@if ($hasImage)
|
||||||
<div class="min-h-[420px] overflow-hidden bg-amare-bg-deep max-lg:aspect-[4/5] lg:col-span-6 lg:min-h-full" data-reveal-media>
|
<div class="min-h-[420px] overflow-hidden bg-amare-bg-deep lg:min-h-full" data-reveal-media>
|
||||||
<x-media.image
|
<x-media.image
|
||||||
:path="$settings->founder_image_path"
|
:path="$settings->founder_image_path"
|
||||||
:alt="$settings->founder_image_alt ?: 'Michele, da Amare'"
|
:alt="$settings->founder_image_alt ?: 'Michele, da Amare'"
|
||||||
@@ -18,20 +18,20 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="flex min-h-[420px] items-center justify-center bg-amare-bg-deep lg:col-span-6 lg:min-h-full" data-founder-tonal>
|
<div class="flex min-h-[420px] items-center justify-center bg-amare-bg-deep lg:min-h-full" data-founder-tonal>
|
||||||
<p class="px-4 text-center text-xs font-semibold uppercase tracking-[0.16em] text-amare-muted">Retrato da Michele</p>
|
<p class="px-4 text-center text-xs font-semibold uppercase tracking-[0.16em] text-amare-muted">Retrato da Michele</p>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<div class="flex flex-col justify-center px-6 py-16 lg:col-span-6 lg:px-[clamp(3rem,6vw,7rem)]" data-reveal data-reveal-from="up">
|
<div class="flex flex-col justify-center px-6 py-12 md:px-12 md:py-16 lg:px-[70px]" data-reveal data-reveal-from="up">
|
||||||
<p class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">A pessoa por trás da experiência</p>
|
<p class="text-sm font-medium uppercase tracking-[0.16em] text-amare-accent">A pessoa por trás da experiência</p>
|
||||||
<h2 id="founder-heading" class="mt-3 text-headline font-medium text-amare-text">Conheça Michele</h2>
|
<h2 id="founder-heading" class="mt-3 text-[clamp(2rem,3vw,2.55rem)] font-medium text-amare-accent-deep">Conheça Michele</h2>
|
||||||
<p class="mt-5 max-w-[520px] text-lg leading-relaxed text-amare-text">Michele representa o olhar humano da Amare: escuta, organização e presença durante todo o processo de construção do evento.</p>
|
<p class="mt-5 max-w-[520px] text-lg leading-relaxed text-amare-text">Michele representa o olhar humano da Amare: escuta, organização e presença durante todo o processo de construção do evento.</p>
|
||||||
<p class="mt-3.5 max-w-[520px] text-lg leading-relaxed text-amare-text-muted">Seu papel é transformar necessidades e escolhas em um planejamento claro, cuidando dos detalhes sem perder de vista a experiência de quem contrata e de quem participa.</p>
|
<p class="mt-3.5 max-w-[520px] text-lg leading-relaxed text-amare-text">Seu papel é transformar necessidades e escolhas em um planejamento claro, cuidando dos detalhes sem perder de vista a experiência de quem contrata e de quem participa.</p>
|
||||||
<div class="mt-8 flex max-w-[500px] flex-col items-start justify-between gap-4 border border-amare-border bg-amare-bg-deep px-5 py-4 sm:flex-row sm:items-center">
|
<div class="mt-5 flex max-w-[500px] flex-col items-start justify-between gap-4 bg-amare-bg-deep px-4 py-3.5 sm:flex-row sm:items-center">
|
||||||
<div>
|
<div>
|
||||||
<strong class="block text-[2rem] font-normal italic text-amare-text">Michele</strong>
|
<strong class="block text-[2rem] font-normal italic text-amare-accent-deep">Michele</strong>
|
||||||
<small class="text-xs font-semibold uppercase tracking-[0.08em] text-amare-muted">Assessoria e produção de eventos</small>
|
<small class="text-[0.65rem] uppercase tracking-[0.08em] text-amare-muted">Assessoria e produção de eventos</small>
|
||||||
</div>
|
</div>
|
||||||
<a href="{{ route('briefing') }}" class="btn btn-outline shrink-0 text-xs font-bold uppercase tracking-[0.11em]">Falar com a Michele</a>
|
<a href="{{ route('briefing') }}" class="btn btn-outline shrink-0 text-xs font-bold uppercase tracking-[0.11em]">Falar com a Michele</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,20 +9,18 @@
|
|||||||
|
|
||||||
<section aria-labelledby="about-hero-heading" class="border-b border-amare-border bg-amare-bg" data-about-hero data-motion="page-open">
|
<section aria-labelledby="about-hero-heading" class="border-b border-amare-border bg-amare-bg" data-about-hero data-motion="page-open">
|
||||||
@if ($hasImage)
|
@if ($hasImage)
|
||||||
<div class="grid min-h-[440px] lg:grid-cols-12">
|
<div class="container-amare grid min-h-[440px] lg:grid-cols-[minmax(0,0.85fr)_minmax(0,1.45fr)]">
|
||||||
<div class="flex min-w-0 items-center bg-amare-bg px-6 py-16 lg:col-span-5 lg:px-[clamp(3rem,6vw,7rem)]" data-reveal-group>
|
<div class="flex flex-col items-start justify-center py-12 md:py-14 lg:py-16 lg:pr-10" data-reveal-group>
|
||||||
<div class="w-full max-w-[470px] space-y-6">
|
<p class="text-sm font-medium uppercase tracking-[0.16em] text-amare-accent" data-motion-beat="seal">Sobre nós</p>
|
||||||
<p class="text-sm font-medium uppercase tracking-[0.18em] text-amare-accent" data-motion-beat="seal">Sobre nós</p>
|
<h1 id="about-hero-heading" class="mt-3 max-w-[470px] text-[clamp(3rem,5vw,5rem)] font-medium leading-[0.96] tracking-tight text-amare-accent-deep" data-motion-beat="title">Sobre a Amare</h1>
|
||||||
<h1 id="about-hero-heading" class="max-w-[470px] whitespace-normal break-normal text-hero-spread font-medium text-amare-text" data-motion-beat="title">Sobre a Amare</h1>
|
<p class="mt-4 max-w-[450px] font-serif text-[clamp(1.25rem,2vw,1.55rem)] italic leading-snug text-amare-muted" data-motion-beat="lede">{{ $lead }}</p>
|
||||||
<p class="max-w-[450px] text-[clamp(1.25rem,2vw,1.55rem)] italic leading-snug text-amare-text-muted" data-motion-beat="lede">{{ $lead }}</p>
|
<span class="my-6 block h-9 w-px bg-amare-accent" aria-hidden="true"></span>
|
||||||
<span class="block h-9 w-px bg-amare-accent" aria-hidden="true"></span>
|
<p class="mb-7 max-w-[430px] text-lg leading-relaxed text-amare-text">A Amare une sensibilidade, organização e atenção aos detalhes para criar experiências bem planejadas, do primeiro encontro à execução do evento.</p>
|
||||||
<p class="max-w-[430px] text-lg leading-relaxed text-amare-text">A Amare une sensibilidade, organização e atenção aos detalhes para criar experiências bem planejadas, do primeiro encontro à execução do evento.</p>
|
|
||||||
<div data-motion-beat="cta">
|
<div data-motion-beat="cta">
|
||||||
<a href="#michele" class="btn btn-outline text-xs font-bold uppercase tracking-[0.11em]">Conhecer mais</a>
|
<a href="#michele" class="btn btn-outline text-xs font-bold uppercase tracking-[0.11em]">Conhecer mais</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="min-h-[360px] overflow-hidden bg-amare-bg-deep lg:min-h-full" data-motion-beat="media" data-reveal-media>
|
||||||
<div class="min-h-[360px] overflow-hidden bg-amare-bg-deep max-lg:aspect-[4/5] lg:col-span-7 lg:min-h-0" data-motion-beat="media" data-reveal-media>
|
|
||||||
<x-media.image
|
<x-media.image
|
||||||
:path="$settings->about_image_path"
|
:path="$settings->about_image_path"
|
||||||
:alt="$settings->about_image_alt ?: 'Sobre a Amare'"
|
:alt="$settings->about_image_alt ?: 'Sobre a Amare'"
|
||||||
@@ -36,9 +34,9 @@
|
|||||||
@else
|
@else
|
||||||
<div class="container-amare py-16 md:py-24" data-tonal-hero>
|
<div class="container-amare py-16 md:py-24" data-tonal-hero>
|
||||||
<div class="max-w-[470px] space-y-5" data-motion-beat="heading">
|
<div class="max-w-[470px] space-y-5" data-motion-beat="heading">
|
||||||
<p class="text-sm font-medium uppercase tracking-[0.18em] text-amare-accent" data-motion-beat="seal">Sobre nós</p>
|
<p class="text-sm font-medium uppercase tracking-[0.16em] text-amare-accent" data-motion-beat="seal">Sobre nós</p>
|
||||||
<h1 id="about-hero-heading" class="text-headline font-medium tracking-tight text-amare-text" data-motion-beat="title">Sobre a Amare</h1>
|
<h1 id="about-hero-heading" class="text-headline font-medium tracking-tight text-amare-accent-deep" data-motion-beat="title">Sobre a Amare</h1>
|
||||||
<p class="text-lg italic leading-snug text-amare-text-muted" data-motion-beat="lede">{{ $lead }}</p>
|
<p class="text-lg italic leading-snug text-amare-muted" data-motion-beat="lede">{{ $lead }}</p>
|
||||||
<span class="block h-9 w-px bg-amare-accent" aria-hidden="true"></span>
|
<span class="block h-9 w-px bg-amare-accent" aria-hidden="true"></span>
|
||||||
<p class="text-lg leading-relaxed text-amare-text">A Amare une sensibilidade, organização e atenção aos detalhes para criar experiências bem planejadas, do primeiro encontro à execução do evento.</p>
|
<p class="text-lg leading-relaxed text-amare-text">A Amare une sensibilidade, organização e atenção aos detalhes para criar experiências bem planejadas, do primeiro encontro à execução do evento.</p>
|
||||||
<div data-motion-beat="cta">
|
<div data-motion-beat="cta">
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
<section aria-label="Pilares da Amare" class="border-b border-amare-border bg-amare-bg" data-about-pillars>
|
<section aria-label="Pilares da Amare" class="border-b border-amare-border bg-amare-bg" data-about-pillars>
|
||||||
<div class="container-amare py-16 md:py-24" data-reveal-group>
|
<div class="container-amare" data-reveal-group>
|
||||||
<div class="grid border-l border-t border-amare-border md:grid-cols-3">
|
<div class="grid md:grid-cols-3">
|
||||||
<article class="flex flex-col gap-4 border-b border-r border-amare-border p-8 text-center md:p-10" data-reveal data-reveal-from="up">
|
<article class="relative border-t border-amare-border px-6 py-8 text-center md:border-t-0 md:px-10" data-reveal data-reveal-from="up">
|
||||||
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
<svg class="mx-auto mb-2.5 h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
||||||
<circle cx="18" cy="16" r="6"/>
|
<circle cx="18" cy="16" r="6"/>
|
||||||
<circle cx="30" cy="16" r="6"/>
|
<circle cx="30" cy="16" r="6"/>
|
||||||
<path d="M7 37c1-8 5-12 11-12s10 4 11 12M21 37c1-8 5-12 11-12 5 0 9 4 10 12"/>
|
<path d="M7 37c1-8 5-12 11-12s10 4 11 12M21 37c1-8 5-12 11-12 5 0 9 4 10 12"/>
|
||||||
</svg>
|
</svg>
|
||||||
<h3 class="text-base font-medium uppercase tracking-[0.05em] text-amare-text">Atendimento próximo</h3>
|
<h3 class="text-base font-medium uppercase tracking-[0.05em] text-amare-accent-deep">Atendimento próximo</h3>
|
||||||
<p class="mx-auto max-w-[280px] text-amare-text-muted">Escuta atenta para compreender prioridades, contexto e expectativas de cada evento.</p>
|
<p class="mx-auto mt-2 max-w-[280px] text-[0.95rem] leading-relaxed text-amare-text">Escuta atenta para compreender prioridades, contexto e expectativas de cada evento.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="flex flex-col gap-4 border-b border-r border-amare-border p-8 text-center md:p-10" data-reveal data-reveal-from="up">
|
<article class="relative border-t border-amare-border px-6 py-8 text-center md:border-t-0 md:px-10 md:before:absolute md:before:inset-y-[30px] md:before:left-0 md:before:w-px md:before:bg-amare-border" data-reveal data-reveal-from="up">
|
||||||
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
<svg class="mx-auto mb-2.5 h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
||||||
<rect x="10" y="7" width="28" height="34" rx="2"/>
|
<rect x="10" y="7" width="28" height="34" rx="2"/>
|
||||||
<path d="M17 15h14M17 22h14M17 29h8M29 29h2"/>
|
<path d="M17 15h14M17 22h14M17 29h8M29 29h2"/>
|
||||||
</svg>
|
</svg>
|
||||||
<h3 class="text-base font-medium uppercase tracking-[0.05em] text-amare-text">Planejamento minucioso</h3>
|
<h3 class="text-base font-medium uppercase tracking-[0.05em] text-amare-accent-deep">Planejamento minucioso</h3>
|
||||||
<p class="mx-auto max-w-[280px] text-amare-text-muted">Organização clara das etapas para transformar decisões em uma execução consistente.</p>
|
<p class="mx-auto mt-2 max-w-[280px] text-[0.95rem] leading-relaxed text-amare-text">Organização clara das etapas para transformar decisões em uma execução consistente.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="flex flex-col gap-4 border-b border-r border-amare-border p-8 text-center md:p-10" data-reveal data-reveal-from="up">
|
<article class="relative border-t border-amare-border px-6 py-8 text-center md:border-t-0 md:px-10 md:before:absolute md:before:inset-y-[30px] md:before:left-0 md:before:w-px md:before:bg-amare-border" data-reveal data-reveal-from="up">
|
||||||
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
<svg class="mx-auto mb-2.5 h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
||||||
<path d="M24 40C10 32 8 20 8 12c8 0 14 4 16 11 2-7 8-11 16-11 0 8-2 20-16 28Z"/>
|
<path d="M24 40C10 32 8 20 8 12c8 0 14 4 16 11 2-7 8-11 16-11 0 8-2 20-16 28Z"/>
|
||||||
<path d="M24 23v17"/>
|
<path d="M24 23v17"/>
|
||||||
</svg>
|
</svg>
|
||||||
<h3 class="text-base font-medium uppercase tracking-[0.05em] text-amare-text">Execução tranquila</h3>
|
<h3 class="text-base font-medium uppercase tracking-[0.05em] text-amare-accent-deep">Execução tranquila</h3>
|
||||||
<p class="mx-auto max-w-[280px] text-amare-text-muted">Cuidado com a operação para que anfitriões e convidados possam viver o momento.</p>
|
<p class="mx-auto mt-2 max-w-[280px] text-[0.95rem] leading-relaxed text-amare-text">Cuidado com a operação para que anfitriões e convidados possam viver o momento.</p>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,58 +3,53 @@
|
|||||||
])
|
])
|
||||||
|
|
||||||
@php
|
@php
|
||||||
$slots = collect([
|
$slots = [
|
||||||
['label' => 'Eventos sociais', 'tall' => true],
|
'Eventos sociais',
|
||||||
['label' => 'Celebrações', 'tall' => false],
|
'Celebrações',
|
||||||
['label' => 'Detalhes', 'tall' => false],
|
'Detalhes',
|
||||||
['label' => 'Sociais', 'tall' => false],
|
'Sociais',
|
||||||
['label' => 'Corporativo', 'tall' => false],
|
'Corporativo',
|
||||||
['label' => 'Produção', 'tall' => false],
|
'Produção',
|
||||||
]);
|
];
|
||||||
$cases = $cases->take(6)->values();
|
$cases = $cases->take(6)->values();
|
||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
<section id="portfolio" aria-labelledby="about-portfolio-heading" class="border-b border-amare-border bg-amare-bg" data-about-portfolio>
|
<section id="portfolio" aria-labelledby="about-portfolio-heading" class="border-b border-amare-border bg-amare-bg" data-about-portfolio>
|
||||||
<div class="container-amare py-16 md:py-24" data-reveal-group>
|
<div class="container-amare grid lg:grid-cols-[315px_minmax(0,1fr)]" data-reveal-group>
|
||||||
<div class="grid gap-10 lg:grid-cols-12 lg:items-end" data-reveal data-reveal-from="up">
|
<div class="flex flex-col justify-center px-6 py-11 md:px-10" data-reveal data-reveal-from="up">
|
||||||
<div class="lg:col-span-5">
|
<p class="text-sm font-medium uppercase tracking-[0.16em] text-amare-accent">Seleção de trabalhos</p>
|
||||||
<p class="text-xs font-semibold uppercase tracking-[0.14em] text-amare-accent">Seleção de trabalhos</p>
|
<h2 id="about-portfolio-heading" class="mt-3 text-[clamp(1.75rem,3vw,2.05rem)] font-medium leading-tight text-amare-accent-deep">Portfólio em destaque</h2>
|
||||||
<h2 id="about-portfolio-heading" class="mt-3 text-headline font-medium text-amare-text">Portfólio em destaque</h2>
|
<p class="mt-4 max-w-sm text-base leading-relaxed text-amare-text">Uma composição de eventos sociais e corporativos para apresentar a versatilidade da Amare.</p>
|
||||||
</div>
|
<a href="{{ route('portfolio.index') }}" class="btn btn-outline mt-5 self-start text-xs font-bold uppercase tracking-[0.11em]">Ver portfólio completo</a>
|
||||||
<div class="lg:col-span-6 lg:col-start-7">
|
|
||||||
<p class="max-w-xl text-amare-text-muted">Uma composição de eventos sociais e corporativos para apresentar a versatilidade da Amare.</p>
|
|
||||||
<a href="{{ route('portfolio.index') }}" class="btn btn-ghost mt-5 min-h-0 px-0 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent hover:bg-transparent hover:text-amare-accent-deep">
|
|
||||||
<span class="border-b border-amare-accent pb-1">Ver portfólio completo</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-12 grid grid-cols-1 gap-[14px] sm:grid-cols-2 lg:grid-cols-[1.2fr_0.8fr_0.8fr]" aria-label="Projetos em destaque" data-editorial-portfolio data-reveal-group>
|
<div class="grid auto-rows-[150px] grid-cols-2 gap-1 py-1 lg:auto-rows-[118px] lg:grid-cols-12" aria-label="Projetos em destaque" data-reveal-group>
|
||||||
@foreach ($slots as $index => $slot)
|
@foreach ($slots as $index => $label)
|
||||||
@php
|
@php
|
||||||
$case = $cases->get($index);
|
$case = $cases->get($index);
|
||||||
|
$span = match ($index) {
|
||||||
|
0 => 'lg:col-span-5',
|
||||||
|
1 => 'lg:col-span-4',
|
||||||
|
2 => 'lg:col-span-3 lg:row-span-2 min-h-[190px] lg:min-h-0',
|
||||||
|
3 => 'lg:col-span-4',
|
||||||
|
4 => 'lg:col-span-3',
|
||||||
|
default => 'lg:col-span-2',
|
||||||
|
};
|
||||||
@endphp
|
@endphp
|
||||||
<div
|
<div @class(['relative min-h-[150px] overflow-hidden bg-amare-bg-deep', $span]) data-reveal data-reveal-from="up">
|
||||||
@class([
|
|
||||||
'overflow-hidden bg-amare-bg-deep',
|
|
||||||
'sm:col-span-2 sm:min-h-[420px] lg:col-span-1 lg:row-span-2 lg:min-h-[634px]' => $slot['tall'],
|
|
||||||
'min-h-[220px] sm:min-h-[310px]' => ! $slot['tall'],
|
|
||||||
])
|
|
||||||
data-reveal
|
|
||||||
data-reveal-from="up"
|
|
||||||
>
|
|
||||||
@if ($case && filled($case->cover_image_path))
|
@if ($case && filled($case->cover_image_path))
|
||||||
<a href="{{ route('portfolio.show', $case) }}" class="block h-full w-full" aria-label="{{ $case->title }}">
|
<a href="{{ route('portfolio.show', $case) }}" class="block h-full w-full" aria-label="{{ $case->title }}">
|
||||||
<x-media.image
|
<x-media.image
|
||||||
:path="$case->cover_image_path"
|
:path="$case->cover_image_path"
|
||||||
:alt="$case->cover_image_alt ?: $case->title"
|
:alt="$case->cover_image_alt ?: $case->title"
|
||||||
sizes="(max-width: 1023px) 100vw, 33vw"
|
sizes="(max-width: 1023px) 50vw, 25vw"
|
||||||
class="img-editorial h-full w-full object-cover transition-opacity hover:opacity-90"
|
class="img-editorial h-full w-full object-cover transition-transform duration-[450ms] ease-out hover:scale-[1.03]"
|
||||||
/>
|
/>
|
||||||
|
<span class="absolute bottom-3 left-3 bg-amare-accent-deep/90 px-3 py-1.5 text-[0.57rem] font-semibold uppercase tracking-[0.06em] text-amare-accent-text">{{ $label }}</span>
|
||||||
</a>
|
</a>
|
||||||
@else
|
@else
|
||||||
<div class="flex h-full w-full items-center justify-center">
|
<div class="flex h-full w-full items-end justify-start p-3">
|
||||||
<p class="px-4 text-center text-xs font-semibold uppercase tracking-[0.16em] text-amare-muted">{{ $slot['label'] }}</p>
|
<span class="bg-amare-accent-deep/90 px-3 py-1.5 text-[0.57rem] font-semibold uppercase tracking-[0.06em] text-amare-accent-text">{{ $label }}</span>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
<section aria-labelledby="process-heading" class="border-b border-amare-border bg-amare-bg" data-about-process>
|
<section aria-labelledby="process-heading" class="border-b border-amare-border bg-amare-bg py-5 md:py-6" data-about-process>
|
||||||
<div class="container-amare py-16 md:py-24" data-reveal-group>
|
<div class="container-amare" data-reveal-group>
|
||||||
<h2 id="process-heading" class="mb-10 text-center text-headline font-medium text-amare-text" data-reveal data-reveal-from="up">Como trabalhamos</h2>
|
<h2 id="process-heading" class="mb-3 text-center text-[clamp(1.75rem,3vw,2rem)] font-medium text-amare-accent-deep" data-reveal data-reveal-from="up">Como trabalhamos</h2>
|
||||||
<div class="grid border-l border-t border-amare-border md:grid-cols-3">
|
<div class="grid md:grid-cols-3">
|
||||||
<article class="flex flex-col gap-3 border-b border-r border-amare-border p-8 text-center md:p-10" data-reveal data-reveal-from="up">
|
<article class="relative border-t border-amare-border px-6 py-4 text-center md:border-t-0 md:px-10" data-reveal data-reveal-from="up">
|
||||||
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
||||||
<path d="M15 29c-5-4-6-12-2-17 5-7 17-7 22 0 4 6 2 14-4 18-2 1-3 4-3 7H20c0-4-2-6-5-8Z"/>
|
<path d="M15 29c-5-4-6-12-2-17 5-7 17-7 22 0 4 6 2 14-4 18-2 1-3 4-3 7H20c0-4-2-6-5-8Z"/>
|
||||||
<path d="M20 41h8"/>
|
<path d="M20 41h8"/>
|
||||||
</svg>
|
</svg>
|
||||||
<h3 class="text-base font-medium uppercase tracking-[0.04em] text-amare-text">Escuta e entendimento</h3>
|
<h3 class="mt-2 text-base font-medium uppercase tracking-[0.04em] text-amare-accent-deep">Escuta e entendimento</h3>
|
||||||
<p class="mx-auto max-w-[280px] text-amare-text-muted">Começamos pelo contexto do evento, suas prioridades, estilo e expectativas.</p>
|
<p class="mx-auto mt-1.5 max-w-[280px] text-[0.94rem] leading-relaxed text-amare-text">Começamos pelo contexto do evento, suas prioridades, estilo e expectativas.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="flex flex-col gap-3 border-b border-r border-amare-border p-8 text-center md:p-10" data-reveal data-reveal-from="up">
|
<article class="relative border-t border-amare-border px-6 py-4 text-center md:border-t-0 md:px-10 md:before:absolute md:before:inset-y-3 md:before:left-0 md:before:w-px md:before:bg-amare-border" data-reveal data-reveal-from="up">
|
||||||
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
||||||
<rect x="8" y="11" width="32" height="29" rx="2"/>
|
<rect x="8" y="11" width="32" height="29" rx="2"/>
|
||||||
<path d="M15 7v8M33 7v8M8 20h32M15 26h4M23 26h4M31 26h3M15 33h4M23 33h4"/>
|
<path d="M15 7v8M33 7v8M8 20h32M15 26h4M23 26h4M31 26h3M15 33h4M23 33h4"/>
|
||||||
</svg>
|
</svg>
|
||||||
<h3 class="text-base font-medium uppercase tracking-[0.04em] text-amare-text">Planejamento e curadoria</h3>
|
<h3 class="mt-2 text-base font-medium uppercase tracking-[0.04em] text-amare-accent-deep">Planejamento e curadoria</h3>
|
||||||
<p class="mx-auto max-w-[280px] text-amare-text-muted">Organizamos etapas, fornecedores e decisões para manter cada frente alinhada.</p>
|
<p class="mx-auto mt-1.5 max-w-[280px] text-[0.94rem] leading-relaxed text-amare-text">Organizamos etapas, fornecedores e decisões para manter cada frente alinhada.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="flex flex-col gap-3 border-b border-r border-amare-border p-8 text-center md:p-10" data-reveal data-reveal-from="up">
|
<article class="relative border-t border-amare-border px-6 py-4 text-center md:border-t-0 md:px-10 md:before:absolute md:before:inset-y-3 md:before:left-0 md:before:w-px md:before:bg-amare-border" data-reveal data-reveal-from="up">
|
||||||
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
<svg class="mx-auto h-[34px] w-[34px] text-amare-muted" viewBox="0 0 48 48" fill="none" stroke="currentColor" aria-hidden="true">
|
||||||
<path d="M24 39S8 30 8 18c0-6 4-10 10-10 4 0 7 2 9 6 2-4 5-6 9-6 6 0 10 4 10 10 0 12-22 21-22 21Z"/>
|
<path d="M24 39S8 30 8 18c0-6 4-10 10-10 4 0 7 2 9 6 2-4 5-6 9-6 6 0 10 4 10 10 0 12-22 21-22 21Z"/>
|
||||||
</svg>
|
</svg>
|
||||||
<h3 class="text-base font-medium uppercase tracking-[0.04em] text-amare-text">Execução e experiência</h3>
|
<h3 class="mt-2 text-base font-medium uppercase tracking-[0.04em] text-amare-accent-deep">Execução e experiência</h3>
|
||||||
<p class="mx-auto max-w-[280px] text-amare-text-muted">Coordenamos a operação para que o evento aconteça com fluidez e presença.</p>
|
<p class="mx-auto mt-1.5 max-w-[280px] text-[0.94rem] leading-relaxed text-amare-text">Coordenamos a operação para que o evento aconteça com fluidez e presença.</p>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -47,7 +47,8 @@
|
|||||||
:show-intro="false"
|
:show-intro="false"
|
||||||
kicker="tag"
|
kicker="tag"
|
||||||
:show-subtitle="true"
|
:show-subtitle="true"
|
||||||
:band-cta-href="route('briefing')"
|
cta-route="contact"
|
||||||
|
:band-cta-href="route('contact')"
|
||||||
band-body="Conte um pouco sobre o casamento. A Amare entende o momento de vocês e orienta o melhor formato de acompanhamento sem depender de um quiz automático."
|
band-body="Conte um pouco sobre o casamento. A Amare entende o momento de vocês e orienta o melhor formato de acompanhamento sem depender de um quiz automático."
|
||||||
:show-note="false"
|
:show-note="false"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -44,33 +44,6 @@ class AboutPageContentTest extends TestCase
|
|||||||
->assertDontSee('Personalização sem complicação desnecessária');
|
->assertDontSee('Personalização sem complicação desnecessária');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_about_layout_matches_site_editorial_rhythm(): void
|
|
||||||
{
|
|
||||||
SiteSetting::instance()->update([
|
|
||||||
'about_image_path' => 'content/heroes/about.jpg',
|
|
||||||
'about_image_alt' => 'Estúdio Amare',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$html = $this->get(route('about'))->assertOk()->getContent();
|
|
||||||
|
|
||||||
$this->assertMatchesRegularExpression(
|
|
||||||
'/data-about-hero[\s\S]*?lg:grid-cols-12[\s\S]*?lg:col-span-5[\s\S]*?text-hero-spread[\s\S]*?lg:col-span-7/',
|
|
||||||
$html,
|
|
||||||
);
|
|
||||||
$this->assertStringNotContainsString('data-photo-hero', $html);
|
|
||||||
$this->assertDoesNotMatchRegularExpression(
|
|
||||||
'/data-about-hero[\s\S]*?min-h-\[calc\(100dvh-5rem\)\]/',
|
|
||||||
$html,
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertMatchesRegularExpression('/data-about-pillars[\s\S]*?py-16 md:py-24/', $html);
|
|
||||||
$this->assertMatchesRegularExpression('/data-about-process[\s\S]*?py-16 md:py-24/', $html);
|
|
||||||
$this->assertMatchesRegularExpression('/data-about-portfolio[\s\S]*?data-editorial-portfolio/', $html);
|
|
||||||
$this->assertDoesNotMatchRegularExpression('/data-about-portfolio[\s\S]*?rounded-full/', $html);
|
|
||||||
$this->assertMatchesRegularExpression('/<(?:section)[^>]*(?:data-about-cta[^>]*bg-amare-bg-deep|bg-amare-bg-deep[^>]*data-about-cta)/', $html);
|
|
||||||
$this->assertStringContainsString('Próximo passo', $html);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function test_about_renders_founder_image_from_cms_when_configured(): void
|
public function test_about_renders_founder_image_from_cms_when_configured(): void
|
||||||
{
|
{
|
||||||
SiteSetting::instance()->update([
|
SiteSetting::instance()->update([
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Tests\Feature\PublicSite;
|
|
||||||
|
|
||||||
use App\Models\SiteSetting;
|
|
||||||
use App\Models\WeddingPackage;
|
|
||||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
||||||
use Tests\TestCase;
|
|
||||||
|
|
||||||
class ServicesPageCtaTest extends TestCase
|
|
||||||
{
|
|
||||||
use RefreshDatabase;
|
|
||||||
|
|
||||||
public function test_package_cta_uses_whatsapp_when_a_number_is_configured(): void
|
|
||||||
{
|
|
||||||
SiteSetting::instance()->update(['whatsapp_number' => '+55 11 98888-7777']);
|
|
||||||
|
|
||||||
WeddingPackage::factory()->published()->create([
|
|
||||||
'name' => 'Grand Jour',
|
|
||||||
'cta_label' => 'Quero conhecer a Grand Jour',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$response = $this->get(route('services.index'));
|
|
||||||
|
|
||||||
$response
|
|
||||||
->assertOk()
|
|
||||||
->assertSee(
|
|
||||||
'https://wa.me/5511988887777?text='.rawurlencode('Olá, gostaria de conversar sobre a modalidade Grand Jour para meu casamento.'),
|
|
||||||
false,
|
|
||||||
)
|
|
||||||
->assertSee('target="_blank"', false)
|
|
||||||
->assertDontSee(route('briefing', ['servico_interesse' => 'Grand Jour']), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function test_package_cta_falls_back_to_briefing_without_whatsapp_number(): void
|
|
||||||
{
|
|
||||||
SiteSetting::instance()->update(['whatsapp_number' => null]);
|
|
||||||
|
|
||||||
WeddingPackage::factory()->published()->create([
|
|
||||||
'name' => 'Essenza',
|
|
||||||
'cta_label' => 'Quero conhecer a Essenza',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$response = $this->get(route('services.index'));
|
|
||||||
|
|
||||||
$response
|
|
||||||
->assertOk()
|
|
||||||
->assertSee('href="'.route('briefing', ['servico_interesse' => 'Essenza']).'"', false)
|
|
||||||
->assertDontSee('wa.me/', false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user