Compare commits
6 Commits
fix/browse
...
feat/home-
| Author | SHA1 | Date | |
|---|---|---|---|
| 8009f1f8f9 | |||
| 8311f89850 | |||
| 887df37fae | |||
| 4859fc5a8b | |||
| dfa798552f | |||
| 2573a4aa73 |
@@ -31,13 +31,9 @@ Hooks live in `.husky/` and auto-install on any plain `npm install` via the `pre
|
|||||||
|
|
||||||
Follow PSR-4 and Laravel conventions: PascalCase classes, camelCase methods, and snake_case database columns. Use four spaces (two in YAML, except four in Compose files), LF endings, and UTF-8 as defined by `.editorconfig`. Every project-owned PHP file must place `declare(strict_types=1);` immediately after `<?php`. Keep domain code independent of Filament and Livewire. Run `composer pint` to format and `composer phpstan` before review.
|
Follow PSR-4 and Laravel conventions: PascalCase classes, camelCase methods, and snake_case database columns. Use four spaces (two in YAML, except four in Compose files), LF endings, and UTF-8 as defined by `.editorconfig`. Every project-owned PHP file must place `declare(strict_types=1);` immediately after `<?php`. Keep domain code independent of Filament and Livewire. Run `composer pint` to format and `composer phpstan` before review.
|
||||||
|
|
||||||
## Design Principles: DRY & YAGNI
|
|
||||||
|
|
||||||
Write for the problem at hand, not an imagined future. **DRY**: extract and reuse a piece of logic as soon as it is genuinely duplicated in more than one place — but not before. **YAGNI**: do not add abstraction, configurability, or layers speculatively; add them only when a concrete requirement demands it. Prefer the simplest thing that solves the current requirement. Duplication that appears once is not yet a reason to abstract — wait for a second real occurrence before generalizing. This repo already encodes YAGNI in `openspec/config.yaml` (no generic repositories / `BaseService`); keep that spirit in new code. Avoid over-engineering and avoid premature extraction.
|
|
||||||
|
|
||||||
## Testing Guidelines
|
## Testing Guidelines
|
||||||
|
|
||||||
Tests use Pest 4; browser coverage uses Pest Browser/Playwright. Tests are verification, not a design driver — write them to cover behavior you've already implemented, matching the layer you changed. Name files by behavior, ending in `Test.php`, and add tests in the suite matching the changed layer. Feature tests use `RefreshDatabase`. Add architecture coverage for dependency-boundary changes. No numeric coverage threshold is enforced; add regression tests where a bug was fixed or behavior is non-obvious, without making tests a front-loaded design ceremony.
|
Tests use Pest 4; browser coverage uses Pest Browser/Playwright. Name files by behavior, ending in `Test.php`, and add tests in the suite matching the changed layer. Feature tests use `RefreshDatabase`. Add architecture coverage for dependency-boundary changes. No numeric coverage threshold is enforced, but changed behavior must have regression coverage.
|
||||||
|
|
||||||
## Commit & Pull Request Guidelines
|
## Commit & Pull Request Guidelines
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,6 @@ If the import above did not load, read `AGENTS.md` at the repo root now — it i
|
|||||||
- Every project-owned PHP file starts with `declare(strict_types=1);` immediately after `<?php`.
|
- Every project-owned PHP file starts with `declare(strict_types=1);` immediately after `<?php`.
|
||||||
- Browser tests are CI-only (they run against a FrankenPHP container built by `docker build`, not `artisan serve`).
|
- Browser tests are CI-only (they run against a FrankenPHP container built by `docker build`, not `artisan serve`).
|
||||||
|
|
||||||
## Design principles: DRY & YAGNI (not TDD)
|
|
||||||
|
|
||||||
Write for the problem at hand, not an imagined future. **DRY**: extract and reuse only once logic is genuinely duplicated in more than one place. **YAGNI**: no speculative abstraction, configurability, or layers — add them only when a concrete requirement demands it. Prefer the simplest thing that solves the current requirement; avoid over-engineering and premature extraction. Tests are verification, not a design driver: write them to cover behavior already implemented, not as a front-loaded TDD ceremony.
|
|
||||||
|
|
||||||
## Environment note
|
## Environment note
|
||||||
|
|
||||||
PHP and Composer are **not on PATH** in this environment, and `vendor/` and `node_modules/` are absent. Every `composer …` / `php artisan …` command in `AGENTS.md` and `README.md` assumes a PHP 8.4+ runtime with Composer 2 installed. Verify the toolchain before promising a command ran.
|
PHP and Composer are **not on PATH** in this environment, and `vendor/` and `node_modules/` are absent. Every `composer …` / `php artisan …` command in `AGENTS.md` and `README.md` assumes a PHP 8.4+ runtime with Composer 2 installed. Verify the toolchain before promising a command ran.
|
||||||
|
|||||||
13
package-lock.json
generated
13
package-lock.json
generated
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "daisyui",
|
"name": "site-amare",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/vite": "^4.0.0",
|
"@tailwindcss/vite": "^4.0.0",
|
||||||
"concurrently": "^9.0.1",
|
"concurrently": "^9.0.1",
|
||||||
"daisyui": "^5.7.16",
|
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"laravel-vite-plugin": "^3.1",
|
"laravel-vite-plugin": "^3.1",
|
||||||
"playwright": "^1.62.0",
|
"playwright": "^1.62.0",
|
||||||
@@ -791,16 +790,6 @@
|
|||||||
"url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
|
"url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/daisyui": {
|
|
||||||
"version": "5.7.16",
|
|
||||||
"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.7.16.tgz",
|
|
||||||
"integrity": "sha512-V9CJxvrWIXTDuP/0tpijjWaKaKJNYo2IrULJfTWs3/DjW9rPqswk1n8NCLQRLrTutmlG2Ech7nkJDpCnF+6Dzw==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/saadeghi/daisyui?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/detect-libc": {
|
"node_modules/detect-libc": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/vite": "^4.0.0",
|
"@tailwindcss/vite": "^4.0.0",
|
||||||
"concurrently": "^9.0.1",
|
"concurrently": "^9.0.1",
|
||||||
"daisyui": "^5.7.16",
|
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"laravel-vite-plugin": "^3.1",
|
"laravel-vite-plugin": "^3.1",
|
||||||
"playwright": "^1.62.0",
|
"playwright": "^1.62.0",
|
||||||
|
|||||||
@@ -1,46 +1,6 @@
|
|||||||
@import 'tailwindcss';
|
@import 'tailwindcss';
|
||||||
@import './tokens.css';
|
@import './tokens.css';
|
||||||
|
|
||||||
@plugin "daisyui" {
|
|
||||||
themes: false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@plugin "daisyui/theme" {
|
|
||||||
name: "amare";
|
|
||||||
default: true;
|
|
||||||
color-scheme: light;
|
|
||||||
|
|
||||||
--color-base-100: var(--amare-color-bg);
|
|
||||||
--color-base-200: var(--amare-color-bg-deep);
|
|
||||||
--color-base-300: var(--amare-color-bg-archive);
|
|
||||||
--color-base-content: var(--amare-color-text);
|
|
||||||
--color-primary: var(--amare-color-accent);
|
|
||||||
--color-primary-content: var(--amare-color-accent-text);
|
|
||||||
--color-secondary: var(--amare-color-sage);
|
|
||||||
--color-secondary-content: var(--amare-color-text);
|
|
||||||
--color-accent: var(--amare-color-accent-deep);
|
|
||||||
--color-accent-content: var(--amare-color-accent-text);
|
|
||||||
--color-neutral: var(--amare-color-muted);
|
|
||||||
--color-neutral-content: var(--amare-color-accent-text);
|
|
||||||
--color-info: #2563eb;
|
|
||||||
--color-info-content: #ffffff;
|
|
||||||
--color-success: var(--amare-color-success);
|
|
||||||
--color-success-content: var(--amare-color-accent-text);
|
|
||||||
--color-warning: var(--amare-color-warning);
|
|
||||||
--color-warning-content: var(--amare-color-accent-text);
|
|
||||||
--color-error: var(--amare-color-error);
|
|
||||||
--color-error-content: var(--amare-color-accent-text);
|
|
||||||
|
|
||||||
--radius-selector: 0;
|
|
||||||
--radius-field: 0;
|
|
||||||
--radius-box: 0;
|
|
||||||
--size-selector: 0.25rem;
|
|
||||||
--size-field: 0.25rem;
|
|
||||||
--border: 1px;
|
|
||||||
--depth: 0;
|
|
||||||
--noise: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
|
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
|
||||||
@source '../../storage/framework/views/*.php';
|
@source '../../storage/framework/views/*.php';
|
||||||
@source '../views/**/*.blade.php';
|
@source '../views/**/*.blade.php';
|
||||||
@@ -267,11 +227,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* daisyUI emits unlayered; match focus ring to the amare accent. */
|
|
||||||
.input:focus,
|
|
||||||
.select:focus,
|
|
||||||
.textarea:focus,
|
|
||||||
.checkbox:focus-visible {
|
|
||||||
--input-color: var(--amare-color-accent);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($errors->any())
|
@if ($errors->any())
|
||||||
<div role="alert" class="alert alert-error border border-amare-error/40">
|
<div role="alert" class="border border-amare-error/40 bg-amare-error/5 px-6 py-5">
|
||||||
<p class="font-semibold text-amare-error">Não foi possível enviar.</p>
|
<p class="font-semibold text-amare-error">Não foi possível enviar.</p>
|
||||||
<p class="mt-1 text-sm text-amare-muted">Revise os campos destacados abaixo e tente novamente.</p>
|
<p class="mt-1 text-sm text-amare-muted">Revise os campos destacados abaixo e tente novamente.</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
autocomplete="name"
|
autocomplete="name"
|
||||||
maxlength="120"
|
maxlength="120"
|
||||||
placeholder="Seu nome"
|
placeholder="Seu nome"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('nome') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('nome') border-amare-error @enderror"
|
||||||
@error('nome') aria-invalid="true" aria-describedby="briefing-nome-error" @enderror
|
@error('nome') aria-invalid="true" aria-describedby="briefing-nome-error" @enderror
|
||||||
>
|
>
|
||||||
@error('nome')
|
@error('nome')
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
autocomplete="email"
|
autocomplete="email"
|
||||||
maxlength="254"
|
maxlength="254"
|
||||||
placeholder="voce@email.com"
|
placeholder="voce@email.com"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('email') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('email') border-amare-error @enderror"
|
||||||
@error('email') aria-invalid="true" aria-describedby="briefing-email-error" @enderror
|
@error('email') aria-invalid="true" aria-describedby="briefing-email-error" @enderror
|
||||||
>
|
>
|
||||||
@error('email')
|
@error('email')
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
autocomplete="tel"
|
autocomplete="tel"
|
||||||
maxlength="40"
|
maxlength="40"
|
||||||
placeholder="(11) 90000-0000"
|
placeholder="(11) 90000-0000"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('telefone') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('telefone') border-amare-error @enderror"
|
||||||
@error('telefone') aria-invalid="true" aria-describedby="briefing-telefone-error" @enderror
|
@error('telefone') aria-invalid="true" aria-describedby="briefing-telefone-error" @enderror
|
||||||
>
|
>
|
||||||
@error('telefone')
|
@error('telefone')
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
id="briefing-tipo_evento"
|
id="briefing-tipo_evento"
|
||||||
name="tipo_evento"
|
name="tipo_evento"
|
||||||
required
|
required
|
||||||
class="select w-full text-amare-text @error('tipo_evento') select-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors focus:border-amare-accent focus:outline-none @error('tipo_evento') border-amare-error @enderror"
|
||||||
@error('tipo_evento') aria-invalid="true" aria-describedby="briefing-tipo_evento-error" @enderror
|
@error('tipo_evento') aria-invalid="true" aria-describedby="briefing-tipo_evento-error" @enderror
|
||||||
>
|
>
|
||||||
<option value="" selected disabled>Selecione...</option>
|
<option value="" selected disabled>Selecione...</option>
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
value="{{ old('data_periodo') }}"
|
value="{{ old('data_periodo') }}"
|
||||||
maxlength="80"
|
maxlength="80"
|
||||||
placeholder="Ex.: novembro de 2027"
|
placeholder="Ex.: novembro de 2027"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('data_periodo') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('data_periodo') border-amare-error @enderror"
|
||||||
@error('data_periodo') aria-invalid="true" aria-describedby="briefing-data_periodo-error" @enderror
|
@error('data_periodo') aria-invalid="true" aria-describedby="briefing-data_periodo-error" @enderror
|
||||||
>
|
>
|
||||||
@error('data_periodo')
|
@error('data_periodo')
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
required
|
required
|
||||||
maxlength="80"
|
maxlength="80"
|
||||||
placeholder="Ex.: São Paulo"
|
placeholder="Ex.: São Paulo"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('cidade') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('cidade') border-amare-error @enderror"
|
||||||
@error('cidade') aria-invalid="true" aria-describedby="briefing-cidade-error" @enderror
|
@error('cidade') aria-invalid="true" aria-describedby="briefing-cidade-error" @enderror
|
||||||
>
|
>
|
||||||
@error('cidade')
|
@error('cidade')
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
inputmode="numeric"
|
inputmode="numeric"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder="Ex.: 120"
|
placeholder="Ex.: 120"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('convidados') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('convidados') border-amare-error @enderror"
|
||||||
@error('convidados') aria-invalid="true" aria-describedby="briefing-convidados-error" @enderror
|
@error('convidados') aria-invalid="true" aria-describedby="briefing-convidados-error" @enderror
|
||||||
>
|
>
|
||||||
@error('convidados')
|
@error('convidados')
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
value="{{ old('servico_interesse') }}"
|
value="{{ old('servico_interesse') }}"
|
||||||
maxlength="120"
|
maxlength="120"
|
||||||
placeholder="Ex.: planejamento completo"
|
placeholder="Ex.: planejamento completo"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('servico_interesse') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('servico_interesse') border-amare-error @enderror"
|
||||||
@error('servico_interesse') aria-invalid="true" aria-describedby="briefing-servico_interesse-error" @enderror
|
@error('servico_interesse') aria-invalid="true" aria-describedby="briefing-servico_interesse-error" @enderror
|
||||||
>
|
>
|
||||||
@error('servico_interesse')
|
@error('servico_interesse')
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
rows="5"
|
rows="5"
|
||||||
maxlength="3000"
|
maxlength="3000"
|
||||||
placeholder="O que já está definido? Em que ponto você precisa de ajuda?"
|
placeholder="O que já está definido? Em que ponto você precisa de ajuda?"
|
||||||
class="textarea w-full min-h-[110px] text-amare-text placeholder:text-amare-muted/60 @error('mensagem') textarea-error @enderror"
|
class="w-full min-h-[110px] border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('mensagem') border-amare-error @enderror"
|
||||||
@error('mensagem') aria-invalid="true" aria-describedby="briefing-mensagem-error" @enderror
|
@error('mensagem') aria-invalid="true" aria-describedby="briefing-mensagem-error" @enderror
|
||||||
>{{ old('mensagem') }}</textarea>
|
>{{ old('mensagem') }}</textarea>
|
||||||
@error('mensagem')
|
@error('mensagem')
|
||||||
@@ -215,7 +215,7 @@
|
|||||||
value="1"
|
value="1"
|
||||||
required
|
required
|
||||||
@checked(old('privacidade'))
|
@checked(old('privacidade'))
|
||||||
class="checkbox checkbox-primary mt-1 shrink-0"
|
class="mt-1 h-5 w-5 shrink-0 accent-amare-accent"
|
||||||
@error('privacidade') aria-invalid="true" aria-describedby="briefing-privacidade-error" @enderror
|
@error('privacidade') aria-invalid="true" aria-describedby="briefing-privacidade-error" @enderror
|
||||||
>
|
>
|
||||||
<span class="text-sm text-amare-muted">
|
<span class="text-sm text-amare-muted">
|
||||||
@@ -233,7 +233,7 @@
|
|||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
data-submit-button
|
data-submit-button
|
||||||
class="btn btn-primary text-xs font-bold uppercase tracking-[0.09em]"
|
class="inline-flex min-h-[48px] items-center justify-center border border-transparent bg-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep"
|
||||||
>
|
>
|
||||||
Enviar briefing
|
Enviar briefing
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="#contato" class="btn btn-primary mt-7 self-start text-xs font-bold uppercase tracking-[0.09em]" data-reveal data-reveal-from="up">
|
<a href="#contato" class="mt-7 inline-flex min-h-[48px] items-center justify-center self-start border border-transparent bg-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep" data-reveal data-reveal-from="up">
|
||||||
Falar sobre um evento corporativo
|
Falar sobre um evento corporativo
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<a
|
<a
|
||||||
href="{{ route('briefing') }}"
|
href="{{ route('briefing') }}"
|
||||||
class="btn btn-primary text-sm font-semibold uppercase tracking-[0.12em]"
|
class="inline-flex min-h-11 items-center bg-amare-accent px-5 py-3 text-sm font-semibold uppercase tracking-[0.12em] text-amare-accent-text transition-colors duration-(--amare-duration-normal) ease-(--amare-ease-standard) hover:bg-amare-accent-deep"
|
||||||
>
|
>
|
||||||
{{ $settings->hero_cta_label ?: 'Solicitar proposta' }}
|
{{ $settings->hero_cta_label ?: 'Solicitar proposta' }}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -2,29 +2,48 @@
|
|||||||
'settings',
|
'settings',
|
||||||
])
|
])
|
||||||
|
|
||||||
<x-public.photo-hero
|
<section
|
||||||
@class(['home-chapter'])
|
aria-labelledby="hero-heading"
|
||||||
|
class="home-chapter border-b border-amare-border bg-amare-bg"
|
||||||
data-chapter="hero"
|
data-chapter="hero"
|
||||||
:image-path="$settings->hero_image_path"
|
data-motion="page-open"
|
||||||
:image-alt="$settings->hero_image_alt ?: $settings->brand_name"
|
|
||||||
:eyebrow="$settings->hero_eyebrow"
|
|
||||||
:title="$settings->hero_title ?: 'Celebrações com propósito'"
|
|
||||||
:summary="$settings->hero_subtitle"
|
|
||||||
brand-mark
|
|
||||||
>
|
>
|
||||||
<div class="flex flex-wrap items-center gap-4">
|
<div class="container-amare grid items-end gap-12 pb-12 pt-16 md:grid-cols-[1.1fr_0.9fr] md:gap-[clamp(3rem,6vw,7rem)] md:pb-[72px] md:pt-24">
|
||||||
<a href="{{ route('contact') }}" data-testid="home-primary-cta" class="btn btn-primary text-xs font-bold uppercase tracking-[0.09em]">
|
<div data-hero-content data-reveal-group class="flex flex-col gap-8">
|
||||||
{{ $settings->hero_cta_label ?: 'Solicitar proposta' }}
|
<div data-motion-beat="eyebrow">
|
||||||
</a>
|
<p class="text-xs font-bold uppercase tracking-[0.16em] text-amare-accent-deep">Assessoria & produção de eventos • São Paulo</p>
|
||||||
|
|
||||||
@if (filled($settings->hero_secondary_cta_label))
|
|
||||||
<a href="{{ route('portfolio.index') }}" class="btn btn-ghost 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">{{ $settings->hero_secondary_cta_label }}</span>
|
|
||||||
</a>
|
|
||||||
@endif
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if (filled($settings->hero_note))
|
<h1 id="hero-heading" data-motion-beat="title" class="text-[clamp(3rem,8vw,5.75rem)] font-medium leading-[0.95] tracking-[-0.04em] text-amare-text">
|
||||||
<p class="mt-4 max-w-xl text-sm text-amare-text-muted">{{ $settings->hero_note }}</p>
|
Eventos com intenção, cuidado e presença.
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p class="max-w-[760px] text-[clamp(1.1875rem,2vw,1.5rem)] leading-[1.55] text-amare-text-muted">
|
||||||
|
Uma boutique de assessoria que une sensibilidade, organização e condução profissional para transformar cada projeto em uma experiência bem cuidada.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div data-motion-beat="cta" class="flex flex-wrap items-center gap-4">
|
||||||
|
<a href="#sobre" data-testid="home-primary-cta" class="inline-flex min-h-[48px] items-center justify-center border border-transparent bg-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep">
|
||||||
|
Conhecer a Amare
|
||||||
|
</a>
|
||||||
|
<a href="#contato" class="inline-flex min-h-[48px] items-center justify-center border border-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-deep transition-colors hover:bg-amare-accent hover:text-amare-accent-text">
|
||||||
|
Enviar briefing
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
data-split-hero
|
||||||
|
data-motion-beat="media"
|
||||||
|
class="min-h-[320px] overflow-hidden bg-amare-bg-deep md:min-h-[520px]"
|
||||||
|
>
|
||||||
|
@if (filled($settings->hero_image_path))
|
||||||
|
<x-media.image :path="$settings->hero_image_path" :alt="$settings->hero_image_alt ?: $settings->brand_name" loading="eager" fetchpriority="high" sizes="(max-width: 1023px) 100vw, 45vw" class="img-editorial h-full w-full object-cover" />
|
||||||
|
@else
|
||||||
|
<div data-tonal-hero class="flex h-full min-h-[320px] items-center justify-center bg-gradient-to-br from-amare-bg-deep to-amare-bg-archive md:min-h-[520px]">
|
||||||
|
<p class="text-xs font-semibold uppercase tracking-[0.16em] text-amare-muted">Fotografia hero</p>
|
||||||
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</x-public.photo-hero>
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
<a
|
<a
|
||||||
href="{{ $waLink }}"
|
href="{{ $waLink }}"
|
||||||
@if ($hasWhatsapp) target="_blank" rel="noopener noreferrer" @endif
|
@if ($hasWhatsapp) target="_blank" rel="noopener noreferrer" @endif
|
||||||
class="btn btn-primary text-xs font-bold uppercase tracking-[0.09em]"
|
class="inline-flex min-h-[48px] items-center justify-center border border-transparent bg-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep"
|
||||||
>
|
>
|
||||||
{{ $package->cta_label }}
|
{{ $package->cta_label }}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
@endforeach
|
@endforeach
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
<a href="{{ route('about') }}" class="btn btn-ghost min-h-0 px-0 text-sm font-semibold text-amare-accent hover:bg-transparent hover:text-amare-accent-deep">
|
<a href="{{ route('about') }}" class="inline-flex min-h-11 items-center text-sm font-semibold text-amare-accent transition-colors hover:text-amare-accent-deep">
|
||||||
<span class="border-b border-amare-accent pb-1">Conhecer a Amare</span>
|
<span class="border-b border-amare-accent pb-1">Conhecer a Amare</span>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="{{ route('services.index') }}" class="btn btn-ghost min-h-0 px-0 text-sm font-semibold text-amare-accent hover:bg-transparent hover:text-amare-accent-deep">
|
<a href="{{ route('services.index') }}" class="inline-flex min-h-11 items-center text-sm font-semibold text-amare-accent transition-colors hover:text-amare-accent-deep">
|
||||||
<span class="border-b border-amare-accent pb-1">Ver todos os serviços</span>
|
<span class="border-b border-amare-accent pb-1">Ver todos os serviços</span>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<p class="text-xs font-bold uppercase tracking-[0.16em] text-amare-accent-deep">Amare Casamentos</p>
|
<p class="text-xs font-bold uppercase tracking-[0.16em] text-amare-accent-deep">Amare Casamentos</p>
|
||||||
<h3 class="text-[clamp(1.5625rem,2.7vw,2.125rem)] font-medium leading-tight text-amare-text">Planejamento e condução para viver o processo com mais leveza.</h3>
|
<h3 class="text-[clamp(1.5625rem,2.7vw,2.125rem)] font-medium leading-tight text-amare-text">Planejamento e condução para viver o processo com mais leveza.</h3>
|
||||||
<p class="text-amare-text-muted">Do início da organização à reta final, modalidades pensadas para diferentes momentos do casal.</p>
|
<p class="text-amare-text-muted">Do início da organização à reta final, modalidades pensadas para diferentes momentos do casal.</p>
|
||||||
<a href="#casamentos" class="btn btn-outline mt-2 self-start text-xs font-bold uppercase tracking-[0.09em]">
|
<a href="#casamentos" class="mt-2 inline-flex min-h-[48px] items-center justify-center self-start border border-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-deep transition-colors hover:bg-amare-accent hover:text-amare-accent-text">
|
||||||
Conhecer casamentos
|
Conhecer casamentos
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
<p class="text-xs font-bold uppercase tracking-[0.16em] text-amare-accent-deep">Amare Corporate</p>
|
<p class="text-xs font-bold uppercase tracking-[0.16em] text-amare-accent-deep">Amare Corporate</p>
|
||||||
<h3 class="text-[clamp(1.5625rem,2.7vw,2.125rem)] font-medium leading-tight text-amare-text">Eventos empresariais com organização, intenção e execução segura.</h3>
|
<h3 class="text-[clamp(1.5625rem,2.7vw,2.125rem)] font-medium leading-tight text-amare-text">Eventos empresariais com organização, intenção e execução segura.</h3>
|
||||||
<p class="text-amare-text-muted">Uma frente própria para projetos corporativos, com linguagem e necessidades diferentes das celebrações sociais.</p>
|
<p class="text-amare-text-muted">Uma frente própria para projetos corporativos, com linguagem e necessidades diferentes das celebrações sociais.</p>
|
||||||
<a href="#corporate" class="btn btn-outline mt-2 self-start text-xs font-bold uppercase tracking-[0.09em]">
|
<a href="#corporate" class="mt-2 inline-flex min-h-[48px] items-center justify-center self-start border border-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-deep transition-colors hover:bg-amare-accent hover:text-amare-accent-text">
|
||||||
Conhecer Corporate
|
Conhecer Corporate
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
@foreach ($packages as $package)
|
@foreach ($packages as $package)
|
||||||
@php($digits = preg_replace('/\D/', '', (string) $settings->whatsapp_number))
|
@php($digits = preg_replace('/\D/', '', (string) $settings->whatsapp_number))
|
||||||
@php($href = strlen((string) $digits) >= 10 ? 'https://wa.me/'.$digits.'?text='.rawurlencode('Olá, gostaria de conversar sobre a modalidade '.$package->name.' para meu casamento.') : route('briefing', ['servico_interesse' => $package->name]))
|
@php($href = strlen((string) $digits) >= 10 ? 'https://wa.me/'.$digits.'?text='.rawurlencode('Olá, gostaria de conversar sobre a modalidade '.$package->name.' para meu casamento.') : route('briefing', ['servico_interesse' => $package->name]))
|
||||||
<li class="space-y-5 border-t border-amare-border pt-4" data-reveal data-reveal-from="up"><p class="text-xs font-semibold uppercase tracking-[.14em] text-amare-accent">{{ $package->level }}</p><h3 class="text-3xl font-medium">{{ $package->name }}</h3><p class="text-amare-muted">{{ $package->summary }}</p><ul class="space-y-2 text-sm text-amare-text-muted">@foreach ($package->scope_items as $item)<li class="border-l border-amare-border pl-3">{{ $item }}</li>@endforeach</ul><a href="{{ $href }}" @if (str_starts_with($href, 'https://wa.me/')) target="_blank" rel="noopener" @endif class="btn btn-ghost min-h-0 px-0 text-sm font-semibold text-amare-accent hover:bg-transparent hover:text-amare-accent-deep"><span class="border-b border-amare-accent pb-1">{{ $package->cta_label }}</span></a></li>
|
<li class="space-y-5 border-t border-amare-border pt-4" data-reveal data-reveal-from="up"><p class="text-xs font-semibold uppercase tracking-[.14em] text-amare-accent">{{ $package->level }}</p><h3 class="text-3xl font-medium">{{ $package->name }}</h3><p class="text-amare-muted">{{ $package->summary }}</p><ul class="space-y-2 text-sm text-amare-text-muted">@foreach ($package->scope_items as $item)<li class="border-l border-amare-border pl-3">{{ $item }}</li>@endforeach</ul><a href="{{ $href }}" @if (str_starts_with($href, 'https://wa.me/')) target="_blank" rel="noopener" @endif class="inline-flex min-h-11 items-center text-sm font-semibold text-amare-accent hover:text-amare-accent-deep"><span class="border-b border-amare-accent pb-1">{{ $package->cta_label }}</span></a></li>
|
||||||
@endforeach
|
@endforeach
|
||||||
</ol>
|
</ol>
|
||||||
@endif
|
@endif
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Página não encontrada</h1>
|
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Página não encontrada</h1>
|
||||||
<p class="text-amare-muted" data-reveal data-reveal-from="up">O endereço que você tentou abrir não existe ou foi movido.</p>
|
<p class="text-amare-muted" data-reveal data-reveal-from="up">O endereço que você tentou abrir não existe ou foi movido.</p>
|
||||||
<p data-reveal data-reveal-from="up">
|
<p data-reveal data-reveal-from="up">
|
||||||
<a href="{{ route('home') }}" class="btn btn-primary text-sm font-semibold uppercase tracking-[0.12em]">
|
<a href="{{ route('home') }}" class="inline-flex min-h-11 items-center bg-amare-accent px-5 py-3 text-sm font-semibold uppercase tracking-[0.12em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep">
|
||||||
Voltar para a home
|
Voltar para a home
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Sessão expirada</h1>
|
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Sessão expirada</h1>
|
||||||
<p class="text-amare-muted" data-reveal data-reveal-from="up">Sua sessão expirou. Volte e tente enviar novamente.</p>
|
<p class="text-amare-muted" data-reveal data-reveal-from="up">Sua sessão expirou. Volte e tente enviar novamente.</p>
|
||||||
<p data-reveal data-reveal-from="up">
|
<p data-reveal data-reveal-from="up">
|
||||||
<a href="{{ route('home') }}" class="btn btn-primary text-sm font-semibold uppercase tracking-[0.12em]">
|
<a href="{{ route('home') }}" class="inline-flex min-h-11 items-center bg-amare-accent px-5 py-3 text-sm font-semibold uppercase tracking-[0.12em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep">
|
||||||
Voltar para a home
|
Voltar para a home
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Muitas solicitações</h1>
|
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Muitas solicitações</h1>
|
||||||
<p class="text-amare-muted" data-reveal data-reveal-from="up">Você enviou muitas solicitações em pouco tempo. Aguarde um instante e tente novamente.</p>
|
<p class="text-amare-muted" data-reveal data-reveal-from="up">Você enviou muitas solicitações em pouco tempo. Aguarde um instante e tente novamente.</p>
|
||||||
<p data-reveal data-reveal-from="up">
|
<p data-reveal data-reveal-from="up">
|
||||||
<a href="{{ route('home') }}" class="btn btn-primary text-sm font-semibold uppercase tracking-[0.12em]">
|
<a href="{{ route('home') }}" class="inline-flex min-h-11 items-center bg-amare-accent px-5 py-3 text-sm font-semibold uppercase tracking-[0.12em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep">
|
||||||
Voltar para a home
|
Voltar para a home
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Algo deu errado</h1>
|
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Algo deu errado</h1>
|
||||||
<p class="text-amare-muted" data-reveal data-reveal-from="up">Não foi possível concluir o pedido agora. Tente novamente em instantes.</p>
|
<p class="text-amare-muted" data-reveal data-reveal-from="up">Não foi possível concluir o pedido agora. Tente novamente em instantes.</p>
|
||||||
<p data-reveal data-reveal-from="up">
|
<p data-reveal data-reveal-from="up">
|
||||||
<a href="{{ route('home') }}" class="btn btn-primary text-sm font-semibold uppercase tracking-[0.12em]">
|
<a href="{{ route('home') }}" class="inline-flex min-h-11 items-center bg-amare-accent px-5 py-3 text-sm font-semibold uppercase tracking-[0.12em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep">
|
||||||
Voltar para a home
|
Voltar para a home
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Em manutenção</h1>
|
<h1 class="text-4xl font-medium tracking-tight text-amare-text" data-motion-beat="title">Em manutenção</h1>
|
||||||
<p class="text-amare-muted" data-reveal data-reveal-from="up">Estamos realizando uma breve manutenção. Tente novamente em instantes.</p>
|
<p class="text-amare-muted" data-reveal data-reveal-from="up">Estamos realizando uma breve manutenção. Tente novamente em instantes.</p>
|
||||||
<p data-reveal data-reveal-from="up">
|
<p data-reveal data-reveal-from="up">
|
||||||
<a href="{{ route('home') }}" class="btn btn-primary text-sm font-semibold uppercase tracking-[0.12em]">
|
<a href="{{ route('home') }}" class="inline-flex min-h-11 items-center bg-amare-accent px-5 py-3 text-sm font-semibold uppercase tracking-[0.12em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep">
|
||||||
Voltar para a home
|
Voltar para a home
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" data-theme="amare">
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
@@ -58,11 +58,11 @@
|
|||||||
<header class="site-header sticky top-0 z-40 border-b border-amare-border bg-amare-bg/95 backdrop-blur-sm">
|
<header class="site-header sticky top-0 z-40 border-b border-amare-border bg-amare-bg/95 backdrop-blur-sm">
|
||||||
<div class="container-amare grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4 md:grid-cols-[1fr_auto_1fr] md:h-[74px] md:py-0">
|
<div class="container-amare grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4 md:grid-cols-[1fr_auto_1fr] md:h-[74px] md:py-0">
|
||||||
<nav id="main-nav" class="main-nav order-3 col-span-3 hidden flex-col gap-4 border-t border-amare-border pt-4 md:order-1 md:col-span-1 md:flex md:flex-row md:items-center md:gap-1 md:border-0 md:pt-0" aria-label="Principal" data-main-nav>
|
<nav id="main-nav" class="main-nav order-3 col-span-3 hidden flex-col gap-4 border-t border-amare-border pt-4 md:order-1 md:col-span-1 md:flex md:flex-row md:items-center md:gap-1 md:border-0 md:pt-0" aria-label="Principal" data-main-nav>
|
||||||
<a href="{{ route('home') }}" class="btn btn-ghost min-h-0 px-0 py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted hover:text-amare-accent md:px-3">Início</a>
|
<a href="{{ route('home') }}" class="inline-flex items-center py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted transition-colors hover:text-amare-accent md:px-3">Início</a>
|
||||||
<a href="{{ route('services.index') }}" class="btn btn-ghost min-h-0 px-0 py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted hover:text-amare-accent md:px-3">Serviços</a>
|
<a href="{{ route('services.index') }}" class="inline-flex items-center py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted transition-colors hover:text-amare-accent md:px-3">Serviços</a>
|
||||||
<a href="{{ route('portfolio.index') }}" class="btn btn-ghost min-h-0 px-0 py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted hover:text-amare-accent md:px-3">Portfólio</a>
|
<a href="{{ route('portfolio.index') }}" class="inline-flex items-center py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted transition-colors hover:text-amare-accent md:px-3">Portfólio</a>
|
||||||
<a href="{{ route('about') }}" class="btn btn-ghost min-h-0 px-0 py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted hover:text-amare-accent md:px-3">Amare</a>
|
<a href="{{ route('about') }}" class="inline-flex items-center py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted transition-colors hover:text-amare-accent md:px-3">Amare</a>
|
||||||
<a href="{{ route('briefing') }}" class="btn btn-ghost min-h-0 px-0 py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted hover:text-amare-accent md:hidden">Solicitar proposta</a>
|
<a href="{{ route('briefing') }}" class="inline-flex items-center py-3 text-[13px] font-semibold uppercase tracking-[0.08em] text-amare-muted transition-colors hover:text-amare-accent md:hidden">Solicitar proposta</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<a href="{{ route('home') }}" class="order-1 justify-self-start md:order-2 md:justify-self-center" aria-label="{{ $siteSettings->brand_name }} — página inicial">
|
<a href="{{ route('home') }}" class="order-1 justify-self-start md:order-2 md:justify-self-center" aria-label="{{ $siteSettings->brand_name }} — página inicial">
|
||||||
@@ -70,14 +70,13 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<div class="order-2 flex items-center justify-end gap-3 md:order-3">
|
<div class="order-2 flex items-center justify-end gap-3 md:order-3">
|
||||||
<a href="{{ route('briefing') }}" class="btn btn-outline hidden min-h-0 px-6 text-xs font-bold uppercase tracking-[0.09em] md:inline-flex">
|
<a href="{{ route('briefing') }}" class="hidden items-center justify-center border border-amare-accent px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-deep transition-colors hover:bg-amare-accent hover:text-amare-accent-text md:inline-flex min-h-[48px]">
|
||||||
Conte seu evento
|
Conte seu evento
|
||||||
</a>
|
</a>
|
||||||
</a>
|
|
||||||
|
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="menu-button btn btn-square btn-ghost border border-amare-border text-amare-text md:hidden"
|
class="menu-button inline-flex h-11 w-11 items-center justify-center border border-amare-border text-amare-text md:hidden"
|
||||||
aria-label="Abrir menu"
|
aria-label="Abrir menu"
|
||||||
aria-controls="main-nav"
|
aria-controls="main-nav"
|
||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
@if (session('status') === 'briefing-sent')
|
@if (session('status') === 'briefing-sent')
|
||||||
<div role="status" class="alert mt-8 border border-amare-border bg-amare-bg-deep">
|
<div role="status" class="mt-8 border border-amare-border bg-amare-bg-deep px-6 py-5">
|
||||||
<p class="font-semibold text-amare-text">Mensagem enviada.</p>
|
<p class="font-semibold text-amare-text">Mensagem enviada.</p>
|
||||||
<p class="mt-1 text-amare-muted">Recebemos seu briefing e retornaremos em breve pelo canal informado.</p>
|
<p class="mt-1 text-amare-muted">Recebemos seu briefing e retornaremos em breve pelo canal informado.</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($errors->any())
|
@if ($errors->any())
|
||||||
<div role="alert" class="alert alert-error border border-amare-error/40">
|
<div role="alert" class="border border-amare-error/40 bg-amare-error/5 px-6 py-5">
|
||||||
<p class="font-semibold text-amare-error">Não foi possível enviar.</p>
|
<p class="font-semibold text-amare-error">Não foi possível enviar.</p>
|
||||||
<p class="mt-1 text-sm text-amare-muted">Revise os campos destacados abaixo e tente novamente.</p>
|
<p class="mt-1 text-sm text-amare-muted">Revise os campos destacados abaixo e tente novamente.</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
autocomplete="name"
|
autocomplete="name"
|
||||||
maxlength="120"
|
maxlength="120"
|
||||||
placeholder="Seu nome"
|
placeholder="Seu nome"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('nome') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('nome') border-amare-error @enderror"
|
||||||
@error('nome') aria-invalid="true" aria-describedby="nome-error" @enderror
|
@error('nome') aria-invalid="true" aria-describedby="nome-error" @enderror
|
||||||
>
|
>
|
||||||
@error('nome')
|
@error('nome')
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
autocomplete="email"
|
autocomplete="email"
|
||||||
maxlength="254"
|
maxlength="254"
|
||||||
placeholder="voce@email.com"
|
placeholder="voce@email.com"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('email') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('email') border-amare-error @enderror"
|
||||||
@error('email') aria-invalid="true" aria-describedby="email-error" @enderror
|
@error('email') aria-invalid="true" aria-describedby="email-error" @enderror
|
||||||
>
|
>
|
||||||
@error('email')
|
@error('email')
|
||||||
@@ -117,7 +117,7 @@
|
|||||||
autocomplete="tel"
|
autocomplete="tel"
|
||||||
maxlength="40"
|
maxlength="40"
|
||||||
placeholder="(11) 90000-0000"
|
placeholder="(11) 90000-0000"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('telefone') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('telefone') border-amare-error @enderror"
|
||||||
@error('telefone') aria-invalid="true" aria-describedby="telefone-error" @enderror
|
@error('telefone') aria-invalid="true" aria-describedby="telefone-error" @enderror
|
||||||
>
|
>
|
||||||
@error('telefone')
|
@error('telefone')
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
id="tipo_evento"
|
id="tipo_evento"
|
||||||
name="tipo_evento"
|
name="tipo_evento"
|
||||||
required
|
required
|
||||||
class="select w-full text-amare-text @error('tipo_evento') select-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors focus:border-amare-accent focus:outline-none @error('tipo_evento') border-amare-error @enderror"
|
||||||
@error('tipo_evento') aria-invalid="true" aria-describedby="tipo_evento-error" @enderror
|
@error('tipo_evento') aria-invalid="true" aria-describedby="tipo_evento-error" @enderror
|
||||||
>
|
>
|
||||||
<option value="" selected disabled>Selecione...</option>
|
<option value="" selected disabled>Selecione...</option>
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
value="{{ old('data_periodo') }}"
|
value="{{ old('data_periodo') }}"
|
||||||
maxlength="80"
|
maxlength="80"
|
||||||
placeholder="Ex.: novembro de 2027"
|
placeholder="Ex.: novembro de 2027"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('data_periodo') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('data_periodo') border-amare-error @enderror"
|
||||||
@error('data_periodo') aria-invalid="true" aria-describedby="data_periodo-error" @enderror
|
@error('data_periodo') aria-invalid="true" aria-describedby="data_periodo-error" @enderror
|
||||||
>
|
>
|
||||||
@error('data_periodo')
|
@error('data_periodo')
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
required
|
required
|
||||||
maxlength="80"
|
maxlength="80"
|
||||||
placeholder="Ex.: São Paulo"
|
placeholder="Ex.: São Paulo"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('cidade') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('cidade') border-amare-error @enderror"
|
||||||
@error('cidade') aria-invalid="true" aria-describedby="cidade-error" @enderror
|
@error('cidade') aria-invalid="true" aria-describedby="cidade-error" @enderror
|
||||||
>
|
>
|
||||||
@error('cidade')
|
@error('cidade')
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
inputmode="numeric"
|
inputmode="numeric"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder="Ex.: 120"
|
placeholder="Ex.: 120"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('convidados') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('convidados') border-amare-error @enderror"
|
||||||
@error('convidados') aria-invalid="true" aria-describedby="convidados-error" @enderror
|
@error('convidados') aria-invalid="true" aria-describedby="convidados-error" @enderror
|
||||||
>
|
>
|
||||||
@error('convidados')
|
@error('convidados')
|
||||||
@@ -209,7 +209,7 @@
|
|||||||
value="{{ old('servico_interesse', request('servico_interesse')) }}"
|
value="{{ old('servico_interesse', request('servico_interesse')) }}"
|
||||||
maxlength="120"
|
maxlength="120"
|
||||||
placeholder="Ex.: planejamento completo"
|
placeholder="Ex.: planejamento completo"
|
||||||
class="input w-full text-amare-text placeholder:text-amare-muted/60 @error('servico_interesse') input-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('servico_interesse') border-amare-error @enderror"
|
||||||
@error('servico_interesse') aria-invalid="true" aria-describedby="servico_interesse-error" @enderror
|
@error('servico_interesse') aria-invalid="true" aria-describedby="servico_interesse-error" @enderror
|
||||||
>
|
>
|
||||||
@error('servico_interesse')
|
@error('servico_interesse')
|
||||||
@@ -227,7 +227,7 @@
|
|||||||
rows="6"
|
rows="6"
|
||||||
maxlength="3000"
|
maxlength="3000"
|
||||||
placeholder="Conte sobre o seu evento, expectativas e principais preocupações."
|
placeholder="Conte sobre o seu evento, expectativas e principais preocupações."
|
||||||
class="textarea w-full text-amare-text placeholder:text-amare-muted/60 @error('mensagem') textarea-error @enderror"
|
class="w-full border-0 border-b border-amare-border bg-transparent py-3 text-amare-text transition-colors placeholder:text-amare-muted/60 focus:border-amare-accent focus:outline-none @error('mensagem') border-amare-error @enderror"
|
||||||
@error('mensagem') aria-invalid="true" aria-describedby="mensagem-error" @enderror
|
@error('mensagem') aria-invalid="true" aria-describedby="mensagem-error" @enderror
|
||||||
>{{ old('mensagem') }}</textarea>
|
>{{ old('mensagem') }}</textarea>
|
||||||
@error('mensagem')
|
@error('mensagem')
|
||||||
@@ -244,7 +244,7 @@
|
|||||||
value="1"
|
value="1"
|
||||||
required
|
required
|
||||||
@checked(old('privacidade'))
|
@checked(old('privacidade'))
|
||||||
class="checkbox checkbox-primary mt-1 shrink-0"
|
class="mt-1 h-5 w-5 shrink-0 accent-amare-accent"
|
||||||
@error('privacidade') aria-invalid="true" aria-describedby="privacidade-error" @enderror
|
@error('privacidade') aria-invalid="true" aria-describedby="privacidade-error" @enderror
|
||||||
>
|
>
|
||||||
<span class="text-sm text-amare-muted">
|
<span class="text-sm text-amare-muted">
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
data-submit-button
|
data-submit-button
|
||||||
class="btn btn-primary min-h-11 px-8 text-sm font-semibold uppercase tracking-[0.12em]"
|
class="inline-flex min-h-[44px] items-center justify-center bg-amare-accent px-8 py-3 text-sm font-semibold uppercase tracking-[0.12em] text-amare-accent-text transition-colors hover:bg-amare-accent-deep"
|
||||||
>
|
>
|
||||||
Enviar briefing
|
Enviar briefing
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div><label class="mb-2 block text-xs font-semibold uppercase tracking-[.14em]" for="mensagem">Mensagem *</label><textarea class="w-full border border-amare-border bg-transparent p-3 focus:border-amare-accent focus:outline-none" id="mensagem" name="mensagem" rows="6" required maxlength="3000">{{ old('mensagem') }}</textarea>@error('mensagem')<p class="mt-2 text-sm text-amare-error">{{ $message }}</p>@enderror</div>
|
<div><label class="mb-2 block text-xs font-semibold uppercase tracking-[.14em]" for="mensagem">Mensagem *</label><textarea class="w-full border border-amare-border bg-transparent p-3 focus:border-amare-accent focus:outline-none" id="mensagem" name="mensagem" rows="6" required maxlength="3000">{{ old('mensagem') }}</textarea>@error('mensagem')<p class="mt-2 text-sm text-amare-error">{{ $message }}</p>@enderror</div>
|
||||||
<p class="max-w-2xl text-sm text-amare-muted">Ao enviar, você reconhece o uso destes dados exclusivamente para analisar uma possível parceria, conforme a <a class="text-amare-accent underline" href="{{ route('privacy') }}">política de privacidade</a>.</p>
|
<p class="max-w-2xl text-sm text-amare-muted">Ao enviar, você reconhece o uso destes dados exclusivamente para analisar uma possível parceria, conforme a <a class="text-amare-accent underline" href="{{ route('privacy') }}">política de privacidade</a>.</p>
|
||||||
<button type="submit" data-submit-button class="btn btn-primary text-sm font-semibold uppercase tracking-[.12em]">Enviar apresentação</button>
|
<button type="submit" data-submit-button class="inline-flex min-h-11 bg-amare-accent px-6 py-3 text-sm font-semibold uppercase tracking-[.12em] text-amare-accent-text hover:bg-amare-accent-deep">Enviar apresentação</button>
|
||||||
</form>
|
</form>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ it('reaches the primary CTA by keyboard and activates it', function (): void {
|
|||||||
|
|
||||||
$page->keys('[data-testid="home-primary-cta"]', 'Enter');
|
$page->keys('[data-testid="home-primary-cta"]', 'Enter');
|
||||||
|
|
||||||
$page->assertPathIs('/contato');
|
$hash = $page->script('() => window.location.hash');
|
||||||
|
expect($hash)->toBe('#sobre');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('disables transitions when prefers-reduced-motion is reduce', function (): void {
|
it('disables transitions when prefers-reduced-motion is reduce', function (): void {
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ it('keeps the hero asymmetric on desktop and stacked through md and mobile', fun
|
|||||||
startsBelowHeader: Math.abs((heroRect?.top ?? -1) - (headerRect?.bottom ?? -2)) <= 1,
|
startsBelowHeader: Math.abs((heroRect?.top ?? -1) - (headerRect?.bottom ?? -2)) <= 1,
|
||||||
mediaBesideContent: (mediaRect?.left ?? 0) >= (contentRect?.right ?? Number.POSITIVE_INFINITY) - 1,
|
mediaBesideContent: (mediaRect?.left ?? 0) >= (contentRect?.right ?? Number.POSITIVE_INFINITY) - 1,
|
||||||
mediaMinHeight: Math.round(mediaRect?.height ?? 0) >= 519,
|
mediaMinHeight: Math.round(mediaRect?.height ?? 0) >= 519,
|
||||||
mediaTouchesViewportRight: (mediaRect?.right ?? 0) >= window.innerWidth - 4,
|
mediaInsideContainer: (mediaRect?.right ?? 0) < window.innerWidth - 100,
|
||||||
horizontalOverflow: document.documentElement.scrollWidth > window.innerWidth,
|
horizontalOverflow: document.documentElement.scrollWidth > window.innerWidth,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ it('keeps the hero asymmetric on desktop and stacked through md and mobile', fun
|
|||||||
'startsBelowHeader' => true,
|
'startsBelowHeader' => true,
|
||||||
'mediaBesideContent' => true,
|
'mediaBesideContent' => true,
|
||||||
'mediaMinHeight' => true,
|
'mediaMinHeight' => true,
|
||||||
'mediaTouchesViewportRight' => true,
|
'mediaInsideContainer' => true,
|
||||||
'horizontalOverflow' => false,
|
'horizontalOverflow' => false,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ it('opens home motion, reveals once, and allows CTA during open', function (): v
|
|||||||
|
|
||||||
$page->click('[data-testid="home-primary-cta"]');
|
$page->click('[data-testid="home-primary-cta"]');
|
||||||
|
|
||||||
$page->assertPathIs('/contato');
|
expect($page->script('() => window.location.hash'))->toBe('#sobre');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('keeps content and navigation usable without javascript', function (): void {
|
it('keeps content and navigation usable without javascript', function (): void {
|
||||||
@@ -171,7 +171,7 @@ it('keeps content and navigation usable without javascript', function (): void {
|
|||||||
->assertVisible('[data-testid="home-primary-cta"]')
|
->assertVisible('[data-testid="home-primary-cta"]')
|
||||||
->click('[data-testid="home-primary-cta"]');
|
->click('[data-testid="home-primary-cta"]');
|
||||||
|
|
||||||
$page->assertPathIs('/contato');
|
expect($page->script('() => window.location.hash'))->toBe('#sobre');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('keeps targets final when intersection observer is unavailable', function (): void {
|
it('keeps targets final when intersection observer is unavailable', function (): void {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ it('renders the public home page', function (): void {
|
|||||||
$settings = SiteSetting::instance();
|
$settings = SiteSetting::instance();
|
||||||
|
|
||||||
$this->visit('/')
|
$this->visit('/')
|
||||||
->assertSee($settings->hero_title)
|
->assertSee('Eventos com intenção, cuidado e presença.')
|
||||||
->assertSee($settings->brand_name);
|
->assertSee($settings->brand_name);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class HomePageTest extends TestCase
|
|||||||
|
|
||||||
$response
|
$response
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertSee('Celebrações com propósito')
|
->assertSee('Eventos com intenção, cuidado e presença.')
|
||||||
->assertSee($settings->brand_name);
|
->assertSee($settings->brand_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,18 +105,18 @@ class HomePageContentTest extends TestCase
|
|||||||
'id="testimonials-heading"',
|
'id="testimonials-heading"',
|
||||||
'id="briefing-heading"',
|
'id="briefing-heading"',
|
||||||
], false)
|
], false)
|
||||||
|
->assertSee('Fotografia hero')
|
||||||
->assertSee('FOTO DE CASAMENTO 01')
|
->assertSee('FOTO DE CASAMENTO 01')
|
||||||
->assertSee('Nome e data reais — aguardando autorização')
|
->assertSee('Nome e data reais — aguardando autorização')
|
||||||
->assertSee('Conteúdo em construção')
|
->assertSee('Conteúdo em construção')
|
||||||
->assertSee('Fornecedores e parcerias — pós-MVP');
|
->assertSee('Fornecedores e parcerias — pós-MVP');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_hero_falls_back_to_default_copy_when_fields_are_empty(): void
|
public function test_hero_uses_fixed_editorial_copy_regardless_of_settings(): void
|
||||||
{
|
{
|
||||||
SiteSetting::instance()->update([
|
SiteSetting::instance()->update([
|
||||||
'hero_title' => '',
|
'hero_title' => '',
|
||||||
'hero_subtitle' => '',
|
'hero_subtitle' => '',
|
||||||
'hero_cta_label' => '',
|
|
||||||
'hero_image_path' => null,
|
'hero_image_path' => null,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -124,8 +124,11 @@ class HomePageContentTest extends TestCase
|
|||||||
|
|
||||||
$response
|
$response
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertSeeInOrder(['id="hero-heading"', 'Celebrações com propósito'], false)
|
->assertSee('Eventos com intenção, cuidado e presença.')
|
||||||
->assertSeeInOrder(['data-testid="home-primary-cta"', 'Solicitar proposta'], false);
|
->assertSee('Uma boutique de assessoria que une sensibilidade, organização e condução profissional para transformar cada projeto em uma experiência bem cuidada.')
|
||||||
|
->assertSee('Conhecer a Amare')
|
||||||
|
->assertSee('Enviar briefing')
|
||||||
|
->assertSeeInOrder(['href="#sobre"', 'data-testid="home-primary-cta"'], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_home_hero_uses_its_own_cms_image_instead_of_the_social_og_image(): void
|
public function test_home_hero_uses_its_own_cms_image_instead_of_the_social_og_image(): void
|
||||||
@@ -157,11 +160,12 @@ class HomePageContentTest extends TestCase
|
|||||||
|
|
||||||
$this->get(route('home'))
|
$this->get(route('home'))
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertSee('data-tonal-hero', false)
|
->assertSee('min-h-[320px]', false)
|
||||||
|
->assertSee('md:min-h-[520px]', false)
|
||||||
|
->assertSee('Fotografia hero')
|
||||||
->assertSee('id="hero-heading"', false)
|
->assertSee('id="hero-heading"', false)
|
||||||
->assertSee('data-testid="home-primary-cta"', false)
|
->assertSee('data-testid="home-primary-cta"', false)
|
||||||
->assertDontSee('data-photo-hero', false)
|
->assertSee('data-motion-beat="media"', false)
|
||||||
->assertDontSee('data-motion-beat="media"', false)
|
|
||||||
->assertDontSee('content/home/hero.jpg', false);
|
->assertDontSee('content/home/hero.jpg', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,16 +37,15 @@ class ImmersivePhotoHeroTest extends TestCase
|
|||||||
->assertOk()
|
->assertOk()
|
||||||
->assertSee('data-chapter="hero"', false)
|
->assertSee('data-chapter="hero"', false)
|
||||||
->assertSee('data-motion="page-open"', false)
|
->assertSee('data-motion="page-open"', false)
|
||||||
->assertSee('data-photo-hero', false)
|
->assertSee('md:min-h-[520px]', false)
|
||||||
->assertSee('min-h-[calc(100dvh-5rem)]', false)
|
|
||||||
->assertSee('data-hero-content', false)
|
->assertSee('data-hero-content', false)
|
||||||
->assertSee('data-split-hero', false)
|
->assertSee('data-split-hero', false)
|
||||||
->assertSee('data-motion-beat="media"', false)
|
->assertSee('data-motion-beat="media"', false)
|
||||||
->assertSee('lg:grid-cols-12', false)
|
->assertSee('md:grid-cols-[1.1fr_0.9fr]', false)
|
||||||
->assertSee('content/heroes/home.jpg', false)
|
->assertSee('content/heroes/home.jpg', false)
|
||||||
->assertSee('loading="eager"', false)
|
->assertSee('loading="eager"', false)
|
||||||
->assertSee('fetchpriority="high"', false)
|
->assertSee('fetchpriority="high"', false)
|
||||||
->assertSee('sizes="(max-width: 1023px) 100vw, 58vw"', false)
|
->assertSee('sizes="(max-width: 1023px) 100vw, 45vw"', false)
|
||||||
->assertDontSee('data-tonal-hero', false)
|
->assertDontSee('data-tonal-hero', false)
|
||||||
->assertSee('content="http://localhost/storage/content/og/social.jpg"', false);
|
->assertSee('content="http://localhost/storage/content/og/social.jpg"', false);
|
||||||
}
|
}
|
||||||
@@ -76,8 +75,9 @@ class ImmersivePhotoHeroTest extends TestCase
|
|||||||
->assertSee('data-motion="page-open"', false)
|
->assertSee('data-motion="page-open"', false)
|
||||||
->assertSee('id="hero-heading"', false)
|
->assertSee('id="hero-heading"', false)
|
||||||
->assertSee('data-testid="home-primary-cta"', false)
|
->assertSee('data-testid="home-primary-cta"', false)
|
||||||
->assertDontSee('data-photo-hero', false)
|
->assertSee('data-split-hero', false)
|
||||||
->assertDontSee('data-split-hero', false)
|
->assertSee('data-tonal-hero', false)
|
||||||
|
->assertSee('Fotografia hero')
|
||||||
->assertDontSee('content/heroes/home.jpg', false);
|
->assertDontSee('content/heroes/home.jpg', false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class MotionMarkupTest extends TestCase
|
|||||||
$response
|
$response
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertSee('data-motion="page-open"', false)
|
->assertSee('data-motion="page-open"', false)
|
||||||
->assertSee('data-motion-beat="seal"', false)
|
->assertSee('data-motion-beat="eyebrow"', false)
|
||||||
->assertSee('data-motion-beat="title"', false)
|
->assertSee('data-motion-beat="title"', false)
|
||||||
->assertSee('data-motion-beat="media"', false)
|
->assertSee('data-motion-beat="media"', false)
|
||||||
->assertSee('data-motion-beat="cta"', false)
|
->assertSee('data-motion-beat="cta"', false)
|
||||||
|
|||||||
Reference in New Issue
Block a user