/* ==========================================================================
   Content blocks
   --------------------------------------------------------------------------
   The Content module's public rendering — a generic page or blog post built
   from the shared blocks in modules/Content/Blocks/BlockRegistry.php. Built
   only from the site's tokens (tokens.css): the design hand-off has bespoke,
   page-specific layouts (assets/css/home.css), not a block system, so this is
   the platform's own stand-in until a designer draws one, the same position
   portal.css is in for the admin (docs/PORTAL-UI.md).
   ========================================================================== */

.block {
    padding-block: var(--space-12);
}

.block__shell {
    width: 100%;
    max-width: var(--shell-max);
    margin-inline: auto;
    padding-inline: var(--shell-gutter);
}

/* --- Preview banner ------------------------------------------------------- */

.preview-banner {
    padding: var(--space-3) var(--shell-gutter);
    background: var(--color-surface-warm);
    color: var(--color-text-strong);
    font-size: var(--text-sm);
    font-weight: var(--weight-semibold);
    text-align: center;
}

/* --- Entry header (title, meta) ------------------------------------------- */

.entry-header {
    padding-block: var(--space-12) var(--space-8);
}

.entry-header__title {
    max-width: 48rem;
    margin-inline: auto;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-title);
    font-weight: var(--weight-medium);
    line-height: var(--leading-tight);
    text-align: center;
}

.entry-header__meta {
    display: flex;
    justify-content: center;
    gap: var(--space-3);
    margin-top: var(--space-4);
    color: var(--color-text-muted);
    font-size: var(--text-xs);
}

/* --- Hero ------------------------------------------------------------------ */

.block-hero__inner {
    display: grid;
    gap: var(--space-8);
    align-items: center;
}

.block-hero__eyebrow {
    display: block;
    margin-bottom: var(--space-3);
    color: var(--color-accent-text);
    font-size: var(--text-eyebrow);
    font-weight: var(--weight-bold);
    text-transform: uppercase;
    letter-spacing: var(--tracking-eyebrow);
}

.block-hero__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-display);
    font-weight: var(--weight-medium);
    line-height: var(--leading-tight);
}

.block-hero__subtitle {
    margin-top: var(--space-3);
    color: var(--color-text-strong);
    font-family: var(--font-display);
    font-size: var(--text-subtitle);
    font-style: italic;
}

.block-hero__body {
    margin-top: var(--space-4);
    max-width: 38rem;
    color: var(--color-text);
    font-size: var(--text-lead);
    line-height: var(--leading-relaxed);
}

.block-hero__image {
    width: 100%;
    height: auto;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
}

@media (min-width: 56rem) {
    .block-hero__inner {
        grid-template-columns: 1.1fr 1fr;
    }
}

/* --- Text + image ----------------------------------------------------------- */

.block-text-image__inner {
    display: grid;
    gap: var(--space-8);
    align-items: center;
}

.block-text-image__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
}

.block-text-image__body {
    margin-top: var(--space-4);
    color: var(--color-text);
    font-size: var(--text-body);
    line-height: var(--leading-relaxed);
    white-space: pre-line;
}

.block-text-image__image {
    width: 100%;
    height: auto;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
}

@media (min-width: 56rem) {
    .block-text-image__inner {
        grid-template-columns: 1fr 1fr;
    }

    .block-text-image--right .block-text-image__image {
        order: 2;
    }
}

/* --- Card grid --------------------------------------------------------------- */

.block-card-grid__heading {
    margin-bottom: var(--space-6);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
    text-align: center;
}

.block-card-grid__list {
    display: grid;
    gap: var(--space-5);
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
}

.block-card-grid__card {
    padding: var(--space-6);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
}

.block-card-grid__title {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    font-weight: var(--weight-medium);
}

.block-card-grid__body {
    margin-top: var(--space-2);
    color: var(--color-text);
    font-size: var(--text-sm);
    line-height: var(--leading-normal);
}

.block-card-grid__link {
    display: inline-flex;
    margin-top: var(--space-4);
}

/* --- Quote -------------------------------------------------------------------- */

.block-quote__inner {
    max-width: 42rem;
    margin-inline: auto;
    text-align: center;
}

.block-quote__text {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-quote);
    font-style: italic;
    line-height: var(--leading-snug);
}

.block-quote__attribution {
    margin-top: var(--space-4);
    color: var(--color-text-muted);
    font-size: var(--text-sm);
    font-weight: var(--weight-semibold);
}

.block-quote--testimonial .block-quote__text {
    font-style: normal;
    font-family: var(--font-body);
}

/* --- CTA band ------------------------------------------------------------------ */

.block-cta-band {
    background: var(--color-surface-dark);
    color: var(--color-text-on-dark);
}

.block-cta-band__inner {
    max-width: 38rem;
    margin-inline: auto;
    text-align: center;
}

.block-cta-band__heading {
    color: var(--color-ink-inverse);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
}

.block-cta-band__body {
    margin-top: var(--space-3);
    color: var(--color-text-on-dark);
    font-size: var(--text-body);
    line-height: var(--leading-relaxed);
}

.block-cta-band__action {
    margin-top: var(--space-6);
}

.block-cta-band--tint {
    border-top: 1px solid var(--color-border);
    background: var(--color-surface-warm);
    color: var(--color-text-strong);
}

.block-cta-band--tint .block-cta-band__heading {
    color: var(--color-ink);
    font-size: var(--text-title);
    font-weight: var(--weight-regular);
}

.block-cta-band--tint .block-cta-band__body {
    margin-top: var(--space-4);
    color: var(--color-text-strong);
}

.block-cta-band--tint .block-cta-band__action {
    margin-top: var(--space-7);
}

.block-cta-band--card {
    background: var(--color-canvas);
    color: var(--color-text-strong);
}

.block-cta-band--card .block-cta-band__inner {
    max-width: 47.5rem;
    padding: 2.5rem;
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
}

.block-cta-band--card .block-cta-band__heading {
    color: var(--color-ink);
    font-size: 2rem;
    font-weight: var(--weight-regular);
}

.block-cta-band--card .block-cta-band__body {
    margin-top: var(--space-4);
    color: var(--color-text-strong);
}

.block-cta-band__note {
    max-width: 35rem;
    margin: var(--space-5) auto 0;
    color: var(--color-text-subtle);
    font-size: 0.8125rem;
    line-height: 1.6;
}

/* --- Donation form (modules/Content/Views/blocks/donation_form.php) ---------- */

.block-donation-form__card {
    max-width: 30rem;
    margin-inline: auto;
    text-align: center;
}

.block-donation-form--aside .block-donation-form__card {
    max-width: none;
    margin-inline: 0;
    padding: var(--space-8);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
    text-align: left;
}

.block-donation-form__heading {
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
}

.block-donation-form__body {
    margin-top: var(--space-3);
    font-size: var(--text-body);
    line-height: var(--leading-relaxed);
}

.donation-form {
    display: grid;
    gap: var(--space-4);
    margin-top: var(--space-6);
    text-align: left;
}

.donation-form__group {
    border: 0;
    padding: 0;
    margin: 0;
}

.donation-form__legend {
    padding: 0;
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-eyebrow);
    text-transform: uppercase;
}

/* The radio itself is only hidden visually: it still takes focus, and the
   option it sits in shows that focus (and its checked state) for it. */
.donation-form__options {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--space-2);
    margin-top: var(--space-3);
}

.donation-form__options--amounts {
    grid-template-columns: repeat(3, 1fr);
}

/* Eenmalig and Maandelijks side by side while "Maandelijks" and its chevron
   fit, one above the other on a narrow phone rather than cut off. */
.donation-form__options:not(.donation-form__options--amounts) {
    grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
}

.donation-form__option {
    padding: var(--space-3) var(--space-4);
    background: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    border-radius: var(--radius-sm);
    color: var(--color-ink);
    font-size: var(--text-sm);
    font-weight: var(--weight-bold);
    text-align: center;
    cursor: pointer;
}

.donation-form__option input {
    position: absolute;
    width: 1px;
    height: 1px;
    opacity: 0;
    pointer-events: none;
}

.donation-form__option:hover {
    border-color: var(--color-accent-strong);
    color: var(--color-accent-text);
}

.donation-form__option:has(input:checked) {
    border-color: var(--color-accent-strong);
    background: var(--color-surface-warm);
    color: var(--color-accent-text);
}

.donation-form__option:has(input:focus-visible),
.donation-form__option:has(select:focus-visible) {
    outline: 2px solid var(--color-accent-strong);
    outline-offset: 2px;
}

/* The recurring pill's radio is only what gets posted (see site.js) — the
   select is the pill's whole visible and interactive surface, decorated
   with the exact same turning chevron every other select.input gets
   (site.js's own copy of portal.js's decoration script — see components.css). */
.donation-form__option--select {
    padding: 0;
    text-align: left;
}

.donation-form__option--select .select {
    height: 100%;
}

.donation-form__option-select.input {
    width: 100%;
    height: 100%;
    padding-block: var(--space-3);
    padding-left: var(--space-5);
    padding-right: var(--space-8);
    border: 0;
    border-radius: inherit;
    background: none;
    color: inherit;
    font: inherit;
    font-weight: inherit;
    text-align: inherit;
}

.donation-form__option-select.input:focus-visible {
    outline: none;
}

.donation-form__option--select .select__icon {
    right: var(--space-4);
}

.donation-form__custom {
    display: none;
    align-items: center;
    gap: var(--space-2);
    margin-top: var(--space-3);
    padding-inline: var(--space-4);
    background: var(--color-surface);
    border: 1px solid var(--color-border-strong);
    border-radius: var(--radius-sm);
}

.donation-form__group:has(.donation-form__option--custom input:checked) .donation-form__custom {
    display: flex;
}

.donation-form__currency {
    color: var(--color-text-muted);
    font-weight: var(--weight-bold);
}

.donation-form__custom-input {
    flex: 1;
    min-width: 0;
    padding-block: 0.875rem;
    border: 0;
    background: none;
    color: var(--color-ink);
    font: inherit;
    font-size: var(--text-sm);
}

.donation-form__custom-input:focus-visible {
    outline: none;
}

.donation-form__fields {
    display: grid;
    gap: var(--space-4);
}

/* Matches the rounding of the frequency/amount pills above, rather than the
   site's usual pill-shaped .input. */
.donation-form__fields .input {
    border-radius: var(--radius-sm);
}

.donation-form__fields .input:focus-visible {
    border-radius: var(--radius-sm);
}

.donation-form__submit {
    width: 100%;
    justify-content: center;
}

.donation-form__note {
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
    line-height: 1.5;
}

.donation-form__note a {
    color: var(--color-accent-text);
    font-weight: var(--weight-semibold);
}

@media (min-width: 40rem) {
    .donation-form__fields {
        grid-template-columns: 1fr 1fr;
    }

    .donation-form__field--wide {
        grid-column: 1 / -1;
    }
}

.block-donation-form__row--aside {
    display: grid;
    gap: var(--space-8);
}

.block-donation-form__aside {
    display: flex;
    flex-direction: column;
    gap: var(--space-5);
    margin-top: var(--space-8);
}

.block-donation-form__box {
    padding: var(--space-6);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
}

.block-donation-form__box--tint {
    background: var(--color-surface-warm);
    border: none;
}

.block-donation-form__box-eyebrow {
    color: var(--color-accent-text);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-eyebrow);
    text-transform: uppercase;
}

.block-donation-form__box-heading {
    font-family: var(--font-display);
    font-size: var(--text-h3);
    font-weight: var(--weight-regular);
    color: var(--color-ink);
}

.block-donation-form__box-body {
    margin-top: var(--space-3);
    font-size: var(--text-sm);
    line-height: 1.68;
    white-space: pre-line;
}

.block-donation-form__box-body strong {
    color: var(--color-ink);
}

/* Two classes, to outrank base.css's own ".site-main p a { text-decoration:
   underline }" (this box-body is itself the <p>, inside .site-main). */
.block-donation-form .block-donation-form__box-body a {
    color: var(--color-accent-text);
    font-weight: var(--weight-bold);
    text-decoration: none;
}

.block-donation-form__box-link {
    display: inline-block;
    margin-top: var(--space-4);
    color: var(--color-accent-text);
    font-weight: var(--weight-bold);
    font-size: var(--text-sm);
}

.block-donation-form__box .button {
    margin-top: var(--space-5);
}

.block-donation-form__account {
    margin-top: var(--space-4);
    padding: var(--space-4) var(--space-5);
    background: var(--color-surface-warm);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
}

.block-donation-form__account-name {
    display: block;
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
}

.block-donation-form__account-number {
    display: block;
    margin-top: var(--space-1);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    color: var(--color-ink);
    letter-spacing: 0.02em;
}

@media (min-width: 56rem) {
    .block-donation-form__row--aside {
        grid-template-columns: 1.1fr 0.9fr;
        gap: var(--space-10);
        align-items: start;
    }

    .block-donation-form__aside {
        margin-top: 0;
    }
}

.field__optional {
    color: var(--color-text-muted);
    font-weight: var(--weight-regular);
}

/* --- Person bio ------------------------------------------------------------------ */

.block-person-bio__inner {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-6);
    align-items: center;
    max-width: 42rem;
    margin-inline: auto;
}

.block-person-bio__image {
    width: 6.5rem;
    height: 6.5rem;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
}

.block-person-bio__name {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    font-weight: var(--weight-medium);
}

.block-person-bio__role {
    color: var(--color-accent-text);
    font-size: var(--text-xs);
    font-weight: var(--weight-semibold);
}

.block-person-bio__bio {
    margin-top: var(--space-2);
    color: var(--color-text);
    font-size: var(--text-sm);
    line-height: var(--leading-normal);
}

/* --- Travel report -------------------------------------------------------------- */

.block-travel-report__eyebrow {
    display: block;
    margin-bottom: var(--space-3);
    color: var(--color-accent-text);
    font-size: var(--text-eyebrow);
    font-weight: var(--weight-bold);
    text-transform: uppercase;
    letter-spacing: var(--tracking-eyebrow);
}

.block-travel-report__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
}

.block-travel-report__facts {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-4);
    margin-top: var(--space-5);
}

.block-travel-report__fact {
    padding: var(--space-3) var(--space-4);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
}

.block-travel-report__fact dt {
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    text-transform: uppercase;
    letter-spacing: var(--tracking-eyebrow);
}

.block-travel-report__fact dd {
    margin-top: var(--space-1);
    color: var(--color-ink);
    font-size: var(--text-sm);
    font-weight: var(--weight-semibold);
}

.block-travel-report__inner {
    display: grid;
    gap: var(--space-8);
    align-items: start;
    margin-top: var(--space-6);
}

.block-travel-report__image {
    width: 100%;
    height: auto;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
}

.block-travel-report__body {
    color: var(--color-text);
    font-size: var(--text-body);
    line-height: var(--leading-relaxed);
    white-space: pre-line;
}

@media (min-width: 56rem) {
    .block-travel-report__inner {
        grid-template-columns: 1fr 1fr;
    }
}

/* --- ANBI facts ------------------------------------------------------------------ */
/* The ANBI page's "Algemene gegevens": white cards two by two, a small label over the value. */

.block-anbi-facts__heading {
    margin-bottom: var(--space-6);
}

.block-anbi-facts__list {
    display: grid;
    gap: var(--space-4);
}

.block-anbi-facts__fact {
    padding: 1.5rem 1.625rem;
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-sm);
}

.block-anbi-facts__fact dt {
    color: var(--color-text-muted);
    font-size: 0.75rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.block-anbi-facts__fact dd {
    margin: 0.375rem 0 0;
    color: var(--color-ink);
    font-size: var(--text-body);
    line-height: 1.6;
    white-space: pre-line;
}

.block-anbi-facts__fact dd a {
    color: var(--color-accent-text);
    text-decoration: none;
}

.block-anbi-facts__fact dd a:hover {
    text-decoration: underline;
}

.block-anbi-facts__iban {
    font-family: var(--font-display);
    letter-spacing: 0.02em;
}

@media (min-width: 40rem) {
    .block-anbi-facts__list {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* --- Document list ---------------------------------------------------------------- */

.block-document-list__heading {
    margin-bottom: var(--space-5);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
}

.block-document-list__list {
    display: grid;
    gap: var(--space-3);
    max-width: 42rem;
}

.block-document-list__link {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-4);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
    color: var(--color-ink);
    font-weight: var(--weight-semibold);
}

.block-document-list__link:hover {
    border-color: var(--color-accent-strong);
    color: var(--color-accent-text);
}

/* --- Related posts ----------------------------------------------------------------- */

.block-related-posts__heading {
    margin-bottom: var(--space-6);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
}

.block-related-posts__list {
    display: grid;
    gap: var(--space-5);
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
}

.block-related-posts__card {
    display: block;
    padding: var(--space-5);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
}

.block-related-posts__card:hover {
    border-color: var(--color-accent-strong);
}

.block-related-posts__title {
    display: block;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    font-weight: var(--weight-medium);
}

.block-related-posts__excerpt {
    display: block;
    margin-top: var(--space-2);
    color: var(--color-text);
    font-size: var(--text-sm);
    line-height: var(--leading-normal);
}

/* --- Product promo ------------------------------------------------------------------ */

.block-product-promo__inner {
    display: grid;
    gap: var(--space-8);
    align-items: center;
}

.block-product-promo__image {
    width: 100%;
    height: auto;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
}

.block-product-promo__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-medium);
}

.block-product-promo__price {
    margin-top: var(--space-2);
    color: var(--color-accent-text);
    font-size: var(--text-h3);
    font-weight: var(--weight-semibold);
}

.block-product-promo__body {
    margin-top: var(--space-4);
    color: var(--color-text);
    font-size: var(--text-body);
    line-height: var(--leading-relaxed);
}

.block-product-promo__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
    margin-top: var(--space-6);
}

@media (min-width: 56rem) {
    .block-product-promo__inner {
        grid-template-columns: 1fr 1fr;
    }
}

/* --- Blog ---------------------------------------------------------------------- */
/* After the design zip's blog artboards: the index (search, filters, a grid of
   cards), a trip's page (facts and its reports in order) and a post (a reading
   column). A trip is green throughout, the travel colour of the home pillars. */

.blog__head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4) var(--space-6);
}

.blog__head + .pg-rule {
    margin-bottom: 0;
}

.blog-search {
    position: relative;
    flex: 0 1 24rem;
    margin-left: auto;
}

@media (max-width: 39.99rem) {
    .blog-search {
        flex-basis: 100%;
    }
}

.blog-search__icon {
    position: absolute;
    top: 50%;
    left: 1.125rem;
    color: var(--color-text-subtle);
    transform: translateY(-50%);
    pointer-events: none;
}

.input.blog-search__input {
    width: 100%;
    padding-left: 3rem;
    background: var(--color-surface);
}

/* While a search as you type is on its way (site.js). */
[data-blog-results] {
    transition: opacity 0.15s ease;
}

[data-blog-results][aria-busy="true"] {
    opacity: 0.55;
}

.blog__bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4);
    margin: var(--space-7) 0 var(--space-8);
}

.blog-filters {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
}

.blog-filters__link {
    padding: 0.5625rem 1.0625rem;
    border: 1px solid var(--color-border-strong);
    border-radius: var(--radius-pill);
    background: var(--color-surface);
    color: var(--color-text-strong);
    font-size: var(--text-xs);
    font-weight: var(--weight-bold);
    text-decoration: none;
    transition: border-color 0.15s ease, color 0.15s ease;
}

.blog-filters__link:hover {
    border-color: var(--color-accent-text);
    color: var(--color-accent-text);
}

.blog-filters__link--active,
.blog-filters__link--active:hover {
    border-color: var(--color-ink);
    background: var(--color-ink);
    color: var(--color-ink-inverse);
}

.blog__count {
    color: var(--color-text-muted);
    font-size: var(--text-xs);
}

.blog-grid {
    display: grid;
    gap: 1.625rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

@media (min-width: 40rem) {
    .blog-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 64rem) {
    .blog-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

.blog-grid > li {
    display: flex;
}

.blog-card {
    display: flex;
    flex: 1;
    flex-direction: column;
    overflow: hidden;
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
    background: var(--color-surface);
    color: inherit;
    text-decoration: none;
    transition: box-shadow 0.2s ease, transform 0.2s ease;
}

.blog-card:hover {
    box-shadow: var(--shadow-card);
    transform: translateY(-2px);
}

.blog-card:focus-visible {
    outline: 2px solid var(--color-accent-text);
    outline-offset: 3px;
}

.blog-card__image {
    display: block;
    aspect-ratio: 3 / 2;
    overflow: hidden;
    background: var(--color-surface-sunken);
}

.blog-card__image img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* A trip's cover: its two lines over the photo, or over a plain green ground. */
.blog-cover {
    position: relative;
    container-type: inline-size;
    isolation: isolate;
}

.blog-cover::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    background: linear-gradient(to top, rgb(20 28 18 / 0.82) 0%, rgb(20 28 18 / 0.45) 38%, rgb(20 28 18 / 0) 68%);
}

/* A thin frame inside the edge, the way a printed cover has one. */
.blog-cover::after {
    content: "";
    position: absolute;
    inset: 0.75rem;
    z-index: 2;
    border: 1px solid rgb(255 255 255 / 0.45);
    border-radius: calc(var(--radius-lg) - 0.5rem);
    pointer-events: none;
}

.blog-cover--plain {
    background:
        radial-gradient(circle at 82% 18%, rgb(130 160 110 / 0.75), transparent 55%),
        radial-gradient(rgb(255 255 255 / 0.14) 1px, transparent 1.5px) 0 0 / 14px 14px,
        linear-gradient(135deg, var(--color-travel) 0%, #3E5436 100%);
}

.blog-cover--plain::before {
    background: none;
}

.blog-cover__text {
    position: absolute;
    right: 1.75rem;
    bottom: 1.5rem;
    left: 1.75rem;
    z-index: 3;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    color: #FFFFFF;
    text-shadow: 0 1px 12px rgb(0 0 0 / 0.35);
}

.blog-cover__title {
    display: -webkit-box;
    overflow: hidden;
    font-family: var(--font-display);
    font-size: clamp(1.375rem, 8.5cqw, 2.25rem);
    font-weight: var(--weight-medium);
    line-height: 1.08;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
}

.blog-cover__subtitle {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    font-size: 0.75rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.14em;
    text-transform: uppercase;
}

.blog-cover__subtitle::before {
    content: "";
    flex: none;
    width: 1.5rem;
    height: 2px;
    border-radius: 1px;
    background: var(--color-travel-glow);
}

.blog-card__body {
    display: flex;
    flex: 1;
    flex-direction: column;
    padding: 1.375rem 1.375rem 1.5rem;
}

.blog-label {
    display: inline-block;
    align-self: flex-start;
    padding: 0.3125rem 0.6875rem;
    border-radius: var(--radius-pill);
    background: var(--color-surface-warm);
    color: var(--color-care);
    font-size: 0.6875rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.12em;
    line-height: 1.2;
    text-transform: uppercase;
}

.blog-label--trip {
    background: var(--color-travel-soft);
    color: var(--color-travel);
}

.blog-card__title {
    display: -webkit-box;
    margin-top: 0.75rem;
    overflow: hidden;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.3125rem;
    font-weight: var(--weight-medium);
    line-height: 1.25;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

.blog-card__excerpt {
    display: -webkit-box;
    margin-top: 0.5rem;
    overflow: hidden;
    color: var(--color-text);
    font-size: var(--text-sm);
    line-height: 1.6;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

.blog-card__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.625rem;
    margin-top: auto;
    padding-top: var(--space-4);
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
}

.blog-empty {
    padding: var(--space-12) var(--space-5);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
    background: var(--color-surface);
    color: var(--color-text-muted);
    font-size: var(--text-sm);
    text-align: center;
}

.blog-empty__title {
    margin-bottom: var(--space-2);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-h3);
}

.blog-empty .button {
    margin-top: var(--space-5);
}

.blog-pages {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    margin-top: var(--space-12);
}

.blog-pages__number,
.blog-pages__step,
.blog-pages__gap {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.5rem;
    height: 2.5rem;
    padding: 0 0.375rem;
    border-radius: var(--radius-sm);
    color: var(--color-text-strong);
    font-size: var(--text-xs);
    font-weight: var(--weight-bold);
    text-decoration: none;
}

.blog-pages__number,
.blog-pages__step {
    border: 1px solid var(--color-border-strong);
    background: var(--color-surface);
}

.blog-pages__step {
    padding-inline: var(--space-4);
}

a.blog-pages__number:hover,
.blog-pages__step:hover {
    border-color: var(--color-accent-text);
    color: var(--color-accent-text);
}

.blog-pages__number--current {
    border-color: var(--color-ink);
    background: var(--color-ink);
    color: var(--color-ink-inverse);
}

/* A trip's page and a post: a centred reading column with a wider picture. */
.blog-article__header {
    padding-top: clamp(2.5rem, 6vw, 3.5rem);
}

.blog-article__column {
    width: 100%;
    max-width: calc(46rem + 2 * var(--shell-gutter));
    margin-inline: auto;
    padding-inline: var(--shell-gutter);
}

.blog-article__header .breadcrumb {
    margin-bottom: var(--space-6);
}

.blog-article__title {
    margin-top: 0;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: clamp(2rem, 4.6vw, 3rem);
    font-weight: var(--weight-regular);
    line-height: 1.08;
    text-wrap: balance;
}

.blog-article__subtitle {
    margin-top: var(--space-3);
    color: var(--color-accent-text);
    font-family: var(--font-display);
    font-size: var(--text-subtitle);
    font-style: italic;
}

.blog-article__cover {
    width: 100%;
    max-width: calc(62.5rem + 2 * var(--shell-gutter));
    margin: var(--space-8) auto 0;
    padding-inline: var(--shell-gutter);
}

.blog-article__cover img {
    display: block;
    width: 100%;
    aspect-ratio: 16 / 9;
    border-radius: var(--radius-xl);
    background: var(--color-surface-sunken);
    object-fit: cover;
}

/* A trip's page shows its card's cover, larger. */
.blog-trip__cover {
    display: block;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    border-radius: var(--radius-xl);
}

.blog-trip__cover img {
    height: 100%;
    border-radius: 0;
}

.blog-trip__cover::after {
    inset: clamp(0.75rem, 2cqw, 1.25rem);
    border-radius: calc(var(--radius-xl) - clamp(0.5rem, 1.5cqw, 0.875rem));
}

.blog-trip__cover .blog-cover__text {
    right: clamp(1.75rem, 6cqw, 4rem);
    bottom: clamp(1.5rem, 5cqw, 3.5rem);
    left: clamp(1.75rem, 6cqw, 4rem);
    gap: clamp(0.5rem, 1.2cqw, 0.875rem);
}

.blog-trip__cover .blog-cover__title {
    font-size: clamp(1.75rem, 6cqw, 3.75rem);
}

.blog-trip__cover .blog-cover__subtitle {
    font-size: clamp(0.75rem, 1.4cqw, 0.9375rem);
}

.blog-trip__cover .blog-cover__subtitle::before {
    width: clamp(1.5rem, 4cqw, 2.5rem);
}

.blog-facts {
    display: grid;
    gap: var(--space-4);
    margin-top: var(--space-8);
}

@media (min-width: 40rem) {
    .blog-facts {
        grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
    }
}

.blog-facts__item {
    padding: 1.375rem 1.5rem;
    border: 1px solid var(--color-travel-line);
    border-radius: var(--radius-md);
    background: var(--color-travel-soft);
}

.blog-facts dt {
    color: var(--color-travel);
    font-size: 0.75rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.blog-facts dd {
    margin: 0.375rem 0 0;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.375rem;
    line-height: 1.25;
}

.blog-trip__heading {
    margin-top: var(--space-12);
}

.pg-rule--trip {
    background: var(--color-travel);
}

.blog-reports {
    display: grid;
    gap: 0.875rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.blog-report {
    display: grid;
    grid-template-columns: 6.5rem 1fr;
    gap: var(--space-5);
    align-items: center;
    overflow: hidden;
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
    background: var(--color-surface);
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.blog-report:hover {
    border-color: var(--color-travel-glow);
    box-shadow: var(--shadow-card);
}

/* The picture fills its column at whatever height the text gives the row, so a
   portrait photo never stretches the row. */
.blog-report__image {
    position: relative;
    align-self: stretch;
    min-height: 6.25rem;
    background: var(--color-surface-sunken);
}

.blog-report__image img {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.blog-report__body {
    display: block;
    padding: var(--space-4) var(--space-4) var(--space-4) 0;
}

.blog-report__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.625rem;
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
}

/* Date, dot and reading time. On a phone the card is too narrow for them on
   one line and the dot would start the next, so there it is left out and the
   reading time may simply go below the date. */
.blog-report__when {
    display: inline-flex;
    flex-wrap: wrap;
    column-gap: 0.625rem;
}

@media (max-width: 29.999rem) {
    .blog-report__when > [aria-hidden="true"] {
        display: none;
    }
}

.blog-report__title {
    display: block;
    margin-top: 0.5rem;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.25rem;
    font-weight: var(--weight-medium);
    line-height: 1.25;
}

.blog-report__excerpt {
    display: -webkit-box;
    margin-top: 0.3125rem;
    overflow: hidden;
    color: var(--color-text);
    font-size: var(--text-xs);
    line-height: 1.55;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

.blog-report__more {
    display: none;
    color: var(--color-travel);
    font-size: var(--text-xs);
    font-weight: var(--weight-bold);
    white-space: nowrap;
}

@media (min-width: 40rem) {
    .blog-report {
        grid-template-columns: 8.125rem 1fr auto;
        gap: 1.375rem;
        padding-right: var(--space-6);
    }

    .blog-report__body {
        padding-right: 0;
    }

    .blog-report__more {
        display: block;
    }
}

/* A post: its labels and meta line, then its blocks narrowed to the reading column. */
.blog-post__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-top: var(--space-5);
    color: var(--color-text-muted);
    font-size: var(--text-xs);
}

.blog-post__content {
    padding-top: var(--space-8);
}

.blog-post__content .block__shell {
    max-width: calc(46rem + 2 * var(--shell-gutter));
}

.blog-post__content .pg-video,
.blog-post__content .pg-prose,
.blog-post__content .pg-post-images {
    padding-block: 0;
}

.blog-post__content > * + * {
    margin-top: var(--space-6);
}

.blog-post__content .pg-video__figure {
    margin-top: 0;
}

.blog-steps {
    display: grid;
    gap: var(--space-4);
    margin-top: var(--space-12);
}

@media (min-width: 40rem) {
    .blog-steps {
        grid-template-columns: 1fr 1fr;
    }
}

.blog-steps__link {
    display: flex;
    align-items: center;
    gap: var(--space-4);
    padding: var(--space-5) var(--space-6);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
    background: var(--color-surface);
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.blog-steps__link:hover,
.blog-steps__link:focus-visible {
    border-color: var(--color-accent-light);
    box-shadow: var(--shadow-card);
}

.blog-steps__link--next {
    flex-direction: row-reverse;
    text-align: right;
}

.blog-steps__link--empty {
    visibility: hidden;
}

.blog-steps__arrow {
    flex: none;
    color: var(--color-accent-text);
    transition: transform 0.15s ease;
}

.blog-steps__link--previous:hover .blog-steps__arrow {
    transform: translateX(-3px);
}

.blog-steps__link--next:hover .blog-steps__arrow {
    transform: translateX(3px);
}

.blog-steps__text {
    display: block;
    min-width: 0;
}

.blog-steps__label {
    display: block;
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.blog-steps__title {
    display: block;
    margin-top: var(--space-1);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.1875rem;
    line-height: 1.25;
}

@media (prefers-reduced-motion: reduce) {
    .blog-steps__arrow {
        transition: none;
    }

    .blog-steps__link:hover .blog-steps__arrow {
        transform: none;
    }
}

.blog--more {
    padding-top: var(--space-4);
}

.blog--more .pg-rule {
    margin-bottom: var(--space-8);
}

/* A heading block and a dividing line, in the same reading column as text. */
.pg-heading .block__shell,
.pg-divider .block__shell {
    max-width: calc(46rem + 2 * var(--shell-gutter));
}

.pg-heading {
    padding-top: var(--space-8);
}

.pg-heading__text {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-weight: var(--weight-regular);
    line-height: 1.2;
}

.pg-heading--h2 .pg-heading__text {
    font-size: var(--text-title);
}

.pg-heading--h3 .pg-heading__text {
    font-size: var(--text-h3);
}

.pg-heading--h4 .pg-heading__text {
    font-size: 1.25rem;
}

.pg-divider {
    padding-block: var(--space-8);
}

.pg-divider__line {
    height: 0;
    margin: 0;
    border: 0;
    border-top: 1px solid var(--color-border);
}

.blog-post__content .pg-heading,
.blog-post__content .pg-divider {
    padding-block: 0;
}

.blog-post__content .pg-heading {
    padding-top: var(--space-4);
}

.blog-post__content .pg-divider {
    padding-block: var(--space-4);
}

/* The prose block: running text in a reading column. On a page it is a section
   of its own and keeps the page's rhythm; in a post the post sets the spacing. */
.pg-prose {
    padding-block: clamp(2rem, 5vw, 3.5rem) clamp(3.25rem, 7vw, 5.25rem);
}

.pg-prose .block__shell {
    max-width: calc(46rem + 2 * var(--shell-gutter));
}

/* A legal text (blocks/legal_text.php): the main points in brief and the text in
   a reading column, with its contents beside it on a wide screen and above it on
   a phone. */
.pg-legal {
    padding-top: clamp(1.5rem, 4vw, 2.75rem);
}

.pg-legal__inner {
    display: grid;
    gap: var(--space-8);
    max-width: calc(66rem + 2 * var(--shell-gutter));
}

.pg-legal__main {
    min-width: 0;
    max-width: 46rem;
}

/* The contents, in the same shape as the portal's settings index
   (portal.css, .settings-index): a quiet list, the section being read lit up
   with an accent bar (site.js sets aria-current). */
.pg-legal__contents ul {
    display: grid;
    gap: 0.125rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.pg-legal__contents a {
    display: block;
    padding: var(--space-2) var(--space-3);
    border-radius: var(--radius-xs);
    color: var(--color-text-muted);
    font-size: var(--text-sm);
    line-height: 1.4;
    text-decoration: none;
}

.pg-legal__contents a:hover,
.pg-legal__contents a:focus-visible {
    background: var(--color-surface-warm);
    color: var(--color-ink);
}

.pg-legal__contents a[aria-current="true"] {
    background: var(--color-surface-warm);
    box-shadow: inset 2px 0 0 var(--color-accent-strong);
    color: var(--color-ink);
    font-weight: var(--weight-semibold);
}

.pg-legal__updated {
    margin-bottom: var(--space-5);
    color: var(--color-text-muted);
    font-size: var(--text-sm);
}

.pg-legal__summary {
    margin-bottom: var(--space-8);
    padding: var(--space-5) var(--space-6);
    border-radius: var(--radius-md);
    background: var(--color-surface-warm);
    color: var(--color-text-strong);
}

.pg-legal__summary-title {
    margin-bottom: var(--space-3);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.25rem;
    font-weight: var(--weight-regular);
}

.pg-legal__summary ul {
    display: grid;
    gap: var(--space-2);
    padding-left: 1.25rem;
    list-style: disc;
    line-height: 1.6;
}

/* A jump from the contents lands with the heading clear of the sticky header. */
.pg-legal__body h2 {
    scroll-margin-top: 7rem;
    padding-top: var(--space-6);
    border-top: 1px solid var(--color-border);
}

.pg-legal__body > h2:first-child {
    margin-top: 0;
    padding-top: 0;
    border-top: 0;
}

@media (min-width: 64rem) {
    .pg-legal__inner--contents {
        grid-template-columns: 14rem minmax(0, 46rem);
        gap: var(--space-12);
        align-items: start;
    }

    .pg-legal__contents {
        position: sticky;
        top: 6.5rem;
        max-height: calc(100vh - 8rem);
        overflow-y: auto;
    }
}

.prose {
    color: var(--color-text-strong);
    font-size: 1.125rem;
    line-height: 1.8;
    overflow-wrap: anywhere;
}

.prose > * + * {
    margin-top: 1.25rem;
}

.prose h2,
.prose h3 {
    margin-top: 2.25rem;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-weight: var(--weight-regular);
    line-height: 1.2;
}

.prose h2 {
    font-size: var(--text-h3);
}

.prose h3 {
    font-size: 1.25rem;
}

.prose ul {
    padding-left: 1.25rem;
    list-style: disc;
}

.prose li + li {
    margin-top: 0.375rem;
}

.prose blockquote {
    margin-inline: 0;
    padding: var(--space-2) 0 var(--space-2) var(--space-5);
    border-left: 3px solid var(--color-accent-light);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.3125rem;
    font-style: italic;
    line-height: 1.5;
}

.prose strong {
    color: var(--color-ink);
    font-weight: var(--weight-bold);
}

.prose a {
    color: var(--color-accent-text);
    text-decoration: underline;
    text-underline-offset: 0.15em;
}

/* Pictures in a reading column: one wide, or a grid of squares. */
.pg-post-images .block__shell {
    max-width: calc(46rem + 2 * var(--shell-gutter));
}

.pg-post-images__list {
    display: grid;
    gap: 0.625rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.pg-post-images__list--two {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.pg-post-images__list--three {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

@media (min-width: 40rem) {
    .pg-post-images__list--three {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

.pg-post-images__figure {
    margin: 0;
}

.pg-post-images__link {
    display: block;
    overflow: hidden;
    border-radius: var(--radius-md);
    background: var(--color-surface-sunken);
}

.pg-post-images__link img {
    display: block;
    width: 100%;
    transition: transform 0.3s ease;
}

.pg-post-images__list--two img,
.pg-post-images__list--three img {
    aspect-ratio: 1;
    object-fit: cover;
}

.pg-post-images__list--single img {
    max-height: 80vh;
    object-fit: contain;
}

.pg-post-images__link:hover img {
    transform: scale(1.03);
}

.pg-post-images__caption {
    margin-top: var(--space-2);
    color: var(--color-text-muted);
    font-size: var(--text-xs);
}

/* A portrait phone video must not run taller than the screen. */
.blog-post__content .pg-video__player {
    width: auto;
    max-width: 100%;
    max-height: 80vh;
    margin-inline: auto;
}

@media (prefers-reduced-motion: reduce) {
    .blog-card,
    .pg-post-images__link img {
        transition: none;
    }

    .blog-card:hover,
    .pg-post-images__link:hover img {
        transform: none;
    }
}

/* ==========================================================================
   Designed pages (care, travel, education, book, ANBI …)
   --------------------------------------------------------------------------
   The blocks page_hero, page_section, page_cards and page_quotes carry the look of
   the supplied page designs: warm bands, a serif heading, an accent rule, white
   cards. They are built from the tokens only, like everything else on the site.
   ========================================================================== */

.pg {
    padding-block: clamp(3.25rem, 7vw, 5.25rem);
    background: var(--color-canvas);
    color: var(--color-text-strong);
}

.pg--tint {
    background: var(--color-surface-warm);
}

.pg--soft {
    background: var(--color-surface-soft);
}

.pg--dark {
    background: var(--color-surface-dark);
    color: var(--color-text-on-dark);
}

.pg-rule {
    display: block;
    width: 3.5rem;
    height: 2px;
    margin: var(--space-5) 0 var(--space-6);
    background: var(--color-accent-light);
}

/* --- Opening ---------------------------------------------------------------- */

.pg-hero {
    padding-block: clamp(3rem, 7vw, 5.25rem);
}

.pg-hero__inner {
    display: grid;
    gap: var(--space-10);
    align-items: center;
}

.pg-hero__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-page-hero);
    font-weight: var(--weight-regular);
    line-height: var(--leading-tight);
    text-wrap: balance;
}

.pg-hero__subtitle {
    margin-top: var(--space-3);
    color: var(--color-accent-text);
    font-family: var(--font-display);
    font-size: var(--text-subtitle);
    font-style: italic;
}

.pg-hero__body {
    max-width: 38rem;
    margin-top: var(--space-5);
    font-size: var(--text-body);
    line-height: 1.75;
    white-space: pre-line;
}

/* With no picture, the text column isn't narrowed by one already, so the body can
   run as wide as the design's own text column (the contact page's own body wraps
   to three lines at the narrower width the picture case needs). */
.pg-hero__inner:not(.pg-hero__inner--image) .pg-hero__body {
    max-width: 48rem;
}

.pg-hero__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-4);
    margin-top: var(--space-8);
}

.pg-hero__image {
    max-width: 14.5rem;
    justify-self: start;
}

.pg-hero__image img {
    width: 100%;
    height: auto;
    object-fit: contain;
}

.pg-hero__image--photo {
    max-width: none;
    height: 16rem;
    overflow: hidden;
    border-radius: var(--radius-xl);
}

.pg-hero__image--photo img {
    height: 100%;
    object-fit: cover;
}

@media (min-width: 56rem) {
    .pg-hero__inner--image {
        grid-template-columns: 1fr 14.5rem;
        gap: var(--space-14);
    }

    .pg-hero__image {
        justify-self: center;
    }

    .pg-hero__inner--photo {
        grid-template-columns: 1.15fr 0.85fr;
        gap: var(--space-12);
    }

    .pg-hero__image--photo {
        justify-self: stretch;
        height: 22.5rem;
    }
}

/* --- Section ---------------------------------------------------------------- */

.pg-section__inner {
    display: grid;
    gap: var(--space-8);
    align-items: center;
}

.pg-section__text {
    max-width: 47rem;
}

.pg-section__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-title);
    font-weight: var(--weight-regular);
    line-height: 1.12;
    text-wrap: balance;
}

.pg--dark .pg-section__heading {
    color: var(--color-ink-inverse);
}

.pg-section__subtitle {
    margin-top: var(--space-2);
    color: var(--color-accent-text);
    font-family: var(--font-display);
    font-size: var(--text-subtitle);
    font-style: italic;
}

.pg--dark .pg-section__subtitle {
    color: var(--color-accent-light);
}

.pg-section__body {
    margin-top: var(--space-5);
    font-size: var(--text-body);
    line-height: 1.78;
    white-space: pre-line;
}

.pg-section__heading + .pg-rule + .pg-section__body,
.pg-rule + .pg-section__body {
    margin-top: 0;
}

.pg-section__action {
    margin-top: var(--space-6);
}

.pg-section__aside {
    margin-top: var(--space-8);
}

.pg-section__aside-prompt {
    font-size: var(--text-base);
    line-height: 1.6;
}

.pg-section__aside .button {
    margin-top: var(--space-5);
}

.pg-section__image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.pg-section__inner--photo .pg-section__image {
    max-height: 22.5rem;
    overflow: hidden;
    border-radius: var(--radius-xl);
    aspect-ratio: 4 / 3;
}

.pg-section__inner--photo .pg-section__image img {
    filter: sepia(0.18) saturate(1.05);
}

.pg-section__inner--cover .pg-section__image {
    max-width: 13.5rem;
}

.pg-section__inner--cover .pg-section__image img {
    height: auto;
    border-radius: var(--radius-xs);
    box-shadow: var(--shadow-cover);
}

.pg-section__inner--round .pg-section__image {
    width: 11.875rem;
    height: 11.875rem;
    overflow: hidden;
    border-radius: 50%;
    background: var(--color-border-dark);
}

@media (min-width: 56rem) {
    .pg-section__inner--photo {
        grid-template-columns: 0.82fr 1fr;
        gap: var(--space-14);
    }

    .pg-section__inner--cover {
        grid-template-columns: 13.5rem 1fr;
        gap: var(--space-14);
    }

    .pg-section__inner--round {
        grid-template-columns: 11.875rem 1fr;
        gap: var(--space-12);
    }

    .pg-section__inner--aside {
        grid-template-columns: 1.4fr 1fr;
        gap: var(--space-12);
    }

    .pg-section__aside {
        margin-top: 0;
        padding-left: var(--space-10);
        border-left: 1px solid var(--color-border-card);
    }

    .pg--dark .pg-section__aside {
        border-left-color: rgba(250, 245, 239, 0.16);
    }

    .pg-section__inner--right.pg-section__inner--photo {
        grid-template-columns: 1fr 0.82fr;
    }

    .pg-section__inner--right.pg-section__inner--cover {
        grid-template-columns: 1fr 13.5rem;
    }

    .pg-section__inner--right.pg-section__inner--round {
        grid-template-columns: 1fr 11.875rem;
    }

    .pg-section__inner--right .pg-section__image {
        order: 2;
    }
}

/* --- Cards and experiences --------------------------------------------------- */

.pg-cards__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-regular);
    line-height: var(--leading-snug);
}

.pg-cards__intro {
    margin-top: var(--space-4);
    font-size: var(--text-body);
    line-height: var(--leading-relaxed);
    white-space: pre-line;
}

.pg-cards__list,
.pg-quotes__list {
    display: grid;
    gap: var(--space-6);
    margin-top: var(--space-10);
}

.pg-cards__heading:only-child + .pg-cards__list,
.pg-cards__heading + .pg-quotes__list {
    margin-top: var(--space-7);
}

.pg-card,
.pg-quote {
    padding: var(--space-8);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
}

.pg-card__title {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    font-weight: var(--weight-medium);
    line-height: var(--leading-snug);
}

.pg-card__body {
    margin-top: var(--space-3);
    font-size: var(--text-base);
    line-height: 1.68;
    white-space: pre-line;
}

.pg-quote {
    border-radius: var(--radius-md);
}

.pg-quote__text {
    color: var(--color-ink);
    font-size: var(--text-base);
    line-height: 1.68;
    white-space: pre-line;
}

.pg-quote__source {
    margin-top: var(--space-4);
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
}

@media (min-width: 40rem) {
    .pg-cards__list--two,
    .pg-quotes__list--two {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 56rem) {
    .pg-cards__list--three,
    .pg-quotes__list--three {
        grid-template-columns: repeat(3, 1fr);
    }
}

/* One testimony (page_quotes with a single quote): the heading in a narrow
   column, the words in the display face behind a thin accent rule. */
.pg-testimony {
    display: grid;
    gap: var(--space-6);
}

.pg-testimony__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-title);
    font-weight: var(--weight-regular);
    line-height: var(--leading-snug);
}

.pg-testimony__heading::after {
    content: '';
    display: block;
    width: 3rem;
    height: 2px;
    margin-top: var(--space-4);
    background: var(--color-accent);
}

.pg-testimony__intro {
    margin-top: var(--space-4);
    color: var(--color-text-muted);
    font-size: var(--text-base);
}

.pg-testimony__body {
    margin: 0;
    padding-left: var(--space-6);
    border-left: 2px solid var(--color-accent);
}

.pg-testimony__text {
    margin: 0;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: clamp(1.125rem, 1.6vw, 1.3125rem);
    line-height: 1.7;
    white-space: pre-line;
}

.pg-testimony__source {
    margin-top: var(--space-5);
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

@media (min-width: 56rem) {
    .pg-testimony {
        grid-template-columns: minmax(0, 1fr) minmax(0, 2.2fr);
        gap: var(--space-12);
        align-items: start;
    }
}

/* Two plain sections in a row read as one page: the second needs no full gap above it. */
.pg:not(.pg--tint):not(.pg--soft):not(.pg--dark) + .pg:not(.pg--tint):not(.pg--soft):not(.pg--dark) {
    padding-top: 0;
}

/* --- Forms ------------------------------------------------------------------- */

.pg-form__intro-block {
    max-width: 50rem;
    margin-inline: auto;
    text-align: center;
}

.pg-form__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-title);
    font-weight: var(--weight-regular);
    line-height: var(--leading-snug);
}

.pg-form__intro {
    max-width: 38rem;
    margin-top: var(--space-3);
    margin-inline: auto;
    font-size: var(--text-body);
    line-height: var(--leading-relaxed);
    white-space: pre-line;
}

.pg-form__card {
    max-width: 50rem;
    margin-inline: auto;
    padding: var(--space-8);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
}

.pg-form__intro-block + .pg-form__row {
    margin-top: var(--space-8);
}

.pg-form__card-heading {
    margin-bottom: var(--space-6);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-regular);
}

.pg-form__card .input {
    border-radius: var(--radius-sm);
}

.pg-form__card .input:focus-visible {
    border-radius: var(--radius-sm);
}

.pg-form__row--aside .pg-form__card {
    max-width: none;
    margin-inline: 0;
}

.pg-form__details {
    margin-top: var(--space-8);
}

.pg-form__details-heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-title);
    font-weight: var(--weight-regular);
}

.pg-form__details-list {
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
    margin-top: var(--space-6);
}

.pg-form__details-item dt {
    color: var(--color-text-muted);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    text-transform: uppercase;
    letter-spacing: var(--tracking-eyebrow);
}

.pg-form__details-item dd {
    margin-top: var(--space-1);
    font-size: var(--text-base);
    color: var(--color-ink);
}

.pg-form__details-item dd a {
    color: var(--color-accent-text);
    font-weight: var(--weight-semibold);
}

.pg-form__details-quote {
    margin-top: var(--space-8);
    padding: var(--space-6);
    background: var(--color-surface-warm);
    border-radius: var(--radius-md);
}

.pg-form__details-quote p {
    font-family: var(--font-display);
    font-style: italic;
    font-size: var(--text-lead);
    line-height: 1.4;
    color: var(--color-ink);
}

.pg-form__details-quote cite {
    display: block;
    margin-top: var(--space-3);
    color: var(--color-accent-text);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-eyebrow);
    text-transform: uppercase;
    font-style: normal;
}

@media (min-width: 56rem) {
    .pg-form__row--aside {
        display: grid;
        grid-template-columns: 1.15fr 0.85fr;
        gap: var(--space-12);
        align-items: start;
    }

    .pg-form__details {
        margin-top: 0;
    }
}

/* minmax(0, 1fr): a column never grows past the card for its widest content
   (a long choice in a dropdown, the Turnstile check), which pushed every field
   out of the card on a phone. */
.pg-form__form {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--space-5);
}

.pg-form__grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--space-5);
}

.pg-form__grid > *,
.pg-form__card .select,
.pg-form__card .input {
    min-width: 0;
    max-width: 100%;
}

.pg-form__card select.input {
    text-overflow: ellipsis;
}

.pg-form__trap {
    position: absolute;
    left: -10000px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.pg-form__consent {
    display: flex;
    gap: var(--space-3);
    align-items: flex-start;
    font-size: var(--text-base);
    line-height: 1.5;
}

.pg-form__consent input {
    flex: none;
    margin-top: 0.25rem;
}

.pg-form__form .button {
    justify-self: start;
}

.pg-form__done {
    padding: var(--space-6) 0;
    text-align: center;
}

.pg-form__done-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3.5rem;
    height: 3.5rem;
    border-radius: 50%;
    background: var(--color-accent-soft, var(--color-border-card));
    color: var(--color-accent);
    font-size: 1.75rem;
}

.pg-form__done-title {
    margin-top: var(--space-4);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    font-weight: var(--weight-medium);
}

/* A phone: less padding around the fields. (The Turnstile check draws its
   compact version where the normal one does not fit, assets/js/turnstile.js.) */
@media (max-width: 39.99rem) {
    .pg-form__card {
        padding: var(--space-6) var(--space-5);
    }
}

@media (min-width: 40rem) {
    .pg-form__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .pg-form__wide {
        grid-column: 1 / -1;
    }
}

/* --- Video ------------------------------------------------------------------- */

.pg-video__figure {
    max-width: 56rem;
    margin-top: var(--space-6);
}

/* Two or more videos: side by side, smaller, from a tablet width up. */
.pg-video__list--grid {
    display: grid;
    gap: var(--space-6);
    max-width: 56rem;
    margin-top: var(--space-6);
}

.pg-video__list--grid .pg-video__figure {
    margin-top: 0;
}

.blog-post__content .pg-video__list--grid {
    margin-top: 0;
}

@media (min-width: 40rem) {
    .pg-video__list--grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.pg-video__player {
    display: block;
    width: 100%;
    border-radius: var(--radius-md);
    background: var(--color-ink);
}

.pg-video__caption {
    margin-top: var(--space-3);
    color: var(--color-text-muted);
    font-size: var(--text-base);
}

.pg-video__transcript {
    max-width: 56rem;
    margin-top: var(--space-4);
}

.pg-video__transcript summary {
    cursor: pointer;
    font-weight: var(--weight-bold);
}

.pg-video__transcript p {
    margin-top: var(--space-3);
    line-height: var(--leading-relaxed);
    white-space: pre-line;
}

/* --- Looping video in a section, region band, rows, closing note, quote with aside -- */

/* Stacked above the text on a narrow screen, the video keeps a landscape frame
   that scales with its width, rather than a fixed height that turned it into a
   tall, heavily cropped strip on a phone. Beside the text, from 56rem, it takes
   the design's own fixed height again. */
.pg-section__inner--photo .pg-section__image--video {
    height: auto;
    max-height: none;
    overflow: hidden;
    border-radius: var(--radius-xl);
    background: var(--color-ink);
    aspect-ratio: 16 / 9;
}

@media (min-width: 56rem) {
    .pg-section__inner--photo .pg-section__image--video {
        height: 22.5rem;
        aspect-ratio: auto;
    }
}

.pg-section__image--video video {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* The pause button site.js adds to a looping video (WCAG 2.2.2). */
.pg-section__image--video {
    position: relative;
}

.pg-video-toggle {
    position: absolute;
    right: var(--space-3);
    bottom: var(--space-3);
    padding: var(--space-2) var(--space-4);
    border: 0;
    border-radius: var(--radius-pill);
    background: rgba(42, 37, 33, 0.72);
    color: var(--color-ink-inverse);
    font: inherit;
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    cursor: pointer;
}

/* Back to the design's own look: a warm band, the map faded in behind the text rather than
   beside it in its own card. Hidden below 56rem entirely, zoom-on-click included — there is
   no room for a background map beside touch-only, single-column text on a phone. */
.pg-region {
    position: relative;
    overflow: hidden;
    padding-block: 0;
}

.pg-region__shell {
    position: relative;
}

.pg-region__map {
    display: none;
}

.pg-region__map img,
.pg-region__map svg {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain; /* never distorted — see this rule's own note below */
    object-position: right center;
}

@media (min-width: 56rem) {
    .pg-region__shell {
        /* The map is free to run taller than the text and show past its bottom edge —
           this is what gives it room to be a decent size instead of being squeezed down
           to whatever height the text happens to need. */
        min-height: clamp(24rem, 34vw, 38rem);
    }

    .pg-region__map {
        display: block;
        position: absolute;
        inset: 0 0 0 34%;
        opacity: 0.7;
        pointer-events: none;
        /* Fades on both sides, not just the left one for the text: the right one tapers the
           map away before its own box edge — the edge gen_map6.py's own three-sided viewBox
           crop put much closer to real content than before — so cropping it at all never
           reads as a hard, unnatural line. The left one, at 10% rather than the original 34%,
           is what keeps the Caribbean cluster (closest to that edge of any pin, checked
           against its own actual screen position at ≈18%) fully opaque rather than fading
           out with the rest of that side. */
        -webkit-mask-image: linear-gradient(to right, transparent 0, #000 10%, #000 95%, transparent 100%);
        mask-image: linear-gradient(to right, transparent 0, #000 10%, #000 95%, transparent 100%);
    }

    /* Height drives the size, not width — the box above always matches the shell's own
       full height (its top-to-bottom inset), so it can never leave a bare gap below itself
       the way sizing height from width via aspect-ratio used to on a short-but-wide shell.
       object-fit: cover (not contain) is what makes the drawn map itself reach that full
       height too, rather than sitting centred with blank space above and below it whenever
       the box turns out taller than 800:560 needs — it never distorts either way, cover
       still preserves the SVG's own ratio, it just crops the world down to a smaller slice
       instead of shrinking the whole thing to fit. Anchored right, same as the box itself.
       Sea stays transparent (gen_map6.py has no ocean fill, on purpose — a flat rect behind
       everything else once read as a pasted-on overlay, not a map), so cropping in like this
       never shows a hard, unnatural edge on its own — the mask above is what handles the one
       real edge left, its own box's right side, now that the viewBox itself is windowed
       close around the content on that side too. */
    .pg-region__map img,
    .pg-region__map svg {
        height: 100%;
        object-fit: cover;
    }

    /* An inline map instead keeps its own ratio, centred in the box: sized from the box's
       width, never its height. Filling the full height made the map scale with the text —
       a longer text (the English one) made the band taller, the map larger, and the
       right-anchored crop pushed the Caribbean pins in under the text. This way they land
       at the same share of the shell's width (≈50%) however long the text runs, which is
       what .pg-region__text's own 45% cap below is measured against. */
    /* The land beyond the viewBox's own window (the Arctic above, the far south below) is
       still drawn rather than cut at the SVG's edge, so the map runs from the band's top to
       its bottom however tall the text makes it, and a zoomed-in place is only cut off by
       the band itself. The box's own mask, which clips to its border box, still ends it
       left and right, and the section's overflow ends it top and bottom. */
    .pg-region__map.pg-region__map--interactive svg {
        position: absolute;
        top: 50%;
        left: 0;
        height: auto;
        overflow: visible;
        transform: translateY(-50%);
    }

    /* An inline map may also run on past the shell to the screen's right edge, and grows
       with the room it finds there (up to a quarter larger), so it fills more of the band's
       height on a wide screen. --shell is the shell's width and --spare the room beside it
       (the section is the size container, so 100cqw is the screen's width). The width is
       worked out so the Andaman and Nicobar pin and its label still end inside the right-hand
       fade, and the left offset keeps the Caribbean pins (a third of the way into the map)
       exactly where they were, clear of the running text, however large the map gets. */
    .pg-region:has(.pg-region__map--interactive) {
        container-type: inline-size;
    }

    .pg-region__map.pg-region__map--interactive {
        --shell: min(var(--shell-max), 100cqw);
        --spare: calc((100cqw - var(--shell)) / 2);
        --map-width: clamp(0.66 * var(--shell), 0.656 * var(--shell) + 1.52 * var(--spare), 0.825 * var(--shell));
        right: calc(-1 * var(--spare));
    }

    .pg-region__map.pg-region__map--interactive svg {
        left: calc(0.215 * var(--shell) - 0.326 * var(--map-width));
        width: var(--map-width);
    }

}

/* An inline SVG (Media::svgMarkup()) is a live document, not a flattened picture: a pin can
   be clicked, which an <img> never allows. A country shape carries no tooltip of its own —
   the eight the organisation is active in already have a pin with a name and a tooltip of
   its own, and giving the same to all roughly 180 others added hover targets nobody asked
   to use. */
.pg-region__map--interactive {
    pointer-events: auto;
}

/* The scene site.js scales and shifts to "zoom" on a clicked place — see that file's own
   docblock for the transform it computes. transform-origin 0 0 matches its math exactly. */
.pg-map__scene {
    transform-origin: 0 0;
    transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}

.pg-map__pin {
    cursor: pointer;
}

/* A country the work is in zooms in on a click too (site.js); it lightens a little under
   the pointer so it reads as something to press. */
.pg-map__country--zoomable {
    cursor: pointer;
    transition: opacity 0.15s ease;
}

.pg-map__country--zoomable:hover {
    opacity: 0.8;
}

.pg-map__pin-halo {
    transition: r 0.15s ease, opacity 0.15s ease;
}

.pg-map__pin-dot {
    transition: r 0.15s ease;
}

.pg-map__pin:hover .pg-map__pin-dot,
.pg-map__pin--active .pg-map__pin-dot {
    r: 4.4;
}

.pg-map__pin--active .pg-map__pin-halo {
    r: 11;
    opacity: 0.32;
    animation: pg-map-pulse 1.8s ease-out infinite;
}

@keyframes pg-map-pulse {
    0% { r: 7; opacity: 0.4; }
    100% { r: 16; opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
    .pg-map__scene {
        transition: none;
    }

    .pg-map__pin--active .pg-map__pin-halo {
        animation: none;
    }
}

/* The pretty tooltip site.js shows above (or, once too close to the map's own top edge,
   below) a hovered/focused pin — the SVG's own <title> is the no-JavaScript fallback and
   stays in the markup either way. site.js sets left/top itself, clamped to the map's own
   box so the tooltip is never cut off at an edge, and points --pg-tip-arrow at the pin's
   own x position so the little diamond below (or above, in the --below state) always lines
   up with the dot even once the box itself has been nudged off-centre to stay in view. */
.pg-map__tooltip {
    position: absolute;
    z-index: 2;
    padding: 0.375rem 0.75rem;
    background: var(--color-ink);
    color: var(--color-ink-inverse);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    white-space: nowrap;
    border-radius: var(--radius-pill);
    box-shadow: var(--shadow-raise);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.12s ease;
}

.pg-map__tooltip::after {
    content: '';
    position: absolute;
    left: var(--pg-tip-arrow, 50%);
    top: 100%;
    width: 0.5rem;
    height: 0.5rem;
    background: var(--color-ink);
    transform: translate(-50%, -50%) rotate(45deg);
}

/* A pin with a second, smaller line under its name (site.js, data-note): two
   lines no longer suit a pill, so the corners soften to a rounded box. */
.pg-map__tooltip--note {
    padding-block: 0.4375rem 0.5rem;
    border-radius: var(--radius-md);
    text-align: center;
}

.pg-map__tooltip-note {
    display: block;
    margin-top: 0.125rem;
    font-size: 0.6875rem;
    font-weight: var(--weight-regular);
    opacity: 0.8;
}

.pg-map__tooltip--below::after {
    top: 0;
}

.pg-map__tooltip--visible {
    opacity: 1;
}

.pg-region__text {
    position: relative;
    max-width: 40rem;
    padding-block: clamp(3.25rem, 7vw, 5.5rem);
}

@media (min-width: 56rem) {
    /* Narrower than the block's own general 40rem, so running text stays clear of the
       map's solid area (from 34% of the shell on) rather than crossing into it. */
    .pg-region__text {
        max-width: min(34rem, 45%);
    }

    /* Wider than the running text, so the places fit on two rows rather than three; the
       row lies over the map's South America, below the Caribbean pins, and its chips are
       opaque, so the two never compete. 38.5rem rather than more is what keeps the Travel
       page's first row at the five it has in both languages, with Nepal and Sri Lanka
       starting the second one together (measured: wider, Nepal moves up to the first). */
    .pg-region__pills {
        width: 38.5rem;
        max-width: 90vw;
    }
}

.pg-region__label {
    margin-top: var(--space-8);
    margin-bottom: var(--space-3);
    color: var(--color-accent-text);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.pg-region__pills {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    padding: 0;
    list-style: none;
}

/* The plain <li> text and the button site.js turns a matching one into share the exact
   same chip look — but never both nested inside one another: once a <li> holds a real
   button (site.js adds this modifier alongside it), the <li> itself goes bare again and
   only the button inside carries the padding/background/border. */
.pg-region__pills li,
.pg-region__pill {
    display: inline-flex;
    padding: 0.375rem 0.75rem;
    background: var(--color-canvas);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-pill);
    color: var(--color-ink);
    font: inherit;
    font-size: 0.75rem;
    font-weight: var(--weight-bold);
}

/* Needs to out-specificity ".pg-region__pills li" above (a class plus a type selector),
   not just match it — a single class alone loses that fight regardless of source order. */
.pg-region__pills li.pg-region__pills-item--upgraded {
    padding: 0;
    background: none;
    border: 0;
}

.pg-region__pill {
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease;
}

.pg-region__pill:hover {
    border-color: var(--color-accent-light);
}

.pg-region__pill--active {
    background: var(--color-accent);
    border-color: var(--color-accent);
    color: var(--color-ink-inverse);
}

.pg-cards__list--rows {
    grid-template-columns: 1fr;
    gap: var(--space-5);
}

.pg-cards__list--rows .pg-card {
    display: grid;
    gap: var(--space-2);
    align-items: start;
    padding: var(--space-6) var(--space-7);
    border-radius: var(--radius-lg);
}

.pg-cards__list--rows .pg-card__title {
    color: var(--color-accent-text);
    font-size: 1.25rem;
}

.pg-cards__list--rows .pg-card__body {
    margin-top: 0;
    font-size: var(--text-base);
    line-height: 1.7;
}

@media (min-width: 40rem) {
    .pg-cards__list--rows .pg-card {
        grid-template-columns: 13.75rem 1fr;
        gap: var(--space-8);
    }
}

.pg-cards__note {
    margin-top: var(--space-8);
    font-size: var(--text-base);
    line-height: 1.7;
}

.pg-quote-aside__inner {
    display: grid;
    gap: var(--space-10);
    align-items: center;
}

.pg-quote-aside__mark {
    display: block;
    height: 2.125rem;
    color: var(--color-accent-light);
    font-family: var(--font-display);
    font-size: 3.5rem;
    line-height: 0;
}

.pg-quote-aside__text {
    max-width: 38.75rem;
    margin-top: var(--space-4);
    font-family: var(--font-display);
    font-size: 1.625rem;
    font-style: italic;
    line-height: 1.42;
    white-space: pre-line;
}

.pg-quote-aside__source {
    margin-top: var(--space-5);
    color: var(--color-accent-light);
    font-size: var(--text-2xs);
    font-weight: var(--weight-bold);
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.pg-quote-aside__heading {
    color: var(--color-ink-inverse);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    font-weight: var(--weight-regular);
}

.pg-quote-aside__body {
    margin-top: var(--space-3);
    margin-bottom: var(--space-5);
    color: var(--color-text-on-dark);
    line-height: 1.65;
}

@media (min-width: 56rem) {
    .pg-quote-aside__inner {
        grid-template-columns: 1.4fr 1fr;
        gap: var(--space-12);
    }

    .pg-quote-aside__aside {
        padding-left: var(--space-10);
        border-left: 1px solid rgba(250, 245, 239, 0.16);
    }
}

/* --- Book page blocks (boek.dc.html in the site design) ----------------------
   A reading column, an invitation with a contact card, a link card, readers'
   words in a sideways-scrolling row, and a small portrait beside a section. */

.pg-eyebrow {
    color: var(--color-text-subtle);
    font-size: 0.8125rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.pg-article__inner {
    max-width: 60rem;
}

.pg-article__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-regular);
    line-height: var(--leading-snug);
}

.pg-article__body {
    margin-top: 1.125rem;
    font-size: var(--text-body);
    line-height: 1.8;
}

/* Paragraphs 16px apart, a single line break kept as one (the design's spacing). */
.pg-article__body p {
    white-space: pre-line;
}

.pg-article__body p + p {
    margin-top: var(--space-4);
}

.pg-article__list {
    display: grid;
    gap: var(--space-3);
    margin: 1.125rem 0 0;
    padding: 0;
    list-style: none;
}

.pg-article__list li {
    display: flex;
    gap: 0.875rem;
    color: var(--color-ink);
    font-size: var(--text-body);
    line-height: 1.6;
}

.pg-article__list li::before {
    content: "\2022";
    color: var(--color-accent);
    font-size: 1.25rem;
    line-height: 1.3;
}

.pg-article__quote {
    margin: 2.125rem 0;
    padding-left: var(--space-6);
    border-left: 3px solid var(--color-accent-light);
    color: var(--color-accent);
    font-family: var(--font-display);
    font-size: clamp(1.375rem, 2.6vw, 1.625rem);
    font-style: italic;
    line-height: 1.4;
}

.pg-article__quote + .pg-article__body {
    margin-top: 0;
}

.pg-article__closing {
    margin-top: 1.625rem;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-h3);
    line-height: 1.4;
    text-align: center;
}

.pg-invitation__inner {
    display: grid;
    gap: var(--space-10);
    align-items: start;
}

.pg-invitation__card {
    padding: 2.125rem;
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
}

.pg-invitation__email {
    margin-top: var(--space-3);
    font-size: var(--text-body);
    line-height: 1.8;
}

.site-main .pg-invitation__email a {
    color: var(--color-accent-text);
    text-decoration: none;
}

.site-main .pg-invitation__email a:hover {
    text-decoration: underline;
}

.pg-invitation__name {
    margin-top: var(--space-5);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.375rem;
}

.pg-invitation__button {
    margin-top: 1.375rem;
}

.pg-link-card {
    padding-block: clamp(3rem, 6vw, 4.375rem);
}

.pg-link-card__card {
    display: grid;
    gap: var(--space-6);
    align-items: center;
    padding: 2.375rem;
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-lg);
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.pg-link-card__card:hover,
.pg-link-card__card:focus-visible {
    border-color: var(--color-border-strong);
    box-shadow: var(--shadow-header);
}

.pg-link-card__heading {
    margin-top: var(--space-2);
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.875rem;
    font-weight: var(--weight-regular);
    line-height: var(--leading-snug);
}

.pg-link-card__body {
    max-width: 40rem;
    margin-top: var(--space-2);
    color: var(--color-text);
    font-size: var(--text-base);
    line-height: 1.6;
}

.pg-link-card__more {
    color: var(--color-accent-text);
    font-size: 0.9375rem;
    font-weight: var(--weight-bold);
    white-space: nowrap;
}

.pg-carousel__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--space-6);
    margin-bottom: var(--space-8);
}

.pg-carousel__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-title);
    font-weight: var(--weight-regular);
    line-height: 1.12;
}

.pg-carousel__subtitle {
    margin-top: var(--space-1);
    color: var(--color-accent-text);
    font-family: var(--font-display);
    font-size: 1.375rem;
    font-style: italic;
}

.pg-carousel__arrows {
    display: flex;
    flex: none;
    gap: var(--space-3);
}

.pg-carousel__arrows[hidden] {
    display: none;
}

.pg-carousel__arrow {
    width: 3.25rem;
    height: 3.25rem;
    border: 1px solid var(--color-border-strong);
    border-radius: 50%;
    background: var(--color-canvas);
    color: var(--color-ink);
    font-size: 1.25rem;
    cursor: pointer;
    transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.pg-carousel__arrow:hover,
.pg-carousel__arrow:focus-visible {
    border-color: var(--color-accent);
    background: var(--color-accent);
    color: var(--color-ink-inverse);
}

.pg-carousel__track {
    display: flex;
    gap: var(--space-6);
    padding: 0.25rem 0 0.75rem;
    overflow-x: auto;
    scroll-snap-type: x proximity;
    scrollbar-width: none;
}

.pg-carousel__track::-webkit-scrollbar {
    display: none;
}

/* site.js lets a mouse drag the row sideways; snapping waits until it is let go. */
.pg-carousel__track.is-draggable {
    cursor: grab;
}

.pg-carousel__track.is-dragging {
    cursor: grabbing;
    scroll-snap-type: none;
    scroll-behavior: auto;
    user-select: none;
}

.pg-carousel__card {
    flex: 0 0 31.25rem;
    max-width: 84vw;
    margin: 0;
    padding: 2.125rem;
    scroll-snap-align: start;
    background: var(--color-canvas);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
}

.pg-carousel__mark {
    display: block;
    margin-bottom: 0.625rem;
    color: var(--color-accent-light);
    font-family: var(--font-display);
    font-size: 2.75rem;
    line-height: 1;
}

.pg-carousel__text {
    margin: 0;
    color: var(--color-ink);
    font-size: var(--text-base);
    line-height: 1.75;
    white-space: pre-line;
}

.pg-section__inner--portrait .pg-section__image {
    width: 100%;
    max-width: 13.75rem;
    aspect-ratio: 1;
    overflow: hidden;
    border-radius: 0.75rem;
}

.pg-section__inner--portrait .pg-section__image img {
    object-fit: contain;
}

.pg-section__inner--portrait .pg-section__heading {
    font-size: var(--text-section);
}

@media (min-width: 56rem) {
    .pg-invitation__inner--card {
        grid-template-columns: 1fr 1fr;
        gap: var(--space-14);
    }

    .pg-link-card__card {
        grid-template-columns: 1fr auto;
        gap: 1.875rem;
    }

    .pg-section__inner--portrait {
        grid-template-columns: 0.5fr 1.5fr;
        gap: 3.25rem;
    }
}

@media (prefers-reduced-motion: no-preference) {
    .pg-carousel__track {
        scroll-behavior: smooth;
    }
}

/* --- Additional testimonies (aan-vaders-tafel.dc.html in the site design) -----
   A centred opening, stories as cards opening their PDF in a popup, pictures with
   captions opening full size, and videos kept on YouTube. */

.pg-hero--center .pg-hero__inner {
    justify-items: center;
    text-align: center;
}

.pg-hero--center .pg-hero__body {
    max-width: 45rem;
    margin-inline: auto;
}

.pg-grid-heading {
    margin-bottom: 1.75rem;
}

.pg-documents__list,
.pg-photos__list {
    display: grid;
    gap: 1.25rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.pg-documents__card {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    height: 100%;
    min-height: 8.125rem;
    padding: var(--space-6);
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: 0.875rem;
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.pg-documents__card:hover,
.pg-documents__card:focus-visible {
    border-color: var(--color-border-strong);
    box-shadow: var(--shadow-header);
}

.pg-documents__title {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.25rem;
    font-weight: var(--weight-medium);
    line-height: 1.25;
}

.pg-documents__more {
    margin-top: var(--space-4);
    color: var(--color-accent-text);
    font-size: 0.8125rem;
    font-weight: var(--weight-bold);
}

.pg-photos__card {
    height: 100%;
    margin: 0;
    overflow: hidden;
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: 0.875rem;
}

.pg-photos__link {
    display: block;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    background: var(--color-surface-sunken);
    cursor: zoom-in;
}

.pg-photos__link img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.3s ease;
}

.pg-photos__link:hover img,
.pg-photos__link:focus-visible img {
    transform: scale(1.03);
}

.pg-photos__caption {
    padding: var(--space-4) 1.125rem;
    color: var(--color-text);
    font-size: 0.875rem;
    line-height: 1.5;
}

.pg-videos__intro {
    max-width: 45rem;
    margin-top: 0.625rem;
    font-size: var(--text-base);
    line-height: 1.7;
}

.pg-videos__grid {
    display: grid;
    gap: var(--space-6);
    margin-top: 1.75rem;
}

.pg-videos__panel {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-4);
    aspect-ratio: 16 / 9;
    border-radius: var(--radius-md);
    background: var(--color-surface-dark);
    color: var(--color-ink-inverse);
    text-decoration: none;
}

.pg-videos__panel--video {
    position: relative;
    overflow: hidden;
    padding: 0;
}

.pg-videos__poster {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-4);
    color: var(--color-ink-inverse);
    text-decoration: none;
}

.pg-videos__poster img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* A soft darkening, so the play button and its label read on any poster. */
.pg-videos__poster::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(to top, rgba(42, 37, 33, 0.55), rgba(42, 37, 33, 0.1));
}

.pg-videos__poster .pg-videos__play,
.pg-videos__poster .pg-videos__panel-label {
    position: relative;
    z-index: 1;
}

.pg-videos__poster .pg-videos__panel-label {
    color: var(--color-ink-inverse);
}

.pg-videos__poster:hover .pg-videos__play,
.pg-videos__poster:focus-visible .pg-videos__play {
    transform: scale(1.08);
}

.pg-videos__frame {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
}

.pg-videos__play {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 4.5rem;
    height: 4.5rem;
    border-radius: 50%;
    background: var(--color-accent);
    color: var(--color-ink-inverse);
    transition: transform 0.2s ease;
}

.pg-videos__panel:hover .pg-videos__play,
.pg-videos__panel:focus-visible .pg-videos__play {
    transform: scale(1.08);
}

.pg-videos__panel-label {
    color: var(--color-text-on-dark);
    font-size: var(--text-sm);
    font-weight: var(--weight-semibold);
}

.pg-videos__card {
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 2.25rem;
    border-radius: var(--radius-md);
    background: var(--color-surface-warm);
    color: inherit;
    text-decoration: none;
}

.pg-videos__icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 3.25rem;
    height: 3.25rem;
    border-radius: 50%;
    background: var(--color-accent);
    color: var(--color-ink-inverse);
}

.pg-videos__card-heading {
    margin-top: 1.125rem;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: 1.625rem;
    font-weight: var(--weight-regular);
}

.pg-videos__card-body {
    margin-top: var(--space-2);
    color: var(--color-text-strong);
    font-size: 0.9375rem;
    line-height: 1.65;
}

.pg-videos__more {
    margin-top: var(--space-4);
    color: var(--color-accent-text);
    font-size: var(--text-sm);
    font-weight: var(--weight-bold);
}

@media (min-width: 40rem) {
    .pg-documents__list,
    .pg-photos__list {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 56rem) {
    .pg-documents__list,
    .pg-photos__list {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .pg-videos__grid {
        grid-template-columns: 1.4fr 1fr;
        align-items: stretch;
    }
}

/* --- Two text columns (page_columns, the ANBI page) ---------------------------- */

.pg-columns__inner {
    display: grid;
    gap: var(--space-10);
}

.pg-columns__heading {
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-section);
    font-weight: var(--weight-regular);
    line-height: var(--leading-snug);
}

.pg-columns__body + .pg-columns__heading {
    margin-top: 1.75rem;
}

.pg-columns__body {
    margin-top: 0.875rem;
    font-size: var(--text-body);
    line-height: 1.78;
}

.pg-columns__body p {
    white-space: pre-line;
}

.pg-columns__body > * + * {
    margin-top: 0.875rem;
}

.pg-columns__steps {
    display: grid;
    gap: 0.875rem;
    margin-top: 1rem;
    padding: 0;
    list-style: none;
}

.pg-columns__steps li {
    display: flex;
    gap: 0.875rem;
    align-items: flex-start;
    color: var(--color-ink);
    font-size: var(--text-base);
    line-height: 1.65;
}

.pg-columns__step {
    color: var(--color-accent-text);
    font-weight: var(--weight-bold);
}

.pg-columns__files {
    display: grid;
    gap: 0.625rem;
    margin: 1.125rem 0 0;
    padding: 0;
    list-style: none;
}

.site-main .pg-columns__file {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4);
    padding: 0.9375rem 1.25rem;
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-sm);
    color: var(--color-ink);
    font-size: 0.9375rem;
    font-weight: var(--weight-bold);
    text-decoration: none;
}

.site-main .pg-columns__file:hover,
.site-main .pg-columns__file:focus-visible {
    border-color: var(--color-accent-strong);
}

.pg-columns__file-type {
    flex-shrink: 0;
    color: var(--color-accent-text);
}

@media (min-width: 56rem) {
    .pg-columns__inner {
        grid-template-columns: 1fr 1fr;
        gap: 3rem;
    }
}

/* --- Bordered cards and a wide card (page_cards, the ANBI page's projects) ------- */

.pg-cards__list--outline .pg-card,
.pg-card--outline {
    padding: 1.625rem 1.75rem;
    background: var(--color-canvas);
    border-color: var(--color-border);
    border-radius: var(--radius-md);
}

.pg-cards__list--outline .pg-card__title {
    color: var(--color-accent-text);
    font-size: 1.25rem;
}

.pg-cards__list--outline {
    gap: 1.125rem;
}

.pg-cards__list--outline .pg-card__body {
    margin-top: var(--space-2);
    font-size: 0.9375rem;
}

.pg-card--feature {
    margin-top: var(--space-6);
}

.pg-card__label {
    color: var(--color-accent-text);
    font-size: 0.75rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.pg-card--feature .pg-card__body {
    margin-top: var(--space-2);
    font-size: 0.96875rem;
    line-height: 1.7;
}

/* --- A dark card with its buttons beside it (cta_band "panel", the ANBI page) ---- */

.block-cta-band--panel {
    background: var(--color-canvas);
    color: var(--color-text-strong);
}

/* After a plain section it reads as part of it, like two plain sections in a row. */
.pg:not(.pg--tint):not(.pg--soft):not(.pg--dark) + .block-cta-band--panel {
    padding-top: var(--space-4);
}

.block-cta-band--panel .block-cta-band__inner {
    max-width: var(--shell-max);
    text-align: left;
}

.block-cta-band__panel {
    display: grid;
    gap: var(--space-8);
    align-items: center;
    padding: 2.25rem 1.75rem;
    background: var(--color-surface-dark);
    border-radius: var(--radius-xl);
    color: var(--color-text-on-dark);
}

.block-cta-band--panel .block-cta-band__heading {
    font-size: var(--text-section);
    font-weight: var(--weight-regular);
}

.block-cta-band--panel .block-cta-band__body {
    max-width: 35rem;
    margin-top: 0.875rem;
}

/* The outline button's usual border is too faint on the card's dark ground. */
.block-cta-band__panel .button--outline-dark {
    border-color: var(--color-text-muted);
}

.block-cta-band--panel .block-cta-band__action {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    margin-top: 0;
}

.block-cta-band--panel .block-cta-band__note {
    grid-column: 1 / -1;
    max-width: none;
    margin: 0;
    color: var(--color-text-on-dark);
}

@media (min-width: 56rem) {
    .block-cta-band__panel {
        grid-template-columns: 1.4fr 1fr;
        gap: 2.75rem;
        padding: 2.75rem 3rem;
    }
}

/* --- Vrije indeling (composition) ---------------------------------------------
   The building blocks of blocks/composition.php (Blocks\LayoutSchema). Each option
   picks one of these classes and nothing else, so whatever is nested, the result
   keeps the site's type, colours and spacing, and every row of columns or tiles
   stacks on a phone by itself. */

.cmp-section__inner {
    display: grid;
    gap: var(--space-6);
}

.cmp-width--narrow {
    max-width: calc(46rem + 2 * var(--shell-gutter));
}

.cmp-width--wide {
    max-width: calc(var(--shell-max) + 8rem);
}

.cmp-align--center {
    justify-items: center;
    text-align: center;
}

.cmp-align--center > * {
    max-width: 48rem;
}

.cmp-align--center > .cmp-columns,
.cmp-align--center > .cmp-grid,
.cmp-align--center > .cmp-banner,
.cmp-align--center > .cmp-table {
    width: 100%;
    max-width: none;
    text-align: left;
}

.cmp-gap--sm { gap: var(--space-3); }
.cmp-gap--md { gap: var(--space-6); }
.cmp-gap--lg { gap: var(--space-10); }

.cmp-stack {
    display: grid;
    align-content: start;
    min-width: 0;
}

.cmp-columns {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
}

.cmp-columns__column {
    display: grid;
    align-content: start;
    gap: var(--space-4);
    min-width: 0;
}

.cmp-valign--center {
    align-items: center;
}

@media (max-width: 47.999rem) {
    .cmp-columns--reverse > .cmp-columns__column:last-child {
        order: -1;
    }
}

@media (min-width: 48rem) {
    .cmp-columns--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .cmp-columns--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .cmp-columns--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 64rem) {
    .cmp-columns--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

.cmp-grid {
    display: grid;
    gap: var(--space-6);
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr));
}

.cmp-grid--small { grid-template-columns: repeat(auto-fill, minmax(min(100%, 12rem), 1fr)); }
.cmp-grid--large { grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr)); }

.cmp-card {
    display: grid;
    align-content: start;
    gap: var(--space-3);
    min-width: 0;
    padding: var(--space-6) var(--space-7);
    border-radius: var(--radius-lg);
    color: var(--color-text-strong);
}

.cmp-card--bordered {
    background: var(--color-surface);
    border: 1px solid var(--color-border-card);
}

.cmp-card--tinted {
    background: var(--color-surface-warm);
}

.cmp-card--plain {
    padding: 0;
    color: inherit;
}

.pg--tint .cmp-card--tinted {
    background: var(--color-surface);
}

.cmp-eyebrow {
    margin: 0;
}

.cmp-heading {
    margin: 0;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-weight: var(--weight-regular);
    line-height: 1.15;
    text-wrap: balance;
}

.cmp-heading--lg { font-size: var(--text-title); }
.cmp-heading--md { font-size: var(--text-h3); }
.cmp-heading--sm { font-size: 1.25rem; font-weight: var(--weight-medium); }

h2.cmp-heading--md { font-size: var(--text-section); }

.cmp-text {
    margin: 0;
    font-size: var(--text-body);
    line-height: 1.75;
}

.cmp-text--lead {
    font-size: var(--text-lead);
    line-height: 1.6;
}

.cmp-text--small {
    color: var(--color-text-muted);
    font-size: var(--text-sm);
}

.cmp-text a,
.cmp-list a,
.cmp-accordion__answer a,
.cmp-steps__text a {
    color: var(--color-accent-text);
    text-decoration: underline;
    text-underline-offset: 0.15em;
}

.pg--dark .cmp-heading {
    color: var(--color-ink-inverse);
}

.pg--dark .cmp-text--small,
.pg--dark .cmp-eyebrow {
    color: var(--color-text-on-dark-muted);
}

.pg--dark .cmp-text a,
.pg--dark .cmp-list a {
    color: var(--color-link-on-dark);
}

/* A framed card keeps its light background in a dark section, and its dark text. */
.pg--dark .cmp-card--bordered,
.pg--dark .cmp-card--tinted {
    color: var(--color-text-strong);
}

.pg--dark .cmp-card--bordered .cmp-heading,
.pg--dark .cmp-card--tinted .cmp-heading {
    color: var(--color-ink);
}

.pg--dark .cmp-card--bordered .cmp-text a,
.pg--dark .cmp-card--tinted .cmp-text a {
    color: var(--color-accent-text);
}

.cmp-badge-row {
    margin: 0;
}

.cmp-badge {
    display: inline-block;
    padding: 0.2rem 0.75rem;
    border-radius: var(--radius-pill);
    background: var(--color-surface-warm);
    color: var(--color-accent-text);
    font-size: var(--text-xs);
    font-weight: var(--weight-bold);
    letter-spacing: 0.04em;
}

.cmp-list {
    display: grid;
    gap: var(--space-2);
    margin: 0;
    padding-left: 1.25rem;
    font-size: var(--text-body);
    line-height: 1.7;
    text-align: left;
}

.cmp-list--checks {
    padding-left: 0;
    list-style: none;
}

.cmp-list--checks .cmp-list__item {
    position: relative;
    padding-left: 1.75rem;
}

.cmp-list--checks .cmp-list__item::before {
    content: "";
    position: absolute;
    top: 0.5em;
    left: 0.2rem;
    width: 0.8rem;
    height: 0.45rem;
    border-bottom: 2px solid var(--color-accent-text);
    border-left: 2px solid var(--color-accent-text);
    transform: rotate(-45deg);
}

.cmp-quote {
    margin: 0;
    padding: var(--space-6) var(--space-7);
    border-left: 3px solid var(--color-accent-light);
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
    background: var(--color-surface);
    text-align: left;
}

.cmp-quote blockquote {
    margin: 0;
}

.cmp-quote__text {
    margin: 0;
    color: var(--color-ink);
    font-family: var(--font-display);
    font-size: var(--text-quote);
    font-style: italic;
    line-height: 1.45;
}

.cmp-quote figcaption {
    margin-top: var(--space-3);
    color: var(--color-text-muted);
    font-size: var(--text-sm);
}

.cmp-stats {
    display: grid;
    gap: var(--space-6);
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr));
    width: 100%;
    margin: 0;
}

.cmp-stats__item {
    display: flex;
    flex-direction: column-reverse;
    gap: var(--space-1);
}

.cmp-stats__value {
    margin: 0;
    color: var(--color-accent-text);
    font-family: var(--font-display);
    font-size: var(--text-title);
    line-height: 1;
}

.cmp-stats__label {
    color: var(--color-text-muted);
    font-size: var(--text-sm);
}

.pg--dark .cmp-stats__value {
    color: var(--color-accent-light);
}

.pg--dark .cmp-stats__label {
    color: var(--color-text-on-dark-muted);
}

.cmp-image,
.cmp-video {
    width: 100%;
    min-width: 0;
    margin: 0;
}

.cmp-image img,
.cmp-video video {
    display: block;
    width: 100%;
    height: auto;
    background: var(--color-surface-sunken);
}

.cmp-image--rounded img,
.cmp-video video {
    border-radius: var(--radius-lg);
}

.cmp-image--landscape img { aspect-ratio: 3 / 2; object-fit: cover; }
.cmp-image--square img { aspect-ratio: 1; object-fit: cover; }
.cmp-image--portrait img { aspect-ratio: 4 / 5; object-fit: cover; }

.cmp-image figcaption,
.cmp-video figcaption {
    margin-top: var(--space-2);
    color: var(--color-text-muted);
    font-size: var(--text-sm);
}

.cmp-buttons {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
}

.cmp-buttons--center {
    justify-content: center;
}

.pg--dark .cmp-buttons .button--ghost,
.cmp-banner .button--ghost {
    border-color: var(--color-border-dark-strong);
    color: var(--color-ink-inverse);
}

.pg--dark .cmp-buttons .button--ghost:hover,
.cmp-banner .button--ghost:hover {
    background: var(--color-surface-dark-raised);
}

.cmp-icon {
    display: inline-flex;
    color: var(--color-accent-text);
}

.cmp-icon svg {
    width: 2rem;
    height: 2rem;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.cmp-icon--sm svg { width: 1.5rem; height: 1.5rem; }
.cmp-icon--lg svg { width: 2.75rem; height: 2.75rem; }

.pg--dark .cmp-icon {
    color: var(--color-accent-light);
}

.pg--dark .cmp-card--bordered .cmp-icon,
.pg--dark .cmp-card--tinted .cmp-icon {
    color: var(--color-accent-text);
}

.cmp-accordion {
    width: 100%;
    border-top: 1px solid var(--color-border);
    text-align: left;
}

.cmp-accordion__item {
    border-bottom: 1px solid var(--color-border);
}

.cmp-accordion__question {
    display: flex;
    justify-content: space-between;
    gap: var(--space-4);
    padding: var(--space-4) 0;
    color: var(--color-ink);
    font-size: 1.0625rem;
    font-weight: var(--weight-semibold);
    list-style: none;
    cursor: pointer;
}

.cmp-accordion__question::-webkit-details-marker {
    display: none;
}

.cmp-accordion__question::after {
    content: "+";
    flex: none;
    color: var(--color-accent-text);
    font-size: 1.25rem;
    line-height: 1.2;
}

.cmp-accordion__item[open] > .cmp-accordion__question::after {
    content: "\2212";
}

.cmp-accordion__question:focus-visible {
    outline: 2px solid var(--color-accent-text);
    outline-offset: 2px;
}

.cmp-accordion__answer {
    margin: 0;
    padding-bottom: var(--space-5);
    font-size: var(--text-body);
    line-height: 1.75;
}

.pg--dark .cmp-accordion,
.pg--dark .cmp-accordion__item {
    border-color: var(--color-border-dark);
}

.pg--dark .cmp-accordion__question {
    color: var(--color-ink-inverse);
}

.pg--dark .cmp-accordion__question::after {
    color: var(--color-accent-light);
}

.cmp-steps {
    display: grid;
    gap: var(--space-5);
    margin: 0;
    padding: 0;
    list-style: none;
    text-align: left;
    counter-reset: cmp-step;
}

.cmp-steps__item {
    position: relative;
    padding-left: 3.25rem;
    counter-increment: cmp-step;
}

.cmp-steps__item::before {
    content: counter(cmp-step);
    position: absolute;
    top: 0;
    left: 0;
    display: grid;
    place-items: center;
    width: 2.25rem;
    height: 2.25rem;
    border-radius: 50%;
    background: var(--color-surface-warm);
    color: var(--color-accent-text);
    font-weight: var(--weight-bold);
}

.cmp-steps--timeline .cmp-steps__item:not(:last-child)::after {
    content: "";
    position: absolute;
    top: 2.5rem;
    bottom: calc(-1 * var(--space-5) + 0.25rem);
    left: 1.0625rem;
    width: 2px;
    background: var(--color-border);
}

.cmp-steps__title {
    margin: 0;
    padding-top: 0.35rem;
    color: var(--color-ink);
    font-weight: var(--weight-semibold);
}

.cmp-steps__text {
    margin: var(--space-1) 0 0;
    line-height: 1.7;
}

.pg--dark .cmp-steps__title {
    color: var(--color-ink-inverse);
}

.cmp-table {
    width: 100%;
    overflow-x: auto;
    border: 1px solid var(--color-border-card);
    border-radius: var(--radius-md);
    background: var(--color-surface);
    color: var(--color-text-strong);
}

.cmp-table table {
    width: 100%;
    min-width: 32rem;
    border-collapse: collapse;
    font-size: var(--text-sm);
}

.cmp-table th,
.cmp-table td {
    padding: var(--space-3) var(--space-4);
    border-bottom: 1px solid var(--color-border);
    text-align: left;
    vertical-align: top;
}

.cmp-table th {
    background: var(--color-surface-warm);
    color: var(--color-ink);
    font-weight: var(--weight-semibold);
}

.cmp-table tbody tr:last-child td {
    border-bottom: 0;
}

.cmp-divider {
    width: 100%;
    height: 1px;
    margin: var(--space-2) 0;
    border: 0;
    background: var(--color-border);
}

.pg--dark .cmp-divider {
    background: var(--color-border-dark);
}

.cmp-spacer--sm { height: var(--space-2); }
.cmp-spacer--md { height: var(--space-6); }
.cmp-spacer--lg { height: var(--space-12); }

/* A picture with text over it on a wide screen, darkened so light text keeps its
   contrast whatever the picture; on a phone the text sits below the picture. */
.cmp-banner {
    display: grid;
    width: 100%;
    overflow: hidden;
    border-radius: var(--radius-xl);
    background: var(--color-surface-dark);
    color: var(--color-text-on-dark);
    text-align: left;
}

.cmp-banner__image {
    display: block;
    width: 100%;
    aspect-ratio: 3 / 2;
    object-fit: cover;
}

.cmp-banner__content {
    display: grid;
    align-content: center;
    gap: var(--space-4);
    padding: var(--space-8) var(--space-6);
}

.cmp-banner .cmp-heading {
    color: var(--color-ink-inverse);
}

.cmp-banner .cmp-eyebrow,
.cmp-banner .cmp-text--small {
    color: var(--color-text-on-dark-muted);
}

@media (min-width: 48rem) {
    .cmp-banner {
        grid-template-areas: "banner";
        min-height: 24rem;
    }

    .cmp-banner--lg {
        min-height: 32rem;
    }

    .cmp-banner__image,
    .cmp-banner__content {
        grid-area: banner;
    }

    .cmp-banner__image {
        height: 100%;
        aspect-ratio: auto;
        filter: brightness(0.42);
    }

    .cmp-banner__content {
        position: relative;
        max-width: 40rem;
        padding: var(--space-12);
    }
}
