{{-- v4.14.0 §C — L'APP-SHELL : l'en-tête, l'écran, et la barre d'onglets du bas. v4.16.0 §A — L'en-tête porte la marque de L'AGENCE QUI EXÉCUTE **CET ESPACE-CI**, jamais celle de l'installation : `logoDuPrestataire()` / `nomDuPrestataire()` du tableau de bord, qui replient déjà proprement sur l'identité du socle quand l'espace n'a rien posé. C'est ce que fait déjà l'e-mail depuis la v4.7.0 §E — la page disait autre chose que le message. Le client final, lui, reste figuré par son écusson à droite : son logo s'il en a téléversé un, ses initiales sinon. ⚠️ v4.17.0 §C — L'accent vient de l'espace (`couleur_primaire` / `couleur_accent`) QUAND il est posé, avec repli sur la palette de la maquette — mais il n'entre plus JAMAIS tel quel dans `--accent` / `--gold` / `--accent-ink`. La coquille pose les jetons PAR THÈME (`--accent-clair`, `--accent-sombre`, …), calculés par `PaletteTheme` avec un contraste mesuré ≥ 4,5 : 1 sur les fonds du thème, et c'est la feuille qui choisit la variante selon le thème actif. Avant ce lot, la couleur de marque écrasait les jetons dans les deux thèmes : indigo sur `#1c1e27`, les icônes des tuiles, les libellés, l'onglet actif et les pastilles disparaissaient en sombre. ⚠️ Toutes les valeurs d'identité sont lues ICI, au rendu, jamais à l'enregistrement d'un fournisseur : une base pas encore migrée ne doit pas faire tomber l'application. --}} @props([ 'dashboard' => null, 'acces' => null, 'espaces' => null, 'aValider' => 0, 'onglet' => 'accueil', 'nonLus' => ['total' => 0, 'par_sujet' => []], ]) @php use App\Support\EspaceClient\AppClient; use App\Support\EspaceClient\PaletteTheme; use App\Support\Identite; $palette = PaletteTheme::style(PaletteTheme::deLEspace($dashboard)); $espaces = $espaces ?? collect(); // La marque de l'espace ouvert ; hors espace (le choix entre plusieurs marchés), celle de // l'installation — c'est le seul écran où aucune agence n'est encore désignée. $logoMaison = $dashboard?->logoDuPrestataire() ?? Identite::logoRecadre(); $nomMaison = $dashboard?->nomDuPrestataire() ?? Identite::marque(); $lien = fn (string $route): string => $dashboard === null ? route($route) : route($route, ['espace' => $dashboard->id]); // v4.17.0 §B2.4 — Les badges : ce qui attend une décision, plus les messages non lus du fil. $nonLusPar = fn (string $type): int => (int) collect($nonLus['par_sujet'] ?? []) ->filter(fn (int $n, string $cle): bool => str_starts_with($cle, $type.':')) ->sum(); $onglets = [ ['cle' => 'accueil', 'libelle' => 'Accueil', 'route' => 'espace-client.app.accueil', 'badge' => 0], ['cle' => 'publications', 'libelle' => 'Publications', 'route' => 'espace-client.app.publications', 'badge' => $aValider + $nonLusPar('PublicationClient')], ['cle' => 'livrables', 'libelle' => 'Livrables', 'route' => 'espace-client.app.livrables', 'badge' => $nonLusPar('Livrable')], ['cle' => 'documents', 'libelle' => 'Documents', 'route' => 'espace-client.app.documents', 'badge' => 0], ['cle' => 'compte', 'libelle' => 'Compte', 'route' => 'espace-client.app.compte', 'badge' => 0], ]; @endphp
Choisissez le marché que vous voulez suivre.
Aucun espace ne vous est ouvert pour le moment.
@endforelse