{{-- Page Accueil — portage fidele de maquettes/Accueil.dc.html. Donnees fournies par AccueilController@index : - $contenu : ContenuPage (page 'accueil') — textes/images editables, voir app/Filament/Resources/ContenusPages/Config/SchemaContenuPage.php pour la structure complete des cles. - $biens : les 5 premiers biens CRM (CrmClientInterface::biens()), memes cles que sur la page Acheter. - $partenaires : Partenaire mis en avant (nom, categorie, image nullable), affiches dans un carrousel defilant (4 visibles a la fois). Liens fixes dans la vue (decision client), memes cles que la maquette : - Bouton hero -> route('acheter') - Carte parcours 1 (Acheter) -> route('acheter') - Carte parcours 2 (Vendre mon terrain) -> route('vendre-mon-terrain') - CTA "Voir tous nos biens" + cartes biens -> route('acheter') - CTA "Qui sommes-nous" -> route('qui-sommes-nous') - CTA "Voir tous nos partenariats" + cartes partenaires -> route('partenaires') Ecart signale (voir aussi docs/frontend-composants.md) : la carte "bien" de Accueil.dc.html n'est PAS la PropertyCard de PropertyCard.dc.html (pas de bouton favori, pas d'actions Voir/Planifier, grille de 5 colonnes, image 150px). Conformement a la consigne ("reste fidele a Accueil.dc.html et signale l'ecart"), cette section est portee en HTML dedie ci-dessous plutot qu'avec , pour ne pas devoyer ce composant partage ni le lot Acheter/Bien qui le consomment deja. Chaque carte reste un lien simple vers route('acheter') comme dans la maquette (pas de lien vers la fiche bien individuelle : la maquette ne le fait pas ici). Valeurs/icones fixes dans la vue (comme convenu, non stockees en base) : - icones des 2 cartes parcours (SVG paths de la maquette) - icones "metrique" par bien (chambres vs terrain, meme logique que la maquette : bases sur la presence du champ 'chambres') - icones des 3 blocs "valeurs" --}} @extends('layouts.site') @section('titre', 'Biome Constructions') @php // Icones fixes des 2 cartes "parcours" (paths SVG de la maquette, // associes par position — index 0 = Acheter, index 1 = Vendre mon terrain). $parcoursMeta = [ [ 'href' => route('acheter'), 'icone' => 'M3 11.2 12 4l9 7.2M5.4 10.2V20h13.2v-9.8', 'placeholder' => 'Couple visitant une maison', // Image du design servie par defaut si aucune image n'est definie en // admin pour cette carte (evite le placeholder texte cote public). 'image_defaut' => 'images/acheter-card.jpg', ], [ 'href' => route('vendre-mon-terrain'), 'icone' => 'M12 21s7-6.2 7-11a7 7 0 1 0-14 0c0 4.8 7 11 7 11ZM12 12.4a2.4 2.4 0 1 0 0-4.8 2.4 2.4 0 0 0 0 4.8Z', 'placeholder' => 'Terrain constructible vu du ciel', 'image_defaut' => 'images/terrain-card.jpg', ], ]; $parcours = $contenu->contenu('parcours', []); // Icone fixe du bloc "valeurs" index 0 ("Nos constructions", INCHANGEE). // Les blocs 1 ("Nos partenariats") et 2 ("Notre expertise") ont des icones // dediees (PNG et SVG medaille) gerees directement dans le gabarit ci-dessous. $valeursIcones = [ '', ]; $valeurs = $contenu->contenu('valeurs.items', []); @endphp @push('styles') {{-- Carrousel defilant des partenaires (bloc "Partenaires" de l'accueil). Meme animation que le carrousel des realisations (@keyframes biomeScroll), + mise en pause au survol pour permettre le clic sur une vignette. prefers-reduced-motion : on coupe le defilement et on autorise le defilement manuel (accessibilite). --}} @endpush @section('contenu') {{-- HERO full-bleed. Carrousel : le slide "de base" (hero maquette) est TOUJOURS present (1er slide, fourni par AccueilController::slideBase), suivi des slides editables en admin (Carrousel accueil). 2 slides ou plus -> defilement automatique toutes les 10 s (voir initHeroCarrousel dans site.js) ; un seul (base seule) reste fixe. --}} @if ($slides->isNotEmpty())
count() > 1) data-hero-intervalle="10000" @endif style="position:relative;overflow:hidden;background:var(--couleur-fond-hero);min-height:420px;" > {{-- Cale-hauteur : 1re image en flux mais invisible -> fixe la hauteur ; les slides sont empiles en absolu par-dessus. Le min-height ci-dessus garantit un bandeau visible meme si l'image est lente/indisponible. --}} @foreach ($slides as $i => $slide)
@if ($slide->imageUrl()) {{ $slide->titre }} @endif
@if ($slide->titre)

{{ $slide->titre }}

@endif @if ($slide->sous_titre)

{{ $slide->sous_titre }}

@endif @if ($slide->bouton_libelle) {{ $slide->bouton_libelle }} @endif
@endforeach @if ($slides->count() > 1)
@foreach ($slides as $i => $slide) @endforeach
@endif
@endif {{-- 3 CARTES PARCOURS (2 dans le contenu actuel) --}}
@foreach ($parcours as $i => $p) @php $meta = $parcoursMeta[$i] ?? ['href' => route('acheter'), 'icone' => '', 'placeholder' => $p['titre'] ?? '']; // Image editee en admin ; a defaut, image du design (image_defaut) // -> la carte a toujours une photo, jamais le placeholder texte. $imgParcours = \App\Support\MediaSite::url($p['image'] ?? null) ?? \App\Support\MediaSite::url($meta['image_defaut'] ?? null); $aImage = $imgParcours !== null; @endphp
{{ $p['tag'] }}

{{ $p['titre'] }}

{{ $p['texte'] }}

{{ $p['cta'] }}
@if ($aImage)
{{ $p['titre'] }}
@else
{{ $meta['placeholder'] }}
@endif
@endforeach
{{-- BIENS DISPONIBLES --}}

{{ $contenu->contenu('biens_disponibles.titre') }}

{{ $contenu->contenu('biens_disponibles.texte_cta') }}
@foreach ($biens as $bien) @php $aPhoto = ! empty($bien['photo_principale']); $titre = $bien['titre'] ?? ($bien['localite'].' - Lot '.$bien['lot']); // Meme logique que la maquette : la 2e metrique affiche les // chambres pour une maison/appartement avec chambres, sinon // la superficie de terrain (biens sans champ chambres). $aChambres = ! empty($bien['chambres']); $metriqueLabel = $aChambres ? $bien['chambres'].' ch.' : $bien['terrain']; $metriqueIcone = $aChambres ? 'M3 17v-5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v5M3 14h18' : 'M3 20h18M5 20l3-8 4 4 3-6 4 10'; @endphp @if ($aPhoto) {{ $titre }} @else
{{ $titre }}
@endif
{{ $titre }}
{{ $bien['facades'] ?? '' }}
{{ $bien['prix'] }}
{{ $bien['surface_habitable'] }} {{ $metriqueLabel }}
@endforeach
{{-- QUI SOMMES-NOUS (court) --}}

{{ $contenu->contenu('qui_sommes_nous_court.titre') }}

@foreach (explode("\n\n", (string) $contenu->contenu('qui_sommes_nous_court.texte')) as $paragraphe)

{{ $paragraphe }}

@endforeach En savoir plus
@php $imgQsnCourt = \App\Support\MediaSite::url($contenu->contenu('qui_sommes_nous_court.image')) ?? \App\Support\MediaSite::url('images/biome-bureaux.jpg'); @endphp @if ($imgQsnCourt) Bureaux Biome Constructions @else
Bureaux Biome Constructions
@endif
{{-- VALEURS --}}

{{ $contenu->contenu('valeurs.titre') }}

@foreach ($valeurs as $i => $valeur)
@if ($i === 1) {{-- Nos partenariats : icone dediee (poignee de main), fournie en PNG --}} {{ $valeur['titre'] }} @elseif ($i === 2) {{-- Notre expertise : medaille/label, SVG dedie --}} @else @endif

{{ $valeur['titre'] }}

{{ $valeur['texte'] }}

@endforeach
{{-- PARTENAIRES & SOUS-TRAITANTS --}}

{{ $contenu->contenu('partenaires.titre') }}

{{ $contenu->contenu('partenaires.texte') }}

{{ $contenu->contenu('partenaires.texte_cta') }}
{{-- Carrousel defilant : 4 partenaires visibles a la fois, defilement automatique continu (meme technique CSS que le carrousel des realisations : @keyframes biomeScroll, piste dupliquee x2, translateX -50%). Au survol, le defilement se met en pause pour laisser cliquer sur une vignette (chaque carte est un lien). --}} @php $nbPartenaires = $partenaires->count(); // Piste dupliquee (x2) pour boucler sans saut ; vitesse // proportionnelle au nombre de partenaires (allure constante). $pistePartenaires = $nbPartenaires > 0 ? $partenaires->concat($partenaires) : $partenaires; $dureeDefilement = max(18, $nbPartenaires * 6); @endphp
@foreach ($pistePartenaires as $partenaire) @php $estDuplicata = $loop->index >= $nbPartenaires; @endphp @endforeach
@endsection