:root {
  --paper: #efede7;
  --paper-soft: #f6f4ef;
  --ink: #0e0e0d;
  --white: #f6f5f1;
  --oxblood: #571a1d;
  --line: rgba(14, 14, 13, .22);
  --gutter: clamp(1.25rem, 3.2vw, 4rem);
  --serif: "Bodoni 72", Didot, "Iowan Old Style", "Times New Roman", serif;
  --sans: "Helvetica Neue", Helvetica, Arial, sans-serif;
  --ease: cubic-bezier(.22, 1, .36, 1);
}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; background: var(--paper); }
body { margin: 0; color: var(--ink); background: var(--paper); font-family: var(--sans); overflow-x: hidden; }
body.is-locked { overflow: hidden; }
img { display: block; width: 100%; height: 100%; object-fit: cover; }
a { color: inherit; text-decoration: none; }
button { color: inherit; font: inherit; }

.grain {
  position: fixed;
  inset: 0;
  z-index: 100;
  opacity: .028;
  pointer-events: none;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.92' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

.reading-progress { position: fixed; z-index: 101; left: 0; right: 0; top: 0; height: 2px; }
.reading-progress span { display: block; width: 100%; height: 100%; background: var(--oxblood); transform: scaleX(0); transform-origin: left; }

.site-header {
  position: fixed;
  z-index: 70;
  left: 0;
  right: 0;
  top: 0;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: start;
  padding: 1.45rem var(--gutter);
  color: var(--ink);
  transition: color 450ms ease;
}
.site-header[data-tone="light"] { color: var(--white); }
.masthead { display: flex; align-items: baseline; width: fit-content; }
.masthead > span {
  font-family: var(--serif);
  font-size: clamp(1.75rem, 2.3vw, 2.35rem);
  line-height: .8;
  letter-spacing: 0;
}
.current-story, .index-toggle { font-size: .55rem; letter-spacing: .16em; text-transform: uppercase; }
.current-story { margin: .15rem 0 0; }
.index-toggle { justify-self: end; padding: 0 0 .35rem; border: 0; border-bottom: 1px solid currentColor; background: transparent; cursor: pointer; opacity: .82; }
.index-toggle:hover { opacity: 1; }
.index-toggle span { margin-left: .65rem; }

.site-index {
  position: fixed;
  z-index: 90;
  inset: 0;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  padding: 1.45rem var(--gutter) 1.6rem;
  color: var(--ink);
  background: var(--paper-soft);
  clip-path: inset(0 0 0 100%);
  visibility: hidden;
  transition: clip-path 850ms var(--ease), visibility 850ms;
}
.site-index.is-open { clip-path: inset(0); visibility: visible; }
.site-index__top { display: grid; grid-template-columns: 1fr auto 1fr; padding-bottom: 1rem; border-bottom: 1px solid var(--line); font-size: .54rem; letter-spacing: .17em; text-transform: uppercase; }
.site-index__top p { margin: 0; }
.site-index__edition { justify-self: center; }
.index-close { justify-self: end; padding: 0; border: 0; background: none; font-size: .54rem; letter-spacing: .16em; text-transform: uppercase; cursor: pointer; }
.index-close span { display: inline-grid; width: 1.5rem; height: 1.5rem; margin-left: .7rem; place-items: center; border: 1px solid var(--line); border-radius: 50%; font-size: .85rem; transition: transform 450ms var(--ease), color 250ms, background 250ms; }
.index-close:hover span { color: var(--white); background: var(--oxblood); transform: rotate(90deg); }
.site-index__body { min-height: 0; display: grid; grid-template-columns: minmax(15rem, .78fr) minmax(34rem, 1.35fr); gap: clamp(2.5rem, 6vw, 7.5rem); align-items: center; padding: 4vh 0; }
.site-index__preview { width: min(100%, 29rem); height: min(68vh, 47rem); margin: 0; display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: .7rem; }
.site-index__preview-media { min-height: 0; overflow: hidden; background: #d9d4cb; }
.site-index__preview img { object-position: center 24%; transition: opacity 220ms ease, transform 900ms var(--ease); }
.site-index__preview img.is-changing { opacity: 0; transform: scale(1.025); }
.site-index__preview figcaption { display: flex; justify-content: space-between; font-size: .5rem; letter-spacing: .15em; text-transform: uppercase; }
.site-index__preview figcaption span:last-child { font-family: var(--serif); font-size: .82rem; font-style: italic; letter-spacing: 0; text-transform: none; }
.site-index nav { align-self: center; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: clamp(1.5rem, 3vw, 4rem); }
.site-index nav a {
  display: grid;
  grid-template-columns: 2.2rem minmax(0, 1fr) auto;
  grid-template-rows: auto auto;
  align-items: baseline;
  min-height: 12.5vh;
  padding: 1.2rem .75rem 1rem 0;
  border-top: 1px solid var(--line);
  transition: padding-left 450ms var(--ease), color 250ms, background-color 250ms;
}
.site-index nav a:hover, .site-index nav a:focus-visible { padding-left: .75rem; color: var(--oxblood); background: rgba(87,26,29,.045); outline: none; }
.site-index nav .chapter-number { grid-column: 1; grid-row: 1; font-size: .5rem; letter-spacing: .14em; }
.site-index nav strong { grid-column: 2 / 4; grid-row: 1; font-family: var(--serif); font-size: clamp(1.55rem, 2.25vw, 2.85rem); font-weight: 400; line-height: .92; letter-spacing: -.035em; }
.site-index nav small { grid-column: 2 / 4; grid-row: 2; align-self: end; margin-top: .6rem; font-size: .46rem; letter-spacing: .16em; text-transform: uppercase; opacity: .55; }
.site-index__footer { display: grid; grid-template-columns: 1fr auto 1fr; padding-top: 1rem; border-top: 1px solid var(--line); font-size: .48rem; letter-spacing: .16em; text-transform: uppercase; }
.site-index__footer span:nth-child(2) { justify-self: center; }
.site-index__footer span:last-child { justify-self: end; }

.cover { position: relative; min-height: 100svh; overflow: hidden; color: var(--white); }
.cover__diptych {
  position: absolute;
  inset: 0;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1px;
  background: rgba(246,245,241,.58);
}
.cover__diptych img { object-position: 50% 26%; transform: scale(1.015); }
.cover__diptych img:nth-child(1) { object-position: 52% 26%; }
.cover__diptych img:nth-child(2) { object-position: 48% 12%; }
.cover__veil { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.32), transparent 34%, transparent 62%, rgba(0,0,0,.46)); }
.cover h1 {
  position: absolute;
  z-index: 2;
  left: var(--gutter);
  right: var(--gutter);
  top: 12vh;
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: start;
  margin: 0;
  font-family: var(--serif);
  font-weight: 400;
}
.cover h1 span {
  display: block;
  grid-column: 1;
  font-size: clamp(3.7rem, 7.4vw, 9rem);
  line-height: .62;
  letter-spacing: 0;
  text-transform: uppercase;
  white-space: nowrap;
}
.cover h1 em {
  display: block;
  grid-column: 2;
  margin-top: clamp(2.7rem, 5.4vw, 5.6rem);
  margin-left: 8%;
  font-size: clamp(3.5rem, 7.2vw, 8.5rem);
  line-height: .7;
  font-weight: 400;
  letter-spacing: 0;
}
.cover__bottom { position: absolute; z-index: 2; left: var(--gutter); right: var(--gutter); bottom: 1.7rem; display: flex; align-items: end; justify-content: space-between; }
.cover__bottom p { margin: 0; font-family: var(--serif); font-size: 1rem; line-height: 1.2; font-style: italic; }
.cover__bottom a { display: flex; gap: 1rem; align-items: center; padding-bottom: .45rem; border-bottom: 1px solid currentColor; font-size: .56rem; letter-spacing: .16em; text-transform: uppercase; opacity: .86; }
.cover__bottom a:hover { opacity: 1; }

.mairie-intro {
  position: relative;
  min-height: 100svh;
  padding: 11vh var(--gutter) 8vh;
  display: grid;
  grid-template-columns: 1fr minmax(0, 7fr) 1fr;
  grid-template-rows: auto 1fr auto;
  gap: 3vh 2vw;
  align-items: center;
  background: var(--paper);
  color: var(--ink);
  overflow: hidden;
}
.mairie-intro::before {
  content: '';
  position: absolute;
  top: 0;
  left: var(--gutter);
  right: var(--gutter);
  height: 1px;
  background: var(--line);
}
.mairie-intro__eyebrow {
  grid-column: 1;
  grid-row: 1;
  align-self: start;
  margin: 0;
  font-size: .56rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  writing-mode: vertical-rl;
  transform: rotate(180deg);
}
.mairie-intro__eyebrow span { margin-bottom: 1rem; color: var(--oxblood); }
.mairie-intro__frame {
  grid-column: 2;
  grid-row: 1 / 4;
  width: min(70vw, 1120px);
  height: 76vh;
  justify-self: center;
  margin: 0;
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  gap: .75rem;
}
.mairie-intro__frame img { object-position: center 48%; }
.mairie-intro__frame figcaption {
  font-family: var(--serif);
  font-size: .9rem;
  font-style: italic;
}
.mairie-intro__next {
  grid-column: 3;
  grid-row: 3;
  justify-self: end;
  display: flex;
  gap: 1rem;
  align-items: center;
  padding-bottom: .45rem;
  border-bottom: 1px solid currentColor;
  font-size: .54rem;
  letter-spacing: .16em;
  text-transform: uppercase;
}

.contents { min-height: 100svh; padding: 16vh var(--gutter) 12vh; background: var(--paper); }
.contents__heading { display: grid; grid-template-columns: 1fr 2fr 1fr; align-items: end; padding-bottom: 1.5rem; border-bottom: 1px solid var(--ink); }
.contents__heading p, .contents__heading span { margin: 0; font-size: .56rem; letter-spacing: .16em; text-transform: uppercase; }
.contents__heading h2 { margin: 0; font-family: var(--serif); font-size: clamp(4rem, 8.6vw, 10rem); font-weight: 400; line-height: .7; letter-spacing: -.06em; }
.contents__heading span { justify-self: end; }
.contents__list { display: grid; }
.contents__list a { display: grid; grid-template-columns: 8% 55% 1fr; align-items: baseline; padding: .8rem 0 .65rem; border-bottom: 1px solid var(--line); transition: padding-left 400ms var(--ease), color 250ms; }
.contents__list a:hover { padding-left: 1rem; color: var(--oxblood); }
.contents__list span, .contents__list small { font-size: .55rem; font-weight: 400; letter-spacing: .15em; text-transform: uppercase; }
.contents__list strong { font-family: var(--serif); font-size: clamp(2rem, 4.3vw, 4.8rem); font-weight: 400; line-height: .9; letter-spacing: -.045em; }

.story { background: var(--paper); }
.story-cover { position: relative; min-height: 100svh; color: var(--white); overflow: hidden; }
.story-cover > img { position: absolute; inset: 0; object-position: var(--cover-focus-x, center) var(--cover-focus-y, center); transform: scale(1.01); transition: transform 2s var(--ease); }
.story-cover.is-visible > img { transform: scale(1.035); }
.story-cover__shade { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.3), transparent 42%, rgba(0,0,0,.48)); }
.story-cover__number, .story-cover__kicker, .story-cover__count { position: absolute; z-index: 2; margin: 0; }
.story-cover__number { left: var(--gutter); top: 16vh; font-size: .57rem; letter-spacing: .18em; text-transform: uppercase; }
.story-cover h2 { position: absolute; z-index: 2; left: var(--gutter); right: var(--gutter); top: 50%; margin: 0; font-family: var(--serif); font-size: clamp(5.4rem, 13vw, 15rem); font-weight: 400; line-height: .66; letter-spacing: -.065em; transform: translateY(-35%); }
.story-cover h2 span { display: block; }
.story-cover h2 em { display: block; margin-left: 18%; font-weight: 400; }
.story-cover__kicker { left: var(--gutter); bottom: 2rem; font-family: var(--serif); font-size: 1rem; font-style: italic; }
.story-cover__count { right: var(--gutter); bottom: 2rem; font-size: .56rem; letter-spacing: .16em; text-transform: uppercase; }
.story--reverse .story-cover h2 { text-align: right; }
.story--reverse .story-cover h2 em { margin-left: 0; margin-right: 18%; }
.story--reverse .story-cover > img { transform: scale(1.025) scaleX(-1); }
#shooting-star .story-cover > img { transform: translateX(6%) scale(1.16) scaleX(-1); }
#shooting-star .story-cover.is-visible > img { transform: translateX(6%) scale(1.19) scaleX(-1); }
#shooting-star .story-cover h2 { text-align: left; }
#shooting-star .story-cover h2 em { margin-left: 0; margin-right: 0; }
#preparatifs-marie .story-cover h2 { text-align: left; }
#preparatifs-marie .story-cover h2 em { margin-left: 0; margin-right: 0; }
#famille .story-cover h2 { top: 20%; text-align: center; }
#ceremonie .story-cover h2 { top: auto; bottom: 16%; text-align: center; }
#activites .story-cover > img,
#ceremonie .story-cover > img { transform: scale(1.01); }
#activites .story-cover.is-visible > img,
#ceremonie .story-cover.is-visible > img { transform: scale(1.035); }

.story-layout { padding: 13vh var(--gutter) 7vh; }
.story-layout__header { display: grid; grid-template-columns: 1fr 2.5fr 1fr; align-items: baseline; padding-bottom: 1rem; border-bottom: 1px solid var(--ink); }
.story-layout__header p, .story-layout__header span { margin: 0; font-size: .55rem; letter-spacing: .15em; text-transform: uppercase; }
.story-layout__header h3 { margin: 0; font-family: var(--serif); font-size: clamp(2.2rem, 4vw, 4.8rem); font-weight: 400; line-height: .9; letter-spacing: -.04em; }
.story-layout__header span { justify-self: end; }

.story-gallery { display: grid; grid-template-columns: repeat(12, 1fr); gap: 12vh 1.5vw; padding-top: 12vh; }
.story-photo { margin: 0; }
.story-photo__media { position: relative; height: 100%; overflow: hidden; background: #d8d5cd; cursor: zoom-in; }
.story-photo img { object-position: center var(--focus); transition: transform 1.1s var(--ease), filter .5s ease; }
.story-photo:hover img { transform: scale(1.025); }
.story-photo figcaption { display: flex; justify-content: space-between; padding-top: .6rem; font-size: .5rem; letter-spacing: .14em; text-transform: uppercase; }
.story-photo__view { position: absolute; left: 50%; top: 50%; display: grid; width: 5rem; height: 5rem; place-items: center; border-radius: 50%; color: var(--ink); background: rgba(246,245,241,.9); backdrop-filter: blur(8px); font-size: .5rem; letter-spacing: .13em; text-transform: uppercase; opacity: 0; transform: translate(-50%, -35%) scale(.8); transition: opacity 350ms, transform 450ms var(--ease); }
.story-photo:hover .story-photo__view { opacity: 1; transform: translate(-50%, -50%) scale(1); }

.story-photo--1 { grid-column: 1 / 8; height: 72vw; max-height: 62rem; }
.story-photo--2 { grid-column: 9 / 13; height: 38vw; margin-top: 18vw; }
.story-photo--3 { grid-column: 2 / 6; height: 48vw; }
.story-photo--4 { grid-column: 7 / 13; height: 64vw; margin-top: 9vw; }
.story-photo--5 { grid-column: 1 / 13; height: 54vw; }
.story-photo--6 { grid-column: 1 / 5; height: 45vw; margin-top: 12vw; }
.story-photo--7 { grid-column: 6 / 11; height: 62vw; }
.story-photo--8 { grid-column: 2 / 7; height: 62vw; }
.story-photo--9 { grid-column: 8 / 13; height: 42vw; margin-top: 14vw; }
.story-photo--10 { grid-column: 3 / 11; height: 54vw; }
.story--reverse .story-photo--1 { grid-column: 6 / 13; }
.story--reverse .story-photo--2 { grid-column: 1 / 5; }
.story--reverse .story-photo--3 { grid-column: 8 / 12; }
.story--reverse .story-photo--4 { grid-column: 1 / 7; }
.story--reverse .story-photo--6 { grid-column: 9 / 13; }
.story--reverse .story-photo--7 { grid-column: 3 / 8; }
#mairie .story-photo[data-photo="09"] { height: auto; max-height: none; align-self: start; }
#mairie .story-photo[data-photo="09"] .story-photo__media { height: auto; }
#mairie .story-photo[data-photo="09"] img { height: auto; object-fit: contain; }

/* Shooting de star : rythme portrait puis séquence paysage. */
#shooting-star .story-photo[data-photo="01"] { grid-column: 1 / 8; height: 70vw; max-height: 62rem; margin-top: 0; }
#shooting-star .story-photo[data-photo="02"] { grid-column: 9 / 13; height: 40vw; margin-top: 18vw; }
#shooting-star .story-photo[data-photo="03"] { grid-column: 2 / 6; height: 48vw; margin-top: 0; }
#shooting-star .story-photo[data-photo="04"] { grid-column: 7 / 13; height: 64vw; margin-top: 8vw; }
#shooting-star .story-photo[data-photo="05"] { grid-column: 1 / 6; height: 58vw; margin-top: 0; }
#shooting-star .story-photo[data-photo="06"] { grid-column: 7 / 13; height: 68vw; margin-top: 8vw; }
#shooting-star .story-photo[data-photo="07"] { grid-column: 3 / 11; height: 70vw; max-height: 60rem; margin-top: 0; }
#shooting-star .story-photo[data-photo="08"] { grid-column: 1 / 13; height: 50vw; max-height: 56rem; margin-top: 0; }
#shooting-star .story-photo[data-photo="09"] { grid-column: 1 / 7; height: 31vw; margin-top: 0; }
#shooting-star .story-photo[data-photo="10"] { grid-column: 7 / 13; height: 31vw; margin-top: 10vw; }
#shooting-star .story-photo[data-photo="11"] { grid-column: 2 / 12; height: 42vw; max-height: 48rem; margin-top: 0; }
#shooting-star .story-photo[data-photo="12"] { grid-column: 1 / 13; height: 50vw; max-height: 56rem; margin-top: 0; }
#shooting-star .story-photo[data-photo="13"] { grid-column: 4 / 10; height: 68vw; max-height: 58rem; margin-top: 0; }

/* Préparatifs du marié : portraits alternés et paysages ouverts. */
#preparatifs-marie .story-photo[data-photo="01"] { grid-column: 1 / 8; height: 70vw; max-height: 62rem; margin-top: 0; }
#preparatifs-marie .story-photo[data-photo="02"] { grid-column: 9 / 13; height: 40vw; margin-top: 18vw; }
#preparatifs-marie .story-photo[data-photo="03"] { grid-column: 2 / 6; height: 48vw; margin-top: 0; }
#preparatifs-marie .story-photo[data-photo="04"] { grid-column: 7 / 13; height: 64vw; margin-top: 8vw; }
#preparatifs-marie .story-photo[data-photo="05"] { grid-column: 1 / 13; height: 50vw; max-height: 56rem; margin-top: 0; }
#preparatifs-marie .story-photo[data-photo="06"] { grid-column: 1 / 6; height: 58vw; margin-top: 0; }
#preparatifs-marie .story-photo[data-photo="07"] { grid-column: 7 / 13; height: 68vw; margin-top: 8vw; }
#preparatifs-marie .story-photo[data-photo="08"] { grid-column: 1 / 7; height: 31vw; margin-top: 0; }
#preparatifs-marie .story-photo[data-photo="09"] { grid-column: 7 / 13; height: 31vw; margin-top: 10vw; }
#preparatifs-marie .story-photo[data-photo="10"] { grid-column: 2 / 12; height: 42vw; max-height: 48rem; margin-top: 0; }
#preparatifs-marie .story-photo[data-photo="11"] { grid-column: 4 / 10; height: 68vw; max-height: 58rem; margin-top: 0; }

/* Saint-Paul-de-Vence : alternance de portraits et paysages finaux en duo. */
#saint-paul .story-photo[data-photo="01"] { grid-column: 1 / 8; height: 70vw; max-height: 62rem; margin-top: 0; }
#saint-paul .story-photo[data-photo="02"] { grid-column: 9 / 13; height: 40vw; margin-top: 18vw; }
#saint-paul .story-photo[data-photo="03"] { grid-column: 2 / 6; height: 48vw; margin-top: 0; }
#saint-paul .story-photo[data-photo="04"] { grid-column: 7 / 13; height: 64vw; margin-top: 8vw; }
#saint-paul .story-photo[data-photo="05"] { grid-column: 4 / 10; height: 68vw; max-height: 58rem; margin-top: 0; }
#saint-paul .story-photo[data-photo="06"] { grid-column: 1 / 6; height: 58vw; margin-top: 0; }
#saint-paul .story-photo[data-photo="07"] { grid-column: 7 / 13; height: 68vw; margin-top: 8vw; }
#saint-paul .story-photo[data-photo="08"] { grid-column: 3 / 11; height: 70vw; max-height: 60rem; margin-top: 0; }
#saint-paul .story-photo[data-photo="09"] { grid-column: 1 / 7; height: 31vw; margin-top: 0; }
#saint-paul .story-photo[data-photo="10"] { grid-column: 7 / 13; height: 31vw; margin-top: 10vw; }

/* Cérémonie : une narration éditoriale pensée pour les 28 images. */
#ceremonie .story-photo[data-photo="01"] { grid-column: 1 / 8; height: 70vw; max-height: 62rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="02"] { grid-column: 9 / 13; height: 40vw; margin-top: 18vw; }
#ceremonie .story-photo[data-photo="03"] { grid-column: 2 / 6; height: 48vw; margin-top: 0; }
#ceremonie .story-photo[data-photo="04"] { grid-column: 8 / 12; width: 100%; max-width: 28rem; height: auto; align-self: start; margin-top: 8vw; }
#ceremonie .story-photo[data-photo="04"] .story-photo__media { height: auto; }
#ceremonie .story-photo[data-photo="04"] img { height: auto; object-fit: contain; }
#ceremonie .story-photo[data-photo="05"] { grid-column: 1 / 7; height: 31vw; margin-top: 0; }
#ceremonie .story-photo[data-photo="06"] { grid-column: 7 / 13; height: 31vw; margin-top: 8vw; }
#ceremonie .story-photo[data-photo="07"] { grid-column: 4 / 10; height: 68vw; max-height: 58rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="08"] { grid-column: 1 / 13; height: 50vw; max-height: 56rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="09"] { grid-column: 1 / 6; height: 58vw; margin-top: 0; }
#ceremonie .story-photo[data-photo="10"] { grid-column: 7 / 13; height: 31vw; margin-top: 14vw; }
#ceremonie .story-photo[data-photo="11"] { grid-column: 1 / 8; height: 70vw; max-height: 62rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="12"] { grid-column: 9 / 13; height: 40vw; margin-top: 18vw; }
#ceremonie .story-photo[data-photo="13"] { grid-column: 2 / 6; height: 48vw; margin-top: 0; }
#ceremonie .story-photo[data-photo="14"] { grid-column: 7 / 13; height: 64vw; margin-top: 8vw; }
#ceremonie .story-photo[data-photo="15"] { grid-column: 1 / 13; height: 50vw; max-height: 56rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="16"] { grid-column: 1 / 6; height: 58vw; margin-top: 0; }
#ceremonie .story-photo[data-photo="17"] { grid-column: 7 / 13; height: 68vw; margin-top: 8vw; }
#ceremonie .story-photo[data-photo="18"] { grid-column: 2 / 6; height: 48vw; margin-top: 0; }
#ceremonie .story-photo[data-photo="19"] { grid-column: 7 / 13; height: 64vw; margin-top: 10vw; }
#ceremonie .story-photo[data-photo="20"] { grid-column: 1 / 13; height: 50vw; max-height: 56rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="21"] { grid-column: 4 / 10; height: 68vw; max-height: 58rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="22"] { grid-column: 2 / 12; height: 42vw; max-height: 48rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="23"] { grid-column: 1 / 8; height: 70vw; max-height: 62rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="24"] { grid-column: 9 / 13; height: 40vw; margin-top: 18vw; }
#ceremonie .story-photo[data-photo="25"] { grid-column: 4 / 10; height: 68vw; max-height: 58rem; margin-top: 0; }
#ceremonie .story-photo[data-photo="26"] { grid-column: 1 / 7; height: 31vw; margin-top: 0; }
#ceremonie .story-photo[data-photo="27"] { grid-column: 7 / 13; height: 31vw; margin-top: 10vw; }
#ceremonie .story-photo[data-photo="28"] { grid-column: 4 / 10; height: 68vw; max-height: 58rem; margin-top: 0; }

.story-end { display: flex; justify-content: space-between; margin-top: 14vh; padding-top: 1rem; border-top: 1px solid var(--ink); font-size: .55rem; letter-spacing: .15em; text-transform: uppercase; }
.story-end a { padding-bottom: .35rem; border-bottom: 1px solid currentColor; }

/* Famille : duos décalés, respirations paysage et cadrages intégraux. */
.story--family .story-gallery {
  grid-template-columns: repeat(12, minmax(0, 1fr));
  align-items: start;
  gap: clamp(3rem, 6.5vw, 7rem) 2.5vw;
}
.story--family .story-photo--natural {
  grid-column: var(--family-column, 1 / -1);
  width: 100%;
  height: auto;
  max-height: none;
  margin: var(--family-offset, 0) 0 0;
}
#famille .story-photo[data-photo="01"] { --family-column: 1 / 7; }
#famille .story-photo[data-photo="02"] { --family-column: 8 / 13; --family-offset: 8vw; }
#famille .story-photo[data-photo="03"] { --family-column: 2 / 6; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="04"] { --family-column: 7 / 13; --family-offset: 6vw; }
#famille .story-photo[data-photo="05"] { --family-column: 1 / 6; }
#famille .story-photo[data-photo="06"] { --family-column: 7 / 12; --family-offset: 7vw; --family-mobile-column: 8 / 13; }
#famille .story-photo[data-photo="07"] { --family-column: 2 / 7; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="08"] { --family-column: 8 / 13; --family-offset: 7vw; }
#famille .story-photo[data-photo="09"] { --family-column: 2 / 12; --family-mobile-column: 1 / 13; }
#famille .story-photo[data-photo="10"] { --family-column: 1 / 7; }
#famille .story-photo[data-photo="11"] { --family-column: 8 / 13; --family-offset: 7vw; }
#famille .story-photo[data-photo="12"] { --family-column: 2 / 6; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="13"] { --family-column: 7 / 13; --family-offset: 5vw; }
#famille .story-photo[data-photo="14"] { --family-column: 4 / 10; --family-mobile-column: 3 / 11; }
#famille .story-photo[data-photo="15"] { --family-column: 1 / 7; }
#famille .story-photo[data-photo="16"] { --family-column: 7 / 13; --family-offset: 5vw; }
#famille .story-photo[data-photo="17"] { --family-column: 2 / 12; --family-mobile-column: 1 / 13; }
#famille .story-photo[data-photo="18"] { --family-column: 1 / 6; }
#famille .story-photo[data-photo="19"] { --family-column: 7 / 12; --family-offset: 6vw; --family-mobile-column: 8 / 13; }
#famille .story-photo[data-photo="20"] { --family-column: 2 / 7; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="21"] { --family-column: 8 / 13; --family-offset: 6vw; }
#famille .story-photo[data-photo="22"] { --family-column: 1 / 7; }
#famille .story-photo[data-photo="23"] { --family-column: 8 / 13; --family-offset: 7vw; }
#famille .story-photo[data-photo="24"] { --family-column: 2 / 6; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="25"] { --family-column: 7 / 13; --family-offset: 10vw; }
#famille .story-photo[data-photo="26"] { --family-column: 1 / 13; }
#famille .story-photo[data-photo="27"] { --family-column: 2 / 6; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="28"] { --family-column: 7 / 13; --family-offset: 10vw; }
#famille .story-photo[data-photo="29"] { --family-column: 1 / 7; }
#famille .story-photo[data-photo="30"] { --family-column: 8 / 13; --family-offset: 7vw; }
#famille .story-photo[data-photo="31"] { --family-column: 2 / 7; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="32"] { --family-column: 8 / 13; --family-offset: 7vw; }
#famille .story-photo[data-photo="33"] { --family-column: 1 / 6; }
#famille .story-photo[data-photo="34"] { --family-column: 7 / 12; --family-offset: 6vw; --family-mobile-column: 8 / 13; }
#famille .story-photo[data-photo="35"] { --family-column: 2 / 6; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="36"] { --family-column: 7 / 13; --family-offset: 10vw; }
#famille .story-photo[data-photo="37"] { --family-column: 2 / 12; --family-mobile-column: 1 / 13; }
#famille .story-photo[data-photo="38"] { --family-column: 2 / 6; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="39"] { --family-column: 7 / 13; --family-offset: 10vw; }
#famille .story-photo[data-photo="40"] { --family-column: 1 / 7; }
#famille .story-photo[data-photo="41"] { --family-column: 7 / 13; --family-offset: 5vw; }
#famille .story-photo[data-photo="42"] { --family-column: 2 / 6; --family-mobile-column: 1 / 6; }
#famille .story-photo[data-photo="43"] { --family-column: 7 / 13; --family-offset: 10vw; }
#famille .story-photo[data-photo="44"] { --family-column: 2 / 12; --family-mobile-column: 1 / 13; }
#famille .story-photo[data-photo="45"] { --family-column: 1 / 6; }
#famille .story-photo[data-photo="46"] { --family-column: 7 / 12; --family-offset: 6vw; --family-mobile-column: 8 / 13; }
#famille .story-photo[data-photo="47"] { --family-column: 1 / 8; --family-offset: 6vw; --family-mobile-column: 1 / 7; }
#famille .story-photo[data-photo="48"] { --family-column: 9 / 13; --family-mobile-column: 8 / 13; }
#famille .story-photo[data-photo="49"] { --family-column: 1 / 7; --family-offset: 8vw; }
#famille .story-photo[data-photo="50"] { --family-column: 8 / 12; --family-mobile-column: 8 / 13; }
#famille .story-photo[data-photo="51"] { --family-column: 1 / 7; }
#famille .story-photo[data-photo="52"] { --family-column: 7 / 13; --family-offset: 5vw; }
#famille .story-photo[data-photo="53"] { --family-column: 4 / 10; --family-mobile-column: 3 / 11; }

/* Festivités : duos décalés et vues d'ensemble, sans recadrer les originaux. */
.story--festivities .story-gallery {
  grid-template-columns: repeat(12, minmax(0, 1fr));
  align-items: start;
  gap: clamp(3.5rem, 8vw, 8rem) 1.5vw;
}
.story--festivities .story-photo--natural {
  grid-column: var(--festivities-column, 1 / -1);
  width: 100%;
  height: auto;
  max-height: none;
  margin: var(--festivities-offset, 0) 0 0;
}
#activites .story-photo[data-photo="01"] { --festivities-column: 1 / 8; --festivities-mobile-column: 1 / 8; }
#activites .story-photo[data-photo="02"] { --festivities-column: 9 / 13; --festivities-offset: 18vw; --festivities-mobile-column: 9 / 13; --festivities-mobile-offset: 18vw; }
#activites .story-photo[data-photo="03"] { --festivities-column: 2 / 12; }
#activites .story-photo[data-photo="04"] { --festivities-column: 1 / 6; --festivities-mobile-column: 1 / 7; }
#activites .story-photo[data-photo="05"] { --festivities-column: 7 / 13; --festivities-offset: 10vw; --festivities-mobile-column: 8 / 13; --festivities-mobile-offset: 12vw; }
#activites .story-photo[data-photo="06"] { --festivities-column: 2 / 6; --festivities-mobile-column: 3 / 11; }
#activites .story-photo[data-photo="07"] { --festivities-column: 7 / 13; --festivities-offset: 12vw; }
#activites .story-photo[data-photo="08"] { --festivities-column: 2 / 12; }
#activites .story-photo[data-photo="09"] { --festivities-column: 2 / 6; --festivities-mobile-column: 2 / 10; }
#activites .story-photo[data-photo="10"] { --festivities-column: 7 / 13; --festivities-offset: 10vw; }
#activites .story-photo[data-photo="11"] { --festivities-column: 1 / 7; }
#activites .story-photo[data-photo="12"] { --festivities-column: 7 / 13; --festivities-offset: 8vw; }
#activites .story-photo[data-photo="13"] { --festivities-column: 1 / 13; }
#activites .story-photo[data-photo="14"] { --festivities-column: 2 / 6; --festivities-mobile-column: 1 / 6; }
#activites .story-photo[data-photo="15"] { --festivities-column: 7 / 13; --festivities-offset: 12vw; --festivities-mobile-column: 7 / 13; --festivities-mobile-offset: 12vw; }
#activites .story-photo[data-photo="16"] { --festivities-column: 4 / 10; --festivities-mobile-column: 3 / 11; }

/* Les cadrages intégraux restent visibles, y compris les photos de groupe. */
.story-photo--natural .story-photo__media { height: auto; background: transparent; overflow: visible; }
.story-photo--natural img { height: auto; object-fit: contain; }
.story-photo--natural:hover img { transform: none; }

/* Lune de miel : neuf duos éditoriaux et quatre respirations paysage, sans recadrage. */
.story--honeymoon .story-gallery {
  grid-template-columns: repeat(12, minmax(0, 1fr));
  align-items: start;
  gap: clamp(2.75rem, 5.5vw, 6rem) 1.75vw;
  padding-top: clamp(3rem, 6vw, 6rem);
}
.story--honeymoon .story-photo--natural {
  grid-column: var(--honeymoon-column, 1 / -1);
  width: 100%;
  height: auto;
  max-height: none;
  margin: min(var(--honeymoon-offset, 0px), 10rem) 0 0;
}
#lune-de-miel .story-photo[data-photo="01"] { --honeymoon-column: 1 / 6; --honeymoon-mobile-column: 1 / 6; }
#lune-de-miel .story-photo[data-photo="02"] { --honeymoon-column: 7 / 13; --honeymoon-offset: 12vw; --honeymoon-mobile-column: 7 / 13; --honeymoon-mobile-offset: 10vw; }
#lune-de-miel .story-photo[data-photo="03"] { --honeymoon-column: 2 / 12; --honeymoon-mobile-column: 1 / 13; }
#lune-de-miel .story-photo[data-photo="04"] { --honeymoon-column: 2 / 6; --honeymoon-mobile-column: 1 / 6; }
#lune-de-miel .story-photo[data-photo="05"] { --honeymoon-column: 7 / 12; --honeymoon-offset: 6vw; --honeymoon-mobile-column: 7 / 13; --honeymoon-mobile-offset: 5vw; }
#lune-de-miel .story-photo[data-photo="06"] { --honeymoon-column: 1 / 13; --honeymoon-mobile-column: 1 / 13; }
#lune-de-miel .story-photo[data-photo="07"] { --honeymoon-column: 1 / 7; --honeymoon-mobile-column: 1 / 7; }
#lune-de-miel .story-photo[data-photo="08"] { --honeymoon-column: 9 / 13; --honeymoon-offset: 10vw; --honeymoon-mobile-column: 8 / 13; --honeymoon-mobile-offset: 9vw; }
#lune-de-miel .story-photo[data-photo="09"] { --honeymoon-column: 1 / 8; --honeymoon-offset: 3vw; --honeymoon-mobile-column: 1 / 7; --honeymoon-mobile-offset: 5vw; }
#lune-de-miel .story-photo[data-photo="10"] { --honeymoon-column: 9 / 13; --honeymoon-mobile-column: 8 / 13; --honeymoon-mobile-offset: 0vw; }
#lune-de-miel .story-photo[data-photo="11"] { --honeymoon-column: 3 / 11; --honeymoon-mobile-column: 2 / 12; }
#lune-de-miel .story-photo[data-photo="12"] { --honeymoon-column: 2 / 6; --honeymoon-mobile-column: 1 / 6; }
#lune-de-miel .story-photo[data-photo="13"] { --honeymoon-column: 7 / 12; --honeymoon-offset: 4vw; --honeymoon-mobile-column: 7 / 13; --honeymoon-mobile-offset: 4vw; }
#lune-de-miel .story-photo[data-photo="14"] { --honeymoon-column: 1 / 7; --honeymoon-mobile-column: 1 / 7; }
#lune-de-miel .story-photo[data-photo="15"] { --honeymoon-column: 7 / 13; --honeymoon-offset: 6vw; --honeymoon-mobile-column: 7 / 13; --honeymoon-mobile-offset: 6vw; }
#lune-de-miel .story-photo[data-photo="16"] { --honeymoon-column: 2 / 7; --honeymoon-offset: 3vw; --honeymoon-mobile-column: 1 / 6; --honeymoon-mobile-offset: 3vw; }
#lune-de-miel .story-photo[data-photo="17"] { --honeymoon-column: 8 / 12; --honeymoon-mobile-column: 8 / 13; --honeymoon-mobile-offset: 0vw; }
#lune-de-miel .story-photo[data-photo="18"] { --honeymoon-column: 1 / 8; --honeymoon-mobile-column: 1 / 7; }
#lune-de-miel .story-photo[data-photo="19"] { --honeymoon-column: 9 / 13; --honeymoon-offset: 12vw; --honeymoon-mobile-column: 8 / 13; --honeymoon-mobile-offset: 9vw; }
#lune-de-miel .story-photo[data-photo="20"] { --honeymoon-column: 1 / 6; --honeymoon-mobile-column: 1 / 6; }
#lune-de-miel .story-photo[data-photo="21"] { --honeymoon-column: 8 / 13; --honeymoon-offset: 7vw; --honeymoon-mobile-column: 8 / 13; --honeymoon-mobile-offset: 6vw; }
#lune-de-miel .story-photo[data-photo="22"] { --honeymoon-column: 3 / 11; --honeymoon-mobile-column: 1 / 13; }
@media (max-width: 900px) {
  .story--honeymoon .story-gallery {
    gap: clamp(2rem, 7vw, 4rem) 3vw;
    padding-top: clamp(2.5rem, 8vw, 4rem);
  }
  .story--honeymoon .story-photo--natural {
    grid-column: var(--honeymoon-mobile-column, var(--honeymoon-column, 1 / -1));
    margin-top: var(--honeymoon-mobile-offset, var(--honeymoon-offset, 0));
  }
}

.story--prints .story-cover {
  display: grid;
  grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr);
  align-items: center;
  gap: 4vw;
  min-height: 85svh;
  padding: 9rem var(--gutter) 7rem;
  color: var(--ink);
  background: var(--paper-soft);
}
.story--prints .story-cover > img,
.story--prints .story-cover.is-visible > img {
  position: static;
  grid-column: 2;
  grid-row: 1;
  height: auto;
  object-fit: contain;
  transform: none;
}
.story--prints .story-cover__shade { display: none; }
.story--prints .story-cover h2 {
  position: static;
  grid-column: 1;
  grid-row: 1;
  font-size: clamp(3.5rem, 7.7vw, 9rem);
  text-align: left;
  line-height: .9;
  transform: none;
}
.story--prints .story-cover__number { top: 5.5rem; }
.story--prints .story-gallery {
  grid-template-columns: repeat(12, minmax(0, 1fr));
  align-items: start;
  gap: clamp(1.25rem, 2.2vw, 2.5rem) 1.8vw;
  padding-top: 6vh;
}
/* Trois tirages par rangée : plus présents, plus proches, avec de légers décalages. */
.story--prints .story-photo--natural {
  grid-column: span 4;
  justify-self: var(--print-align, center);
  width: var(--print-width, 100%);
  height: auto;
  max-height: none;
  margin: var(--print-offset, 0) 0 0;
}
.story--prints .story-photo:nth-child(9n + 1) { --print-align: start; }
.story--prints .story-photo:nth-child(9n + 2) { --print-width: 88%; --print-offset: 3vw; }
.story--prints .story-photo:nth-child(9n + 3) { --print-align: end; --print-offset: 1vw; }
.story--prints .story-photo:nth-child(9n + 4) { --print-width: 90%; --print-align: start; --print-offset: 1.5vw; }
.story--prints .story-photo:nth-child(9n + 5) { --print-width: 100%; }
.story--prints .story-photo:nth-child(9n + 6) { --print-width: 92%; --print-align: end; --print-offset: 3vw; }
.story--prints .story-photo:nth-child(9n + 7) { --print-align: start; }
.story--prints .story-photo:nth-child(9n + 8) { --print-width: 92%; --print-offset: 2vw; }
.story--prints .story-photo:nth-child(9n + 9) { --print-width: 88%; --print-align: end; --print-offset: 4vw; }

@media (max-width: 900px) {
  .story--family .story-gallery { gap: clamp(2rem, 7vw, 4rem) 3vw; }
  .story--family .story-photo--natural { grid-column: var(--family-mobile-column, var(--family-column, 1 / -1)); margin-top: var(--family-mobile-offset, var(--family-offset, 0)); }
  .story--festivities .story-gallery { gap: clamp(2.5rem, 9vw, 5rem) 3vw; }
  .story--festivities .story-photo--natural { grid-column: var(--festivities-mobile-column, 1 / -1); margin-top: var(--festivities-mobile-offset, 0); }
  .story--prints .story-cover h2 { font-size: clamp(24px, 7.7vw, 7rem); }
  .story--prints .story-gallery { column-gap: 1.8vw; }
}

@media (max-width: 600px) {
  .story--prints .story-gallery { gap: 1.25rem 3vw; }
  .story--prints .story-photo--natural { grid-column: span 6; width: 100%; margin: 0; justify-self: start; }
  .story--prints .story-photo:nth-child(2n) { width: 92%; margin-top: 5vw; justify-self: end; }
}

.lightbox { width: 100vw; max-width: none; height: 100svh; height: 100dvh; max-height: none; margin: 0; padding: 0; border: 0; color: var(--white); background: rgba(7,7,6,.98); overflow: hidden; }
.lightbox[open] { display: block; animation: fade .35s ease both; }
.lightbox__stage { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; place-items: center; width: 100%; height: 100%; padding: 4.5rem 6rem; color: var(--white); background: #070706; }
.lightbox__stage:fullscreen { width: 100vw; height: 100dvh; }
.lightbox__stage:-webkit-full-screen { width: 100vw; height: 100dvh; }
.lightbox::backdrop { background: #070706; }
.lightbox__photo { display: grid; width: max-content; max-width: 100%; gap: .25rem; }
.lightbox__actions { display: flex; align-items: center; justify-content: space-between; gap: .75rem; width: 100%; }
.lightbox__fullscreen { display: inline-flex; align-items: center; justify-content: flex-start; flex: none; min-width: 44px; min-height: 44px; padding: 0; border: 0; background: none; color: inherit; cursor: pointer; }
.lightbox__fullscreen:hover { opacity: .7; }
.lightbox__fullscreen:focus-visible { outline: 1px solid currentColor; outline-offset: 3px; }
.fullscreen-collapse, .is-expanded .fullscreen-expand { display: none; }
.is-expanded .fullscreen-collapse { display: inline; }
.lightbox.is-expanded .lightbox__stage { grid-template-columns: minmax(0, 1fr); padding: max(3.25rem, env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) max(2rem, env(safe-area-inset-bottom)) max(1rem, env(safe-area-inset-left)); }
.lightbox.is-expanded img { max-width: calc(100vw - 2rem); max-height: calc(100dvh - 8rem); }
.lightbox.is-expanded .lightbox__arrow { position: absolute; z-index: 2; top: 50%; transform: translateY(-50%); background: rgba(7,7,6,.35); border-radius: 50%; }
.lightbox.is-expanded .lightbox__arrow--prev { left: .5rem; }
.lightbox.is-expanded .lightbox__arrow--next { right: .5rem; }
.lightbox__status { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.lightbox img { display: block; width: auto; max-width: min(78vw, calc(100vw - 20rem)); height: auto; max-height: min(82svh, calc(100svh - 12rem)); object-fit: contain; }
.lightbox__download { display: inline-flex; align-items: center; justify-content: flex-end; justify-self: end; gap: .55rem; min-width: 44px; min-height: 44px; color: inherit; font-size: .6rem; letter-spacing: .14em; text-transform: uppercase; text-decoration: none; cursor: pointer; }
.lightbox__download:hover { text-decoration: underline; text-underline-offset: .3rem; }
.lightbox__download:focus-visible { outline: 1px solid currentColor; outline-offset: 3px; }
.lightbox__download svg { flex: none; }
.lightbox__close { position: absolute; right: var(--gutter); top: 1.5rem; padding: 0; border: 0; background: none; font-size: .55rem; letter-spacing: .15em; text-transform: uppercase; cursor: pointer; }
.lightbox__arrow { padding: 1rem; border: 0; background: none; font-family: var(--serif); font-size: 2rem; cursor: pointer; }
.lightbox__caption { position: absolute; left: var(--gutter); bottom: 1.4rem; margin: 0; font-family: var(--serif); font-size: .9rem; font-style: italic; }
@media (max-height: 500px) {
  .lightbox__download-label { display: none; }
}
@keyframes fade { from { opacity: 0; } }

.observed .story-cover__number, .observed .story-cover h2, .observed .story-cover__kicker, .contents__heading, .contents__list, .mairie-intro__eyebrow, .mairie-intro__frame, .mairie-intro__next { opacity: 0; transform: translateY(2rem); transition: opacity .9s var(--ease), transform 1.1s var(--ease); }
.observed.is-visible .story-cover__number, .observed.is-visible .story-cover h2, .observed.is-visible .story-cover__kicker, .contents.is-visible .contents__heading, .contents.is-visible .contents__list, .mairie-intro.is-visible .mairie-intro__eyebrow, .mairie-intro.is-visible .mairie-intro__frame, .mairie-intro.is-visible .mairie-intro__next { opacity: 1; transform: translateY(0); }
.mairie-intro.is-visible .mairie-intro__frame { transition-delay: .1s; }
.mairie-intro.is-visible .mairie-intro__next { transition-delay: .2s; }
.mairie-intro .mairie-intro__eyebrow { transform: translateY(2rem) rotate(180deg); }
.mairie-intro.is-visible .mairie-intro__eyebrow { transform: translateY(0) rotate(180deg); }
.observed.is-visible .story-cover h2, .contents.is-visible .contents__list { transition-delay: .12s; }
.observed.is-visible .story-cover__kicker { transition-delay: .22s; }

@media (max-width: 900px) {
  .site-header { grid-template-columns: 1fr auto; padding-top: 1.1rem; }
  .current-story { display: none; }
  .site-index { padding: 1.1rem var(--gutter) 1.25rem; overflow-y: auto; }
  .site-index__top { grid-template-columns: 1fr auto; }
  .site-index__edition { display: none; }
  .site-index__body { display: block; padding: 5vh 0 3vh; }
  .site-index__preview { display: none; }
  .site-index nav { grid-template-columns: 1fr; }
  .site-index nav a { min-height: 0; grid-template-columns: 2rem minmax(0, 1fr) auto; padding: .82rem 0 .7rem; }
  .site-index nav strong { font-size: clamp(1.45rem, 6.8vw, 2.7rem); }
  .site-index nav small { margin-top: .35rem; }
  .site-index__footer { grid-template-columns: 1fr auto; }
  .site-index__footer span:nth-child(2) { display: none; }
  .cover__diptych { grid-template-columns: 1fr 1fr; gap: 1px; }
  .cover__diptych img:nth-child(1) { object-position: 56% 50%; }
  .cover__diptych img:nth-child(2) { object-position: 46% 20%; }
  .cover h1 { top: 15vh; }
  .cover h1 span { font-size: 9.4vw; white-space: normal; line-height: .82; }
  .cover h1 em { margin-top: 9.2vw; margin-left: 6%; font-size: 11vw; }
  .mairie-intro { padding-top: 12vh; grid-template-columns: 1fr; grid-template-rows: auto minmax(0, 1fr) auto; gap: 2.5vh; }
  .mairie-intro__eyebrow { grid-column: 1; grid-row: 1; writing-mode: horizontal-tb; }
  .mairie-intro__frame { grid-column: 1; grid-row: 2; width: 100%; height: 68vh; }
  .mairie-intro__next { grid-column: 1; grid-row: 3; }
  .mairie-intro .mairie-intro__eyebrow { transform: translateY(2rem); }
  .mairie-intro.is-visible .mairie-intro__eyebrow { transform: translateY(0); }
  .contents { padding-top: 14vh; }
  .contents__heading { grid-template-columns: 1fr auto; }
  .contents__heading h2 { grid-row: 2; grid-column: 1 / 3; padding-top: 1rem; font-size: 17vw; }
  .contents__heading span { grid-column: 2; grid-row: 1; }
  .contents__list a { grid-template-columns: 2.5rem 1fr; padding: 1rem 0; }
  .contents__list strong { font-size: clamp(1.7rem, 7vw, 3rem); }
  .contents__list small { display: none; }
  .story-cover h2 { font-size: 18vw; line-height: .78; }
  .story-cover h2 em { margin-left: 8%; }
  .story--reverse .story-cover h2 em { margin-right: 8%; }
  .story-cover__count { bottom: 5rem; }
  .story-cover__kicker { bottom: 5rem; }
  .story-layout { padding-top: 10vh; }
  .story-layout__header { grid-template-columns: 1fr auto; }
  .story-layout__header h3 { grid-column: 1 / 3; grid-row: 2; padding-top: .9rem; font-size: 10vw; }
  .story-gallery { gap: 8vh 3vw; padding-top: 8vh; }
  .story-photo--1, .story--reverse .story-photo--1 { grid-column: 1 / 10; height: 112vw; }
  .story-photo--2, .story--reverse .story-photo--2 { grid-column: 8 / 13; height: 67vw; margin-top: 29vw; }
  .story-photo--3, .story--reverse .story-photo--3 { grid-column: 1 / 6; height: 76vw; }
  .story-photo--4, .story--reverse .story-photo--4 { grid-column: 6 / 13; height: 98vw; margin-top: 12vw; }
  .story-photo--5 { height: 67vw; }
  .story-photo--6, .story--reverse .story-photo--6 { grid-column: 1 / 7; height: 76vw; }
  .story-photo--7, .story--reverse .story-photo--7 { grid-column: 7 / 13; height: 90vw; }
  .story-photo--8 { grid-column: 1 / 9; height: 105vw; }
  .story-photo--9 { grid-column: 8 / 13; height: 67vw; }
  .story-photo--10 { grid-column: 2 / 12; height: 84vw; }
  #shooting-star .story-photo[data-photo="01"] { grid-column: 1 / 10; height: 112vw; }
  #shooting-star .story-photo[data-photo="02"] { grid-column: 8 / 13; height: 67vw; margin-top: 29vw; }
  #shooting-star .story-photo[data-photo="03"] { grid-column: 1 / 6; height: 76vw; }
  #shooting-star .story-photo[data-photo="04"] { grid-column: 6 / 13; height: 98vw; margin-top: 12vw; }
  #shooting-star .story-photo[data-photo="05"] { grid-column: 1 / 7; height: 92vw; }
  #shooting-star .story-photo[data-photo="06"] { grid-column: 7 / 13; height: 98vw; margin-top: 15vw; }
  #shooting-star .story-photo[data-photo="07"] { grid-column: 2 / 12; height: 125vw; }
  #shooting-star .story-photo[data-photo="08"] { grid-column: 1 / 13; height: 62vw; }
  #shooting-star .story-photo[data-photo="09"] { grid-column: 1 / 7; height: 42vw; }
  #shooting-star .story-photo[data-photo="10"] { grid-column: 7 / 13; height: 42vw; margin-top: 10vw; }
  #shooting-star .story-photo[data-photo="11"] { grid-column: 2 / 12; height: 52vw; }
  #shooting-star .story-photo[data-photo="12"] { grid-column: 1 / 13; height: 62vw; }
  #shooting-star .story-photo[data-photo="13"] { grid-column: 3 / 11; height: 120vw; }
  #preparatifs-marie .story-photo[data-photo="01"] { grid-column: 1 / 10; height: 112vw; }
  #preparatifs-marie .story-photo[data-photo="02"] { grid-column: 8 / 13; height: 67vw; margin-top: 29vw; }
  #preparatifs-marie .story-photo[data-photo="03"] { grid-column: 1 / 6; height: 76vw; }
  #preparatifs-marie .story-photo[data-photo="04"] { grid-column: 6 / 13; height: 98vw; margin-top: 12vw; }
  #preparatifs-marie .story-photo[data-photo="05"] { grid-column: 1 / 13; height: 62vw; }
  #preparatifs-marie .story-photo[data-photo="06"] { grid-column: 1 / 7; height: 92vw; }
  #preparatifs-marie .story-photo[data-photo="07"] { grid-column: 7 / 13; height: 98vw; margin-top: 15vw; }
  #preparatifs-marie .story-photo[data-photo="08"] { grid-column: 1 / 7; height: 42vw; }
  #preparatifs-marie .story-photo[data-photo="09"] { grid-column: 7 / 13; height: 42vw; margin-top: 10vw; }
  #preparatifs-marie .story-photo[data-photo="10"] { grid-column: 2 / 12; height: 52vw; }
  #preparatifs-marie .story-photo[data-photo="11"] { grid-column: 3 / 11; height: 120vw; }
  #saint-paul .story-photo[data-photo="01"] { grid-column: 1 / 10; height: 112vw; }
  #saint-paul .story-photo[data-photo="02"] { grid-column: 8 / 13; height: 67vw; margin-top: 29vw; }
  #saint-paul .story-photo[data-photo="03"] { grid-column: 1 / 6; height: 76vw; }
  #saint-paul .story-photo[data-photo="04"] { grid-column: 6 / 13; height: 98vw; margin-top: 12vw; }
  #saint-paul .story-photo[data-photo="05"] { grid-column: 3 / 11; height: 100vw; }
  #saint-paul .story-photo[data-photo="06"] { grid-column: 1 / 7; height: 92vw; }
  #saint-paul .story-photo[data-photo="07"] { grid-column: 7 / 13; height: 98vw; margin-top: 15vw; }
  #saint-paul .story-photo[data-photo="08"] { grid-column: 2 / 12; height: 125vw; }
  #saint-paul .story-photo[data-photo="09"] { grid-column: 1 / 7; height: 42vw; }
  #saint-paul .story-photo[data-photo="10"] { grid-column: 7 / 13; height: 42vw; margin-top: 10vw; }
  #ceremonie .story-photo[data-photo="01"] { grid-column: 1 / 10; height: 112vw; }
  #ceremonie .story-photo[data-photo="02"] { grid-column: 8 / 13; height: 67vw; margin-top: 29vw; }
  #ceremonie .story-photo[data-photo="03"] { grid-column: 1 / 6; height: 76vw; }
  #ceremonie .story-photo[data-photo="04"] { grid-column: 7 / 12; height: auto; margin-top: 12vw; }
  #ceremonie .story-photo[data-photo="05"] { grid-column: 1 / 7; height: 42vw; }
  #ceremonie .story-photo[data-photo="06"] { grid-column: 7 / 13; height: 42vw; margin-top: 10vw; }
  #ceremonie .story-photo[data-photo="07"] { grid-column: 3 / 11; height: 120vw; }
  #ceremonie .story-photo[data-photo="08"] { grid-column: 1 / 13; height: 62vw; }
  #ceremonie .story-photo[data-photo="09"] { grid-column: 1 / 7; height: 92vw; }
  #ceremonie .story-photo[data-photo="10"] { grid-column: 7 / 13; height: 42vw; margin-top: 18vw; }
  #ceremonie .story-photo[data-photo="11"] { grid-column: 1 / 10; height: 112vw; }
  #ceremonie .story-photo[data-photo="12"] { grid-column: 8 / 13; height: 67vw; margin-top: 29vw; }
  #ceremonie .story-photo[data-photo="13"] { grid-column: 1 / 6; height: 76vw; }
  #ceremonie .story-photo[data-photo="14"] { grid-column: 6 / 13; height: 98vw; margin-top: 12vw; }
  #ceremonie .story-photo[data-photo="15"] { grid-column: 1 / 13; height: 62vw; }
  #ceremonie .story-photo[data-photo="16"] { grid-column: 1 / 7; height: 92vw; }
  #ceremonie .story-photo[data-photo="17"] { grid-column: 7 / 13; height: 98vw; margin-top: 15vw; }
  #ceremonie .story-photo[data-photo="18"] { grid-column: 1 / 6; height: 76vw; }
  #ceremonie .story-photo[data-photo="19"] { grid-column: 6 / 13; height: 98vw; margin-top: 12vw; }
  #ceremonie .story-photo[data-photo="20"] { grid-column: 1 / 13; height: 62vw; }
  #ceremonie .story-photo[data-photo="21"] { grid-column: 3 / 11; height: 120vw; }
  #ceremonie .story-photo[data-photo="22"] { grid-column: 1 / 13; height: 62vw; }
  #ceremonie .story-photo[data-photo="23"] { grid-column: 1 / 10; height: 112vw; }
  #ceremonie .story-photo[data-photo="24"] { grid-column: 8 / 13; height: 67vw; margin-top: 29vw; }
  #ceremonie .story-photo[data-photo="25"] { grid-column: 3 / 11; height: 120vw; }
  #ceremonie .story-photo[data-photo="26"] { grid-column: 1 / 7; height: 42vw; }
  #ceremonie .story-photo[data-photo="27"] { grid-column: 7 / 13; height: 42vw; margin-top: 10vw; }
  #ceremonie .story-photo[data-photo="28"] { grid-column: 3 / 11; height: 120vw; }
  .story-photo__view { display: none; }
  .lightbox__stage { padding: 4rem 1rem; grid-template-columns: 2.5rem minmax(0, 1fr) 2.5rem; }
  .lightbox img { max-width: calc(100vw - 7rem); max-height: min(76svh, calc(100svh - 11rem)); }
  .lightbox__arrow { padding: .25rem; }
}

@media (max-width: 520px) {
  .site-index nav a { padding: .66rem 0 .58rem; }
  .site-index nav strong { font-size: clamp(1.25rem, 6.2vw, 1.8rem); }
  .site-index nav small { font-size: .42rem; }
  .site-index__footer { font-size: .42rem; }
  .cover__bottom { bottom: 1.25rem; }
  .cover__bottom p { font-size: .85rem; }
  .cover__bottom a { font-size: .49rem; }
  .story-cover__number { top: 11vh; }
  .story-cover__kicker { max-width: 45%; }
  .story-photo figcaption { font-size: .44rem; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
  .observed * { opacity: 1 !important; transform: none !important; }
}

/* Phone edition. All rules are isolated: the desktop composition above is unchanged. */
@media (max-width: 600px), (max-width: 950px) and (max-height: 500px) and (pointer: coarse) {
  :root { --gutter: clamp(20px, 5.1vw, 30px); }
  html { scroll-padding-top: 68px; }
  .site-header, .site-header[data-tone="light"] {
    grid-template-columns: 1fr auto;
    height: calc(64px + env(safe-area-inset-top, 0px));
    padding: env(safe-area-inset-top, 0px) var(--gutter) 0;
    align-items: center;
    color: var(--ink);
    background: rgba(246, 244, 239, .96);
    border-bottom: 1px solid rgba(14, 14, 13, .08);
    backdrop-filter: blur(12px);
  }
  .site-header[data-cover="true"] {
    color: var(--white);
    background: transparent;
    border-bottom-color: transparent;
    backdrop-filter: none;
    text-shadow: 0 1px 10px rgba(0, 0, 0, .22);
  }
  .masthead { min-height: 44px; align-items: center; }
  .masthead > span { font-size: 27px; }
  .index-toggle { min-height: 44px; padding: 0; border: 0; font-size: 10px; letter-spacing: .14em; opacity: 1; }
  .index-toggle span { margin-left: 8px; font-size: 14px; }
  .current-story { display: none; }

  /* A quiet, scrollable index with a permanently reachable close button. */
  .site-index {
    height: 100dvh;
    padding: env(safe-area-inset-top, 0px) var(--gutter) max(16px, env(safe-area-inset-bottom, 0px));
    overflow: hidden;
    transition-duration: 450ms;
  }
  .site-index__top { grid-template-columns: 1fr auto; min-height: 64px; align-items: center; padding: 0; font-size: 12px; }
  .site-index__edition, .site-index__preview { display: none; }
  .index-close { min-height: 44px; font-size: 10px; }
  .index-close span { width: 28px; height: 28px; }
  .site-index__body { display: block; overflow-y: auto; overscroll-behavior: contain; padding: 16px 0 24px; }
  .site-index nav { grid-template-columns: minmax(0, 1fr); }
  .site-index nav a { grid-template-columns: 28px minmax(0, 1fr); grid-template-rows: auto; align-items: baseline; min-height: 58px; padding: 14px 0; }
  .site-index nav .chapter-number { font-size: 9px; }
  .site-index nav strong { grid-column: 2; font-size: clamp(23px, 6.6vw, 31px); line-height: 1.08; letter-spacing: -.035em; }
  .site-index nav small { display: none; }
  .site-index nav a:hover, .site-index nav a:focus-visible { padding-left: 4px; }
  .site-index__footer { grid-template-columns: 1fr auto; padding-top: 16px; font-size: 8px; line-height: 1.5; }
  .site-index__footer span:nth-child(2) { display: none; }

  /* Full-screen diptych, with the title above the faces and controls at the edges. */
  .cover {
    min-height: 100svh;
    height: 100svh;
    display: block;
    padding: 0;
    color: var(--white);
    background: var(--ink);
  }
  .cover h1 { position: absolute; inset: auto var(--gutter); top: calc(clamp(84px, 11svh, 116px) + env(safe-area-inset-top, 0px)); margin: 0; text-shadow: 0 2px 16px rgba(0, 0, 0, .16); }
  .cover h1 span { font-size: clamp(27px, 8.7vw, 50px); line-height: .95; white-space: nowrap; letter-spacing: -.035em; }
  .cover h1 em { font-size: clamp(42px, 13.4vw, 76px); line-height: .85; margin: 24px 0 0 9%; }
  .cover__diptych { position: absolute; inset: 0; aspect-ratio: auto; width: 100%; height: 100%; gap: 1px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .cover__diptych img { min-width: 0; object-fit: cover; transform: none; }
  .cover__diptych img:nth-child(1) { object-position: 44% 36%; }
  .cover__diptych img:nth-child(2) { object-position: 49% 20%; }
  .cover__veil { display: block; background: linear-gradient(180deg, rgba(0,0,0,.3), rgba(0,0,0,.05) 25%, transparent 50%, rgba(0,0,0,.08) 72%, rgba(0,0,0,.48)); }
  .cover__bottom { position: absolute; left: var(--gutter); right: var(--gutter); bottom: max(24px, env(safe-area-inset-bottom, 0px)); margin: 0; padding: 0; gap: 16px; align-items: end; }
  .cover__bottom p { font-size: 14px; }
  .cover__bottom a { min-height: 44px; max-width: 60%; font-size: 8px; line-height: 1.5; letter-spacing: .1em; gap: 10px; }

  /* Location photographs are interludes, not tall crops. */
  .mairie-intro { min-height: 0; padding: 64px var(--gutter) 48px; gap: 24px; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto auto; }
  .mairie-intro__eyebrow { grid-column: 1; grid-row: 1; writing-mode: horizontal-tb; font-size: 9px; line-height: 1.6; letter-spacing: .13em; }
  .mairie-intro .mairie-intro__eyebrow, .mairie-intro.is-visible .mairie-intro__eyebrow { transform: none; }
  .mairie-intro__eyebrow span { margin: 0 12px 0 0; }
  .mairie-intro__frame { grid-column: 1; grid-row: 2; height: auto; width: 100%; grid-template-rows: auto auto; gap: 12px; }
  .mairie-intro__frame img { height: auto; object-fit: contain; }
  .mairie-intro__frame figcaption { font-size: 15px; }
  .mairie-intro__next { grid-column: 1; grid-row: 3; min-height: 44px; font-size: 9px; padding: 0; }

  /* Keep the desktop banners and photo treatment; only adapt their typography. */
  .story { scroll-margin-top: -68px; }
  .story-cover__number { top: max(90px, 12svh); font-size: 9px; line-height: 1.5; letter-spacing: .2em; }
  #mairie .story-cover__number { top: max(72px, 9svh); }
  #mairie .story-cover > img { object-position: 42% var(--cover-focus-y, center); }
  #ceremonie .story-cover > img { object-position: 18% var(--cover-focus-y, center); }
  #famille .story-cover > img { object-position: 32% var(--cover-focus-y, center); }
  .story-cover h2 {
    top: auto;
    bottom: 14%;
    font-size: clamp(46px, 15vw, 80px);
    line-height: .88;
    letter-spacing: -.045em;
    text-wrap: balance;
    transform: none;
  }
  #shooting-star .story-cover__number { top: 80px; }
  #shooting-star .story-cover h2 { top: max(104px, 12.5svh); bottom: auto; font-size: min(15vw, 7svh); }
  #preparatifs-mariee .story-cover h2,
  #preparatifs-marie .story-cover h2 { font-size: clamp(38px, 12.1vw, 66px); }
  #preparatifs-marie .story-cover h2 { bottom: 20%; }
  #saint-paul .story-cover h2 { max-width: 9ch; font-size: clamp(42px, 13.6vw, 74px); line-height: .98; overflow-wrap: anywhere; }
  #famille .story-cover h2 { bottom: auto; }
  .story--prints .story-cover h2 { font-size: clamp(24px, 7.7vw, 46px); }
  .story-cover__kicker { bottom: max(28px, env(safe-area-inset-bottom, 0px)); max-width: 45%; font-size: 14px; line-height: 1.4; }
  .story-cover__count { bottom: max(28px, env(safe-area-inset-bottom, 0px)); font-size: 8px; line-height: 1.5; letter-spacing: .12em; }

  /* Natural ratios, generous landscapes, and occasional staggered portrait pairs. */
  #stories .story .story-layout { padding: 44px var(--gutter) 40px; }
  #stories .story .story-layout__header { grid-template-columns: auto 1fr; gap: 10px 12px; padding-bottom: 16px; }
  .story-layout__header p, .story-layout__header span { font-size: 8px; line-height: 1.5; letter-spacing: .12em; }
  #stories .story .story-layout__header h3 { grid-column: 1 / -1; grid-row: 2; padding: 0; font-size: clamp(26px, 8.3vw, 43px); line-height: 1.1; text-wrap: balance; }
  #stories .story .story-gallery { grid-template-columns: repeat(12, minmax(0, 1fr)); align-items: start; grid-auto-flow: row; gap: clamp(24px, 6.4vw, 32px) clamp(3px, 1.2vw, 6px); padding-top: 28px; }
  #stories .story .story-gallery .story-photo {
    grid-column: var(--phone-column, 1 / -1);
    grid-row: auto;
    width: 100%;
    min-width: 0;
    max-width: none;
    height: auto;
    min-height: 0;
    max-height: none;
    margin: min(calc(var(--phone-offset, 0px) * .5), 50px) 0 0;
    justify-self: stretch;
    align-self: start;
  }
  #stories .story .story-gallery .story-photo__media { height: auto; overflow: hidden; background: transparent; }
  #stories .story .story-gallery .story-photo img { height: auto; object-fit: contain; transform: none; }
  /* Desktop columns, natural image ratios, and half-sized vertical offsets. */
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--1 { --phone-column: 1 / 8; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--2 { --phone-column: 9 / 13; --phone-offset: 18vw; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--3 { --phone-column: 2 / 6; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--4 { --phone-column: 7 / 13; --phone-offset: 9vw; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--5 { --phone-column: 1 / 13; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--6 { --phone-column: 1 / 5; --phone-offset: 12vw; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--7 { --phone-column: 6 / 11; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--8 { --phone-column: 2 / 7; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--9 { --phone-column: 8 / 13; --phone-offset: 14vw; }
  #stories :is(#mairie, #preparatifs-mariee) .story-photo--10 { --phone-column: 3 / 11; }

  #stories :is(#shooting-star, #preparatifs-marie, #saint-paul, #ceremonie) .story-photo[data-photo="01"] { --phone-column: 1 / 8; }
  #stories :is(#shooting-star, #preparatifs-marie, #saint-paul, #ceremonie) .story-photo[data-photo="02"] { --phone-column: 9 / 13; --phone-offset: 18vw; }
  #stories :is(#shooting-star, #preparatifs-marie, #saint-paul, #ceremonie) .story-photo[data-photo="03"] { --phone-column: 2 / 6; }
  #stories :is(#shooting-star, #preparatifs-marie, #saint-paul) .story-photo[data-photo="04"] { --phone-column: 7 / 13; --phone-offset: 8vw; }

  #stories #shooting-star .story-photo[data-photo="05"] { --phone-column: 1 / 6; }
  #stories #shooting-star .story-photo[data-photo="06"] { --phone-column: 7 / 13; --phone-offset: 8vw; }
  #stories #shooting-star .story-photo[data-photo="07"] { --phone-column: 3 / 11; }
  #stories #shooting-star .story-photo[data-photo="08"] { --phone-column: 1 / 13; }
  #stories #shooting-star .story-photo[data-photo="09"] { --phone-column: 1 / 7; }
  #stories #shooting-star .story-photo[data-photo="10"] { --phone-column: 7 / 13; --phone-offset: 10vw; }
  #stories #shooting-star .story-photo[data-photo="11"] { --phone-column: 2 / 12; }
  #stories #shooting-star .story-photo[data-photo="12"] { --phone-column: 1 / 13; }
  #stories #shooting-star .story-photo[data-photo="13"] { --phone-column: 4 / 10; }

  #stories #preparatifs-marie .story-photo[data-photo="05"] { --phone-column: 1 / 13; }
  #stories #preparatifs-marie .story-photo[data-photo="06"] { --phone-column: 1 / 6; }
  #stories #preparatifs-marie .story-photo[data-photo="07"] { --phone-column: 7 / 13; --phone-offset: 8vw; }
  #stories #preparatifs-marie .story-photo[data-photo="08"] { --phone-column: 1 / 7; }
  #stories #preparatifs-marie .story-photo[data-photo="09"] { --phone-column: 7 / 13; --phone-offset: 10vw; }
  #stories #preparatifs-marie .story-photo[data-photo="10"] { --phone-column: 2 / 12; }
  #stories #preparatifs-marie .story-photo[data-photo="11"] { --phone-column: 4 / 10; }

  #stories #saint-paul .story-photo[data-photo="05"] { --phone-column: 4 / 10; }
  #stories #saint-paul .story-photo[data-photo="06"] { --phone-column: 1 / 6; }
  #stories #saint-paul .story-photo[data-photo="07"] { --phone-column: 7 / 13; --phone-offset: 8vw; }
  #stories #saint-paul .story-photo[data-photo="08"] { --phone-column: 3 / 11; }
  #stories #saint-paul .story-photo[data-photo="09"] { --phone-column: 1 / 7; }
  #stories #saint-paul .story-photo[data-photo="10"] { --phone-column: 7 / 13; --phone-offset: 10vw; }

  #stories #ceremonie .story-photo[data-photo="04"] { --phone-column: 8 / 12; --phone-offset: 8vw; }
  #stories #ceremonie .story-photo[data-photo="05"] { --phone-column: 1 / 7; }
  #stories #ceremonie .story-photo[data-photo="06"] { --phone-column: 7 / 13; --phone-offset: 8vw; }
  #stories #ceremonie .story-photo[data-photo="07"] { --phone-column: 4 / 10; }
  #stories #ceremonie .story-photo[data-photo="08"] { --phone-column: 1 / 13; }
  #stories #ceremonie .story-photo[data-photo="09"] { --phone-column: 1 / 6; }
  #stories #ceremonie .story-photo[data-photo="10"] { --phone-column: 7 / 13; --phone-offset: 14vw; }
  #stories #ceremonie .story-photo[data-photo="11"] { --phone-column: 1 / 8; }
  #stories #ceremonie .story-photo[data-photo="12"] { --phone-column: 9 / 13; --phone-offset: 18vw; }
  #stories #ceremonie .story-photo[data-photo="13"] { --phone-column: 2 / 6; }
  #stories #ceremonie .story-photo[data-photo="14"] { --phone-column: 7 / 13; --phone-offset: 8vw; }
  #stories #ceremonie .story-photo[data-photo="15"] { --phone-column: 1 / 13; }
  #stories #ceremonie .story-photo[data-photo="16"] { --phone-column: 1 / 6; }
  #stories #ceremonie .story-photo[data-photo="17"] { --phone-column: 7 / 13; --phone-offset: 8vw; }
  #stories #ceremonie .story-photo[data-photo="18"] { --phone-column: 2 / 6; }
  #stories #ceremonie .story-photo[data-photo="19"] { --phone-column: 7 / 13; --phone-offset: 10vw; }
  #stories #ceremonie .story-photo[data-photo="20"] { --phone-column: 1 / 13; }
  #stories #ceremonie .story-photo[data-photo="21"] { --phone-column: 4 / 10; }
  #stories #ceremonie .story-photo[data-photo="22"] { --phone-column: 2 / 12; }
  #stories #ceremonie .story-photo[data-photo="23"] { --phone-column: 1 / 8; }
  #stories #ceremonie .story-photo[data-photo="24"] { --phone-column: 9 / 13; --phone-offset: 18vw; }
  #stories #ceremonie .story-photo[data-photo="25"] { --phone-column: 4 / 10; }
  #stories #ceremonie .story-photo[data-photo="26"] { --phone-column: 1 / 7; }
  #stories #ceremonie .story-photo[data-photo="27"] { --phone-column: 7 / 13; --phone-offset: 10vw; }
  #stories #ceremonie .story-photo[data-photo="28"] { --phone-column: 4 / 10; }

  #stories .story--family .story-photo { --phone-column: var(--family-column, 1 / -1); --phone-offset: var(--family-offset, 0px); }
  #stories .story--festivities .story-photo { --phone-column: var(--festivities-column, 1 / -1); --phone-offset: var(--festivities-offset, 0px); }
  #stories .story--honeymoon .story-photo { --phone-column: var(--honeymoon-column, 1 / -1); --phone-offset: var(--honeymoon-offset, 0px); }
  #stories .story .story-photo figcaption { padding-top: 9px; font-size: 8px; letter-spacing: .12em; line-height: 1.4; }
  #stories .story--prints .story-gallery { gap: 22px 12px; }
  #stories .story--prints .story-gallery .story-photo { grid-column: span 6; width: 100%; margin: 0; }
  #stories .story--prints .story-gallery .story-photo:nth-child(even) { margin-top: 20px; }
  .story-photo__view { display: none; }
  .story-end { margin-top: 48px; padding-top: 8px; align-items: center; gap: 12px; font-size: 8px; letter-spacing: .1em; }
  .story-end a { display: inline-flex; align-items: center; min-height: 44px; padding: 0; }

  /* Photos use the phone's width; navigation sits below, not in wide side gutters. */
  .lightbox__stage { grid-template-columns: minmax(0, 1fr); padding: max(64px, env(safe-area-inset-top, 0px)) 16px max(112px, env(safe-area-inset-bottom, 0px)); }
  .lightbox img { max-width: calc(100vw - 32px); max-height: calc(100dvh - 224px); }
  .lightbox.is-expanded .lightbox__stage { grid-template-columns: minmax(0, 1fr); padding: max(56px, env(safe-area-inset-top, 0px)) 6px max(72px, env(safe-area-inset-bottom, 0px)); }
  .lightbox.is-expanded img { max-width: calc(100vw - 12px); max-height: calc(100dvh - 176px); }
  .lightbox__close { top: max(8px, env(safe-area-inset-top, 0px)); right: 20px; min-height: 44px; font-size: 10px; }
  .lightbox .lightbox__arrow, .lightbox.is-expanded .lightbox__arrow { position: absolute; top: auto; bottom: max(52px, env(safe-area-inset-bottom, 0px)); width: 48px; height: 44px; padding: 0; transform: none; background: none; }
  .lightbox .lightbox__arrow--prev, .lightbox.is-expanded .lightbox__arrow--prev { left: calc(50% - 60px); }
  .lightbox .lightbox__arrow--next, .lightbox.is-expanded .lightbox__arrow--next { left: calc(50% + 12px); right: auto; }
  .lightbox.is-expanded .lightbox__arrow { bottom: 20px; }
  .lightbox__caption { left: 20px; bottom: 20px; font-size: 12px; }
  .lightbox__download { font-size: 9px; }
  .lightbox__download-label { display: inline; }
  .lightbox__photo { gap: 4px; }
}

@media (max-width: 950px) and (max-height: 500px) and (pointer: coarse) {
  .cover h1 { top: 80px; }
  .cover h1 span { font-size: 36px; }
  .cover h1 em { font-size: 52px; margin-top: 20px; }
  .story-cover__number { top: 80px; }
  .story-cover h2 { font-size: clamp(46px, 12svh, 64px); }
  #shooting-star .story-cover h2 { top: auto; bottom: 22%; font-size: clamp(40px, 12svh, 64px); }
  #preparatifs-mariee .story-cover h2,
  #preparatifs-marie .story-cover h2,
  #saint-paul .story-cover h2 { font-size: clamp(38px, 11svh, 56px); }
  #famille .story-cover h2 { top: 32%; }
  .lightbox__stage, .lightbox.is-expanded .lightbox__stage { padding: 44px 60px 44px; }
  .lightbox img, .lightbox.is-expanded img { max-width: calc(100vw - 120px); max-height: calc(100dvh - 138px); }
  .lightbox.is-expanded .lightbox__stage { padding: 36px 60px 28px; }
  .lightbox.is-expanded img { max-height: calc(100dvh - 112px); }
  .lightbox .lightbox__arrow, .lightbox.is-expanded .lightbox__arrow { top: calc(50% - 22px); bottom: auto; }
  .lightbox .lightbox__arrow--prev, .lightbox.is-expanded .lightbox__arrow--prev { left: 4px; }
  .lightbox .lightbox__arrow--next, .lightbox.is-expanded .lightbox__arrow--next { left: auto; right: 4px; }
  .lightbox__caption { bottom: 8px; }
}
