/* Cartes de campagne : lecture horizontale et images entières. */
.campaign-grid.campaign-cards{--card-width:min(560px,68vw);display:flex;align-items:center;gap:24px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain;margin-top:40px;padding:24px calc((100% - var(--card-width))/2) 28px}
.campaign-cards::-webkit-scrollbar{display:none}
.campaign-cards .campaign-main,.campaign-cards .campaign-side{flex:0 0 var(--card-width);width:var(--card-width);min-width:0;grid-column:auto;grid-row:auto;margin:0;scroll-snap-align:center;transform:scale(.94);transition:transform .3s ease,opacity .4s ease;cursor:zoom-in}
.campaign-cards .campaign-main.is-active,.campaign-cards .campaign-side.is-active{transform:scale(1)}
.campaign-cards .campaign-main img,.campaign-cards .campaign-side img{display:block;width:100%;height:auto;min-height:0;max-height:none;aspect-ratio:auto;object-fit:contain;border-radius:12px;background:transparent}
.campaign-cards .campaign-main figcaption,.campaign-cards .campaign-side figcaption{position:static;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:14px 4px 0;background:none;color:inherit;font-size:14px;line-height:1.5}
.campaign-controls{display:flex;justify-content:center;gap:4px}
.campaign-controls button{display:grid;place-items:center;flex:0 0 44px;width:44px;height:44px;padding:0;border:0;background:transparent;cursor:pointer}
.campaign-controls span{width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.45}
.campaign-controls button[aria-pressed="true"] span{opacity:1;transform:scale(1.4)}
.campaign-controls button:focus-visible,.campaign-cards:focus-visible,.campaign-cards figure:focus-visible{outline:2px solid currentColor;outline-offset:3px}
@media(max-width:700px){.campaign-grid.campaign-cards{--card-width:78vw;gap:12px;margin-left:calc(-1 * var(--pad));margin-right:calc(-1 * var(--pad));padding-inline:11vw}.campaign-cards .campaign-main figcaption,.campaign-cards .campaign-side figcaption{font-size:14px}}
@media(prefers-reduced-motion:reduce){.campaign-cards .campaign-main,.campaign-cards .campaign-side{transition:none}}
/* L’affiche d’ouverture conserve son format et occupe toute la largeur mobile. */
@media(max-width:700px){body[data-project="crostella"] .universe-opening .universe-art{width:100%;height:auto;min-height:0;max-height:none}body[data-project="crostella"] .universe-opening .universe-art img{position:static;display:block;width:100%;height:auto;max-height:none;object-fit:cover}}
