/* FuelPhysique Illustrated Performance V4 — Athletic Spectrum. */

:root {
  --v4-canvas-light: #e9eef8;
  --v4-canvas-dark: #151a29;
  --v4-training: #315bff;
  --v4-training-deep: #203a9c;
  --v4-nutrition: #f0a326;
  --v4-nutrition-deep: #81510f;
  --v4-progress: #7957e8;
  --v4-progress-deep: #4b338f;
  --v4-coach: #1fa978;
  --v4-coach-deep: #126849;
  --v4-social: #d94f82;
  --v4-social-deep: #8e2c52;
  --motion-illustrative-training: 1800ms;
  --motion-illustrative-nutrition: 1800ms;
  --motion-illustrative-progress: 1700ms;
  --motion-illustrative-bench-pr: 1700ms;
  --motion-illustrative-coach: 1400ms;
  --motion-illustrative-social: 1600ms;
  --motion-illustrative-deadlift: 2400ms;
  --ease-illustrative: cubic-bezier(.22,.76,.24,1);
}

/* Coherent original athlete illustration language. */
.v4-illustration {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
  color: var(--v4-figure-ink, #f8faff);
  pointer-events: none;
}
.v4-illustration :where(path, line, ellipse) {
  fill: none;
  stroke: currentColor;
  stroke-width: 7;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.v4-illustration :where(circle, rect),
.v4-illustration .v4-torso,
.v4-illustration .v4-person path {
  fill: currentColor;
  stroke: none;
}
.v4-illustration .v4-ground { opacity: .28; }
.v4-illustration .v4-ground path { stroke-width: 3; }
.v4-illustration .v4-muscle-mark { stroke: var(--v4-figure-accent, #cdd8ff); stroke-width: 4; opacity: .9; }
.v4-illustration .v4-poster-label,
.v4-illustration .v4-hero-readout text {
  fill: currentColor;
  stroke: none;
  font: 800 11px/1 Arial, sans-serif;
  letter-spacing: 1.8px;
  opacity: .7;
}
.v4-illustration .v4-barbell rect,
.v4-illustration .v4-scale rect,
.v4-illustration .v4-coach-board rect,
.v4-illustration .v4-social-card rect,
.v4-illustration .v4-pr-state rect { fill: none; stroke: currentColor; stroke-width: 5; }
.v4-illustration .v4-macro-marks path { stroke-width: 5; opacity: .45; }
.v4-illustration .v4-scale-needle,
.v4-illustration .v4-chart-path,
.v4-illustration .v4-social-path { stroke: var(--v4-figure-accent, #fff); }
.v4-illustration .v4-chart-axis { stroke-width: 3; opacity: .42; }
.v4-illustration .v4-chart-path { stroke-width: 6; stroke-dasharray: 150; stroke-dashoffset: 0; }
.v4-illustration .v4-pr-state text {
  fill: currentColor;
  stroke: none;
  text-anchor: middle;
  font: 900 10px/1 Arial, sans-serif;
  letter-spacing: 1px;
}
.v4-illustration .v4-pr-state { opacity: .72; }
.v4-illustration .v4-bench-pr-scene { opacity: 0; }

.is-illustration-paused .v4-illustration *,
.is-illustration-paused .v4-illustration { animation-play-state: paused !important; }

.is-illustration-active .v4-athlete--squat,
.is-illustration-replay .v4-athlete--squat { animation: v4-squat-rep var(--motion-illustrative-training) var(--ease-illustrative) 1 both; transform-origin: 164px 188px; }
.is-illustration-active .v4-illustration--training .v4-barbell,
.is-illustration-replay .v4-illustration--training .v4-barbell { animation: v4-bar-travel var(--motion-illustrative-training) var(--ease-illustrative) 1 both; }
.is-illustration-active .v4-arm--meal,
.is-illustration-replay .v4-arm--meal { animation: v4-meal-rep var(--motion-illustrative-nutrition) var(--ease-illustrative) 1 both; transform-origin: 124px 99px; }
.is-illustration-active .v4-scale-needle,
.is-illustration-replay .v4-scale-needle { animation: v4-scale-measure var(--motion-illustrative-progress) var(--ease-illustrative) 1 both; transform-origin: 125px 171px; }
.is-illustration-active .v4-chart-path,
.is-illustration-replay .v4-chart-path { animation: v4-chart-draw var(--motion-illustrative-progress) var(--ease-illustrative) 1 both; }
.is-illustration-replay .v4-illustration--progress .v4-progress-scale-scene { animation: v4-progress-scene-out var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both; }
.is-illustration-replay .v4-illustration--progress .v4-bench-pr-scene { animation: v4-bench-scene-in var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both; }
.is-illustration-replay .v4-illustration--progress .v4-barbell--bench { animation: v4-bench-lockout var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both; }
.is-illustration-replay .v4-illustration--progress .v4-pr-state { animation: v4-pr-state-in var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both; }
.is-illustration-active .v4-check,
.is-illustration-replay .v4-check { animation: v4-check-in var(--motion-illustrative-coach) var(--ease-illustrative) 1 both; }
.is-illustration-active .v4-check--two,
.is-illustration-replay .v4-check--two { animation-delay: 180ms; }
.is-illustration-active .v4-check--three,
.is-illustration-replay .v4-check--three { animation-delay: 360ms; }
.is-illustration-active .v4-social-card,
.is-illustration-replay .v4-social-card { animation: v4-social-exchange var(--motion-illustrative-social) var(--ease-illustrative) 1 both; }
.is-illustration-active .v4-social-card--workout,
.is-illustration-replay .v4-social-card--workout { animation-delay: 130ms; }
.is-illustration-active .v4-social-card--music,
.is-illustration-replay .v4-social-card--music { animation-delay: 260ms; }
.is-illustration-active .v4-athlete--deadlift,
.is-illustration-replay .v4-athlete--deadlift { animation: v4-deadlift-athlete var(--motion-illustrative-deadlift) var(--ease-illustrative) 1 both; transform-origin: 164px 190px; }
.is-illustration-active .v4-barbell--deadlift,
.is-illustration-replay .v4-barbell--deadlift { animation: v4-deadlift-bar var(--motion-illustrative-deadlift) var(--ease-illustrative) 1 both; }

@keyframes v4-squat-rep { 0%,100% { transform: translateY(0) scaleY(1); } 45% { transform: translateY(24px) scaleY(.91); } 72% { transform: translateY(0) scaleY(1); } }
@keyframes v4-bar-travel { 0%,100% { transform: translateY(0); } 45% { transform: translateY(22px); } 72% { transform: translateY(0); } }
@keyframes v4-meal-rep { 0%,100% { transform: rotate(0deg); } 42%,62% { transform: rotate(-30deg); } }
@keyframes v4-scale-measure { 0%,100% { transform: rotate(-32deg); } 35% { transform: rotate(26deg); } 55% { transform: rotate(-8deg); } 72% { transform: rotate(8deg); } }
@keyframes v4-chart-draw { from { stroke-dashoffset: 150; } to { stroke-dashoffset: 0; } }
@keyframes v4-progress-scene-out { 0%,24% { opacity: 1; } 38%,100% { opacity: 0; } }
@keyframes v4-bench-scene-in { 0%,26% { opacity: 0; } 42%,88% { opacity: 1; } 100% { opacity: .78; } }
@keyframes v4-bench-lockout { 0%,38% { transform: translateY(30px); } 62%,82% { transform: translateY(0); } 100% { transform: translateY(7px); } }
@keyframes v4-pr-state-in { 0%,58% { opacity: 0; transform: scale(.72); } 72%,92% { opacity: 1; transform: scale(1); } 100% { opacity: .72; } }
@keyframes v4-check-in { 0%,18% { opacity: 0; transform: scale(.72); } 48%,100% { opacity: 1; transform: scale(1); } }
@keyframes v4-social-exchange { 0%,15% { opacity: 0; transform: translateX(-18px); } 48%,100% { opacity: 1; transform: translateX(0); } }
@keyframes v4-deadlift-athlete { 0%,100% { transform: translateY(0) rotate(-8deg); } 42%,64% { transform: translateY(-47px) rotate(0deg); } 86% { transform: translateY(-7px) rotate(-6deg); } }
@keyframes v4-deadlift-bar { 0%,100% { transform: translateY(0); } 42%,64% { transform: translateY(-57px); } 86% { transform: translateY(-8px); } }

/* Dashboard capability studio. */
.fp-redesign.fp-route-dashboard {
  --fp-bg-page: var(--v4-canvas-dark);
  --fp-bg-deep: #101420;
  background: var(--v4-canvas-dark) !important;
}
html[data-theme="light"] .fp-redesign.fp-route-dashboard {
  --fp-bg-page: var(--v4-canvas-light);
  --fp-bg-deep: #dce4f3;
  background: var(--v4-canvas-light) !important;
}
.fp-route-dashboard .dashboard-main { display: grid; gap: 18px; }
.fp-route-dashboard .dashboard-shell { padding-block-start: 32px !important; }
.fp-route-dashboard .sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0,0,0,0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}
.fp-route-dashboard .dashboard-compact-header {
  min-height: 0 !important;
  display: grid !important;
  grid-template-columns: minmax(0,1fr) auto;
  align-items: center;
  gap: 28px;
  padding: 26px 30px !important;
  border: 1px solid var(--fp-border) !important;
  border-block-start: 5px solid var(--v4-training) !important;
  background: #1b2132 !important;
}
html[data-theme="light"] .fp-route-dashboard .dashboard-compact-header { background: #f7f9fd !important; }
.fp-route-dashboard .dashboard-compact-header .hero-copy h1 {
  max-width: none;
  margin: 4px 0 5px;
  color: var(--fp-text-primary) !important;
  font-size: clamp(1.75rem,3vw,2.55rem) !important;
  line-height: 1 !important;
}
.fp-route-dashboard .dashboard-compact-header .hero-copy p,
.fp-route-dashboard .dashboard-compact-header .eyebrow { color: var(--fp-text-muted) !important; }
.fp-route-dashboard .dashboard-context-strip { display: flex; align-items: stretch; gap: 10px; }
.fp-route-dashboard .dashboard-context-item {
  min-width: 112px;
  display: grid;
  align-content: center;
  gap: 3px;
  padding: 10px 14px;
  border-inline-start: 1px solid var(--fp-border);
}
.fp-route-dashboard .dashboard-context-item span { color: var(--fp-text-muted); font-size: .68rem; font-weight: 850; letter-spacing: .1em; }
.fp-route-dashboard .dashboard-context-item strong { color: #f7f9fe; font-size: .88rem; white-space: nowrap; }
html[data-theme="light"] .fp-route-dashboard .dashboard-context-item strong { color: #151a29; }

.fp-route-dashboard .capability-studio {
  position: relative;
  display: grid !important;
  grid-template-columns: repeat(12,minmax(0,1fr)) !important;
  grid-template-rows: repeat(2,minmax(310px,auto)) minmax(224px,auto);
  gap: 12px !important;
  margin: 0 !important;
  padding-block-start: 38px !important;
}
.fp-route-dashboard .capability-studio-title {
  position: absolute;
  inset-block-start: 0;
  inset-inline-start: 0;
  margin: 0;
  color: var(--fp-text-muted);
  font-size: .72rem;
  font-weight: 900;
  letter-spacing: .16em;
  line-height: 1;
  text-transform: uppercase;
}
.fp-route-dashboard .capability-card {
  --capability-surface: var(--v4-training-deep);
  --capability-ink: #fff;
  --v4-figure-ink: rgba(255,255,255,.86);
  --v4-figure-accent: rgba(255,255,255,.55);
  position: relative;
  min-width: 0;
  overflow: hidden;
  padding: clamp(20px,2.4vw,34px);
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 12px;
  background: var(--capability-surface);
  color: var(--capability-ink);
  isolation: isolate;
}
.fp-route-dashboard .capability-card--training { grid-column: 1 / 8; grid-row: 1 / 3; --capability-surface: var(--v4-training-deep); }
.fp-route-dashboard .capability-card--nutrition { grid-column: 8 / 13; grid-row: 1; --capability-surface: var(--v4-nutrition-deep); }
.fp-route-dashboard .capability-card--progress { grid-column: 8 / 13; grid-row: 2; --capability-surface: var(--v4-progress-deep); }
.fp-route-dashboard .capability-card--coach { grid-column: 1 / 7; grid-row: 3; --capability-surface: var(--v4-coach-deep); }
.fp-route-dashboard .capability-card--social { grid-column: 7 / 13; grid-row: 3; --capability-surface: var(--v4-social-deep); }
html[data-theme="light"] .fp-route-dashboard .capability-card--training { --capability-surface: #315bff; }
html[data-theme="light"] .fp-route-dashboard .capability-card--nutrition { --capability-surface: #f0a326; --capability-ink: #211505; --v4-figure-ink: rgba(33,21,5,.82); --v4-figure-accent: rgba(33,21,5,.55); border-color: rgba(33,21,5,.22); }
html[data-theme="light"] .fp-route-dashboard .capability-card--progress { --capability-surface: #7957e8; }
html[data-theme="light"] .fp-route-dashboard .capability-card--coach { --capability-surface: #147a58; }
html[data-theme="light"] .fp-route-dashboard .capability-card--social { --capability-surface: #a9305d; }
.fp-route-dashboard .capability-copy { position: relative; z-index: 2; width: min(62%,560px); display: grid; align-content: start; gap: 10px; }
.fp-route-dashboard .capability-card--nutrition .capability-copy,
.fp-route-dashboard .capability-card--progress .capability-copy { width: 67%; }
.fp-route-dashboard .capability-kicker { color: inherit; font-size: .7rem; font-weight: 900; letter-spacing: .14em; opacity: .78; }
.fp-route-dashboard .capability-card h2 { color: inherit !important; font-size: clamp(1.55rem,2.6vw,2.8rem) !important; line-height: .94 !important; }
.fp-route-dashboard .capability-card p { max-width: 48ch; color: inherit; font-size: .88rem; line-height: 1.45; opacity: .82; }
.fp-route-dashboard .capability-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-block-start: 5px; }
.fp-route-dashboard .capability-action,
.fp-route-dashboard .dashboard-action.capability-action {
  width: auto !important;
  min-height: 42px !important;
  display: inline-flex !important;
  grid-template: none !important;
  align-items: center !important;
  justify-content: center;
  gap: 8px !important;
  padding: 8px 12px !important;
  border: 1px solid rgba(255,255,255,.34) !important;
  border-radius: 5px !important;
  background: transparent !important;
  color: inherit !important;
  box-shadow: none !important;
  font-size: .78rem;
  font-weight: 800;
  text-decoration: none;
  transform: none !important;
  height: auto !important;
  align-self: flex-start !important;
}
.fp-route-dashboard .capability-action--primary,
.fp-route-dashboard .dashboard-action.capability-action--primary { background: #fff !important; color: #151a29 !important; border-color: #fff !important; }
.fp-route-dashboard .capability-action:hover { transform: translateY(-1px) !important; }
.fp-route-dashboard .capability-action .dashboard-action-arrow { width: 16px; height: 16px; filter: none !important; }
.fp-route-dashboard .capability-illustration { position: absolute; z-index: 1; inset-inline-end: -4%; inset-block-end: -7%; width: 51%; height: 83%; opacity: .98; }
.fp-route-dashboard .capability-card--training .capability-illustration { width: 54%; height: 79%; }
.fp-route-dashboard .capability-card--coach .capability-illustration,
.fp-route-dashboard .capability-card--social .capability-illustration { width: 45%; height: 92%; }
.fp-route-dashboard .capability-card:not(.capability-card--training) .v4-poster-label { display: none; }

.fp-route-dashboard .desktop-search { margin: 0 !important; }
.fp-route-dashboard .stats-grid {
  grid-template-columns: repeat(4,minmax(0,1fr)) !important;
  gap: 0 !important;
  overflow: hidden;
  border: 1px solid var(--fp-border);
  border-radius: 8px;
  background: var(--fp-surface);
}
.fp-route-dashboard .stats-grid article {
  min-height: 112px !important;
  padding: 18px 20px !important;
  border: 0 !important;
  border-inline-end: 1px solid var(--fp-border) !important;
  background: transparent !important;
  box-shadow: none !important;
}
.fp-route-dashboard .stats-grid article:last-child { border-inline-end: 0 !important; }
.fp-route-dashboard .stats-grid article:nth-child(1) { border-block-start: 4px solid var(--v4-training) !important; }
.fp-route-dashboard .stats-grid article:nth-child(2) { border-block-start: 4px solid var(--v4-coach) !important; }
.fp-route-dashboard .stats-grid article:nth-child(3) { border-block-start: 4px solid var(--v4-progress) !important; }
.fp-route-dashboard .stats-grid article:nth-child(4) { border-block-start: 4px solid var(--v4-training) !important; }
.fp-route-dashboard .stats-grid strong { font-size: clamp(1.65rem,3vw,2.5rem) !important; }
.fp-route-dashboard #dashboardContent { grid-template-columns: minmax(0,1fr) !important; }
.fp-route-dashboard #dashboardContent > * { grid-column: 1 / -1 !important; min-width: 0; width: 100%; }
.fp-route-dashboard .schedule-card { border-inline-start: 5px solid var(--v4-training) !important; }
.fp-route-dashboard .dashboard-grid { display: grid !important; grid-template-columns: repeat(12,minmax(0,1fr)) !important; gap: 12px !important; }
.fp-route-dashboard .next-workout-card { grid-column: span 7; border-block-start: 4px solid var(--v4-training) !important; }
.fp-route-dashboard .nutrition-card { grid-column: span 5; border-block-start: 4px solid var(--v4-nutrition) !important; }
.fp-route-dashboard .recent-card { grid-column: span 5; border-block-start: 4px solid var(--v4-progress) !important; }
.fp-route-dashboard .missed-card { grid-column: span 7; border-block-start: 4px solid var(--v4-coach) !important; }
.fp-route-dashboard .tools-accordion { grid-column: 1 / -1; border-block-start: 4px solid var(--v4-social) !important; }
.fp-route-dashboard .card-icon img { width: 24px; height: 24px; display: block; filter: brightness(0) invert(1); }
.fp-route-dashboard .tools-accordion-arrow img { width: 18px; height: 18px; display: block; }
html[data-theme="light"] .fp-route-dashboard .card-icon img { filter: none; }
.fp-route-dashboard .site-feedback-widget { bottom: calc(84px + env(safe-area-inset-bottom)) !important; }

/* Landing: one continuous cool-performance canvas with contained domain scenes. */
.fp-redesign.fp-route-index,
.fp-route-index main,
.fp-route-index .hero,
.fp-route-index .landing-section,
.fp-route-index .feature-section,
.fp-route-index .results-section,
.fp-route-index .how-section { background: var(--v4-canvas-light) !important; background-image: none !important; }
.fp-route-index .navbar { background: rgba(233,238,248,.96) !important; }
.fp-route-index .hero-panel {
  min-height: 560px;
  display: block !important;
  overflow: hidden;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 14px !important;
  background: var(--v4-training-deep) !important;
  box-shadow: none !important;
}
.fp-route-index .hero-panel::before { display: block !important; content: "" !important; }
.fp-route-index .landing-hero-illustration { position: absolute; inset: 0 0 104px; padding: 16px; --v4-figure-ink: rgba(255,255,255,.9); --v4-figure-accent: #9eb0ff; }
.fp-route-index .hero-panel .system-card {
  position: absolute;
  inset-block-end: 18px;
  width: calc(33.333% - 20px);
  min-height: 76px;
  padding: 12px !important;
  border: 1px solid rgba(255,255,255,.22) !important;
  border-radius: 7px !important;
  background: rgba(21,26,41,.82) !important;
  color: #fff !important;
  box-shadow: none !important;
  transform: none !important;
}
.fp-route-index .hero-panel .system-card p { display: none; }
.fp-route-index .hero-panel .system-card strong { font-size: .78rem; line-height: 1.25; }
.fp-route-index .hero-panel .system-card-workout { inset-inline-start: 14px; border-block-start: 4px solid var(--v4-training) !important; }
.fp-route-index .hero-panel .system-card-nutrition { inset-inline-start: calc(33.333% + 7px); border-block-start: 4px solid var(--v4-nutrition) !important; }
.fp-route-index .hero-panel .system-card-progress { inset-inline-end: 14px; border-block-start: 4px solid var(--v4-progress) !important; }
.fp-route-index .athletic-journey-grid { display: grid !important; grid-template-columns: repeat(12,minmax(0,1fr)) !important; gap: 14px !important; }
.fp-route-index .journey-card {
  --journey-surface: var(--v4-training-deep);
  --journey-ink: #fff;
  --v4-figure-ink: rgba(255,255,255,.86);
  --v4-figure-accent: rgba(255,255,255,.52);
  position: relative;
  min-height: 340px;
  overflow: hidden;
  padding: 28px !important;
  border: 1px solid rgba(255,255,255,.2) !important;
  border-radius: 12px !important;
  background: var(--journey-surface) !important;
  color: var(--journey-ink) !important;
  box-shadow: none !important;
}
.fp-route-index .athletic-journey-grid .journey-card--training { grid-column: span 7 !important; --journey-surface: var(--v4-training-deep); }
.fp-route-index .athletic-journey-grid .journey-card--nutrition { grid-column: span 5 !important; --journey-surface: var(--v4-nutrition-deep); }
.fp-route-index .athletic-journey-grid .journey-card--progress { grid-column: span 5 !important; --journey-surface: var(--v4-progress-deep); }
.fp-route-index .athletic-journey-grid .journey-card--social { grid-column: span 7 !important; --journey-surface: var(--v4-social-deep); }
.fp-route-index .athletic-journey-grid .journey-card--coach { grid-column: 3 / 11 !important; min-height: 280px; --journey-surface: var(--v4-coach-deep); }
.fp-route-index .journey-card .premium-icon { display: none !important; }
.fp-route-index .journey-word { display: block; color: inherit; font-family: var(--fp-display); font-size: clamp(2.8rem,6vw,6.8rem); font-weight: 900; line-height: .82; letter-spacing: -.05em; opacity: .18; }
.fp-route-index .journey-card h3 { position: relative; z-index: 2; max-width: 55%; margin-block-start: 20px; color: inherit !important; font-size: clamp(1.45rem,2.5vw,2.4rem) !important; }
.fp-route-index .feature-section .journey-card p { position: relative; z-index: 2; max-width: 48%; margin-block-start: 12px; color: var(--journey-ink) !important; opacity: .88; }
.fp-route-index .journey-illustration { position: absolute; inset-inline-end: -2%; inset-block-end: -7%; width: 52%; height: 72%; }
.fp-route-index .journey-card--coach .journey-illustration { width: 46%; height: 88%; }
.fp-route-index .results-section { color: var(--fp-ink) !important; }
.fp-route-index .results-grid .result-story {
  border: 1px solid #c7d0e1 !important;
  border-block-start: 5px solid var(--v4-progress) !important;
  border-radius: 10px !important;
  background: #f7f9fd !important;
  color: var(--fp-ink) !important;
  box-shadow: none !important;
}
.fp-route-index .results-section :where(h2,h3),
.fp-route-index .results-section .section-heading p,
.fp-route-index .results-disclaimer { color: var(--fp-ink) !important; }
.fp-route-index .transformation-invite { border: 1px solid #c7d0e1 !important; border-inline-start: 5px solid var(--v4-social) !important; background: #f7f9fd !important; color: var(--fp-ink) !important; }
.fp-route-index .how-section .platform-step { border: 1px solid #c7d0e1 !important; border-block-start: 4px solid var(--v4-training) !important; background: rgba(255,255,255,.48) !important; box-shadow: none !important; }
.fp-route-index .how-section .platform-step:nth-child(2) { border-block-start-color: var(--v4-nutrition) !important; }
.fp-route-index .how-section .platform-step:nth-child(3) { border-block-start-color: var(--v4-progress) !important; }
.fp-route-index .final-cta { border-radius: 12px !important; background: #20283c !important; }
.fp-route-index .landing-footer { background: var(--v4-canvas-light) !important; color: var(--fp-ink) !important; }

/* Social content-type and provider identity. */
.fp-route-social .music-link-card[data-music-provider] {
  --music-surface: var(--v4-training);
  --music-ink: #fff;
  position: relative;
  border: 0 !important;
  border-radius: 9px !important;
  background: var(--music-surface) !important;
  color: var(--music-ink) !important;
  transition: transform var(--motion-fast) var(--ease-effort), opacity var(--motion-fast) ease !important;
}
.fp-route-social .music-link-card[data-music-provider="youtube"],
.fp-route-social .music-link-card[data-music-provider="youtube_music"] { --music-surface: #b4232e; }
.fp-route-social .music-link-card[data-music-provider="spotify"] { --music-surface: #177a3b; }
.fp-route-social .music-link-card[data-music-provider="apple_music"] { --music-surface: #aa2b55; }
.fp-route-social .music-link-card[data-music-provider="soundcloud"] { --music-surface: #b9490c; }
.fp-route-social .music-link-card[data-music-provider="link"] { --music-surface: var(--v4-training); }
.fp-route-social .music-link-card[data-music-provider]:hover { transform: translateY(-2px) !important; }
.fp-route-social .music-link-card[data-music-provider]:active { transform: translateY(0) scale(.99) !important; }
.fp-route-social .music-link-card[data-music-provider] img { filter: brightness(0) invert(1); }
.fp-route-social .music-link-card[data-music-provider] :where(small,strong,em) { color: inherit !important; }
.fp-route-social .music-link-card[data-music-provider] small { opacity: .82; }
.fp-route-social .music-link-card[data-music-provider] em { opacity: .72; }
.fp-route-social .voice-message { border-inline-start: 4px solid var(--v4-progress) !important; background: rgba(121,87,232,.13) !important; }
.fp-route-social .artifact-card[data-artifact-type="workout"] { border-inline-start: 4px solid var(--v4-training) !important; }
.fp-route-social .artifact-card[data-artifact-type="nutrition"] { border-inline-start: 4px solid var(--v4-nutrition) !important; }
.fp-route-social .message-row[data-message-type="text"].is-sent .message-bubble { border-color: rgba(217,79,130,.35) !important; }

/* Preserve the approved Workout Day rail while carrying the Training identity. */
.fp-route-workout-builder .plan-day-rail { border-block-start-color: var(--v4-training) !important; }
.fp-route-workout-builder .plan-day-button.is-active { border-color: var(--v4-training) !important; }

@media (max-width: 1020px) {
  .fp-route-dashboard .capability-studio { grid-template-rows: none; }
  .fp-route-dashboard .capability-card--training { grid-column: 1 / -1; grid-row: auto; min-height: 390px; }
  .fp-route-dashboard .capability-card--nutrition,
  .fp-route-dashboard .capability-card--progress,
  .fp-route-dashboard .capability-card--coach,
  .fp-route-dashboard .capability-card--social { grid-column: span 6; grid-row: auto; min-height: 260px; }
  .fp-route-dashboard .capability-copy { width: 60% !important; }
  .fp-route-dashboard .dashboard-grid { grid-template-columns: repeat(2,minmax(0,1fr)) !important; }
  .fp-route-dashboard .dashboard-grid > * { grid-column: auto !important; }
  .fp-route-dashboard .tools-accordion { grid-column: 1 / -1 !important; }
  .fp-route-index .athletic-journey-grid .journey-card--coach { grid-column: 1 / -1 !important; }
}

@media (max-width: 820px) {
  .fp-redesign .site-feedback-widget { display: none !important; }
}

@media (max-width: 760px) {
  .fp-route-dashboard .dashboard-shell { padding-block-start: 14px !important; }
  .fp-route-dashboard .dashboard-compact-header { grid-template-columns: 1fr; gap: 14px; padding: 22px 18px !important; }
  .fp-route-dashboard .dashboard-compact-header .hero-copy h1 { max-width: 100%; white-space: normal !important; overflow-wrap: anywhere; font-size: clamp(1.75rem,9vw,2.25rem) !important; }
  .fp-route-dashboard .dashboard-context-strip { width: 100%; display: grid; grid-template-columns: 1fr 1fr; }
  .fp-route-dashboard .dashboard-context-strip .theme-toggle { grid-column: 1 / -1; width: 100%; min-height: 44px; }
  .fp-route-dashboard .dashboard-context-strip .theme-toggle-label { display: inline !important; }
  .fp-route-dashboard .dashboard-context-item { min-width: 0; padding: 8px 10px; }
  .fp-route-dashboard .capability-studio { display: grid !important; grid-template-columns: 1fr !important; }
  .fp-route-dashboard .capability-card,
  .fp-route-dashboard .capability-card--training,
  .fp-route-dashboard .capability-card--nutrition,
  .fp-route-dashboard .capability-card--progress,
  .fp-route-dashboard .capability-card--coach,
  .fp-route-dashboard .capability-card--social { grid-column: 1 !important; grid-row: auto !important; min-height: 330px; padding: 22px !important; }
  .fp-route-dashboard .capability-card--training { min-height: 390px; }
  .fp-route-dashboard .capability-copy { width: 69% !important; }
  .fp-route-dashboard .capability-card h2 { max-width: 100%; white-space: normal !important; overflow-wrap: anywhere; font-size: 1.9rem !important; }
  .fp-route-dashboard .capability-card p { font-size: .82rem; }
  .fp-route-dashboard .capability-illustration { inset-inline-end: 0; width: 62% !important; height: 66% !important; opacity: .8; }
  .fp-route-dashboard .capability-actions { display: grid; grid-template-columns: 1fr; }
  .fp-route-dashboard .capability-action { width: 100% !important; }
  .fp-route-dashboard .stats-grid { grid-template-columns: repeat(2,minmax(0,1fr)) !important; }
  .fp-route-dashboard .stats-grid article:nth-child(2) { border-inline-end: 0 !important; }
  .fp-route-dashboard .stats-grid article:nth-child(-n+2) { border-block-end: 1px solid var(--fp-border) !important; }
  .fp-route-dashboard .dashboard-grid { grid-template-columns: 1fr !important; }
  .fp-route-dashboard .dashboard-grid > * { grid-column: 1 !important; }

  .fp-route-index .hero-panel { min-height: 440px; }
  .fp-route-index .landing-hero-illustration { inset-block-end: 120px; padding: 0; }
  .fp-route-index .hero-panel .system-card { width: calc(33.333% - 12px); inset-block-end: 10px; min-height: 98px; padding: 8px !important; }
  .fp-route-index .hero-panel .system-card-workout { inset-inline-start: 8px; }
  .fp-route-index .hero-panel .system-card-nutrition { inset-inline-start: calc(33.333% + 4px); }
  .fp-route-index .hero-panel .system-card-progress { inset-inline-end: 8px; }
  .fp-route-index .hero-panel .system-card strong { font-size: .66rem; }
  .fp-route-index .athletic-journey-grid { grid-template-columns: 1fr !important; overflow: visible !important; }
  .fp-route-index .athletic-journey-grid .journey-card,
  .fp-route-index .athletic-journey-grid .journey-card--training,
  .fp-route-index .athletic-journey-grid .journey-card--nutrition,
  .fp-route-index .athletic-journey-grid .journey-card--progress,
  .fp-route-index .athletic-journey-grid .journey-card--social,
  .fp-route-index .athletic-journey-grid .journey-card--coach { grid-column: 1 !important; min-width: 0; width: 100%; min-height: 350px; }
  .fp-route-index .journey-card h3 { max-width: 72%; }
  .fp-route-index .feature-section .journey-card p { max-width: 66% !important; }
  .fp-route-index .journey-illustration { inset-inline-end: 0; width: 66%; height: 64%; opacity: .8; }

  .fp-route-social .composer textarea {
    min-height: 44px !important;
    height: 44px !important;
    max-height: 88px !important;
    resize: none !important;
  }
  .fp-route-social .messages-view { height: calc(100dvh - 154px - env(safe-area-inset-bottom)) !important; }
  .fp-route-social .messages-view .chat-panel { min-height: 0 !important; height: 100% !important; }
}

@media (max-width: 900px) {
  .fp-route-index .landing-hero-illustration .v43-image-sequence--deadlift .v43-image-sequence__frame {
    width: 116% !important;
    max-width: none !important;
    transform: translateX(-5%);
  }
}

@media (prefers-reduced-motion: reduce) {
  .v4-illustration *,
  .v4-illustration,
  .is-illustration-active .v4-illustration *,
  .is-illustration-replay .v4-illustration * {
    animation: none !important;
    transition-duration: .01ms !important;
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
  }
  .v4-chart-path { stroke-dashoffset: 0 !important; }
  .v4-check,
  .v4-social-card,
  .v4-pr-state { opacity: 1 !important; transform: none !important; }
}

/* ══ V4.1 PREMIUM ATHLETIC FIGURE ═══════════════════════════════════════
   Filled anatomy + per-joint articulation.
   docs/premium-athletic-illustration-system.md */

/* Limbs are filled volumes, not strokes. Must beat the base
   :where(path,line,ellipse) stroke rule, hence the .v4-illustration scope. */
.v4-illustration :where(.fa-limb, .fa-torso, .fa-head, .fa-hand, .fa-foot) {
  fill: currentColor;
  /* A canvas-coloured outline painted UNDER the fill separates overlapping
     limbs from the body. Without it the arm and torso merge into one white
     mass and the pose stops reading. */
  stroke: var(--v4-canvas-dark);
  stroke-width: 1.5;
  paint-order: stroke fill;
}
.v4-illustration :where(.fa-torso, .fa-head) { stroke-width: 2.1; }
html[data-theme="light"] .v4-illustration :where(.fa-limb, .fa-torso, .fa-head, .fa-hand, .fa-foot) {
  stroke: var(--v4-canvas-light);
}
/* Depth: far-side limbs sit back and are overlapped by the body.
   Flat vector only: no blur, no bloom, no colour ramps. */
.v4-illustration .fa-far { opacity: .55; }
.v4-illustration .fa-bar { stroke: currentColor; stroke-width: 6; fill: none; }
.v4-illustration .fa-plate { fill: var(--v4-figure-accent, #7f9dff); stroke: none; }
.v4-illustration .fa-plate--inner { opacity: .5; }
.v4-illustration .fa-accent {
  stroke: var(--v4-figure-accent, #7f9dff);
  stroke-width: 3.5; stroke-linecap: round; fill: none; opacity: .8;
}
.v4-illustration .fa-definition {
  fill: none;
  stroke: var(--v4-canvas-dark);
  stroke-width: 2.2;
  stroke-linecap: round;
  opacity: .62;
}
html[data-theme="light"] .v4-illustration .fa-definition { stroke: var(--v4-canvas-light); }
.v4-illustration .fa-torso-shell--profile .fa-definition--waist { opacity: .38; }

/* ── Deadlift articulation ──────────────────────────────────────────────
   Chain rooted at the planted ankle, running upward. Each group rotates
   about its own joint; parent rotations accumulate, so these are LOCAL
   deltas. LOAD -> PULL -> LOCKOUT -> settle, with effort slower than
   recovery so the bar reads as heavy. */
.is-illustration-active .dl-chain,
.is-illustration-replay .dl-chain { animation: v41-dl-shin var(--motion-illustrative-deadlift) var(--ease-illustrative) 1 both; }
.is-illustration-active .dl-thigh,
.is-illustration-replay .dl-thigh { animation: v41-dl-thigh var(--motion-illustrative-deadlift) var(--ease-illustrative) 1 both; }
.is-illustration-active .dl-torso,
.is-illustration-replay .dl-torso { animation: v41-dl-torso var(--motion-illustrative-deadlift) var(--ease-illustrative) 1 both; }
.is-illustration-active .dl-arm,
.is-illustration-replay .dl-arm { animation: v41-dl-arm var(--motion-illustrative-deadlift) var(--ease-illustrative) 1 both; }
.is-illustration-active .dl-bar,
.is-illustration-replay .dl-bar { animation: v41-dl-bar var(--motion-illustrative-deadlift) var(--ease-illustrative) 1 both; }

@keyframes v41-dl-shin  { 0%,10% { transform: rotate(0deg); } 30% { transform: rotate(-4deg); } 60%,78% { transform: rotate(-15deg); } 100% { transform: rotate(-14deg); } }
@keyframes v41-dl-thigh { 0%,10% { transform: rotate(0deg); } 30% { transform: rotate(16deg); } 60%,78% { transform: rotate(52deg); } 100% { transform: rotate(50deg); } }
@keyframes v41-dl-torso { 0%,10% { transform: rotate(0deg); } 30% { transform: rotate(-24deg); } 60%,78% { transform: rotate(-80deg); } 100% { transform: rotate(-78deg); } }
/* Arms counter-rotate against the torso so they stay vertical through the
   pull -- this is what stops the bar swinging away from the body. */
@keyframes v41-dl-arm   { 0%,10% { transform: rotate(0deg); } 30% { transform: rotate(13deg); } 60%,78% { transform: rotate(44deg); } 100% { transform: rotate(43deg); } }
/* Bar tracks the hands: predominantly vertical, drawn slightly back toward
   the hips, which is the real bar path. */
@keyframes v41-dl-bar   { 0%,10% { transform: translate(0,0); } 30% { transform: translate(-1px,-10px); } 60%,78% { transform: translate(-3px,-37px); } 100% { transform: translate(-3px,-35px); } }

@media (prefers-reduced-motion: reduce) {
  .v4-illustration .dl-chain, .v4-illustration .dl-thigh, .v4-illustration .dl-torso,
  .v4-illustration .dl-arm, .v4-illustration .dl-bar { animation: none !important; }
}

/* ══════════════════════════════════════════════════════════════════════
   V4.1 SCENE STYLESHEETS
   Concatenated from public/css/scenes/*.css at integration time. Each
   block pairs with the matching module in public/js/scenes/ and is kept
   verbatim so the scene authors' files stay the editable source.
   ══════════════════════════════════════════════════════════════════════ */

/* ── scenes/training.css ─────────────────────────────────────────────── */
/* ── V4.1 Training scene: standing dumbbell curl ────────────────────────
   Domain colour Training #315bff, applied to the WEIGHT only -- the body
   stays the shared figure ink, so Training reads as the same athlete as
   every other scene, just holding a blue dumbbell.

   Kinematics: the upper arm is effectively pinned (a few degrees of drift,
   no shoulder swing); the FOREARM group rotates about the elbow. That
   single articulation is what makes the action read as a curl rather than a
   press or a row. */
.v4-illustration .tr-scene { --v4-figure-accent: #315bff; }

/* The plates cross the torso at the top of the rep, so they need the same
   canvas-coloured under-outline the limbs get, or they read as flat discs
   pasted onto the chest. */
.v4-illustration .tr-bell .fa-plate {
  stroke: var(--v4-canvas-dark);
  stroke-width: 2.6;
  paint-order: stroke fill;
}
html[data-theme="light"] .v4-illustration .tr-bell .fa-plate { stroke: var(--v4-canvas-light); }

.is-illustration-active .tr-farm,
.is-illustration-replay .tr-farm { animation: v41-tr-curl var(--motion-illustrative-training) var(--ease-illustrative) 1 both; }
.is-illustration-active .tr-grip,
.is-illustration-replay .tr-grip { animation: v41-tr-grip var(--motion-illustrative-training) var(--ease-illustrative) 1 both; }
.is-illustration-active .tr-uarm,
.is-illustration-replay .tr-uarm { animation: v41-tr-uarm var(--motion-illustrative-training) var(--ease-illustrative) 1 both; }
.is-illustration-active .tr-torso,
.is-illustration-replay .tr-torso { animation: v41-tr-brace var(--motion-illustrative-training) var(--ease-illustrative) 1 both; }

/* Lift is faster than the descent (42% up, 40% down) so the rep reads as
   controlled rather than dropped. */
@keyframes v41-tr-curl  { 0%,8% { transform: rotate(0deg); }  46%,64% { transform: rotate(112deg); } 100% { transform: rotate(78deg); } }
@keyframes v41-tr-grip  { 0%,8% { transform: rotate(0deg); }  46%,64% { transform: rotate(-112deg); } 100% { transform: rotate(-78deg); } }
/* Elbow drifts a few degrees only. Anything larger becomes a swing, which
   is the exact form fault this illustration should not be teaching. */
@keyframes v41-tr-uarm  { 0%,8% { transform: rotate(0deg); }  46%,64% { transform: rotate(-4deg); } 100% { transform: rotate(-3deg); } }
@keyframes v41-tr-brace { 0%,8% { transform: translateY(0); } 46%,64% { transform: translateY(-1.2px); } 100% { transform: translateY(0); } }

.is-illustration-complete .tr-farm { transform: rotate(78deg); }
.is-illustration-complete .tr-grip { transform: rotate(-78deg); }
.is-illustration-complete .tr-uarm { transform: rotate(-3deg); }

@media (prefers-reduced-motion: reduce) {
  .v4-illustration .tr-farm,
  .v4-illustration .tr-grip,
  .v4-illustration .tr-uarm,
  .v4-illustration .tr-torso { animation: none !important; }
  /* Held mid-high pose: unmistakably a curl in progress, zero motion. */
  .v4-illustration .tr-farm { transform: rotate(78deg) !important; }
  .v4-illustration .tr-grip { transform: rotate(-78deg) !important; }
  .v4-illustration .tr-uarm { transform: rotate(-3deg) !important; }
}

/* ── scenes/nutrition.css ─────────────────────────────────────────────── */
/* ══ V4.1 NUTRITION scene ═══════════════════════════════════════════════
   An athlete eating a meal. Domain accent: #f0a326 (the food mass only).

   The arm is a real kinematic chain -- shoulder group (.nu-uarm) contains
   the elbow group (.nu-farm) which contains the wrist group (.nu-fork), so
   the utensil is carried BY the hand instead of floating beside it. Every
   value below is a LOCAL delta; parent rotations accumulate.

   Base (unanimated) pose already has the fork in the food, which is what
   reduced motion falls back to. Flat editorial vector only. */

.v4-illustration .nu-scene { --v4-figure-accent: #f0a326; }

/* Furniture is solid ink, no outline -- it must sit BEHIND the figure and
   read as environment, not as another body. */
.v4-illustration .nu-chair rect,
.v4-illustration .nu-table rect { fill: currentColor; stroke: none; }
.v4-illustration .nu-chair { opacity: .74; }

/* The bowl is ink-coloured with the shared canvas outline so the accent
   food mass reads as a separate object rising out of it. */
.v4-illustration .nu-bowl { fill: currentColor; }

/* ── Eating cycle ──────────────────────────────────────────────────────
   rest -> down to the food -> spear -> lift -> to the mouth -> return.
   Effort down/up is slower than the return so it reads as a deliberate
   bite rather than a metronome. No chewing loop, no particles. */
.is-illustration-active .nu-uarm,
.is-illustration-replay .nu-uarm { animation: v41-nu-uarm var(--motion-illustrative-nutrition) var(--ease-illustrative) 1 both; }
.is-illustration-active .nu-farm,
.is-illustration-replay .nu-farm { animation: v41-nu-farm var(--motion-illustrative-nutrition) var(--ease-illustrative) 1 both; }
.is-illustration-active .nu-fork,
.is-illustration-replay .nu-fork { animation: v41-nu-fork var(--motion-illustrative-nutrition) var(--ease-illustrative) 1 both; }
.is-illustration-active .nu-torso,
.is-illustration-replay .nu-torso { animation: v41-nu-torso var(--motion-illustrative-nutrition) var(--ease-illustrative) 1 both; }
.is-illustration-active .nu-head,
.is-illustration-replay .nu-head { animation: v41-nu-head var(--motion-illustrative-nutrition) var(--ease-illustrative) 1 both; }

@keyframes v41-nu-uarm  { 0%,8% { transform: rotate(0deg); }   24%,34% { transform: rotate(1.5deg); } 52% { transform: rotate(-3deg); } 70%,100% { transform: rotate(-6deg); } }
@keyframes v41-nu-farm  { 0%,8% { transform: rotate(-18deg); } 24%,34% { transform: rotate(0deg); }   52% { transform: rotate(-24deg); } 70%,100% { transform: rotate(-74.7deg); } }
/* The wrist counter-rotates: a fork that stayed rigid to the forearm would
   point at the ceiling by the time the hand reached the face. */
@keyframes v41-nu-fork  { 0%,8% { transform: rotate(-8deg); }  24%,34% { transform: rotate(0deg); }   52% { transform: rotate(-20deg); } 70%,100% { transform: rotate(102deg); } }
/* Torso leans in over the bowl, settles back to chew height. */
@keyframes v41-nu-torso { 0%,8% { transform: rotate(0deg); }   24%,34% { transform: rotate(2.5deg); } 52% { transform: rotate(.5deg); }  70%,100% { transform: rotate(-2deg); } }
@keyframes v41-nu-head  { 0%,34% { transform: translate(0,0) rotate(0deg); } 52% { transform: translate(1px,1px) rotate(1deg); } 70%,100% { transform: translate(3px,1px) rotate(4deg); } }

.is-illustration-complete .nu-uarm { transform: rotate(-6deg); }
.is-illustration-complete .nu-farm { transform: rotate(-74.7deg); }
.is-illustration-complete .nu-fork { transform: rotate(102deg); }
.is-illustration-complete .nu-torso { transform: rotate(-2deg); }
.is-illustration-complete .nu-head { transform: translate(3px,1px) rotate(4deg); }

@media (prefers-reduced-motion: reduce) {
  /* Falls back to the authored base pose: utensil already in the food. */
  .v4-illustration .nu-uarm, .v4-illustration .nu-farm,
  .v4-illustration .nu-fork, .v4-illustration .nu-torso,
  .v4-illustration .nu-head { animation: none !important; }
  .v4-illustration .nu-uarm { transform: rotate(-6deg) !important; }
  .v4-illustration .nu-farm { transform: rotate(-74.7deg) !important; }
  .v4-illustration .nu-fork { transform: rotate(102deg) !important; }
  .v4-illustration .nu-torso { transform: rotate(-2deg) !important; }
  .v4-illustration .nu-head { transform: translate(3px,1px) rotate(4deg) !important; }
}

/* ── scenes/progress.css ─────────────────────────────────────────────── */
/* FuelPhysique V4.1 — Progress domain scenes (scale + bench PR).
   Pairs with public/js/scenes/progress.js. Every selector is namespaced
   `pr-` so it cannot collide with the other V4.1 scene modules.

   Flat vector only: no colour ramps, no soft-focus effects, no depth
   tricks beyond overlapping filled limbs. */

/* Domain accent. Applied on the scene root so plates, the chart line and
   the PR tick carry Progress purple while the figure stays ink-white. */
.v4-illustration--progress,
.v4-illustration--benchPr {
  --v4-figure-accent: #7957e8;
}

/* Equipment surfaces are structural outlines, not solid slabs, so the
   athlete's filled body stays the brightest mass in the frame. */
.v4-illustration .pr-scale-deck,
.v4-illustration .pr-scale-base,
.v4-illustration .pr-bench-pad,
.v4-illustration .pr-head-pad { fill: currentColor; stroke: none; }
.v4-illustration .pr-bench-frame { stroke: currentColor; fill: none; }
.v4-illustration .pr-chart-axis { stroke: currentColor; fill: none; }
.v4-illustration .pr-readout rect { fill: var(--v4-canvas-dark, #151a29); }
html[data-theme="light"] .v4-illustration .pr-readout rect { fill: var(--v4-canvas-light, #e9eef8); }
.v4-illustration .pr-chart-line { stroke-dasharray: 122; stroke-dashoffset: 0; }

/* ── Scene 1: settle onto the scale ────────────────────────────────────
   Three beats inside --motion-illustrative-progress:
     0–45%  the athlete settles (pelvis drops, knees take it),
     45–68% the readout resolves,
     58–100% the progress line establishes.
   The pelvis group carries the whole upper body and the thigh chains, so
   the legs stay attached; each shin counter-translates by the same amount
   the pelvis dropped, which is what keeps the feet planted on the deck
   instead of sinking through it. */
.is-illustration-active .pr-hips,
.is-illustration-replay .pr-hips {
  animation: v41-pr-settle var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-thigh--l,
.is-illustration-replay .pr-thigh--l {
  animation: v41-pr-thigh-l var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-thigh--r,
.is-illustration-replay .pr-thigh--r {
  animation: v41-pr-thigh-r var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-shin--l,
.is-illustration-replay .pr-shin--l {
  animation: v41-pr-shin-l var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-shin--r,
.is-illustration-replay .pr-shin--r {
  animation: v41-pr-shin-r var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
/* The arm swings a couple of degrees behind the pelvis, which is what
   stops the settle reading as a rigid lift-shaft descent. */
.is-illustration-active .pr-uarm--stand,
.is-illustration-replay .pr-uarm--stand {
  animation: v41-pr-arm-stand var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-readout,
.is-illustration-replay .pr-readout {
  animation: v41-pr-readout var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-chart-line,
.is-illustration-replay .pr-chart-line {
  animation: v41-pr-chart var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-chart-dot,
.is-illustration-replay .pr-chart-dot {
  animation: v41-pr-chart-dot var(--motion-illustrative-progress) var(--ease-illustrative) 1 both;
}

@keyframes v41-pr-settle   { 0%, 8% { transform: translateY(-3.4px); } 34% { transform: translateY(3.6px); } 62%, 100% { transform: translateY(0); } }
@keyframes v41-pr-thigh-l  { 0%, 8% { transform: rotate(1.4deg); }  34% { transform: rotate(-3deg); }  62%, 100% { transform: rotate(0deg); } }
@keyframes v41-pr-thigh-r  { 0%, 8% { transform: rotate(-1.4deg); } 34% { transform: rotate(3deg); }   62%, 100% { transform: rotate(0deg); } }
@keyframes v41-pr-shin-l   { 0%, 8% { transform: translateY(3.4px) rotate(-1.4deg); } 34% { transform: translateY(-3.6px) rotate(3deg); }  62%, 100% { transform: translateY(0) rotate(0deg); } }
@keyframes v41-pr-shin-r   { 0%, 8% { transform: translateY(3.4px) rotate(1.4deg); }  34% { transform: translateY(-3.6px) rotate(-3deg); } 62%, 100% { transform: translateY(0) rotate(0deg); } }
@keyframes v41-pr-arm-stand{ 0%, 8% { transform: rotate(4deg); }     34% { transform: rotate(-3deg); }  62%, 100% { transform: rotate(0deg); } }
/* Measurement resolves: marks step in, hold. No numbers are ever drawn. */
@keyframes v41-pr-readout  { 0%, 44% { opacity: 0; } 54% { opacity: .55; } 68%, 100% { opacity: 1; } }
@keyframes v41-pr-chart    { 0%, 56% { stroke-dashoffset: 122; } 100% { stroke-dashoffset: 0; } }
@keyframes v41-pr-chart-dot{ 0%, 88% { opacity: 0; } 100% { opacity: 1; } }

/* ── Scene 2: bench press ──────────────────────────────────────────────
   The static markup IS the lockout, so a held frame is a legal position.
   Beats inside --motion-illustrative-bench-pr:
     0–14%  top / lockout,
     14–46% controlled descent to the chest (slower than the press),
     46–56% pause at the chest,
     56–82% press,
     82–100% lockout + a restrained PR tick.
   Upper arm and forearm rotate about their own joints and the bar
   translates with the hands, so the grip never leaves the knurl. */
.is-illustration-active .pr-uarm--bench,
.is-illustration-replay .pr-uarm--bench,
.is-illustration-active .pr-uarm--far,
.is-illustration-replay .pr-uarm--far {
  animation: v41-pr-bench-uarm var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-farm--bench,
.is-illustration-replay .pr-farm--bench,
.is-illustration-active .pr-farm--far,
.is-illustration-replay .pr-farm--far {
  animation: v41-pr-bench-farm var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-bar,
.is-illustration-replay .pr-bar {
  animation: v41-pr-bench-bar var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both;
}
/* Chest rises a hair under load — an arch cue, not a bounce. */
.is-illustration-active .pr-torso--bench,
.is-illustration-replay .pr-torso--bench {
  animation: v41-pr-bench-torso var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both;
}
.is-illustration-active .pr-cue,
.is-illustration-replay .pr-cue {
  animation: v41-pr-cue var(--motion-illustrative-bench-pr) var(--ease-illustrative) 1 both;
}

@keyframes v41-pr-bench-uarm  { 0%,14% { transform: rotate(0deg); } 48%,58% { transform: rotate(-58deg); } 84%,100% { transform: rotate(0deg); } }
@keyframes v41-pr-bench-farm  { 0%,14% { transform: rotate(0deg); } 48%,58% { transform: rotate(122deg); } 84%,100% { transform: rotate(0deg); } }
@keyframes v41-pr-bench-bar   { 0%,14% { transform: translate(0,0); } 48%,58% { transform: translate(-10px,40px); } 84%,100% { transform: translate(0,0); } }
@keyframes v41-pr-bench-torso { 0%, 14% { transform: translateY(0); }  46%, 56% { transform: translateY(-1.4px); } 82%, 100% { transform: translateY(0); } }
/* Restrained PR cue: a tick, drawn on, no number and no burst. */
@keyframes v41-pr-cue         { 0%, 80% { opacity: 0; } 92% { opacity: .95; } 100% { opacity: 1; } }

/* ── Reduced motion ───────────────────────────────────────────────────
   Everything holds its authored frame: the athlete stands measured on the
   scale with the chart drawn, and the bench figure holds LOCKOUT. */
@media (prefers-reduced-motion: reduce) {
  .v4-illustration .pr-hips,
  .v4-illustration .pr-thigh--l,
  .v4-illustration .pr-thigh--r,
  .v4-illustration .pr-shin--l,
  .v4-illustration .pr-shin--r,
  .v4-illustration .pr-uarm--stand,
  .v4-illustration .pr-readout,
  .v4-illustration .pr-chart-line,
  .v4-illustration .pr-chart-dot,
  .v4-illustration .pr-uarm--bench,
  .v4-illustration .pr-uarm--far,
  .v4-illustration .pr-farm--bench,
  .v4-illustration .pr-farm--far,
  .v4-illustration .pr-bar,
  .v4-illustration .pr-torso--bench,
  .v4-illustration .pr-cue { animation: none !important; }
  .v4-illustration .pr-chart-line { stroke-dashoffset: 0; }
  .v4-illustration .pr-readout,
  .v4-illustration .pr-cue { opacity: 1; }
}

/* ── scenes/coachsocial.css ─────────────────────────────────────────────── */
/* FuelPhysique V4.1 scene styles: Coach + Social.
   Scoped to the .co-scene / .so-scene root groups emitted by
   public/js/scenes/coachsocial.js, so nothing here can reach another
   scene. Flat vector only: no colour ramps, no blur, no bloom. */

/* Ground: same weight as the rest of the V4.1 set. */
.co-scene .co-ground, .so-scene .so-ground { stroke: currentColor; stroke-width: 3; fill: none; }

/* ── Coach: plan board ────────────────────────────────────────────── */
.co-scene .co-frame { fill: none; stroke: currentColor; stroke-width: 2.6; opacity: .4; }
.co-scene .co-title { fill: none; stroke: currentColor; stroke-width: 6; stroke-linecap: round; opacity: .5; }
.co-scene .co-row { fill: none; stroke: currentColor; stroke-width: 5; stroke-linecap: round; opacity: .28; }
/* The single highlighted recommendation. Accent is used here and on the
   two resolution marks only -- everything else stays monochrome. */
.co-scene .co-band { fill: #1fa978; stroke: none; opacity: .2; }
.co-scene .co-row--rec { stroke: #1fa978; stroke-width: 5.5; opacity: 1; }
.co-scene .co-next { fill: none; stroke: #1fa978; stroke-width: 4.2; stroke-linecap: round; stroke-linejoin: round; }
.co-scene .co-check { fill: none; stroke: #1fa978; stroke-width: 4.4; stroke-linecap: round; stroke-linejoin: round; }
.co-scene .co-check--done { opacity: .45; }

/* Informational staging inside one duration: the plan row highlights,
   the recommendation writes on, the next-step chevron arrives, the check
   resolves. The athlete answers with one small pointing beat -- posture
   response, not a wave. */
.is-illustration-active .co-band,
.is-illustration-replay .co-band {
  animation: v41-co-band var(--motion-illustrative-coach) var(--ease-illustrative) 1 both;
  transform-origin: 138px 115px;
}
.is-illustration-active .co-row--rec,
.is-illustration-replay .co-row--rec { animation: v41-co-write var(--motion-illustrative-coach) var(--ease-illustrative) 1 both; }
.is-illustration-active .co-next,
.is-illustration-replay .co-next { animation: v41-co-next var(--motion-illustrative-coach) var(--ease-illustrative) 1 both; }
.is-illustration-active .co-check--resolve,
.is-illustration-replay .co-check--resolve { animation: v41-co-check var(--motion-illustrative-coach) var(--ease-illustrative) 1 both; }
.is-illustration-active .co-forearm,
.is-illustration-replay .co-forearm { animation: v41-co-point var(--motion-illustrative-coach) var(--ease-illustrative) 1 both; }

@keyframes v41-co-band  { 0% { opacity: 0; transform: scaleX(.12); } 26%, 100% { opacity: .2; transform: scaleX(1); } }
@keyframes v41-co-write { 0%, 18% { stroke-dasharray: 90; stroke-dashoffset: 90; } 52%, 100% { stroke-dasharray: 90; stroke-dashoffset: 0; } }
@keyframes v41-co-next  { 0%, 52% { opacity: 0; transform: translateX(-7px); } 74%, 100% { opacity: 1; transform: none; } }
@keyframes v41-co-check { 0%, 66% { stroke-dasharray: 22; stroke-dashoffset: 22; } 92%, 100% { stroke-dasharray: 22; stroke-dashoffset: 0; } }
@keyframes v41-co-point { 0% { transform: rotate(7deg); } 34%, 100% { transform: rotate(0deg); } }

/* ── Social: exchanged content cards ──────────────────────────────── */
.so-scene .so-frame { fill: #d94f82; fill-opacity: .16; stroke: #d94f82; stroke-opacity: .85; stroke-width: 2.6; }
.so-scene .so-glyph { fill: none; stroke: #d94f82; stroke-width: 4; stroke-linecap: round; stroke-linejoin: round; }
.so-scene .so-note { fill: #d94f82; stroke: none; }

/* A sends the workout card; B answers with music, then a message.
   Each leg is ~60% of the scene duration, staggered so the whole
   exchange lands inside the 1600ms budget. */
.is-illustration-active .so-card,
.is-illustration-replay .so-card {
  animation-duration: calc(var(--motion-illustrative-social) * .6);
  animation-timing-function: var(--ease-illustrative);
  animation-iteration-count: 1;
  animation-fill-mode: both;
}
.is-illustration-active .so-card--workout,
.is-illustration-replay .so-card--workout { animation-name: v41-so-from-a; }
.is-illustration-active .so-card--music,
.is-illustration-replay .so-card--music { animation-name: v41-so-from-b; animation-delay: calc(var(--motion-illustrative-social) * .26); }
.is-illustration-active .so-card--message,
.is-illustration-replay .so-card--message { animation-name: v41-so-from-b; animation-delay: calc(var(--motion-illustrative-social) * .4); }
.is-illustration-active .so-arm--a,
.is-illustration-replay .so-arm--a { animation: v41-so-share var(--motion-illustrative-social) var(--ease-illustrative) 1 both; }
.is-illustration-active .so-arm--b,
.is-illustration-replay .so-arm--b {
  animation: v41-so-reply calc(var(--motion-illustrative-social) * .7) var(--ease-illustrative) 1 both;
  animation-delay: calc(var(--motion-illustrative-social) * .26);
}

@keyframes v41-so-from-a { 0% { opacity: 0; transform: translate(-52px, 16px) scale(.72); } 55%, 100% { opacity: 1; transform: none; } }
@keyframes v41-so-from-b { 0% { opacity: 0; transform: translate(56px, -8px) scale(.72); } 55%, 100% { opacity: 1; transform: none; } }
@keyframes v41-so-share  { 0% { transform: rotate(16deg); } 40%, 100% { transform: rotate(0deg); } }
@keyframes v41-so-reply  { 0% { transform: rotate(-14deg); } 45%, 100% { transform: rotate(0deg); } }

/* Reduced motion: hold the resolved end state for both scenes. */
@media (prefers-reduced-motion: reduce) {
  .co-scene .co-band, .co-scene .co-row--rec, .co-scene .co-next,
  .co-scene .co-check--resolve, .co-scene .co-forearm,
  .so-scene .so-card, .so-scene .so-arm { animation: none !important; }
}

/* ── scenes/image-sequence-v43.css ──────────────────────────────────────── */
/* V4.3 local-review image sequences. The query-gated engine creates these
   nodes; deployed pages without the local flag continue to render V4.2. */
.v43-image-sequence {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: grid;
  place-items: end center;
  pointer-events: none;
  overflow: hidden;
}

.v43-image-sequence__frame {
  display: block;
  min-width: 0;
  min-height: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  opacity: 1;
  filter: drop-shadow(0 12px 16px rgba(4, 9, 28, .18));
}

.v43-image-sequence--training .v43-image-sequence__frame {
  max-height: 100%;
}

/* Frame changes are deliberately discrete. Crossfading generated human
   poses produces doubled faces, limbs, barbells and utensils. */
.v43-image-sequence.is-v43-loading .v43-image-sequence__frame,
.v43-image-sequence.is-v43-playing .v43-image-sequence__frame,
.v43-image-sequence.is-v43-complete .v43-image-sequence__frame {
  transition: none;
}

.fp-route-index .landing-hero-illustration[data-v43-motion="prototype"] {
  inset-block-end: 112px;
  padding: 8px;
  overflow: hidden;
  contain: paint;
}

.fp-route-index .landing-hero-illustration .v43-image-sequence--deadlift .v43-image-sequence__frame {
  width: 100%;
  max-width: 100%;
  object-position: center bottom;
}

.fp-route-index .journey-illustration[data-v43-motion="prototype"] {
  z-index: 3;
  inset-inline-end: 0;
  inset-block-end: 2%;
  width: 56%;
  height: 80%;
  opacity: 1;
  overflow: hidden;
  contain: paint;
}

.fp-route-dashboard .capability-illustration[data-v43-motion="prototype"] {
  z-index: 3;
  inset-inline-end: 0;
  inset-block-end: 2%;
  width: 58%;
  height: 84%;
  opacity: 1;
  overflow: hidden;
  contain: paint;
}

.fp-route-index .journey-illustration .v43-image-sequence--nutrition .v43-image-sequence__frame,
.fp-route-index .journey-illustration .v43-image-sequence--training .v43-image-sequence__frame,
.fp-route-dashboard .capability-illustration .v43-image-sequence--nutrition .v43-image-sequence__frame {
  width: 100%;
  max-width: 100%;
}

.fp-route-dashboard .capability-illustration .v43-image-sequence--training .v43-image-sequence__frame {
  width: 100%;
  max-width: 100%;
}

.fp-route-dashboard .capability-illustration .v43-image-sequence--session .v43-image-sequence__frame {
  width: 100%;
  max-width: 100%;
}

.fp-route-dashboard .capability-illustration .v43-image-sequence--plate .v43-image-sequence__frame {
  width: 94%;
  max-width: 94%;
}

.fp-route-dashboard .capability-illustration .v43-image-sequence--benchPr .v43-image-sequence__frame {
  width: 100%;
  max-width: 100%;
}

.fp-route-dashboard #v43-bench-review {
  scroll-margin-top: 92px;
}

.fp-route-dashboard #v43-bench-review .capability-illustration[data-v43-motion="prototype"] {
  width: 44%;
  height: 72%;
}

.fp-route-index .journey-card--training .journey-illustration[data-v43-motion="prototype"] {
  width: 48%;
  height: 72%;
  inset-block-end: 5%;
}

.fp-route-dashboard .capability-card--training .capability-illustration[data-v43-motion="prototype"] {
  width: 50%;
  height: 72%;
  inset-block-end: 5%;
}

.fp-route-dashboard .capability-card--nutrition .capability-illustration[data-v43-motion="prototype"] {
  width: 52%;
  height: 76%;
  inset-block-end: 4%;
}

@media (max-width: 720px) {
  :where(html, body):has(.fp-route-index) { overflow-x: hidden; }
  .fp-route-index .landing-hero-illustration[data-v43-motion="prototype"] {
    inset-block-end: 124px;
    padding: 0;
  }

  .fp-route-index .landing-hero-illustration .v43-image-sequence--deadlift .v43-image-sequence__frame {
    width: 116% !important;
    max-width: none !important;
    transform: translateX(-5%);
  }

  .fp-route-index .journey-illustration[data-v43-motion="prototype"],
  .fp-route-dashboard .capability-illustration[data-v43-motion="prototype"] {
    width: 68% !important;
    height: 64% !important;
    inset-block-end: 2%;
    opacity: .88;
  }

  .fp-route-index .journey-card--training .journey-illustration[data-v43-motion="prototype"],
  .fp-route-dashboard .capability-card--training .capability-illustration[data-v43-motion="prototype"] {
    width: 100% !important;
    height: 40% !important;
    inset-inline-end: 0;
    inset-block-end: 2%;
    opacity: 1;
  }

  .fp-route-dashboard .capability-card--nutrition .capability-illustration[data-v43-motion="prototype"] {
    width: 100% !important;
    height: 48% !important;
    inset-inline-end: 0;
    inset-block-end: 2%;
  }

  .fp-route-index .journey-card--training,
  .fp-route-dashboard .capability-card--training { min-height: 470px !important; }
  .fp-route-index .journey-card--training :where(h3, p) { max-width: 92% !important; }
  .fp-route-dashboard .capability-card--training .capability-copy { width: 92% !important; }

  .fp-route-dashboard #v43-bench-review {
    min-height: 530px;
  }

  .fp-route-dashboard #v43-bench-review .capability-illustration[data-v43-motion="prototype"] {
    width: 100% !important;
    height: 50% !important;
    inset-inline-end: 0;
    inset-block-end: 2%;
    opacity: 1;
  }
}

/* Remaining V4.3 landing scenes: keep the generated subjects readable while
   reserving the copy column and clipping strictly to the card. */
.fp-route-index .journey-card--progress .journey-illustration[data-v43-motion="prototype"],
.fp-route-index .journey-card--coach .journey-illustration[data-v43-motion="prototype"] {
  width: 52%;
  height: 80%;
  inset-block-end: 4%;
}

.fp-route-index .journey-card--social .journey-illustration[data-v43-motion="prototype"] {
  width: 58%;
  height: 82%;
  inset-block-end: 3%;
}

.fp-route-dashboard .capability-card--coach .capability-illustration[data-v43-motion="prototype"],
.fp-route-dashboard .capability-card--social .capability-illustration[data-v43-motion="prototype"] {
  width: 46%;
  height: 82%;
}

.fp-route-dashboard .capability-card--progress .capability-illustration[data-v43-motion="prototype"] {
  width: 48%;
  height: 78%;
}

@media (max-width: 720px) {
  .fp-route-index .journey-card--progress .journey-illustration[data-v43-motion="prototype"],
  .fp-route-index .journey-card--social .journey-illustration[data-v43-motion="prototype"],
  .fp-route-index .journey-card--coach .journey-illustration[data-v43-motion="prototype"],
  .fp-route-dashboard .capability-card--progress .capability-illustration[data-v43-motion="prototype"],
  .fp-route-dashboard .capability-card--social .capability-illustration[data-v43-motion="prototype"],
  .fp-route-dashboard .capability-card--coach .capability-illustration[data-v43-motion="prototype"] {
    width: 100% !important;
    height: 48% !important;
    inset-inline-end: 0;
    inset-block-end: 2%;
    opacity: 1;
  }
}

@media (max-width: 900px) {
  .v43-image-sequence__frame,
  .fp-route-index .landing-hero-illustration .v43-image-sequence--deadlift .v43-image-sequence__frame,
  .fp-route-index .journey-illustration .v43-image-sequence--nutrition .v43-image-sequence__frame,
  .fp-route-index .journey-illustration .v43-image-sequence--training .v43-image-sequence__frame,
  .fp-route-dashboard .capability-illustration .v43-image-sequence__frame {
    width: 100% !important;
    max-width: 100% !important;
  }
}

@media (max-width: 900px) {
  .fp-route-index .landing-hero-illustration .v43-image-sequence--deadlift .v43-image-sequence__frame {
    width: 116% !important;
    max-width: none !important;
    transform: translateX(-5%);
  }
}

@media (prefers-reduced-motion: reduce) {
  .v43-image-sequence,
  .v43-image-sequence__frame {
    animation: none !important;
    transition: none !important;
  }
}
