/*
Theme Name: Fly Yachts
Theme URI: https://flyyachts.com
Author: Fly Yachts (Claude)
Description: Editorial yacht brokerage theme — built to match the Fly Yachts design system. Sand-cream canvas, ocean-navy accents, sun-gold highlights. Source Serif headlines, Inter Tight body, JetBrains Mono eyebrows.
Version:      1.0.126
Requires at least: 6.0
Tested up to: 6.5
Requires PHP: 7.4
License: GPL-2.0-or-later
Text Domain: flyyachts
*/

/* ============================================================
   Design Tokens — matched to website_for_real reference
   ============================================================ */
:root {
  --ink:        #0a1620;
  --ink-soft:   #1a2a36;
  --ink-mute:   #4a5b68;
  --ink-quiet:  #7a8894;

  --ocean-900:  #0d2436;
  --ocean-800:  #133349;
  --ocean-700:  #1c4663;
  --ocean-600:  #2a6188;
  --ocean-500:  #3d7faa;
  --ocean-200:  #aac5da;
  --ocean-100:  #d6e3ed;

  /* Mist blue — soft, light, brand-coherent.
     --mist-50  is the new page-background replacement for tan.
     --mist-100 is the next step up for cards, inputs, hover states.
     --mist-200 is for borders and subtle chip backgrounds. */
  --mist-50:    #f3f7fb;
  --mist-100:   #e7eff5;
  --mist-200:   #d4e0ea;

  --sand-50:    #fbf7f0;
  --sand-100:   #f5efe3;
  --sand-200:   #ece2cf;
  --sand-300:   #ddcfb3;
  --sand-400:   #c4b290;

  --sun-500:    #d99a3d;
  --sun-600:    #b97f25;
  --sun-200:    #f0d9a8;

  --line:       rgba(13, 36, 54, 0.12);
  --line-soft:  rgba(13, 36, 54, 0.06);

  --serif: "Source Serif Pro", "Cormorant Garamond", Georgia, serif;
  --sans:  "Inter Tight", "Inter", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --mono:  "JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;

  --r-xs: 4px;
  --r-sm: 6px;
  --r-md: 10px;
  --r-lg: 16px;

  --shadow-sm: 0 1px 2px rgba(13, 36, 54, 0.06), 0 1px 1px rgba(13, 36, 54, 0.04);
  --shadow-md: 0 4px 16px rgba(13, 36, 54, 0.08), 0 2px 4px rgba(13, 36, 54, 0.04);
  --shadow-lg: 0 24px 60px rgba(13, 36, 54, 0.18), 0 6px 16px rgba(13, 36, 54, 0.08);

  --maxw:   1440px;
  --gutter: clamp(20px, 4vw, 56px);
  --nav-h:  76px;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body,
body.page,
body.single,
body.archive,
body.home {
  font-family: var(--sans);
  background: var(--sand-50) !important;
  color: var(--ink);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-size: 16px;
  line-height: 1.55;
  margin: 0;
  overflow-x: hidden;
}

/* Ensure WP main content wrappers don't impose a dark background */
.site,
.site-content,
#page,
#content,
.page-content,
main {
  background: transparent !important;
}

a       { color: inherit; text-decoration: none; }
button  { font-family: inherit; cursor: pointer; border: none; background: none; padding: 0; color: inherit; }
img     { display: block; max-width: 100%; height: auto; }
input, textarea, select { font-family: inherit; }

/* Typography */
.eyebrow {
  font-family: var(--mono);
  text-transform: uppercase;
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--ocean-700);
}
.eyebrow-soft  { color: var(--ink-quiet); }
.eyebrow-light { color: var(--sun-200); }

.display {
  font-family: var(--serif);
  font-weight: 400;
  line-height: 0.98;
  letter-spacing: -0.02em;
}

.serif { font-family: var(--serif); font-weight: 400; }
.sans  { font-family: var(--sans); }
.mono  { font-family: var(--mono); }

.container {
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 0 var(--gutter);
}

.rule       { height: 1px; background: var(--line); width: 100%; }
.rule-soft  { height: 1px; background: var(--line-soft); width: 100%; }

/* Buttons */
.btn {
  font-family: var(--sans);
  font-size: 14px;
  letter-spacing: 0.01em;
  padding: 14px 22px;
  border-radius: 999px;
  border: 1px solid transparent;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  transition: all 180ms ease;
  white-space: nowrap;
  cursor: pointer;
  text-decoration: none;
}
.btn-primary {
  background: var(--ocean-900);
  color: var(--sand-50);
  border-color: var(--ocean-900);
}
.btn-primary:hover { background: var(--ink); transform: translateY(-1px); color: var(--sand-50); }

.btn-ghost {
  background: transparent;
  color: var(--ink);
  border-color: var(--line);
}
.btn-ghost:hover { border-color: var(--ink); background: rgba(13, 36, 54, 0.03); }

.btn-sun {
  background: var(--sun-500);
  color: var(--ocean-900);
  border-color: var(--sun-500);
  font-weight: 500;
}
.btn-sun:hover { background: var(--sun-600); color: var(--sand-50); }

.btn-ghost-light {
  background: transparent;
  color: var(--sand-50);
  border-color: rgba(245, 239, 227, 0.3);
}
.btn-ghost-light:hover { border-color: var(--sand-50); background: rgba(245, 239, 227, 0.06); color: var(--sand-50); }

/* Chips */
.chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border: 1px solid var(--line);
  border-radius: 999px;
  font-size: 12px;
  font-family: var(--mono);
  letter-spacing: 0.04em;
  color: var(--ink-soft);
  background: rgba(255,255,255,0.5);
}
.chip-dark {
  background: rgba(13, 36, 54, 0.85);
  color: var(--sand-50);
  border-color: rgba(13, 36, 54, 0.85);
}
.chip-sun {
  background: var(--sun-500);
  color: var(--ocean-900);
  border-color: var(--sun-500);
  font-weight: 500;
}

/* ============================================================
   Top navigation
   ============================================================ */
.fy-topnav {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 100;
  height: var(--nav-h);
  transition: background 250ms ease, border-color 250ms ease, color 250ms ease;
  background: var(--sand-50);
  border-bottom: 1px solid transparent;
  color: var(--ink);
}
.fy-topnav.is-transparent {
  background: linear-gradient(180deg, rgba(13,36,54,0.55) 0%, rgba(13,36,54,0) 100%);
  color: var(--sand-50);
}
.fy-topnav.is-scrolled {
  background: rgba(251, 247, 240, 0.92) !important;
  -webkit-backdrop-filter: blur(12px) saturate(140%);
          backdrop-filter: blur(12px) saturate(140%);
  border-bottom: 1px solid var(--line);
  color: var(--ink) !important;
}
.fy-topnav__inner {
  height: 100%;
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: 32px;
  padding: 0 var(--gutter);
  max-width: var(--maxw);
  margin: 0 auto;
  /* Defensive: prevent any child from absolute/fixed positioning relative to
     this container (which would let it float free of the flex flow) */
  position: relative;
}

/* Ensure CTA button always stays in flex flow on the right side, never floats.
   Defensive against plugin CSS that might set position: fixed on .fy-topnav__cta. */
.fy-topnav__cta,
.fy-topnav__cta-btn {
  position: static !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
  transform: none !important;
  flex-shrink: 0;
}
.fy-topnav__logo { display: inline-flex; align-items: center; line-height: 0; flex-shrink: 0; }
.fy-topnav__logo img {
  height: 36px;
  width: auto;
  display: block;
  filter: brightness(0) saturate(100%) invert(13%) sepia(28%) saturate(1290%) hue-rotate(170deg) brightness(94%) contrast(91%);
  transition: filter 250ms ease;
}
.fy-topnav.is-transparent .fy-topnav__logo img {
  filter: brightness(0) invert(0.95);
}
.fy-topnav.is-scrolled .fy-topnav__logo img {
  filter: brightness(0) saturate(100%) invert(13%) sepia(28%) saturate(1290%) hue-rotate(170deg) brightness(94%) contrast(91%) !important;
}

.fy-topnav__links {
  display: flex;
  align-items: center;
  margin-left: 24px;
}
.fy-topnav__links ul {
  display: flex;
  align-items: center;
  gap: 28px;
  list-style: none;
  margin: 0;
  padding: 0;
}
.fy-topnav__links a,
.fy-topnav__links ul li a,
.fy-topnav__links ul li.menu-item a,
header.fy-topnav .fy-topnav__links a {
  font-size: 14px !important;
  letter-spacing: 0.01em;
  white-space: nowrap;
  font-family: var(--sans) !important;
  color: var(--ocean-900) !important;
  opacity: 1;
  border-bottom: 1px solid transparent;
  padding-bottom: 2px;
  transition: opacity 150ms ease, color 250ms ease, border-color 150ms ease;
  text-decoration: none !important;
  display: inline-block;
  background: transparent !important;
  text-transform: none !important;
  font-weight: 400 !important;
  line-height: 1.4 !important;
}
.fy-topnav__links a:hover,
.fy-topnav__links ul li a:hover,
header.fy-topnav .fy-topnav__links a:hover {
  opacity: 1;
  color: var(--ocean-900) !important;
  border-bottom-color: var(--ocean-900);
}
.fy-topnav__links li.current-menu-item a,
.fy-topnav__links a.is-active,
header.fy-topnav .fy-topnav__links li.current-menu-item a {
  opacity: 1;
  font-weight: 500 !important;
  border-bottom-color: currentColor;
}

/* On the homepage hero (transparent state), links must be light */
.fy-topnav.is-transparent .fy-topnav__links a,
.fy-topnav.is-transparent .fy-topnav__links ul li a,
header.fy-topnav.is-transparent .fy-topnav__links a {
  color: var(--sand-50) !important;
}

/* When scrolled past hero, force back to dark navy */
.fy-topnav.is-scrolled .fy-topnav__links a,
.fy-topnav.is-scrolled .fy-topnav__links ul li a,
header.fy-topnav.is-scrolled .fy-topnav__links a {
  color: var(--ocean-900) !important;
}

/* Remove any Plus Mega Menu / Elementor weirdness */
.fy-topnav__links ul,
.fy-topnav__links ul li {
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
}
.fy-topnav__links ul li::before,
.fy-topnav__links ul li::after { display: none !important; content: none !important; }

.fy-topnav__spacer { flex: 1; }

.fy-topnav__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 8px;
  color: var(--ocean-900);
}
.fy-topnav.is-transparent .fy-topnav__icon { color: var(--sand-50); }
.fy-topnav.is-scrolled .fy-topnav__icon { color: var(--ocean-900); }

.fy-topnav__cta { display: inline-flex; align-items: center; gap: 12px; }
.fy-topnav__cta-btn {
  padding: 10px 18px;
  font-size: 13px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid transparent;
  font-family: var(--sans);
  white-space: nowrap;
  transition: all 180ms ease;
  background: var(--ocean-900);
  color: var(--sand-50);
}
.fy-topnav__cta-btn:hover { background: var(--ink); color: var(--sand-50); }
.fy-topnav.is-transparent .fy-topnav__cta-btn {
  background: var(--sand-50);
  color: var(--ocean-900);
}
.fy-topnav.is-scrolled .fy-topnav__cta-btn {
  background: var(--ocean-900) !important;
  color: var(--sand-50) !important;
}

.fy-topnav__menu-toggle {
  display: none;
  width: 40px; height: 40px;
  align-items: center; justify-content: center;
  color: inherit;
}
.fy-topnav__drawer { display: none; }

/* ============================================================
   Hero (full-bleed)
   ============================================================ */
.fy-hero {
  position: relative;
  height: 100vh;
  min-height: 720px;
  color: var(--sand-50);
  overflow: hidden;
}
.fy-hero__bg {
  position: absolute; inset: 0;
  background-size: cover;
  background-position: center;
  z-index: 1;
}
.fy-hero__veil {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(13,36,54,0.25) 0%, rgba(13,36,54,0.6) 100%);
  z-index: 2;
}
.fy-hero__inner {
  position: relative;
  z-index: 3;
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 0 var(--gutter);
  text-align: center;
}
.fy-hero__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(64px, 9vw, 156px);
  margin: 0;
  line-height: 0.95;
  letter-spacing: -0.025em;
  max-width: 1400px;
  color: var(--sand-50);
}
.fy-hero__search {
  margin-top: 56px;
  width: 100%;
  max-width: 720px;
  background: rgba(245, 239, 227, 0.10);
  -webkit-backdrop-filter: blur(14px);
          backdrop-filter: blur(14px);
  border: 1px solid rgba(245, 239, 227, 0.28);
  border-radius: 16px;
  padding: 6px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.fy-hero__search-icon { margin-left: 18px; color: var(--sun-200); flex-shrink: 0; }
.fy-hero__search input,
form.fy-hero__search input,
.fy-hero form.fy-hero__search input[type="search"],
.fy-hero form.fy-hero__search input[type="text"] {
  flex: 1 !important;
  padding: 18px 6px !important;
  border: none !important;
  background: transparent !important;
  color: var(--sand-50) !important;
  -webkit-text-fill-color: var(--sand-50) !important;
  font-family: var(--serif) !important;
  font-size: 19px !important;
  outline: none !important;
  opacity: 1 !important;
  font-weight: 400 !important;
  text-shadow: none !important;
  box-shadow: none !important;
}
.fy-hero__search input::placeholder,
.fy-hero form.fy-hero__search input::placeholder {
  color: rgba(245, 239, 227, 0.7) !important;
  -webkit-text-fill-color: rgba(245, 239, 227, 0.7) !important;
  font-style: italic;
}

/* Sections */
.fy-section { padding: 110px 0; }
.fy-section--tight { padding: 80px 0; }
.fy-section--xl { padding: 160px 0; }
.fy-section--dark { background: var(--ocean-900); color: var(--sand-50); }
.fy-section--sand-100 { background: var(--sand-100); }

.fy-section__head { text-align: center; margin-bottom: 56px; }
.fy-section__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(48px, 6vw, 88px);
  margin: 0;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-section--dark .fy-section__title { color: var(--sand-50); }

/* ============================================================
   Listing card
   ============================================================ */
.fy-card {
  display: block;
  background: transparent;
  color: var(--ink);
  cursor: pointer;
  text-decoration: none;
}
.fy-card__media {
  position: relative;
  width: 100%;
  height: 320px;
  overflow: hidden;
  border-radius: var(--r-md);
  background: var(--ocean-100);
  display: block;
}
.fy-card--sm .fy-card__media { height: 220px; }
.fy-card--lg .fy-card__media { height: 440px; }
.fy-card__media img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform 300ms ease;
}
.fy-card:hover .fy-card__media img { transform: scale(1.03); }
.fy-card__media::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(13,36,54,0) 50%, rgba(13,36,54,0.55) 100%);
  pointer-events: none;
}
.fy-card__media-empty {
  width: 100%; height: 100%;
  background: linear-gradient(180deg, var(--ocean-100), var(--sand-200));
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  color: var(--ocean-700);
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
/* Photo counter — appears on hover; shows current/total so buyers know
   there are MORE photos beyond what's flipping past on screen. */
.fy-card__photo-count {
  position: absolute;
  top: 14px;
  right: 56px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 10px;
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.04em;
  color: var(--sand-50);
  background: rgba(13, 36, 54, 0.72);
  backdrop-filter: blur(6px);
  border-radius: 999px;
  z-index: 3;
  opacity: 0;
  transition: opacity 200ms ease;
  pointer-events: none;
}
.fy-card:hover .fy-card__photo-count {
  opacity: 1;
}
/* Quick-spec strip — appears on hover. Surfaces specs (cabins/sleeps/speed)
   without needing a click. Slides up from bottom of media area. */
.fy-card__quickspec {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 10px 14px;
  background: linear-gradient(180deg, transparent, rgba(13, 36, 54, 0.92));
  color: var(--sand-50);
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.01em;
  z-index: 2;
  transform: translateY(100%);
  transition: transform 250ms cubic-bezier(0.32, 0.72, 0, 1);
  pointer-events: none;
}
.fy-card:hover .fy-card__quickspec {
  transform: translateY(0);
}
/* Pause quickspec slide if photo carousel is running — they conflict
   visually. Photo progress dots already sit at the bottom. */
.fy-card:hover .fy-card__walk-progress + .fy-card__quickspec {
  transform: translateY(100%);
}
/* Video badge variant — distinct color so buyers spot it quickly */
.fy-card__badge--video {
  background: var(--ocean-900);
  color: var(--sand-50);
}
.fy-card__badge--video svg { color: var(--sun-500); }
/* Was/Now price on cards — small inline strikethrough next to the price */
.fy-card__price-block {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 2px;
}
.fy-card__price-was {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--ink-mute);
  text-decoration: line-through;
  text-decoration-color: var(--sun-600);
  text-decoration-thickness: 1px;
}
.fy-card__badges {
  position: absolute;
  top: 14px; left: 14px;
  display: flex; gap: 6px;
  z-index: 2;
}
.fy-card__badge {
  display: inline-flex;
  align-items: center;
  padding: 5px 10px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  border-radius: 999px;
  background: rgba(13,36,54,0.85);
  color: var(--sand-50);
}
.fy-card__badge--sun {
  background: var(--sun-500);
  color: var(--ocean-900);
  font-weight: 500;
}
/* Price-reduced badge: uppercase, bold sun-gold — most visible variant.
   Designed to dominate when present, since it's the strongest conversion signal. */
.fy-card__badge--drop {
  background: var(--sun-500);
  color: var(--ocean-900);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  /* Subtle pulse on first paint to draw the eye, fading to static.
     Animation runs once — no looping that would tire the eye. */
  animation: fy-badge-pulse 1.6s ease-out 1;
  box-shadow: 0 2px 8px rgba(217, 154, 61, 0.35);
}
@keyframes fy-badge-pulse {
  0%   { transform: scale(0.9); opacity: 0; }
  50%  { transform: scale(1.05); opacity: 1; }
  100% { transform: scale(1);    opacity: 1; }
}
.fy-card__actions {
  position: absolute;
  top: 12px; right: 12px;
  display: flex; gap: 6px;
  z-index: 2;
}
.fy-card__action {
  width: 34px; height: 34px;
  display: inline-flex;
  align-items: center; justify-content: center;
  border-radius: 50%;
  background: rgba(251, 247, 240, 0.95);
  -webkit-backdrop-filter: blur(8px);
          backdrop-filter: blur(8px);
  color: var(--ocean-900);
  transition: background 150ms;
  border: none;
  cursor: pointer;
}
.fy-card__action:hover { background: var(--sand-50); }
.fy-card__action.is-active { background: var(--sun-500); color: var(--ocean-900); }

.fy-card__meta-row {
  padding-top: 18px;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 16px;
}
.fy-card__brand,
a.fy-card .fy-card__brand,
.fy-card a .fy-card__brand {
  font-family: var(--mono) !important;
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute) !important;
}
.fy-card__length,
a.fy-card .fy-card__length {
  font-family: var(--mono) !important;
  font-size: 11px;
  letter-spacing: 0.08em;
  color: var(--ink-mute) !important;
}
.fy-card__title,
a.fy-card .fy-card__title,
a.fy-card h3.fy-card__title {
  font-family: var(--serif) !important;
  font-size: 22px;
  line-height: 1.1;
  margin-top: 8px;
  letter-spacing: -0.01em;
  color: var(--ocean-900) !important;
  font-weight: 400;
  text-decoration: none !important;
}
.fy-card--lg .fy-card__title { font-size: 30px; }
.fy-card__bottom {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-top: 12px;
  gap: 16px;
}
.fy-card__location,
a.fy-card .fy-card__location {
  font-size: 13px;
  color: var(--ink-mute) !important;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.fy-card__price,
a.fy-card .fy-card__price {
  font-size: 16px;
  color: var(--ocean-900) !important;
  font-weight: 500;
}

/* Defensive: prevent any parent-theme link styles from overriding card text */
a.fy-card,
a.fy-card:hover,
a.fy-card:focus,
a.fy-card:visited {
  color: var(--ink) !important;
  text-decoration: none !important;
}

.fy-grid-3,
.fy-grid-yachts {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 28px;
}

/* ============================================================
   Experts split (homepage)
   ============================================================ */
.fy-experts {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: 80px;
  align-items: center;
}
.fy-experts__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(48px, 6vw, 92px);
  margin: 0;
  line-height: 0.98;
  letter-spacing: -0.025em;
  color: var(--ocean-900);
}
.fy-experts__title em { font-style: italic; color: var(--ocean-700); }
.fy-experts__copy {
  font-family: var(--serif);
  font-size: 21px;
  line-height: 1.5;
  color: var(--ink-mute);
  margin: 32px 0 40px;
  max-width: 520px;
}
.fy-experts__img {
  aspect-ratio: 4 / 5;
  background-size: cover;
  background-position: center;
  border-radius: var(--r-md);
  box-shadow: var(--shadow-md);
}

/* ============================================================
   Sell CTA
   ============================================================ */
.fy-sell-cta {
  text-align: center;
  padding: 100px 0;
  background: var(--ocean-900);
  color: var(--sand-50);
  border-top: 1px solid var(--line);
}
.fy-sell-cta__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(40px, 5vw, 72px);
  margin: 0 0 36px;
  line-height: 0.98;
  letter-spacing: -0.025em;
  color: var(--sand-50);
}

/* ============================================================
   Yacht archive
   ============================================================ */
.fy-archive { background: var(--mist-50); min-height: 100vh; }
.fy-archive__hero {
  padding: calc(var(--nav-h) + 100px) 0 64px;
  text-align: center;
}
.fy-archive__hero h1 {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(48px, 6vw, 92px);
  margin: 0;
  line-height: 0.98;
  letter-spacing: -0.025em;
  color: var(--ocean-900);
}
.fy-archive__hero-sub {
  margin-top: 16px;
  color: var(--ink-mute);
  font-size: 15px;
  font-family: var(--mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.fy-archive__search {
  margin-top: 36px;
  display: flex;
  align-items: center;
  gap: 8px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 16px;
  padding: 6px;
  box-shadow: var(--shadow-sm);
  max-width: 720px;
  margin-left: auto;
  margin-right: auto;
}
.fy-archive__search input,
input.fy-archive__search,
.fy-archive .fy-archive__search input,
form.fy-archive__search input[type="search"],
form.fy-archive__search input[type="text"] {
  flex: 1 !important;
  padding: 16px 6px !important;
  border: none !important;
  background: transparent !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  font-family: var(--serif) !important;
  font-size: 17px !important;
  outline: none !important;
  opacity: 1 !important;
  font-weight: 400 !important;
  text-shadow: none !important;
  box-shadow: none !important;
}
.fy-archive__search input::placeholder,
form.fy-archive__search input::placeholder {
  color: var(--ink-mute) !important;
  -webkit-text-fill-color: var(--ink-mute) !important;
  opacity: 0.7 !important;
  font-style: italic;
}
.fy-archive__search-icon { margin-left: 18px; color: var(--ocean-700); flex-shrink: 0; }

/* ============================================================
   Filter bar (yachts archive) — full reference behavior
   ============================================================ */
.fy-archive__filterbar,
.fy-filterbar {
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  padding: 16px 0;
  margin: 32px 0 0;
  background: #fff;
  position: sticky;
  top: var(--nav-h);
  z-index: 30;
  /* Smooth transition when scrolling triggers the .is-stuck state. The
     box-shadow only appears when CSS detects we've scrolled past the
     filter bar's natural position — gives users a clear "pinned" cue
     without being obnoxious. */
  transition: box-shadow 200ms ease, padding 200ms ease;
}
.fy-archive__filterbar.is-stuck,
.fy-filterbar.is-stuck {
  box-shadow: 0 4px 16px rgba(0, 30, 60, 0.08);
  padding: 12px 0;
  border-top: 0;
}
.fy-filterbar__inner {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: center;
  justify-content: space-between;
}
.fy-filterbar__chips {
  display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
}
.fy-filterbar__cell { position: relative; }

.fy-filterbar__chip,
button.fy-filterbar__chip,
#fy-archive-filterbar button.fy-filterbar__chip,
#fy-archive-filterbar .fy-filterbar__chip,
.fy-archive #fy-archive-filterbar button.fy-filterbar__chip {
  padding: 10px 16px !important;
  border: 1px solid var(--line) !important;
  border-radius: 999px !important;
  background: #fff !important;
  color: var(--ocean-900) !important;
  font-family: var(--sans) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  cursor: pointer;
  display: inline-flex !important;
  align-items: center;
  gap: 6px;
  transition: all 150ms;
  white-space: nowrap;
  opacity: 1 !important;
  text-transform: none !important;
  letter-spacing: 0.01em !important;
  line-height: 1.4 !important;
  text-decoration: none !important;
  text-shadow: none !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
}
.fy-filterbar__chip svg,
button.fy-filterbar__chip svg,
#fy-archive-filterbar .fy-filterbar__chip svg {
  color: var(--ocean-900) !important;
  stroke: var(--ocean-900) !important;
  fill: none !important;
  transition: transform 180ms ease;
}
.fy-filterbar__chip:hover,
button.fy-filterbar__chip:hover,
#fy-archive-filterbar .fy-filterbar__chip:hover {
  border-color: var(--ocean-700) !important;
  background: var(--mist-50) !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
}

/* Dropdown OPEN state — chip looks "pressed" so user knows the dropdown
   is showing and can click the chip again to close it. The caret on the
   right rotates 180° as a clear visual signal. */
.fy-filterbar__chip.is-open,
button.fy-filterbar__chip.is-open,
#fy-archive-filterbar .fy-filterbar__chip.is-open {
  background: var(--mist-100) !important;
  border-color: var(--ocean-700) !important;
  box-shadow: inset 0 1px 2px rgba(13, 36, 54, 0.06) !important;
}
.fy-filterbar__chip.is-open svg:last-child,
button.fy-filterbar__chip.is-open svg:last-child {
  transform: rotate(180deg);
}

/* ACTIVE state — a filter has an applied value (not the default).
   Navy fill + light text so it's the most prominent state on the row. */
.fy-filterbar__chip.is-active,
button.fy-filterbar__chip.is-active,
#fy-archive-filterbar .fy-filterbar__chip.is-active {
  background: var(--ocean-900) !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  border-color: var(--ocean-900) !important;
}
.fy-filterbar__chip.is-active svg,
button.fy-filterbar__chip.is-active svg {
  color: #fff !important;
  stroke: #fff !important;
}
/* Active + open simultaneously — keep navy but show inset shadow */
.fy-filterbar__chip.is-active.is-open,
button.fy-filterbar__chip.is-active.is-open {
  box-shadow: inset 0 1px 3px rgba(0,0,0,0.25) !important;
}

.fy-filterbar__dropdown {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  min-width: 220px;
  background: var(--sand-50);
  border: 1px solid var(--line);
  border-radius: 12px;
  box-shadow: var(--shadow-lg);
  z-index: 50;
  padding: 6px;
  animation: fade-up 180ms ease both;
}
.fy-filterbar__dropdown--wide {
  width: 320px;
}

.fy-filterbar__search,
input.fy-filterbar__search,
#fy-archive-filterbar input.fy-filterbar__search,
#fy-archive-filterbar .fy-filterbar__search {
  width: 100% !important;
  padding: 10px 14px !important;
  border: 1px solid var(--line) !important;
  border-radius: 8px !important;
  background: var(--sand-50) !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  font-family: var(--sans) !important;
  font-size: 13px !important;
  margin-bottom: 6px !important;
  outline: none !important;
  opacity: 1 !important;
}
.fy-filterbar__search::placeholder { color: var(--ink-mute) !important; -webkit-text-fill-color: var(--ink-mute) !important; opacity: 0.7 !important; }
.fy-filterbar__search:focus,
#fy-archive-filterbar .fy-filterbar__search:focus {
  border-color: var(--ocean-700) !important;
}

.fy-filterbar__optlist {
  max-height: 300px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
}

.fy-filterbar__opt,
button.fy-filterbar__opt,
#fy-archive-filterbar button.fy-filterbar__opt,
#fy-archive-filterbar .fy-filterbar__opt {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 14px !important;
  border: none !important;
  background: transparent !important;
  text-align: left !important;
  font-family: var(--sans) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  cursor: pointer;
  border-radius: 8px !important;
  transition: background 120ms;
  width: 100% !important;
  opacity: 1 !important;
  text-transform: none !important;
  letter-spacing: 0.01em !important;
  text-decoration: none !important;
  line-height: 1.4 !important;
  text-shadow: none !important;
}
.fy-filterbar__opt:hover,
button.fy-filterbar__opt:hover,
#fy-archive-filterbar .fy-filterbar__opt:hover {
  background: var(--sand-100) !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
}
.fy-filterbar__opt.is-active,
button.fy-filterbar__opt.is-active,
#fy-archive-filterbar .fy-filterbar__opt.is-active {
  background: var(--ocean-900) !important;
  color: var(--sand-50) !important;
  -webkit-text-fill-color: var(--sand-50) !important;
}
.fy-filterbar__opt span,
.fy-filterbar__opt > span:first-child,
button.fy-filterbar__opt span,
#fy-archive-filterbar .fy-filterbar__opt span {
  color: inherit !important;
  -webkit-text-fill-color: inherit !important;
  opacity: 1 !important;
}
.fy-filterbar__opt-count,
.fy-filterbar__opt span.fy-filterbar__opt-count,
#fy-archive-filterbar .fy-filterbar__opt-count {
  font-family: var(--mono) !important;
  font-size: 11px !important;
  color: var(--ink-quiet) !important;
  -webkit-text-fill-color: var(--ink-quiet) !important;
  opacity: 1 !important;
  font-weight: 400 !important;
}
.fy-filterbar__opt.is-active .fy-filterbar__opt-count,
button.fy-filterbar__opt.is-active span.fy-filterbar__opt-count,
#fy-archive-filterbar .fy-filterbar__opt.is-active .fy-filterbar__opt-count {
  color: var(--sun-200) !important;
  -webkit-text-fill-color: var(--sun-200) !important;
}

/* Defensive: ensure dropdown panel background is solid sand */
.fy-filterbar__dropdown,
#fy-archive-filterbar .fy-filterbar__dropdown {
  background: var(--sand-50) !important;
}

/* ============================================================
   DUAL-HANDLE RANGE SLIDER (price + length filters)
   ============================================================ */
.fy-filterbar__dropdown--slider {
  width: 320px;
  padding: 18px 18px 14px;
}
.fy-slider {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.fy-slider__readout {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 10px;
  font-family: var(--serif);
  font-size: 19px;
  color: var(--ocean-900);
  letter-spacing: -0.005em;
}
.fy-slider__readout-sep {
  color: var(--ink-quiet);
  font-size: 14px;
}
.fy-slider__track {
  position: relative;
  height: 32px; /* generous click target */
  cursor: pointer;
  /* visible bar sits centered inside the track */
}
.fy-slider__track::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 0; right: 0;
  height: 4px;
  margin-top: -2px;
  background: var(--ocean-100);
  border-radius: 999px;
}
.fy-slider__fill {
  position: absolute;
  top: 50%;
  height: 4px;
  margin-top: -2px;
  background: var(--ocean-900);
  border-radius: 999px;
  z-index: 1;
}
.fy-slider__handle {
  position: absolute;
  top: 50%;
  width: 22px;
  height: 22px;
  margin-top: -11px;
  margin-left: -11px;
  border: 2px solid var(--ocean-900);
  background: var(--sand-50);
  border-radius: 999px;
  padding: 0;
  cursor: grab;
  z-index: 2;
  box-shadow: 0 1px 4px rgba(13, 36, 54, 0.18);
  transition: transform 120ms ease, box-shadow 120ms ease;
  touch-action: none; /* let pointer events drive it instead of scroll */
}
.fy-slider__handle:hover {
  transform: scale(1.1);
  box-shadow: 0 2px 8px rgba(13, 36, 54, 0.28);
}
.fy-slider__handle:active {
  cursor: grabbing;
  transform: scale(1.15);
}
.fy-slider__handle--max {
  /* stack max above min when they overlap, so it's still grabbable */
  z-index: 3;
}

.fy-slider__presets {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding-top: 12px;
  border-top: 1px solid var(--line);
  margin-top: 4px;
}
.fy-slider__preset,
button.fy-slider__preset {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  padding: 6px 10px;
  border: 1px solid var(--line);
  background: var(--sand-50);
  color: var(--ocean-900);
  border-radius: 999px;
  cursor: pointer;
  transition: all 120ms ease;
}
.fy-slider__preset:hover {
  border-color: var(--ocean-900);
  background: var(--sand-100);
}
.fy-slider__preset--reset {
  margin-left: auto;
  color: var(--ink-quiet);
}
.fy-slider__preset--reset:hover {
  color: var(--ocean-900);
}

/* ============================================================
   PRICE-REDUCED TOGGLE PILL (filterbar)
   ============================================================ */
.fy-filterbar__chip--toggle {
  /* Inherits .fy-filterbar__chip; this is the toggle-state styling */
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.fy-filterbar__chip--toggle.is-active,
button.fy-filterbar__chip--toggle.is-active,
#fy-archive-filterbar .fy-filterbar__chip--toggle.is-active {
  background: var(--sun-500) !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  border-color: var(--sun-500) !important;
  font-weight: 500;
}
.fy-filterbar__chip--toggle.is-active svg,
button.fy-filterbar__chip--toggle.is-active svg {
  color: var(--ocean-900) !important;
  stroke: var(--ocean-900) !important;
}

.fy-filterbar__count,
#fy-archive-filterbar .fy-filterbar__count,
span.fy-filterbar__count {
  font-size: 12px !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  margin-left: 4px;
  font-family: var(--mono) !important;
  letter-spacing: 0.06em !important;
  opacity: 1 !important;
  font-weight: 500 !important;
}

/* Pagination */
.fy-pagination {
  margin: 56px 0 100px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
}
.fy-pagination__inner {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  justify-content: center;
}
.fy-pagination__btn .page-numbers {
  min-width: 40px;
  height: 40px;
  padding: 0 12px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--sand-50);
  color: var(--ink);
  font-family: var(--sans);
  font-size: 13px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  transition: all 150ms;
}
.fy-pagination__btn .page-numbers:hover {
  border-color: var(--ink);
}
.fy-pagination__btn .page-numbers.current {
  background: var(--ocean-900);
  color: var(--sand-50);
  border-color: var(--ocean-900);
}
.fy-pagination__btn .page-numbers.dots {
  border-color: transparent;
  background: transparent;
  color: var(--ink-mute);
}
.fy-pagination__caption {
  font-size: 12px;
  color: var(--ink-mute);
  font-family: var(--mono);
  letter-spacing: 0.06em;
}

.fy-archive__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 36px 28px;
  margin-bottom: 80px;
}

/* ============================================================
   Brands directory page
   ============================================================ */
.fy-brands-hero {
  position: relative;
  min-height: 78vh;
  overflow: hidden;
  color: var(--sand-50);
  display: flex;
  align-items: center;
}
.fy-brands-hero__bg { position: absolute; inset: 0; background-size: cover; background-position: center; }
.fy-brands-hero__veil {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(13,36,54,0.75) 0%, rgba(13,36,54,0.95) 100%);
}
.fy-brands-hero__inner {
  position: relative; z-index: 2;
  padding: 120px 0 80px;
}
.fy-brands-hero h1 {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(56px, 8vw, 128px);
  margin: 0;
  line-height: 0.95;
  letter-spacing: -0.025em;
  max-width: 1100px;
  color: var(--sand-50);
}
.fy-brands-hero h1 em { font-style: italic; color: var(--sun-200); }
.fy-brands-hero__deck {
  font-family: var(--serif);
  font-size: 22px;
  line-height: 1.5;
  color: var(--ocean-100);
  margin-top: 32px;
  max-width: 660px;
  font-style: italic;
}

.fy-brands-az {
  padding: 80px 0 100px;
  background: var(--sand-50);
}

.fy-brands-az__layout {
  display: grid;
  grid-template-columns: 1fr 60px;
  gap: 32px;
  align-items: start;
}
.fy-brands-az__main { min-width: 0; }

.fy-brands-az__group {
  margin-bottom: 56px;
  scroll-margin-top: 100px;
}
.fy-brands-az__group-head {
  display: flex;
  align-items: baseline;
  gap: 16px;
  margin-bottom: 20px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--line);
}
.fy-brands-az__letter {
  font-family: var(--serif);
  font-size: 56px;
  font-weight: 400;
  margin: 0;
  color: var(--ocean-700);
  line-height: 1;
}

.fy-brands-az__cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 12px;
}
.fy-brand-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 16px 18px;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  color: inherit;
  background: var(--sand-50);
  text-decoration: none;
  transition: all 180ms ease;
}
.fy-brand-card:hover {
  border-color: var(--ocean-700);
  background: var(--sand-100);
}
.fy-brand-card__main { min-width: 0; flex: 1; }
.fy-brand-card__name {
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.15;
  letter-spacing: -0.005em;
  color: var(--ocean-900);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fy-brand-card__meta {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-top: 4px;
}
.fy-brand-card__count {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}
.fy-brand-card__dot {
  width: 6px;
  height: 6px;
  border-radius: 999px;
  display: inline-block;
}

.fy-brands-az__rail {
  position: sticky;
  top: calc(var(--nav-h) + 24px);
  align-self: start;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding-top: 8px;
}
.fy-brands-az__rail-link {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.05em;
  padding: 4px 8px;
  text-align: center;
  color: var(--ocean-700);
  border-radius: 4px;
  text-decoration: none;
  transition: background 120ms;
}
.fy-brands-az__rail-link:hover {
  background: var(--sand-100);
  color: var(--ocean-900);
}
.fy-brands-az__rail-link.is-disabled {
  color: var(--line);
  pointer-events: none;
}

/* Brands page hero AI picker */
.fy-brands-picker__field {
  background: rgba(245, 239, 227, 0.08);
  -webkit-backdrop-filter: blur(12px);
          backdrop-filter: blur(12px);
  border: 1px solid rgba(245, 239, 227, 0.22);
  border-radius: 14px;
  padding: 6px;
  display: flex;
  align-items: center;
  gap: 10px;
  transition: border-color 200ms ease;
  max-width: 720px;
  margin-top: 0;
}
.fy-brands-picker__field:focus-within {
  border-color: var(--sun-500);
}
.fy-brands-picker__icon {
  margin-left: 14px;
  color: var(--ocean-100);
  flex-shrink: 0;
  display: inline-flex;
}
.fy-brands-picker__field input,
input#fy-brands-picker-input,
#fy-brands-picker .fy-brands-picker__field input {
  flex: 1 !important;
  padding: 16px 4px !important;
  border: none !important;
  background: transparent !important;
  color: var(--sand-50) !important;
  -webkit-text-fill-color: var(--sand-50) !important;
  font-family: var(--serif) !important;
  font-size: 19px !important;
  outline: none !important;
  opacity: 1 !important;
  font-weight: 400 !important;
  box-shadow: none !important;
  text-shadow: none !important;
}
.fy-brands-picker__field input::placeholder,
input#fy-brands-picker-input::placeholder {
  color: rgba(245, 239, 227, 0.55) !important;
  -webkit-text-fill-color: rgba(245, 239, 227, 0.55) !important;
}

.fy-brands-picker__dropdown {
  position: relative;
  margin-top: 8px;
  max-width: 720px;
  background: var(--ocean-900);
  border: 1px solid rgba(245, 239, 227, 0.18);
  border-radius: 12px;
  padding: 6px;
  box-shadow: 0 24px 60px rgba(0,0,0,0.4);
  z-index: 5;
  animation: fade-up 200ms ease both;
}

.fy-brands-picker__pill {
  padding: 8px 14px;
  border-radius: 999px;
  font-size: 13px;
  background: rgba(245,239,227,0.08);
  border: 1px solid rgba(245,239,227,0.18);
  color: var(--sand-50);
  font-family: var(--serif);
  text-decoration: none;
  transition: background 150ms, border-color 150ms;
}
.fy-brands-picker__pill:hover {
  background: rgba(245,239,227,0.15);
  border-color: rgba(245,239,227,0.4);
  color: var(--sand-50);
}

/* ============================================================
   Journal page
   ============================================================ */
/* Journal category chips */
.fy-chip-cat {
  display: inline-flex;
  align-items: center;
  padding: 8px 14px;
  font-size: 12px;
  font-family: var(--mono);
  letter-spacing: 0.04em;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: transparent;
  color: var(--ink-soft);
  cursor: pointer;
  transition: all 150ms;
  white-space: nowrap;
}
.fy-chip-cat:hover {
  border-color: var(--ink);
  color: var(--ink);
}
.fy-chip-cat.is-active {
  background: var(--ocean-900);
  color: var(--sand-50);
  border-color: var(--ocean-900);
}

.fy-journal-hero {
  padding: calc(var(--nav-h) + 60px) 0 40px;
  border-bottom: 1px solid var(--line);
  background: var(--sand-50);
}
.fy-journal-hero h1 {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(48px, 6vw, 92px);
  margin: 14px 0 0;
  line-height: 0.98;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-journal-hero__deck {
  font-family: var(--serif);
  font-size: 22px;
  line-height: 1.45;
  color: var(--ink-mute);
  margin-top: 28px;
  max-width: 640px;
  font-style: italic;
}

.fy-journal-feature { padding: 48px 0 60px; }
.fy-journal-feature__inner {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 56px;
  color: inherit;
  align-items: center;
  text-decoration: none;
}
.fy-journal-feature__img {
  aspect-ratio: 16/10;
  overflow: hidden;
  border-radius: var(--r-md);
  background: var(--ocean-100);
}
.fy-journal-feature__img img { width: 100%; height: 100%; object-fit: cover; }
.fy-journal-feature__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 56px;
  margin: 16px 0;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-journal-feature__deck {
  font-family: var(--serif);
  font-size: 21px;
  line-height: 1.5;
  color: var(--ink-mute);
  font-style: italic;
}
.fy-journal-feature__byline {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-top: 24px;
}
.fy-journal-feature__cat {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--sun-600);
}

.fy-journal-grid {
  padding-bottom: 80px;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 36px;
}
.fy-journal-card { color: inherit; text-decoration: none; }
.fy-journal-card,
a.fy-journal-card,
a.fy-journal-card:hover,
a.fy-journal-card:focus,
a.fy-journal-card:visited {
  color: var(--ink) !important;
  text-decoration: none !important;
}
.fy-journal-card__img {
  aspect-ratio: 5/4;
  overflow: hidden;
  border-radius: var(--r-md);
  background: var(--ocean-100);
}
.fy-journal-card__img img { width: 100%; height: 100%; object-fit: cover; transition: transform 300ms ease; }
.fy-journal-card:hover .fy-journal-card__img img { transform: scale(1.02); }
.fy-journal-card__cat,
a.fy-journal-card .fy-journal-card__cat {
  font-family: var(--mono) !important;
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--sun-600) !important;
  margin-top: 18px;
}
.fy-journal-card__title,
a.fy-journal-card .fy-journal-card__title {
  font-family: var(--serif) !important;
  font-size: 26px;
  line-height: 1.15;
  margin-top: 8px;
  color: var(--ocean-900) !important;
  font-weight: 400;
}
.fy-journal-card__deck,
a.fy-journal-card .fy-journal-card__deck {
  font-family: var(--serif) !important;
  font-size: 16px;
  color: var(--ink-mute) !important;
  margin-top: 8px;
  font-style: italic;
  line-height: 1.4;
}

/* Journal feature article */
.fy-journal-feature__inner,
a.fy-journal-feature__inner,
a.fy-journal-feature__inner:hover,
a.fy-journal-feature__inner:visited {
  color: var(--ink) !important;
  text-decoration: none !important;
}
a.fy-journal-feature__inner .fy-journal-feature__title {
  color: var(--ocean-900) !important;
}
a.fy-journal-feature__inner .fy-journal-feature__deck {
  color: var(--ink-mute) !important;
}

/* ============================================================
   Sell page
   ============================================================ */
.fy-sell-hero {
  position: relative;
  min-height: 92vh;
  color: var(--sand-50);
  overflow: hidden;
}
.fy-sell-hero__bg { position: absolute; inset: 0; background-size: cover; background-position: center; }
.fy-sell-hero__veil {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(13,36,54,0.45) 0%, rgba(13,36,54,0.85) 100%);
}
.fy-sell-hero__inner {
  position: relative; z-index: 2;
  padding: 220px 0 120px;
  max-width: 1100px;
}
.fy-sell-hero__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--sun-200);
  margin-bottom: 28px;
}
.fy-sell-hero h1 {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(56px, 8.4vw, 132px);
  margin: 0;
  line-height: 0.94;
  letter-spacing: -0.025em;
  color: var(--sand-50);
}
.fy-sell-hero__deck {
  font-family: var(--serif);
  font-size: 22px;
  line-height: 1.5;
  color: var(--ocean-100);
  margin-top: 36px;
  max-width: 660px;
  font-style: italic;
}
.fy-sell-hero__buttons {
  display: flex; gap: 12px; margin-top: 44px; flex-wrap: wrap;
}

/* Sell page — content engine cards */
.fy-content-engine {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 28px;
}
.fy-content-card {
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  overflow: hidden;
  background: var(--sand-50);
  transition: transform 200ms ease, box-shadow 200ms ease;
}
.fy-content-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}
.fy-content-card__media {
  position: relative;
  aspect-ratio: 5 / 3;
  background-size: cover;
  background-position: center;
}
.fy-content-card__tag {
  position: absolute;
  top: 14px;
  left: 14px;
  padding: 5px 10px;
  border-radius: 999px;
  background: rgba(13,36,54,0.65);
  -webkit-backdrop-filter: blur(8px);
          backdrop-filter: blur(8px);
  color: var(--sand-50);
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.fy-content-card__play {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}
.fy-content-card__play::before {
  content: "";
  width: 56px; height: 56px;
  border-radius: 999px;
  background: rgba(245,239,227,0.92);
  display: block;
  position: absolute;
}
.fy-content-card__play-arrow {
  position: relative;
  width: 0; height: 0;
  border-left: 12px solid var(--ocean-900);
  border-top: 8px solid transparent;
  border-bottom: 8px solid transparent;
  margin-left: 4px;
}
.fy-content-card__body {
  padding: 26px 24px 28px;
}

/* Sell page — platform reach split */
.fy-platform-reach {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 80px;
  align-items: start;
}
.fy-platform-row {
  padding: 22px 26px;
  border: 1px solid rgba(245,239,227,0.16);
  border-radius: var(--r-md);
  background: rgba(245,239,227,0.04);
  display: grid;
  grid-template-columns: 180px 1fr auto;
  gap: 24px;
  align-items: center;
}

/* Sell page — playbook + process */
.fy-playbook-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
}
.fy-playbook-card {
  padding: 26px 24px;
  background: var(--sand-50);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  min-height: 220px;
}

.fy-process-list {
  border-top: 1px solid var(--line);
}
.fy-process-row {
  display: grid;
  grid-template-columns: 120px 360px 1fr;
  gap: 40px;
  padding: 30px 0;
  border-bottom: 1px solid var(--line);
  align-items: baseline;
}

/* Sell page — valuation form */
.fy-valuation {
  display: grid;
  grid-template-columns: 1fr 1.1fr;
  gap: 80px;
  align-items: start;
}

/* Valuation section bottom edge — adds a subtle highlight rule at the bottom
   of the section so it doesn't visually merge with the footer below (footer
   is also dark). Sun-gold accent rule makes the boundary intentional and
   editorial rather than accidental. */
#valuation::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent 0%, var(--sun-500) 35%, var(--sun-500) 65%, transparent 100%);
  opacity: 0.35;
  pointer-events: none;
}
.fy-valuation-form {
  background: rgba(245,239,227,0.05);
  border: 1px solid rgba(245,239,227,0.16);
  padding: 36px;
  border-radius: var(--r-md);
}
.fy-valuation-form__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
.fy-valuation-field {
  display: block;
}
.fy-valuation-field span {
  display: block;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ocean-200);
  margin-bottom: 8px;
}
.fy-valuation-field input,
input.fy-valuation-field-input,
.fy-valuation-form .fy-valuation-field input,
form#fy-sell-valuation .fy-valuation-field input {
  width: 100% !important;
  padding: 12px 14px !important;
  border: 1px solid rgba(245,239,227,0.18) !important;
  border-radius: 8px !important;
  background: rgba(245,239,227,0.04) !important;
  color: var(--sand-50) !important;
  -webkit-text-fill-color: var(--sand-50) !important;
  font-family: var(--sans) !important;
  font-size: 14px !important;
  outline: none !important;
  opacity: 1 !important;
  transition: border-color 150ms;
}
.fy-valuation-field input::placeholder { color: rgba(245,239,227,0.4) !important; -webkit-text-fill-color: rgba(245,239,227,0.4) !important; }
.fy-valuation-field input:focus { border-color: var(--sun-500) !important; }

/* ============================================================
   Sell page — scrolling testimonials marquee
   Two rows scroll in opposite directions, infinite loop via
   duplicate-track pattern. Pause on hover. Edge-fade mask.
   ============================================================ */
.fy-testimonials {
  background: var(--sand-50);
  padding: 120px 0 130px;
  overflow: hidden; /* contain marquee overflow */
  border-top: 1px solid var(--line);
}
.fy-marquee {
  position: relative;
  width: 100%;
  overflow: hidden;
  /* Soft edge fade so cards melt off-screen instead of cutting hard */
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 6%, #000 94%, transparent 100%);
          mask-image: linear-gradient(to right, transparent 0, #000 6%, #000 94%, transparent 100%);
}
.fy-marquee__track {
  display: flex;
  gap: 22px;
  width: max-content;
  will-change: transform;
  animation: fy-marquee-scroll 80s linear infinite;
}
.fy-marquee[data-direction="right"] .fy-marquee__track {
  animation-direction: reverse;
  animation-duration: 90s;
}
.fy-marquee:hover .fy-marquee__track,
.fy-marquee:focus-within .fy-marquee__track {
  animation-play-state: paused;
}
@keyframes fy-marquee-scroll {
  0%   { transform: translate3d(0, 0, 0); }
  100% { transform: translate3d(-50%, 0, 0); } /* duplicate-track pattern: scroll exactly half */
}

.fy-testimonial-card {
  flex: 0 0 auto;
  width: 380px;
  min-height: 240px;
  background: var(--sand-100);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 30px 30px 26px;
  display: flex;
  flex-direction: column;
  position: relative;
  transition: transform 220ms ease, box-shadow 220ms ease, border-color 220ms ease;
}
.fy-testimonial-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 44px -22px rgba(13, 36, 54, 0.22);
  border-color: rgba(13, 36, 54, 0.16);
}
.fy-testimonial-card__quote-mark {
  font-family: var(--serif);
  font-size: 64px;
  line-height: 0.7;
  color: var(--sun-500);
  opacity: 0.55;
  margin-bottom: 4px;
  font-style: italic;
}
.fy-testimonial-card__body {
  font-family: var(--serif);
  font-size: 16.5px;
  line-height: 1.55;
  color: var(--ocean-900);
  margin: 0 0 22px 0;
  flex: 1;
  letter-spacing: -0.005em;
}
.fy-testimonial-card__foot {
  display: flex;
  align-items: center;
  gap: 14px;
  padding-top: 18px;
  border-top: 1px solid rgba(13, 36, 54, 0.08);
}
.fy-testimonial-card__avatar {
  flex: 0 0 auto;
  width: 42px;
  height: 42px;
  border-radius: 999px;
  background: linear-gradient(180deg, var(--ocean-100), var(--sand-200));
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  color: var(--ink-mute);
}
.fy-testimonial-card__meta { min-width: 0; }
.fy-testimonial-card__name {
  font-family: var(--serif);
  font-size: 15.5px;
  color: var(--ocean-900);
  letter-spacing: -0.005em;
}
.fy-testimonial-card__sub {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-top: 4px;
}

/* Reduced motion — stop the scroll, let users read at rest */
@media (prefers-reduced-motion: reduce) {
  .fy-marquee__track { animation: none; }
  .fy-marquee {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}

/* ===========================================================================
   SELL PAGE v3.0 — Popup-Card Pattern
   ===========================================================================
   Hero / stats / 4 explore cards / reviews (always visible) / valuation form.
   The 4 cards open modal popups holding the deep content for each section.
   Reviews are NOT in a popup — sellers want them on the page as proof.

   Naming convention:
     .fy-explore             quick-nav card section
     .fy-modal-overlay       popup overlay (fixed)
     .fy-modal               popup card itself
     .fy-modal-tiles         6-tile grid inside "What we shoot" modal
     .fy-modal-platforms     5-row list inside "Where it goes" modal
     .fy-modal-flow          4-card grid inside "How buyers find" modal
     .fy-modal-process       6-stage timeline inside "Full process" modal
     .fy-reviews-section     permanent reviews section on the page
   =========================================================================== */

/* --- Section accent rule (used in section headers) --- */
.fy-rule {
  display: block;
  width: 40px;
  height: 2px;
  background: var(--sun-500);
  margin: 0 auto 18px;
  opacity: 0.6;
}

/* --- Section 3: Explore cards (popup triggers) --- */

.fy-explore {
  background: var(--sand-50);
  padding: 96px 0 72px;
}
.fy-explore__header {
  max-width: 760px;
  margin: 0 auto 44px;
  text-align: center;
}
.fy-explore__header .eyebrow {
  margin-bottom: 12px;
  display: block;
}
.fy-explore__header h2.display {
  font-size: clamp(36px, 5vw, 56px);
  margin: 0;
  line-height: 1.02;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-explore__header p.serif {
  font-size: 16px;
  line-height: 1.55;
  color: var(--ink-mute);
  margin: 18px auto 0;
  max-width: 540px;
  font-style: italic;
}

.fy-explore__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
  max-width: 1120px;
  margin: 0 auto;
}

.fy-explore-card {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 26px 24px 24px;
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  color: var(--ocean-900);
  transition: transform 220ms ease, border-color 220ms ease, box-shadow 220ms ease;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0;
}
.fy-explore-card:hover {
  transform: translateY(-3px);
  border-color: var(--sun-500);
  box-shadow: 0 10px 28px rgba(8, 30, 47, 0.08);
}
.fy-explore-card:focus-visible {
  outline: 2px solid var(--sun-500);
  outline-offset: 2px;
}
.fy-explore-card__icon {
  width: 40px;
  height: 40px;
  border-radius: 999px;
  background: var(--sand-50);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--sun-600);
  margin-bottom: 18px;
}
.fy-explore-card__num {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  color: var(--sun-600);
}
.fy-explore-card__title {
  font-family: var(--serif);
  font-size: 20px;
  line-height: 1.2;
  letter-spacing: -0.005em;
  color: var(--ocean-900);
  margin: 8px 0 12px;
}
.fy-explore-card__hint {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--ink-mute);
  font-family: var(--mono);
  letter-spacing: 0.04em;
}
.fy-explore-card:hover .fy-explore-card__hint {
  color: var(--sun-600);
}

/* --- Section 4: Reviews (always visible) --- */

.fy-reviews-section {
  background: #e7ecef;
  padding: 96px 0 96px;
}
.fy-reviews-header {
  max-width: 720px;
  margin: 0 auto 36px;
  text-align: center;
}
.fy-reviews-header .eyebrow {
  margin-bottom: 12px;
  display: block;
}
.fy-reviews-header h2.display {
  font-size: clamp(36px, 5vw, 56px);
  margin: 0;
  line-height: 1.02;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-reviews-header p.serif {
  font-size: 16px;
  line-height: 1.55;
  color: var(--ink-mute);
  margin: 18px auto 0;
  max-width: 520px;
  font-style: italic;
}

.fy-reviews-feature {
  max-width: 920px;
  margin: 0 auto 36px;
  padding: 36px 40px 30px;
  background: #fff;
  border-left: 3px solid var(--sun-500);
  border-radius: 0 var(--r-md) var(--r-md) 0;
  position: relative;
}
.fy-reviews-feature__mark {
  position: absolute;
  top: 12px;
  right: 24px;
  font-family: var(--serif);
  font-size: 80px;
  line-height: 1;
  color: var(--sun-200);
  opacity: 0.55;
  pointer-events: none;
}
.fy-reviews-feature p {
  font-family: var(--serif);
  font-size: clamp(19px, 2vw, 24px);
  line-height: 1.42;
  font-style: italic;
  color: var(--ocean-900);
  margin: 0 0 22px;
  max-width: 800px;
}
.fy-reviews-feature footer {
  display: flex;
  align-items: center;
  gap: 12px;
}
.fy-reviews-feature__avatar {
  width: 40px;
  height: 40px;
  border-radius: 999px;
  background: linear-gradient(180deg, var(--ocean-100), var(--sand-200));
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.10em;
  color: var(--ink-mute);
}
.fy-reviews-feature__name {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  color: var(--ocean-900);
}
.fy-reviews-feature__sub {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-top: 3px;
}

.fy-reviews-filter {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  max-width: 920px;
  margin: 0 auto 30px;
}
.fy-reviews-filter__chip {
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 7px 16px;
  font-family: var(--sans, system-ui);
  font-size: 13px;
  letter-spacing: 0.01em;
  color: var(--ink-mute);
  cursor: pointer;
  transition: background 180ms ease, color 180ms ease, border-color 180ms ease;
}
.fy-reviews-filter__chip:hover {
  border-color: var(--ocean-700);
  color: var(--ocean-900);
}
.fy-reviews-filter__chip.is-active {
  background: var(--ocean-900);
  border-color: var(--ocean-900);
  color: var(--sand-50);
}

.fy-reviews-masonry {
  column-count: 3;
  column-gap: 16px;
  max-width: 1140px;
  margin: 0 auto;
}
.fy-review-card {
  break-inside: avoid;
  display: block;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 22px 22px 18px;
  margin-bottom: 16px;
  position: relative;
  transition: border-color 220ms ease;
}
.fy-review-card:hover {
  border-color: var(--sun-500);
}
.fy-review-card.is-hidden,
.fy-review-card.is-filtered-out {
  display: none;
}
.fy-review-card__mark {
  font-family: var(--serif);
  font-size: 32px;
  line-height: 1;
  color: var(--sun-500);
  position: absolute;
  top: 8px;
  left: 18px;
  pointer-events: none;
}
.fy-review-card__body {
  font-size: 14px;
  line-height: 1.55;
  color: var(--ink-soft);
  margin: 16px 0 18px;
}
.fy-review-card__foot {
  display: flex;
  align-items: center;
  gap: 12px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
}
.fy-review-card__avatar {
  width: 32px;
  height: 32px;
  border-radius: 999px;
  background: linear-gradient(180deg, var(--ocean-100), var(--sand-200));
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.10em;
  color: var(--ink-mute);
  flex-shrink: 0;
}
.fy-review-card__name {
  font-family: var(--serif);
  font-size: 13.5px;
  color: var(--ocean-900);
}
.fy-review-card__sub {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-top: 2px;
}

.fy-reviews-more {
  display: flex;
  justify-content: center;
  margin-top: 28px;
}
.fy-reviews-more__btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: transparent;
  border: 1px solid var(--ocean-900);
  border-radius: 999px;
  padding: 10px 22px;
  color: var(--ocean-900);
  font-family: var(--sans, system-ui);
  font-size: 13px;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: background 180ms ease, color 180ms ease;
}
.fy-reviews-more__btn:hover {
  background: var(--ocean-900);
  color: var(--sand-50);
}
.fy-reviews-more__btn svg { transition: transform 220ms ease; }
.fy-reviews-more__btn[data-state="expanded"] svg { transform: rotate(180deg); }
.fy-reviews-more__label-expanded { display: none; }
.fy-reviews-more__btn[data-state="expanded"] .fy-reviews-more__label-collapsed { display: none; }
.fy-reviews-more__btn[data-state="expanded"] .fy-reviews-more__label-expanded { display: inline; }

/* --- Modal overlay system --- */

.fy-modal-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(13, 36, 54, 0.7);
  -webkit-backdrop-filter: blur(8px);
          backdrop-filter: blur(8px);
  z-index: 200;
  padding: 32px;
  overflow-y: auto;
  align-items: flex-start;
  justify-content: center;
  /* Prevent any underlying body scroll bleed; JS adds .fy-modal-locked
     to <body> when a modal is open which sets overflow:hidden globally. */
  animation: fy-modal-fade-in 200ms ease;
}
.fy-modal-overlay[hidden] { display: none !important; }
.fy-modal-overlay.is-open { display: flex; }

@keyframes fy-modal-fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes fy-modal-pop-in {
  from { opacity: 0; transform: translateY(12px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

body.fy-modal-locked {
  overflow: hidden;
}

.fy-modal {
  background: var(--sand-50);
  border-radius: 16px;
  max-width: 920px;
  width: 100%;
  padding: 44px 48px 44px;
  position: relative;
  margin: 32px 0;
  box-shadow: 0 24px 64px rgba(8, 30, 47, 0.36);
  animation: fy-modal-pop-in 280ms cubic-bezier(0.16, 1, 0.3, 1);
}

.fy-modal__close {
  position: absolute;
  top: 18px;
  right: 18px;
  width: 38px;
  height: 38px;
  border-radius: 999px;
  background: #fff;
  border: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--ocean-900);
  transition: background 180ms ease, color 180ms ease, transform 180ms ease;
}
.fy-modal__close:hover {
  background: var(--ocean-900);
  color: var(--sand-50);
  transform: rotate(90deg);
}

.fy-modal__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--sun-600);
}
.fy-modal__title {
  font-family: var(--serif);
  font-size: clamp(28px, 3.4vw, 40px);
  line-height: 1.05;
  letter-spacing: -0.015em;
  color: var(--ocean-900);
  margin: 10px 0 18px;
}
.fy-modal__intro {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  line-height: 1.55;
  color: var(--ink-mute);
  margin: 0 0 32px;
  max-width: 700px;
}

/* Modal — content tiles (6 squares for "What we shoot") */
.fy-modal-tiles {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
}
.fy-modal-tile {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  overflow: hidden;
  transition: transform 220ms ease, border-color 220ms ease;
}
.fy-modal-tile:hover {
  transform: translateY(-2px);
  border-color: var(--sun-500);
}
.fy-modal-tile__img {
  height: 140px;
  background-size: cover;
  background-position: center;
  position: relative;
}
.fy-modal-tile__tag {
  position: absolute;
  top: 12px;
  left: 12px;
  background: rgba(13, 36, 54, 0.85);
  color: var(--sand-50);
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 4px 9px;
  border-radius: 999px;
}
.fy-modal-tile__body {
  padding: 16px 18px 18px;
}
.fy-modal-tile__num {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  color: var(--sun-600);
}
.fy-modal-tile__title {
  font-family: var(--serif);
  font-size: 18px;
  line-height: 1.2;
  letter-spacing: -0.005em;
  color: var(--ocean-900);
  margin: 6px 0 8px;
}
.fy-modal-tile__desc {
  font-size: 13px;
  line-height: 1.5;
  color: var(--ink-mute);
  margin: 0;
}

/* Modal — platforms (rows for "Where it goes") */
.fy-modal-platforms {
  display: flex;
  flex-direction: column;
}
.fy-mp-row {
  display: grid;
  grid-template-columns: 36px 1fr auto;
  gap: 16px;
  align-items: center;
  padding: 16px 0;
  border-bottom: 1px solid var(--line);
}
.fy-mp-row:last-child { border-bottom: 0; }
.fy-mp-icon {
  width: 36px;
  height: 36px;
  border-radius: 999px;
  background: var(--sand-100);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--sun-600);
}
.fy-mp-name {
  font-family: var(--serif);
  font-size: 18px;
  letter-spacing: -0.005em;
  color: var(--ocean-900);
}
.fy-mp-desc {
  font-size: 13px;
  color: var(--ink-mute);
  margin-top: 3px;
  line-height: 1.4;
}
.fy-mp-handle {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--sun-600);
  letter-spacing: 0.06em;
  white-space: nowrap;
}
.fy-modal-platform-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
  margin-top: 28px;
  padding-top: 24px;
  border-top: 1px solid var(--line);
}
.fy-mps-num {
  font-family: var(--serif);
  font-size: 36px;
  line-height: 1;
  color: var(--ocean-900);
  letter-spacing: -0.02em;
}
.fy-mps-label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-top: 6px;
}

/* Modal — flow grid (4-card for "How buyers find") */
.fy-modal-flow {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
}
.fy-mf {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 22px 24px;
}
.fy-mf-num {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  color: var(--sun-600);
}
.fy-mf-label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin: 8px 0 8px;
}
.fy-mf-title {
  font-family: var(--serif);
  font-size: 19px;
  line-height: 1.18;
  letter-spacing: -0.005em;
  color: var(--ocean-900);
  margin: 0 0 10px;
}
.fy-mf-desc {
  font-size: 13px;
  line-height: 1.5;
  color: var(--ink-mute);
  margin: 0;
}

/* Modal — process timeline (vertical for "Full process") */
.fy-modal-process {
  position: relative;
}
.fy-modal-process::before {
  content: '';
  position: absolute;
  left: 64px;
  top: 6px;
  bottom: 6px;
  width: 1px;
  background: var(--sun-500);
  opacity: 0.32;
}
.fy-mpr {
  display: grid;
  grid-template-columns: 70px 24px 1fr;
  gap: 18px;
  padding: 16px 0;
  align-items: start;
}
.fy-mpr:not(:last-child) { border-bottom: 1px solid var(--line); }
.fy-mpr-num {
  font-family: var(--mono);
  font-size: 10px;
  color: var(--ink-mute);
  letter-spacing: 0.12em;
  padding-top: 5px;
}
.fy-mpr-dot {
  width: 11px;
  height: 11px;
  border-radius: 999px;
  background: var(--sun-500);
  margin: 6px 0 0 6px;
  box-shadow: 0 0 0 4px var(--sand-50);
  z-index: 1;
}
.fy-mpr-content h3 {
  font-family: var(--serif);
  font-size: 18px;
  line-height: 1.2;
  letter-spacing: -0.005em;
  color: var(--ocean-900);
  margin: 0 0 6px;
}
.fy-mpr-content p {
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--ink-mute);
  margin: 0;
}

/* --- Sticky FAB (always-visible "Get a valuation" button) --- */

.fy-sell-fab {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: 80;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 22px 14px 24px;
  background: var(--sun-500);
  color: var(--ocean-900);
  font-family: var(--sans, system-ui);
  font-weight: 600;
  font-size: 14px;
  letter-spacing: 0.01em;
  text-decoration: none;
  border-radius: 999px;
  box-shadow: 0 12px 32px rgba(8, 30, 47, 0.22), 0 2px 6px rgba(8, 30, 47, 0.12);
  opacity: 0;
  transform: translateY(20px);
  pointer-events: none;
  transition: opacity 280ms ease, transform 280ms ease, background 200ms ease;
}
.fy-sell-fab.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.fy-sell-fab:hover {
  background: var(--sun-600);
}

/* Valuation section bottom edge — gold gradient rule to separate from footer */
#valuation::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent 0%, var(--sun-500) 35%, var(--sun-500) 65%, transparent 100%);
  opacity: 0.35;
  pointer-events: none;
}

/* --- Responsive --- */

@media (max-width: 980px) {
  .fy-explore__grid { grid-template-columns: repeat(2, 1fr); }
  .fy-modal-tiles, .fy-modal-flow { grid-template-columns: 1fr 1fr; }
  .fy-reviews-masonry { column-count: 2; }
  .fy-modal { padding: 36px 32px 36px; }
}

@media (max-width: 640px) {
  .fy-explore { padding: 64px 0 48px; }
  .fy-explore__grid { grid-template-columns: 1fr; }
  .fy-explore-card { padding: 22px 22px 22px; }
  .fy-reviews-section { padding: 64px 0 64px; }
  .fy-reviews-masonry { column-count: 1; }
  .fy-reviews-feature {
    padding: 28px 26px 24px;
  }
  .fy-modal-overlay { padding: 16px; }
  .fy-modal { padding: 28px 22px 28px; margin: 16px 0; border-radius: 12px; }
  .fy-modal__close { top: 12px; right: 12px; width: 34px; height: 34px; }
  .fy-modal-tiles, .fy-modal-flow { grid-template-columns: 1fr; }
  .fy-modal-platform-stats { grid-template-columns: 1fr; gap: 14px; }
  .fy-mpr { grid-template-columns: 60px 20px 1fr; gap: 12px; }
  .fy-modal-process::before { left: 54px; }
  .fy-sell-fab {
    right: 16px; bottom: 16px;
    padding: 12px 18px;
    font-size: 13px;
  }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .fy-modal-overlay,
  .fy-modal,
  .fy-explore-card,
  .fy-modal-tile,
  .fy-modal__close,
  .fy-sell-fab {
    animation: none !important;
    transition: opacity 200ms ease !important;
  }
}

.fy-stats {
  background: var(--sand-100);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  padding: 60px 0;
}
.fy-stats__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 32px;
}
.fy-stat__num {
  font-family: var(--serif);
  font-size: 56px;
  line-height: 1;
  color: var(--ocean-900);
}
.fy-stat__label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-top: 14px;
}
.fy-stat__sub {
  font-size: 13px;
  color: var(--ink-mute);
  margin-top: 6px;
}

/* ============================================================
   About page
   ============================================================ */
.fy-about-hero {
  padding: calc(var(--nav-h) + 100px) 0 100px;
  text-align: center;
  background: var(--sand-50);
}
.fy-about-hero__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ocean-700);
  margin-bottom: 28px;
}
.fy-about-hero h1 {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(64px, 9vw, 140px);
  margin: 0;
  line-height: 0.95;
  letter-spacing: -0.025em;
  color: var(--ocean-900);
}
.fy-about-hero h1 em { font-style: italic; color: var(--ocean-700); }
.fy-about-hero__deck {
  font-family: var(--serif);
  font-size: 22px;
  line-height: 1.5;
  color: var(--ink-mute);
  margin: 36px auto 0;
  max-width: 720px;
}

.fy-about-team {
  padding: 100px 0;
  background: var(--sand-50);
  border-top: 1px solid var(--line);
}
.fy-about-team__head {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 32px;
  align-items: end;
  margin-bottom: 56px;
}
.fy-about-team__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(48px, 6vw, 88px);
  margin: 0;
  line-height: 0.98;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-about-team__intro {
  font-family: var(--serif);
  font-size: 19px;
  color: var(--ink-mute);
  line-height: 1.5;
  font-style: italic;
}

.fy-team-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 32px;
}
.fy-team-member__photo {
  aspect-ratio: 4/5;
  border-radius: var(--r-md);
  overflow: hidden;
  background: var(--ocean-100);
  margin-bottom: 18px;
}
.fy-team-member__photo img { width: 100%; height: 100%; object-fit: cover; }
.fy-team-member__name {
  font-family: var(--serif);
  font-size: 22px;
  color: var(--ocean-900);
  margin: 0 0 6px;
}
.fy-team-member__role {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 14px;
}
.fy-team-member__bio {
  font-size: 14px;
  line-height: 1.5;
  color: var(--ink-soft);
}

.fy-pillars {
  background: var(--ocean-900);
  color: var(--sand-50);
  padding: 100px 0;
}
.fy-pillars__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 56px;
}
.fy-pillar__title {
  font-family: var(--serif);
  font-size: 36px;
  margin: 0 0 16px;
  color: var(--sand-50);
}
.fy-pillar__copy {
  font-size: 16px;
  line-height: 1.5;
  color: var(--ocean-100);
}

.fy-about-cta {
  padding: 120px 0;
  text-align: center;
  background: var(--sand-50);
}
.fy-about-cta h2 {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(48px, 6vw, 88px);
  margin: 0 0 24px;
  line-height: 0.98;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-about-cta__deck {
  font-family: var(--serif);
  font-size: 19px;
  color: var(--ink-mute);
  margin: 0 auto 36px;
  max-width: 560px;
}

/* ============================================================
   Listing detail (single yacht)
   ============================================================ */
.fy-listing { background: var(--sand-50); }
.fy-listing__breadcrumb {
  padding-top: calc(var(--nav-h) + 24px);
  padding-bottom: 12px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
}
.fy-listing__breadcrumb a {
  color: var(--ocean-700);
  text-decoration: none;
  transition: color 150ms ease;
}
.fy-listing__breadcrumb a:hover {
  color: var(--ocean-900);
}
/* Separator slash — kept muted */
.fy-listing__breadcrumb > span:not(.fy-listing__breadcrumb-current) {
  margin: 0 10px;
  color: var(--ink-quiet);
}
/* The current page name — needs to be the most readable thing in
   the breadcrumb. Was previously inline-styled to var(--ink) which
   reads too soft on the sand background; bumped to ocean-900 (true
   brand navy) and slight font-weight increase. */
.fy-listing__breadcrumb-current {
  margin: 0 0 0 10px;
  color: var(--ocean-900);
  font-weight: 500;
}

.fy-listing__head {
  padding-top: 16px;
  padding-bottom: 32px;
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 32px;
  align-items: end;
}
.fy-listing__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(40px, 5.2vw, 76px);
  margin: 0;
  line-height: 0.98;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
}
.fy-listing__metarow {
  display: flex; flex-wrap: wrap;
  gap: 22px;
  margin-top: 18px;
  font-size: 14px;
  color: var(--ink-mute);
}
.fy-listing__metarow > span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.fy-listing__price-block { text-align: right; }
.fy-listing__price-label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
}
.fy-listing__price {
  font-family: var(--serif);
  font-size: 40px;
  line-height: 1;
  margin-top: 6px;
  color: var(--ocean-900);
  letter-spacing: -0.01em;
}
/* Was/Now price markup — visible above the asking price when the yacht has
   had a price drop AND we have the previous price stored. Pairs with the
   schema.org Offer.priceSpecification node so SERP "Sale" badges align with
   what the buyer sees on the page (Google penalizes mismatch). */
.fy-listing__price-was {
  font-family: var(--mono);
  font-size: 13px;
  color: var(--ink-mute);
  margin-bottom: 4px;
  letter-spacing: 0.02em;
}
.fy-listing__price-was s {
  text-decoration: line-through;
  text-decoration-thickness: 1.5px;
  text-decoration-color: var(--sun-600);
}
/* Price-reduced ribbon under the asking price.
   Sun-gold pill — same visual language as the "Featured" card badge so the
   urgency signal feels native, not bolted on. */
.fy-listing__price-drop {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
  padding: 6px 12px;
  background: var(--sun-500);
  color: var(--ocean-900);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-radius: 999px;
  box-shadow: 0 2px 10px rgba(217, 154, 61, 0.3);
}
.fy-listing__price-drop svg {
  flex-shrink: 0;
}

.fy-gallery {
  width: 100%;
  background: var(--ocean-100);
  position: relative;
  aspect-ratio: 16/9;
  overflow: hidden;
  border-radius: var(--r-md);
}
.fy-gallery img { width: 100%; height: 100%; object-fit: cover; }
.fy-gallery__empty {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-quiet);
}

.fy-listing__body {
  display: grid;
  grid-template-columns: 1fr 380px;
  gap: 56px;
  padding-top: 64px;
  padding-bottom: 100px;
}

.fy-tabs {
  display: flex; gap: 32px;
  border-bottom: 1px solid var(--line);
  margin-bottom: 36px;
}
.fy-tab,
button.fy-tab {
  padding: 12px 0 !important;
  border: none !important;
  background: transparent !important;
  color: var(--ink-mute) !important;
  -webkit-text-fill-color: var(--ink-mute) !important;
  border-bottom: 2px solid transparent !important;
  font-family: var(--sans) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  margin-bottom: -1px;
  cursor: pointer;
  text-transform: none !important;
  letter-spacing: 0.01em !important;
  opacity: 1 !important;
}
.fy-tab:hover {
  color: var(--ocean-700) !important;
  -webkit-text-fill-color: var(--ocean-700) !important;
}
.fy-tab.is-active,
button.fy-tab.is-active {
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  border-bottom-color: var(--ocean-900) !important;
}

/* Tab panels — hidden by default, shown when .is-active */
.fy-tabpanel { display: none; animation: fade-up 250ms ease both; }
.fy-tabpanel.is-active { display: block; }

.fy-tab-empty {
  font-style: italic;
  color: var(--ink-mute);
  font-family: var(--serif);
  font-size: 17px;
  padding: 24px 0;
}

.fy-listing__overview {
  font-family: var(--serif);
  font-size: 19px;
  line-height: 1.55;
  color: var(--ink-soft);
}
.fy-listing__overview p { margin: 0 0 18px; }

/* Long-form rewritten description: heading hierarchy that doesn't compete
   with the page H1 (the yacht title). H2s are roman-numeral-feeling section
   markers, more editorial than corporate. */
.fy-listing__overview h2 {
  font-family: var(--serif);
  font-size: 26px;
  line-height: 1.2;
  margin: 36px 0 14px;
  letter-spacing: -0.01em;
  color: var(--ocean-900);
}
.fy-listing__overview h2:first-child {
  margin-top: 0;
}
.fy-listing__overview h3 {
  font-family: var(--sans);
  font-size: 16px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 24px 0 10px;
  color: var(--ocean-900);
}
.fy-listing__overview ul {
  margin: 0 0 18px;
  padding-left: 22px;
}
.fy-listing__overview ul li {
  margin-bottom: 6px;
}

/* "Our Take" callout — short editorial intro before the long-form body.
   Visually distinct so buyers know this is the broker's opinion vs. the
   long-form which is more neutral fact + light editorial. */
.fy-our-take {
  background: var(--sand-100);
  border-left: 3px solid var(--sun-500);
  border-radius: 0 6px 6px 0;
  padding: 20px 26px;
  margin: 0 0 36px;
}
.fy-our-take__label {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 10px;
}
.fy-our-take__body {
  font-family: var(--serif);
  font-size: 18px;
  line-height: 1.55;
  color: var(--ocean-900);
}
.fy-our-take__body p { margin: 0 0 14px; }
.fy-our-take__body p:last-child { margin-bottom: 0; }

/* Broker attribution — appears below long-form description.
   Styled distinctly so visitors understand this is the original listing
   broker's voice, not Fly Yachts editorial. Subtle, professional, with a
   small co-brokerage line at the bottom. */
.fy-broker-attribution {
  margin-top: 48px;
  padding-top: 28px;
  border-top: 1px solid var(--line);
}
.fy-broker-attribution__head {
  margin-bottom: 14px;
}
.fy-broker-attribution__label {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
}
.fy-broker-attribution__body {
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.6;
  color: var(--ink-soft);
  /* Broker copy is often raw / sometimes ALL CAPS / sometimes a wall of text.
     Constrain it visually so it doesn't dominate the editorial above. */
  max-width: 65ch;
}
.fy-broker-attribution__body p { margin: 0 0 14px; }
.fy-broker-attribution__body p:last-child { margin-bottom: 0; }

/* MLS-style cooperation disclaimer at the very bottom of the listing.
   Industry convention: small font, muted gray, italic, slightly offset from
   the main column so it reads as legal/fine-print rather than editorial.
   Wrapped in extra padding so it doesn't crowd the related-yachts grid above. */
.fy-listing__mls-disclaimer {
  max-width: 1200px;
  margin: 24px auto 40px;
  padding: 14px 30px 0;
  /* Right-aligned within the container so it visually anchors as "fine print"
     rather than centered editorial. Small spacing from edge keeps it from
     hugging the viewport. */
  text-align: right;
}
.fy-listing__mls-disclaimer p {
  display: inline-block;
  max-width: 520px;
  margin: 0;
  font-family: var(--sans);
  font-size: 10px;
  line-height: 1.45;
  color: var(--ink-quiet, #999);
  font-style: italic;
  letter-spacing: 0.01em;
  text-align: left;
}
@media (max-width: 768px) {
  .fy-listing__mls-disclaimer {
    text-align: left;
    padding: 14px 20px 0;
    margin: 16px auto 28px;
  }
  .fy-listing__mls-disclaimer p {
    font-size: 9.5px;
    max-width: none;
  }
}
.fy-broker-attribution__coop {
  margin-top: 18px;
  padding: 12px 16px;
  background: var(--sand-100);
  border-radius: 6px;
  font-family: var(--sans);
  font-size: 13px;
  line-height: 1.5;
  color: var(--ink-soft);
  font-style: italic;
}

/* ============================================================
   HUB PAGES — location, comparison, buying guide
   Shared editorial layout used by:
     /yachts-in-{slug}/
     /{builder-a}-vs-{builder-b}/
     /buying-guide/{slug}/
   ============================================================ */
.fy-hub__hero {
  margin-bottom: 48px;
  padding-bottom: 32px;
  border-bottom: 1px solid var(--line);
}
.fy-hub__hero-meta {
  margin-bottom: 14px;
}
.fy-hub__hero-eyebrow {
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-mute);
}
.fy-hub__hero-title {
  font-family: var(--serif);
  font-size: clamp(34px, 4.5vw, 56px);
  line-height: 1.05;
  letter-spacing: -0.02em;
  color: var(--ocean-900);
  margin: 0;
}
.fy-hub__hero-sub {
  margin-top: 14px;
  font-family: var(--sans);
  font-size: 16px;
  color: var(--ink-mute);
}
.fy-hub__section-title {
  font-family: var(--serif);
  font-size: 28px;
  letter-spacing: -0.01em;
  color: var(--ocean-900);
  margin: 0 0 24px;
}
.fy-hub__section-title a {
  color: inherit;
  text-decoration: none;
  border-bottom: 2px solid transparent;
  transition: border-color 120ms ease;
}
.fy-hub__section-title a:hover {
  border-bottom-color: var(--sun-500);
}
.fy-hub__inventory {
  margin: 0 0 64px;
}
.fy-hub__editorial {
  margin: 0 0 64px;
  font-family: var(--serif);
  font-size: 18px;
  line-height: 1.65;
  color: var(--ink-soft);
  max-width: 75ch;
}
.fy-hub__editorial h2 {
  font-family: var(--serif);
  font-size: 28px;
  line-height: 1.2;
  margin: 40px 0 16px;
  color: var(--ocean-900);
  letter-spacing: -0.01em;
}
.fy-hub__editorial h2:first-child { margin-top: 0; }
.fy-hub__editorial h3 {
  font-family: var(--sans);
  font-size: 16px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 28px 0 12px;
  color: var(--ocean-900);
}
.fy-hub__editorial p { margin: 0 0 18px; }
.fy-hub__editorial ul,
.fy-hub__editorial ol { margin: 0 0 18px; padding-left: 22px; }
.fy-hub__editorial ul li,
.fy-hub__editorial ol li { margin-bottom: 8px; }
.fy-hub__editorial--guide { font-size: 19px; }

.fy-hub__related {
  margin: 0 0 64px;
  padding-top: 40px;
  border-top: 1px solid var(--line);
}
.fy-hub__link-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 14px;
  list-style: none;
  margin: 0;
  padding: 0;
}
.fy-hub__link-list li {
  margin: 0;
}
.fy-hub__link-list a {
  display: inline-block;
  padding: 6px 14px;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.04em;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--ocean-900);
  text-decoration: none;
  transition: all 120ms ease;
}
.fy-hub__link-list a:hover {
  border-color: var(--ocean-900);
  background: var(--ocean-900);
  color: var(--sand-50);
}

.fy-hub__cta {
  margin: 64px 0 0;
  padding: 40px 30px;
  background: var(--sand-100);
  border-radius: 12px;
  text-align: center;
}
.fy-hub__cta h2 {
  font-family: var(--serif);
  font-size: 28px;
  margin: 0 0 12px;
  color: var(--ocean-900);
}
.fy-hub__cta p {
  font-family: var(--sans);
  font-size: 16px;
  color: var(--ink-soft);
  margin: 0 0 24px;
  max-width: 50ch;
  margin-left: auto;
  margin-right: auto;
}
.fy-cta-button {
  display: inline-block;
  padding: 14px 28px;
  background: var(--ocean-900);
  color: var(--sand-50);
  text-decoration: none;
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.02em;
  transition: background 120ms ease;
}
.fy-cta-button:hover {
  background: #061a2a;
}

/* Comparison page — side-by-side grids stack on mobile */
.fy-hub__compare-grids {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 40px;
  margin: 0 0 64px;
}
@media (max-width: 768px) {
  .fy-hub__compare-grids { grid-template-columns: 1fr; }
}

/* Specifications grid (inside tab panel) */
.fy-specs-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 24px 32px;
  padding: 8px 0 16px;
}
.fy-spec-cell__label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 6px;
}
.fy-spec-cell__value {
  font-family: var(--serif);
  font-size: 19px;
  color: var(--ocean-900);
  letter-spacing: -0.005em;
}

/* Highlights — bullet list with sun-gold checkmark */
.fy-highlights {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.fy-highlights li {
  position: relative;
  padding-left: 32px;
  font-family: var(--serif);
  font-size: 18px;
  line-height: 1.5;
  color: var(--ink-soft);
}
.fy-highlights li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  width: 16px;
  height: 16px;
  background: var(--sun-500);
  border-radius: 999px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%230d2436' stroke-width='2.5'><path d='M3 8l3 3 7-7'/></svg>");
  background-size: 12px 12px;
  background-position: center;
  background-repeat: no-repeat;
}

/* Q&A */
.fy-qa {
  display: flex;
  flex-direction: column;
  gap: 28px;
}
.fy-qa__item {
  border-bottom: 1px solid var(--line);
  padding-bottom: 28px;
}
.fy-qa__item:last-child {
  border-bottom: none;
  padding-bottom: 0;
}
.fy-qa__q {
  font-family: var(--serif);
  font-size: 21px;
  line-height: 1.35;
  color: var(--ocean-900);
  margin-bottom: 10px;
  letter-spacing: -0.005em;
}
.fy-qa__q::before {
  content: "Q. ";
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.14em;
  color: var(--sun-600);
  vertical-align: 4px;
  margin-right: 4px;
}
.fy-qa__a {
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.6;
  color: var(--ink-soft);
  font-style: italic;
}
.fy-qa__a::before {
  content: "A. ";
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.14em;
  color: var(--ocean-700);
  font-style: normal;
  vertical-align: 4px;
  margin-right: 4px;
}

.fy-listing__sidebar {
  padding: 28px;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: var(--sand-100);
  position: sticky;
  top: calc(var(--nav-h) + 24px);
  align-self: start;
}
.fy-listing__sidebar-title {
  font-family: var(--serif);
  font-size: 22px;
  margin: 0 0 6px;
  color: var(--ocean-900);
}
.fy-listing__sidebar-role {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 18px;
}

/* ============================================================
   Footer
   ============================================================ */
.fy-footer {
  background: var(--ocean-900);
  color: var(--sand-50);
}
.fy-footer__inner {
  padding: 96px var(--gutter) 48px;
  max-width: var(--maxw);
  margin: 0 auto;
}
.fy-footer__grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr;
  gap: 48px;
  align-items: start;
}
.fy-footer__lead {
  font-family: var(--serif);
  font-size: 22px;
  line-height: 1.25;
  margin-top: 28px;
  color: var(--ocean-200);
  max-width: 320px;
  letter-spacing: -0.01em;
}
.fy-footer__logo img {
  height: 42px;
  width: auto;
  display: block;
  filter: brightness(0) invert(0.95);
}
.fy-footer__cta {
  display: flex; gap: 12px;
  margin-top: 32px;
}
.fy-footer__col-title {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--sun-200);
  margin-bottom: 20px;
}
.fy-footer__col-links {
  display: flex; flex-direction: column; gap: 12px;
  list-style: none; padding: 0; margin: 0;
}
.fy-footer__col-links a {
  font-size: 14px;
  color: var(--ocean-100);
  transition: color 150ms;
  text-decoration: none;
}
.fy-footer__col-links a:hover { color: var(--sand-50); }

.fy-footer__bottom {
  margin-top: 96px;
  padding-top: 32px;
  border-top: 1px solid rgba(245, 239, 227, 0.16);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  color: var(--ocean-200);
}
.fy-footer__copy {
  font-family: var(--mono);
  letter-spacing: 0.06em;
}
.fy-footer__legal { display: flex; gap: 24px; }

/* ============================================================
   Concierge bubble (plugin-injected)
   ============================================================ */
#fy-concierge-bubble {
  position: fixed;
  right: 28px;
  bottom: 28px;
  z-index: 90;
}

::selection { background: var(--sun-200); color: var(--ocean-900); }
:focus-visible { outline: 2px solid var(--ocean-600); outline-offset: 2px; }

/* Admin bar offset */
body.admin-bar .fy-topnav { top: 32px; }
@media (max-width: 782px) { body.admin-bar .fy-topnav { top: 46px; } }

/* Animations */
/* ============================================================
   Broker-input modal — opt-in lead capture from Saved/Compare
   ============================================================ */
.fy-saved__head {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 32px;
  align-items: end;
  margin-bottom: 24px;
}
@media (max-width: 1024px) {
  .fy-saved__head { grid-template-columns: 1fr; }
}

.fy-broker-callout {
  background: var(--sand-100);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 24px 26px;
  display: grid;
  grid-template-columns: 44px 1fr;
  gap: 18px;
  max-width: 440px;
  align-items: start;
}
.fy-broker-callout__icon {
  width: 44px;
  height: 44px;
  border-radius: 999px;
  background: var(--sun-500);
  color: var(--ocean-900);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.fy-broker-modal {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: none;
  align-items: flex-end;
  justify-content: center;
  pointer-events: none;
}
.fy-broker-modal.is-open { display: flex; pointer-events: auto; }
@media (min-width: 720px) {
  .fy-broker-modal { align-items: center; }
}

.fy-broker-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(13, 36, 54, 0.55);
  -webkit-backdrop-filter: blur(6px);
          backdrop-filter: blur(6px);
  cursor: pointer;
  animation: fade-in 200ms ease both;
}

.fy-broker-modal__sheet {
  position: relative;
  background: var(--sand-50);
  width: 100%;
  max-width: 640px;
  max-height: 90vh;
  overflow-y: auto;
  border-radius: 20px 20px 0 0;
  padding: 28px 28px 32px;
  box-shadow: 0 -24px 80px rgba(13, 36, 54, 0.4);
  animation: slide-up 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
}
@media (min-width: 720px) {
  .fy-broker-modal__sheet {
    border-radius: var(--r-lg);
    margin: 0 var(--gutter);
    padding: 40px 44px 36px;
    max-height: 88vh;
    animation: scale-up 240ms cubic-bezier(0.16, 1, 0.3, 1) both;
  }
}

.fy-broker-modal__close {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 36px;
  height: 36px;
  border-radius: 999px;
  background: var(--sand-100);
  color: var(--ocean-900);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  border: none;
  z-index: 2;
  transition: background 150ms;
}
.fy-broker-modal__close:hover { background: var(--sand-200); }

.fy-broker-modal__head {
  margin-bottom: 24px;
  padding-right: 40px;
}

.fy-broker-modal__form {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.fy-broker-modal__row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
@media (max-width: 540px) {
  .fy-broker-modal__row { grid-template-columns: 1fr; }
}

.fy-broker-modal__field {
  display: block;
}
.fy-broker-modal__field span {
  display: block;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 6px;
}
.fy-broker-modal__field span em {
  color: var(--sun-600);
  font-style: normal;
  margin-left: 2px;
}
.fy-broker-modal__field input,
.fy-broker-modal__field select,
.fy-broker-modal__field textarea {
  width: 100% !important;
  padding: 12px 14px !important;
  border: 1px solid var(--line) !important;
  border-radius: 8px !important;
  background: var(--sand-50) !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  font-family: var(--sans) !important;
  font-size: 14px !important;
  outline: none !important;
  opacity: 1 !important;
  transition: border-color 150ms;
  min-height: 44px;
}
.fy-broker-modal__field input::placeholder,
.fy-broker-modal__field textarea::placeholder {
  color: var(--ink-quiet) !important;
  -webkit-text-fill-color: var(--ink-quiet) !important;
}
.fy-broker-modal__field input:focus,
.fy-broker-modal__field select:focus,
.fy-broker-modal__field textarea:focus {
  border-color: var(--ocean-700) !important;
}
.fy-broker-modal__field textarea {
  resize: vertical;
  min-height: 90px;
  font-family: var(--serif) !important;
  font-size: 15px !important;
  line-height: 1.5;
}

.fy-broker-modal__yachts {
  margin-top: 4px;
  padding: 16px 18px;
  background: var(--sand-100);
  border: 1px solid var(--line);
  border-radius: 8px;
}
.fy-broker-modal__yachts-label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 10px;
}
.fy-broker-modal__yachts-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.fy-broker-modal__yachts-list li {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 6px 0;
  border-bottom: 1px solid var(--line-soft);
}
.fy-broker-modal__yachts-list li:last-child { border-bottom: none; }
.fy-broker-modal__yacht-title {
  font-family: var(--serif);
  font-size: 15px;
  color: var(--ocean-900);
  flex: 1;
}
.fy-broker-modal__yacht-price {
  font-family: var(--mono);
  font-size: 12px;
  color: var(--ink-mute);
}

.fy-broker-modal__actions {
  display: flex;
  gap: 10px;
  margin-top: 8px;
}
@media (max-width: 540px) {
  .fy-broker-modal__actions { flex-direction: column-reverse; }
  .fy-broker-modal__actions .btn { width: 100%; }
}

.fy-broker-modal__fineprint {
  font-size: 12px;
  color: var(--ink-quiet);
  text-align: center;
  margin: 4px 0 0;
  line-height: 1.4;
}

.fy-broker-modal__result {
  display: none;
  padding: 14px 16px;
  border-radius: 8px;
  font-size: 14px;
  line-height: 1.4;
  margin-top: 8px;
}
.fy-broker-modal__result.is-success {
  background: rgba(217, 154, 61, 0.14);
  color: var(--sun-600);
  border: 1px solid var(--sun-500);
}
.fy-broker-modal__result.is-error {
  background: rgba(220, 38, 38, 0.08);
  color: #b91c1c;
  border: 1px solid rgba(220, 38, 38, 0.24);
}

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes slide-up {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}
@keyframes scale-up {
  from { opacity: 0; transform: scale(0.96); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes fade-up {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}
.fade-up { animation: fade-up 600ms ease both; }

/* ============================================================
   MOBILE DRAWER
   ============================================================ */
.fy-topnav__menu-toggle {
  display: none;
  width: 40px; height: 40px;
  align-items: center; justify-content: center;
  flex-direction: column;
  gap: 5px;
  background: transparent !important;
  border: none !important;
  cursor: pointer;
  padding: 0;
  margin-left: 8px;
}
.fy-topnav__menu-toggle-bar {
  display: block;
  width: 22px;
  height: 2px;
  background: currentColor;
  border-radius: 1px;
  transition: transform 240ms ease, opacity 240ms ease;
}
.fy-topnav.is-transparent .fy-topnav__menu-toggle-bar { background: var(--sand-50); }
.fy-topnav.is-scrolled .fy-topnav__menu-toggle-bar,
.fy-topnav:not(.is-transparent) .fy-topnav__menu-toggle-bar { background: var(--ocean-900); }
.fy-topnav__menu-toggle.is-open .fy-topnav__menu-toggle-bar:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
.fy-topnav__menu-toggle.is-open .fy-topnav__menu-toggle-bar:nth-child(2) { opacity: 0; }
.fy-topnav__menu-toggle.is-open .fy-topnav__menu-toggle-bar:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}

.fy-mobile-drawer {
  position: fixed;
  top: var(--nav-h);
  left: 0; right: 0; bottom: 0;
  background: var(--sand-50);
  z-index: 95;
  overflow-y: auto;
  transform: translateY(-100%);
  transition: transform 280ms ease;
  -webkit-backdrop-filter: blur(20px);
          backdrop-filter: blur(20px);
}
body.admin-bar .fy-mobile-drawer { top: calc(var(--nav-h) + 32px); }
@media (max-width: 782px) {
  body.admin-bar .fy-mobile-drawer { top: calc(var(--nav-h) + 46px); }
}
.fy-mobile-drawer.is-open { transform: translateY(0); }
.fy-mobile-drawer__nav {
  padding: 32px var(--gutter) 80px;
  max-width: 720px;
  margin: 0 auto;
}
.fy-mobile-drawer__list {
  list-style: none;
  margin: 0 0 32px;
  padding: 0;
  display: flex;
  flex-direction: column;
}
.fy-mobile-drawer__list li a {
  display: flex;
  align-items: center;
  padding: 18px 0;
  font-family: var(--serif) !important;
  font-size: 28px !important;
  color: var(--ocean-900) !important;
  -webkit-text-fill-color: var(--ocean-900) !important;
  letter-spacing: -0.01em;
  border-bottom: 1px solid var(--line);
  text-decoration: none;
  transition: padding-left 200ms ease;
}
.fy-mobile-drawer__list li a:hover { padding-left: 8px; color: var(--ocean-700) !important; }
.fy-mobile-drawer__divider {
  height: 16px;
  border-bottom: none !important;
}
.fy-mobile-drawer__divider::before { content: ""; }
.fy-mobile-drawer__list li.fy-mobile-drawer__divider + li a {
  font-size: 16px !important;
  color: var(--ink-mute) !important;
  -webkit-text-fill-color: var(--ink-mute) !important;
  font-family: var(--sans) !important;
  font-weight: 500 !important;
  padding: 14px 0;
}
.fy-mobile-drawer__cta {
  width: 100%;
  justify-content: center;
  padding: 16px;
  margin-bottom: 28px;
}
.fy-mobile-drawer__contact {
  padding-top: 24px;
  border-top: 1px solid var(--line);
}

/* ============================================================
   GLOBAL RESPONSIVE — small desktop / tablet / phone
   ============================================================ */

/* Large desktop down to small desktop */
@media (max-width: 1280px) {
  :root {
    --gutter: clamp(16px, 3.5vw, 40px);
  }
  .fy-experts { gap: 56px; }
  .fy-content-engine { gap: 20px; }
  .fy-process-row { grid-template-columns: 100px 280px 1fr; gap: 28px; }
  .fy-platform-reach { gap: 56px; }
  .fy-valuation { gap: 56px; }
  .fy-footer__grid { gap: 32px; }
}

/* Tablet landscape and small laptop */
@media (max-width: 1024px) {
  .fy-grid-3,
  .fy-grid-yachts,
  .fy-archive__grid,
  .fy-journal-grid,
  .fy-pillars__grid {
    grid-template-columns: repeat(2, 1fr);
  }
  .fy-team-grid { grid-template-columns: repeat(2, 1fr); }
  .fy-experts { grid-template-columns: 1fr; gap: 48px; }
  .fy-experts__img { aspect-ratio: 16/10; max-height: 480px; }
  .fy-listing__body { grid-template-columns: 1fr; }
  .fy-listing__sidebar { position: static; max-width: 600px; }
  .fy-footer__grid { grid-template-columns: repeat(3, 1fr); gap: 32px; }
  .fy-footer__grid > div:first-child { grid-column: 1 / -1; max-width: 480px; }
  .fy-stats__grid { grid-template-columns: repeat(2, 1fr); }
  .fy-journal-feature__inner { grid-template-columns: 1fr; gap: 32px; }
  .fy-about-team__head { grid-template-columns: 1fr; gap: 24px; }
  .fy-content-engine { grid-template-columns: repeat(2, 1fr); }
  .fy-platform-reach { grid-template-columns: 1fr; }
  .fy-platform-row { grid-template-columns: 1fr; gap: 8px; padding: 18px 22px; }
  .fy-playbook-grid { grid-template-columns: repeat(2, 1fr); }
  .fy-process-row { grid-template-columns: 1fr; gap: 8px; padding: 22px 0; }
  .fy-valuation { grid-template-columns: 1fr; gap: 56px; }
  .fy-experts__title,
  .fy-section__title,
  .fy-about-team__title { font-size: clamp(36px, 6vw, 64px); }

  /* About hero text */
  .fy-about-hero h1 { font-size: clamp(48px, 8vw, 96px); }
  .fy-sell-hero h1 { font-size: clamp(48px, 8vw, 100px); }
  .fy-sell-hero__inner { padding: 180px 0 100px; }
  .fy-brands-hero h1 { font-size: clamp(48px, 8vw, 96px); }
  .fy-hero__title { font-size: clamp(56px, 10vw, 120px); }
}

/* Tablet portrait / large phone landscape */
@media (max-width: 768px) {
  .fy-topnav__links { display: none !important; }
  .fy-topnav__menu-toggle { display: flex !important; }
  .fy-topnav__cta--hide-sm,
  .fy-topnav__icon--hide-sm { display: none !important; }
  .fy-topnav__inner { gap: 12px; }
  .fy-topnav__logo img { height: 30px; }

  .fy-section { padding: 72px 0; }
  .fy-section--xl { padding: 96px 0; }
  .fy-section__head { margin-bottom: 36px; }

  /* Hero everywhere drops to tighter min-height (avoid 100vh issues w/ mobile chrome) */
  .fy-hero { min-height: 580px; height: 92vh; }
  .fy-hero__title { font-size: clamp(48px, 12vw, 84px); }
  .fy-hero__search { margin-top: 36px; padding: 4px; }
  .fy-hero__search input { padding: 14px 4px; font-size: 16px; }
  .fy-hero__search-icon { margin-left: 12px; }
  .fy-hero__search .btn { padding: 10px 16px !important; font-size: 13px !important; }

  /* Archive */
  .fy-archive__hero { padding: calc(var(--nav-h) + 64px) 0 36px; }
  .fy-archive__hero h1 { font-size: clamp(40px, 9vw, 64px); }
  .fy-archive__search { padding: 4px; }
  .fy-archive__search input { padding: 12px 4px; font-size: 15px; }
  .fy-archive__search-icon { margin-left: 12px; }
  .fy-archive__search .btn { padding: 10px 14px !important; font-size: 13px !important; }
  .fy-archive__filterbar { padding: 12px 0; margin-top: 24px; }
  .fy-filterbar__inner {
    flex-direction: column;
    align-items: stretch;
    gap: 12px;
  }
  .fy-filterbar__chips {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 4px;
    gap: 8px;
  }
  .fy-filterbar__chips::-webkit-scrollbar { display: none; }
  .fy-filterbar__cell { flex-shrink: 0; }
  .fy-filterbar__count { display: none; }
  .fy-filterbar__dropdown {
    position: fixed !important;
    top: auto !important;
    left: 12px !important;
    right: 12px !important;
    bottom: 12px !important;
    min-width: 0 !important;
    max-height: 60vh;
    overflow-y: auto;
    box-shadow: 0 -8px 40px rgba(13, 36, 54, 0.25);
  }
  .fy-filterbar__dropdown--wide { width: auto !important; }

  /* Card */
  .fy-card__media { height: 220px; }
  .fy-card--lg .fy-card__media { height: 280px; }
  .fy-card__title { font-size: 19px; }
  .fy-card--lg .fy-card__title { font-size: 22px; }
  .fy-card__price { font-size: 14px; }
  .fy-card__location { font-size: 12px; }

  /* Single yacht */
  .fy-listing__breadcrumb { padding-top: calc(var(--nav-h) + 16px); font-size: 10px; }
  .fy-listing__head { grid-template-columns: 1fr; gap: 16px; }
  .fy-listing__title { font-size: clamp(32px, 7vw, 56px); }
  .fy-listing__price-block { text-align: left; }
  .fy-listing__price { font-size: 32px; }
  .fy-listing__metarow { gap: 14px; font-size: 13px; }
  .fy-tabs { gap: 18px; overflow-x: auto; flex-wrap: nowrap; padding-bottom: 2px; }
  .fy-tabs::-webkit-scrollbar { display: none; }
  .fy-tab { white-space: nowrap; font-size: 13px !important; }
  .fy-listing__overview { font-size: 17px; line-height: 1.6; }
  .fy-listing__body { padding-top: 40px; padding-bottom: 60px; }
  .fy-specs-grid { grid-template-columns: 1fr 1fr; gap: 18px 16px; }
  .fy-spec-cell__value { font-size: 17px; }
  .fy-highlights li { font-size: 16px; padding-left: 28px; }
  .fy-highlights li::before { width: 14px; height: 14px; top: 7px; }
  .fy-qa__q { font-size: 18px; }
  .fy-qa__a { font-size: 15px; }
  .fy-listing__sidebar { padding: 22px; }

  /* Hero section variants */
  .fy-archive__hero { padding: calc(var(--nav-h) + 60px) 0 36px; }
  .fy-brands-hero { min-height: 60vh; }
  .fy-brands-hero__inner { padding: 100px 0 48px; }
  .fy-brands-hero h1 { font-size: clamp(40px, 11vw, 80px); }
  .fy-brands-hero__deck { font-size: 17px; }
  .fy-brands-picker__field { padding: 4px; }
  .fy-brands-picker__field input { padding: 12px 2px; font-size: 16px; }
  .fy-brands-picker__icon { margin-left: 12px; }

  /* Journal */
  .fy-journal-hero { padding: calc(var(--nav-h) + 40px) 0 28px; }
  .fy-journal-hero h1 { font-size: clamp(40px, 9vw, 64px); }
  .fy-journal-hero__deck { font-size: 17px; }
  .fy-journal-feature { padding: 32px 0 40px; }
  .fy-journal-feature__title { font-size: 32px; }
  .fy-journal-feature__deck { font-size: 17px; }
  .fy-journal-card__title { font-size: 22px; }

  /* Sell */
  .fy-sell-hero { min-height: 600px; }
  .fy-sell-hero__inner { padding: calc(var(--nav-h) + 60px) 0 60px; }
  .fy-sell-hero h1 { font-size: clamp(40px, 11vw, 84px); }
  .fy-sell-hero__deck { font-size: 17px; margin-top: 24px; }
  .fy-sell-hero__buttons { flex-direction: column; gap: 10px; align-items: flex-start; margin-top: 32px; }
  .fy-stats { padding: 40px 0; }
  .fy-stat__num { font-size: 40px; }
  .fy-content-engine { gap: 16px; }
  .fy-content-card__body { padding: 20px 18px 22px; }
  .fy-platform-row { padding: 16px 18px; }
  .fy-playbook-card { padding: 22px 20px; min-height: 0; }
  .fy-process-row { padding: 18px 0; }
  .fy-process-row h3 { font-size: 21px; }
  .fy-process-row p { font-size: 14px; }
  .fy-valuation-form { padding: 22px; }
  .fy-valuation-form__grid { grid-template-columns: 1fr; gap: 12px; }

  /* About */
  .fy-about-hero { padding: calc(var(--nav-h) + 60px) 0 60px; }
  .fy-about-hero h1 { font-size: clamp(48px, 12vw, 84px); }
  .fy-about-hero__deck { font-size: 17px; }
  .fy-about-team { padding: 60px 0; }
  .fy-about-team__title { font-size: clamp(36px, 8vw, 56px); }
  .fy-about-team__intro { font-size: 17px; }
  .fy-team-member__photo { aspect-ratio: 4/5; max-height: 400px; }
  .fy-pillars { padding: 60px 0; }
  .fy-pillar__title { font-size: 28px; }
  .fy-about-cta { padding: 80px 0; }
  .fy-about-cta h2 { font-size: clamp(36px, 8vw, 64px); }

  /* Brands A-Z */
  .fy-brands-az { padding: 56px 0 80px; }
  .fy-brands-az__layout { grid-template-columns: 1fr; gap: 0; }
  .fy-brands-az__rail { display: none; }
  .fy-brands-az__cards { grid-template-columns: 1fr; }
  .fy-brands-az__letter { font-size: 40px; }

  /* Footer */
  .fy-footer__inner { padding: 60px var(--gutter) 32px; }
  .fy-footer__grid { grid-template-columns: 1fr 1fr; gap: 32px; }
  .fy-footer__grid > div:first-child { grid-column: 1 / -1; max-width: 100%; }
  .fy-footer__lead { font-size: 18px; }
  .fy-footer__bottom {
    margin-top: 48px;
    flex-direction: column;
    align-items: flex-start;
    gap: 16px;
    text-align: left;
  }

  /* Sell CTA + experts */
  .fy-experts__title { font-size: clamp(36px, 9vw, 64px); }
  .fy-experts__copy { font-size: 17px; margin: 24px 0 28px; }
  .fy-sell-cta { padding: 64px 0; }
  .fy-sell-cta__title { font-size: clamp(32px, 8vw, 56px); }

  /* Tab content / pagination */
  .fy-pagination { margin: 32px 0 64px; }
  .fy-pagination__btn .page-numbers { min-width: 36px; height: 36px; font-size: 12px; }

  /* Concierge bubble — smaller on mobile */
  #fy-concierge-bubble { right: 16px; bottom: 16px; transform: scale(0.85); transform-origin: bottom right; }

  /* Testimonials — smaller cards, faster scroll on phones */
  .fy-testimonials { padding: 80px 0 90px; }
  .fy-testimonial-card {
    width: 300px;
    min-height: 220px;
    padding: 24px 24px 22px;
  }
  .fy-testimonial-card__body { font-size: 15px; }
  .fy-testimonial-card__quote-mark { font-size: 52px; }
  .fy-marquee__track { animation-duration: 60s; }
  .fy-marquee[data-direction="right"] .fy-marquee__track { animation-duration: 70s; }
}

/* Small phones */
@media (max-width: 480px) {
  :root {
    --gutter: 16px;
  }
  .fy-grid-3,
  .fy-grid-yachts,
  .fy-archive__grid,
  .fy-journal-grid,
  .fy-pillars__grid,
  .fy-team-grid,
  .fy-stats__grid,
  .fy-content-engine,
  .fy-playbook-grid,
  .fy-brands-az__list { grid-template-columns: 1fr !important; }

  .fy-section { padding: 56px 0; }
  .fy-section__head { margin-bottom: 28px; }

  /* Card sizing for small phones */
  .fy-card__media { height: 200px; }
  .fy-card__title { font-size: 18px; }

  /* Hero compact */
  .fy-hero { min-height: 520px; height: 85vh; }
  .fy-hero__title { font-size: clamp(40px, 13vw, 64px); line-height: 0.96; }

  /* Archive compact */
  .fy-archive__hero h1 { font-size: clamp(36px, 11vw, 52px); }
  .fy-archive__hero-sub { font-size: 11px; }

  /* Single listing compact */
  .fy-listing__title { font-size: clamp(28px, 8vw, 44px); }
  .fy-listing__price { font-size: 26px; }
  .fy-specs-grid { grid-template-columns: 1fr; }

  /* Brands hero compact */
  .fy-brands-hero h1 { font-size: clamp(36px, 13vw, 64px); }

  /* Journal */
  .fy-journal-hero h1 { font-size: clamp(36px, 11vw, 56px); }
  .fy-journal-feature__title { font-size: 26px; }

  /* Sell */
  .fy-sell-hero h1 { font-size: clamp(36px, 13vw, 64px); }

  /* Footer */
  .fy-footer__grid { grid-template-columns: 1fr; gap: 28px; }
  .fy-footer__inner { padding: 48px var(--gutter) 24px; }
  .fy-footer__lead { font-size: 17px; }

  /* About */
  .fy-about-hero h1 { font-size: clamp(40px, 13vw, 64px); }
  .fy-about-hero__deck { font-size: 16px; }

  /* Buttons large enough to tap */
  .btn { padding: 12px 18px; min-height: 44px; }

  /* Type scale tweaks */
  body { font-size: 15px; }
  .fy-experts__title { font-size: clamp(32px, 11vw, 56px); }
  .fy-experts__copy { font-size: 16px; }
  .fy-section__title { font-size: clamp(32px, 9vw, 52px); }
  .fy-about-team__title { font-size: clamp(32px, 9vw, 48px); }
  .fy-sell-cta__title { font-size: clamp(28px, 9vw, 44px); }

  /* Mobile drawer items */
  .fy-mobile-drawer__list li a { font-size: 22px !important; padding: 16px 0; }

  /* Concierge */
  #fy-concierge-bubble { transform: scale(0.78); }
}

/* Very small phones (iPhone SE 1st gen, ~320px wide) */
@media (max-width: 360px) {
  :root { --gutter: 14px; }
  .fy-hero__title,
  .fy-archive__hero h1,
  .fy-brands-hero h1,
  .fy-sell-hero h1,
  .fy-journal-hero h1,
  .fy-about-hero h1 { font-size: clamp(32px, 11vw, 44px); }
  .fy-listing__title { font-size: clamp(24px, 8vw, 36px); }
  .fy-section { padding: 48px 0; }
  .fy-card__media { height: 180px; }
}

/* Landscape phone — keep hero from being too tall */
@media (max-height: 480px) and (orientation: landscape) {
  .fy-hero,
  .fy-sell-hero,
  .fy-brands-hero {
    min-height: 480px !important;
    height: auto !important;
  }
  .fy-hero__inner,
  .fy-sell-hero__inner,
  .fy-brands-hero__inner {
    padding: calc(var(--nav-h) + 40px) 0 40px;
  }
  .fy-hero__title { font-size: clamp(40px, 8vw, 72px); }
}

/* High DPI / retina image rendering */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  body { -webkit-font-smoothing: antialiased; }
}

/* Reduced motion — respect OS preference */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Print styles */
@media print {
  .fy-topnav,
  .fy-mobile-drawer,
  #fy-concierge-bubble,
  .fy-listing__sidebar,
  .fy-tabs,
  .fy-footer { display: none !important; }
  body { background: white !important; color: black !important; }
  .fy-hero, .fy-brands-hero, .fy-sell-hero { min-height: 0 !important; height: auto !important; }
  .fy-hero__bg, .fy-brands-hero__bg, .fy-sell-hero__bg { display: none; }
  .fy-hero__veil, .fy-brands-hero__veil, .fy-sell-hero__veil { display: none; }
  .fy-tabpanel { display: block !important; }
}

/* === Auto-link styles for yacht body content ============================= */
/* Internal links injected by fy_autolink_yacht_body() inside .fy-listing
   long descriptions. Subtle visual hint without breaking reading flow. */
.fy-listing__body .fy-autolink-builder,
.fy-listing__body .fy-autolink-location,
.fy-listing__body .fy-autolink-hull {
  color: var(--ocean-700);
  text-decoration: none;
  background-image: linear-gradient(transparent calc(100% - 1px), var(--ocean-200) calc(100% - 1px));
  background-size: 100% 100%;
  background-repeat: no-repeat;
  transition: color 200ms ease, background-image 200ms ease;
}
.fy-listing__body .fy-autolink-builder:hover,
.fy-listing__body .fy-autolink-location:hover,
.fy-listing__body .fy-autolink-hull:hover {
  color: var(--sun-600);
  background-image: linear-gradient(transparent calc(100% - 1px), var(--sun-500) calc(100% - 1px));
}

/* === Jump-nav (Table of Contents) on yacht body ============================
   Built from H2 anchors auto-injected by fy_inject_heading_ids().
   Improves dwell time and unlocks Google passage-indexing + SERP sitelinks. */
.fy-listing__toc {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 16px;
  margin: 8px 0 36px;
  padding: 14px 18px;
  background: var(--sand-50);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
}
.fy-listing__toc-label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-mute);
}
.fy-listing__toc ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
}
.fy-listing__toc li {
  margin: 0;
}
.fy-listing__toc a {
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ocean-700);
  text-decoration: none;
  transition: color 200ms ease;
  border-bottom: 1px dotted transparent;
}
.fy-listing__toc a:hover {
  color: var(--sun-600);
  border-bottom-color: var(--sun-500);
}
/* Smooth scroll + scroll offset for anchor jumps so target H2 isn't
   tucked under the fixed top nav when arrived via #anchor. */
html { scroll-behavior: smooth; }
.fy-listing__body h2[id],
.fy-listing__body h3[id] { scroll-margin-top: 90px; }

/* === Buyer's brief comparison table ====================================
   Side-by-side vs 2 similar yachts. SEO: matches "X vs Y" intent and
   improves dwell time. UX: helps buyers shortcut their own comparison. */
.fy-buyers-brief {
  margin-bottom: 60px;
  padding: 32px 32px 28px;
  background: var(--sand-50);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
}
.fy-buyers-brief__title {
  font-family: var(--serif);
  font-size: clamp(24px, 3vw, 32px);
  letter-spacing: -0.01em;
  margin: 0 0 8px;
  color: var(--ocean-900);
}
.fy-buyers-brief__deck {
  font-family: var(--serif);
  font-style: italic;
  font-size: 14px;
  color: var(--ink-mute);
  margin: 0 0 24px;
}
.fy-buyers-brief__scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.fy-buyers-brief__table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
  min-width: 540px;
}
.fy-buyers-brief__table th,
.fy-buyers-brief__table td {
  padding: 12px 16px;
  text-align: left;
  border-bottom: 1px solid var(--line);
  vertical-align: top;
}
.fy-buyers-brief__table thead th {
  font-family: var(--serif);
  font-weight: 500;
  font-size: 14px;
  color: var(--ocean-900);
  letter-spacing: -0.005em;
  border-bottom: 2px solid var(--ocean-700);
  padding-bottom: 14px;
  position: relative;
}
.fy-buyers-brief__table thead th a {
  color: var(--ocean-700);
  text-decoration: none;
  border-bottom: 1px dotted var(--ocean-200);
}
.fy-buyers-brief__table thead th a:hover {
  color: var(--sun-600);
  border-bottom-color: var(--sun-500);
}
.fy-buyers-brief__table tbody th {
  font-family: var(--mono);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.10em;
  color: var(--ink-mute);
  font-weight: 500;
  width: 130px;
}
.fy-buyers-brief__table .is-current {
  background: rgba(217, 154, 61, 0.05);
}
.fy-buyers-brief__table thead th.is-current {
  border-bottom-color: var(--sun-500);
}
.fy-buyers-brief__pin {
  display: inline-block;
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--sun-600);
  background: rgba(217, 154, 61, 0.10);
  padding: 3px 8px;
  border-radius: 999px;
  margin-bottom: 6px;
}
@media (max-width: 640px) {
  .fy-buyers-brief { padding: 24px 18px 20px; }
}

/* === Insider notes callout ============================================
   Distinct visual block above the broker description. Original commentary
   that no other listing has — SEO + buyer trust. */
.fy-insider-notes {
  margin: 24px 0 28px;
  padding: 22px 26px;
  background: linear-gradient(180deg, rgba(217,154,61,0.06), rgba(217,154,61,0.02));
  border-left: 3px solid var(--sun-500);
  border-radius: 0 var(--r-md) var(--r-md) 0;
}
.fy-insider-notes__label {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--sun-600);
  margin-bottom: 10px;
}
.fy-insider-notes__body {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.6;
  color: var(--ocean-900);
}
.fy-insider-notes__body p { margin-bottom: 10px; }
.fy-insider-notes__body p:last-child { margin-bottom: 0; }

/* === Recent updates / listing signals (sidebar) =======================
   Per Conner: NO visible dates. Show intensity, not staleness. */
.fy-recent-updates {
  margin-top: 20px;
  padding: 16px 18px;
  background: var(--sand-50);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
}
.fy-recent-updates__label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 10px;
}
.fy-recent-updates__list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.fy-recent-updates__item {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 6px 0;
  font-size: 12.5px;
  color: var(--ocean-900);
  line-height: 1.4;
}
.fy-recent-updates__icon {
  flex-shrink: 0;
  color: var(--sun-600);
  margin-top: 2px;
}
.fy-recent-updates__text { flex: 1; }

/* === Quick Picks marquee ==============================================
   Auto-scrolling chip strip between the hero and the sticky filter bar.
   The track contains TWO copies of the chip list back-to-back; CSS
   animates translateX from 0 to -50% — at -50% the second copy sits
   exactly where the first started, so the loop is seamless and infinite.

   Hover anywhere in the marquee to pause. Buyers stuck on the page see
   ideas they hadn't considered drift past slowly. ~80s for one full loop
   at default 50 chip count — slow enough to read, fast enough to feel alive. */
.fy-archive__quickpicks {
  position: relative;
  border-bottom: 1px solid var(--line);
  padding: 18px 0 20px;
  background: #fff;
  overflow: hidden;
}
.fy-quickpicks__label-floating {
  display: block;
  text-align: center;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  margin-bottom: 12px;
}
.fy-quickpicks__viewport {
  position: relative;
  width: 100%;
  overflow: hidden;
  /* Soft edge fades so chips don't pop in/out abruptly at the page edge.
     The mask makes them fade to transparent over a 60px buffer. */
  -webkit-mask-image: linear-gradient(to right, transparent, #000 60px, #000 calc(100% - 60px), transparent);
          mask-image: linear-gradient(to right, transparent, #000 60px, #000 calc(100% - 60px), transparent);
}
.fy-quickpicks__track {
  display: flex;
  gap: 8px;
  width: max-content; /* let the track be as wide as it needs to */
  animation: fy-quickpicks-scroll 120s linear infinite;
  /* will-change avoids layout thrash on slower laptops */
  will-change: transform;
}
.fy-quickpicks__viewport:hover .fy-quickpicks__track {
  animation-play-state: paused;
}
/* Touch devices: many users pull/swipe instinctively. Pausing on touchstart
   gives them a chance to read + tap without the chip drifting away. */
.fy-quickpicks__viewport:active .fy-quickpicks__track {
  animation-play-state: paused;
}

@keyframes fy-quickpicks-scroll {
  /* Animate from 0 to -50% — because the track contains TWO identical
     copies of the chip list, the second copy is at position -100% width
     of one chip set. At -50% of total track width we're showing the
     start of copy #2 = identical to where we started = seamless loop. */
  0%   { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

.fy-quickpicks__chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
  padding: 9px 16px;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  color: var(--ocean-900);
  background: var(--mist-50);
  border: 1px solid var(--line);
  border-radius: 999px;
  text-decoration: none;
  transition: all 180ms ease;
  white-space: nowrap;
}
.fy-quickpicks__chip:hover {
  background: var(--ocean-900);
  color: #fff;
  border-color: var(--ocean-900);
  transform: translateY(-1px);
  box-shadow: var(--shadow-sm);
}
.fy-quickpicks__icon {
  font-size: 13px;
  line-height: 1;
  display: inline-block;
}

/* Reduced motion users: respect prefers-reduced-motion by stopping the
   animation. They still get to scroll horizontally with arrow keys / swipe. */
@media (prefers-reduced-motion: reduce) {
  .fy-quickpicks__track {
    animation: none;
    /* Allow horizontal scroll instead so they can still browse */
    overflow-x: auto;
    width: 100%;
    -webkit-overflow-scrolling: touch;
  }
}

/* Belt-and-suspenders horizontal-scroll lock. The marquee track is
   intentionally wider than the page (that's how it animates), but the
   PARENT must never let that width leak out and scroll the whole page
   horizontally. We force it on every ancestor down to the track. */
.fy-archive__quickpicks,
.fy-quickpicks__viewport {
  max-width: 100vw;
  overflow-x: hidden;
}

@media (max-width: 640px) {
  .fy-quickpicks__chip { font-size: 12px; padding: 8px 14px; }
  /* On mobile the viewport is narrower so the same animation distance
     covers fewer chips per second visually. We keep it slow but slightly
     faster than desktop because there's less to read at any moment. */
  .fy-quickpicks__track { animation-duration: 95s; }
  /* Smaller edge fade on mobile so more chips are fully visible at once */
  .fy-quickpicks__viewport {
    -webkit-mask-image: linear-gradient(to right, transparent, #000 30px, #000 calc(100% - 30px), transparent);
            mask-image: linear-gradient(to right, transparent, #000 30px, #000 calc(100% - 30px), transparent);
  }
  .fy-archive__quickpicks {
    padding: 14px 0 16px;
  }
  .fy-quickpicks__label-floating {
    font-size: 9px;
    margin-bottom: 10px;
  }
}

/* Site-wide horizontal-overflow guard — protects against any other
   element that might try to push the page wider than the viewport. */
html, body { max-width: 100vw; overflow-x: hidden; }

/* === Empty state for archive (no matches) ============================ */
.fy-archive__empty {
  text-align: center;
  padding: 100px 20px;
  max-width: 720px;
  margin: 0 auto;
}
.fy-archive__empty-chips {
  margin-top: 28px;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  align-items: center;
}
.fy-archive__empty-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 10px 6px 12px;
  font-family: var(--sans);
  font-size: 12px;
  color: var(--ocean-900);
  background: var(--sand-50);
  border: 1px solid var(--line);
  border-radius: 999px;
  text-decoration: none;
  transition: all 150ms ease;
}
.fy-archive__empty-chip:hover {
  background: var(--ocean-900);
  color: var(--sand-50);
  border-color: var(--ocean-900);
}
.fy-archive__empty-chip svg {
  opacity: 0.6;
}

/* === Compare drawer (fixed bottom panel) ============================== */
.fy-compare-drawer {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 90;
  background: var(--ocean-900);
  color: var(--sand-50);
  border-top: 1px solid var(--ocean-700);
  box-shadow: 0 -8px 32px rgba(13, 36, 54, 0.18);
  transform: translateY(100%);
  transition: transform 280ms cubic-bezier(0.32, 0.72, 0, 1);
  pointer-events: none;
}
.fy-compare-drawer.is-open {
  transform: translateY(0);
  pointer-events: auto;
}
.fy-compare-drawer__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 16px 0;
}
.fy-compare-drawer__left {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}
.fy-compare-drawer__title {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ocean-200);
}
.fy-compare-drawer__items {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
}
.fy-compare-drawer .fy-drawer__pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 6px 5px 12px;
  font-family: var(--sans);
  font-size: 13px;
  background: var(--ocean-700);
  color: var(--sand-50);
  border-radius: 999px;
  white-space: nowrap;
  max-width: 240px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fy-compare-drawer .fy-drawer__pill button {
  background: none;
  border: 0;
  color: var(--ocean-200);
  width: 18px;
  height: 18px;
  border-radius: 50%;
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: all 150ms ease;
}
.fy-compare-drawer .fy-drawer__pill button:hover {
  background: rgba(255,255,255,0.18);
  color: #fff;
}
.fy-compare-drawer__right {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-shrink: 0;
}
.fy-compare-drawer__clear {
  background: none;
  border: 0;
  color: var(--ocean-200);
  font-family: var(--sans);
  font-size: 13px;
  cursor: pointer;
  padding: 8px 4px;
  transition: color 150ms ease;
}
.fy-compare-drawer__clear:hover { color: var(--sand-50); }
.fy-compare-drawer .btn-primary {
  background: var(--sun-500);
  color: var(--ocean-900);
  border-color: var(--sun-500);
}
.fy-compare-drawer .btn-primary:hover {
  background: var(--sun-600);
  border-color: var(--sun-600);
}
@media (max-width: 640px) {
  .fy-compare-drawer__inner { flex-direction: column; align-items: stretch; gap: 12px; padding: 14px 0; }
  .fy-compare-drawer__right { justify-content: space-between; }
  .fy-compare-drawer .fy-drawer__pill { max-width: 160px; font-size: 12px; }
}

/* === Grid / Map view toggle ============================================
   Sits in the sticky filter bar next to the Sort dropdown. Two-button
   segmented control. Active button gets ocean-900 fill. */
.fy-viewtoggle {
  display: inline-flex;
  background: var(--sand-50);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 3px;
  gap: 0;
}
.fy-viewtoggle__btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border: 0;
  background: transparent;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  color: var(--ink-mute);
  border-radius: 999px;
  cursor: pointer;
  transition: all 180ms ease;
  white-space: nowrap;
}
.fy-viewtoggle__btn:hover {
  color: var(--ocean-900);
}
.fy-viewtoggle__btn.is-active {
  background: var(--ocean-900);
  color: var(--sand-50);
}
.fy-viewtoggle__btn svg {
  flex-shrink: 0;
}
@media (max-width: 640px) {
  .fy-viewtoggle__btn span { display: none; } /* icon-only on mobile */
  .fy-viewtoggle__btn { padding: 8px 10px; }
}

/* === Map view ==========================================================
   Container takes the full content width and a generous height. Tiles
   from OpenStreetMap. Markers cluster at zoomed-out levels. */
.fy-archive__map-wrap {
  margin-top: 32px;
  margin-bottom: 32px;
  position: relative;
}
.fy-archive__map {
  width: 100%;
  height: 70vh;
  min-height: 480px;
  max-height: 800px;
  border-radius: var(--r-lg);
  border: 1px solid var(--line);
  background: var(--sand-50); /* shown briefly while tiles load */
  overflow: hidden;
}
.fy-archive__map-empty {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-mute);
}
.fy-archive__map-note {
  margin-top: 14px;
  padding: 10px 16px;
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ink-mute);
  background: var(--sand-50);
  border-radius: var(--r-md);
  text-align: center;
}

/* === Custom yacht pin marker ============================================
   Gold dot inside ocean-navy circle. Pure CSS — no SVG/img per marker.
   Each marker = 22×22 px so clustering looks tight. */
.fy-mapmarker-pin {
  width: 22px !important;
  height: 22px !important;
  background: transparent !important;
  border: 0 !important;
}
.fy-mapmarker-pin__inner {
  display: block;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--ocean-900);
  border: 2px solid var(--sun-500);
  box-shadow: 0 2px 6px rgba(13, 36, 54, 0.4), 0 0 0 4px rgba(217, 154, 61, 0.18);
  position: relative;
  cursor: pointer;
  transition: transform 150ms ease;
}
.fy-mapmarker-pin__inner::after {
  content: '';
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--sun-500);
}
.leaflet-marker-icon.fy-mapmarker-pin:hover .fy-mapmarker-pin__inner {
  transform: scale(1.18);
}

/* === Popup card ========================================================
   Replaces Leaflet's default popup styling with our card visual language. */
.leaflet-popup.fy-mapmarker-popup .leaflet-popup-content-wrapper {
  background: #fff;
  border-radius: var(--r-md);
  padding: 0;
  box-shadow: 0 12px 36px rgba(13, 36, 54, 0.18);
  overflow: hidden;
}
.leaflet-popup.fy-mapmarker-popup .leaflet-popup-content {
  margin: 0;
  font-family: var(--sans);
  line-height: 1.4;
}
.leaflet-popup.fy-mapmarker-popup .leaflet-popup-tip {
  background: #fff;
  box-shadow: 0 6px 18px rgba(13, 36, 54, 0.12);
}
.fy-mapmarker {
  width: 240px;
}
.fy-mapmarker__media {
  display: block;
  width: 100%;
  height: 130px;
  overflow: hidden;
  background: var(--sand-100);
}
.fy-mapmarker__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.fy-mapmarker__body {
  padding: 12px 14px 14px;
}
.fy-mapmarker__title {
  display: block;
  font-family: var(--serif);
  font-size: 15px;
  font-weight: 500;
  color: var(--ocean-900);
  text-decoration: none;
  margin-bottom: 4px;
  line-height: 1.25;
}
.fy-mapmarker__title:hover {
  color: var(--sun-600);
}
.fy-mapmarker__meta {
  display: flex;
  gap: 10px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 8px;
}
.fy-mapmarker__price {
  font-family: var(--serif);
  font-size: 16px;
  color: var(--ocean-900);
  font-weight: 500;
  margin-bottom: 10px;
}
.fy-mapmarker__cta {
  display: inline-block;
  font-family: var(--sans);
  font-size: 12px;
  color: var(--sun-600);
  text-decoration: none;
  font-weight: 500;
  border-bottom: 1px dotted var(--sun-500);
  padding-bottom: 1px;
}
.fy-mapmarker__cta:hover {
  color: var(--ocean-900);
  border-bottom-color: var(--ocean-900);
}

/* Cluster bubble — style the marker-cluster plugin's default to match brand */
.marker-cluster {
  background: rgba(13, 36, 54, 0.18);
}
.marker-cluster div {
  background: var(--ocean-900);
  color: var(--sand-50);
  font-family: var(--mono);
  font-weight: 600;
  font-size: 12px;
  letter-spacing: 0.04em;
  border: 2px solid var(--sun-500);
}
@media (max-width: 640px) {
  .fy-archive__map { height: 60vh; min-height: 380px; }
}

/* === Map city search overlay ==========================================
   Floats over top-left of the map. User types a city/town/area, hits
   Enter or clicks a suggestion, map flies there + shows yacht count
   within 50mi. */
.fy-mapsearch {
  position: absolute;
  top: 14px;
  left: 14px;
  width: 320px;
  max-width: calc(100% - 28px);
  z-index: 1000; /* above Leaflet controls */
  background: #fff;
  border-radius: var(--r-md);
  box-shadow: 0 4px 14px rgba(13, 36, 54, 0.14);
  overflow: hidden;
}
.fy-mapsearch__row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 10px;
  height: 40px;
}
.fy-mapsearch__icon {
  flex-shrink: 0;
  color: var(--ink-mute);
}
.fy-mapsearch__input {
  flex: 1;
  border: 0;
  background: transparent;
  outline: 0;
  font-family: var(--sans);
  font-size: 14px;
  color: var(--ocean-900);
  padding: 0;
  height: 40px;
}
.fy-mapsearch__input::placeholder {
  color: var(--ink-mute);
}
.fy-mapsearch__clear {
  flex-shrink: 0;
  background: var(--sand-50);
  border: 0;
  color: var(--ink-mute);
  width: 22px;
  height: 22px;
  border-radius: 50%;
  cursor: pointer;
  font-size: 16px;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all 150ms ease;
}
.fy-mapsearch__clear:hover {
  background: var(--ocean-900);
  color: var(--sand-50);
}
.fy-mapsearch__suggestions {
  border-top: 1px solid var(--line);
  max-height: 280px;
  overflow-y: auto;
}
.fy-mapsearch__suggestion {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  width: 100%;
  border: 0;
  background: #fff;
  text-align: left;
  padding: 10px 14px;
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ocean-900);
  cursor: pointer;
  transition: background 150ms ease;
  line-height: 1.35;
}
.fy-mapsearch__suggestion:hover,
.fy-mapsearch__suggestion:focus {
  background: var(--sand-50);
  outline: 0;
}
.fy-mapsearch__suggestion svg {
  flex-shrink: 0;
  margin-top: 3px;
  color: var(--ink-mute);
}
.fy-mapsearch__suggestion + .fy-mapsearch__suggestion {
  border-top: 1px solid var(--sand-100);
}
.fy-mapsearch__result {
  border-top: 1px solid var(--line);
  padding: 10px 14px;
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ocean-900);
  background: var(--sand-50);
  line-height: 1.4;
}
.fy-mapsearch__result strong {
  color: var(--ocean-900);
  font-weight: 600;
}
.fy-mapsearch__broker {
  display: block;
  margin-top: 8px;
  background: var(--ocean-900);
  color: var(--sand-50);
  border: 0;
  padding: 8px 12px;
  border-radius: var(--r-md);
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  width: 100%;
  text-align: center;
  transition: background 150ms ease;
}
.fy-mapsearch__broker:hover {
  background: var(--sun-600);
}

/* Search-result pin — distinct from yacht pins so user knows where they
   landed vs which pins are the actual yachts. */
.fy-mapsearch-pin {
  width: 28px !important;
  height: 28px !important;
  background: transparent !important;
  border: 0 !important;
}
.fy-mapsearch-pin__inner {
  display: block;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--sun-500);
  border: 3px solid #fff;
  box-shadow: 0 2px 8px rgba(217, 154, 61, 0.5), 0 0 0 5px rgba(217, 154, 61, 0.18);
  position: relative;
  animation: fyMapsearchPulse 2s ease-out infinite;
}
@keyframes fyMapsearchPulse {
  0%   { box-shadow: 0 2px 8px rgba(217, 154, 61, 0.5), 0 0 0 5px rgba(217, 154, 61, 0.18); }
  50%  { box-shadow: 0 2px 8px rgba(217, 154, 61, 0.5), 0 0 0 14px rgba(217, 154, 61, 0.06); }
  100% { box-shadow: 0 2px 8px rgba(217, 154, 61, 0.5), 0 0 0 5px rgba(217, 154, 61, 0.18); }
}

@media (max-width: 640px) {
  .fy-mapsearch {
    top: 10px;
    left: 10px;
    width: calc(100% - 20px);
  }
}

/* === Listing Disclaimer trigger + modal ===============================
   The trigger is a tiny clickable text link with an info icon. Sits on
   every yacht-display surface (single page, archive, comparison, hubs).
   Clicking opens the modal containing the full long-form disclaimer. */
.fy-disclaimer-trigger {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 0;
  border: 0;
  background: transparent;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  cursor: pointer;
  text-decoration: none;
  border-bottom: 1px dotted transparent;
  transition: all 150ms ease;
  line-height: 1.4;
}
.fy-disclaimer-trigger:hover,
.fy-disclaimer-trigger:focus {
  color: var(--ocean-900);
  border-bottom-color: var(--ocean-700);
  outline: 0;
}
.fy-disclaimer-trigger svg {
  flex-shrink: 0;
  opacity: 0.7;
}
.fy-disclaimer-trigger--block {
  display: inline-flex; /* still inline-flex but on its own line via wrapper */
}
.fy-disclaimer-trigger--inline {
  margin-left: 8px;
}

/* Wrapper for archive / comparison / hub disclaimer placement */
.fy-archive__disclaimer {
  text-align: center;
  padding: 32px 0 48px;
  border-top: 1px solid var(--line);
  margin-top: 24px;
}

/* === The modal =========================================================
   Full-screen overlay. Panel is centered, max 720px wide, has a scrollable
   body so all 25 sections fit without paginating. Backdrop click / Escape
   key / close button all dismiss. */
.fy-disclaimer-modal {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 200ms ease;
}
.fy-disclaimer-modal.is-open {
  opacity: 1;
  pointer-events: auto;
}
.fy-disclaimer-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(13, 36, 54, 0.6);
  backdrop-filter: blur(4px);
}
.fy-disclaimer-modal__panel {
  position: relative;
  width: 100%;
  max-width: 720px;
  max-height: calc(100vh - 40px);
  background: #fff;
  border-radius: var(--r-lg);
  box-shadow: 0 20px 60px rgba(13, 36, 54, 0.32);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transform: translateY(20px) scale(0.98);
  transition: transform 220ms cubic-bezier(0.32, 0.72, 0, 1);
}
.fy-disclaimer-modal.is-open .fy-disclaimer-modal__panel {
  transform: translateY(0) scale(1);
}
.fy-disclaimer-modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px 24px;
  border-bottom: 1px solid var(--line);
  flex-shrink: 0;
}
.fy-disclaimer-modal__title {
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 500;
  color: var(--ocean-900);
  letter-spacing: -0.01em;
  margin: 0;
}
.fy-disclaimer-modal__close {
  background: var(--sand-50);
  border: 0;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--ink-mute);
  transition: all 150ms ease;
  flex-shrink: 0;
}
.fy-disclaimer-modal__close:hover {
  background: var(--ocean-900);
  color: var(--sand-50);
}
.fy-disclaimer-modal__body {
  padding: 24px 28px;
  overflow-y: auto;
  flex: 1;
  font-family: var(--sans);
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--ink-soft);
}
.fy-disclaimer-modal__body:focus { outline: 0; }
.fy-disclaimer-doc h2 {
  font-family: var(--serif);
  font-size: 18px;
  font-weight: 500;
  color: var(--ocean-900);
  margin: 0 0 14px;
  line-height: 1.3;
}
.fy-disclaimer-doc h3 {
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 600;
  color: var(--ocean-900);
  margin: 22px 0 10px;
  letter-spacing: 0.01em;
}
.fy-disclaimer-doc p {
  margin: 0 0 11px;
  text-align: justify;
}
.fy-disclaimer-doc ul {
  margin: 0 0 14px;
  padding-left: 20px;
}
.fy-disclaimer-doc li {
  margin-bottom: 5px;
  font-size: 13px;
  line-height: 1.5;
}
.fy-disclaimer-doc strong {
  color: var(--ocean-900);
  font-weight: 600;
}
.fy-disclaimer-modal__foot {
  padding: 16px 24px;
  border-top: 1px solid var(--line);
  text-align: right;
  flex-shrink: 0;
  background: var(--sand-50);
}

@media (max-width: 640px) {
  .fy-disclaimer-modal { padding: 0; }
  .fy-disclaimer-modal__panel {
    max-height: 100vh;
    height: 100vh;
    border-radius: 0;
  }
  .fy-disclaimer-modal__title { font-size: 17px; }
  .fy-disclaimer-modal__body { padding: 18px 20px; font-size: 13px; }
}

/* === Active marquee chip ==============================================
   When a user clicks a Quick Pick, it gets ?engines_min=2&engines_max=2
   (or whatever) added to the URL. The PHP detects this on next render
   and adds .is-active to the matching chip. Visually pops navy so buyer
   sees their selection at a glance. */
.fy-quickpicks__chip.is-active {
  background: var(--ocean-900);
  color: #fff;
  border-color: var(--ocean-900);
  box-shadow: 0 2px 6px rgba(13, 36, 54, 0.18);
}
.fy-quickpicks__chip.is-active:hover {
  background: var(--ocean-700);
  color: #fff;
  border-color: var(--ocean-700);
}

/* === Active Quick Picks panel =========================================
   Drops down BELOW the marquee whenever ≥1 quick pick is currently
   active. Renders each applied pick as a removable chip with an X icon,
   plus a "Reset all" link that wipes every filter (not just quick picks)
   and returns to a clean /yachts/ URL. */
.fy-quickpicks__active {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  padding: 14px 20px 4px;
  border-top: 1px dashed var(--mist-200);
  margin-top: 14px;
}
.fy-quickpicks__active-label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ocean-700);
  flex-shrink: 0;
}
.fy-quickpicks__active-chips {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.fy-quickpicks__active-chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 10px 7px 14px;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  color: #fff;
  background: var(--ocean-900);
  border: 1px solid var(--ocean-900);
  border-radius: 999px;
  text-decoration: none;
  transition: all 150ms ease;
}
.fy-quickpicks__active-chip:hover {
  background: var(--sun-600);
  border-color: var(--sun-600);
  color: #fff;
  transform: translateY(-1px);
}
.fy-quickpicks__active-chip svg {
  flex-shrink: 0;
  opacity: 0.85;
}
.fy-quickpicks__active-chip:hover svg {
  opacity: 1;
}
.fy-quickpicks__reset {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 14px;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  color: var(--ocean-700);
  background: transparent;
  border: 1px dashed var(--ocean-700);
  border-radius: 999px;
  text-decoration: none;
  transition: all 150ms ease;
  margin-left: 4px;
}
.fy-quickpicks__reset:hover {
  background: var(--ocean-900);
  color: #fff;
  border-color: var(--ocean-900);
  border-style: solid;
}

@media (max-width: 640px) {
  .fy-quickpicks__active {
    padding: 12px 14px 4px;
    gap: 10px;
    flex-direction: column;
    align-items: flex-start;
  }
  .fy-quickpicks__active-chip,
  .fy-quickpicks__reset {
    font-size: 12px;
  }
}

/* === Reset all filters chip in main filterbar =========================
   Sits between the count and the chip list when ANY filter is active.
   Visually distinct from regular chips — outlined dashed style — so it
   reads as a destructive/reset action, not "another filter to apply." */
.fy-filterbar__reset {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  color: var(--ocean-700);
  background: transparent;
  border: 1px dashed var(--ocean-600);
  border-radius: 999px;
  text-decoration: none;
  transition: all 150ms ease;
  white-space: nowrap;
}
.fy-filterbar__reset:hover {
  background: var(--ocean-900);
  color: #fff;
  border-color: var(--ocean-900);
  border-style: solid;
}
.fy-filterbar__reset svg {
  flex-shrink: 0;
  opacity: 0.8;
}
.fy-filterbar__reset:hover svg {
  opacity: 1;
}

/* === Advanced Search chip in filter bar ===============================
   Distinct visual treatment so it reads as "more filters" not "another filter to apply" */
.fy-filterbar__chip--advanced {
  background: var(--ocean-900) !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  border-color: var(--ocean-900) !important;
}
.fy-filterbar__chip--advanced svg {
  color: #fff !important;
  stroke: #fff !important;
}
.fy-filterbar__chip--advanced:hover {
  background: var(--sun-600) !important;
  border-color: var(--sun-600) !important;
}

/* === Slider note (under engine hours slider) ========================== */
.fy-slider__note {
  margin: 12px 0 0;
  padding: 8px 10px;
  font-family: var(--sans);
  font-size: 11px;
  color: var(--ink-mute);
  background: var(--mist-50);
  border-radius: var(--r-sm);
  line-height: 1.4;
}

/* === Single-handle slider tweak — the engine hours slider has only
       a max handle. Make the fill always start from 0 visually. */
.fy-slider--single .fy-slider__handle--min {
  display: none !important;
}
.fy-slider--single .fy-slider__readout-min {
  color: var(--ink-quiet);
}

/* === Advanced Search Modal ============================================
   Big slide-up panel with form sections. Scrollable body. Sticky footer
   with reset / cancel / apply buttons. */
.fy-advsearch-modal {
  position: fixed;
  inset: 0;
  z-index: 9998;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 200ms ease;
}
.fy-advsearch-modal.is-open {
  opacity: 1;
  pointer-events: auto;
}
.fy-advsearch-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(13, 36, 54, 0.6);
  backdrop-filter: blur(4px);
}
.fy-advsearch-modal__panel {
  position: relative;
  width: 100%;
  max-width: 880px;
  max-height: calc(100vh - 40px);
  background: #fff;
  border-radius: var(--r-lg);
  box-shadow: 0 20px 60px rgba(13, 36, 54, 0.32);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transform: translateY(20px) scale(0.98);
  transition: transform 220ms cubic-bezier(0.32, 0.72, 0, 1);
}
.fy-advsearch-modal.is-open .fy-advsearch-modal__panel {
  transform: translateY(0) scale(1);
}
.fy-advsearch-modal__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 22px 28px 18px;
  border-bottom: 1px solid var(--line);
  flex-shrink: 0;
}
.fy-advsearch-modal__title {
  font-family: var(--serif);
  font-size: 24px;
  font-weight: 500;
  color: var(--ocean-900);
  letter-spacing: -0.015em;
  margin: 0;
}
.fy-advsearch-modal__sub {
  margin: 4px 0 0;
  color: var(--ink-mute);
  font-size: 13px;
  line-height: 1.4;
}
.fy-advsearch-modal__close {
  background: var(--mist-50);
  border: 0;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--ink-mute);
  transition: all 150ms ease;
  flex-shrink: 0;
}
.fy-advsearch-modal__close:hover {
  background: var(--ocean-900);
  color: #fff;
}
.fy-advsearch-modal__form {
  display: flex;
  flex-direction: column;
  flex: 1;
  min-height: 0; /* allow body to scroll */
}
.fy-advsearch-modal__body {
  padding: 8px 28px 24px;
  overflow-y: auto;
  flex: 1;
}
.fy-advsearch-section {
  padding: 18px 0;
  border-bottom: 1px solid var(--line-soft);
}
.fy-advsearch-section:last-child {
  border-bottom: 0;
}
.fy-advsearch-section__title {
  font-family: var(--sans);
  font-size: 14px;
  font-weight: 600;
  color: var(--ocean-900);
  margin: 0 0 12px;
  letter-spacing: 0.01em;
  display: flex;
  align-items: center;
  gap: 8px;
}
.fy-advsearch-section__note {
  margin: -4px 0 12px;
  padding: 8px 12px;
  font-family: var(--sans);
  font-size: 11.5px;
  color: var(--ink-mute);
  background: var(--mist-50);
  border-radius: var(--r-sm);
  line-height: 1.45;
}
.fy-advsearch-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 12px 16px;
}
.fy-advsearch-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.fy-advsearch-field__label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ocean-700);
  font-weight: 500;
}
.fy-advsearch-field__hint {
  font-family: var(--sans);
  font-size: 11px;
  color: var(--ink-quiet);
  margin-top: 1px;
}
.fy-advsearch-field input,
.fy-advsearch-field select {
  padding: 9px 12px;
  font-family: var(--sans);
  font-size: 13.5px;
  color: var(--ocean-900);
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  transition: border-color 150ms ease, box-shadow 150ms ease;
  width: 100%;
  box-sizing: border-box;
  appearance: none;
  -webkit-appearance: none;
}
.fy-advsearch-field select {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%230d2436' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
  padding-right: 30px;
}
.fy-advsearch-field input:focus,
.fy-advsearch-field select:focus {
  outline: 0;
  border-color: var(--ocean-700);
  box-shadow: 0 0 0 2px rgba(28, 70, 99, 0.12);
}
.fy-advsearch-field input::placeholder {
  color: var(--ink-quiet);
}

.fy-advsearch-modal__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 28px;
  border-top: 1px solid var(--line);
  background: var(--mist-50);
  flex-shrink: 0;
}
.fy-advsearch-modal__foot-right {
  display: flex;
  gap: 10px;
}
.fy-advsearch-modal__reset {
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ink-mute);
  text-decoration: none;
  border-bottom: 1px dotted var(--ink-mute);
  transition: color 150ms ease;
}
.fy-advsearch-modal__reset:hover {
  color: var(--ocean-900);
  border-bottom-color: var(--ocean-900);
}

@media (max-width: 720px) {
  .fy-advsearch-modal { padding: 0; }
  .fy-advsearch-modal__panel {
    max-height: 100vh;
    height: 100vh;
    border-radius: 0;
  }
  .fy-advsearch-modal__title { font-size: 19px; }
  .fy-advsearch-modal__head { padding: 18px 18px 14px; }
  .fy-advsearch-modal__body { padding: 4px 18px 20px; }
  .fy-advsearch-modal__foot { padding: 14px 18px; }
  .fy-advsearch-grid { grid-template-columns: 1fr 1fr; gap: 10px 12px; }
}
@media (max-width: 480px) {
  .fy-advsearch-grid { grid-template-columns: 1fr; }
}

/* === Hero gallery — clickable when lightbox available =================== */
.fy-gallery--has-lightbox {
  cursor: zoom-in;
  position: relative;
}
.fy-gallery--has-lightbox:hover img {
  filter: brightness(0.97);
}
.fy-gallery--has-lightbox:focus {
  outline: 2px solid var(--ocean-700);
  outline-offset: 4px;
}
.fy-gallery__count {
  position: absolute;
  bottom: 16px;
  right: 16px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 12px;
  background: rgba(13, 36, 54, 0.78);
  color: #fff;
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.02em;
  backdrop-filter: blur(6px);
  pointer-events: none;
}

/* === Lightbox =========================================================== */
.fy-lightbox {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background: rgba(8, 18, 28, 0.94);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 200ms ease;
}
.fy-lightbox.is-open {
  opacity: 1;
  pointer-events: auto;
}
.fy-lightbox__stage {
  position: relative;
  width: 100%;
  height: 100%;
  max-width: 1400px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px 80px;
  box-sizing: border-box;
}
.fy-lightbox__img {
  max-width: 100%;
  max-height: calc(100vh - 64px);
  object-fit: contain;
  display: block;
  user-select: none;
  -webkit-user-drag: none;
}
.fy-lightbox__counter {
  position: absolute;
  bottom: 18px;
  left: 50%;
  transform: translateX(-50%);
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.7);
  pointer-events: none;
}
.fy-lightbox__close,
.fy-lightbox__nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 48px;
  height: 48px;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  color: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 150ms ease, transform 150ms ease;
  /* z-index 2 — above .fy-lightbox__stage (which paints on top by default
     because it's later in DOM order). Without this, the X is unclickable
     wherever the stage's transparent area covers it. */
  z-index: 2;
}
.fy-lightbox__close {
  top: 24px;
  right: 24px;
  transform: none;
  width: 42px;
  height: 42px;
  z-index: 3; /* extra-safe — close should NEVER be intercepted */
}
.fy-lightbox__nav:hover,
.fy-lightbox__close:hover {
  background: rgba(255, 255, 255, 0.22);
}
.fy-lightbox__nav--prev { left: 16px; }
.fy-lightbox__nav--next { right: 16px; }

@media (max-width: 768px) {
  .fy-lightbox__stage { padding: 16px 8px 56px; }
  .fy-lightbox__nav { width: 40px; height: 40px; }
  .fy-lightbox__nav--prev { left: 6px; }
  .fy-lightbox__nav--next { right: 6px; }
  .fy-lightbox__close { top: 16px; right: 16px; }
}

/* === Brokerage attribution above similar listings ===================== */
.fy-listing__brokerage-attribution {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  margin: 0 0 28px;
  background: var(--mist-50);
  border: 1px solid var(--line);
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 12.5px;
  color: var(--ocean-700);
  line-height: 1;
}
.fy-listing__brokerage-attribution svg {
  color: var(--ocean-700);
  flex-shrink: 0;
}
.fy-listing__brokerage-attribution span {
  letter-spacing: 0.01em;
}

/* === Manual prev/next arrows on yacht cards =========================== */
/* Lets users browse the hover walkthrough at their own pace.
   Hidden by default; appear on card hover (desktop) or always (touch). */
.fy-card__walk-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 50%;
  background: rgba(13, 36, 54, 0.6);
  color: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  z-index: 3;
  opacity: 0;
  transition: opacity 200ms ease, background 150ms ease;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.fy-card__walk-arrow:hover {
  background: rgba(13, 36, 54, 0.85);
}
.fy-card__walk-arrow:focus {
  outline: 2px solid var(--sand-50);
  outline-offset: 2px;
}
.fy-card__walk-arrow--prev { left: 8px; }
.fy-card__walk-arrow--next { right: 8px; }

/* Reveal arrows on card hover */
.fy-card:hover .fy-card__walk-arrow {
  opacity: 1;
}

/* On touch devices (no hover state), arrows always visible at lower opacity */
@media (hover: none) {
  .fy-card__walk-arrow {
    opacity: 0.85;
  }
}

/* Smaller arrows on small cards */
@media (max-width: 768px) {
  .fy-card__walk-arrow {
    width: 28px;
    height: 28px;
  }
  .fy-card__walk-arrow--prev { left: 6px; }
  .fy-card__walk-arrow--next { right: 6px; }
}

/* === Advanced search checkbox style ===================================
   Used in the Listing & condition section for binary toggles. */
.fy-advsearch-checkbox {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 11px 12px;
  background: var(--mist-50);
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  cursor: pointer;
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ocean-900);
  transition: all 150ms ease;
}
.fy-advsearch-checkbox:hover {
  background: var(--mist-100);
  border-color: var(--ocean-700);
}
.fy-advsearch-checkbox input[type="checkbox"] {
  width: 16px;
  height: 16px;
  margin: 0;
  cursor: pointer;
  accent-color: var(--ocean-900);
}
.fy-advsearch-checkbox span {
  flex: 1;
  line-height: 1.3;
}

/* === "Want to get even more technical?" CTA in advanced search modal === */
.fy-advsearch-section--cta {
  border-bottom: 0 !important;
  padding-top: 24px !important;
}
.fy-advsearch-cta {
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 20px 22px;
  background: linear-gradient(135deg, var(--ocean-900) 0%, var(--ocean-800, #133349) 100%);
  border-radius: var(--r-md);
  color: #fff;
}
.fy-advsearch-cta__body {
  flex: 1;
  min-width: 0;
}
.fy-advsearch-cta__title {
  font-family: var(--serif);
  font-size: 19px;
  font-weight: 500;
  margin: 0 0 4px;
  color: #fff;
  letter-spacing: -0.01em;
  line-height: 1.2;
}
.fy-advsearch-cta__sub {
  font-family: var(--sans);
  font-size: 13px;
  color: rgba(255, 255, 255, 0.78);
  margin: 0;
  line-height: 1.45;
}
.fy-advsearch-cta__btn {
  flex-shrink: 0;
  background: var(--sun-500) !important;
  color: var(--ocean-900) !important;
  border-color: var(--sun-500) !important;
}
.fy-advsearch-cta__btn:hover {
  background: var(--sun-600) !important;
  border-color: var(--sun-600) !important;
}
.fy-advsearch-cta__btn svg {
  color: var(--ocean-900) !important;
  stroke: var(--ocean-900) !important;
}

@media (max-width: 580px) {
  .fy-advsearch-cta {
    flex-direction: column;
    align-items: stretch;
    text-align: center;
  }
  .fy-advsearch-cta__btn {
    justify-content: center;
  }
}

/* === Hero gallery — inline navigation arrows + thumb strip ============ */

/* Inline arrows on the hero photo (separate from lightbox arrows) */
.fy-gallery__inline-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  border: 0;
  border-radius: 50%;
  background: rgba(13, 36, 54, 0.7);
  color: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 150ms ease, transform 150ms ease;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  opacity: 0;
  z-index: 3;
}
.fy-gallery--has-lightbox:hover .fy-gallery__inline-arrow,
.fy-gallery--has-lightbox:focus-within .fy-gallery__inline-arrow {
  opacity: 1;
}
.fy-gallery__inline-arrow:hover {
  background: rgba(13, 36, 54, 0.92);
  transform: translateY(-50%) scale(1.06);
}
.fy-gallery__inline-arrow--prev { left: 16px; }
.fy-gallery__inline-arrow--next { right: 16px; }

/* On touch devices, arrows always visible since there's no hover */
@media (hover: none) {
  .fy-gallery__inline-arrow {
    opacity: 0.85;
  }
}

/* Larger "X / Y" pill replacing the small "82 photos" badge */
.fy-gallery__viewall {
  position: absolute;
  bottom: 16px;
  right: 16px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 9px 14px;
  background: rgba(13, 36, 54, 0.8);
  color: #fff;
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.01em;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  pointer-events: none;
  z-index: 2;
}

/* Thumbnail strip below the hero */
.fy-gallery-strip {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: 6px;
  margin-top: 8px;
}
.fy-gallery-strip__thumb {
  position: relative;
  aspect-ratio: 4 / 3;
  border: 0;
  border-radius: var(--r-sm);
  overflow: hidden;
  cursor: pointer;
  padding: 0;
  background: var(--ocean-100);
  transition: transform 200ms ease, box-shadow 200ms ease;
}
.fy-gallery-strip__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: opacity 150ms ease;
}
.fy-gallery-strip__thumb:hover {
  transform: translateY(-2px);
}
.fy-gallery-strip__thumb:hover img {
  opacity: 0.9;
}
.fy-gallery-strip__thumb.is-active {
  outline: 2px solid var(--ocean-900);
  outline-offset: 2px;
}

/* "+74 View all" overlay on the last thumb when there are more photos */
.fy-gallery-strip__thumb--more img {
  opacity: 0.45;
}
.fy-gallery-strip__more-overlay {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: rgba(13, 36, 54, 0.55);
  color: #fff;
  font-family: var(--sans);
  letter-spacing: 0.02em;
  gap: 1px;
}
.fy-gallery-strip__more-count {
  font-size: 18px;
  font-weight: 600;
}
.fy-gallery-strip__more-label {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  font-weight: 500;
  opacity: 0.95;
}

@media (max-width: 980px) {
  .fy-gallery-strip { grid-template-columns: repeat(6, 1fr); }
  .fy-gallery-strip__thumb:nth-child(7),
  .fy-gallery-strip__thumb:nth-child(8) { display: none; }
}
@media (max-width: 600px) {
  .fy-gallery-strip { grid-template-columns: repeat(4, 1fr); gap: 4px; }
  .fy-gallery-strip__thumb:nth-child(5),
  .fy-gallery-strip__thumb:nth-child(6) { display: none; }
  .fy-gallery__inline-arrow { width: 38px; height: 38px; }
  .fy-gallery__inline-arrow--prev { left: 8px; }
  .fy-gallery__inline-arrow--next { right: 8px; }
  .fy-gallery__viewall { bottom: 12px; right: 12px; padding: 7px 11px; font-size: 12px; }
}

/* === Classic search autocomplete ===================================== */
/* Replaces the old AI search runtime. Dropdown shows yachts, builders,
   and locations matching the input. Recent searches stored locally. */

.fy-classic-search {
  position: relative;
}
.fy-classic-search__input {
  width: 100%;
  font-family: var(--serif);
  font-size: 18px;
}

/* The dropdown sits absolutely below the input */
.fy-classic-search__dropdown {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  right: 0;
  max-height: 480px;
  overflow-y: auto;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 12px 40px rgba(0, 30, 60, 0.18), 0 4px 12px rgba(0, 0, 0, 0.08);
  border: 1px solid rgba(0, 30, 60, 0.06);
  z-index: 100;
  padding: 8px;
}
.fy-classic-search__dropdown[hidden] { display: none; }

.fy-cs-section {
  padding: 6px 0;
}
.fy-cs-section + .fy-cs-section {
  border-top: 1px solid var(--line);
  margin-top: 4px;
  padding-top: 10px;
}
.fy-cs-section__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 12px 4px;
}
.fy-cs-section__title {
  font-family: var(--mono);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--ink-500, #6b7780);
  padding: 6px 12px 4px;
  display: block;
}
.fy-cs-section__head .fy-cs-section__title {
  padding: 0;
}
.fy-cs-section__clear {
  background: none;
  border: 0;
  color: var(--ocean-700);
  font-family: var(--sans);
  font-size: 11px;
  cursor: pointer;
  padding: 2px 6px;
  border-radius: 4px;
}
.fy-cs-section__clear:hover {
  background: var(--mist-50);
}

/* Result row */
.fy-cs-row {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 9px 12px;
  border: 0;
  background: transparent;
  text-align: left;
  text-decoration: none;
  color: var(--ocean-900);
  font-family: var(--sans);
  font-size: 14px;
  cursor: pointer;
  border-radius: 6px;
  transition: background 100ms ease;
}
.fy-cs-row:hover,
.fy-cs-row.is-active {
  background: var(--mist-50);
}
.fy-cs-row__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  flex-shrink: 0;
  color: var(--ocean-700);
}
.fy-cs-row__thumb {
  width: 44px;
  height: 32px;
  flex-shrink: 0;
  background-size: cover;
  background-position: center;
  background-color: var(--ocean-100);
  border-radius: 4px;
}
.fy-cs-row__thumb--empty {
  background: linear-gradient(180deg, var(--ocean-100), var(--sand-200));
}
.fy-cs-row__body {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 1px;
}
.fy-cs-row__label {
  font-weight: 500;
  color: var(--ocean-900);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fy-cs-row__label mark {
  background: rgba(218, 165, 20, 0.22);
  color: inherit;
  padding: 0 2px;
  border-radius: 2px;
}
.fy-cs-row__meta {
  font-size: 12px;
  color: var(--ink-500, #6b7780);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* "Search descriptions for X" submit row at bottom */
.fy-cs-submit {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 11px 12px;
  margin-top: 6px;
  border: 0;
  border-top: 1px solid var(--line);
  background: transparent;
  text-align: left;
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ocean-900);
  cursor: pointer;
  border-radius: 0;
  transition: background 100ms ease;
}
.fy-cs-submit:hover,
.fy-cs-submit.is-active {
  background: var(--mist-50);
}
.fy-cs-submit > svg:first-child { color: var(--ocean-700); flex-shrink: 0; }
.fy-cs-submit > span { flex: 1; }
.fy-cs-submit > svg:last-child { color: var(--ocean-700); flex-shrink: 0; }
.fy-cs-submit strong { font-weight: 600; }

/* Empty state when no matches */
.fy-cs-empty {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 16px 14px;
  font-family: var(--sans);
}
.fy-cs-empty strong {
  color: var(--ocean-900);
  font-size: 14px;
  font-weight: 500;
}
.fy-cs-empty span {
  color: var(--ink-500, #6b7780);
  font-size: 12.5px;
}

/* Quick-pick chips below hero search */
.fy-hero__quick-picks {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  margin-top: 18px;
}
.fy-hero__chip {
  display: inline-flex;
  align-items: center;
  padding: 7px 14px;
  background: rgba(255, 255, 255, 0.14);
  color: rgba(255, 255, 255, 0.95);
  border: 1px solid rgba(255, 255, 255, 0.22);
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 13px;
  text-decoration: none;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  transition: background 150ms ease, transform 150ms ease;
}
.fy-hero__chip:hover {
  background: rgba(255, 255, 255, 0.24);
  transform: translateY(-1px);
}

@media (max-width: 600px) {
  .fy-classic-search__dropdown {
    max-height: 60vh;
  }
  .fy-cs-row__thumb {
    width: 40px;
    height: 28px;
  }
  .fy-hero__quick-picks {
    margin-top: 14px;
  }
}

/* === Search dropdown enhancements ====================================== */

/* Voice search mic button — sits inside the input area on the right */
.fy-classic-search {
  position: relative;
}
.fy-classic-search__mic {
  position: absolute;
  right: 110px; /* leave space for the Search button */
  top: 50%;
  transform: translateY(-50%);
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--ocean-700);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 150ms ease, color 150ms ease;
  z-index: 2;
}
.fy-classic-search__mic:hover {
  background: rgba(13, 36, 54, 0.06);
}
.fy-classic-search__mic.is-listening {
  background: rgba(220, 50, 50, 0.12);
  color: #c92a2a;
  animation: fy-mic-pulse 1.2s ease-in-out infinite;
}
@keyframes fy-mic-pulse {
  0%, 100% { transform: translateY(-50%) scale(1); }
  50%      { transform: translateY(-50%) scale(1.08); }
}

/* Hero search has dark background — invert mic colors */
.fy-hero__search .fy-classic-search__mic {
  color: rgba(255, 255, 255, 0.85);
}
.fy-hero__search .fy-classic-search__mic:hover {
  background: rgba(255, 255, 255, 0.15);
}
.fy-hero__search .fy-classic-search__mic.is-listening {
  background: rgba(255, 255, 255, 0.2);
  color: #ffaaaa;
}

/* Section heading with right-aligned count */
.fy-cs-section__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.fy-cs-section__count {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  color: var(--ink-500, #6b7780);
  padding: 0 12px;
  text-transform: uppercase;
}

/* "See all N matching yachts" row — slightly different style */
.fy-cs-row--seeall {
  font-weight: 500;
  color: var(--ocean-700);
}
.fy-cs-row--seeall:hover {
  color: var(--ocean-900);
}

/* Did-you-mean suggestion box */
.fy-cs-suggest {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 12px 14px;
  margin: 4px 8px 8px;
  background: rgba(218, 165, 20, 0.08);
  border: 1px solid rgba(218, 165, 20, 0.32);
  border-radius: 8px;
  text-decoration: none;
  color: var(--ocean-900);
  font-family: var(--sans);
  font-size: 13.5px;
  transition: background 150ms ease;
}
.fy-cs-suggest:hover {
  background: rgba(218, 165, 20, 0.14);
}
.fy-cs-suggest svg {
  color: #b88a08;
  flex-shrink: 0;
}
.fy-cs-suggest strong {
  font-weight: 600;
  color: var(--ocean-900);
}

/* === Mobile full-screen search overlay ================================
   On small screens, when the input has focus, the entire viewport
   becomes the search interface — header collapses, results fill the
   screen. This mirrors how Apple, Booking, and Airbnb handle search
   on phones: more space, no thumb-stretch to dismiss.
*/
@media (max-width: 720px) {
  .fy-classic-search:focus-within .fy-classic-search__dropdown {
    /* Pin to viewport edges */
    position: fixed;
    inset: 0;
    top: 60px; /* leave room for input bar at top */
    max-height: none;
    height: calc(100vh - 60px);
    border-radius: 0;
    box-shadow: none;
    border: 0;
    border-top: 1px solid var(--line);
    z-index: 9998;
    padding: 12px 8px 24px;
    overflow-y: auto;
  }
  /* Lift the search input above the rest of the page on focus */
  .fy-classic-search:focus-within {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 9999;
    padding: 12px;
    background: #fff;
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
  }
  /* Add a "Cancel" button for closing the overlay */
  .fy-classic-search:focus-within::after {
    content: '';
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.3);
    z-index: -1;
    animation: fy-overlay-fade 200ms ease;
  }
  @keyframes fy-overlay-fade {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
  /* Cancel/back button on mobile overlay */
  .fy-classic-search:focus-within .fy-classic-search__mic {
    right: 12px;
  }
  .fy-classic-search:focus-within .btn,
  .fy-classic-search:focus-within button[type="submit"] {
    display: none; /* hide search button — Enter/tap on row is the action */
  }
}

/* Visible focus state for keyboard navigation */
.fy-classic-search__input:focus {
  outline: none;
}
.fy-classic-search__input:focus-visible {
  outline: 2px solid var(--ocean-700);
  outline-offset: 2px;
}

/* === Search-term highlighting in card titles ========================= */
.fy-card__hl {
  background: rgba(218, 165, 20, 0.32);
  color: inherit;
  padding: 0 2px;
  border-radius: 2px;
  font-weight: inherit;
}

/* === Smart "no results" suggestions ================================== */
.fy-archive__empty-suggest {
  margin-top: 32px;
  padding: 18px 22px;
  background: var(--mist-50);
  border-radius: 10px;
  border: 1px solid var(--line);
  max-width: 540px;
  margin-left: auto;
  margin-right: auto;
  text-align: left;
}
.fy-archive__empty-suggest-title {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 10px;
}
.fy-archive__empty-suggest-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 6px;
  text-decoration: none;
  color: var(--ocean-900);
  font-family: var(--sans);
  font-size: 14px;
  transition: background 100ms ease;
}
.fy-archive__empty-suggest-row:hover {
  background: rgba(13, 36, 54, 0.06);
}
.fy-archive__empty-suggest-row svg {
  color: var(--ocean-700);
  flex-shrink: 0;
}

/* === Clear button (×) inside search input ============================ */
.fy-classic-search__clear {
  position: absolute;
  right: 158px; /* sits left of mic button */
  top: 50%;
  transform: translateY(-50%);
  width: 26px;
  height: 26px;
  border: 0;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.08);
  color: rgba(0, 0, 0, 0.6);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 120ms ease;
  z-index: 2;
}
.fy-classic-search__clear:hover {
  background: rgba(0, 0, 0, 0.18);
  color: #000;
}
/* Hero (dark bg) variant */
.fy-hero__search .fy-classic-search__clear {
  background: rgba(255, 255, 255, 0.18);
  color: rgba(255, 255, 255, 0.85);
}
.fy-hero__search .fy-classic-search__clear:hover {
  background: rgba(255, 255, 255, 0.28);
  color: #fff;
}
/* If voice mic isn't injected (browser doesn't support it),
   shift clear button to where mic would have been */
.fy-classic-search:not(:has(.fy-classic-search__mic)) .fy-classic-search__clear {
  right: 110px;
}

/* === Filter dropdown options with count badges ======================== */
.fy-filterbar__opt {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.fy-filterbar__opt-label {
  flex: 1;
  text-align: left;
}
.fy-filterbar__opt-count {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--ink-mute);
  padding: 2px 7px;
  background: var(--mist-50);
  border-radius: 999px;
  flex-shrink: 0;
  font-weight: 500;
}
.fy-filterbar__opt:hover .fy-filterbar__opt-count {
  background: rgba(13, 36, 54, 0.12);
  color: var(--ocean-900);
}
.fy-filterbar__opt.is-active .fy-filterbar__opt-count {
  background: var(--ocean-900);
  color: #fff;
}

/* === Save current search button ====================================== */
.fy-filterbar__save-search {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 12px;
  color: var(--ocean-700);
  cursor: pointer;
  margin-left: 12px;
  transition: all 150ms ease;
}
.fy-filterbar__save-search:hover {
  background: var(--mist-50);
  border-color: var(--ocean-700);
  color: var(--ocean-900);
}
.fy-filterbar__save-search.is-saved {
  background: var(--ocean-900);
  border-color: var(--ocean-900);
  color: #fff;
}
.fy-filterbar__save-search.is-saved svg {
  fill: currentColor;
  stroke: currentColor;
}

/* === Saved searches strip on saved page ============================== */
.fy-saved-searches {
  margin: 0 0 32px;
  padding: 22px 24px;
  background: var(--mist-50);
  border-radius: 10px;
  border: 1px solid var(--line);
}
.fy-saved-searches__title {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin: 0 0 12px;
  font-weight: 500;
}
.fy-saved-searches__list {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.fy-saved-searches__row {
  display: flex;
  align-items: center;
  background: #fff;
  border-radius: 6px;
  border: 1px solid var(--line);
  transition: border-color 150ms ease;
}
.fy-saved-searches__row:hover {
  border-color: var(--ocean-700);
}
.fy-saved-searches__link {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 14px;
  text-decoration: none;
  color: var(--ocean-900);
  font-family: var(--sans);
  font-size: 14px;
}
.fy-saved-searches__link svg {
  color: var(--ocean-700);
  flex-shrink: 0;
}
.fy-saved-searches__remove {
  border: 0;
  background: transparent;
  color: var(--ink-mute);
  padding: 11px 14px;
  cursor: pointer;
  border-left: 1px solid var(--line);
  border-radius: 0 6px 6px 0;
  transition: background 150ms ease, color 150ms ease;
}
.fy-saved-searches__remove:hover {
  background: rgba(220, 50, 50, 0.08);
  color: #c92a2a;
}

/* === Map / Grid view smooth transitions ============================== */
#fy-archive-grid-wrap,
#fy-archive-map-wrap {
  transition: opacity 200ms ease;
}
#fy-archive-grid-wrap[style*="display: none"],
#fy-archive-map-wrap[style*="display: none"] {
  opacity: 0;
}

/* === Skeleton loading shimmer ========================================= */
.fy-skel {
  background: linear-gradient(90deg, var(--mist-50) 0%, var(--mist-100) 50%, var(--mist-50) 100%);
  background-size: 200% 100%;
  animation: fy-skel-shimmer 1.4s ease-in-out infinite;
  border-radius: 4px;
}
.fy-card--skeleton {
  pointer-events: none;
  cursor: default;
}
.fy-card--skeleton .fy-card__media.fy-skel {
  height: 280px;
  border-radius: 8px;
}
.fy-skel--line {
  display: block;
  height: 14px;
}
@keyframes fy-skel-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
@media (prefers-reduced-motion: reduce) {
  .fy-skel { animation: none; }
}

/* === Article cover placeholder ====================================== */
/* For journal cards lacking a cover photo, render a brand-tinted
   gradient + a small wordmark so the layout doesn't have empty boxes. */
.fy-journal-card__img--placeholder {
  background: linear-gradient(135deg, var(--ocean-700) 0%, var(--ocean-900) 100%);
  position: relative;
}
.fy-journal-card__img--placeholder::after {
  content: 'FLY YACHTS';
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  color: rgba(255, 255, 255, 0.4);
  text-transform: uppercase;
}

/* === Similar / related yachts grid =====================================
   Templates use BEM-style `.fy-grid--3` and `.fy-grid--cards` but the
   original CSS only declared `.fy-grid-3`. That mismatch is why related
   yacht cards rendered single-column at full width. Aliases fix that.
*/
.fy-grid {
  display: grid;
  gap: 24px;
}
.fy-grid--3 {
  grid-template-columns: repeat(3, 1fr);
}
.fy-grid--cards {
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}
@media (max-width: 900px) {
  .fy-grid--3 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  .fy-grid--3 { grid-template-columns: 1fr; }
}

/* Tighten card sizes when used in the related-yachts sections — these
   contexts don't need the full-bleed 320px tall hero photo of the main
   archive grid. Cards stay readable but don't dominate. */
.fy-listing__brokerage-attribution + section .fy-card__media,
.fy-grid--3 .fy-card__media {
  height: 220px;
}
@media (max-width: 700px) {
  .fy-grid--3 .fy-card__media { height: 200px; }
}

/* === Collapsible original-listing description ========================
   <details> based, no JS needed. Closed by default, opens on click.
   Looks like a styled card so it doesn't compete with the AI body. */
.fy-original-desc {
  margin-top: 32px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--mist-50);
  overflow: hidden;
}
.fy-original-desc__summary {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  cursor: pointer;
  list-style: none;
  user-select: none;
  transition: background 120ms ease;
}
.fy-original-desc__summary::-webkit-details-marker { display: none; }
.fy-original-desc__summary:hover {
  background: rgba(13, 36, 54, 0.04);
}
.fy-original-desc__label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ocean-900);
  font-weight: 500;
}
.fy-original-desc__hint {
  flex: 1;
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ink-mute);
  font-style: italic;
}
.fy-original-desc__chev {
  color: var(--ocean-700);
  transition: transform 200ms ease;
  flex-shrink: 0;
}
.fy-original-desc[open] .fy-original-desc__chev {
  transform: rotate(180deg);
}
.fy-original-desc__body {
  padding: 8px 18px 18px;
  font-family: var(--sans);
  font-size: 14px;
  line-height: 1.7;
  color: var(--ink-mute);
  border-top: 1px solid var(--line);
  background: #fff;
}
.fy-original-desc__body p {
  margin: 12px 0;
}

/* === Brokerage attribution (legal) ====================================
   Always visible. Above similar yachts. Plus the fine-print disclaimer
   at the page bottom. Prominent enough to be unmissable. */
.fy-listing__brokerage-attribution {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 20px;
  margin: 0 0 32px;
  background: var(--mist-50);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-family: var(--sans);
  font-size: 14px;
  color: var(--ocean-900);
  line-height: 1.5;
}
.fy-listing__brokerage-attribution svg {
  color: var(--ocean-700);
  flex-shrink: 0;
}

/* =============================================================
   1.0.92 — Mobile fixes ONLY for the cropping bug on single-yacht.
   The Our Take callout was rendering at intrinsic content width
   (cut off mid-word on the right edge) because the body grid's
   `1fr` track had min-width: auto by default. minmax(0, 1fr)
   gives it a 0 floor so content wraps within the viewport.
   ============================================================= */
@media (max-width: 768px) {
  .fy-listing__body {
    grid-template-columns: minmax(0, 1fr) !important;
    min-width: 0;
  }
  .fy-listing__main,
  .fy-listing__body > div,
  .fy-listing__body > article {
    min-width: 0;
    max-width: 100%;
  }
  .fy-our-take {
    min-width: 0;
    max-width: 100%;
    overflow-wrap: anywhere;
    word-wrap: break-word;
  }
  .fy-our-take__body {
    min-width: 0;
    max-width: 100%;
  }
  .fy-our-take__body p {
    overflow-wrap: anywhere;
    word-wrap: break-word;
  }
  .fy-listing__overview {
    min-width: 0;
    max-width: 100%;
    overflow-wrap: anywhere;
    word-wrap: break-word;
  }
}

/* =============================================================
   1.0.93 — Brokerage disclaimer moved up from bottom of page.
   Replaces the old blue "Listing held by..." card with the full
   legal-form disclaimer that names the centrally-listing broker.
   Same text as the old bottom disclaimer — just one position now.
   ============================================================= */
.fy-listing__mls-disclaimer--inline {
  max-width: 100%;
  margin: 8px 0 32px;
  padding: 0;
  text-align: left;
}
.fy-listing__mls-disclaimer--inline p {
  max-width: 720px;
  text-align: left;
}

/* Mobile fixes — Our Take cropping + body grid foot-gun fix.
   Mobile only. Desktop untouched. */
@media (max-width: 768px) {
  .fy-listing__body {
    grid-template-columns: minmax(0, 1fr) !important;
    min-width: 0;
  }
  .fy-listing__main,
  .fy-listing__body > div,
  .fy-listing__body > article {
    min-width: 0;
    max-width: 100%;
  }
  .fy-our-take {
    min-width: 0;
    max-width: 100%;
    overflow-wrap: anywhere;
    word-wrap: break-word;
  }
  .fy-our-take__body {
    min-width: 0;
    max-width: 100%;
  }
  .fy-our-take__body p {
    overflow-wrap: anywhere;
    word-wrap: break-word;
  }
  .fy-listing__overview {
    min-width: 0;
    max-width: 100%;
    overflow-wrap: anywhere;
    word-wrap: break-word;
  }
}

/* =============================================================
   1.0.94 — /speak-with-a-broker/ contact page mobile fixes.
   Mobile only. Outer split grid uses minmax(0, 1fr) so prose
   doesn't crop on the right. Form box capped at viewport width.
   Inner Email/Phone row stacks to single column so "Phone
   (optional)" placeholder doesn't trail off the edge.
   ============================================================= */
@media (max-width: 768px) {
  .fy-contact-grid {
    grid-template-columns: minmax(0, 1fr) !important;
    min-width: 0;
  }
  .fy-contact-grid > div,
  .fy-contact-grid > section,
  .fy-contact-grid > article {
    min-width: 0;
    max-width: 100%;
  }
  #fy-contact-form {
    max-width: 100%;
    box-sizing: border-box;
  }
  #fy-contact-form > div {
    grid-template-columns: minmax(0, 1fr) !important;
  }
  #fy-contact-form input,
  #fy-contact-form select,
  #fy-contact-form textarea {
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }
  .fy-contact-grid p,
  .fy-contact-grid h1,
  .fy-contact-grid h2 {
    overflow-wrap: anywhere;
    word-wrap: break-word;
    max-width: 100%;
  }
}

/* =============================================================
   1.0.96 — Chip marquee enabling CSS
   =============================================================
   The JS in fly-yachts-marquee.js drives scrollLeft on the
   filter chip strip for a smooth continuous left marquee at
   ~15 px/sec. Pauses on touch.
   Jump To pills are NOT affected — left as native layout.
   ============================================================= */
@media (max-width: 768px) {
  .fy-filterbar__chips {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    flex-wrap: nowrap !important;
    min-width: 0;
    width: 100%;
    /* Disable scroll-snap so JS-driven scroll isn't fighting it */
    scroll-snap-type: none;
  }
  .fy-filterbar__chips::-webkit-scrollbar { display: none; }
}

/* =============================================================
   1.0.98 — Front-page spacing + Sell CTA color refresh
   =============================================================
   1. Tightens .fy-section vertical padding from 110px to 72px.
      The big gap between the listings row and the next section
      was 220px of combined padding — felt empty rather than
      editorial. 72px each side reads as confident spacing
      without empty real estate.
   2. Sell CTA section flips from dark navy to cream/sand so it
      no longer visually merges with the dark navy footer below.
      Black "Get a valuation" button stays as the focal point.
      Light → light → dark gives the page a clear rhythm.
   3. Mobile already had 64px on .fy-sell-cta — keep that.
   ============================================================= */
.fy-section { padding: 72px 0; }

.fy-sell-cta {
  background: var(--sand-50);
  color: var(--ocean-900);
  padding: 80px 0;
  border-top: 1px solid var(--line);
}
.fy-sell-cta__title {
  color: var(--ocean-900);
}
/* The Sell CTA's "Get a valuation" button uses .btn-sun (yellow)
   by default, which reads well on dark. On a cream background
   it loses contrast — flip it to .btn-primary (dark) styling
   so the button becomes the section's focal point. */
.fy-sell-cta .btn-sun {
  background: var(--ocean-900);
  color: var(--sand-50);
  border-color: var(--ocean-900);
}
.fy-sell-cta .btn-sun:hover {
  background: #000;
  border-color: #000;
}

/* =============================================================
   1.0.99 — Tighter section spacing + Sell CTA gets a photo bg
   =============================================================
   1. .fy-section padding cut from 72px to 32px. The gap between
      the listings and "We are the experts" felt empty even at
      72px because both sections share the same cream background
      — without a color break, vertical padding reads as void.
   2. Sell CTA flips back to dark — but as a photo background
      (default: an ocean/coastal photo) with a dark navy veil
      overlay for legibility. Yellow "Get a valuation" button
      pops against it. Photo gives the section visual identity
      it lacked when it was just flat color matching the footer.
   3. The 1.0.98 cream Sell CTA rules below are explicitly
      reverted — needed because they would conflict with the new
      dark-photo styling.
   ============================================================= */
.fy-section { padding: 32px 0; }

.fy-sell-cta {
  position: relative;
  text-align: center;
  padding: 120px 0;
  background: var(--ocean-900);
  color: var(--sand-50);
  border-top: 1px solid var(--line);
  overflow: hidden;
  isolation: isolate;
}
.fy-sell-cta__bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  z-index: 1;
}
/* Dark navy gradient overlay — top is slightly lighter than bottom
   for visual depth. Strong enough that white serif text stays fully
   legible against any photo. */
.fy-sell-cta__veil {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg,
    rgba(13, 36, 54, 0.65) 0%,
    rgba(13, 36, 54, 0.85) 100%);
  z-index: 2;
}
.fy-sell-cta__inner {
  position: relative;
  z-index: 3;
}
.fy-sell-cta__title {
  color: var(--sand-50);
  text-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
}
/* Revert 1.0.98's button override — yellow Sun button reads beautifully
   on the dark ocean photo, which is the original design intent. */
.fy-sell-cta .btn-sun {
  background: var(--sun-500);
  color: var(--ocean-900);
  border-color: var(--sun-500);
}
.fy-sell-cta .btn-sun:hover {
  background: var(--sun-600);
  border-color: var(--sun-600);
}

/* =============================================================
   1.0.100 — Save toast + storage hardening
   =============================================================
   Toast appears bottom-center when user saves/unsaves a yacht.
   Confirms the action took effect — also lets us surface a
   storage-failure message if localStorage write failed (private
   browsing, full quota, etc) so saves don't silently vanish.
   ============================================================= */
.fy-save-toast {
  position: fixed;
  left: 50%;
  bottom: 28px;
  transform: translateX(-50%) translateY(20px);
  background: var(--ocean-900);
  color: var(--sand-50);
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.01em;
  padding: 12px 22px;
  border-radius: 999px;
  box-shadow: 0 8px 28px rgba(13, 36, 54, 0.25);
  opacity: 0;
  pointer-events: none;
  z-index: 10000;
  transition: opacity 200ms ease, transform 200ms ease;
  white-space: nowrap;
  max-width: 90vw;
}
.fy-save-toast.is-visible {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* =============================================================
   1.0.101 — Fix invisible select placeholder on /speak-with-a-broker/
   =============================================================
   The "What are you reaching out about?" topic select rendered
   nearly invisible — its inline color was set but browsers paint
   the empty default option in a system-default color anyway, and
   the inline background-color was a near-match for the form's
   sand background. Force the displayed text dark, give the select
   a visible chevron, and make the option list itself readable.
   ============================================================= */
#fy-contact-form select[name="topic"] {
  color: var(--ink) !important;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230d2436' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 14px center;
  background-size: 14px 14px;
  padding-right: 40px !important;
}
#fy-contact-form select[name="topic"] option {
  color: var(--ink);
  background: #fff;
}

/* =============================================================
   1.0.103 — Fix invisible text on /compare/ page
   =============================================================
   The compare table's <td> cells had no explicit color in their
   inline style, so they inherited whatever the page section's
   parent color was — which on the cream background read as
   washed-out, nearly invisible. Now both the JS renderer sets
   color explicitly AND this CSS rule provides belt-and-suspenders.
   ============================================================= */
#fy-compare-table-wrap table td {
  color: var(--ocean-900);
}
#fy-compare-table-wrap table th {
  color: var(--ink-mute);
}

/* =============================================================
   1.0.108 — Archived listing slim notice + SEO preservation
   =============================================================
   Replaces the old full-page takeover with a small banner above
   the title. The full yacht listing renders below — photos,
   specs, Our Take, body — keeping Google's indexed content
   intact. The CTA on the right of the banner + the sidebar
   swap-in catch the lead.
   ============================================================= */
.fy-archived-notice {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  background: var(--sand-100);
  border: 1px solid var(--line);
  border-left: 3px solid var(--sun-500);
  border-radius: var(--r-sm);
  padding: 14px 20px;
  margin: 18px 0 12px;
  flex-wrap: wrap;
}
.fy-archived-notice__text {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
  flex: 1 1 320px;
}
.fy-archived-notice__eyebrow {
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--sun-700, #8a6a00);
}
.fy-archived-notice__body {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.45;
}
.fy-archived-notice__cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 9px 16px;
  background: var(--ocean-900);
  color: var(--sand-50);
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.005em;
  border-radius: var(--r-pill, 999px);
  text-decoration: none;
  white-space: nowrap;
  transition: background 160ms ease;
  flex-shrink: 0;
}
.fy-archived-notice__cta:hover {
  background: #000;
}

/* Mobile: stack the banner vertically. */
@media (max-width: 768px) {
  .fy-archived-notice {
    padding: 14px 16px;
    gap: 14px;
  }
  .fy-archived-notice__cta {
    width: 100%;
    justify-content: center;
  }
}

/* =============================================================
   1.0.110 — Accordion sections on single-yacht page
   =============================================================
   Replaces the Jump To pills + wall-of-text H2 body. Each section
   from the AI long-form body now renders as a <details> accordion
   so users can scan all available sections without scrolling
   through walls of text.

   The first section opens by default so there's always some
   body content visible on load.
   ============================================================= */
.fy-yacht-sections {
  margin-top: 28px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.fy-yacht-section {
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: #fff;
  overflow: hidden;
  transition: border-color 160ms ease, box-shadow 160ms ease;
}
.fy-yacht-section:hover {
  border-color: var(--ocean-300, #b8c8d6);
}
.fy-yacht-section[open] {
  border-color: var(--ocean-700, #1b4060);
  box-shadow: 0 2px 10px rgba(13, 36, 54, 0.06);
}

.fy-yacht-section__summary {
  list-style: none;
  cursor: pointer;
  padding: 20px 24px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  user-select: none;
  font-family: var(--serif, Georgia, serif);
  font-size: 19px;
  font-weight: 500;
  color: var(--ocean-900);
  letter-spacing: -0.005em;
  line-height: 1.3;
  transition: background 140ms ease;
}
/* Hide the default disclosure triangle on all browsers. */
.fy-yacht-section__summary::-webkit-details-marker { display: none; }
.fy-yacht-section__summary::marker { content: ''; }
.fy-yacht-section__summary:hover {
  background: var(--sand-50, #faf7f2);
}
.fy-yacht-section[open] > .fy-yacht-section__summary {
  background: var(--sand-100, #f5f0e8);
  border-bottom: 1px solid var(--line);
}

.fy-yacht-section__title {
  flex: 1;
  min-width: 0;
}

.fy-yacht-section__icon {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--sand-100, #f5f0e8);
  color: var(--ocean-900);
  transition: transform 220ms cubic-bezier(0.4, 0, 0.2, 1), background 140ms ease;
}
.fy-yacht-section[open] > .fy-yacht-section__summary .fy-yacht-section__icon {
  transform: rotate(180deg);
  background: var(--ocean-900);
  color: var(--sand-50);
}

.fy-yacht-section__body {
  padding: 24px 24px 28px;
  font-family: var(--serif, Georgia, serif);
  font-size: 16px;
  line-height: 1.7;
  color: var(--ink-soft, #38454f);
}
.fy-yacht-section__body > p:first-child { margin-top: 0; }
.fy-yacht-section__body > p:last-child { margin-bottom: 0; }
.fy-yacht-section__body p {
  margin: 0 0 16px;
}
.fy-yacht-section__body h3 {
  font-family: var(--serif, Georgia, serif);
  font-size: 17px;
  font-weight: 600;
  color: var(--ocean-900);
  margin: 24px 0 10px;
  letter-spacing: -0.005em;
}
.fy-yacht-section__body ul,
.fy-yacht-section__body ol {
  margin: 0 0 18px;
  padding-left: 22px;
}
.fy-yacht-section__body li {
  margin-bottom: 6px;
}
.fy-yacht-section__body a {
  color: var(--ocean-700, #1b4060);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}

/* Mobile: tighter padding, slightly smaller summary text. */
@media (max-width: 640px) {
  .fy-yacht-section__summary {
    padding: 16px 18px;
    font-size: 17px;
  }
  .fy-yacht-section__body {
    padding: 18px 18px 22px;
    font-size: 15px;
  }
  .fy-yacht-section__icon {
    width: 24px;
    height: 24px;
  }
}

/* Hide the legacy Jump To pills — 1.0.110 replaced them with the
   accordion above. Keeping the rule so any stray cached/inline
   .fy-listing__toc disappears if it still renders. */
.fy-listing__toc {
  display: none !important;
}

/* =============================================================
   1.0.111 — "Our Thoughts" byline + label rebrand
   =============================================================
   The Our Take callout now reads as a signed piece of editorial,
   attributed to a real team member. Trust signal for buyers and
   E-E-A-T signal for Google's ranking algorithm.
   ============================================================= */
.fy-our-take__byline {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px;
  margin-top: 24px;
  padding-top: 18px;
  border-top: 1px solid var(--line);
  font-family: var(--sans);
  font-size: 13px;
  line-height: 1.4;
  color: var(--ink-mute);
}
.fy-our-take__byline-prefix {
  font-style: italic;
  color: var(--ink-mute);
}
.fy-our-take__byline-name {
  font-weight: 600;
  font-size: 14px;
  color: var(--ocean-900);
  letter-spacing: -0.005em;
}
.fy-our-take__byline-sep {
  color: var(--sun-500);
  font-weight: 700;
}
.fy-our-take__byline-role {
  font-size: 12px;
  font-family: var(--mono, ui-monospace, monospace);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-mute);
}

@media (max-width: 480px) {
  .fy-our-take__byline {
    font-size: 12px;
    gap: 6px;
  }
  .fy-our-take__byline-name {
    font-size: 13px;
  }
}

/* =============================================================
   1.0.112 — Byline moves to header next to OUR THOUGHTS eyebrow
   =============================================================
   Old layout had byline at the bottom of the callout (magazine
   sign-off style). New layout: byline sits inline with the
   eyebrow label at the top, so attribution is the first thing
   the reader sees. Establishes editorial voice upfront.
   ============================================================= */
.fy-our-take__header {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 18px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--line);
}

/* Override the bottom-position byline rules from 1.0.111 — the
   byline is now in the header, so no top border / no top margin. */
.fy-our-take__header .fy-our-take__byline {
  margin-top: 0;
  padding-top: 0;
  border-top: none;
  justify-content: flex-end;
}

@media (max-width: 480px) {
  .fy-our-take__header {
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
  }
  .fy-our-take__header .fy-our-take__byline {
    justify-content: flex-start;
  }
}

/* =============================================================
   1.0.114 — Hover tooltips on card action buttons
   =============================================================
   Pure-CSS tooltip using ::after on hover. Shows "Save yacht"
   on the heart icon, "Compare yacht" on the bars icon. Doesn't
   appear on touch devices (where hover state is awkward) — they
   already have the aria-label for screen readers.

   Positioned ABOVE the button instead of to the left, because
   the photo-count pill ("1/8") also appears on card hover at
   top-right and would collide with a left-positioned tooltip.
   ============================================================= */
.fy-card__action[data-tooltip] {
  position: relative;
}

.fy-card__action[data-tooltip]::after {
  content: attr(data-tooltip);
  position: absolute;
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%) translateY(2px);
  margin-bottom: 10px;
  padding: 6px 10px;
  background: var(--ocean-900, #0d2436);
  color: var(--sand-50, #faf7f2);
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.005em;
  line-height: 1;
  white-space: nowrap;
  border-radius: 4px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 140ms ease, transform 140ms ease;
  z-index: 50;
}

/* Little triangle arrow pointing DOWN at the button (since tooltip is above). */
.fy-card__action[data-tooltip]::before {
  content: '';
  position: absolute;
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%);
  margin-bottom: 4px;
  border: 5px solid transparent;
  border-top-color: var(--ocean-900, #0d2436);
  opacity: 0;
  pointer-events: none;
  transition: opacity 140ms ease;
  z-index: 50;
}

.fy-card__action[data-tooltip]:hover::after,
.fy-card__action[data-tooltip]:focus-visible::after {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

.fy-card__action[data-tooltip]:hover::before,
.fy-card__action[data-tooltip]:focus-visible::before {
  opacity: 1;
}

/* When the button is in active state (saved / added to compare),
   swap to the active-state tooltip text for clearer feedback. */
.fy-card__action.is-active[data-tooltip-active]::after {
  content: attr(data-tooltip-active);
}

/* Suppress tooltips on touch devices — hover is fake on phones
   and the tooltip would stick on tap. */
@media (hover: none) {
  .fy-card__action[data-tooltip]::after,
  .fy-card__action[data-tooltip]::before {
    display: none;
  }
}

/* =============================================================
   1.0.116 — Self-contained compare drawer (v2)
   =============================================================
   The new compare drawer is built entirely in JS, appended
   directly to <body>, and styled inline. This rule just hides
   the OLD footer-baked drawer markup so we don't have a stale
   empty container sitting in the DOM.

   The original #fy-compare-drawer in footer.php is kept in the
   markup for backward compatibility (other things might query
   it) but it's invisible. Real drawer is #fy-compare-drawer-v2,
   created on-the-fly.
   ============================================================= */
#fy-compare-drawer {
  display: none !important;
}

/* =============================================================
   1.0.119 — Branded SVG placeholder for missing article images
   =============================================================
   Articles without a featured image now render a branded inline
   SVG instead of an empty blue rectangle. The SVG fills its
   container the same way an <img> would.
   ============================================================= */
.fy-article-placeholder-svg {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Featured-article hero: when in placeholder mode, ensure the
   SVG takes up the full hero area. The container already has
   aspect-ratio set in 1612, so we just need the SVG to fill. */
.fy-journal-feature__img--placeholder {
  background: transparent;
}
.fy-journal-feature__img--placeholder .fy-article-placeholder-svg {
  width: 100%;
  height: 100%;
}

/* Override the dotted-pattern placeholder from 7030/7034 since
   we're now using a real SVG that fills the space. The legacy
   ::after pattern would sit on top of the SVG. */
.fy-journal-card__img--placeholder::after {
  display: none;
}
.fy-journal-card__img--placeholder {
  background: transparent;
}
