/* Scoped finishing pass: functional alignment, editorial image rhythm. */
/* Real anchors inside existing figures keep image dimensions and grid tracks intact. */
body main .related-image-link { display:block; width:100%; color:inherit; text-decoration:none; line-height:0; cursor:pointer; }
body main .related-image-link:focus-visible { outline:3px solid #008295; outline-offset:5px; }
body main .experience-section__links { align-items:baseline; gap:16px 32px; }
body main .experience-section__links > a {
  display:inline-flex; align-items:baseline; gap:.55em; min-height:44px;
  padding:7px 0; margin:0; font:500 18px/1.6 var(--body);
}
body main .experience-section__links > a > .external-link-icon { margin:0; align-self:center; }
body main .experience-section__links > a > .content-link__direction { align-self:baseline; }
body main .project-logo-link { display:block; position:relative; width:100%; }
body main .project-logo-link > .external-link-icon {
  position:absolute; bottom:0; right:-24px; width:18px; height:18px; margin:0;
}
body main .project-logo-link:focus-visible { outline:3px solid currentColor; outline-offset:6px; }
.contact-map__after { margin-top:24px; }
.contact-map__after .contact-directions__note { margin:0 0 16px; }
/* Keep protected brand names inside a single flex text item in FAQ controls. */
.faq-v3 summary > .faq-summary-label { min-width:0; flex:1; }
.faq-v3 summary::after { flex:none; }

/* Only overview thumbnails are intentionally cropped. Original files unchanged. */
body main [data-bj-grid] .supplied-photo { aspect-ratio:4/3; overflow:hidden; height:auto; margin-bottom:24px; }
body main [data-bj-grid] .supplied-photo[data-source-image] img {
  width:100%; height:100%; aspect-ratio:4/3 !important; object-fit:cover;
  object-position:var(--thumb-focus,50% 42%);
}
/* Inspected square group portrait: retain every head, crop mostly lower foreground. */
body main [data-bj-grid] .supplied-photo[data-source-image="053"] img { object-position:50% 0%; }

/* A calm title panel overlaps only the inspected bottom edge, never a face.
   Size scales with actual image width, not headline length. No forced hero crop. */
.journal-article-standard:has(.bj-article-hero.supplied-photo) { container-type:inline-size; }
.journal-article-standard:has(.bj-article-hero.supplied-photo) .bj-title-panel {
  margin-top:calc(-1 * min(10cqw,144px)); max-width:1060px;
}
@media(max-width:700px) {
  .journal-article-standard:has(.bj-article-hero.supplied-photo) .bj-title-panel {
    margin-top:-24px; width:calc(100% - 2 * var(--gutter) - 16px); padding:24px 16px 28px;
  }
}
/* Delivered panoramic detail crops need a shallower overlap. In 121 the
   close-up mouth reaches the lower edge: preserve the entire face. */
@media(min-width:701px) {
  .journal-article-standard:has(.bj-article-hero:is([data-source-image="107"],[data-source-image="113"],[data-source-image="118"])) .bj-title-panel { margin-top:calc(-1 * min(5cqw,64px)); }
}
.journal-article-standard:has(.bj-article-hero[data-source-image="121"]) .bj-title-panel { margin-top:0; }

/* Progressive motion: only animate when entering, never hide content awaiting JS. */
@media(prefers-reduced-motion:no-preference) {
  .media-arriving { animation:media-arrive .6s cubic-bezier(.2,.65,.3,1) both; }
  @keyframes media-arrive { from { opacity:.72; transform:translateY(14px); } to { opacity:1; transform:none; } }
}
@media(hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference) {
  .bj-card .content-card__action .content-link__direction,
  .gallery-photo-link__hint,.project-logo-link > .external-link-icon { transition:transform .2s ease, background-color .2s ease; }
  .bj-card a:hover .content-card__action .content-link__direction { transform:translateX(4px); }
  .gallery-photo-link:hover .gallery-photo-link__hint { transform:translateY(-3px); }
  .project-logo-link:hover > .external-link-icon { transform:translate(2px,-2px); }
}
/* Let the entire image group follow within its own adjacent text column. */
.picture-grid > .picture-media { align-self:start; }
@media(min-width:1121px) and (prefers-reduced-motion:no-preference) {
  .picture-grid > .picture-media.media-group-can-follow {
    position:sticky;
    top:var(--media-follow-top,calc(var(--header,112px) + 28px));
  }
}
@media(prefers-reduced-motion:reduce) {
  .media-arriving { animation:none !important; transform:none !important; }
  .picture-grid > .picture-media.media-group-can-follow { position:static; }
}
@media print { .media-arriving { animation:none; } .media-group-can-follow { position:static !important; } }
