/* Recommendations: archive, article insert and cards share one responsive system. */
body.page-place-recommendations {
  --place-page-rgb:230,238,255;
  --place-card:rgba(255,255,255,.72);
  --place-card-strong:rgba(255,255,255,.9);
  --place-card-shadow:0 18px 50px rgba(27,58,116,.09);
  background:rgb(var(--place-page-rgb));
}
body.page-place-recommendations.theme-morning {
  --place-page-rgb:255,227,238;
  --place-card:rgba(255,250,248,.76);
  --place-card-strong:rgba(255,253,251,.92);
  --place-card-shadow:0 18px 50px rgba(122,57,78,.11);
}
body.page-place-recommendations.theme-night {
  --place-page-rgb:7,17,31;
  --place-card:rgba(15,24,41,.86);
  --place-card-strong:rgba(16,26,45,.94);
  --place-card-shadow:0 22px 54px rgba(0,0,0,.3);
}
/* One continuous editorial canvas in all three modes. The page-scoped selector
   wins over the older shared morning gradient without adding cascade debt. */
body.index2-page.page-template.page-place-recommendations,
body.index2-page.page-template.page-place-recommendations .page-main-subpage,
body.index2-page.page-template.page-place-recommendations .subpage-stage,
body.index2-page.page-template.page-place-recommendations .subpage-shell,
body.index2-page.page-template.page-place-recommendations .place-directory-content-stage,
body.index2-page.page-template.page-place-recommendations .place-directory-card,
body.index2-page.page-template.page-place-recommendations .place-directory-doc {
  background-color:rgb(var(--place-page-rgb));
  background-image:none;
}
body.page-place-recommendations .page-main-subpage {
  min-width:0;
}
body.page-place-recommendations .place-directory-page-hero,
html body.index2-page.page-template.page-template-basic.page-place-recommendations:not(.page-admin):not(.page-article-detail):not(.page-discoveries-detail) .page-main-subpage .template-hero.place-directory-page-hero {
  max-width:680px;
  padding:0;
  margin-bottom:0;
}
body.page-place-recommendations .place-directory-page-hero h1 {
  margin:0;
  min-width:0;
  font-size:clamp(3.8rem,5.2vw,5.35rem);
  overflow-wrap:normal;
  word-break:normal;
  hyphens:none;
}
body.page-place-recommendations .place-directory-page-hero .lead {
  max-width:70ch;
  margin-top:clamp(18px,2.2vw,28px);
}

/* The archive keeps the same editorial H1 as the other pages. Below it, the
   map follows the 1/3–2/3 composition used by the itinerary and publications:
   quick category controls on the left, the large globe on the right. */
.place-directory-hero-layout {
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:clamp(19px,2.5vw,32px);
  min-width:0;
  padding-block:clamp(8px,2vw,22px);
}
.place-directory-map-layout {
  display:grid;
  grid-template-columns:minmax(230px,1fr) minmax(0,2fr);
  align-items:center;
  gap:clamp(24px,3.2vw,44px);
  min-width:0;
}
.place-directory-globe-tools {
  display:grid;
  align-content:center;
  gap:clamp(18px,2vw,26px);
  min-width:0;
}
.place-directory-globe {
  display:flex;
  justify-content:center;
  min-width:0;
}
.place-directory-map-card,
body.index2-page .place-directory-map-card {
  position:relative;
  width:100%;
  max-width:850px;
  margin-inline:auto;
}
.place-directory-globe-frame {
  position:relative;
  width:100%;
  max-width:850px;
  aspect-ratio:1;
  border-radius:50%;
  background:
    radial-gradient(circle at 33% 28%,rgba(255,255,255,.95),rgba(255,255,255,.2) 38%,transparent 58%),
    radial-gradient(circle,rgba(var(--accent-rgb),.1),rgba(var(--accent-rgb),.025) 64%,transparent 65%);
  box-shadow:0 26px 54px rgba(var(--accent-rgb),.15),0 0 0 1px rgba(var(--ink-rgb),.1);
  overflow:visible;
  isolation:isolate;
}
.place-directory-globe-frame.is-zoomed {
  overflow:hidden;
}
.place-directory-globe-zoom {
  z-index:9;
}
/* Les boutons de zoom du globe doivent rester identiques a la mappemonde des publications (30x30, coins arrondis 8px). Sans cela, la regle generique `.subpage-shell button` (min-height:40px;border-radius:999px) les transforme en pilules. */
body.index2-page .place-directory-globe-zoom .globe-zoom-btn {
  min-height:30px!important;
  height:30px;
  border-radius:8px!important;
}
.theme-morning .place-directory-globe-frame {
  background:
    radial-gradient(circle at 33% 28%,rgba(255,255,255,.88),rgba(255,248,245,.18) 38%,transparent 58%),
    radial-gradient(circle,rgba(var(--accent-rgb),.12),rgba(var(--accent-rgb),.03) 64%,transparent 65%);
  box-shadow:0 28px 80px rgba(122,57,78,.12);
}
.theme-night .place-directory-globe-frame {
  background:
    radial-gradient(circle at 33% 28%,rgba(255,255,255,.08),transparent 40%),
    radial-gradient(circle,rgba(246,215,122,.1),rgba(3,10,22,.02) 65%,transparent 66%);
  box-shadow:0 30px 90px rgba(0,0,0,.35);
}
.place-directory-globe-canvas {
  position:absolute;
  inset:0;
  display:block;
  width:100%;
  height:100%;
  cursor:grab;
  touch-action:none;
}
/* Le JS dimensionne le canvas plus grand que le cadre (canvasSize = taille + 36px)
   et le positionne a left/top:-18px pour laisser deborder les marqueurs. Le reset
   global sur les canvas d'index-public.css (max-width 100 pourcent, prioritaire)
   plafonnait la largeur a celle du cadre mais pas la hauteur : le canvas devenait
   non carre et le globe se retrouvait decale de ~18px vers la gauche. Ce selecteur
   egale la specificite du reset (charge apres lui) pour lever ce plafond. */
body.index2-page.page-template.page-place-recommendations .place-directory-globe-frame canvas.place-directory-globe-canvas {
  max-width:none!important;
}
.place-directory-globe-canvas:active {
  cursor:grabbing;
}
.place-directory-globe-empty {
  position:absolute;
  inset:50% auto auto 50%;
  z-index:2;
  width:min(72%,260px);
  margin:0;
  transform:translate(-50%,-50%);
  color:var(--ink-soft);
  font-size:.86rem;
  line-height:1.5;
  text-align:center;
}
.place-directory-globe-legend {
  display:grid;
  grid-template-columns:minmax(0,1fr);
  justify-items:start;
  gap:8px;
  width:100%;
}
.place-directory-globe-legend:empty {
  min-height:0;
}
.place-directory-globe-legend button {
  display:grid;
  grid-template-columns:30px auto auto;
  align-items:center;
  gap:9px;
  width:auto;
  max-width:100%;
  min-height:44px;
  padding:5px 12px 5px 6px;
  border:1px solid var(--line);
  border-radius:13px;
  background:transparent;
  color:var(--ink-soft);
  font:750 .63rem/1.2 var(--font-ui);
  letter-spacing:.055em;
  text-align:left;
  text-transform:uppercase;
  cursor:pointer;
  transition:border-color .18s ease,background .18s ease,transform .18s ease;
}
.place-directory-globe-legend button:hover,
.place-directory-globe-legend button:focus-visible {
  border-color:rgba(var(--accent-rgb),.42);
  background:rgba(var(--accent-rgb),.06);
  transform:translateX(2px);
}
.place-directory-globe-legend button[aria-pressed="true"] {
  border-color:rgba(var(--accent-rgb),.48);
  background:rgba(var(--accent-rgb),.1);
  color:var(--ink);
}
.place-directory-globe-legend i {
  display:grid;
  place-items:center;
  width:30px;
  height:30px;
  border-radius:50%;
  background:rgba(var(--accent-rgb),.12);
  color:var(--accent);
}
.place-directory-globe-legend svg {
  width:16px;
  height:16px;
  fill:none;
  stroke:currentColor;
  stroke-width:1.75;
  stroke-linecap:round;
  stroke-linejoin:round;
}
.place-directory-globe-legend b {
  display:grid;
  place-items:center;
  min-width:25px;
  height:25px;
  border-radius:999px;
  background:var(--place-card-strong);
  color:var(--ink);
  font-size:.66rem;
}
.place-directory-globe-hint {
  max-width:34ch;
  margin:0;
  color:var(--ink-soft);
  font-size:.8rem;
  line-height:1.55;
  text-align:left;
}
.theme-night .place-directory-globe-legend i {
  color:var(--color-night-accent);
  background:rgba(246,215,122,.12);
}
body.page-place-recommendations .place-directory-filters [hidden] {
  display:none;
}

/* Filters, globe and results share one continuous page background. */
.place-directory-content-stage {
  min-width:0;
  background:rgb(var(--place-page-rgb));
}
.place-directory-content-stage .subpage-shell {
  width:min(1260px,calc(100% - (var(--shell-pad) * 2)));
  max-width:1260px;
  margin-inline:auto;
}
body.page-place-recommendations .place-directory-card,
body.page-place-recommendations .place-directory-doc {
  width:100%;
  min-width:0;
  margin:0;
  padding:0;
  border:0;
  border-radius:0;
  background:transparent;
  box-shadow:none;
}
.place-directory-doc {
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:clamp(30px,4vw,46px);
}
body.index2-page.page-template.page-place-recommendations .place-directory-doc {
  padding:0;
}
.place-directory-filters-wrap {
  position:relative;
  z-index:12;
}
body.page-place-recommendations .place-directory-filters {
  display:grid;
  gap:16px;
  padding:0;
  border:0;
  border-radius:0;
  background:transparent;
  box-shadow:none;
}
body.page-place-recommendations .place-directory-filter-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding-bottom:14px;
  border-bottom:1px solid var(--line);
}
.place-directory-filter-actions {
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:10px;
}
body.page-place-recommendations .place-directory-filter-head output {
  color:var(--ink);
  font-family:var(--font-ui);
  font-size:.76rem;
  font-weight:750;
  letter-spacing:.07em;
  text-transform:uppercase;
}
body.page-place-recommendations .place-directory-filter-head button {
  min-height:40px;
  padding:0 17px;
  border:1px solid var(--line);
  border-radius:999px;
  background:transparent;
  color:var(--ink);
  font:750 .7rem/1 var(--font-ui);
  letter-spacing:.06em;
  text-transform:uppercase;
  cursor:pointer;
}
body.page-place-recommendations .place-directory-filter-head button[aria-expanded="true"] {
  border-color:rgba(var(--accent-rgb),.48);
  background:rgba(var(--accent-rgb),.08);
}
body.page-place-recommendations .place-directory-filter-primary {
  display:grid;
  grid-template-columns:minmax(280px,1.5fr) repeat(2,minmax(190px,.75fr));
  gap:14px;
}
body.page-place-recommendations .place-directory-filter-secondary {
  display:grid;
  grid-template-columns:minmax(190px,calc((100% - 28px) / 3));
  gap:14px;
}
body.page-place-recommendations .place-directory-filters label {
  display:grid;
  gap:8px;
  min-width:0;
  color:var(--ink-soft);
  font-family:var(--font-ui);
  font-size:.68rem;
  font-weight:750;
  letter-spacing:.08em;
  text-transform:uppercase;
}
body.page-place-recommendations .place-directory-filters select,
body.page-place-recommendations .place-directory-filters input[type="search"] {
  box-sizing:border-box;
  width:100%;
  min-height:48px;
  padding:0 42px 0 15px;
  border:1px solid var(--line);
  border-radius:14px;
  background:var(--place-card-strong);
  color:var(--ink);
  font:650 .86rem/1 var(--font-body);
}
body.page-place-recommendations .place-directory-filters select {
  cursor:pointer;
  /* Fleche native remplacee par un chevron place avec une vraie marge a droite
     (la fleche native se colle au bord et ignore le padding-right). */
  appearance:none;
  -webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1.25 1.5 6 6.25l4.75-4.75' stroke='%230f172a' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 16px center;
  background-size:12px 8px;
}
body.page-place-recommendations.theme-night .place-directory-filters select {
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1.25 1.5 6 6.25l4.75-4.75' stroke='%23f4f7ff' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
body.page-place-recommendations .place-directory-filters input[type="search"] {
  padding-right:15px;
  appearance:none;
}
body.page-place-recommendations .place-directory-filters input[type="search"]::placeholder {
  color:var(--ink-soft);
  opacity:.7;
}
body.page-place-recommendations .place-directory-filters :is(select,input[type="search"]):focus-visible {
  outline:2px solid rgba(var(--accent-rgb),.42);
  outline-offset:2px;
}
.place-directory-results,
.place-directory-grid {
  width:100%;
  min-width:0;
}
.place-directory-results {
  display:block;
}
.place-directory-grid,
.article-place-grid {
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));
  gap:clamp(16px,2vw,24px);
}
.place-directory-grid[data-place-count="1"],
.article-place-grid[data-place-count="1"] {
  grid-template-columns:minmax(0,1fr);
}
.place-directory-grid[data-place-count="2"],
.article-place-grid[data-place-count="2"] {
  grid-template-columns:repeat(2,minmax(0,1fr));
}
.place-directory-grid[data-place-count="3"],
.article-place-grid[data-place-count="3"] {
  grid-template-columns:repeat(3,minmax(0,1fr));
}
.place-directory-grid[data-place-count="4"],
.article-place-grid[data-place-count="4"] {
  grid-template-columns:repeat(4,minmax(0,1fr));
}
body.page-place-recommendations .place-directory-results .place-directory-grid,
body.page-place-recommendations .place-directory-results .place-directory-grid[data-place-count] {
  grid-template-columns:minmax(0,1fr);
}
.place-directory-empty-wrap {
  min-width:0;
}
.place-directory-empty {
  margin:0;
  padding:42px 24px;
  border:1px dashed var(--line);
  border-radius:20px;
  color:var(--ink-soft);
  text-align:center;
}

/* One card language for one, two, three or four places, with or without media. */
.place-rec-card {
  position:relative;
  display:grid;
  grid-template-rows:auto minmax(0,1fr);
  min-width:0;
  height:100%;
  border:1px solid var(--line);
  border-radius:clamp(17px,2vw,23px);
  background:var(--place-card,var(--surface-strong));
  overflow:hidden;
  box-shadow:var(--place-card-shadow,0 14px 34px rgba(var(--ink-rgb),.065));
}
.place-rec-card::before,
.place-rec-card::after {
  content:none;
}
.place-rec-card.is-globe-active {
  border-color:rgba(var(--accent-rgb),.56);
  box-shadow:0 20px 48px rgba(var(--accent-rgb),.14);
}
.place-rec-card.is-globe-active:focus {
  outline:2px solid rgba(var(--accent-rgb),.4);
  outline-offset:4px;
}
.place-rec-media {
  position:relative;
  display:block;
  align-self:stretch;
  justify-self:stretch;
  box-sizing:border-box;
  width:100%;
  margin:0;
  aspect-ratio:16/10;
  overflow:hidden;
  background:rgba(var(--accent-rgb),.07);
}
.place-rec-card .place-rec-media picture,
.place-rec-card .place-rec-media img {
  position:absolute;
  inset:0;
  display:block;
  width:100%;
  min-width:100%;
  height:100%;
  min-height:100%;
}
.place-rec-card .place-rec-media img {
  object-fit:cover;
  object-position:center center;
  transform:scale(var(--place-media-scale,1));
  transform-origin:center center;
  transition:transform .32s ease;
}
/* ResponsiveImage has its own picture rule. These page-scoped selectors make
   both that source and runtime-injected plain images fill the entire media
   column on the archive and inside articles, without distortion. */
html body.index2-page .place-rec-card > .place-rec-media > picture.ms-responsive-picture,
html body.index2-page .place-rec-card > .place-rec-media > img {
  position:absolute;
  inset:0;
  display:block;
  box-sizing:border-box;
  width:100%;
  max-width:none;
  height:100%;
  max-height:none;
  margin:0;
}
html body.index2-page .place-rec-card > .place-rec-media > picture.ms-responsive-picture > img {
  position:absolute;
  inset:0;
  display:block;
  box-sizing:border-box;
  width:100%;
  max-width:none;
  height:100%;
  max-height:none;
  margin:0;
  object-fit:cover;
  object-position:center center;
}
.place-rec-content {
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  gap:clamp(16px,2vw,22px);
  min-width:0;
  padding:clamp(24px,2.6vw,32px);
}
.place-rec-heading,
.place-rec-details {
  display:grid;
  gap:clamp(12px,1.5vw,17px);
  min-width:0;
}
.place-rec-details:empty {
  display:none;
}
.place-rec-meta {
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:8px 14px;
  flex-wrap:wrap;
  min-width:0;
}
.place-rec-meta:empty {
  display:none;
}
.place-rec-category,
.place-rec-location {
  font-family:var(--font-ui);
  font-size:.69rem;
  font-weight:750;
  line-height:1.35;
  letter-spacing:.075em;
  text-transform:uppercase;
}
.place-rec-category {
  color:var(--accent);
}
.place-rec-location {
  color:var(--ink-soft);
}
.place-rec-card h3 {
  margin:0;
  color:var(--ink);
  font-family:var(--font-ui);
  font-size:clamp(1.3rem,2vw,1.75rem);
  line-height:1.08;
  letter-spacing:-.025em;
  overflow-wrap:anywhere;
}
.place-rec-description,
.place-rec-card address {
  margin:0;
  color:var(--ink-soft);
  font-style:normal;
  line-height:1.64;
  overflow-wrap:anywhere;
}
.place-directory-grid .place-rec-description {
  display:block;
  overflow:visible;
}
.place-rec-card address {
  padding-top:14px;
  border-top:1px solid var(--line);
  font-size:.86rem;
}
.place-rec-actions {
  display:flex;
  flex-wrap:wrap;
  gap:9px;
  margin-top:auto;
  padding-top:4px;
}
.place-rec-action {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  min-height:40px;
  padding:10px 14px;
  border:1px solid var(--line);
  border-radius:999px;
  color:var(--ink);
  font:750 .68rem/1 var(--font-ui);
  letter-spacing:.055em;
  text-align:center;
  text-transform:uppercase;
  transition:transform .18s ease,background .18s ease,filter .18s ease;
}
.place-rec-action:hover,
.place-rec-action:focus-visible {
  transform:translateY(-1px);
  background:var(--surface);
}
.place-rec-action--primary {
  border-color:transparent;
  background:var(--accent);
  color:#fff;
}
.place-rec-action--primary:hover,
.place-rec-action--primary:focus-visible {
  background:var(--accent);
  color:#fff;
  filter:brightness(1.05);
}
.theme-night .place-rec-card {
  background:rgba(15,24,41,.9);
}
/* Le filtrage (place-recommendations-directory.js) masque les cartes via l'attribut
   [hidden], mais `.place-rec-card{display:grid}` neutralisait le masquage de [hidden]
   (les cartes filtrees restaient visibles). Le selecteur avec [hidden] est plus
   specifique que `.place-rec-card` : il retablit le masquage sans surcharge forte. */
.place-rec-card[hidden] {
  display:none;
}
.theme-night .place-rec-action--primary,
.theme-night .article-place-recommendations-all {
  color:#111827;
  background:var(--color-night-accent);
}

/* Article insert: same cards, a compact editorial frame, before the gallery. */
/* La section ne gere QUE l'espacement autour du bloc. Marges demandees :
   moins detache du texte au-dessus (÷2) et moins colle aux photos en dessous (x2). */
body.index2-page.page-template.page-article-detail .template-doc > .article-place-recommendations {
  box-sizing:border-box;
  margin-top:clamp(18px,2.6vw,38px);
  margin-bottom:clamp(28px,4vw,40px);
  padding:0;
  border:0;
  background:none;
}
/* Aucune boite ne s'affiche s'il n'y a pas de recommandation. L'attribut [hidden]
   etait neutralise par `body...page-template .template-section{display:grid}`. Ce
   selecteur, plus specifique que cette regle, retablit le masquage sans surcharge. */
body.index2-page.page-template.page-article-detail .template-doc > .article-place-recommendations[hidden] {
  display:none;
}
/* Accordeon replie par defaut : declencheur discret « Decouvrir nos recommandations ».
   Native <details> (accessible, sans JS). Voir ArticleRecommendationsBlock.astro.
   La bordure + le leger fonde degrade sont portes par le <details> (le fond degrade
   n'apparait qu'a l'ouverture ; replie = barre epuree). */
.article-place-recos {
  width:100%;
  border:1px solid var(--line);
  border-radius:clamp(14px,1.9vw,18px);
  background:var(--surface-strong);
  overflow:hidden;
  transition:background .2s ease;
}
.article-place-recos[open] {
  background:linear-gradient(145deg,rgba(var(--accent-rgb),.05),var(--surface-strong));
}
.theme-night .article-place-recos {
  background:rgba(15,24,41,.55);
}
.theme-night .article-place-recos[open] {
  background:linear-gradient(145deg,rgba(var(--accent-rgb),.08),rgba(15,24,41,.6));
}
.article-place-recos-summary {
  display:flex;
  align-items:center;
  gap:clamp(12px,1.6vw,16px);
  padding:clamp(12px,1.6vw,16px) clamp(14px,1.8vw,18px);
  border-radius:clamp(13px,1.8vw,17px);
  cursor:pointer;
  list-style:none;
  user-select:none;
  transition:background .18s ease;
}
.article-place-recos-summary::-webkit-details-marker { display:none; }
.article-place-recos-summary:hover,
.article-place-recos[open] > .article-place-recos-summary {
  background:rgba(var(--accent-rgb),.06);
}
.article-place-recos-summary:focus-visible {
  outline:2px solid rgba(var(--accent-rgb),.42);
  outline-offset:2px;
}
.article-place-recos-summary-icon {
  flex:none;
  display:grid;
  place-items:center;
  width:clamp(36px,4.4vw,42px);
  height:clamp(36px,4.4vw,42px);
  border-radius:50%;
  background:rgba(var(--accent-rgb),.14);
  color:var(--accent);
}
.article-place-recos-summary-icon svg { width:20px; height:20px; }
.article-place-recos-summary-title {
  flex:1 1 auto;
  min-width:0;
  font-family:var(--font-ui);
  font-weight:750;
  font-size:clamp(1rem,1.8vw,1.18rem);
  letter-spacing:-.01em;
  color:var(--ink);
}
.article-place-recos-summary-count {
  flex:none;
  display:grid;
  place-items:center;
  min-width:26px;
  height:26px;
  padding:0 8px;
  border-radius:999px;
  background:var(--accent);
  color:#fff;
  font:700 .8rem/1 var(--font-ui);
}
.article-place-recos-summary-chevron {
  flex:none;
  width:14px;
  height:9px;
  color:var(--ink-soft);
  transition:transform .22s ease;
}
.article-place-recos[open] > .article-place-recos-summary .article-place-recos-summary-chevron {
  transform:rotate(180deg);
}
.article-place-recos-body {
  padding:clamp(6px,1vw,10px) clamp(14px,1.8vw,18px) clamp(16px,2vw,22px);
}
.article-place-recos-lead {
  margin:0 0 clamp(16px,2vw,22px);
  color:var(--ink-soft);
  line-height:1.5;
}
.article-place-recos-body .article-place-recommendations-all {
  margin-top:clamp(16px,2vw,22px);
}
.article-place-recommendations-head {
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:24px;
  margin:0 0 clamp(28px,3.8vw,42px);
}
.article-place-recommendations-head h2 {
  margin:0;
  font-family:var(--font-ui);
  font-size:clamp(1.75rem,3.8vw,2.8rem);
  line-height:1;
  letter-spacing:-.035em;
}
.article-place-recommendations-head p {
  max-width:58ch;
  margin:10px 0 0;
  color:var(--ink-soft);
  line-height:1.5;
}
.article-place-recommendations-all {
  flex:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:42px;
  padding:10px 16px;
  border-radius:999px;
  background:var(--accent);
  color:#fff;
  font:750 .68rem/1 var(--font-ui);
  letter-spacing:.065em;
  text-align:center;
  text-transform:uppercase;
}
.article-place-recommendations-all span {
  font-size:1.15rem;
  line-height:.5;
}

/* A single place gets a composed two-column feature instead of a half card. */
@media (min-width:901px) {
  /* La carte reste alignee sur le shell (memes marges laterales que le H1),
     avec des marges egales des deux cotes. Le globe est centre dans sa colonne. */
  .place-directory-map-layout {
    width:100%;
    margin-inline:0;
    transform:none;
  }
  /* Guide editorial: every result remains a readable row beside the compact map. */
  .place-directory-results .place-rec-card:has(.place-rec-media) {
    grid-template-columns:minmax(210px,.62fr) minmax(0,1.38fr);
    grid-template-rows:minmax(310px,auto);
  }
  .place-directory-results .place-rec-card:has(.place-rec-media) .place-rec-media {
    height:100%;
    aspect-ratio:auto;
  }
  .place-directory-results .place-rec-card:has(.place-rec-media) .place-rec-media picture,
  .place-directory-results .place-rec-card:has(.place-rec-media) .place-rec-media img {
    position:absolute;
    inset:0;
  }
  .place-directory-results .place-rec-card:not(:has(.place-rec-media)) .place-rec-content {
    display:grid;
    grid-template-columns:minmax(210px,.78fr) minmax(0,1.22fr);
    grid-template-rows:auto 1fr;
    grid-template-areas:
      "heading details"
      "actions details";
    column-gap:clamp(30px,3.5vw,52px);
    row-gap:20px;
    align-items:start;
  }
  .place-directory-results .place-rec-card:not(:has(.place-rec-media)) .place-rec-heading {
    grid-area:heading;
  }
  .place-directory-results .place-rec-card:not(:has(.place-rec-media)) .place-rec-details {
    grid-area:details;
  }
  .place-directory-results .place-rec-card:not(:has(.place-rec-media)) .place-rec-actions {
    grid-area:actions;
    align-self:end;
    margin-top:0;
  }
  .place-directory-results .place-rec-card:not(:has(.place-rec-media)):not(:has(.place-rec-details > *)) .place-rec-content {
    grid-template-columns:minmax(0,1fr);
    grid-template-areas:"heading" "actions";
  }
  body.page-article-detail .article-place-recommendations .place-rec-content {
    padding:clamp(30px,3vw,40px);
  }
  :is(.article-place-grid,.place-directory-grid)[data-place-count="1"]
    .place-rec-card:not(:has(.place-rec-media)) .place-rec-content {
    display:grid;
    grid-template-columns:minmax(230px,.78fr) minmax(0,1.22fr);
    grid-template-rows:auto 1fr;
    grid-template-areas:
      "heading details"
      "actions details";
    column-gap:clamp(44px,5.4vw,78px);
    row-gap:22px;
    align-items:start;
  }
  :is(.article-place-grid,.place-directory-grid)[data-place-count="1"]
    .place-rec-card:not(:has(.place-rec-media)) .place-rec-heading {
    grid-area:heading;
    align-self:start;
  }
  :is(.article-place-grid,.place-directory-grid)[data-place-count="1"]
    .place-rec-card:not(:has(.place-rec-media)) .place-rec-details {
    grid-area:details;
    align-self:start;
    font-size:clamp(1rem,1.25vw,1.12rem);
  }
  :is(.article-place-grid,.place-directory-grid)[data-place-count="1"]
    .place-rec-card:not(:has(.place-rec-media)) .place-rec-actions {
    grid-area:actions;
    align-self:end;
    margin-top:0;
  }
  :is(.article-place-grid,.place-directory-grid)[data-place-count="1"]
    .place-rec-card:not(:has(.place-rec-media)):not(:has(.place-rec-details > *)) .place-rec-content {
    grid-template-columns:minmax(0,1fr);
    grid-template-areas:"heading" "actions";
  }
  :is(.article-place-grid,.place-directory-grid)[data-place-count="1"]
    .place-rec-card:has(.place-rec-media) {
    grid-template-columns:minmax(300px,.85fr) minmax(0,1.15fr);
    grid-template-rows:minmax(340px,auto);
  }
  :is(.article-place-grid,.place-directory-grid)[data-place-count="1"]
    .place-rec-card:has(.place-rec-media) .place-rec-media {
    height:100%;
    aspect-ratio:auto;
  }
}

@media (max-width:1180px) and (min-width:761px) {
  :is(.article-place-grid,.place-directory-grid)[data-place-count="4"] {
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
}
@media (max-width:980px) and (min-width:761px) {
  :is(.article-place-grid,.place-directory-grid)[data-place-count="3"] {
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
}
@media (max-width:900px) {
  .place-directory-map-layout {
    grid-template-columns:minmax(0,1fr);
    grid-template-areas:"globe" "tools";
    gap:clamp(26px,5vw,42px);
  }
  body.page-place-recommendations .place-directory-page-hero {
    max-width:720px;
  }
  .place-directory-globe {
    grid-area:globe;
    justify-content:center;
  }
  .place-directory-globe-tools {
    grid-area:tools;
  }
  .place-directory-map-card,
  body.index2-page .place-directory-map-card {
    max-width:760px;
    margin-inline:auto;
  }
  .place-directory-globe-frame {
    width:100%;
  }
  .place-directory-globe-legend {
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  .place-directory-globe-hint {
    max-width:52ch;
  }
}
@media (max-width:760px) {
  .place-directory-content-stage .subpage-shell {
    width:min(100% - 36px,1260px);
  }
  .place-directory-hero-layout {
    padding-top:0;
  }
  .place-directory-globe-hint {
    max-width:100%;
  }
  body.page-place-recommendations .place-directory-filter-head {
    align-items:center;
    flex-direction:row;
    flex-wrap:wrap;
  }
  .place-directory-filter-actions {
    flex:1 1 auto;
    flex-wrap:wrap;
  }
  body.page-place-recommendations .place-directory-filter-primary,
  body.page-place-recommendations .place-directory-filter-secondary {
    grid-template-columns:1fr;
    gap:16px;
  }
  .place-directory-doc {
    gap:30px;
  }
  .article-place-recommendations-head {
    align-items:flex-start;
    flex-direction:column;
    gap:18px;
  }
  .article-place-recommendations-all {
    max-width:100%;
  }
  .article-place-grid,
  .article-place-grid[data-place-count],
  .place-directory-grid,
  .place-directory-grid[data-place-count] {
    grid-template-columns:minmax(0,1fr);
  }
  .place-rec-content {
    padding:24px 22px 26px;
  }
  .place-rec-meta {
    display:grid;
    justify-content:stretch;
    gap:7px;
  }
  .place-rec-description {
    font-size:1rem;
    line-height:1.58;
  }
  .place-directory-results .place-rec-card:has(.place-rec-media) .place-rec-media {
    aspect-ratio:16/10;
  }
}
@media (max-width:620px) {
  body.index2-page.page-place-recommendations:not(.page-admin) {
    --ms-type-page-title:2.2rem;
  }
  body.page-place-recommendations .place-directory-page-hero h1 {
    font-size:var(--ms-type-page-title);
  }
  .place-directory-hero-layout {
    gap:32px;
  }
  .place-directory-map-layout {
    gap:24px;
  }
  .place-directory-map-card .map-clouds {
    display:none;
  }
  .place-directory-globe-legend {
    gap:7px;
  }
  .place-directory-globe-legend button {
    grid-template-columns:34px minmax(0,1fr) auto;
    gap:8px;
    min-height:46px;
    padding:5px 8px 5px 5px;
    font-size:.61rem;
  }
  .place-directory-globe-legend i {
    width:32px;
    height:32px;
  }
  body.index2-page.page-template.page-article-detail .template-doc > .article-place-recommendations {
    margin-inline:0;
  }
  body.page-article-detail .article-place-recommendations .place-rec-content {
    padding:24px 22px 26px;
  }
  .place-rec-actions {
    display:grid;
  }
  .place-rec-action {
    width:100%;
    box-sizing:border-box;
  }
}
@media (prefers-reduced-motion:reduce) {
  .place-rec-action {
    transition:none;
  }
}
