/*
Theme Name:        Apex Photo Studios
Theme URI:         https://apexphotostudios.com
Author:            Apex Photo Studios
Author URI:        https://apexphotostudios.com
Description:       Custom block theme for Apex Photo Studios — Work Sans typography, cyan + yellow accents over dark footer. Pairs with the Apex Booking plugin to embed the booking widget.
Version:           1.0.0
Requires at least: 6.4
Tested up to:      6.4
Requires PHP:      8.0
License:           GPL-2.0-or-later
License URI:       https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:       apex-photo-studios
Tags:              full-site-editing, block-styles, custom-colors, custom-typography
*/

/*
Block themes are configured via theme.json — most styling lives there.
This file is required by WordPress for theme detection and houses small
overrides that don't translate to theme.json (block variations, contextual
overrides on dark surfaces, etc.).
*/

/* ───── Tabular numerals on prices / dates / IDs ─────────────────── */
.tabular,
.has-mono-font {
  font-variant-numeric: tabular-nums;
}

/* ───── Eyebrow label — small uppercase mono ─────────────────────── */
.is-style-eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0;
}

/* ───── Dark footer overrides ────────────────────────────────────── */
.has-footer-background-color a,
.has-footer-background-color a:visited {
  color: #FFFFFF;
  text-decoration: none;
  transition: color 120ms ease;
}
.has-footer-background-color a:hover {
  color: var(--wp--preset--color--accent);
}
.has-footer-background-color .footer-links {
  list-style: none;
  padding-left: 0;
}
.has-footer-background-color .footer-links li {
  margin: 0;
}

/* Eyebrow on dark surfaces flips to a light gray */
.has-footer-background-color .is-style-eyebrow {
  color: #FFFFFF;
  opacity: 0.7;
}

/* ───── Hero text on dark cover blocks ───────────────────────────── */
.wp-block-cover .is-style-eyebrow {
  color: #FFFFFF;
  opacity: 0.85;
}

/* ───── Site title in header — make it look like a wordmark ──────── */
.wp-block-site-title a {
  text-decoration: none;
  color: var(--wp--preset--color--ink) !important;
}
.wp-block-site-title a:hover {
  color: var(--wp--preset--color--accent) !important;
}

/* ───── Header: logo image + DTLA locale badge ─────────────────────── */
.apex-logo-link {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
}
.apex-logo {
  height: 80px;
  width: auto;
  display: block;
}
.apex-locale-badge {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 4px;
  padding: 4px 8px;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.14em;
  color: var(--wp--preset--color--ink-2);
  line-height: 1;
}

/* ───── Header nav: Title Case, underline on active page ───────────── */
.wp-block-navigation .wp-block-navigation-item__content {
  text-transform: none;
  letter-spacing: 0;
  padding: 4px 0;
}
.wp-block-navigation .wp-block-navigation-item.current-menu-item > a,
.wp-block-navigation .wp-block-navigation-item.current-menu-ancestor > a,
.wp-block-navigation .current-menu-item .wp-block-navigation-item__content,
.wp-block-navigation .current-menu-ancestor .wp-block-navigation-item__content {
  text-decoration: underline;
  text-underline-offset: 8px;
  text-decoration-thickness: 1px;
}

/* ───── Booking pill button (replaces "Book now" CTA) ──────────────── */
.apex-booking-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--wp--preset--color--ink);
  border-radius: 999px;
  padding: 9px 22px;
  font-size: 14px;
  font-weight: 500;
  color: var(--wp--preset--color--ink);
  text-decoration: none;
  background: transparent;
  transition: background-color 120ms ease, color 120ms ease;
}
.apex-booking-pill:hover {
  background: var(--wp--preset--color--ink);
  color: #FFFFFF;
}

/* ───── Studio page: photo grid caption overlays ──────────────────── */
.apex-photo {
  position: relative;
  display: block;
  overflow: hidden;
  border-radius: 6px;
}
.apex-photo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.apex-photo__caption {
  position: absolute;
  left: 12px;
  bottom: 12px;
  background: rgba(0, 0, 0, 0.78);
  color: #FFFFFF;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 5px 9px;
  border-radius: 2px;
  line-height: 1;
}

/* ───── Studio page: photo grid (1 hero left + 3 thumbs stacked right) ─── */
/* Height is fluid but bounded — without this the hero is forced to span
   3 rows of 4:3 thumbs, which on a 1400px canvas is ~870px tall. */
.apex-photo-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.65fr) minmax(0, 1fr);
  grid-template-rows: repeat(3, 1fr);
  gap: 12px;
  height: clamp(320px, 36vw, 520px);
}
.apex-photo--hero {
  grid-column: 1;
  grid-row: 1 / 4;
}
.apex-photo-grid .apex-photo {
  height: 100%;
  aspect-ratio: auto;
}
@media (max-width: 768px) {
  .apex-photo-grid {
    grid-template-columns: 1fr;
    grid-template-rows: auto;
    height: auto;
  }
  .apex-photo-grid .apex-photo {
    aspect-ratio: 4 / 3;
    height: auto;
  }
  .apex-photo--hero { grid-column: 1; grid-row: auto; }
}

/* ───── Studios index: card grid ──────────────────────────────────── */
.apex-studio-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
}
@media (max-width: 900px) { .apex-studio-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .apex-studio-grid { grid-template-columns: 1fr; } }

.apex-studio-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  overflow: hidden;
  background: var(--wp--preset--color--white);
  transition: border-color 120ms ease, transform 120ms ease;
}
.apex-studio-card:hover {
  border-color: var(--wp--preset--color--ink-3);
  transform: translateY(-2px);
}
.apex-studio-card__photo {
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: var(--wp--preset--color--soft);
}
.apex-studio-card__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.apex-studio-card__body { padding: 20px; }
.apex-studio-card__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 8px 0;
}
.apex-studio-card__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 28px;
  font-weight: 500;
  letter-spacing: -0.015em;
  margin: 0 0 12px 0;
  color: var(--wp--preset--color--ink);
}
.apex-studio-card__meta {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 12px;
  color: var(--wp--preset--color--ink-2);
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: 0;
  font-variant-numeric: tabular-nums;
}
.apex-studio-card__price {
  color: var(--wp--preset--color--ink);
  font-weight: 600;
}

/* ───── Homepage: "What are you looking for?" 2-card picker ──────── */
.apex-picker-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 28px;
}
@media (max-width: 760px) { .apex-picker-grid { grid-template-columns: 1fr; } }
.apex-picker-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  overflow: hidden;
  background: var(--wp--preset--color--white);
  transition: border-color 120ms ease, transform 120ms ease;
}
.apex-picker-card:hover {
  border-color: var(--wp--preset--color--ink-3);
  transform: translateY(-2px);
}
.apex-picker-card__photo {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--wp--preset--color--soft);
}
.apex-picker-card__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.apex-picker-card__body { padding: 28px; }
.apex-picker-card__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 24px;
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--wp--preset--color--ink);
  margin: 0 0 10px 0;
}
.apex-picker-card__desc {
  font-size: 15px;
  line-height: 1.55;
  color: var(--wp--preset--color--ink-2);
  margin: 0 0 24px 0;
  max-width: 42ch;
}
.apex-picker-card__btn {
  display: inline-flex;
  align-self: flex-start;
  background: var(--wp--preset--color--accent);
  color: var(--wp--preset--color--ink);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  border-radius: 3px;
  padding: 12px 22px;
}

/* ───── Homepage: brand logos auto-scroll marquee ─────────────────── */
.apex-logo-marquee {
  position: relative;
  overflow: hidden;
  margin-top: 8px;
}
.apex-logo-marquee__track {
  display: flex;
  align-items: center;
  gap: 64px;
  width: max-content;
  animation: apex-logo-marquee-scroll 42s linear infinite;
}
.apex-logo-marquee:hover .apex-logo-marquee__track {
  animation-play-state: paused;
}
.apex-logo-marquee__item {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 80px;
}
.apex-logo-marquee__item img {
  max-height: 80px;
  max-width: 280px;
  width: auto;
  height: auto;
  object-fit: contain;
}
.apex-logo-marquee__fade {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 96px;
  z-index: 1;
  pointer-events: none;
}
.apex-logo-marquee__fade--left {
  left: 0;
  background: linear-gradient(90deg, var(--wp--preset--color--white), transparent);
}
.apex-logo-marquee__fade--right {
  right: 0;
  background: linear-gradient(270deg, var(--wp--preset--color--white), transparent);
}
@keyframes apex-logo-marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .apex-logo-marquee__track { animation: none; }
  .apex-logo-marquee { overflow-x: auto; }
}

/* ───── Marketing pages: 3-col feature/service grid ───────────────── */
.apex-feature-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 32px;
}
@media (max-width: 900px) { .apex-feature-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .apex-feature-grid { grid-template-columns: 1fr; } }

.apex-feature-card {
  border-top: 1px solid var(--wp--preset--color--ink);
  padding-top: 20px;
}
.apex-feature-card__media { margin-top: 16px; }
.apex-feature-card__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 8px 0;
}
.apex-feature-card__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: -0.01em;
  margin: 0 0 10px 0;
  color: var(--wp--preset--color--ink);
}
.apex-feature-card__body {
  font-size: 14px;
  line-height: 1.6;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}

/* Podcast page — reasons (no top rule, sand-card section) */
.apex-reason { padding-top: 4px; }
.apex-reason__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: -0.01em;
  margin: 0 0 10px 0;
  color: var(--wp--preset--color--ink);
}
.apex-reason__body {
  font-size: 15px;
  line-height: 1.6;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}

/* Equipment page policy strip — replaces the heavy gray callout
   with a compact 2×2 grid of inline policy items. Sits between the
   WP hero and the booking-app widget below so the visual transition
   doesn't read as a blank gap. */
.apex-policy-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 20px 40px;
  margin: 0;
}
@media (max-width: 700px) {
  .apex-policy-grid { grid-template-columns: 1fr; gap: 18px; }
}
.apex-policy-grid > div { margin: 0; }
.apex-policy-grid dt {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 6px 0;
}
.apex-policy-grid dd {
  margin: 0;
  font-size: 14px;
  line-height: 1.55;
  color: var(--wp--preset--color--ink-2);
}
.apex-policy-grid dd a {
  color: var(--wp--preset--color--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.apex-policy-grid dd a:hover { color: var(--wp--preset--color--accent); }

/* Production-services inquiry form */
/* No global box-sizing reset in this theme, so scope border-box to the form —
   otherwise width:100% inputs + padding overflow their container on mobile. */
.apex-prod-form,
.apex-prod-form *,
.apex-prod-form *::before,
.apex-prod-form *::after { box-sizing: border-box; }
.apex-prod-form {
  display: grid;
  gap: 40px;
  width: 100%;
  max-width: 720px;
  margin: 0;
  /* Soft card so the form has presence in the page. */
  padding: 36px clamp(20px, 4vw, 44px);
  background: var(--wp--preset--color--off-white, #fafaf8);
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
}
@media (max-width: 600px) {
  .apex-prod-form { padding: 28px 20px; gap: 32px; }
}

.apex-prod-form__section {
  display: grid;
  gap: 20px;
}
.apex-prod-form__section + .apex-prod-form__section {
  border-top: 1px solid var(--wp--preset--color--line);
  padding-top: 32px;
}
.apex-prod-form__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0;
}

.apex-prod-form__row { display: grid; gap: 8px; }
.apex-prod-form__row--two {
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.apex-prod-form__row--phone {
  grid-template-columns: minmax(0, 220px) 1fr;
  gap: 12px;
}
@media (max-width: 560px) {
  .apex-prod-form__row--two,
  .apex-prod-form__row--phone { grid-template-columns: 1fr; }
}

/* Radios: inline horizontal, fix the broken stacked look. */
.apex-prod-form__row--radios {
  border: 0;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 10px;
}
.apex-prod-form__row--radios > .apex-prod-form__label {
  display: inline-block;
}
.apex-prod-form__radios {
  display: flex;
  flex-wrap: wrap;
  gap: 22px;
}
.apex-prod-form__radio {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  cursor: pointer;
  user-select: none;
}
.apex-prod-form__radio input[type="radio"] {
  accent-color: var(--wp--preset--color--ink);
  width: 16px;
  height: 16px;
  margin: 0;
}

.apex-prod-form label {
  display: grid;
  gap: 6px;
}
.apex-prod-form__label {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
}

.apex-prod-form input[type="text"],
.apex-prod-form input[type="email"],
.apex-prod-form input[type="tel"],
.apex-prod-form select,
.apex-prod-form textarea {
  width: 100%;
  padding: 14px 16px;
  font-family: inherit;
  font-size: 16px;
  line-height: 1.5;
  color: var(--wp--preset--color--ink);
  background: #fff;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 4px;
  transition: border-color 120ms ease, box-shadow 120ms ease;
  -webkit-appearance: none;
  appearance: none;
}
.apex-prod-form select {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23595959' d='M3.5 6l4.5 4.5L12.5 6z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 14px center;
  background-size: 14px;
  padding-right: 40px;
  cursor: pointer;
}
.apex-prod-form input::placeholder,
.apex-prod-form textarea::placeholder {
  color: var(--wp--preset--color--ink-3);
  opacity: 0.7;
}
.apex-prod-form input:focus,
.apex-prod-form select:focus,
.apex-prod-form textarea:focus {
  outline: 0;
  border-color: var(--wp--preset--color--ink);
  box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.08);
}
.apex-prod-form textarea { resize: vertical; min-height: 110px; }

.apex-prod-form__submit {
  justify-self: start;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 16px 32px;
  background: var(--wp--preset--color--ink);
  color: var(--wp--preset--color--white);
  border: 0;
  border-radius: 3px;
  font-family: var(--wp--preset--font-family--sans);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background-color 120ms ease, transform 80ms ease;
}
.apex-prod-form__submit:hover {
  background: var(--wp--preset--color--accent);
  color: var(--wp--preset--color--ink);
}
.apex-prod-form__submit:active { transform: translateY(1px); }
.apex-prod-form__submit:disabled { opacity: 0.5; cursor: progress; }

.apex-prod-form__status {
  margin: 0;
  font-size: 14px;
  min-height: 1.4em;
}
.apex-prod-form__status[data-tone="err"] { color: #b91c1c; }
.apex-prod-form__success {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--wp--preset--color--ink);
  margin: 0;
}

/* Footer social row — inline SVG icon links, white on dark footer */
.apex-socials {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  padding: 0;
  margin: 24px 0 0 0;
}
.apex-socials li { margin: 0; padding: 0; }
.apex-socials a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  color: #fff;
  opacity: 0.75;
  transition: opacity 120ms ease, transform 120ms ease;
}
.apex-socials a:hover { opacity: 1; transform: translateY(-1px); }
.apex-socials a:focus-visible {
  opacity: 1;
  outline: 2px solid var(--wp--preset--color--accent);
  outline-offset: 4px;
  border-radius: 4px;
}
.apex-socials svg { width: 20px; height: 20px; }

/* Contact page — channel cards (no image, eyebrow / value / body) */
.apex-contact-card {
  border-top: 1px solid var(--wp--preset--color--ink);
  padding-top: 16px;
}
.apex-contact-card__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 8px 0;
}
.apex-contact-card__value {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: -0.01em;
  margin: 0 0 10px 0;
  color: var(--wp--preset--color--ink);
}
.apex-contact-card__value a { color: inherit; text-decoration: none; }
.apex-contact-card__value a:hover { color: var(--wp--preset--color--accent); }
.apex-contact-card__body {
  font-size: 14px;
  line-height: 1.6;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}

/* Production page — "Why Apex" cards (image + title + body) */
.apex-why-card { display: flex; flex-direction: column; gap: 16px; }
.apex-why-card__photo {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-radius: 10px;
  background: var(--wp--preset--color--soft);
}
.apex-why-card__photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.apex-why-card__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 24px;
  font-weight: 500;
  letter-spacing: -0.01em;
  margin: 0 0 8px 0;
  color: var(--wp--preset--color--ink);
}
.apex-why-card__body {
  font-size: 15px;
  line-height: 1.6;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}

/* Production page — numbered process steps (01/02/03) */
.apex-step { padding-top: 4px; }
.apex-step__num {
  display: block;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 13px;
  letter-spacing: 0.14em;
  color: var(--wp--preset--color--ink-3);
  margin-bottom: 16px;
}
.apex-step__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 26px;
  font-weight: 500;
  letter-spacing: -0.01em;
  margin: 0 0 10px 0;
  color: var(--wp--preset--color--ink);
}
.apex-step__body {
  font-size: 15px;
  line-height: 1.6;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}

/* Generic 16:9 responsive video frame */
.apex-video-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: 12px;
  overflow: hidden;
  background: #000;
}
.apex-video-frame iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

/* Dashed placeholder box for photo/video slots not yet filled with
   real production assets — swap the wp:html block for a real <img>
   or <video>/iframe once assets are ready. */
.apex-media-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 16px;
  aspect-ratio: 16 / 9;
  background: var(--wp--preset--color--soft);
  border: 1px dashed var(--wp--preset--color--line);
  border-radius: 8px;
}
.apex-media-placeholder__label {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
}
.apex-media-placeholder-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
}
@media (max-width: 700px) { .apex-media-placeholder-grid { grid-template-columns: 1fr; } }

/* Real photo filling a placeholder slot (hero strip, service block, etc). */
.apex-media-photo {
  overflow: hidden;
  border-radius: 8px;
  background: var(--wp--preset--color--soft);
}
.apex-media-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* 4-up variant of .apex-feature-grid (e.g. a "beyond the camera" row) */
.apex-feature-grid--4up { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 900px) { .apex-feature-grid--4up { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .apex-feature-grid--4up { grid-template-columns: 1fr; } }

/* Hero "at a glance" stat row */
.apex-stats-row {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 32px;
  padding-top: 32px;
  border-top: 1px solid var(--wp--preset--color--line);
}
.apex-stats-row__value {
  font-family: var(--wp--preset--font-family--serif);
  font-size: clamp(28px, 2.4vw + 12px, 40px);
  font-weight: 500;
  letter-spacing: -0.02em;
  margin: 0;
}
.apex-stats-row__label {
  margin: 6px 0 0;
  font-size: 13px;
  line-height: 1.4;
  color: var(--wp--preset--color--ink-3);
}
@media (max-width: 700px) { .apex-stats-row { grid-template-columns: 1fr; gap: 20px; } }

/* Alternating image + copy service block */
.apex-service-block {
  display: flex;
  gap: 48px;
  align-items: center;
  flex-wrap: wrap;
}
.apex-service-block__media,
.apex-service-block__text {
  flex: 1 1 380px;
  min-width: 0;
}
.apex-service-block--flip { flex-direction: row-reverse; }
.apex-service-block__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: clamp(22px, 1.8vw + 14px, 28px);
  font-weight: 500;
  letter-spacing: -0.01em;
  line-height: 1.15;
  margin: 0 0 12px;
}
.apex-service-block__body {
  font-size: 15px;
  line-height: 1.6;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}
.apex-service-block__list {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px 24px;
  margin: 16px 0 0;
  list-style: none;
  padding: 0;
}
.apex-service-block__list li {
  font-size: 14px;
  padding-left: 16px;
  position: relative;
}
.apex-service-block__list li::before { content: "—"; position: absolute; left: 0; color: var(--wp--preset--color--ink-3); }
@media (max-width: 860px) {
  .apex-service-block__list { grid-template-columns: 1fr; }
}

/* Selected-work placeholder grid */
.apex-work-placeholder-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
}
@media (max-width: 900px) { .apex-work-placeholder-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .apex-work-placeholder-grid { grid-template-columns: 1fr; } }
.apex-work-placeholder { display: block; text-decoration: none; color: inherit; }
.apex-work-placeholder__title {
  margin: 12px 0 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--wp--preset--color--ink);
}
.apex-work-placeholder__meta {
  margin: 4px 0 0;
  font-size: 13px;
  color: var(--wp--preset--color--ink-3);
}

/* Horizontal scroll-snap slideshow (e.g. BTS photo strip) */
.apex-slideshow__track {
  display: flex;
  gap: 14px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.apex-slideshow__track::-webkit-scrollbar { display: none; }
.apex-slideshow__slide {
  flex: 0 0 min(60%, 380px);
  scroll-snap-align: start;
}
@media (max-width: 680px) { .apex-slideshow__slide { flex: 0 0 82%; } }
.apex-slideshow__caption {
  margin: 10px 0 0;
  font-size: 13px;
  color: var(--wp--preset--color--ink-3);
}
.apex-slideshow__nav {
  display: flex;
  gap: 10px;
  margin-top: 20px;
}
.apex-slideshow__nav button {
  width: 44px;
  height: 44px;
  border-radius: 999px;
  border: 1.5px solid var(--wp--preset--color--ink);
  background: #fff;
  color: var(--wp--preset--color--ink);
  font-size: 16px;
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
  padding: 0;
  line-height: 1;
}
.apex-slideshow__nav button:hover { background: var(--wp--preset--color--ink); color: #fff; }

/* ───── Header stacking context ───────────────────────────────────────
   The site header is rendered as <header class="wp-block-template-part">
   wrapping the inner header group. Without a stacking context here, the
   submenu (z-index 100, absolute) can sit BEHIND the front-page hero
   overlay (z-index 2 inside .apex-hero) because both end up in the root
   context with the hero painting later. Pinning the header to a high
   z-index keeps its submenus visually on top of all page content. */
header.wp-block-template-part,
body > .wp-site-blocks > header.wp-block-template-part {
  position: relative;
  z-index: 50;
}

/* ───── Header dropdown menus (Photo Studios + Production Services) ── */
/* CSS-only show/hide fallback in case WP's Interactivity API JS hasn't
   loaded; the dropdown is light (matches the white header) with a soft
   drop shadow + min-width so studio names don't wrap. */
.wp-block-navigation .has-child:hover > .wp-block-navigation__submenu-container,
.wp-block-navigation .has-child:focus-within > .wp-block-navigation__submenu-container {
  visibility: visible;
  opacity: 1;
  height: auto;
  width: auto;
  min-width: 280px;
  overflow: visible;
}
.wp-block-navigation__submenu-container {
  background: #FFFFFF !important;
  color: var(--wp--preset--color--ink) !important;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
  border: 1px solid var(--wp--preset--color--line) !important;
  border-radius: 4px;
  padding: 8px 0 !important;
  z-index: 100;
}
.wp-block-navigation__submenu-container .wp-block-navigation-item__content {
  padding: 8px 18px !important;
  display: block;
  white-space: nowrap;
  color: var(--wp--preset--color--ink) !important;
}
.wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover {
  background: var(--wp--preset--color--off-white);
  color: var(--wp--preset--color--accent) !important;
}

/* Photo Studios — trailing collection group (Daylight / Cyc / Rooftops)
   visually separated from the 9 individual spaces. */
.wp-block-navigation__submenu-container .apex-nav-collection {
  font-style: italic;
}
.wp-block-navigation__submenu-container .apex-nav-collection:first-of-type {
  border-top: 1px solid var(--wp--preset--color--line);
  margin-top: 8px;
  padding-top: 8px;
}

/* ───── /work/: case-study card grid ──────────────────────────────── */
.apex-case-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 32px;
}
@media (max-width: 900px) { .apex-case-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .apex-case-grid { grid-template-columns: 1fr; } }

.apex-case-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  transition: transform 120ms ease;
}
.apex-case-card:hover { transform: translateY(-2px); }
.apex-case-card__photo {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-radius: 6px;
  background: var(--wp--preset--color--soft);
  margin-bottom: 14px;
}
.apex-case-card__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 240ms ease;
}
.apex-case-card:hover .apex-case-card__photo img { transform: scale(1.02); }
.apex-case-card__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 6px 0;
}
.apex-case-card__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: -0.01em;
  line-height: 1.25;
  margin: 0;
  color: var(--wp--preset--color--ink);
}

/* ───── Long-form prose (legal pages, guides, migrated content) ──── */
.apex-prose {
  font-size: 16px;
  line-height: 1.7;
  color: var(--wp--preset--color--ink);
}
.apex-prose p { margin: 0 0 18px 0; }
.apex-prose h2 {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 28px;
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.2;
  margin: 40px 0 12px 0;
}
.apex-prose h3 {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: -0.01em;
  line-height: 1.25;
  margin: 28px 0 10px 0;
}
.apex-prose h4 {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 24px 0 8px 0;
}
.apex-prose a {
  color: var(--wp--preset--color--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.apex-prose a:hover { color: var(--wp--preset--color--accent); }
.apex-prose ul, .apex-prose ol {
  margin: 0 0 18px 0;
  padding-left: 24px;
}
.apex-prose li { margin-bottom: 6px; }
.apex-prose img, .apex-prose iframe {
  max-width: 100%;
  height: auto;
  border-radius: 6px;
  margin: 16px 0;
}
.apex-prose strong { font-weight: 600; }
.apex-prose hr {
  border: 0;
  border-top: 1px solid var(--wp--preset--color--line);
  margin: 32px 0;
}

/* ───── Case study detail page: hero + 2-col gallery ──────────────── */
.apex-case-hero {
  display: block;
  width: 100%;
  height: auto;
  max-height: 640px;
  object-fit: cover;
  border-radius: 6px;
}
.apex-case-gallery {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}
@media (max-width: 700px) { .apex-case-gallery { grid-template-columns: 1fr; } }
.apex-case-gallery img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 6px;
  aspect-ratio: 4 / 3;
  display: block;
}

/* ───── HeyGen partner badge (AI Avatar hero) ──────────────────────── */
.apex-partner-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--wp--preset--color--ink);
  border-radius: 999px;
  padding: 6px 14px 6px 10px;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink);
  margin: 0 0 20px 0;
  font-weight: 500;
}
.apex-partner-badge__mark {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--wp--preset--color--accent);
}

/* ───── /ai-avatar-creation/: pricing tier cards ──────────────────── */
.apex-tier-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 24px;
}
@media (max-width: 1100px) { .apex-tier-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .apex-tier-grid { grid-template-columns: 1fr; } }

.apex-tier-card {
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  background: var(--wp--preset--color--white);
}
.apex-tier-card__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0;
}
.apex-tier-card__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 24px;
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.2;
  margin: 4px 0 0 0;
  color: var(--wp--preset--color--ink);
}
.apex-tier-card__price {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 18px;
  font-weight: 500;
  color: var(--wp--preset--color--ink);
  margin: 4px 0 12px 0;
  font-variant-numeric: tabular-nums;
}
.apex-tier-card__body {
  font-size: 14px;
  line-height: 1.55;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}

/* ───── News index: post card grid ────────────────────────────────── */
.apex-post-query .wp-block-post-template {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 40px 32px;
  list-style: none;
  padding-left: 0;
}
@media (max-width: 900px) { .apex-post-query .wp-block-post-template { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .apex-post-query .wp-block-post-template { grid-template-columns: 1fr; } }

.apex-post-card {
  display: flex;
  flex-direction: column;
}
.apex-post-card__photo {
  aspect-ratio: 16 / 10;
  overflow: hidden;
  border-radius: 6px;
  background: var(--wp--preset--color--soft);
}
.apex-post-card__photo img,
.apex-post-card .wp-block-post-featured-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  border-radius: 6px;
}
.apex-post-card a {
  text-decoration: none;
  color: inherit;
}
.apex-post-card .wp-block-post-title a:hover {
  color: var(--wp--preset--color--accent);
}
.apex-post-card .wp-block-post-excerpt__more-link {
  display: inline-block;
  margin-top: 8px;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink);
  border-bottom: 1px solid var(--wp--preset--color--ink);
  padding-bottom: 2px;
}

/* ───── Single post: featured image + body typography ─────────────── */
.apex-post-hero img {
  width: 100%;
  height: auto;
  max-height: 540px;
  object-fit: cover;
  border-radius: 6px;
  display: block;
}
.apex-post-body {
  font-size: 17px;
  line-height: 1.7;
  color: var(--wp--preset--color--ink);
}
.apex-post-body p {
  margin-top: 0;
  margin-bottom: 24px;
}
.apex-post-body h2,
.apex-post-body h3,
.apex-post-body h4 {
  font-family: var(--wp--preset--font-family--serif);
  font-weight: 500;
  letter-spacing: -0.01em;
  line-height: 1.2;
  margin-top: 40px;
  margin-bottom: 12px;
}
.apex-post-body h2 { font-size: 32px; }
.apex-post-body h3 { font-size: 24px; }
.apex-post-body h4 { font-size: 19px; }
.apex-post-body a {
  color: var(--wp--preset--color--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.apex-post-body a:hover {
  color: var(--wp--preset--color--accent);
}
.apex-post-body img {
  border-radius: 6px;
  margin: 24px 0;
  /* Imported Shopify posts use raw <img> tags pointing at full-res CDN
     URLs — clamp them to the body column so they don't overflow. */
  max-width: 100%;
  height: auto;
  display: block;
}
.apex-post-body iframe,
.apex-post-body video {
  max-width: 100%;
  border-radius: 6px;
  margin: 24px 0;
}
.apex-post-body ul, .apex-post-body ol {
  margin: 0 0 24px 0;
  padding-left: 24px;
}
.apex-post-body li { margin-bottom: 8px; }
.apex-post-body blockquote {
  border-left: 3px solid var(--wp--preset--color--ink);
  margin: 32px 0;
  padding-left: 24px;
  font-family: var(--wp--preset--font-family--serif);
  font-size: 22px;
  font-style: italic;
  line-height: 1.4;
  color: var(--wp--preset--color--ink-2);
}

/* ───── 10%-off signup popup (homepage only, via wp_footer hook) ─── */
/* !important on the positioning props because the popup root lives
   outside the .wp-site-blocks container and SOMETHING in the block-
   theme cascade (probably theme.json's body-level rule) was winning
   against plain `position: fixed`, leaving the modal rendered in
   document flow at the bottom of <body>. */
#apex-popup-root {
  position: fixed !important;
  top: 0 !important;
  right: 0 !important;
  bottom: 0 !important;
  left: 0 !important;
  width: 100vw !important;
  height: 100vh !important;
  z-index: 999999 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  margin: 0 !important;
  padding: 0 !important;
}
#apex-popup-root[hidden] { display: none !important; }
.apex-popup__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  backdrop-filter: blur(2px);
  animation: apexFadeIn 200ms ease-out;
}
.apex-popup__card {
  position: relative;
  background: #FFFFFF;
  border-radius: 6px;
  width: min(560px, calc(100vw - 32px));
  padding: 56px 48px 48px;
  box-shadow: 0 24px 64px rgba(0, 0, 0, 0.3);
  animation: apexPopIn 220ms cubic-bezier(0.2, 0.9, 0.3, 1.1);
}
@media (max-width: 600px) {
  .apex-popup__card { padding: 48px 24px 32px; }
}
.apex-popup__close {
  position: absolute;
  top: 16px;
  right: 16px;
  background: transparent;
  border: 0;
  cursor: pointer;
  padding: 6px;
  color: var(--wp--preset--color--ink);
  line-height: 0;
  border-radius: 4px;
}
.apex-popup__close:hover { background: var(--wp--preset--color--off-white); }
.apex-popup__title {
  font-family: var(--wp--preset--font-family--sans);
  font-size: clamp(24px, 3vw + 8px, 34px);
  font-weight: 800;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink);
  margin: 0 0 18px 0;
  line-height: 1.1;
}
.apex-popup__sub {
  font-size: 15px;
  line-height: 1.5;
  color: var(--wp--preset--color--ink-2);
  margin: 0 0 24px 0;
  text-transform: uppercase;
  font-weight: 500;
  letter-spacing: 0.01em;
}
.apex-popup__input {
  width: 100%;
  padding: 16px 18px;
  font-size: 15px;
  border: 2px solid var(--wp--preset--color--ink);
  border-radius: 6px;
  background: #FFFFFF;
  color: var(--wp--preset--color--ink);
  font-family: inherit;
}
.apex-popup__input:focus {
  outline: 2px solid var(--wp--preset--color--accent);
  outline-offset: 2px;
}
.apex-popup__submit {
  display: block;
  width: 100%;
  margin-top: 18px;
  padding: 16px 18px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  background: var(--wp--preset--color--accent);
  color: var(--wp--preset--color--ink);
  border: 0;
  border-radius: 6px;
  cursor: pointer;
  transition: background-color 120ms ease;
}
.apex-popup__submit:hover { background: var(--wp--preset--color--accent-yellow); }
.apex-popup__submit:disabled { opacity: 0.6; cursor: not-allowed; }
.apex-popup__error {
  margin: 12px 0 0;
  font-size: 13px;
  color: #b91c1c;
}
.apex-popup__code {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 32px;
  font-weight: 600;
  letter-spacing: 0.1em;
  color: var(--wp--preset--color--ink);
  background: var(--wp--preset--color--off-white);
  border: 1px dashed var(--wp--preset--color--ink-3);
  border-radius: 6px;
  padding: 16px;
  margin: 8px 0 0;
  text-align: center;
}
@keyframes apexFadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes apexPopIn {
  from { opacity: 0; transform: translateY(8px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

/* ───── FAQ accordion (<details>/<summary>) ──────────────────────── */
.apex-faq { display: flex; flex-direction: column; }
.apex-faq__item {
  border-bottom: 1px solid var(--wp--preset--color--line);
  padding: 18px 0;
}
.apex-faq__item:first-child {
  border-top: 1px solid var(--wp--preset--color--line);
}
.apex-faq__q {
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.01em;
  line-height: 1.6;
  color: var(--wp--preset--color--ink);
  cursor: pointer;
  list-style: none;
  position: relative;
  padding-right: 32px;
}
.apex-faq__q::-webkit-details-marker { display: none; }
.apex-faq__q::after {
  content: "+";
  position: absolute;
  right: 0;
  top: 0;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 16px;
  font-weight: 400;
  color: var(--wp--preset--color--ink-3);
  transition: transform 200ms ease;
}
.apex-faq__item[open] > .apex-faq__q::after {
  content: "−";
}
.apex-faq__a {
  padding-top: 12px;
  font-size: 15px;
  line-height: 1.65;
  color: var(--wp--preset--color--ink-2);
}
.apex-faq__a a {
  color: var(--wp--preset--color--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.apex-faq__a a:hover {
  color: var(--wp--preset--color--accent);
}

/* ───── Studio page: stats row (Sq Ft / Capacity / Light / Floor) ─── */
.apex-stats {
  display: grid;
  grid-template-columns: repeat(4, auto);
  column-gap: 32px;
  row-gap: 4px;
  align-items: start;
}
@media (max-width: 720px) {
  /* Mobile: stack as 2x2 grid instead of cramming 4 across a narrow
     viewport. Drops to readable values without horizontal scroll. */
  .apex-stats {
    grid-template-columns: repeat(2, 1fr);
    column-gap: 20px;
    row-gap: 12px;
  }
}
.apex-stats__label {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 4px 0;
}
.apex-stats__value {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 14px;
  color: var(--wp--preset--color--ink);
  margin: 0;
  font-variant-numeric: tabular-nums;
}

/* ───── Outline button variant matches the brand cyan border ─────── */
.wp-block-button.is-style-outline > .wp-block-button__link {
  border-color: var(--wp--preset--color--ink);
  color: var(--wp--preset--color--ink);
  background: transparent;
}
.wp-block-button.is-style-outline > .wp-block-button__link:hover {
  background: var(--wp--preset--color--ink);
  color: #FFFFFF;
}

/* ───── /production/work portfolio grid ────────────────────────────── */
.apex-work-intro {
  max-width: 640px;
  margin: 0 0 2rem;
  color: var(--wp--preset--color--ink-2);
  font-size: 1rem;
}
.apex-work-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin: 2rem 0;
}
@media (max-width: 900px) {
  .apex-work-grid { grid-template-columns: repeat(2, 1fr); gap: 16px; }
}
@media (max-width: 560px) {
  .apex-work-grid { grid-template-columns: 1fr; }
}
.apex-work-item {
  margin: 0;
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  transition: transform 200ms ease, box-shadow 200ms ease, border-color 200ms ease;
}
.apex-work-item:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 16px -8px rgba(0,0,0,0.18);
  border-color: var(--wp--preset--color--ink-3);
}
.apex-work-item img {
  width: 100%;
  height: auto;
  display: block;
  aspect-ratio: 1 / 1;
  object-fit: cover;
}
.apex-work-item__caption {
  padding: 14px 16px 16px;
}
.apex-work-item__brand {
  margin: 0 0 4px;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
}
.apex-work-item__title {
  margin: 0;
  font-size: 14px;
  font-weight: 500;
  color: var(--wp--preset--color--ink);
  line-height: 1.35;
}

/* ───── Header right (search + cart) ───────────────────────────────── */
.apex-header-right { gap: 12px; }

/* Collapsible search — visible toggle button + hidden wp-search block
   that the toggle reveals on click. The actual <input> needs to live in
   the DOM so the form submits; we just hide it until expanded. */
.apex-search-toggle__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: 0;
  padding: 6px;
  color: var(--wp--preset--color--ink-2);
  cursor: pointer;
  border-radius: 999px;
  transition: color 120ms ease, background-color 120ms ease;
}
.apex-search-toggle__btn:hover {
  color: var(--wp--preset--color--ink);
  background: var(--wp--preset--color--soft);
}
.apex-search-toggle__btn svg {
  width: 18px;
  height: 18px;
}

/* Hide the search input by default; show when parent .apex-header-right
   has .apex-search-open (set by the toggle JS). */
.apex-header-search {
  display: none;
}
.apex-header-right.apex-search-open .apex-header-search {
  display: block;
}
.apex-header-right.apex-search-open .apex-search-toggle {
  display: none;
}

.apex-header-search .wp-block-search__inside-wrapper {
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 999px;
  overflow: hidden;
  background: var(--wp--preset--color--soft);
  transition: border-color 120ms ease;
}
.apex-header-search .wp-block-search__inside-wrapper:focus-within {
  border-color: var(--wp--preset--color--ink-3);
  background: #fff;
}
.apex-header-search .wp-block-search__input {
  border: 0 !important;
  background: transparent;
  padding: 6px 8px 6px 14px;
  font-size: 13px;
  min-height: 0;
}
.apex-header-search .wp-block-search__input:focus { outline: 0; box-shadow: none; }
.apex-header-search .wp-block-search__button {
  background: transparent;
  border: 0;
  padding: 6px 10px 6px 6px;
  color: var(--wp--preset--color--ink-3);
}
.apex-header-search .wp-block-search__button:hover {
  color: var(--wp--preset--color--ink);
}
.apex-header-search .wp-block-search__button svg {
  fill: currentColor;
  width: 16px;
  height: 16px;
}

/* Cart-style booking icon (replaces the pill label). Keeps the same
   reach + interactive area as a button but reads as a header icon. */
/* Cart-count badge — populated cross-origin by the WP footer JS from
   apex:cart-count postMessages emitted by the booking app iframes. */
.apex-booking-icon { position: relative; }
.apex-booking-icon__count {
  position: absolute;
  top: -4px;
  right: -6px;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: var(--wp--preset--color--accent);
  color: var(--wp--preset--color--ink);
  font-size: 10px;
  font-weight: 700;
  font-feature-settings: "tnum" 1, "lnum" 1;
  line-height: 18px;
  text-align: center;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
  pointer-events: none;
}

.apex-booking-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 6px;
  color: var(--wp--preset--color--ink);
  border-radius: 999px;
  text-decoration: none;
  transition: color 120ms ease, background-color 120ms ease;
}
.apex-booking-icon:hover {
  color: var(--wp--preset--color--accent);
  background: var(--wp--preset--color--soft);
}
.apex-booking-icon svg {
  width: 20px;
  height: 20px;
}

/* ───── Front-page hero rotator ──────────────────────────────────────── */
.apex-hero {
  position: relative;
  width: 100%;
  min-height: 640px;
  height: 70vh;
  max-height: 820px;
  overflow: hidden;
  background: #000;
  display: flex;
  align-items: center;
}
@media (max-width: 768px) {
  .apex-hero { min-height: 520px; height: 80vh; }
}
.apex-hero__media {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.apex-hero__item {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 800ms ease;
  pointer-events: none;
}
.apex-hero__item.is-active {
  opacity: 1;
}
.apex-hero__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(0,0,0,0.62) 0%, rgba(0,0,0,0.40) 45%, rgba(0,0,0,0.15) 100%);
  z-index: 1;
  pointer-events: none;
}
.apex-hero__overlay {
  position: relative;
  z-index: 2;
  max-width: 720px;
  padding: 60px 64px;
  color: #fff;
}
@media (max-width: 768px) {
  .apex-hero__overlay { padding: 40px 28px; }
}
.apex-hero__eyebrow {
  margin: 0 0 12px;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #fff;
  opacity: 0.85;
}
.apex-hero__title {
  margin: 0 0 20px;
  font-size: clamp(20px, 2.25vw + 8px, 36px);
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.02;
  color: #fff;
}
.apex-hero__sub {
  margin: 0;
  font-size: 17px;
  line-height: 1.55;
  color: #E5E5E5;
}
.apex-hero__ctas {
  display: flex;
  gap: 12px;
  margin-top: 32px;
  flex-wrap: wrap;
}
.apex-hero__btn {
  display: inline-block;
  padding: 12px 22px;
  font-size: 14px;
  font-weight: 500;
  border-radius: 3px;
  text-decoration: none;
  transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;
}
.apex-hero__btn--primary {
  background: var(--wp--preset--color--accent);
  color: var(--wp--preset--color--ink);
}
.apex-hero__btn--primary:hover {
  background: #fff;
}
.apex-hero__btn--ghost {
  background: transparent;
  color: #fff;
  border: 1px solid #fff;
}
.apex-hero__btn--ghost:hover {
  background: #fff;
  color: var(--wp--preset--color--ink);
}

/* ───── Front-page testimonials — curated 5-star quotes ─────────────
   3-up grid on desktop, stacked on mobile. Quote marks on each card,
   subtle hover lift. Whitley can swap copy by editing the wp:html
   block on the home page directly. */
.apex-testimonials {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
}
@media (max-width: 900px) {
  .apex-testimonials { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 600px) {
  .apex-testimonials { grid-template-columns: 1fr; }
}
/* Single-review variant — used on studio pages with only one review.
   Centered single column at a comfortable read-width so the card
   doesn't look orphaned in a wide row. */
.apex-testimonials--single {
  grid-template-columns: minmax(0, 560px);
  justify-content: center;
}
@media (max-width: 900px) {
  .apex-testimonials--single { grid-template-columns: 1fr; }
}
.apex-testimonial {
  position: relative;
  background: var(--wp--preset--color--white);
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  padding: 28px 24px 24px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  transition: transform 200ms ease, box-shadow 200ms ease, border-color 200ms ease;
}
.apex-testimonial::before {
  /* Decorative open-quote glyph in the top-left corner. */
  content: "\201C";
  position: absolute;
  top: 4px;
  left: 16px;
  font-family: var(--wp--preset--font-family--serif, Georgia, serif);
  font-size: 64px;
  line-height: 1;
  color: var(--wp--preset--color--line);
  pointer-events: none;
}
.apex-testimonial:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px -10px rgba(0, 0, 0, 0.12);
  border-color: var(--wp--preset--color--line-strong, #c9c9c9);
}
.apex-testimonial__stars {
  color: #fbbf24;
  font-size: 14px;
  letter-spacing: 2px;
  margin: 0;
  line-height: 1;
}
.apex-testimonial__body {
  font-size: 15px;
  line-height: 1.55;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
  flex: 1;
  font-style: italic;
  quotes: "\201C" "\201D";
}
.apex-testimonial__attr {
  display: flex;
  align-items: center;
  gap: 12px;
  font-style: normal;
  border-top: 1px solid var(--wp--preset--color--line);
  padding-top: 12px;
}
.apex-testimonial__avatar {
  width: 36px;
  height: 36px;
  border-radius: 999px;
  background: var(--wp--preset--color--soft);
  color: var(--wp--preset--color--ink);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.02em;
  flex-shrink: 0;
  border: 1px solid var(--wp--preset--color--line);
}
.apex-testimonial__name {
  font-size: 14px;
  font-weight: 600;
  color: var(--wp--preset--color--ink);
  letter-spacing: 0.01em;
}

/* ───── Policy callout — used on /equipment/ for the "good to know"
   notice. Light box with monospace eyebrow + bulleted policy items. */
.apex-policy-callout {
  max-width: 760px;
  background: var(--wp--preset--color--off-white);
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  padding: 20px 24px;
  margin: 0 0 16px;
}
.apex-policy-callout__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 10px;
}
.apex-policy-callout__list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.apex-policy-callout__list > li {
  position: relative;
  padding: 6px 0 6px 22px;
  font-size: 14px;
  line-height: 1.55;
  color: var(--wp--preset--color--ink-2);
}
.apex-policy-callout__list > li + li {
  border-top: 1px solid var(--wp--preset--color--line);
}
.apex-policy-callout__list > li::before {
  content: "·";
  position: absolute;
  left: 6px;
  top: 4px;
  font-weight: 700;
  color: var(--wp--preset--color--ink-3);
}
.apex-policy-callout__list strong {
  color: var(--wp--preset--color--ink);
  font-weight: 600;
}
.apex-policy-callout__list a {
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* ───── Leave-a-review form on studio pages ─────────────────────────
   Appended to every studio page by a content filter in functions.php.
   Visual: simple stacked form, rating row uses native radio inputs
   styled as star buttons (no JS needed for the picker — just CSS
   :checked and the source-order reverse trick for hover-from-left). */
.apex-leave-review {
  max-width: 640px;
  margin: 64px auto;
  padding: 32px;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  background: var(--wp--preset--color--off-white);
}
.apex-leave-review__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 4px;
}
.apex-leave-review__heading {
  font-family: var(--wp--preset--font-family--serif, Georgia, serif);
  font-size: clamp(24px, 2vw + 10px, 32px);
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.1;
  color: var(--wp--preset--color--ink);
  margin: 0 0 8px;
}
.apex-leave-review__intro {
  font-size: 14px;
  line-height: 1.55;
  color: var(--wp--preset--color--ink-3);
  margin: 0 0 24px;
}
.apex-leave-review__form {
  display: flex;
  flex-direction: column;
  gap: 16px;
  position: relative;
}
.apex-leave-review__label {
  display: block;
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin-bottom: 6px;
}
.apex-leave-review__hint {
  font-size: 9px;
  color: var(--wp--preset--color--ink-3);
  text-transform: none;
  letter-spacing: 0;
  font-family: var(--wp--preset--font-family--sans);
  font-style: italic;
}
.apex-leave-review__field {
  display: block;
}
.apex-leave-review__field input,
.apex-leave-review__field textarea {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 3px;
  background: #fff;
  font-family: var(--wp--preset--font-family--sans);
  font-size: 14px;
  line-height: 1.5;
  color: var(--wp--preset--color--ink);
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
.apex-leave-review__field textarea {
  resize: vertical;
  min-height: 96px;
}
.apex-leave-review__field input:focus,
.apex-leave-review__field textarea:focus {
  outline: 0;
  border-color: var(--wp--preset--color--ink);
  box-shadow: 0 0 0 3px rgba(77, 193, 234, 0.15);
}

/* Rating row — reverse-direction flex so :hover ~ siblings can dim the
   stars to the RIGHT of the hovered one (creating the standard "stars
   light up left-to-right on hover" UX without any JS). */
.apex-leave-review__rating {
  border: 0;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: row-reverse;
  justify-content: flex-end;
  gap: 4px;
}
.apex-leave-review__rating > legend {
  width: 100%;
  margin-bottom: 6px;
  /* legend can't live inside a flex-direction:row-reverse container
     and still appear above — pull it out of flow with order. */
  order: 999;
  flex: 1 0 100%;
  margin-top: -28px; /* hoist back above the stars row */
}
.apex-leave-review__star {
  cursor: pointer;
  font-size: 28px;
  line-height: 1;
  color: var(--wp--preset--color--line-strong, #c9c9c9);
  transition: color 80ms ease, transform 80ms ease;
}
.apex-leave-review__star input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}
/* Light up hovered star + every star to its LEFT (sibling-after in
   row-reverse = visually left). */
.apex-leave-review__star:hover,
.apex-leave-review__star:hover ~ .apex-leave-review__star,
.apex-leave-review__star:has(input:checked),
.apex-leave-review__star:has(input:checked) ~ .apex-leave-review__star {
  color: #fbbf24;
}
.apex-leave-review__star:hover { transform: scale(1.1); }
.apex-leave-review__star input:focus-visible + span {
  outline: 2px solid var(--wp--preset--color--ink);
  outline-offset: 2px;
  border-radius: 2px;
}

.apex-leave-review__submit {
  margin-top: 8px;
  background: var(--wp--preset--color--ink);
  color: #fff;
  border: 0;
  padding: 12px 24px;
  font-family: var(--wp--preset--font-family--sans);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  border-radius: 3px;
  cursor: pointer;
  align-self: flex-start;
  transition: background 120ms ease;
}
.apex-leave-review__submit:hover {
  background: var(--wp--preset--color--ink-2);
}
.apex-leave-review__submit:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
.apex-leave-review__status {
  font-size: 13px;
  margin: 0;
  min-height: 1em;
}
.apex-leave-review__status[data-tone="err"] {
  color: var(--wp--preset--color--danger);
}
.apex-leave-review__success {
  background: #ecfdf5;
  border: 1px solid #a7f3d0;
  color: #065f46;
  padding: 16px 20px;
  border-radius: 4px;
  font-size: 14px;
  line-height: 1.5;
  margin: 0;
}
.screen-reader-text {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

/* ───── Front-page category picker ────────────────────────────────── */
.apex-category-tiles {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
}
@media (max-width: 768px) {
  .apex-category-tiles { grid-template-columns: 1fr; gap: 12px; }
}
.apex-category-tile {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 24px 24px 22px;
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 4px;
  background: var(--wp--preset--color--white);
  color: var(--wp--preset--color--ink);
  text-decoration: none;
  min-height: 110px;
  transition: border-color 120ms ease, transform 120ms ease, box-shadow 120ms ease;
}
.apex-category-tile:hover {
  border-color: var(--wp--preset--color--ink);
  transform: translateY(-2px);
  box-shadow: 0 4px 12px -6px rgba(0,0,0,0.15);
}
.apex-category-tile__label {
  font-family: var(--wp--preset--font-family--serif, inherit);
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.015em;
  line-height: 1.15;
}
.apex-category-tile__hint {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--wp--preset--color--ink-3);
}
.apex-category-tile::after {
  content: "→";
  margin-top: auto;
  align-self: flex-end;
  font-size: 18px;
  color: var(--wp--preset--color--ink-3);
  transition: transform 120ms ease, color 120ms ease;
}
.apex-category-tile:hover::after {
  transform: translateX(4px);
  color: var(--wp--preset--color--ink);
}

/* ───── Front-page category picker — with-image variant ─────────────
   Adds a 16:9 hero image at the top of each tile. The tile keeps the
   same border + hover behavior; image just stacks above the existing
   label/hint/arrow row. */
.apex-category-tiles--with-image .apex-category-tile {
  padding: 0;
  overflow: hidden;
}
.apex-category-tile__media {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--wp--preset--color--soft);
}
.apex-category-tile__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 400ms ease;
}
.apex-category-tile:hover .apex-category-tile__media img {
  transform: scale(1.03);
}
.apex-category-tile__body {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 20px 24px 22px;
}
/* The trailing arrow lives directly on the <a>; with-image tiles need
   it positioned inside the body, not at the bottom of the whole card. */
.apex-category-tiles--with-image .apex-category-tile::after {
  padding: 0 24px 18px;
  margin-top: -4px;
}

/* ───── Studio page header — descriptor next to H1 ─────────────────
   Marker class `apex-studio-header` is added by the studio-page patcher
   to the heading-block group. Restructures the natural source order
   (descriptor → H1 → columns) into a two-row grid that puts the
   descriptor in-line with the H1, saving a full row of vertical space
   at the top of every studio page. Drops to a stacked layout on
   narrow screens so the descriptor doesn't crash into the big H1. */
.apex-studio-header {
  display: grid;
  grid-template-columns: auto 1fr;
  column-gap: 24px;
  row-gap: 0;
  align-items: baseline;
}
.apex-studio-header > .wp-block-heading {
  grid-column: 1;
  grid-row: 1;
  margin-top: 0 !important;
  margin-bottom: 8px !important;
}
/* The descriptor paragraph is the first child <p>; pin it to row 1,
   right side of the H1. */
.apex-studio-header > p:first-child {
  grid-column: 2;
  grid-row: 1;
  margin: 0 !important;
  align-self: baseline;
}
/* The columns block (description paragraph + stats grid) spans both
   columns on row 2. */
.apex-studio-header > .wp-block-columns {
  grid-column: 1 / -1;
  grid-row: 2;
  margin-top: 4px;
}
/* Mobile: stack the header so the descriptor sits ABOVE the studio title
   (updated per Whitley — beside the big H1 it was cramped on phones).
   display:block drops the grid, so children flow in source order and the
   descriptor <p> (first child) lands above the H1. */
@media (max-width: 700px) {
  .apex-studio-header {
    display: block;
  }
  .apex-studio-header > p:first-child {
    margin-bottom: 8px !important;
  }
}

/* ───── Studio page: hero image + sticky booking widget (top fold) ───── */
.apex-studio-stage {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  gap: 24px;
  align-items: start;
}
.apex-studio-stage .apex-photo--hero {
  aspect-ratio: 16 / 11;
  height: auto;
}
.apex-studio-stage__widget {
  /* Widget container locked to an EXACT height (not max-height) so it
     stays at the hero image's height regardless of how tall the iframe
     content wants to be. JS sets the height inline at runtime from the
     measured hero; the CSS fallback uses a sensible viewport fraction
     for the brief window before JS runs.

     The iframe inside scrolls its own content via cross-origin scroll
     (the booking app handles its own internal scrolling), so customers
     can still reach everything in the form even when the widget is
     clamped to a short height.

     overflow is visible (not hidden) so the .apex-widget-expand pill
     can hang ~50px below the widget edge without being clipped. The
     iframe is bounded by its own `height: 100% !important` so it
     doesn't need a parent overflow:hidden to clip it. */
  position: sticky;
  top: 24px;
  height: 60vh;
  border-radius: 6px;
  align-self: start;
}
#apex-booking {
  /* Fill the widget container so iframe + overlay anchor against the
     whole widget area, not just the iframe's intrinsic height. */
  height: 100%;
}
/* Expanded state — widget pops out as a fixed-position overlay so the
   photo strip + body content below the .apex-studio-stage don't shift
   down when customers want more breathing room in the booking flow.
   Collapsed state stays inline + sticky as before. */
.apex-studio-stage__widget.is-expanded {
  position: fixed;
  /* Anchored to viewport edges; explicit width/height with calc so the
     iframe inside (height: 100%) has a definite parent height to
     inherit from. Plain `height: auto` left the iframe collapsed to
     its intrinsic 150px default in expanded mode. */
  top: 8px;
  left: 24px;
  width: calc(100vw - 48px) !important;
  height: calc(100vh - 16px) !important;
  max-height: none !important;
  z-index: 200;
  background: var(--wp--preset--color--white);
  box-shadow: 0 20px 80px rgba(0, 0, 0, 0.3);
  border-radius: 8px;
}
@media (max-width: 600px) {
  .apex-studio-stage__widget.is-expanded {
    top: 6px;
    left: 6px;
    width: calc(100vw - 12px) !important;
    height: calc(100vh - 12px) !important;
  }
}
/* Backdrop injected by JS when expanded. Dims the page behind the
   floating widget so the customer's focus stays on the booking flow. */
.apex-widget-backdrop {
  position: fixed;
  inset: 0;
  z-index: 150;
  background: rgba(0, 0, 0, 0.45);
  backdrop-filter: blur(2px);
  animation: apex-backdrop-in 180ms ease-out;
}
@keyframes apex-backdrop-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* Loading skeleton + spinner for #apex-booking. Pinned absolutely on
   top of the iframe slot so the iframe can load + boot in the
   background; we remove the .is-loading class only once the iframe
   posts its first apex:resize message (handled by JS in functions.php),
   which means the booking app's React tree has actually painted —
   not just that an empty iframe element exists in the DOM. */
#apex-booking {
  position: relative;
  /* height: 100% is set above in the studio-stage block so the
     spinner overlay covers the whole widget area, not just the
     iframe's intrinsic height. */
}
.apex-booking-loading {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  background: linear-gradient(
    180deg,
    var(--wp--preset--color--soft) 0%,
    var(--wp--preset--color--off-white) 100%
  );
  color: var(--wp--preset--color--ink-3);
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  border-radius: 6px;
  z-index: 2;
  pointer-events: none;
  opacity: 1;
  transition: opacity 240ms ease;
}
.apex-booking-loading.is-hidden {
  opacity: 0;
  visibility: hidden;
}
.apex-booking-spinner {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  border: 2px solid var(--wp--preset--color--line);
  border-top-color: var(--wp--preset--color--ink);
  animation: apex-spin 720ms linear infinite;
}
@keyframes apex-spin {
  to { transform: rotate(360deg); }
}
.apex-studio-stage__widget iframe {
  /* Force the iframe to fill the widget container regardless of the
     inline height embed.js sets via postMessage. This is what makes
     overflow: hidden actually clip the iframe — without overriding
     the inline height, the iframe was rendering its content-fit
     intrinsic height (1500px+) and bleeding past the container. */
  width: 100% !important;
  height: 100% !important;
  min-height: 100% !important;
  display: block;
}
/* Bottom-edge expand/collapse toggle, injected by the studio-page JS.
   Sits over the iframe so it's always reachable; soft white-to-clear
   gradient fades the iframe content underneath so the button reads. */
.apex-widget-expand {
  position: absolute;
  /* -50px floats the pill BELOW the widget's bottom edge so it doesn't
     obscure form content. Widget container has overflow:visible so this
     isn't clipped; the iframe inside is bounded by its own
     `height: 100% !important` so we don't lose the clip behavior. */
  bottom: -50px;
  left: 0;
  right: 0;
  z-index: 3;
  padding: 8px 12px;
  display: flex;
  justify-content: center;
  pointer-events: none;
}
.apex-widget-expand__btn {
  pointer-events: auto;
  border: 1px solid var(--wp--preset--color--line);
  background: #fff;
  color: var(--wp--preset--color--ink);
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 8px 16px;
  border-radius: 999px;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
}
.apex-widget-expand__btn:hover {
  background: var(--wp--preset--color--ink);
  color: #fff;
  border-color: var(--wp--preset--color--ink);
}
.is-expanded .apex-widget-expand {
  /* Expanded (overlay) mode — pill sits INSIDE the overlay at the
     bottom edge so the customer can always reach Close without
     scrolling, and we don't want it hanging below the viewport. */
  bottom: 12px;
  padding: 0;
}

/* Top-right close X on the expanded overlay — separate from the
   bottom Close pill so customers have a familiar corner-close
   affordance too. Injected by the expand JS on openOverlay(). */
.apex-widget-close-x {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 4;
  width: 36px;
  height: 36px;
  border-radius: 999px;
  border: 1px solid var(--wp--preset--color--line);
  background: #fff;
  color: var(--wp--preset--color--ink);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
  transition: background 120ms ease, color 120ms ease, transform 120ms ease;
}
.apex-widget-close-x:hover {
  background: var(--wp--preset--color--ink);
  color: #fff;
  transform: scale(1.05);
}

@media (max-width: 900px) {
  .apex-studio-stage {
    grid-template-columns: 1fr;
  }
  .apex-studio-stage__widget {
    position: static;
    max-height: none;
    /* On mobile, single-column stacking means the widget grows to its
       natural content height inline. No need for the expand toggle. */
    height: auto !important;
  }
  .apex-studio-stage__widget iframe {
    max-height: none !important;
    height: auto !important;
    min-height: 700px !important;
  }
  /* Hide the Show More pill on mobile — the widget is fully visible
     on scroll, no need to collapse + re-expand. */
  .apex-widget-expand { display: none !important; }
}

/* Sub-image strip — small clickable thumbnail nav for the hero above.
   Auto-fill grid with ~88px cells so cards stay compact regardless of
   how many photos a studio has; thumbnails wrap to a second row on
   narrow widths instead of stretching out. Captions hidden — labels
   make the strip noisy at thumbnail size; hover the hero arrows or
   click any thumb to see the caption in the hero. */
.apex-photo-strip {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(72px, 88px));
  gap: 8px;
  margin-top: 12px;
}
.apex-photo-strip .apex-photo {
  aspect-ratio: 4 / 3;
  cursor: pointer;
  transition: transform 120ms ease, box-shadow 120ms ease, outline-color 120ms ease;
  outline: 2px solid transparent;
  outline-offset: 2px;
  border-radius: 3px;
  overflow: hidden;
}
.apex-photo-strip .apex-photo:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px -6px rgba(0, 0, 0, 0.18);
}
.apex-photo-strip .apex-photo.is-active {
  outline-color: var(--wp--preset--color--ink);
}
.apex-photo-strip .apex-photo__caption {
  display: none; /* too noisy at thumbnail size */
}
/* Mobile: hide the thumbnail strip entirely — the hero's prev/next
   arrows handle gallery nav (matterport + future videos included)
   without eating vertical space below the hero on phones. */
@media (max-width: 720px) {
  .apex-photo-strip { display: none; }
}

/* Prev/next arrows injected into the hero anchor by the gallery JS.
   Centered vertically against the hero, with a subtle white pill so
   they read on any image. */
.apex-photo--hero { position: relative; }
.apex-photo-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 40px;
  height: 40px;
  border: 0;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.92);
  color: var(--wp--preset--color--ink);
  font-size: 24px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
  transition: background 120ms ease, transform 120ms ease;
  z-index: 2;
}
.apex-photo-nav:hover {
  background: #fff;
  transform: translateY(-50%) scale(1.06);
}
.apex-photo-nav--prev { left: 12px; }
.apex-photo-nav--next { right: 12px; }
@media (max-width: 600px) {
  .apex-photo-nav { width: 36px; height: 36px; font-size: 22px; }
}

/* ───── Case-study photo slider — N-at-a-time carousel with nav arrows ───
   Generic reusable slider: wraps a row of .apex-photo tiles (same
   lightbox-enabled anchors used elsewhere) in a viewport + track. JS
   (in functions.php) steps the track by one slide-width per click and
   clamps at both ends. Visible-slide count is CSS-only (3 desktop /
   2 tablet / 1 phone) — the JS just measures rendered widths, so it
   adapts across breakpoints without hardcoding a count. */
.apex-slider {
  position: relative;
}
.apex-slider__viewport {
  overflow: hidden;
}
.apex-slider__track {
  display: flex;
  gap: 16px;
  transition: transform 320ms ease;
}
.apex-slider__track > .apex-photo {
  flex: 0 0 calc((100% - 16px * 2) / 3);
  min-width: 0;
  aspect-ratio: var(--apex-slider-ratio, 2 / 3);
}
@media (max-width: 900px) {
  .apex-slider__track { gap: 12px; }
  .apex-slider__track > .apex-photo {
    flex-basis: calc((100% - 12px) / 2);
  }
}
@media (max-width: 600px) {
  .apex-slider__track > .apex-photo {
    flex-basis: 100%;
  }
}
.apex-slider-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  border: 0;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.92);
  color: var(--wp--preset--color--ink);
  font-size: 24px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
  transition: background 120ms ease, transform 120ms ease, opacity 120ms ease;
  z-index: 2;
}
.apex-slider-nav:hover { background: #fff; transform: translateY(-50%) scale(1.06); }
.apex-slider-nav--prev { left: 12px; }
.apex-slider-nav--next { right: 12px; }
.apex-slider-nav[disabled] { opacity: 0.35; cursor: default; pointer-events: none; }
@media (max-width: 600px) {
  .apex-slider-nav { width: 36px; height: 36px; font-size: 20px; }
}

/* ───── Front-page studio cards — equal heights + crop fix ─────────
   Targets only the 3-up studio card grid on the home page. Makes each
   column stretch to the row's tallest height, hangs the body off flex:1
   so the footer (price + Details) sits at the bottom regardless of
   description length, and removes WP's default figure margin that was
   leaving a thin background gap below the image. */
.apex-studio-cards.wp-block-columns {
  align-items: stretch;
}
.apex-studio-cards > .wp-block-column {
  display: flex;
}
.apex-studio-cards > .wp-block-column > .wp-block-group {
  display: flex;
  flex-direction: column;
  flex: 1;
  width: 100%;
}
.apex-studio-cards .wp-block-image {
  margin: 0;
  display: block;
}
.apex-studio-cards .wp-block-image figure {
  margin: 0;
}
.apex-studio-cards .wp-block-image img {
  display: block;
  width: 100%;
}
/* Card body — the inner padded group below the image. Make it grow so
   short cards still extend to the column height, and let the footer
   row stick to the bottom. */
.apex-studio-cards > .wp-block-column > .wp-block-group > .wp-block-group:not(.wp-block-image) {
  display: flex;
  flex-direction: column;
  flex: 1;
}
.apex-studio-cards > .wp-block-column > .wp-block-group > .wp-block-group:not(.wp-block-image) > .wp-block-group:last-child {
  margin-top: auto;
}

/* Whole-card link — matches the "Browse by type" tile hover feedback
   above it. The outer card is now an <a>, not a <div>. */
.apex-home-studio-card {
  transition: border-color 120ms ease, transform 120ms ease, box-shadow 120ms ease;
}
.apex-home-studio-card:hover {
  border-color: var(--wp--preset--color--ink) !important;
  transform: translateY(-2px);
  box-shadow: 0 4px 12px -6px rgba(0, 0, 0, 0.15);
}
.apex-home-studio-card:hover .wp-image-1505,
.apex-home-studio-card:hover .wp-image-1167,
.apex-home-studio-card:hover .wp-image-1037 {
  transform: scale(1.03);
  transition: transform 400ms ease;
}

/* ───── Sticky "Book this studio" floating pill ──────────────────────
   Appears once the inline booking widget scrolls out of view. Smooth-
   scrolls back to the widget on click. Hidden by default + faded in
   via .is-visible to avoid a flash before JS runs. */
.apex-sticky-book {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 90;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 22px;
  border: 0;
  border-radius: 999px;
  background: var(--wp--preset--color--ink);
  color: var(--wp--preset--color--white);
  font-family: var(--wp--preset--font-family--sans);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  cursor: pointer;
  box-shadow: 0 6px 20px -4px rgba(0, 0, 0, 0.28);
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 200ms ease, transform 200ms ease, background-color 120ms ease;
}
.apex-sticky-book.is-visible {
  opacity: 1;
  transform: translateY(0);
}
.apex-sticky-book:hover {
  background: var(--wp--preset--color--accent);
  color: var(--wp--preset--color--ink);
}
.apex-sticky-book__arrow {
  display: inline-block;
  font-size: 16px;
  line-height: 1;
}
@media (max-width: 600px) {
  .apex-sticky-book {
    bottom: 16px;
    right: 16px;
    padding: 12px 18px;
    font-size: 13px;
  }
}

.apex-matterport-tile {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 100%);
  color: #fff;
  text-align: center;
  text-decoration: none;
  transition: background 200ms ease;
}
.apex-matterport-tile:hover {
  background: linear-gradient(135deg, #2a2a2a 0%, #3a3a3a 100%);
}
.apex-matterport-tile__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 16px;
}
.apex-matterport-tile__label {
  font-family: var(--wp--preset--font-family--serif, inherit);
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -0.01em;
}
.apex-matterport-tile__hint {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  opacity: 0.7;
}
/* Compact label for the matterport tile when it lives in the
   small-thumbnail strip — full label + hint doesn't fit at 88px. */
.apex-photo-strip .apex-matterport-tile__inner {
  padding: 4px;
  gap: 2px;
}
.apex-photo-strip .apex-matterport-tile__inner svg {
  width: 18px;
  height: 18px;
}
.apex-photo-strip .apex-matterport-tile__label {
  font-size: 9px;
  letter-spacing: 0;
  font-weight: 600;
  text-transform: uppercase;
}
.apex-photo-strip .apex-matterport-tile__hint { display: none; }

/* ───── Inline media in the hero (matterport iframe + videos) ───────
   Gallery JS replaces the hero <img> with an <iframe> or <video> when
   the matterport tile or a video thumbnail is clicked. These rules
   make those alternative media elements fill the hero anchor exactly
   like the image did.

   :not([hidden]) is critical — without it, my display:block rule
   overrides the hidden attribute and the empty video element ends up
   layered over the image on first load (which also blocks touch
   scrolling on mobile because the video element captures the events). */
.apex-photo--hero > iframe:not([hidden]),
.apex-photo--hero > video:not([hidden]) {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
  object-fit: cover;
  background: #000;
}
.apex-photo--hero > iframe[hidden],
.apex-photo--hero > video[hidden] {
  /* Belt-and-suspenders against any future CSS that might re-display
     these elements; also kills pointer-events so a stuck hidden video
     can't steal touch scroll. */
  display: none !important;
  pointer-events: none;
}
.apex-photo--hero.is-media-active > img {
  visibility: hidden;
}

/* ═══════════════════════════════════════════════════════════════════
   AI Avatar Creation page (HeyGen) — dark theme departure.

   Only applied when body.apex-dark-page is present (functions.php adds
   it for this page only). Doesn't affect any other page on the site.
   Uses slate tokens (matching the original Shopify template) rather
   than the editorial light palette used everywhere else.
   ═════════════════════════════════════════════════════════════════── */

body.apex-dark-page {
  background-color: #020617 !important;
  /* NO body color override — this cascades into the site header
     <header> and turns the nav links white-on-white. Only the main
     content area gets the dark-mode color. */
}
body.apex-dark-page main {
  background-color: #020617;
  color: #fff;
}
/* Header + footer template parts stay light/default — they're outside
   the main element. */

/* ────── Shared dark-page primitives ────── */
.apex-heygen-section {
  background-color: #020617;
  color: #fff;
  padding: 64px 16px;
}
.apex-heygen-wrap {
  max-width: 1280px;
  margin-left: auto;
  margin-right: auto;
  width: 100%;
}
.apex-heygen-wrap--narrow {
  max-width: 880px;
}
.apex-heygen h1, .apex-heygen h2, .apex-heygen h3, .apex-heygen h4 {
  color: #fff;
  font-family: var(--wp--preset--font-family--sans);
  letter-spacing: -0.015em;
  margin: 0;
}
.apex-heygen p { margin: 0; }

/* ────── HERO ────── */
.apex-heygen-hero {
  position: relative;
  overflow: hidden;
  padding: 96px 16px;
  background-color: #020617;
  color: #fff;
}
@media (max-width: 720px) {
  .apex-heygen-hero { padding: 64px 16px; }
}
.apex-heygen-hero__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  background-color: #020617;
}
.apex-heygen-hero__bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.5;
  display: block;
}
.apex-heygen-hero__video {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
}
.apex-heygen-hero__video iframe {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100vw;
  height: 100vh;
  transform: translate(-50%, -50%) scale(1.35);
  border: 0;
  pointer-events: none;
}
@media (min-aspect-ratio: 16/9) {
  .apex-heygen-hero__video iframe { height: 56.25vw; }
}
@media (max-aspect-ratio: 16/9) {
  .apex-heygen-hero__video iframe { width: 177.78vh; }
}
.apex-heygen-hero__scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  /* Moderate scrim — keeps the video readable as a moving background
     while putting enough tint behind the text for contrast. */
  background:
    linear-gradient(to top, #020617 0%, rgba(2,6,23,0) 35%),
    rgba(2,6,23,0.55);
  pointer-events: none;
}
.apex-heygen-hero__content {
  position: relative;
  z-index: 2;
  max-width: 1100px;
  margin: 0 auto;
  text-align: center;
}
.apex-heygen-hero__title {
  font-size: clamp(36px, 4.5vw + 8px, 68px);
  font-weight: 800;
  line-height: 1.05;
  letter-spacing: -0.025em;
  color: #fff;
  margin: 0 0 28px;
  text-align: center;
  text-shadow: 0 8px 24px rgba(0,0,0,0.5);
}
.apex-heygen-hero__title span {
  /* Dropped the gradient — at desktop widths the second-half phrase
     ("Without Scaling Your Time.") wraps and the gradient fade made
     parts of it unreadable against the video. Pure white reads on
     anything; the existing text-shadow handles the depth. */
  color: #fff;
}
.apex-heygen-hero__title {
  text-wrap: balance;
}
.apex-heygen-hero__sub {
  font-size: clamp(17px, 0.5vw + 15px, 21px);
  line-height: 1.5;
  color: #fff;
  max-width: 720px;
  margin: 0 auto 48px !important;
  font-weight: 500;
  text-align: center !important;
  text-shadow: 0 2px 12px rgba(0,0,0,0.6);
}
.apex-heygen-badge {
  display: inline-flex !important;
  align-items: center;
  gap: 10px;
  background: rgba(0,0,0,0.6);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid #334155;
  border-radius: 999px;
  padding-top: 18px !important;
  padding-right: 28px !important;
  padding-bottom: 18px !important;
  padding-left: 28px !important;
  margin-bottom: 48px !important;
  box-shadow: 0 4px 16px rgba(0,0,0,0.3);
  color: #fff;
  font-size: 14px;
  font-weight: 600;
}
.apex-heygen-badge svg { color: #a855f7; }
.apex-heygen-cta {
  display: inline-flex !important;
  align-items: center;
  gap: 8px;
  padding-top: 22px !important;
  padding-right: 42px !important;
  padding-bottom: 22px !important;
  padding-left: 42px !important;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 700;
  text-decoration: none;
  transition: all 120ms ease;
  border: 1px solid transparent;
}
.apex-heygen-cta--ghost {
  background: rgba(255,255,255,0.1);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-color: rgba(255,255,255,0.2);
  color: #fff;
}
.apex-heygen-cta--ghost:hover {
  background: rgba(255,255,255,0.2);
  color: #fff;
}
.apex-heygen-cta--primary {
  background: #2563eb;
  color: #fff;
  box-shadow: 0 8px 24px -8px rgba(37, 99, 235, 0.5);
}
.apex-heygen-cta--primary:hover {
  background: #3b82f6;
  color: #fff;
}

/* ────── Stats + marquee ────── */
.apex-heygen-stats {
  background: #020617;
  padding: 56px 0 56px;
  border-bottom: 1px solid #1e293b;
  text-align: center;
}
.apex-heygen-stats__number {
  font-size: clamp(48px, 5vw + 16px, 72px);
  font-weight: 800;
  color: #fff;
  letter-spacing: -0.02em;
  margin: 0 0 8px;
}
.apex-heygen-stats__label {
  font-size: 12px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #94a3b8;
  font-weight: 600;
  margin: 0 0 32px;
}
.apex-heygen-marquee {
  overflow: hidden;
  white-space: nowrap;
  position: relative;
  mask-image: linear-gradient(to right, transparent, #000 5%, #000 95%, transparent);
  -webkit-mask-image: linear-gradient(to right, transparent, #000 5%, #000 95%, transparent);
}
.apex-heygen-marquee__track {
  display: inline-flex;
  animation: apex-heygen-scroll 60s linear infinite;
}
.apex-heygen-marquee__item {
  flex-shrink: 0;
  width: 300px;
  height: 180px;
  margin-right: 16px;
  border-radius: 12px;
  overflow: hidden;
  position: relative;
  border: 1px solid rgba(255,255,255,0.1);
}
.apex-heygen-marquee__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease;
}
.apex-heygen-marquee__item:hover img { transform: scale(1.05); }
@keyframes apex-heygen-scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}
@media (max-width: 720px) {
  .apex-heygen-marquee__item { width: 220px; height: 130px; }
}

/* ────── Product hierarchy 4-up ────── */
.apex-heygen-grid-4 {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 24px;
}
@media (max-width: 1024px) {
  .apex-heygen-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 600px) {
  .apex-heygen-grid-4 { grid-template-columns: 1fr; }
}
.apex-heygen-prodcard {
  position: relative;
  background: #0f172a;
  border: 1px solid #1e293b;
  border-radius: 16px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  transition: background 200ms ease, border-color 200ms ease;
  overflow: hidden;
}
.apex-heygen-prodcard:hover { background: #1e293b; }
.apex-heygen-prodcard--blue:hover    { border-color: rgba(59,130,246,0.3); }
.apex-heygen-prodcard--indigo:hover  { border-color: rgba(99,102,241,0.3); }
.apex-heygen-prodcard--amber:hover   { border-color: rgba(245,158,11,0.3); }
.apex-heygen-prodcard--red:hover     { border-color: rgba(239,68,68,0.3); }
.apex-heygen-prodcard__header {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 16px;
}
.apex-heygen-prodcard__icon {
  padding: 8px;
  border-radius: 8px;
  display: inline-flex;
}
.apex-heygen-prodcard--blue .apex-heygen-prodcard__icon    { background: rgba(59,130,246,0.2); color: #60a5fa; }
.apex-heygen-prodcard--indigo .apex-heygen-prodcard__icon  { background: rgba(99,102,241,0.2); color: #818cf8; }
.apex-heygen-prodcard--amber .apex-heygen-prodcard__icon   { background: rgba(245,158,11,0.2); color: #fbbf24; }
.apex-heygen-prodcard--red .apex-heygen-prodcard__icon     { background: rgba(239,68,68,0.2); color: #f87171; }
.apex-heygen-prodcard__badge {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  border-radius: 999px;
  padding: 3px 10px;
  border: 1px solid;
}
.apex-heygen-prodcard--blue .apex-heygen-prodcard__badge   { color: #60a5fa; border-color: rgba(59,130,246,0.3); background: rgba(59,130,246,0.05); }
.apex-heygen-prodcard--indigo .apex-heygen-prodcard__badge { color: #818cf8; border-color: rgba(99,102,241,0.3); background: rgba(99,102,241,0.05); }
.apex-heygen-prodcard--amber .apex-heygen-prodcard__badge  { color: #fbbf24; border-color: rgba(245,158,11,0.3); background: rgba(245,158,11,0.05); }
.apex-heygen-prodcard--red .apex-heygen-prodcard__badge    { color: #f87171; border-color: rgba(239,68,68,0.3); background: rgba(239,68,68,0.05); }
.apex-heygen-prodcard__title {
  font-size: 18px;
  font-weight: 700;
  color: #fff;
  margin: 0 0 4px;
}
.apex-heygen-prodcard__desc {
  font-size: 14px;
  line-height: 1.55;
  color: #fff;
  margin: 0 0 16px;
}
.apex-heygen-prodcard__moat {
  background: rgba(59,130,246,0.05);
  border: 1px solid rgba(59,130,246,0.1);
  border-radius: 8px;
  padding: 12px;
  margin-bottom: 16px;
}
.apex-heygen-prodcard--indigo .apex-heygen-prodcard__moat { background: rgba(99,102,241,0.05); border-color: rgba(99,102,241,0.1); }
.apex-heygen-prodcard--amber .apex-heygen-prodcard__moat  { background: rgba(245,158,11,0.05); border-color: rgba(245,158,11,0.1); }
.apex-heygen-prodcard--red .apex-heygen-prodcard__moat    { background: rgba(239,68,68,0.05); border-color: rgba(239,68,68,0.1); }
.apex-heygen-prodcard__moat-label {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin: 0 0 4px;
}
.apex-heygen-prodcard--blue .apex-heygen-prodcard__moat-label   { color: #60a5fa; }
.apex-heygen-prodcard--indigo .apex-heygen-prodcard__moat-label { color: #818cf8; }
.apex-heygen-prodcard--amber .apex-heygen-prodcard__moat-label  { color: #fbbf24; }
.apex-heygen-prodcard--red .apex-heygen-prodcard__moat-label    { color: #f87171; }
.apex-heygen-prodcard__moat-body {
  font-size: 12px;
  line-height: 1.5;
  color: #94a3b8;
  margin: 0;
}
.apex-heygen-prodcard__footer {
  border-top: 1px solid rgba(51,65,85,0.5);
  padding-top: 16px;
  margin-top: auto;
  font-size: 12px;
  font-family: var(--wp--preset--font-family--mono, ui-monospace, monospace);
  color: #94a3b8;
  display: flex;
  align-items: center;
  gap: 8px;
}
.apex-heygen-prodcard__footer strong { color: #fff; font-weight: 500; }

/* ────── Entry-level pricing cards (2-up) ────── */
.apex-heygen-grid-2 {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 32px;
}
@media (max-width: 720px) {
  .apex-heygen-grid-2 { grid-template-columns: 1fr; }
}
.apex-heygen-pricecard {
  background: #0f172a;
  border: 1px solid #1e293b;
  border-radius: 16px;
  padding: 32px;
  display: flex;
  flex-direction: column;
  transition: border-color 200ms ease;
}
.apex-heygen-pricecard:hover { border-color: rgba(59,130,246,0.3); }
.apex-heygen-pricecard__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 24px;
}
.apex-heygen-pricecard__title {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 20px;
  font-weight: 700;
  color: #fff;
}
.apex-heygen-pricecard__title-icon {
  background: #1e293b;
  padding: 8px;
  border-radius: 8px;
  color: #60a5fa;
  display: inline-flex;
}
.apex-heygen-pricecard__price {
  background: #1e293b;
  color: #fff;
  border: 1px solid #334155;
  padding: 6px 12px;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 700;
}
.apex-heygen-pricecard__desc {
  font-size: 14px;
  line-height: 1.55;
  color: #fff;
  margin: 0 0 24px;
}
.apex-heygen-pricecard__sublabel {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: #64748b;
  margin: 0 0 12px;
}
.apex-heygen-pricecard__features {
  list-style: none;
  margin: 0 0 24px;
  padding: 0;
}
.apex-heygen-pricecard__features li {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  color: #94a3b8;
  margin: 8px 0;
}
.apex-heygen-pricecard__features svg { color: #3b82f6; flex-shrink: 0; }
.apex-heygen-pricecard__bundle {
  font-size: 12px;
  background: #020617;
  color: #4ade80;
  padding: 14px;
  border-radius: 10px;
  border: 1px solid rgba(20,83,45,0.3);
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: auto;
}
.apex-heygen-pricecard__bundle strong { color: #fff; }
.apex-heygen-pricecard--photo { position: relative; overflow: hidden; }
.apex-heygen-pricecard--photo:hover { border-color: rgba(99,102,241,0.3); }
.apex-heygen-pricecard--photo .apex-heygen-pricecard__title-icon { color: #818cf8; }
.apex-heygen-pricecard__tier {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 16px;
}
.apex-heygen-pricecard__tier + .apex-heygen-pricecard__tier {
  border-top: 1px solid rgba(30,41,59,0.5);
  padding-top: 16px;
}
.apex-heygen-pricecard__tier-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.apex-heygen-pricecard__tier-name {
  font-size: 16px;
  font-weight: 700;
  color: #fff;
}
.apex-heygen-pricecard__tier-name--premium { color: #818cf8; }
.apex-heygen-pricecard__tier-price {
  font-size: 18px;
  font-weight: 700;
  color: #fff;
}
.apex-heygen-pricecard__tier-price--premium { color: #818cf8; }
.apex-heygen-pricecard__tier-features {
  list-style: none;
  margin: 0;
  padding: 0;
}
.apex-heygen-pricecard__tier-features li {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: #94a3b8;
  margin: 4px 0;
}
.apex-heygen-pricecard__tier-features svg { color: #818cf8; flex-shrink: 0; }
.apex-heygen-pricecard__addons {
  padding-top: 16px;
  border-top: 1px solid rgba(51,65,85,0.5);
  margin-top: auto;
  font-size: 12px;
  color: #94a3b8;
}
.apex-heygen-pricecard__addons strong {
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: #94a3b8;
}

/* ────── Studio Productions (3-column table) ────── */
.apex-heygen-studiotable {
  background: #0f172a;
  border: 1px solid #1e293b;
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 20px 60px -30px rgba(0,0,0,0.5);
}
.apex-heygen-studiotable__cols {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
@media (max-width: 720px) {
  .apex-heygen-studiotable__cols { grid-template-columns: 1fr; }
}
.apex-heygen-studiotable__col {
  padding: 32px;
  text-align: center;
  position: relative;
  border-right: 1px solid #1e293b;
  display: flex;
  flex-direction: column;
}
.apex-heygen-studiotable__col:last-child { border-right: 0; }
@media (max-width: 720px) {
  .apex-heygen-studiotable__col { border-right: 0; border-bottom: 1px solid #1e293b; }
  .apex-heygen-studiotable__col:last-child { border-bottom: 0; }
}
.apex-heygen-studiotable__col--lifestyle { background: rgba(30,41,59,0.2); }
.apex-heygen-studiotable__col--premium::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: #fff;
}
.apex-heygen-studiotable__col--premium .apex-heygen-studiotable__most {
  position: absolute;
  top: 12px;
  right: 12px;
  font-size: 10px;
  font-weight: 700;
  background: #fff;
  color: #0f172a;
  padding: 2px 8px;
  border-radius: 4px;
  text-transform: uppercase;
}
.apex-heygen-studiotable__name {
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: #fff;
  margin: 0 0 16px;
}
.apex-heygen-studiotable__col--lifestyle .apex-heygen-studiotable__name { color: #60a5fa; }
.apex-heygen-studiotable__col--premium .apex-heygen-studiotable__name { color: #fff; }
.apex-heygen-studiotable__price {
  font-size: 36px;
  font-weight: 800;
  color: #fff;
  margin: 0 0 8px;
  letter-spacing: -0.02em;
}
.apex-heygen-studiotable__caption {
  font-size: 12px;
  color: #94a3b8;
  margin: 0 0 24px;
}
.apex-heygen-studiotable__features {
  list-style: none;
  margin: 0;
  padding: 24px 0 0 16px;
  border-top: 1px solid #1e293b;
  text-align: left;
}
.apex-heygen-studiotable__col--premium .apex-heygen-studiotable__features { border-top-color: #1e293b; }
.apex-heygen-studiotable__features li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: 14px;
  color: #fff;
  margin: 12px 0;
  line-height: 1.4;
}
.apex-heygen-studiotable__features svg { flex-shrink: 0; margin-top: 2px; }
.apex-heygen-studiotable__features li.is-addon { padding-top: 8px; border-top: 1px solid rgba(51,65,85,0.5); margin-top: 8px; }
.apex-heygen-studiotable__features li.is-addon span { color: #94a3b8; font-size: 12px; }
.apex-heygen-studiotable__addons {
  background: #0f172a;
  padding: 16px 32px;
  border-top: 1px solid #1e293b;
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  justify-content: center;
  align-items: center;
  font-size: 12px;
  color: #64748b;
}
.apex-heygen-studiotable__addons-label {
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-weight: 700;
  color: #94a3b8;
}
.apex-heygen-studiotable__chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: #020617;
  border: 1px solid #1e293b;
  padding: 6px 12px;
  border-radius: 8px;
  color: #fff;
  font-size: 12px;
}
.apex-heygen-studiotable__chip svg { color: #3b82f6; flex-shrink: 0; }

/* ────── Enterprise section ────── */
.apex-heygen-enterprise {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
}
@media (max-width: 900px) {
  .apex-heygen-enterprise { grid-template-columns: 1fr; gap: 32px; }
}
.apex-heygen-enterprise__eyebrow {
  color: #3b82f6;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-size: 12px;
  display: block;
  margin: 0 0 12px;
}
.apex-heygen-enterprise__heading {
  font-size: clamp(28px, 3vw + 8px, 40px);
  font-weight: 800;
  color: #fff;
  line-height: 1.1;
  margin: 0 0 24px;
}
.apex-heygen-enterprise__body {
  color: #fff;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 32px;
  max-width: 520px;
}
.apex-heygen-enterprise__features {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin-bottom: 32px;
}
@media (max-width: 480px) {
  .apex-heygen-enterprise__features { grid-template-columns: 1fr; }
}
.apex-heygen-enterprise__feature {
  background: #0f172a;
  padding: 16px;
  border-radius: 12px;
  border: 1px solid #1e293b;
}
.apex-heygen-enterprise__feature h4 {
  font-size: 14px;
  font-weight: 700;
  color: #fff;
  margin: 0 0 4px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.apex-heygen-enterprise__feature h4 svg { color: #3b82f6; }
.apex-heygen-enterprise__feature p {
  font-size: 12px;
  color: #94a3b8;
}
.apex-heygen-enterprise__cta {
  background: #2563eb;
  color: #fff;
  padding: 14px 32px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 700;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: background 120ms ease;
  box-shadow: 0 8px 24px -8px rgba(37, 99, 235, 0.4);
  border: 0;
  cursor: pointer;
}
.apex-heygen-enterprise__cta:hover { background: #3b82f6; color: #fff; }
.apex-heygen-enterprise__panel {
  background: #0f172a;
  border: 1px solid #1e293b;
  padding: 32px;
  border-radius: 24px;
  position: relative;
  overflow: hidden;
}
.apex-heygen-enterprise__panel::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(59,130,246,0.05), transparent);
  pointer-events: none;
}
.apex-heygen-enterprise__panel h3 {
  font-size: 14px;
  font-weight: 700;
  color: #fff;
  margin: 0 0 24px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  border-bottom: 1px solid #1e293b;
  padding-bottom: 16px;
}
.apex-heygen-usecase {
  display: flex;
  align-items: center;
  gap: 16px;
  margin: 16px 0;
  position: relative;
  z-index: 1;
}
.apex-heygen-usecase__chip {
  width: 40px;
  height: 40px;
  border-radius: 999px;
  background: #1e293b;
  border: 1px solid #334155;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 700;
  color: #94a3b8;
  transition: all 120ms ease;
  flex-shrink: 0;
}
.apex-heygen-usecase:hover .apex-heygen-usecase__chip {
  border-color: rgba(59,130,246,0.5);
  color: #60a5fa;
}
.apex-heygen-usecase__title {
  font-size: 14px;
  font-weight: 700;
  color: #fff;
  margin: 0;
  transition: color 120ms ease;
}
.apex-heygen-usecase:hover .apex-heygen-usecase__title { color: #60a5fa; }
.apex-heygen-usecase__sub {
  font-size: 12px;
  color: #94a3b8;
  margin: 0;
}

/* ────── Featured project (Instagram embed) ────── */
.apex-heygen-feature {
  border: 1px solid #1e293b;
  background: #0f172a;
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 20px 60px -30px rgba(0,0,0,0.5);
  max-width: 760px;
  margin: 0 auto;
}
.apex-heygen-feature__head {
  padding: 16px;
  border-bottom: 1px solid #1e293b;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.apex-heygen-feature__head-left {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  font-weight: 700;
  color: #fff;
}
.apex-heygen-feature__head-left svg { color: #ec4899; }
.apex-heygen-feature__head a {
  font-size: 12px;
  color: #60a5fa;
  text-decoration: none;
}
.apex-heygen-feature__head a:hover { color: #fff; }
.apex-heygen-feature__body {
  background: #000;
  display: flex;
  justify-content: center;
}
.apex-heygen-feature__body iframe {
  width: 100%;
  max-width: 500px;
  height: 600px;
  border: 0;
}

/* ────── Bottom CTA ────── */
.apex-heygen-bottomcta {
  text-align: center;
  padding: 64px 16px;
  border-top: 1px solid #1e293b;
}
.apex-heygen-bottomcta h2 {
  font-size: clamp(24px, 2vw + 14px, 32px);
  font-weight: 800;
  color: #fff;
  margin: 0 0 24px;
}
.apex-heygen-bottomcta p {
  color: #94a3b8;
  font-size: 16px;
  max-width: 560px;
  margin: 0 auto 32px;
  line-height: 1.6;
}

/* ────── Section borders ────── */
.apex-heygen-section--bordered { border-bottom: 1px solid #1e293b; }
.apex-heygen-section__head { margin-bottom: 40px; }
.apex-heygen-section__head h2 {
  font-size: clamp(22px, 1.5vw + 14px, 28px);
  font-weight: 700;
  color: #fff;
  margin: 0;
}
.apex-heygen-section__head p {
  color: #94a3b8;
  font-size: 14px;
  margin: 8px 0 0;
}
.apex-heygen-section__head-row {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 16px;
  flex-wrap: wrap;
}
.apex-heygen-tag {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: #0f172a;
  color: #60a5fa;
  border: 1px solid #1e293b;
  padding: 8px 16px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
}
.apex-heygen-tag strong { color: #fff; }
.apex-heygen-section__head-caption {
  color: #64748b;
  font-size: 12px;
  margin-top: 4px;
  font-style: italic;
}

/* ───── Lightbox — overlay for studio images + matterport iframe ───── */
.apex-lightbox {
  position: fixed;
  inset: 0;
  z-index: 99999;
  background: rgba(0, 0, 0, 0.92);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.apex-lightbox[hidden] { display: none; }
.apex-lightbox__close {
  position: absolute;
  top: 16px;
  right: 16px;
  background: transparent;
  border: 0;
  color: #fff;
  padding: 10px;
  cursor: pointer;
  font-size: 24px;
  line-height: 1;
  opacity: 0.8;
  transition: opacity 120ms ease;
}
.apex-lightbox__close:hover { opacity: 1; }
.apex-lightbox img,
.apex-lightbox iframe {
  max-width: calc(100vw - 48px);
  max-height: calc(100vh - 48px);
  width: auto;
  height: auto;
  display: block;
  background: #000;
  border: 0;
}
.apex-lightbox iframe {
  width: min(1280px, 90vw);
  height: min(720px, 80vh);
}

/* ─── Podcast Studio: email-only booking CTA ─────────────────────
   Replaces the booking widget on /podcast/ because the room is
   handled directly via email rather than self-serve checkout.    */
.apex-podcast-cta {
  border: 1px solid var(--wp--preset--color--line);
  border-radius: 6px;
  background: var(--wp--preset--color--bg-soft, #f6f5f1);
  padding: 28px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.apex-podcast-cta__eyebrow {
  font-family: var(--wp--preset--font-family--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--wp--preset--color--ink-3);
  margin: 0;
}
.apex-podcast-cta__title {
  font-family: var(--wp--preset--font-family--serif);
  font-size: 28px;
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.1;
  margin: 0;
}
.apex-podcast-cta__body {
  font-size: 15px;
  line-height: 1.55;
  color: var(--wp--preset--color--ink-2);
  margin: 0;
}
.apex-podcast-cta__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 8px 0 0;
}
.apex-podcast-cta__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 12px 18px;
  border-radius: 4px;
  background: var(--wp--preset--color--ink, #1a1a1a);
  color: #fff !important;
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  transition: opacity 150ms ease;
}
.apex-podcast-cta__btn:hover { opacity: 0.86; }
.apex-podcast-cta__btn--ghost {
  background: transparent;
  color: var(--wp--preset--color--ink, #1a1a1a) !important;
  border: 1px solid var(--wp--preset--color--line);
}

/* ─── Case study pages: contain vertical hero, normalize grid ─────
   Hero photos on case-study pages are anchor-wrapped <img> with
   inline width:100%;height:auto. For tall portrait shots that means
   a ~2500px-tall image at full 1400px container width. Cap height
   and let object-fit reveal the full frame. Studio pages keep their
   stage sizing because their hero lives inside .apex-studio-stage. */
.wp-block-group:not(.apex-studio-stage) > a.apex-photo--hero,
.wp-block-group:not(.apex-studio-stage) a.apex-photo--hero {
  display: block;
}
.wp-block-group:not(.apex-studio-stage) a.apex-photo--hero img {
  max-height: 78vh;
  width: 100%;
  height: auto;
  object-fit: contain;
  background: var(--wp--preset--color--bg-soft, #f6f5f1);
}
/* .apex-photo-grid: keep all thumbs the same orientation regardless of
   source aspect, so the row reads as a clean strip instead of jagged
   crops. 4/5 leans portrait since most case-study photos are vertical
   talent/editorial. */
.apex-photo-grid .apex-photo {
  aspect-ratio: 4 / 5;
  overflow: hidden;
  display: block;
}
.apex-photo-grid .apex-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* ─── Hey Gen hero: hide YouTube play UI until autoplay engages ───
   YouTube's center play button briefly appears between iframe load
   and autoplay starting. Keep the iframe transparent for the first
   1.2s so the background <img> covers the load; after that fade in
   the running video. Long enough for any browser to satisfy its
   muted-autoplay policy and start playback. */
.apex-heygen-hero__video iframe {
  opacity: 0;
  animation: apex-heygen-iframe-in 0.4s ease 1.2s forwards;
}
@keyframes apex-heygen-iframe-in {
  to { opacity: 1; }
}

/* ─── Lightbox v2: prev/next nav + image counter ─────────────────
   Buttons sit fixed at the screen edges so they're reachable no
   matter how tall the image renders. Hidden when only one image is
   in the playlist or when the lightbox shows a matterport tour. */
.apex-lightbox__nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(0, 0, 0, 0.45);
  border: 1px solid rgba(255, 255, 255, 0.18);
  color: #fff;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  font-size: 28px;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 120ms ease, transform 120ms ease;
}
.apex-lightbox__nav:hover {
  background: rgba(0, 0, 0, 0.75);
  transform: translateY(-50%) scale(1.06);
}
.apex-lightbox__nav--prev { left: 20px; }
.apex-lightbox__nav--next { right: 20px; }
.apex-lightbox__counter {
  position: absolute;
  bottom: 16px;
  left: 50%;
  transform: translateX(-50%);
  margin: 0;
  color: #fff;
  font-family: var(--wp--preset--font-family--mono, ui-monospace, monospace);
  font-size: 12px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  opacity: 0.75;
  font-variant-numeric: tabular-nums;
}
@media (max-width: 640px) {
  .apex-lightbox__nav { width: 40px; height: 40px; font-size: 22px; }
  .apex-lightbox__nav--prev { left: 8px; }
  .apex-lightbox__nav--next { right: 8px; }
}


/* Required-field asterisk for production form */
.apex-prod-form__req { color: #b91c1c; margin-left: 4px; font-weight: 600; }

/* ─── Studio page: Download PDF button + print styles ────────────
   On-screen: a compact pill above the booking stage. Customers who
   want the spec offline hit Print → Save as PDF; the @media print
   rules below strip everything that doesn't belong on a spec sheet
   (site chrome, photo strips, booking widget, related-work blocks). */
.apex-studio-pdf { margin: 0 0 16px; }
.apex-studio-pdf-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  border: 1px solid var(--wp--preset--color--line);
  background: transparent;
  color: var(--wp--preset--color--ink-2);
  border-radius: 3px;
  font-family: var(--wp--preset--font-family--mono, ui-monospace, monospace);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background 120ms ease, color 120ms ease;
}
.apex-studio-pdf-btn:hover {
  background: var(--wp--preset--color--ink, #1a1a1a);
  color: #fff;
}
.apex-studio-pdf-btn svg { flex: 0 0 auto; }

@media print {
  header.wp-block-template-part,
  footer.wp-block-template-part,
  .apex-header-right,
  .apex-studio-pdf,
  #apex-booking,
  .apex-studio-stage__widget,
  .apex-widget-expand,
  .apex-widget-backdrop,
  .apex-widget-close-x,
  .apex-photo-nav,
  .apex-photo-strip,
  .apex-photo-grid,
  .apex-studio-grid,
  .apex-leave-review,
  .apex-testimonials,
  .apex-popup,
  .apex-popup__backdrop {
    display: none !important;
  }
  body { background: #fff !important; color: #000 !important; }
  .apex-studio-stage { grid-template-columns: 1fr !important; display: block !important; }
  .apex-photo--hero img { max-height: 60vh !important; object-fit: contain !important; }
  a[href]::after { content: " (" attr(href) ")"; font-size: 0.8em; color: #555; }
  .apex-stats > div, p, h1, h2, h3 { page-break-inside: avoid; }
}

/* ─── Card hover: swap empty studio for in-use shot ────────────
   Default image stays untouched; second <img> is absolutely
   positioned on top of it with opacity:0, fades in when the card
   is hovered/focused. On touch devices (no hover), the in-use
   image stays hidden — empty studio is the canonical thumbnail. */
.apex-studio-card__photo {
  position: relative;
}
.apex-studio-card__photo--hover {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 320ms ease;
  pointer-events: none;
}
.apex-studio-card:hover .apex-studio-card__photo--hover,
.apex-studio-card:focus-visible .apex-studio-card__photo--hover {
  opacity: 1;
}
@media (hover: none) {
  .apex-studio-card__photo--hover {
    display: none;
  }
}

/* ─── Photo strip: YouTube video tile + play overlay ──────────
   Render YouTube thumbnails like any other photo, but stack a
   triangular play badge in the center so the customer knows it's
   a video before they click. Hides on touch where the play affordance
   is implicit. */
.apex-photo--youtube {
  position: relative;
}
.apex-photo--youtube img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.apex-photo__play {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.6);
  color: #fff;
  font-size: 18px;
  padding-left: 3px;
  pointer-events: none;
  transition: transform 160ms ease, background 160ms ease;
}
.apex-photo--youtube:hover .apex-photo__play {
  background: rgba(0, 0, 0, 0.85);
  transform: translate(-50%, -50%) scale(1.08);
}

/* ───── Flat photo galleries (no hero) — even strip ──────────────────
   .apex-photo-grid is the studio-page layout (1 hero + stacked thumbs,
   fixed height). Reused for flat galleries with no hero thumb (podcast
   "From past sessions", Our Work "From the shoot"), that grid produced
   oddly-spaced columns. When there's no hero, lay the thumbs out as an
   even, responsive strip instead. */
.apex-photo-grid:not(:has(.apex-photo--hero)) {
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-template-rows: none;
  height: auto;
}
@media (max-width: 900px) {
  .apex-photo-grid:not(:has(.apex-photo--hero)) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
.apex-photo-grid:not(:has(.apex-photo--hero)) .apex-photo {
  height: auto;
}
