PageSourceSearch

https://www.perla-di-mare.fr/_next/static/chunks/app/(site)/%5Bloc…/layout-b4aaf5a9ae6f8117.js

js perla-di-mare.fr collected 2026-10-08 07:14:39 UTC 40,362 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3103],{4245:function(t,e,n){Promise.resolve().then(n.bind(n,78826)),Promise.resolve().then(n.t.bind(n,92601,23)),Promise.resolve().then(n.t.bind(n,36534,23)),Promise.resolve().then(n.t.bind(n,39590,23)),Promise.resolve().then(n.t.bind(n,30202,23)),Promise.resolve().then(n.t.bind(n,19568,23))},78826:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var r=n(57437);let a={mandatoryTitle:"Cookies strictement n\xe9cessaires",mandatoryText:"Ils ne servent qu'\xe0 faire fonctionner le site — \xe0 commencer par la m\xe9morisation, ici m\xeame, de votre d\xe9cision sur les cookies, pour ne pas vous la redemander \xe0 chaque page. Ils ne mesurent pas votre navigation, ne servent pas \xe0 la publicit\xe9, et rien n'est transmis \xe0 un tiers. Le consentement n'est pas requis pour ces cookies : c'est la raison pour laquelle ils ne se d\xe9sactivent pas."},o="\n/* ── La carte ─────────────────────────────────────────────────────────────\n   250 px de large et 30 px de marge sur chaque commande : \xab Politique de\n   confidentialit\xe9 \xbb passait \xe0 la ligne et les deux d\xe9cisions se retrouvaient\n   \xe0 190 px. La carte s'\xe9largit, les marges des enfants deviennent son\n   rembourrage. R\xe9serv\xe9 aux deux formes en carte (popup, middle) : sur un\n   bandeau pleine largeur, une largeur maximale serait un contresens. */\nhtml body #tarteaucitronRoot.tarteaucitronSize-popup div#tarteaucitronAlertBig,\nhtml body #tarteaucitronRoot.tarteaucitronSize-middle div#tarteaucitronAlertBig {\n  /* !important sur les deux largeurs : la librairie en pose un (max-width:\n     250px !important), et la sp\xe9cificit\xe9 ne suffit donc pas. border-box parce\n     qu'elle laisse la carte en content-box : sans \xe7a le rembourrage s'ajoute \xe0\n     la largeur annonc\xe9e. */\n  width: calc(100% - 1.5rem) !important;\n  max-width: 25rem !important;\n  box-sizing: border-box;\n  /* Moins de rembourrage en bas qu'en haut : le dernier renvoi porte d\xe9j\xe0 le\n     sien, et la carte se terminait sur une bande blanche. */\n  padding: 1.5rem 1.5rem 0.9rem;\n  border-radius: 12px;\n  box-shadow: 0 2px 4px rgba(16, 20, 28, 0.06), 0 18px 46px -14px rgba(16, 20, 28, 0.38);\n}\n\n/* L'emoji de la librairie (--tacTitleBanner) est le ::before de la carte : il\n   se retrouvait coll\xe9 au texte, sur la m\xeame ligne de base. */\nhtml body #tarteaucitronRoot.tarteaucitronSize-popup div#tarteaucitronAlertBig::before,\nhtml body #tarteaucitronRoot.tarteaucitronSize-middle div#tarteaucitronAlertBig::before {\n  display: block;\n  margin-bottom: 0.7rem;\n  font-size: 1.5rem;\n  line-height: 1;\n}\n\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig #tarteaucitronDisclaimerAlert {\n  display: block;\n  margin: 0 0 1.15rem;\n  padding: 0;\n  font-size: 0.9375rem !important;\n  line-height: 1.5;\n}\n\n/* ── Les quatre commandes ───────────────────────────────────────────────── */\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button.tarteaucitronCTAButton,\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button#tarteaucitronCloseAlert,\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button#tarteaucitronPrivacyUrl {\n  display: block;\n  width: 100%;\n  border-radius: 8px;\n  line-height: 1.3;\n}\n\n/* Les deux d\xe9cisions : 44 px de haut, la cible tactile que demande le RGAA. */\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button.tarteaucitronCTAButton {\n  margin: 0 0 0.5rem;\n  min-height: 2.75rem;\n  padding: 0.6rem 1rem;\n  font-size: 0.9375rem !important;\n  font-weight: 600;\n}\n\n/* \xab Tout refuser \xbb est cern\xe9 l\xe0 o\xf9 \xab Tout accepter \xbb est plein : m\xeame largeur,\n   m\xeame hauteur, m\xeame graisse, m\xeame place, un seul clic — seul le remplissage\n   change. La CNIL exige un refus AUSSI SIMPLE que l'accord, pas identique au\n   pixel ; ce qu'elle sanctionne, c'est un refus plus petit, gris\xe9, ou cach\xe9\n   derri\xe8re \xab Personnaliser \xbb. Les deux boutons noirs et jumeaux, eux, faisaient\n   h\xe9siter sur celui qu'on venait de lire.\n\n   L'encre est neutre et non var(--color1) : le fond de la carte est blanc en\n   dur dans la librairie, une encre fonc\xe9e y est donc lisible quelle que soit la\n   charte du site — ce qu'un contour dans un --color1 clair ne serait pas. */\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button.tarteaucitronDeny {\n  background: transparent;\n  color: #14181f;\n  border: 1.5px solid rgba(20, 24, 33, 0.5);\n}\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button.tarteaucitronDeny:hover,\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button.tarteaucitronDeny:focus-visible {\n  background: rgba(20, 24, 33, 0.04);\n  border-color: #14181f;\n}\n\n/* ── Les deux renvois ─────────────────────────────────────────────────────\n   Du texte soulign\xe9, pas des boutons : l'œil doit voir deux d\xe9cisions et deux\n   renvois, pas quatre boutons de m\xeame poids.\n\n   Serr\xe9s l'un contre l'autre, et sans hauteur minimale : ce sont deux lignes\n   d'un m\xeame pied. \xc0 44 px chacun, l'espace entre eux passait pour une s\xe9paration\n   de rubriques. Ils restent \xe0 27 px de haut, au-dessus du minimum de 24 px que\n   demande le RGAA pour une cible non essentielle — les deux d\xe9cisions, elles,\n   gardent leurs 44 px. */\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button#tarteaucitronCloseAlert {\n  margin: 0.45rem 0 0;\n  min-height: 0;\n  padding: 0.35rem 0.75rem;\n  background: transparent;\n  color: #3a4048;\n  font-size: 0.875rem !important;\n  text-decoration: underline;\n  text-underline-offset: 0.2em;\n}\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button#tarteaucitronPrivacyUrl {\n  margin: 0;\n  min-height: 0;\n  padding: 0.3rem 0.75rem;\n  background: transparent;\n  color: #4a5158;\n  font-size: 0.8125rem !important;\n  text-decoration: underline;\n  text-underline-offset: 0.2em;\n}\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button#tarteaucitronCloseAlert:hover,\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button#tarteaucitronPrivacyUrl:hover {\n  
1color: #14181f;\n}\n\n/* La librairie retire les contours de focus sur ses boutons : au clavier, on ne\n   savait plus o\xf9 l'on \xe9tait. */\nhtml body #tarteaucitronRoot div#tarteaucitronAlertBig button:focus-visible {\n  outline: 2px solid #14181f;\n  outline-offset: 2px;\n}\n\n/* ── Le panneau d\xe9taill\xe9 ──────────────────────────────────────────────────\n   La pastille avait \xe9t\xe9 reprise, pas le panneau : il gardait l'habillage\n   d'origine, o\xf9 \xab Autoriser \xbb et \xab Interdire \xbb sont deux boutons noirs jumeaux\n   et o\xf9 le seul indice du choix en cours est un glyphe de dix pixels au fond\n   du bouton. C'est pourtant la seule question que le panneau pose, et il la\n   pose une fois par service.\n\n   Ce qui rend la reprise possible : chaque bouton porte un aria-pressed que la\n   librairie tient \xe0 jour, y compris au rechargement. On remplit donc celui qui\n   s'applique et on cerne l'autre — exactement la grammaire de \xab Tout accepter \xbb\n   et \xab Tout refuser \xbb de la pastille, et une information qui se voit \xe0 un m\xe8tre\n   au lieu de vingt centim\xe8tres.\n\n   aria-pressed et non la classe tarteaucitronIsAllowed / IsDenied du LI :\n   celle-ci n'est pos\xe9e qu'au clic et n'est PAS r\xe9tablie au chargement, si bien\n   qu'un choix d\xe9j\xe0 fait ne se voyait plus en revenant sur la page. L'attribut,\n   lui, est l'\xe9tat que les lecteurs d'\xe9cran annoncent d\xe9j\xe0.\n\n   Le glyphe dispara\xeet : l'\xe9tat est port\xe9 par le remplissage ET par la mention\n   \xab autoris\xe9 \xbb / \xab interdit \xbb d\xe9j\xe0 pr\xe9sente dans la ligne, donc par deux\n   canaux dont un textuel — ce qu'exige le RGAA, l\xe0 o\xf9 une case coch\xe9e\n   minuscule ne valait ni pour l'un ni pour l'autre. Le correctif de contraste\n   qui occupait cette place n'a donc plus d'objet. */\n\n/* La librairie travaille en CONTENT-BOX de bout en bout. Un en-t\xeate de rubrique\n   en width:100% avec 24 px de rembourrage mesure donc 48 px de plus que la\n   carte, qui le rogne : sur large \xe9cran, tous les titres de rubrique sortaient\n   du cadre et leur chevron disparaissait. Ramener le panneau entier en\n   border-box r\xe8gle la classe enti\xe8re de ces d\xe9bordements, plut\xf4t que de les\n   rattraper un par un. Les pseudo-\xe9l\xe9ments sont laiss\xe9s de c\xf4t\xe9 : la coche\n   dessin\xe9e du bouton actif tient justement \xe0 ses bordures. */\nhtml body #tarteaucitronRoot #tarteaucitron,\nhtml body #tarteaucitronRoot #tarteaucitron * {\n  box-sizing: border-box;\n}\n\n/* Le voile. La librairie le peint en gris tr\xe8s clair : le panneau plein \xe9cran\n   se confondait avec la page qu'il recouvre. */\nhtml body #tarteaucitronRoot #tarteaucitronBack {\n  background: rgba(16, 20, 28, 0.55) !important;\n}\n\n/* Le panneau devient une carte centr\xe9e, comme la pastille. En plein \xe9cran, un\n   aplat blanc de 1400 px portait un texte qui en occupe 600. */\nhtml body #tarteaucitronRoot #tarteaucitron {\n  /* Chaque dimension est reprise en !important : la librairie pose inset et\n     max-width ainsi, et sans cela seule la transform passait — la carte\n     partait alors d'un demi-\xe9cran vers le haut et la gauche. */\n  inset: auto !important;\n  top: 50% !important;\n  left: 50% !important;\n  /* La librairie a sa propre media query max-width: 768px, qui pose une marge\n     de 5 %. Entre 640 et 768 px — l'iPad en portrait — la carte partait de\n     38 px vers la droite et sortait de l'\xe9cran. */\n  margin: 0 !important;\n  transform: translate(-50%, -50%);\n  width: calc(100% - 3rem) !important;\n  max-width: 44rem !important;\n  height: auto !important;\n  max-height: 86vh !important;\n  /* JAMAIS de display en !important ici : la librairie ferme le panneau par un\n     style EN LIGNE (userInterface.css('tarteaucitron','display','none')), et\n     un !important de feuille bat un style en ligne. Le panneau restait donc\n     ouvert en permanence, sur toutes les pages. La mise en colonne est port\xe9e\n     par les deux r\xe8gles qui suivent, conditionn\xe9es \xe0 l'ouverture. */\n  flex-direction: column;\n  border-radius: 14px;\n  overflow: hidden;\n  box-shadow: 0 24px 64px -16px rgba(16, 20, 28, 0.45);\n}\n\nhtml body.tarteaucitron-modal-open #tarteaucitronRoot #tarteaucitron,\nhtml body #tarteaucitronRoot #tarteaucitron[style*=\"dis
1play: block\"],\nhtml body #tarteaucitronRoot #tarteaucitron[style*=\"display:block\"] {\n  display: flex !important;\n}\n\n/* Sur un t\xe9l\xe9phone, la carte reprend tout l'\xe9cran : marger une feuille qui\n   d\xe9file d\xe9j\xe0 ne gagne rien et co\xfbte deux lignes de contenu. */\n@media (max-width: 40rem) {\n  html body #tarteaucitronRoot #tarteaucitron {\n    inset: 0 !important;\n    transform: none;\n    width: 100% !important;\n    height: auto !important;\n    max-width: none !important;\n    max-height: none !important;\n    border-radius: 0;\n  }\n}\n\n/* \xab Fermer \xbb flottait au-dessus du panneau, hors de la carte. Il revient\n   dedans, en haut \xe0 droite, avec de quoi le viser au doigt et un fond opaque :\n   le contenu d\xe9file dessous. */\n/* \xab Fermer \xbb reste en ABSOLU, cal\xe9 dans le coin de la carte.\n   Le passer en \xe9l\xe9ment de flux paraissait plus propre — il aurait form\xe9 un\n   en-t\xeate au-dessus de la zone qui d\xe9file — mais la librairie le d\xe9cale de\n   30 px vers le haut par un chemin qui survit \xe0 position: static, si bien\n   qu'il sortait de la carte et que overflow: hidden n'en laissait qu'un\n   liser\xe9. Pos\xe9 en absolu avec des coordonn\xe9es explicites, le r\xe9sultat ne\n   d\xe9pend plus de ce que fait la librairie.\n   Fond opaque et ombre l\xe9g\xe8re : le contenu d\xe9file dessous, il faut qu'on lise\n   encore le mot. */\nhtml body #tarteaucitronRoot #tarteaucitronClosePanel {\n  position: absolute !important;\n  top: 0.5rem !important;\n  right: 0.5rem !important;\n  bottom: auto !important;\n  left: auto !important;\n  z-index: 3;\n  width: auto !important;\n  min-height: 2.25rem;\n  padding: 0 0.9rem !important;\n  margin: 0 !important;\n  display: flex !important;\n  align-items: center;\n  background: #fff !important;\n  color: #3a4048 !important;\n  border: 1px solid rgba(20, 24, 33, 0.14);\n  border-radius: 8px;\n  font-size: 0.8125rem !important;\n  text-decoration: none;\n  box-shadow: 0 1px 3px rgba(16, 20, 28, 0.08);\n}\nhtml body #tarteaucitronRoot #tarteaucitronClosePanel:hover {\n  color: #14181f;\n}\n\n/* La zone qui d\xe9file. La marge haute de la librairie servait \xe0 d\xe9gager le\n   bouton \xab Fermer \xbb ; c'est le rembourrage de la carte qui s'en charge. */\nhtml body #tarteaucitronRoot #tarteaucitronServices {\n  flex: 1;\n  margin: 0;\n  padding: 0;\n  overflow-y: auto;\n  background: #fff;\n}\n\n/* ── L'en-t\xeate de la carte ────────────────────────────────────────────── */\nhtml body #tarteaucitronRoot #tarteaucitronMainLineOffset {\n  margin: 0;\n  padding: 1.5rem 1.5rem 1.25rem !important;\n  border-bottom: 1px solid rgba(20, 24, 33, 0.12);\n  background: #fff;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronH1 {\n  display: block;\n  margin: 0 5.5rem 0.75rem 0 !important;\n  color: #14181f;\n  font-size: 1.25rem !important;\n  font-weight: 600;\n  line-height: 1.3;\n  text-align: left !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitronInfo {\n  width: auto !important;\n  margin: 0 0 1.15rem !important;\n  padding: 0;\n  border: 0;\n  color: #3a4048;\n  font-size: 0.9375rem !important;\n  line-height: 1.5;\n  text-align: left !important;\n}\n/* Deux sauts de ligne en dur s\xe9paraient le texte du lien : c'est une marge\n   qu'il faut, pas des lignes vides. */\nhtml body #tarteaucitronRoot #tarteaucitronInfo br {\n  display: none;\n}\nhtml body #tarteaucitronRoot #tarteaucitronInfo p {\n  margin: 0 0 0.6rem;\n}\n/* Le lien vers la politique : du texte soulign\xe9, comme dans la pastille, et\n   non un quatri\xe8me bouton qui p\xe8serait autant que les d\xe9cisions. */\nhtml body #tarteaucitronRoot #tarteaucitronPrivacyUrlDialog {\n  display: inline;\n  margin: 0;\n  padding: 0;\n  min-height: 0;\n  background: transparent !important;\n  color: #4a5158 !important;\n  border: 0;\n  font-size: 0.875rem !important;\n  text-decoration: underline;\n  text-underline-offset: 0.2em;\n}\nhtml body #tarteaucitronRoot #tarteaucitronPrivacyUrlDialog:hover {\n  
1color: #14181f !important;\n}\n\n/* ── Les lignes : le nom \xe0 gauche, la d\xe9cision \xe0 droite ───────────────── */\n/* Les lignes de SERVICE seulement, et non toutes les .tarteaucitronLine : la\n   ligne \xab Ce site n'utilise aucun cookie n\xe9cessitant votre consentement \xbb en\n   est une, que la librairie masque par un style EN LIGNE d\xe8s qu'il y a des\n   services. Un display !important pos\xe9 trop large la rouvrait, et le panneau\n   affirmait alors le contraire de ce qu'il venait de lister. */\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li {\n  display: flex !important;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 0.75rem 1.25rem;\n  margin: 0 !important;\n  padding: 1rem 1.5rem !important;\n  background: #fff;\n  border: 0;\n  border-top: 1px solid rgba(20, 24, 33, 0.08);\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronName {\n  flex: 1 1 14rem;\n  width: auto !important;\n  min-width: 0;\n  margin: 0 !important;\n  padding: 0;\n  text-align: left !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronH2,\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronH3 {\n  display: block;\n  margin: 0 0 0.2rem;\n  color: #14181f;\n  font-size: 0.9375rem !important;\n  font-weight: 600;\n  line-height: 1.35;\n}\n/* Le rang du haut regroupe les deux d\xe9cisions globales : son intitul\xe9 n'est\n   pas un service, il ne doit pas en avoir le poids. */\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronMainLineOffset .tarteaucitronName {\n  /* La librairie fait FLOTTER cet intitule a gauche : les deux decisions\n     globales venaient alors se coller contre lui, sans un pixel d'ecart, et\n     le libelle paraissait coupe par le bouton. Il reprend toute la largeur et\n     passe au-dessus. */\n  float: none !important;\n  width: 100% !important;\n  margin-bottom: 0.65rem;\n}\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronMainLineOffset .tarteaucitronAsk button {\n  /* A egalite : deux actions de meme rang ne se partagent pas 213 px contre\n     204 selon la longueur de leur libelle. */\n  flex: 1 1 0;\n  min-width: 0;\n}\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronMainLineOffset .tarteaucitronH2 {\n  font-size: 0.8125rem !important;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: #6b7280;\n}\n\n/* L'\xe9tat en toutes lettres : c'est le canal textuel qui remplace le glyphe. */\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronStatusInfo,\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronListCookies {\n  display: inline;\n  color: #6b7280;\n  font-size: 0.8125rem !important;\n  line-height: 1.45;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tacCurrentStatus {\n  display: inline-block !important;\n  width: auto !important;\n  padding: 0.05rem 0.4rem;\n  border-radius: 4px;\n  background: rgba(20, 24, 33, 0.08);\n  color: #14181f;\n  font-weight: 600;\n  text-transform: lowercase;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronReadmoreInfo,\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronReadmoreOfficial {\n  color: #4a5158;\n  font-size: 0.8125rem !important;\n  text-decoration: underline;\n  text-underline-offset: 0.2em;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronReadmoreSeparator {\n  color: rgba(20, 24, 33, 0.35);\n  font-size: 0.8125rem !important;\n}\n\n/* ── Autoriser / Interdire ────────────────────────────────────────────── */\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronAsk,\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronScrollbarAdjust {\n  float: none !important;\n  display: flex !important;\n  flex: 0 0 auto;\n  gap: 0.5rem;\n  width: auto !important;\n  margin: 0 !important;\n  padding: 0;\n  text-align: left !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronAsk button {\n  display: inline-flex !important;\n  align-items: center;\n  justify-content: center;\n  flex: 1 1 auto;\n  /* La librairie laisse ses boutons en content-box : sans cette ligne, le\n     rembourrage s'ajoute aux 44 px demand\xe9s et ils montent \xe0 64. M\xeame pi\xe8ge que\n     la carte de la pastille, plus haut. */\n  box-sizing: border-box;\n  width: auto !important;\n  min-width: 7rem;\n  min-height: 2.75rem;\n  margin: 0 !important;\n  padding: 0.55rem 0.9rem !important;\n  border-radius: 8px;\n  font-size: 0.875rem !important;\n  font-weight: 600;\n  line-height: 1.2;\n  /* Le repos est le M\xcaME pour les deux : cern\xe9, encre neutre. Aucune des deux\n     d\xe9cisions n'est sugg\xe9r\xe9e tant que le visiteur n'a pas choisi. */\n  background: transparent !important;\n  color: #14181f !important;\n  border: 1.5px solid rgba(20, 24, 33, 0.45) !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronAsk button:hover {\n  background: rgba(20, 24, 33, 0.05) !important;\n  border-color: #14181f !important;\n}\n/* ── Le couple d'une ligne de service est un SEGMENT\xc9 ─────────────────────\n   Premier essai : le choix actif \xe9tait simplement \xab plein \xbb et l'autre\n   \xab cern\xe9 \xbb. Illisible, et pour une raison de fond — \xab plein \xbb voulait alors\n   dire ACTION en haut du panneau (\xab Tout accepter \xbb) et \xc9TAT plus bas. Deux\n   sens pour un m\xeame signal, dans le m\xeame \xe9cran.\n\n   Les deux boutons sont donc enferm\xe9s dans un m\xeame cadre : on lit d'abord un\n   choix UNIQUE entre deux positions, et non deux boutons ind\xe9pendants. Et\n   l'\xe9cart entre les deux positions se joue sur trois canaux \xe0 la fois — fond,\n   contraste du texte, coche — au lieu du seul contour. */\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk {\n  gap: 0.25rem;\n  padding: 0.25rem !important;\n  background: rgba(20, 24, 33, 0.05);\n  border: 1px solid rgba(20, 24, 33, 0.14);\n  border-radius: 11px;\n}\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk button {\n  /* 40 px dans un cadre qui en fait 50 : c'est le BOUTON qu'on vise du doigt,\n     pas le cadre, et le rembourrage du segment\xe9 ne compte pas comme cible. */\n  min-height: 2.5rem;\n  padding: 0.45rem 0.85rem !important;\n  border: 0 !important;\n  border-radius: 8px;\n  background: transparent !important;\n  /* L'inactif est GRIS, pas encre : deux libell\xe9s de m\xeame contraste se valent\n     \xe0 l'oeil, et c'est pr\xe9cis\xe9ment ce qu'on ne veut pas dire ici. */\n  color: #6b7280 !important;\n  font-weight: 500;\n}\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk button:hover {\n  background: rgba(20, 24, 33, 0.07) !important;\n  color: #14181f !important;\n}\n/* Tant qu'aucune decision n'est enregistree, la librairie laisse les DEUX\n   positions non pressees (tarteaucitron.js l.1510) : le couple parait alors\n   eteint et l'on ne sait plus ce qui est charge. L'etat, lui, n'a pourtant\n   rien d'indetermine — rien n'est depose tant que le visiteur n'a pas accepte,\n   et la mention a gauche de la ligne ecrit deja \xab interdit \xbb. La position\n   Interdire prend donc la marque, pour que les deux canaux disent la meme\n   chose au lieu de se contredire.\n\n   Ce que cette regle ne fait PAS : enregistrer un choix. Aucun co
1okie de\n   consentement n'est ecrit, le bandeau reste affiche, et le premier clic du\n   visiteur reste son premier choix. */\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk button[aria-pressed=\"true\"] {\n  background: #14181f !important;\n  color: #fff !important;\n  font-weight: 600;\n  box-shadow: 0 1px 2px rgba(16, 20, 28, 0.3);\n}\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk:not(:has(button[aria-pressed=\"true\"])) .tarteaucitronDeny {\n  background: #14181f !important;\n  color: #fff !important;\n  font-weight: 600;\n  box-shadow: 0 1px 2px rgba(16, 20, 28, 0.3);\n}\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk button[aria-pressed=\"true\"]:hover {\n  background: #2a3038 !important;\n  color: #fff !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk:not(:has(button[aria-pressed=\"true\"])) .tarteaucitronDeny:hover {\n  background: #2a3038 !important;\n  color: #fff !important;\n}\n/* La coche du choix retenu, DESSIN\xc9E et non \xe9crite : un caract\xe8re serait lu\n   par certains lecteurs d'\xe9cran, qui annoncent d\xe9j\xe0 \xab activ\xe9 \xbb gr\xe2ce \xe0\n   aria-pressed. Elle ne s'adresse donc qu'\xe0 l'oeil. */\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk button[aria-pressed=\"true\"]::before {\n  content: \"\";\n  flex: 0 0 auto;\n  width: 0.3rem;\n  height: 0.55rem;\n  margin: -0.15rem 0.5rem 0 0;\n  border-right: 2px solid currentColor;\n  border-bottom: 2px solid currentColor;\n  transform: rotate(45deg);\n}\nhtml body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li .tarteaucitronAsk:not(:has(button[aria-pressed=\"true\"])) .tarteaucitronDeny::before {\n  content: \"\";\n  flex: 0 0 auto;\n  width: 0.3rem;\n  height: 0.55rem;\n  margin: -0.15rem 0.5rem 0 0;\n  border-right: 2px solid currentColor;\n  border-bottom: 2px solid currentColor;\n  transform: rotate(45deg);\n}\n/* Les deux d\xe9cisions globales sont des ACTIONS, pas un \xe9tat : elles gardent la\n   grammaire de la pastille — \xab Tout accepter \xbb plein, \xab Tout refuser \xbb cern\xe9. */\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronAllAllowed {\n  background: #14181f !important;\n  color: #fff !important;\n  border-color: #14181f !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronAllAllowed:hover {\n  background: #2a3038 !important;\n}\n/* Le glyphe de case \xe0 cocher : masqu\xe9. Il porte l'\xe9tat sur dix pixels, au fond\n   d'un bouton, alors que le remplissage et la mention \xab autoris\xe9 \xbb le disent\n   d\xe9j\xe0 — et il ajoute un carr\xe9 vide \xe0 c\xf4t\xe9 de chaque libell\xe9. */\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronCheck,\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronCross {\n  display: none !important;\n}\n\n/* ── Les rubriques ────────────────────────────────────────────────────── */\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronBorder,\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronBorder ul,\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronBorder li {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  background: transparent;\n  list-style: none;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronTitle {\n  margin: 0;\n  padding: 0;\n  background: transparent;\n  border-top: 1px solid rgba(20, 24, 33, 0.12);\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronTitle button {\n  display: flex !important;\n  align-items: center;\n  gap: 0.5rem;\n  width: 100% !important;\n  min-height: 2.75rem;\n  margin: 0 !important;\n  padding: 0.75rem 1.5rem;\n  background: rgba(20, 24, 33, 0.025);\n  color: #14181f;\n  border: 0;\n  font-size: 0.8125rem !important;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  text-align: left;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronTitle button:hover {\n  background: rgba(20, 24, 33, 0.06);\n}\n/* Un chevron qui pivote, \xe0 la place du \xab + \xbb que la librairie laisse fig\xe9 quel\n   que soit l'\xe9tat du repli. */\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronPlus {\n  display: none !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .catToggleBtn::after {\n  
1content: \"\";\n  width: 0.45rem;\n  height: 0.45rem;\n  margin-left: auto;\n  border-right: 1.5px solid rgba(20, 24, 33, 0.55);\n  border-bottom: 1.5px solid rgba(20, 24, 33, 0.55);\n  transform: rotate(45deg) translate(-0.1em, -0.1em);\n  transition: transform 0.15s ease;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .catToggleBtn[aria-expanded=\"true\"]::after {\n  transform: rotate(-135deg) translate(-0.15em, -0.15em);\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronInfoBox,\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronDetails {\n  /* La librairie pose ce texte en absolu sur 270 px : ouvrir une rubrique le\n     couchait PAR-DESSUS ses propres services. Il reprend le flux. */\n  position: static !important;\n  width: auto !important;\n  max-width: none !important;\n  margin: 0;\n  padding: 0.85rem 1.5rem;\n  background: rgba(20, 24, 33, 0.025);\n  color: #3a4048;\n  font-size: 0.8125rem !important;\n  line-height: 1.5;\n  text-align: left;\n}\n\n/* Le logo de cr\xe9dit de la librairie : affich\xe9 en pleine largeur et sans marge,\n   il passe pour un bandeau cass\xe9 sous le pied du panneau. On le garde — c'est\n   l'attribution d'un projet libre — mais \xe0 la taille d'un cr\xe9dit. */\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronSelfLink {\n  display: block;\n  padding: 0.85rem;\n  background: rgba(20, 24, 33, 0.025);\n  border-top: 1px solid rgba(20, 24, 33, 0.08);\n  text-align: center;\n}\nhtml body #tarteaucitronRoot #tarteaucitron .tarteaucitronSelfLink img {\n  height: 1rem;\n  width: auto;\n  vertical-align: middle;\n  opacity: 0.7;\n}\n\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronSave {\n  /* La librairie range le pied DANS la zone qui defile : sur telephone,\n     \xab Enregistrer \xbb se trouvait sous 350 px de liste. Il reste colle au bas de\n     la carte, donc toujours a portee. */\n  position: sticky;\n  bottom: 0;\n  z-index: 2;\n  padding: 1rem 1.5rem !important;\n  border-top: 1px solid rgba(20, 24, 33, 0.12);\n  background: #fff;\n  text-align: right !important;\n}\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronSaveButton {\n  box-sizing: border-box;\n  min-width: 10rem;\n  min-height: 2.75rem;\n  width: auto !important;\n  margin: 0 !important;\n  padding: 0.55rem 1.25rem !important;\n  border-radius: 8px;\n  background: #14181f !important;\n  color: #fff !important;\n  border: 1.5px solid #14181f !important;\n  font-size: 0.875rem !important;\n  font-weight: 600;\n}\nhtml body #tarteaucitronRoot #tarteaucitron #tarteaucitronSaveButton:hover {\n  background: #2a3038 !important;\n}\n\n/* Le contour de focus, que la feuille livr\xe9e retire : au clavier, on ne savait\n   plus o\xf9 l'on \xe9tait — dans une liste de quinze services, c'est perdu. */\nhtml body #tarteaucitronRoot #tarteaucitron button:focus-visible {\n  outline: 2px solid #14181f;\n  outline-offset: 2px;\n}\n\n/* Sous 34rem, le nom passe au-dessus et les deux d\xe9cisions se partagent la\n   largeur : c\xf4te \xe0 c\xf4te elles restent un couple, l\xe0 o\xf9 deux boutons pleine\n   largeur empil\xe9s se lisent comme deux rubriques. */\n@media (max-width: 34rem) {\n  html body #tarteaucitronRoot #tarteaucitron [id^=\"tarteaucitronServices_\"] > li {\n    padding: 0.9rem 1.15rem !important;\n  }\n  html body #tarteaucitronRoot #tarteaucitron .tarteaucitronName {\n    flex: 1 1 100%;\n  }\n  html body #tarteaucitronRoot #tarteaucitron .tarteaucitronAsk {\n    flex: 1 1 100%;\n  }\n  html body #tarteaucitronRoot #tarteaucitron .tarteaucitronAsk button {\n    min-width: 0;\n    flex: 1 1 0;\n  }\n  html body #tarteaucitronRoot #tarteaucitron #tarteaucitronMainLineOffset {\n    padding: 1.25rem 1.15rem 1rem !important;\n  }\n  html body #tarteaucitronRoot #tarteaucitron #tarteaucitronSave {\n    padding: 0.9rem 1.15rem !important;\n  }\n  html body #tarteaucitronRoot #tarteaucitron #tarteaucitronSaveButton {\n    width: 100% !important;\n  }\n  html body #tarteaucitronRoot #tarteaucitron .tarteaucitronTitle button,\n  html body #tarteaucitronRoot #tarteaucitron .tarteaucitronInfoBox,\n  html body #tarteaucitronRoot #tarteaucitron .tarteaucitronDetails {\n    padding-left: 1.15rem;\n    padding-right: 1.15rem;\n  }\n}\n".trim(),i={privacyUrl:"/politique-de-confidentialite",bodyPosition:"bottom",hashtag:"#tarteaucitron",cookieName:"tarteaucitron",orientation:"popup",groupServices:!1,showDetail
1sOnClick:!0,serviceDefaultState:"wait",showAlertSmall:!1,cookieslist:!1,cookieslistEmbed:!1,showIcon:!1,iconPosition:"BottomLeft",adblocker:!1,DenyAllCta:!0,AcceptAllCta:!0,highPrivacy:!0,alwaysNeedConsent:!1,handleBrowserDNTRequest:!1,removeCredit:!1,moreInfoLink:!0,useExternalCss:!1,useExternalJs:!1,mandatory:!0,mandatoryCta:!0,closePopup:!1,googleConsentMode:!1,bingConsentMode:!1,pianoConsentMode:!1,pianoConsentModeEssential:!1,softConsentMode:!1,dataLayer:!1,serverSide:!1,partnersList:!1},l={metaPixel:["metaPixelId"],googleAdsId:["adsId","gadsId"]};function u(t){if(Array.isArray(t)){let e=t.map(u).filter(Boolean);return e.length?e:null}if("number"==typeof t)return String(t);if("string"!=typeof t)return t||null;let e=t.trim();return e&&"null"!==e&&"undefined"!==e?e:null}function s(t,e){for(let n of[e,...l[e]||[]]){let e=u(t[n]);if(e)return e}return null}let c={HOME_PAGE:null,SEARCH:"hs",PRODUCT:"hpr",SHOPPING_CART:"hcart",CONVERSION:"hc",TRACKING:null};function d(t,e){let n=[].concat(e.script||e.scripts||[]).filter(Boolean);return{key:t,type:"other",name:t,uri:"",needConsent:!0,cookies:[],fallback(){},...e,js:"function"==typeof e.js?e.js:()=>{for(let t of n)window.tarteaucitron.addScript(t)}}}var m=n(48667),p=n(39638),b=function(t){let{expireDays:e,customText:n,css:l="",onInit:b}=t;return!function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:183,e=Number(t);window.tarteaucitronExpireInDay=!0,window.tarteaucitronForceExpire=Number.isFinite(e)&&e>0&&e<365?e:183}(e),(0,p.d4)(()=>{!function(){if("undefined"==typeof document||window.__thorDefilementConsentement)return;window.__thorDefilementConsentement=!0;let t=t=>{var e;let n=t.target;(null==n?void 0:null===(e=n.closest)||void 0===e?void 0:e.call(n,"#tarteaucitronRoot"))&&t.stopPropagation()};for(let e of["wheel","touchstart","touchmove"])document.addEventListener(e,t,{capture:!0,passive:!1})}()},[]),(0,p.d4)(()=>{if("undefined"==typeof MutationObserver)return;let t=()=>{let t=document.getElementById("tarteaucitronRoot");t?window.__tarteaucitronRoot=t:window.__tarteaucitronRoot&&!window.__tarteaucitronRoot.isConnected&&document.body.appendChild(window.__tarteaucitronRoot);let e=document.documentElement,n=e.style.getPropertyValue("--tacTitleBanner");n?window.__tacTitleBanner=n:window.__tacTitleBanner&&e.style.setProperty("--tacTitleBanner",window.__tacTitleBanner)};t();let e=new MutationObserver(t);return e.observe(document.body,{childList:!0}),e.observe(document.documentElement,{attributes:!0,attributeFilter:["style"]}),()=>e.disconnect()},[]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(m.default,{src:"/js/tarteaucitron/tarteaucitron.min.js",strategy:"afterInteractive",onReady:()=>{if(!window.tarteaucitron||window.__rgpdInitialised||function(){if(new URLSearchParams(window.location.search).has("__thorEditor"))return!0;try{return window.parent!==window&&window.parent.location.pathname.startsWith("/admin")}catch(t){return!1}}())return;window.__rgpdInitialised=!0,function(){if(!window.__thorHistoryEtatObjet)for(let t of(window.__thorHistoryEtatObjet=!0,["pushState","replaceState"])){let e=window.history[t].bind(window.history);window.history[t]=(t,n,r)=>e(t&&"object"==typeof t?t:{},n,r)}}(),function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if("undefined"==typeof document)return;let e=(document.documentElement.lang||"").toLowerCase().startsWith("fr");(e||t)&&(window.tarteaucitronCustomText={...window.tarteaucitronCustomText||{},...e?a:{},...t||{}})}(n);let e=window.tarteaucitron,r=function(){var t,e,n,r,a;let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},l={...i,...o.config||{}};for(let t of Object.keys(i))void 0!==o[t]&&(l[t]=o[t]);let u=null!==(n=o.readmoreLink)&&void 0!==n?n:null===(t=o.config)||void 0===t?void 0:t.readmoreLink;l.readmoreLink=void 0!==u?u:l.privacyUrl?"".concat(l.privacyUrl,"#cookies"):"";let s=null!==(r=o.cookieDomain)&&void 0!==r?r:null===(e=o.config)||void 0===e?void 0:e.cookieDomain;return l.cookieDomain=void 0!==s?s:String((null!==(a=o.baseDomain)&&void 0!==a?a:"www.perla-di-mare.fr")||"").trim().replace(/^https?:\/\//,"").replace(/[/:].*$/,""),l}(t);r.cookieDomain=function(t){let e=String(t||"").replace(/^\./,"");if(!e)return"";let n=window.location.hostname;return n===e||n.endsWith(".".concat(e))?t:""}(r.cookieDomain),e.init(r);let{user:o,jobs:l,services:m}=function(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n={},r=[],a={},o=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(let[t,r]of Object.entries(e))null!=r&&(n[t]=r);r.includes(t)||r.push(t)},i=s(e,"gaId");Array.isArray(i)&&i.length>1?o("multiplegtag",{multiplegtagUa:i}):i&&o("gtag",{gtagUa:[].concat(i)[0],gtagMore:e.gaMore});let l=s(e,"gtmId");l&&o("googletagmanager",{googletagmanagerId:l});let m=s(e,"googleAdsId");m&&o("googleads",{googleadsId:m,googleadsMore:e.googleAdsMore});let p=s(e,"metaPixel");p&&o("facebookpixel",{facebookpixelId:p,facebookpixelMore:e.metaPixelMore});let b=s(e,"tiktokPixel");b&&o("tiktok",{tiktokId:b,tiktokMore:e.tiktokMore});let g=s(e,"pinterestTagId");g&&o("pinterestpixel",{pinterestpixelId:g});let h=s(e,"linkedinPartnerId");h&&o("linkedininsighttag",{linkedininsighttag:h});let f=s(e,"snapchatPixel");f&&o("snapchat",{snapchatId:f,snapchatMore:e.snapchatMore});let x=s(e,"bingAdsId");x&&o("bingads",{bingadsID:x,bingadsMore:e.bingAdsMore});let y=s(e,"hotjarId");y&&o("hotjar",{hotjarId:y,HotjarSv:null!==(t=e.hotjarVersion)&&void 0!==t?t:6});let v=s(e,"clarityId");v&&o("clarity",{clarity:v});let w=s(e,"matomoTagManagerUrl");w&&o("matomotm",{matomotmUrl:w});let R=e.matomo;u(null==R?void 0:R.id)&&u(null==R?void 0:R.host)&&o("matomo",{matomoId:u(R.id),matomoHost:u(R.host)});let _=function(t){var e,n,r,a,o,i,l,s;let c=t.sojern||{},d=u(null!==(n=null!==(e=c.propertyId)&&void 0!==e?e:c.hpid)&&void 0!==n?n:t.sojernPropertyId);return d?{hpid:d,hpr:null!==(o=null!==(a=null!==(r=c.propertyName)&&void 0!==r?r:c.hpr)&&void 0!==a?a:t.sojernPropertyName)&&void 0!==o?o:"",pt:null!==(s=null!==(l=null!==(i=c.pageType)&&void 0!==i?i:c.pt)&&void 0!==l?l:t.sojernPageType)&&void 0!==s?s:"TRACKING"}:null}(e);_&&(a.sojern={key:"sojern",type:"ads",name:"Sojern",uri:"https://www.sojern.com/privacy/product-privacy-policy/",needConsent:!0,cookies:["sjrn_params"],js(){window.tarteaucitron.addScript("https://static.sojern.com/utils/sjrn_autocx.js","",()=>{let t={hpr:_.hpr,hpid:_.hpid,sha256_eml:"",sha1_eml:"",md5_eml:"",ccid:"",pt:_.pt};t.et=c[t.pt]||"";let e=Object.entries(t={...window.sjrn_params||{},...t}).map(t=>{let[e,n]=t;return"".concat(e,"=").concat(encodeURIComponent(null!=n?n:""))}).join("&"),n=document.createElement("iframe");n.setAttribute("style","height:0; width:0; display:none;"),n.src="https://static.sojern.com/cip/c/273.html?f_v=cp_v3_js&p_v=1&".concat(e),(document.head||document.body).appendChild(n)})},fallback(){}},o("sojern"));let k=s(e,"thnSrc");for(let[t,n]of(k&&(a.thehotelsnetwork=d("thehotelsnetwork",{type:"api",name:"The Hotels Network",uri:"https://thehotelsnetwork.com/en/privacy-policy/",script:k}),o("thehotelsnetwork")),Object.entries(e.services||{})))n&&(a[t]=d(t,n),o(t));for(let t of[].concat(e.jobs||[]))t&&o(t);return Object.assign(n,e.user||{}),{user:n,jobs:r,services:a}}(t);if(Object.assign(e.user,o),Object.assign(e.services,m),l.length)for(let t of(e.job=e.job||[],l))e.job.push(t);r.googleConsentMode&&o.googletagmanagerId&&function(){let t=t=>()=>{"function"==typeof window.tac_gtag&&window.tac_gtag("consent","update",{analytics_storage:t})};document.addEventListener("googletagmanager_allowed",t("granted")),document.addEventListener("googletagmanager_disallowed",t("denied"))}(),"function"==typeof b&&b(e)}}),(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:l?"".concat(o,"\n").concat(l):o}})]})}},19568:function(){},39590:function(t){t.exports={style:{fontFamily:"'__Lato_8fb32a', '__Lato_Fallback_8fb32a'",fontStyle:"normal"},className:"__className_8fb32a",variable:"__variable_8fb32a"}},30202:function(t){t.exports={style:{fontFamily:"'__Open_Sans_2fad4c', '__Open_Sans_Fallback_2fad4c'",fontStyle:"normal"},className:"__className_2fad4c",variable:"__variable_2fad4c"}},36534:function(t){t.exports={style:{fontFamily:"'__Agrandir_86c5d5', '__Agrandir_Fallback_86c5d5'",fontWeight:300,fontStyle:"normal"},className:"__className_86c5d5",variable:"__variable_86c5d5"}},92601:function(t){t.exports={style:{fontFamily:"'__AwesomeSerif_59bb62', '__AwesomeSerif_Fallback_59bb62'"},className:"__className_59bb62",variable:"__variable_59bb62"}}},function(t){t.O(0,[3440,9774,1744],function(){return t(t.s=4245)}),_N_E=t.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.