/* Product pages (slice A): lists, product page, ski, rentals, best deals, landings. */

/* Ski lists: destinations (path of links, then columns). */
.ski-locations-path { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .5rem; font-weight: 800; font-size: 1.05rem; margin: 0 0 .75rem; }
.ski-locations-path a { color: var(--voy-navy); }
.ski-locations-path a:last-child { color: var(--voy-primary-dark); }
.ski-locations-path .bi { color: var(--voy-cyan); font-size: .8rem; }
.ski-locations .link-columns + .ski-locations-path { margin-top: 1.25rem; }

/* Product page: head meta and price */
.product-head-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem 1.1rem; margin-top: .55rem; color: var(--voy-muted); font-size: .93rem; }
.product-head-meta .offer-stars { font-size: .95rem; }
.product-head-location .bi { color: var(--voy-primary); }
.product-head-price { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: .5rem; text-align: right; }
.product-head-price .offer-price { align-items: flex-end; }
.offer-badge.position-static { display: inline-block; }
@media (max-width: 767.98px) {
    .product-head-price { flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: space-between; text-align: left; border-top: 1px solid var(--voy-line-soft); padding-top: .85rem; }
    .product-head-price .offer-price { align-items: flex-start; }
}

/* Gallery */
.product-gallery { position: relative; margin-bottom: 1.75rem; }
.product-gallery .swiper { border-radius: var(--card-radius); }
.product-gallery-item { display: block; width: 100%; aspect-ratio: 3 / 2; border-radius: var(--card-radius); overflow: hidden; background: var(--voy-surface); }
.product-gallery-item img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.product-gallery-item:hover img { transform: scale(1.03); }
.product-gallery-nav { position: absolute; top: 50%; z-index: 3; transform: translateY(-50%); box-shadow: var(--shadow-hover); }
.product-gallery-nav.swiper-nav-prev { left: .75rem; }
.product-gallery-nav.swiper-nav-next { right: .75rem; }
.product-gallery-nav.swiper-button-disabled { opacity: 0; }
@media (max-width: 767.98px) { .product-gallery-nav { display: none; } }
.gallery-dialog { border: 0; padding: 0; background: transparent; max-width: 100vw; max-height: 100vh; width: 100vw; height: 100vh; margin: 0; }
.gallery-dialog::backdrop { background: rgba(3, 22, 45, .9); }
.gallery-dialog[open] { display: flex; align-items: center; justify-content: center; }
.gallery-figure { margin: 0; display: flex; flex-direction: column; align-items: center; gap: .5rem; max-width: min(92vw, 1200px); }
.gallery-figure img { max-width: 100%; max-height: 82vh; border-radius: 10px; object-fit: contain; }
.gallery-figure figcaption { color: #fff; font-size: .9rem; }
.gallery-dialog button { position: fixed; border: 0; background: rgba(255, 255, 255, .14); color: #fff; width: 3rem; height: 3rem; border-radius: 50%; font-size: 1.8rem; line-height: 1; }
.gallery-dialog button:hover { background: rgba(255, 255, 255, .28); }
.gallery-dialog button:focus-visible { outline: 3px solid #fff; outline-offset: 2px; }
.gallery-close { top: 1rem; right: 1rem; }
.gallery-prev { left: 1rem; top: 50%; transform: translateY(-50%); }
.gallery-next { right: 1rem; top: 50%; transform: translateY(-50%); }

/* Layout: content and sticky price card */
.product-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 22rem); gap: 1.75rem; align-items: start; }
.product-main { display: grid; gap: 1.25rem; min-width: 0; }
.product-aside { position: sticky; top: 1rem; }
@media (max-width: 991.98px) { .product-layout { grid-template-columns: minmax(0, 1fr); } .product-aside { position: static; order: -1; } }
.product-block-title { font-size: 1.2rem; font-weight: 800; color: var(--voy-navy); margin: 0 0 .85rem; }
.product-overview-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; }
.product-action.offer-favorite { background: var(--voy-surface); box-shadow: none; }
.product-facts { display: flex; flex-wrap: wrap; gap: .6rem; margin: 0 0 1rem; }
.product-facts li { display: inline-flex; align-items: center; gap: .45rem; background: var(--voy-section); border: 1px solid var(--voy-line-soft); border-radius: var(--radius-chip); padding: .4rem .75rem; font-weight: 700; color: var(--voy-navy); font-size: .92rem; }
.product-facts .bi { color: var(--voy-primary); }
.product-text { color: #33485f; font-size: .96rem; line-height: 1.6; overflow-wrap: anywhere; }
.product-text img { max-width: 100%; height: auto; }
.product-text table { max-width: 100%; display: block; overflow-x: auto; }
.product-text > :last-child { margin-bottom: 0; }
.product-short { font-size: 1rem; }
.product-themes { margin: 0; }
.product-feature + .product-feature { margin-top: 1.1rem; padding-top: 1.1rem; border-top: 1px solid var(--voy-line-soft); }
.product-feature-title { font-size: 1rem; font-weight: 800; color: var(--voy-navy); margin-bottom: .45rem; }
.product-feature-list { padding-left: 1.2rem; margin: 0; color: #33485f; font-size: .94rem; }
.product-feature-list li { margin: .2rem 0; }
.product-booking { background: #fff; border: 1px solid var(--voy-line); border-radius: var(--card-radius); box-shadow: var(--shadow-soft); padding: 1.25rem 1.25rem 1rem; display: flex; flex-direction: column; gap: .8rem; }
.product-booking-title { font-weight: 800; color: var(--voy-navy); font-size: 1.05rem; margin: 0; }
.product-booking-promo { margin: 0; }
.product-booking-price { align-items: flex-start; }
.product-price-big { font-size: 1.9rem; }
.product-booking-details { display: grid; gap: .45rem; margin: .25rem 0; font-size: .92rem; color: #3b5068; }
.product-booking-details li { display: flex; gap: .5rem; align-items: center; }
.product-booking-details .bi { color: var(--voy-primary); }
.product-booking-ref { margin: 0; text-align: center; font-size: .8rem; color: var(--voy-muted); }
.product-aside .share-links { justify-content: center; }

/* Prices: search form and table */
.price-search { background: #fff; border: 1px solid var(--voy-line); border-radius: var(--card-radius); box-shadow: var(--shadow-soft); padding: 1rem 1.25rem; margin-bottom: 1rem; }
.price-search .form-label { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--voy-navy); margin-bottom: .3rem; }
.price-search .form-control, .price-search .form-select, .price-search-submit { min-height: 2.75rem; }
.price-table-card { padding: .5rem 1rem; }
.price-table-card[aria-busy="true"] { opacity: .55; }
.price-table { margin: 0; --bs-table-bg: transparent; font-size: .92rem; }
.price-table thead th { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--voy-muted); border-bottom-color: var(--voy-line); white-space: nowrap; }
.price-table td { border-bottom-color: var(--voy-line-soft); color: #33485f; }
.price-table tbody tr:hover td { background: var(--voy-section); }
.price-table-discount { display: inline-block; background: var(--voy-promo-dark); color: #fff; font-weight: 800; font-size: .8rem; border-radius: 6px; padding: .15rem .45rem; }
.price-table-price { display: block; font-weight: 800; font-size: 1.1rem; color: var(--voy-navy); white-space: nowrap; }
.price-table-price.is-promo { color: var(--voy-promo-dark); }
.price-table-old, .price-table-saving { display: block; font-size: .74rem; color: var(--voy-muted); white-space: nowrap; }
.price-table-cta { white-space: nowrap; display: inline-flex; align-items: center; }
.price-table-more { margin: .75rem auto .5rem; display: flex; align-items: center; }
.price-table-more[hidden] { display: none; }
.price-table-empty { margin: 1rem 0; text-align: center; color: var(--voy-muted); }
@media (max-width: 767.98px) {
    /* Phones: each price as a compact card: details on the left, promo, price and "Réservez" on the right. */
    .price-table-card { padding: .25rem .85rem; }
    .price-table thead { display: none; }
    .price-table, .price-table tbody { display: block; width: 100%; }
    .price-table-product tr { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: .75rem; align-items: start; padding: .75rem 0; border-bottom: 1px solid var(--voy-line-soft); }
    .price-table tr:last-child { border-bottom: 0; }
    .price-table tr[hidden] { display: none; }
    .price-table td { display: block; border: 0; padding: 0; text-align: left !important; font-size: .86rem; line-height: 1.45; }
    .price-table tbody tr:hover td { background: transparent; }
    .price-table-product td:nth-child(-n+4) { grid-column: 1; }
    .price-table-product td:nth-child(1) { grid-row: 1; font-weight: 700; color: var(--voy-navy); }
    .price-table-product td:nth-child(2) { grid-row: 2; }
    .price-table-product td:nth-child(3) { grid-row: 3; }
    .price-table-product td:nth-child(4) { grid-row: 4; color: var(--voy-muted); }
    .price-table-product td:nth-child(n+5) { grid-column: 2; text-align: right !important; }
    .price-table-product td:nth-child(5) { grid-row: 1; }
    .price-table-product td:nth-child(6) { grid-row: 2 / span 2; }
    .price-table-product td:nth-child(7) { grid-row: 4; }
    .price-table-product td:nth-child(2):not(:empty)::before { content: "Départ de "; color: var(--voy-muted); }
    .price-table-old, .price-table-saving { white-space: normal; }
    .price-table-cta { margin-top: .25rem; }
}
@media (prefers-reduced-motion: reduce) { .product-gallery-item img { transition: none; } }

/* Below lg the price card follows the gallery right away: no second price in the head band. */
@media (max-width: 991.98px) { .page-product .product-head-price { display: none; } }

/* Holiday rentals (/locations-vacances/) */
.rentals-points { display: flex; flex-wrap: wrap; gap: .5rem 1.5rem; margin: 1rem 0 0; color: var(--voy-navy); font-weight: 600; font-size: .95rem; }
.rentals-points li { display: flex; align-items: center; gap: .45rem; }
.rentals-points .bi { color: var(--voy-primary); }
.rentals-points-value { font-weight: 900; font-size: 1.25rem; color: var(--voy-navy); }
.rentals-photo { flex: 0 1 26rem; min-width: 0; }
.rentals-photo img { display: block; width: 100%; height: auto; aspect-ratio: 1920 / 500; object-fit: cover; border-radius: var(--card-radius); }
@media (max-width: 767.98px) { .rentals-photo { order: -1; flex-basis: auto; } }
.rentals-frame { background: #fff; border: 1px solid var(--voy-line); border-radius: var(--card-radius); box-shadow: var(--shadow-soft); overflow: hidden; }
.rentals-frame iframe { display: block; width: 100%; border: 0; }

/* Best deals: cards, company logo, summary table */
.best-deal-text { font-size: .85rem; color: var(--voy-muted); margin: 0 0 .75rem; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.company-head-logo { flex: 0 0 auto; background: #fff; border: 1px solid var(--voy-line); border-radius: var(--card-radius); padding: .75rem 1rem; box-shadow: var(--shadow-soft); }
.company-head-logo img { display: block; max-width: 11rem; max-height: 5.5rem; width: auto; height: auto; object-fit: contain; }
@media (max-width: 767.98px) { .company-head-logo { order: -1; align-self: flex-start; padding: .5rem .75rem; } .company-head-logo img { max-width: 8rem; max-height: 4rem; } }
@media (max-width: 767.98px) {
    .summary-table tr { display: block; padding: .6rem 0; border-bottom: 1px solid var(--voy-line-soft); }
    .summary-table td { display: flex; justify-content: space-between; gap: 1rem; }
    .summary-table td[data-label]::before { content: attr(data-label); color: var(--voy-muted); font-size: .8rem; }
    .summary-table .price-table-price { display: inline; }
}
.page-text h2, .page-text h3 { color: var(--voy-navy); font-weight: 800; font-size: 1.15rem; margin: 1.1rem 0 .5rem; }
.page-text h2:first-child, .page-text h3:first-child { margin-top: 0; }
.best-deal-photo { display: block; }
.best-deal-check { display: flex; align-items: center; font-weight: 700; color: var(--voy-navy); margin-bottom: .9rem; }
.best-deal-check .bi { color: var(--voy-primary); }
.best-deal-list { display: grid; gap: .4rem; margin: .5rem 0 0; }
.best-deal-list li { display: flex; gap: .5rem; align-items: flex-start; color: #33485f; font-size: .94rem; }
.best-deal-list .bi { color: var(--voy-primary); margin-top: .2rem; }
@media (min-width: 768px) { .best-deal-features { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.5rem; } .best-deal-features .product-feature + .product-feature { margin-top: 0; padding-top: 0; border-top: 0; } }

/* Hotels: Expedia widget */
.hotels-widget #searchWidget { width: 100%; height: 600px; background: #fff; border: 1px solid var(--voy-line); border-radius: var(--card-radius); overflow: hidden; box-shadow: var(--shadow-soft); }
.hotels-widget iframe { display: block; border: 0; }

/* Destinations */
.destination-countries { display: grid; gap: 1.25rem; }
.destination-country { scroll-margin-top: 1rem; }
.destination-country-title { font-size: 1.35rem; font-weight: 800; margin: 0 0 .75rem; }
.destination-country-title a { color: var(--voy-navy); }
.destination-regions { display: grid; gap: 1rem 2rem; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); }
.destination-region-title { font-size: 1rem; font-weight: 800; margin: 0 0 .35rem; }
.destination-region-title a { color: var(--voy-primary-dark); }
.destination-cities { columns: 2 9rem; font-size: .92rem; }

/* Flight landings (/vols-index/, /vols/comparateur-billets-avion) */
.flight-dest-grid { display: grid; gap: 1rem; grid-template-columns: repeat(6, minmax(0, 1fr)); }
@media (max-width: 1199.98px) { .flight-dest-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 575.98px) { .flight-dest-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .75rem; } }
.flight-dest-card { background: #fff; border: 1px solid var(--voy-line); border-radius: var(--card-radius); box-shadow: var(--shadow-soft); overflow: hidden; }
.flight-dest-card > img { display: block; width: 100%; height: auto; aspect-ratio: 3 / 2; object-fit: cover; background: var(--voy-surface); }
.flight-dest-body { padding: .8rem .9rem 1rem; }
.flight-dest-title { font-size: 1.05rem; font-weight: 800; color: var(--voy-navy); margin: 0; }
.flight-dest-kicker { font-size: .74rem; color: var(--voy-muted); margin: .1rem 0 .5rem; }
.flight-dest-kicker .bi { color: var(--voy-primary); }
.flight-dest-links { margin: 0; font-size: .9rem; display: grid; gap: .15rem; }
.flight-dest-links li:last-child a { font-weight: 700; }
.engine-grid { display: grid; gap: 1.25rem; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); align-items: start; }
@media (max-width: 767.98px) { .engine-grid { grid-template-columns: minmax(0, 1fr); } }
.engine-skyscanner { background: #6a99f6; padding: 20px; border-radius: var(--card-radius); min-height: 12rem; }

/* Register R73: the prices are loaded by JavaScript; a skeleton until then, a note without JavaScript. */
html:not(.js) .js-only { display: none !important; }
.price-skeleton { display: grid; gap: .6rem; padding: .75rem 0; }
.price-skeleton[hidden] { display: none; }
.price-skeleton-bar { display: block; height: 2.75rem; border-radius: 8px; background: linear-gradient(90deg, var(--voy-section) 25%, var(--voy-line-soft) 37%, var(--voy-section) 63%); background-size: 400% 100%; animation: price-skeleton 1.4s ease infinite; }
.price-skeleton-bar:first-of-type { height: 2.25rem; width: 60%; }
@keyframes price-skeleton { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) { .price-skeleton-bar { animation: none; } }
.price-noscript { padding: 1.25rem; text-align: center; }
.price-retry { display: flex; margin: 0 auto 1rem; }
.pc-notice[hidden] { display: none; }

/* Price calendar (register R72; assets/controllers/price-calendar.js). */
.price-view-switch { display: inline-flex; gap: .25rem; padding: .25rem; margin-bottom: .75rem; background: #fff; border: 1px solid var(--voy-line); border-radius: 999px; box-shadow: var(--shadow-soft); }
.price-view-switch[hidden], .price-calendar[hidden], .price-table-card[hidden], .pc-panel[hidden], .pc-months[hidden], .price-calendar .price-table-empty[hidden] { display: none !important; }
.price-view-btn { display: inline-flex; align-items: center; border: 0; background: transparent; color: var(--voy-navy); font-weight: 700; font-size: .9rem; padding: .45rem 1rem; border-radius: 999px; min-height: 2.5rem; }
.price-view-btn:hover { background: var(--voy-surface); }
.price-view-btn[aria-pressed="true"] { background: var(--voy-primary-dark); color: #fff; }
.price-search.is-calendar [data-price-list-only] { display: none; }
@media (min-width: 992px) { .price-search.is-calendar [data-price-filter] { width: 25%; } }
.price-calendar { padding: 1rem 1.25rem 1.1rem; }
.price-calendar[aria-busy="true"] { opacity: .55; }
.pc-months { display: flex; flex-wrap: wrap; align-items: flex-end; gap: .75rem 1rem; margin-bottom: 1rem; }
.pc-year-group { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; }
.pc-year { flex-basis: 100%; font-weight: 800; font-size: 1.15rem; color: var(--voy-navy); line-height: 1.2; }
.pc-tab { min-width: 4.25rem; min-height: 2.5rem; padding: .35rem .8rem; border: 1px solid var(--voy-line); border-radius: var(--radius-control); background: #fff; color: var(--voy-navy); font-weight: 600; font-size: .9rem; }
.pc-tab:hover { border-color: var(--voy-primary); background: var(--voy-surface); }
.pc-tab[aria-selected="true"] { background: var(--voy-primary-dark); border-color: var(--voy-primary-dark); color: #fff; font-weight: 700; }
.pc-summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem 1rem; margin-bottom: .75rem; }
.pc-summary:empty { display: none; }
.pc-best-jump { display: inline-flex; align-items: baseline; gap: .45rem; border: 1px solid var(--voy-line); background: var(--voy-surface); color: var(--voy-navy); border-radius: var(--radius-control); padding: .45rem .8rem; font-size: .9rem; text-align: left; }
.pc-best-jump:hover { border-color: var(--voy-primary); }
.pc-undated { font-size: .88rem; padding: 0; }
.pc-week-bar { display: flex; align-items: center; justify-content: space-between; gap: .75rem; margin-bottom: .6rem; }
.pc-week-label { margin: 0; font-weight: 700; color: var(--voy-navy); font-size: .95rem; text-align: center; }
.pc-nav { display: inline-flex; align-items: center; justify-content: center; width: 2.75rem; height: 2.75rem; flex: 0 0 auto; border: 1px solid var(--voy-line); border-radius: 50%; background: #fff; color: var(--voy-primary); }
.pc-nav:hover:not(:disabled) { border-color: var(--voy-primary); background: var(--voy-surface); }
.pc-nav:disabled { color: #a9b8c8; background: var(--voy-section); cursor: default; }
.pc-strip { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .5rem; }
.pc-day { display: flex; flex-direction: column; gap: .4rem; min-width: 0; padding: .5rem .4rem .45rem; border-radius: var(--radius-control); background: var(--voy-section); border: 1px solid var(--voy-line-soft); }
.pc-day.is-other-month .pc-day-head { opacity: .75; }
.pc-day-head { margin: 0; display: flex; flex-direction: column; align-items: center; line-height: 1.25; }
.pc-weekday { font-size: .76rem; color: var(--voy-muted); }
.pc-date { font-weight: 800; color: var(--voy-navy); font-size: .92rem; white-space: nowrap; }
.pc-cells { display: grid; gap: .4rem; margin: 0; }
.pc-price { position: relative; display: flex; flex-direction: column; align-items: center; gap: .05rem; padding: .55rem .3rem .45rem; background: #fff; border: 1px solid var(--voy-line); border-radius: 8px; text-decoration: none; color: var(--voy-navy); line-height: 1.2; text-align: center; }
.pc-price:hover { border-color: var(--voy-primary); box-shadow: 0 2px 8px rgba(6, 74, 142, .12); color: var(--voy-navy); }
.pc-amount { font-weight: 800; font-size: 1.02rem; white-space: nowrap; color: var(--voy-navy); }
.pc-length, .pc-city { font-size: .76rem; color: var(--voy-muted); }
.pc-city { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pc-promo { position: absolute; top: -.45rem; right: -.2rem; background: var(--voy-promo-dark); color: #fff; font-weight: 800; font-size: .66rem; border-radius: 6px; padding: .05rem .3rem; line-height: 1.3; }
.pc-price.is-best { border: 2px solid var(--voy-cyan); padding-top: calc(.55rem - 1px); box-shadow: 0 0 0 3px rgba(19, 188, 235, .15); }
.pc-best { margin-top: .2rem; font-size: .66rem; font-weight: 700; color: var(--voy-navy); background: var(--voy-surface); border-radius: 999px; padding: .05rem .4rem; white-space: nowrap; }
.pc-none { margin: auto 0; text-align: center; color: #9aabbd; font-size: 1.1rem; padding: .75rem 0; }
.pc-legend { display: flex; flex-wrap: wrap; gap: .35rem 1.1rem; margin: .85rem 0 0; font-size: .8rem; color: var(--voy-muted); }
.pc-legend-item[hidden] { display: none; }
.pc-legend-item { display: inline-flex; align-items: center; gap: .35rem; font-weight: 600; color: var(--voy-navy); }
.pc-dot { display: inline-block; width: .6rem; height: .6rem; border-radius: 50%; flex: 0 0 auto; }
.pc-dot-promo { background: var(--voy-promo); }
.pc-dot-best { background: var(--voy-cyan); box-shadow: 0 0 0 2px #fff, 0 0 0 3px var(--voy-primary); }
@media (max-width: 991.98px) {
    /* Tablets and phones: the week scrolls sideways (about 3.5 days visible at 390 px), the months too. */
    .pc-strip { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: minmax(6.1rem, 1fr); overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: .35rem; overscroll-behavior-x: contain; }
    .pc-day { scroll-snap-align: start; }
    .pc-months { flex-wrap: nowrap; overflow-x: auto; padding: .1rem .1rem .4rem; scrollbar-width: thin; }
    .pc-year-group { flex-wrap: nowrap; }
    .pc-year { flex-basis: auto; font-size: 1rem; margin-right: .1rem; }
    .pc-tab { flex: 0 0 auto; }
}
@media (max-width: 575.98px) {
    .price-calendar { padding: .85rem .75rem; }
    .price-search.is-calendar [data-price-filter] { width: 100%; }
    .price-view-switch { display: flex; width: 100%; }
    .price-view-switch[hidden] { display: none !important; }
    .price-view-btn { flex: 1 1 0; justify-content: center; }
    .pc-week-label { font-size: .86rem; }
}
@media (prefers-reduced-motion: no-preference) {
    .pc-strip, .pc-months { scroll-behavior: smooth; }
    .pc-price, .pc-tab, .pc-nav { transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease; }
}
