/* Shared card appearance tokens; component layouts opt in without changing artwork. */
:root {
  --card-radius: 24px;
  --card-padding: clamp(20px, 2.1vw, 30px);
  --card-gap: clamp(16px, 1.6vw, 24px);
  --card-border: 1px solid rgba(225, 239, 231, .16);
  --card-surface: linear-gradient(135deg, rgba(255, 255, 255, .065), rgba(255, 255, 255, .018)), rgba(22, 29, 27, .48);
  --card-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 8px 28px rgba(0, 0, 0, .06);
  --card-title-size: clamp(1.375rem, 1.8vw, 1.75rem);
  --card-body-size: 1rem;
  --card-meta-size: .75rem;
  --card-action-height: 44px;
  --card-action-surface: rgba(255, 255, 255, .045);
  --card-action-hover: rgba(255, 255, 255, .09);
  --card-media-radius: calc(var(--card-radius) - 8px);
}
@media (prefers-reduced-transparency: reduce) {
  :root { --card-surface: #202724; --card-action-surface: #2b3430; --card-shadow: none; }
}
@media (forced-colors: active) {
  :root { --card-surface: Canvas; --card-border: 1px solid CanvasText; --card-shadow: none; --card-action-surface: ButtonFace; --card-action-hover: Highlight; }
}

/* Shared portfolio card contract; see WEBSITE-DESIGN.md.
   Widths belong to each component. Height belongs to all matching content,
   including cards outside the horizontal viewport. Never fit visible cards. */
@media screen {
  /* The shared person collection uses the same surface as Work cards. Its
     responsive widths, media proportions and filter behavior stay local. */
  .person-collection-rail > .person-collection-card {
    padding: var(--card-padding);
    border: var(--card-border);
    border-radius: var(--card-radius);
    background: var(--card-surface);
    box-shadow: var(--card-shadow);
  }
  .person-collection-rail { gap: var(--card-gap); }
  .person-collection-card .person-work-image { border-radius: var(--card-media-radius); }

  :root :is(.profile-rail, .professional-rail, .institution-rail, .learning-rail,
    .credit-rail, .home-work-rail, .home-press-rail, .event-programme-rail,
    .hyam-history-rail) {
    align-items: stretch;
  }

  :root :is(.profile-rail, .professional-rail, .institution-rail, .learning-rail,
    .credit-rail, .home-work-rail, .home-press-rail, .event-programme-rail,
    .hyam-history-rail) > :not([hidden]) {
    align-self: stretch;
    height: auto;
    box-sizing: border-box;
    overflow-wrap: anywhere;
  }

  /* Changing a filter may animate once; lateral scrolling never resizes. */
  .person-page--chapters .person-collection-rail {
    transition: none;
  }

  .profile-rail > :is(.person-note, .edition-entry, .edition-work,
    .edition-organization, .edition-card),
  .home-work-rail > .work-card,
  .home-press-rail > .home-press-card,
  .hyam-history-rail > .hyam-document,
  .credit-rail > article {
    display: flex;
    flex-direction: column;
  }

  /* The shared wrapper has one padding value for every card in its row. */
  .person-collection-rail > .person-collection-card > :is(.person-work,
    .person-note, .recognition-row, .coverage-card) {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
  }

  .person-collection-card .recognition-row > div,
  .person-collection-card .recognition-row.with-event-image > div,
  .person-collection-card .person-work > div,
  .profile-rail .coverage-copy,
  .professional-rail .coverage-copy,
  .home-press-card > div,
  .home-work-rail .card-caption,
  .home-work-rail .card-caption > div,
  .credit-rail > .credit-person > div {
    display: flex;
    flex-direction: column;
    flex: 1;
    min-width: 0;
  }

  .person-collection-card .person-work-image,
  .home-work-rail > .work-card > .image-link,
  .home-press-card > .home-press-image,
  .credit-rail > .credit-person > :is(img, .credit-initial) {
    flex-shrink: 0;
  }

  /* Keep destinations and provenance at the reading edge, with real space
     above them rather than clipping text or inserting empty filler copy. */
  .profile-rail .person-note > :is(a, .person-record-sources):last-child,
  .profile-rail .edition-entry > .edition-entry-source,
  .profile-rail .edition-organization > .edition-entry-source,
  .person-collection-card .recognition-row .source-link,
  .profile-rail .coverage-copy > :is(.record-work-links, .coverage-relationship, .publication-citation):last-child,
  .professional-rail .coverage-copy > :is(.record-work-links, .coverage-relationship, .publication-citation):last-child,
  .credit-rail .portrait-credit {
    margin-top: auto;
    padding-top: 20px;
  }

  .person-collection-card .person-work dl,
  .home-work-rail .card-role {
    margin-top: auto;
    padding-top: 12px;
  }

  .person-collection-card .event-documentation,
  .person-collection-card > .person-entry-attribution {
    margin-top: auto;
    padding-top: 20px;
  }

  .home-press-card .home-press-action {
    margin-top: auto;
    align-self: flex-start;
  }

  .hyam-history-rail > .hyam-document > figcaption {
    margin-top: auto;
    padding-top: 12px;
  }

  .credit-acknowledgements .credit-rail > article > h4 {
    margin-top: auto;
    padding-top: 14px;
  }

  /* Legacy directory rails must retain the same full-text behavior. */
  .people-directory.profile-rail .person-connection-excerpt {
    display: block;
    -webkit-line-clamp: unset;
    overflow: visible;
  }
}
