/* ==========================================================================
   BEAU BARRE — PAGE-SPECIFIC STYLES
   (About, Projects, Extracurricular & Communication)
   Loaded after styles.css on interior pages.
   ========================================================================== */

/* -------------------------------------------------------------------------
   ABOUT — Compact intro (smaller heading + portrait, scoped to About page)
   ------------------------------------------------------------------------- */
.about-teaser--compact {
  grid-template-columns: 0.8fr 1.2fr;
  gap: var(--sp-8);
  align-items: stretch;
}
@media (max-width: 900px) {
  .about-teaser--compact { grid-template-columns: 1fr; gap: var(--sp-6); }
}
/* Picture sized to match the height of the text next to it (rather than a
   fixed small thumbnail), so the two areas read as proportional. */
.about-teaser--compact .portrait-frame {
  aspect-ratio: auto;
  width: 100%;
  height: 100%;
  max-width: 380px;
}
@media (max-width: 900px) {
  .about-teaser--compact .portrait-frame {
    aspect-ratio: 4 / 5;
    height: auto;
    max-width: 280px;
  }
}
.about-intro-heading {
  font-size: clamp(1.5rem, 2.6vw, 2.25rem);
  font-weight: 700;
  line-height: 1.12;
  letter-spacing: -0.01em;
}

/* -------------------------------------------------------------------------
   ABOUT — Education (with sketch)
   ------------------------------------------------------------------------- */
/* Drawing and text given roughly equal weight so the sketch doesn't read
   as an afterthought next to the school info. */
.edu-layout {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-8);
  align-items: center;
  padding-top: var(--sp-8);
  border-top: 1px solid rgba(57, 47, 39, 0.16);
}
@media (max-width: 800px) {
  .edu-layout { grid-template-columns: 1fr; gap: var(--sp-5); }
}
.edu-layout__art {
  display: flex;
  justify-content: center;
}
.edu-layout__art img {
  width: 100%;
  max-width: 460px;
  height: auto;
  display: block;
}
@media (max-width: 800px) {
  .edu-layout__art { order: -1; }
  .edu-layout__art img { max-width: 280px; }
}

/* Single school entry: name/degree with the enrollment years set alongside
   it (not off in their own empty column), then the detail tags below. */
.edu-block {
  display: flex;
  flex-direction: column;
  gap: var(--sp-5);
}
.edu-block__header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--sp-4);
  flex-wrap: wrap;
}
.edu-block__years {
  font-family: var(--font-mono);
  font-size: 0.85rem;
  font-weight: 400;
  color: var(--color-black);
  white-space: nowrap;
}
.edu-block__school { font-size: clamp(1.4rem, 2.4vw, 2rem); font-weight: 600; }
.edu-block__degree { color: var(--color-black); font-weight: 400; margin-top: var(--sp-2); }
.edu-block__details {
  display: flex;
  gap: var(--sp-3);
  flex-wrap: wrap;
}
/* .tag's beige background matches this section's own background 1:1, so it
   needs an outlined treatment here instead of its usual solid-beige badge
   look (which reads fine on the light-green sections it's normally used
   against). */
.section--alt .tag {
  background: transparent;
  border: 1px solid rgba(57, 47, 39, 0.35);
}

/* -------------------------------------------------------------------------
   ABOUT — Experience timeline
   ------------------------------------------------------------------------- */
.timeline {
  border-top: 1px solid rgba(57, 47, 39, 0.16);
}

.timeline-item {
  display: grid;
  grid-template-columns: 0.5fr 0.6fr 1.9fr;
  gap: var(--sp-6);
  padding-block: var(--sp-6);
  border-bottom: 1px solid rgba(57, 47, 39, 0.14);
}
@media (max-width: 800px) {
  .timeline-item { grid-template-columns: 1fr; gap: var(--sp-2); }
}

.timeline-item__date-group {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--sp-3);
}

.timeline-item__date {
  font-family: var(--font-mono);
  font-size: 0.8rem;
  font-weight: 400;
  color: var(--color-black);
  white-space: nowrap;
}

.timeline-item__icon {
  flex: none;
  width: 3.5rem;
  height: 3.5rem;
  opacity: 0.9;
}
@media (max-width: 800px) {
  .timeline-item__date-group { flex-direction: row; align-items: center; }
}

.timeline-item__role {
  font-weight: 700;
  color: var(--color-black);
}
.timeline-item__org {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 400;
  color: var(--color-black);
  margin-top: var(--sp-1);
}

.timeline-item__desc { color: var(--color-black); font-weight: 400; }
.timeline-item__desc p + p { margin-top: var(--sp-2); }

/* -------------------------------------------------------------------------
   ABOUT — Software & Skills (grouped tool tags)
   ------------------------------------------------------------------------- */
.skills-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--sp-7);
}
@media (max-width: 1000px) {
  .skills-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 560px) {
  .skills-grid { grid-template-columns: 1fr; }
}

.skill-group {
  padding-top: var(--sp-6);
  border-top: 1px solid var(--color-gray-lighter);
}
.skill-group__index {
  font-family: var(--font-mono);
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--color-charcoal);
  letter-spacing: 0.08em;
}
.skill-group__title {
  margin-top: var(--sp-4);
  font-size: 1.05rem;
  font-weight: 600;
}
.skill-group__tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin-top: var(--sp-5);
}
.tag--skill {
  font-size: 0.72rem;
  padding: 5px var(--sp-3);
}

/* -------------------------------------------------------------------------
   ABOUT — Resume CTA banner
   ------------------------------------------------------------------------- */
.resume-banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-6);
  padding: var(--sp-8);
  background: var(--color-bg-inverse);
  color: var(--color-text-inverse);
  flex-wrap: wrap;
}
.resume-banner h3 { color: var(--color-text-inverse); }
.resume-banner p { color: var(--color-text-inverse); font-weight: 400; margin-top: var(--sp-2); }

/* -------------------------------------------------------------------------
   ABOUT — Portrait
   ------------------------------------------------------------------------- */
.portrait-frame {
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--color-surface);
  position: relative;
}
.portrait-frame img { width: 100%; height: 100%; object-fit: cover; }
.portrait-frame__caption {
  position: absolute;
  left: var(--sp-4);
  bottom: var(--sp-4);
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 600;
  color: #fff;
  background: rgba(30, 29, 27,0.55);
  padding: var(--sp-1) var(--sp-3);
  letter-spacing: 0.06em;
}

/* -------------------------------------------------------------------------
   PROJECTS — Section tabs (Design Projects / Models / Drawings)
   ------------------------------------------------------------------------- */
.tabs {
  display: flex;
  gap: var(--sp-8);
  flex-wrap: wrap;
  border-bottom: 1px solid var(--color-gray-lighter);
  margin-bottom: 0;
}

/* Tightened top padding for the three project tabpanels, so content sits
   right under the tab strip's dividing line instead of the default
   .section spacing (which is tuned for full-page sections, not a tab
   panel that already follows a divider). Also gives all three panels a
   consistent full-bleed beige background — pair with .section--alt. */
.tabpanel-section { padding-block: var(--sp-8); }
.tab-btn {
  font-family: var(--font-display);
  font-size: clamp(1.15rem, 2.2vw, 1.5rem);
  font-weight: 700;
  letter-spacing: -0.01em;
  padding: var(--sp-4) 0;
  margin-bottom: -2px;
  border: none;
  border-bottom: 3px solid transparent;
  background: none;
  color: var(--color-charcoal);
  cursor: pointer;
  transition: color var(--dur-fast) var(--ease-soft), border-color var(--dur-fast) var(--ease-soft);
}
.tab-btn:hover { color: var(--color-black); }
.tab-btn.is-active {
  color: var(--color-black);
  border-bottom-color: var(--color-accent);
}
@media (max-width: 600px) {
  .tabs { gap: var(--sp-4); }
  .tab-btn { font-size: 0.95rem; }
}

/* -------------------------------------------------------------------------
   PROJECTS — Design Projects: alternating feature rows + expandable detail
   ------------------------------------------------------------------------- */
.project-entry {
  border-top: 1px solid var(--color-gray-lighter);
  padding-block: var(--sp-8);
  scroll-margin-top: calc(var(--nav-height) + var(--sp-4));
}
.project-entry:last-child { border-bottom: 1px solid var(--color-gray-lighter); }

.project-entry__feature {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: var(--sp-8);
  align-items: center;
}
.project-entry__media { order: 1; aspect-ratio: 4/3; }
.project-entry__body { order: 2; }
/* Alternate media left/right on every other project for editorial rhythm. */
.project-entry:nth-child(even) .project-entry__media { order: 2; }
.project-entry:nth-child(even) .project-entry__body { order: 1; }
@media (max-width: 800px) {
  .project-entry__feature { grid-template-columns: 1fr; }
  .project-entry__media, .project-entry__body { order: 0; }
}

.project-entry__num { font-family: var(--font-mono); font-size: 0.78rem; font-weight: 600; color: var(--color-charcoal); letter-spacing: 0.06em; }
.project-entry__title {
  margin-top: var(--sp-2);
  font-size: clamp(1.5rem, 2.6vw, 2.2rem);
  font-family: var(--font-display);
  font-weight: 700;
}
.project-entry__meta {
  margin-top: var(--sp-3);
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 400;
  color: var(--color-charcoal);
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.project-entry__lede {
  margin-top: var(--sp-4);
  max-width: 48ch;
  font-size: 1rem;
  line-height: 1.6;
  color: var(--color-charcoal);
}

.project-entry__summary {
  margin-top: var(--sp-5);
  display: inline-flex;
  align-items: center;
  gap: var(--sp-3);
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  color: var(--color-black);
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  transition: color var(--dur-fast) var(--ease-soft);
}
.project-entry__summary:hover { color: var(--color-accent); }
.project-entry__toggle {
  width: 22px;
  height: 22px;
  border: 1px solid var(--color-charcoal);
  border-radius: 50%;
  position: relative;
  flex-shrink: 0;
  transition: border-color var(--dur-fast) var(--ease-soft);
}
.project-entry__summary:hover .project-entry__toggle { border-color: var(--color-accent); }
.project-entry__toggle::before, .project-entry__toggle::after {
  content: '';
  position: absolute;
  top: 50%; left: 50%;
  background: var(--color-charcoal);
  transform: translate(-50%, -50%);
  transition: transform var(--dur-fast) var(--ease-soft), opacity var(--dur-fast) var(--ease-soft), background var(--dur-fast) var(--ease-soft);
}
.project-entry__summary:hover .project-entry__toggle::before,
.project-entry__summary:hover .project-entry__toggle::after { background: var(--color-accent); }
.project-entry__toggle::before { width: 9px; height: 1px; }
.project-entry__toggle::after { width: 1px; height: 9px; }
.project-entry.is-open .project-entry__toggle::after { transform: translate(-50%, -50%) rotate(90deg); opacity: 0; }

.project-entry__panel {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.6s var(--ease);
}
.project-entry__panel-inner {
  padding-top: var(--sp-7);
}

.project-detail__intro {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-8);
}
@media (max-width: 800px) {
  .project-detail__intro { grid-template-columns: 1fr; }
}

.project-detail__facts {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--sp-5);
  align-content: start;
}
.fact dt { font-family: var(--font-mono); font-size: 0.7rem; font-weight: 600; color: var(--color-charcoal); text-transform: uppercase; letter-spacing: 0.06em; }
.fact dd { margin-top: var(--sp-1); font-size: 1rem; font-weight: 400; }

.project-detail__note {
  max-width: 70ch;
  color: var(--color-charcoal);
  font-weight: 400;
}

/* Per-project image gallery shown inside the expanded panel — first image
   runs full width, the rest fall into a 2-up grid. */
.project-entry__gallery {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: var(--sp-5);
  margin-top: var(--sp-7);
}
.project-entry__gallery .media-frame { grid-column: span 3; aspect-ratio: 4/3; }
.project-entry__gallery .media-frame--wide { grid-column: span 6; aspect-ratio: 21/9; }
@media (max-width: 700px) {
  .project-entry__gallery { grid-template-columns: 1fr; }
  .project-entry__gallery .media-frame,
  .project-entry__gallery .media-frame--wide { grid-column: span 1; aspect-ratio: 4/3; }
}

/* -------------------------------------------------------------------------
   PROJECTS — Models, grouped by project. Each group is its own card: the
   full, uncropped primary photo sits beside the title and description,
   with the four supporting photos in a strip underneath both. Redesigned
   from the original cropped-hero + 2x2-thumbnail layout, which read as
   cluttered — this version gives every project room to breathe and shows
   the primary photo in full rather than force-cropping it.
   ------------------------------------------------------------------------- */
.model-group {
  margin-top: var(--sp-9);
  background: var(--color-surface);
  padding: var(--sp-7);
}
.model-group:first-child { margin-top: 0; }

.model-showcase {
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  grid-template-areas:
    "photo text"
    "strip strip";
  gap: var(--sp-7) var(--sp-8);
  align-items: center;
}

/* Primary photo — shown at its own natural proportions instead of being
   cropped into a fixed box, so the whole model photo is always visible.
   Capped by max-height purely as a safety net for extreme aspect ratios. */
.model-showcase__primary { grid-area: photo; }
.model-showcase__primary .media-frame {
  overflow: visible;
  background: none;
  display: flex;
  justify-content: center;
}
.model-showcase__primary .media-frame img {
  width: 100%;
  height: auto;
  max-height: 75vh;
  object-fit: contain;
  margin: 0 auto;
}

.model-showcase__text { grid-area: text; }
.model-showcase__title {
  font-family: var(--font-display);
  font-size: clamp(1.2rem, 1.8vw, 1.5rem);
  font-weight: 700;
  line-height: 1.2;
  color: var(--color-black);
}
.model-showcase__text p {
  margin-top: var(--sp-4);
  color: var(--color-charcoal);
  font-weight: 400;
  line-height: 1.6;
}

/* Date / Scale line — sits below the description paragraphs. */
.model-showcase__meta {
  margin-top: var(--sp-5);
  padding-top: var(--sp-4);
  border-top: 1px solid var(--color-gray-light);
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2) var(--sp-6);
}
.model-showcase__meta span {
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-charcoal);
  opacity: 0.75;
}

/* Four supporting photos, in a single row beneath the photo + text. */
.model-showcase__secondary {
  grid-area: strip;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--sp-3);
}
.model-showcase__secondary .media-frame { aspect-ratio: 1/1; }

@media (max-width: 900px) {
  .model-showcase {
    grid-template-columns: 1fr;
    grid-template-areas: "photo" "text" "strip";
  }
  .model-showcase__primary .media-frame img { max-height: 55vh; }
}
@media (max-width: 480px) {
  .model-showcase__secondary { grid-template-columns: repeat(2, 1fr); }
}

/* -------------------------------------------------------------------------
   PROJECTS — Drawings: one uniform grid, every frame the same size, laid
   out in even rows rather than grouped by project.
   ------------------------------------------------------------------------- */
.drawing-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--sp-5);
}
.drawing-grid .media-frame { aspect-ratio: 4/3; }
@media (max-width: 900px) { .drawing-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .drawing-grid { grid-template-columns: 1fr; } }

/* -------------------------------------------------------------------------
   ACTIVITY CARDS — used by the About page's Achievements section
   ------------------------------------------------------------------------- */
.activity-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-6);
}
@media (max-width: 900px) { .activity-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .activity-grid { grid-template-columns: 1fr; } }

.activity-card {
  border: 1px solid var(--color-gray-lighter);
  padding: var(--sp-6);
  display: flex;
  flex-direction: column;
  min-height: 220px;
  transition: border-color var(--dur-fast) var(--ease-soft), transform var(--dur-fast) var(--ease-soft);
}
.activity-card:hover { border-color: var(--color-accent); transform: translateY(-4px); }
.activity-card__icon { font-family: var(--font-mono); font-size: 0.72rem; font-weight: 600; color: var(--color-charcoal); letter-spacing: 0.08em; text-transform: uppercase; }
.activity-card h3 { margin-top: var(--sp-4); font-size: 1.25rem; }
.activity-card p { margin-top: auto; padding-top: var(--sp-4); color: var(--color-charcoal); font-weight: 400; font-size: 0.92rem; }

/* Wraps a multi-paragraph description (instead of the single <p> the other
   cards use) so only the whole block gets pushed to the bottom of the card
   — the paragraphs inside just stack normally with a small gap. */
.activity-card__desc { margin-top: auto; padding-top: var(--sp-4); }
.activity-card__desc p { margin-top: 0; padding-top: 0; color: var(--color-charcoal); font-weight: 400; font-size: 0.92rem; }
.activity-card__desc p + p { margin-top: var(--sp-3); }

/* Scholarships card: a stacked list of individual awards (name + one or
   more year tags) in place of the single title + description the other
   two Achievement cards use. */
.scholarship-list {
  margin-top: var(--sp-4);
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}
.activity-card .scholarship-item__name {
  margin-top: 0;
  font-size: 0.95rem;
  font-weight: 700;
  line-height: 1.35;
  color: var(--color-black);
}
.scholarship-item__tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin-top: var(--sp-2);
}

/* -------------------------------------------------------------------------
   EXTRACURRICULAR — Growth and Experience cards
   Three identical rectangles: picture on top, short teaser underneath.
   Each is a real <button> (keyboard/screen-reader accessible) that opens
   the enlarge modal defined in the "Growth and Experience modal" block
   below — see js/main.js section 9 for the click-to-enlarge behavior.
   ------------------------------------------------------------------------- */
.growth-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-6);
}
@media (max-width: 800px) { .growth-grid { grid-template-columns: 1fr; } }

.growth-card {
  position: relative;
  display: flex;
  flex-direction: column;
  text-align: left;
  background: none;
  border: 1px solid var(--color-gray-lighter);
  padding: 0;
  font: inherit;
  color: inherit;
  cursor: pointer;
  transition: border-color var(--dur-fast) var(--ease-soft), transform var(--dur-fast) var(--ease-soft);
}
.growth-card:hover, .growth-card:focus-visible { border-color: var(--color-accent); transform: translateY(-4px); }

.growth-card__frame {
  display: block;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--color-surface);
}
.growth-card__frame img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--dur-mid) var(--ease-soft);
}
.growth-card:hover .growth-card__frame img, .growth-card:focus-visible .growth-card__frame img {
  transform: scale(1.04);
}

.growth-card__body {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  padding: var(--sp-5) var(--sp-6) var(--sp-6);
}
.growth-card__title {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 1.15rem;
}
.growth-card__teaser {
  color: var(--color-charcoal);
  font-weight: 400;
  font-size: 0.9rem;
  line-height: 1.5;
}

/* Small "click to enlarge" affordance in the corner of the picture. */
.growth-card__expand {
  position: absolute;
  top: var(--sp-4);
  right: var(--sp-4);
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--color-surface);
  color: var(--color-black);
  font-size: 1.1rem;
  line-height: 1;
  transition: background var(--dur-fast) var(--ease-soft), color var(--dur-fast) var(--ease-soft), transform var(--dur-fast) var(--ease-soft);
}
.growth-card:hover .growth-card__expand, .growth-card:focus-visible .growth-card__expand {
  background: var(--color-accent);
  color: var(--color-text-inverse);
  transform: rotate(90deg);
}

/* -------------------------------------------------------------------------
   EXTRACURRICULAR — Growth and Experience modal
   Enlarged view opened by clicking a .growth-card — see js/main.js.
   ------------------------------------------------------------------------- */
.growth-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--sp-6);
}
.growth-modal[hidden] { display: none; }

.growth-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(30, 29, 27, 0.7);
  opacity: 0;
  transition: opacity var(--dur-mid) var(--ease-soft);
  cursor: pointer;
}
.growth-modal.is-open .growth-modal__backdrop { opacity: 1; }

.growth-modal__panel {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 720px;
  max-height: 88vh;
  overflow-y: auto;
  background: var(--color-surface);
  color: var(--color-black);
  opacity: 0;
  transform: translateY(16px) scale(0.98);
  transition: opacity var(--dur-mid) var(--ease-soft), transform var(--dur-mid) var(--ease-soft);
}
.growth-modal.is-open .growth-modal__panel {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.growth-modal__close {
  position: absolute;
  top: var(--sp-4);
  right: var(--sp-4);
  z-index: 2;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: none;
  background: var(--color-surface);
  color: var(--color-black);
  font-size: 1.4rem;
  line-height: 1;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-soft), color var(--dur-fast) var(--ease-soft);
}
.growth-modal__close:hover, .growth-modal__close:focus-visible {
  background: var(--color-accent);
  color: var(--color-text-inverse);
}

.growth-modal__media {
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--color-bg);
}
.growth-modal__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.growth-modal__content {
  padding: var(--sp-7);
}
.growth-modal__content h3 {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 1.5rem;
}
.growth-modal__content p {
  margin-top: var(--sp-4);
  color: var(--color-black);
  font-weight: 400;
  line-height: 1.65;
}

@media (max-width: 600px) {
  .growth-modal { padding: var(--sp-4); }
  .growth-modal__content { padding: var(--sp-6); }
}

/* -------------------------------------------------------------------------
   PROJECTS — Study model photo lightbox
   Enlarged view opened by clicking (or Enter/Space on) a model photo —
   see js/main.js. Unlike the growth modal, the image isn't cropped:
   object-fit: contain so the full photo is always visible.
   ------------------------------------------------------------------------- */
.model-showcase .media-frame { cursor: zoom-in; }
.model-showcase .media-frame img { transition: transform var(--dur-slow) var(--ease); }
.model-showcase .media-frame:hover img,
.model-showcase .media-frame:focus-within img { transform: scale(1.06); }

.lightbox {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--sp-8);
}
.lightbox[hidden] { display: none; }

.lightbox__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(30, 29, 27, 0.88);
  opacity: 0;
  transition: opacity var(--dur-mid) var(--ease-soft);
  cursor: pointer;
}
.lightbox.is-open .lightbox__backdrop { opacity: 1; }

.lightbox__panel {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  max-width: 100%;
  opacity: 0;
  transform: scale(0.98);
  transition: opacity var(--dur-mid) var(--ease-soft), transform var(--dur-mid) var(--ease-soft);
}
.lightbox.is-open .lightbox__panel {
  opacity: 1;
  transform: scale(1);
}

.lightbox__panel img {
  display: block;
  max-width: 88vw;
  max-height: 80vh;
  width: auto;
  height: auto;
  object-fit: contain;
  background: var(--color-surface);
}

.lightbox__caption {
  margin-top: var(--sp-3);
  color: var(--color-text-inverse);
  font-family: var(--font-mono);
  font-size: 0.78rem;
  letter-spacing: 0.03em;
  text-align: center;
}
.lightbox__caption:empty { display: none; }

.lightbox__close {
  position: fixed;
  top: var(--sp-5);
  right: var(--sp-5);
  z-index: 2;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: none;
  background: var(--color-surface);
  color: var(--color-black);
  font-size: 1.4rem;
  line-height: 1;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-soft), color var(--dur-fast) var(--ease-soft);
}
.lightbox__close:hover, .lightbox__close:focus-visible {
  background: var(--color-accent);
  color: var(--color-text-inverse);
}

@media (max-width: 600px) {
  .lightbox { padding: var(--sp-4); }
  .lightbox__close { top: var(--sp-3); right: var(--sp-3); }
}

/* -------------------------------------------------------------------------
   EXTRACURRICULAR — Communication (video)
   ------------------------------------------------------------------------- */
.comm-video__label {
  max-width: 960px;
  margin: 0 auto var(--sp-3);
  font-family: var(--font-mono);
  font-size: 0.85rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-charcoal);
  opacity: 0.75;
}
.comm-video {
  max-width: 960px;
  margin: 0 auto;
  background: var(--color-black);
  box-shadow: 0 20px 48px rgba(57,47,39,0.18);
}
.comm-video video {
  display: block;
  width: 100%;
  height: auto;
}

/* -------------------------------------------------------------------------
   EXTRACURRICULAR — Study Abroad (Paris) feature
   ------------------------------------------------------------------------- */
.paris-feature {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-9);
  align-items: center;
}
@media (max-width: 900px) { .paris-feature { grid-template-columns: 1fr; gap: var(--sp-7); } }

.paris-feature__frame { aspect-ratio: 4/5; overflow: hidden; background: var(--color-surface); }
.paris-feature__frame img { width: 100%; height: 100%; object-fit: cover; }

.paris-points { margin-top: var(--sp-6); display: flex; flex-direction: column; gap: var(--sp-4); }
.paris-point { display: flex; gap: var(--sp-4); align-items: flex-start; }
.paris-point__num { font-family: var(--font-mono); font-size: 0.75rem; font-weight: 600; color: var(--color-charcoal); padding-top: 4px; }
.paris-point p { color: var(--color-charcoal); font-weight: 400; font-size: 0.95rem; }
.paris-point strong { color: var(--color-charcoal); font-family: var(--font-body); font-weight: 700; }

/* -------------------------------------------------------------------------
   EXTRACURRICULAR — Personal interests tag cloud
   ------------------------------------------------------------------------- */
.interest-cloud {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-4);
}
.interest-pill {
  font-family: var(--font-mono);
  font-size: 0.85rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  padding: var(--sp-3) var(--sp-5);
  border: 1px solid var(--color-gray-lighter);
  transition: all var(--dur-fast) var(--ease-soft);
  cursor: default;
}
.interest-pill:hover {
  border-color: var(--color-accent);
  background: var(--color-surface);
  color: var(--color-black);
  transform: translateY(-2px);
}
