/* ============================================================
 * Landlord Studio — Whitepaper / Report template
 *
 * A reusable long-form "report findings" layout, inspired by
 * editorial progress-report pages (e.g. Penguin "Lit in Colour").
 * Full-bleed hero, sticky read-progress + section nav, oversized
 * count-up stats, pull quotes, CSS bar charts, a vertical timeline,
 * a methodology box, and a closing CTA band.
 *
 * HOW TO REUSE: copy tools/whitepaper-report/embed.html, swap the
 * placeholder copy/numbers, keep the class names. The layout is
 * all class-driven — no per-report CSS edits needed.
 *
 * All styles are scoped under .ls-report so nothing leaks into the
 * host Webflow page (see repo CSS-isolation rule). Do NOT add
 * @import / @font-face here — those are global; Webflow loads Lato
 * site-wide. Full-bleed bands use a 100vw break-out; the root sets
 * overflow-x: clip so that never creates a horizontal scrollbar.
 * ============================================================ */

.ls-report {
  /* ---- Brand tokens (shared with the ROI calculator) ---- */
  --lsr-navy:       #0F2E5A;
  --lsr-navy-deep:  #0A2244;
  --lsr-blue:       #2272E2;
  --lsr-blue-dark:  #1B5FC0;
  --lsr-ink:        #16233B;   /* body text */
  --lsr-sub:        #4A5978;   /* secondary text */
  --lsr-muted:      #5B6B85;   /* meta / captions (>=4.5:1 on white) */
  --lsr-border:     #DDE0E5;
  --lsr-hairline:   #E9EBEF;
  --lsr-surface:    #F5F6F8;   /* light band */
  --lsr-surface2:   #EAF2FF;   /* tinted band */
  --lsr-cream:      #FBFAF7;
  --lsr-green:      #22B38A;
  --lsr-white:      #FFFFFF;

  --lsr-read:       42rem;     /* readable prose column width */
  --lsr-wide:       72rem;     /* wide content width */
  --lsr-gutter:     clamp(20px, 5vw, 48px);
  --lsr-nav-h:      52px;      /* sticky section-nav height (measured by JS) */

  font-family: 'Lato', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  color: var(--lsr-ink);
  background: transparent;   /* blend into the host section */
  line-height: 1.6;
  font-size: 18px;
  overflow-x: clip;          /* contain the full-bleed break-outs */
  -webkit-font-smoothing: antialiased;
}
.ls-report *, .ls-report *::before, .ls-report *::after { box-sizing: border-box; }
.ls-report img { max-width: 100%; height: auto; display: block; }

/* ---- Layout helpers ---- */
.ls-report .lsr-wrap {                       /* centered content column */
  width: 100%;
  max-width: var(--lsr-wide);
  margin-inline: auto;
  padding-inline: var(--lsr-gutter);
}
.ls-report .lsr-read { max-width: var(--lsr-read); }   /* narrow prose */
.ls-report .lsr-bleed {                      /* full viewport-width band */
  margin-left: 50%;
  transform: translateX(-50%);
  width: 100vw;
  max-width: 100vw;
}

/* ============================================================
 * Read-progress bar (sticky, top of embed)
 * ============================================================ */
.ls-report .lsr-progress {
  position: sticky;
  top: 0;
  z-index: 30;
  height: 4px;
  background: transparent;
}
.ls-report .lsr-progress-fill {
  height: 100%;
  width: 0;
  background: linear-gradient(90deg, var(--lsr-blue), var(--lsr-green));
  transition: width .08s linear;
}

/* ============================================================
 * Hero
 * ============================================================ */
.ls-report .lsr-hero {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  color: var(--lsr-white);
  padding-block: clamp(64px, 12vw, 132px);
}
/* Parallax background layer — driven by --hp (0→1 hero scroll progress) */
.ls-report .lsr-hero::before {
  content: "";
  position: absolute;
  inset: -12% 0 -12% 0;
  z-index: -1;
  background:
    radial-gradient(120% 140% at 15% 0%, #163f77 0%, var(--lsr-navy) 45%, var(--lsr-navy-deep) 100%);
  transform: translateY(calc(var(--hp, 0) * 70px));
  will-change: transform;
}
/* Content drifts up + fades slightly as you scroll past the hero */
.ls-report .lsr-hero .lsr-wrap {
  transform: translateY(calc(var(--hp, 0) * -26px));
  opacity: calc(1 - var(--hp, 0) * 0.6);
  will-change: transform, opacity;
}
.ls-report .lsr-eyebrow {
  font-size: 13px;
  font-weight: 800;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: #8FC0FF;
  margin: 0 0 20px;
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.ls-report .lsr-eyebrow::before {
  content: "";
  width: 28px;
  height: 2px;
  background: currentColor;
  display: inline-block;
}
.ls-report .lsr-hero h1 {
  font-size: clamp(2.4rem, 6vw, 4.4rem);
  line-height: 1.04;
  letter-spacing: -0.02em;
  font-weight: 900;
  margin: 0 0 24px;
  max-width: 20ch;
}
.ls-report .lsr-hero .lsr-deck {
  font-size: clamp(1.15rem, 2.2vw, 1.5rem);
  line-height: 1.4;
  color: #C9D8EE;
  font-weight: 400;
  max-width: 46ch;
  margin: 0 0 36px;
}
.ls-report .lsr-hero-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 28px;
  font-size: 14px;
  color: #9FB4D4;
  padding-top: 26px;
  border-top: 1px solid rgba(255,255,255,.16);
  max-width: 46ch;
}
.ls-report .lsr-hero-meta b { color: var(--lsr-white); font-weight: 700; }

/* ============================================================
 * Sticky section nav (chips)
 * ============================================================ */
.ls-report .lsr-nav {
  position: sticky;
  top: 4px;                    /* sits just under the progress bar */
  z-index: 20;
  background: rgba(255,255,255,.95);
  backdrop-filter: saturate(140%) blur(8px);
  border-bottom: 1px solid var(--lsr-border);
}
.ls-report .lsr-nav-inner {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  scrollbar-width: none;
  padding-block: 10px;
}
.ls-report .lsr-nav-inner::-webkit-scrollbar { display: none; }
.ls-report .lsr-nav a {
  flex: 0 0 auto;
  font-size: 14px;
  font-weight: 700;
  color: var(--lsr-sub);
  text-decoration: none;
  padding: 7px 14px;
  border-radius: 999px;
  white-space: nowrap;
  transition: background .15s, color .15s;
}
.ls-report .lsr-nav a:hover { color: var(--lsr-navy); background: var(--lsr-surface); }
.ls-report .lsr-nav a.is-active { color: var(--lsr-white); background: var(--lsr-blue); }

/* ============================================================
 * Generic section rhythm
 * ============================================================ */
.ls-report .lsr-section,
.ls-report .lsr-scrolly,
.ls-report .lsr-scene,
.ls-report .lsr-cta-band,
.ls-report #scenes { scroll-margin-top: calc(var(--lsr-nav-h) + 12px); }
.ls-report .lsr-section { padding-block: clamp(56px, 9vw, 104px); }
.ls-report .lsr-section-num {
  font-size: 14px;
  font-weight: 800;
  letter-spacing: .1em;
  color: var(--lsr-blue);
  margin: 0 0 12px;
}
.ls-report .lsr-section h2 {
  font-size: clamp(1.8rem, 4vw, 2.9rem);
  line-height: 1.1;
  letter-spacing: -0.02em;
  font-weight: 900;
  color: var(--lsr-navy);
  margin: 0 0 24px;
  max-width: 24ch;
}
.ls-report .lsr-section h3 {
  font-size: clamp(1.2rem, 2.4vw, 1.5rem);
  line-height: 1.25;
  font-weight: 800;
  color: var(--lsr-navy);
  margin: 40px 0 12px;
}
.ls-report .lsr-lead {
  font-size: clamp(1.2rem, 2.4vw, 1.6rem);
  line-height: 1.45;
  color: var(--lsr-navy);
  font-weight: 400;
}
.ls-report .lsr-prose p { margin: 0 0 20px; color: var(--lsr-ink); }
.ls-report .lsr-prose p:last-child { margin-bottom: 0; }
.ls-report .lsr-prose a { color: var(--lsr-blue); text-decoration: underline; text-underline-offset: 2px; }
.ls-report .lsr-prose strong { color: var(--lsr-navy); font-weight: 800; }
.ls-report .lsr-prose ul { margin: 0 0 20px; padding-left: 1.1em; }
.ls-report .lsr-prose li { margin-bottom: 10px; }
.ls-report .lsr-prose li::marker { color: var(--lsr-blue); }

/* ============================================================
 * Key-findings stat band
 * ============================================================ */
.ls-report .lsr-stats {
  background: var(--lsr-navy);
  color: var(--lsr-white);
  padding-block: clamp(48px, 8vw, 88px);
}
.ls-report .lsr-stats-head {
  font-size: clamp(1.5rem, 3vw, 2.4rem);
  font-weight: 900;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: #fff;
  margin: 0 0 36px;
}
.ls-report .lsr-stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 40px 32px;
}
.ls-report .lsr-stat {
  border-top: 2px solid rgba(255,255,255,.22);
  padding-top: 20px;
  opacity: 0;
  transform: translateY(22px) scale(.97);
  transition: opacity .6s ease, transform .6s cubic-bezier(.2,.7,.2,1);
}
.ls-report .lsr-stats .lsr-reveal.is-in .lsr-stat { opacity: 1; transform: none; }
.ls-report .lsr-stats .lsr-reveal.is-in .lsr-stat:nth-child(1) { transition-delay: .05s; }
.ls-report .lsr-stats .lsr-reveal.is-in .lsr-stat:nth-child(2) { transition-delay: .15s; }
.ls-report .lsr-stats .lsr-reveal.is-in .lsr-stat:nth-child(3) { transition-delay: .25s; }
.ls-report .lsr-stats .lsr-reveal.is-in .lsr-stat:nth-child(4) { transition-delay: .35s; }
.ls-report .lsr-stat-num {
  font-size: clamp(2.8rem, 7vw, 4.6rem);
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.03em;
  display: flex;
  align-items: baseline;
  gap: 2px;
}
.ls-report .lsr-stat-affix { font-size: .42em; font-weight: 800; color: #8FC0FF; }
.ls-report .lsr-stat-label {
  margin: 14px 0 0;
  font-size: 15px;
  line-height: 1.4;
  color: #C9D8EE;
  max-width: 26ch;
}

/* ============================================================
 * Stat callout (inline, within a section)
 * ============================================================ */
.ls-report .lsr-callout {
  border-left: 4px solid var(--lsr-blue);
  background: var(--lsr-surface2);
  border-radius: 0 12px 12px 0;
  padding: 24px 28px;
  margin: 32px 0;
}
.ls-report .lsr-callout-num {
  font-size: clamp(2.2rem, 5vw, 3.2rem);
  font-weight: 900;
  color: var(--lsr-navy);
  line-height: 1;
  letter-spacing: -0.02em;
}
.ls-report .lsr-callout-num .lsr-stat-affix { color: var(--lsr-blue); }
.ls-report .lsr-callout p { margin: 10px 0 0; font-size: 16px; color: var(--lsr-sub); }

/* ============================================================
 * Bar chart (pure CSS; widths set inline via --v: <0-100>)
 * ============================================================ */
.ls-report .lsr-figure { margin: 36px 0; }
.ls-report .lsr-figure-title { font-size: clamp(1.15rem, 2vw, 1.4rem); font-weight: 800; color: var(--lsr-navy); margin: 0 0 6px; letter-spacing: .01em; }
.ls-report .lsr-figure-note { font-size: 15px; color: var(--lsr-muted); margin: 0 0 24px; }
.ls-report .lsr-bars { display: grid; gap: 20px; }
.ls-report .lsr-bar-row { display: grid; grid-template-columns: minmax(90px, 26%) 1fr auto; align-items: center; gap: 16px; }
.ls-report .lsr-bar-label { font-size: 16px; font-weight: 700; color: var(--lsr-sub); }
.ls-report .lsr-bar-track { display: block; background: var(--lsr-hairline); border-radius: 999px; height: 16px; overflow: hidden; }
.ls-report .lsr-bar-fill {
  display: block;              /* span must be block or width/height are ignored */
  height: 100%;
  width: 0;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--lsr-blue), var(--lsr-blue-dark));
  transition: width 1s cubic-bezier(.2,.7,.2,1);
}
.ls-report .lsr-bar-row.is-accent .lsr-bar-fill { background: linear-gradient(90deg, var(--lsr-green), #159C77); }
.ls-report .lsr-bar-val { font-size: 17px; font-weight: 800; color: var(--lsr-navy); min-width: 3ch; text-align: right; }
/* Fill once the chart scrolls in OR its section reveals (reveal is the
   reliable trigger; the per-chart one just makes it animate a touch later) */
.ls-report .lsr-bars.is-in .lsr-bar-fill,
.ls-report .lsr-reveal.is-in .lsr-bar-fill { width: calc(var(--v, 0) * 1%); }

/* ============================================================
 * Scrollytelling — pinned graphic + steps that scroll past it.
 * Background tint swaps per active step; graphic panels cross-fade.
 * ============================================================ */
.ls-report .lsr-scrolly {
  position: relative;
  background: var(--lsr-cream);
  transition: background-color .7s ease;
}
.ls-report .lsr-scrolly[data-bg="1"] { background: var(--lsr-surface2); }   /* light blue */
.ls-report .lsr-scrolly[data-bg="2"] { background: #E9F7F1; }               /* light green */
.ls-report .lsr-scrolly-inner {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: clamp(24px, 5vw, 72px);
  align-items: start;
}
/* Pinned graphic column */
.ls-report .lsr-scrolly-sticky {
  position: sticky;
  top: 0;
  height: 100vh;
  display: flex;
  align-items: center;
}
.ls-report .lsr-scrolly-graphic { position: relative; width: 100%; aspect-ratio: 4 / 3; }
.ls-report .lsr-stage-panel {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 16px;
  border-radius: 20px;
  padding: clamp(24px, 4vw, 44px);
  opacity: 0;
  transform: scale(.94) translateY(16px);
  transition: opacity .55s ease, transform .55s cubic-bezier(.2,.7,.2,1);
  pointer-events: none;
}
.ls-report .lsr-stage-panel.is-active { opacity: 1; transform: none; }
.ls-report .lsr-stage-panel.panel-light { background: var(--lsr-white); border: 1px solid var(--lsr-border); box-shadow: 0 20px 60px rgba(15,46,90,.10); }
.ls-report .lsr-stage-panel.panel-navy  { background: var(--lsr-navy); color: var(--lsr-white); box-shadow: 0 20px 60px rgba(15,46,90,.28); }
.ls-report .lsr-stage-big {
  font-size: clamp(3.2rem, 9vw, 6rem);
  font-weight: 900;
  line-height: .95;
  letter-spacing: -0.03em;
  color: var(--lsr-navy);
}
.ls-report .lsr-stage-big .lsr-stat-affix { color: var(--lsr-blue); }
.ls-report .lsr-stage-cap { font-size: 1.05rem; color: var(--lsr-sub); max-width: 22ch; }
.ls-report .panel-navy .lsr-stage-cap { color: #C9D8EE; }

/* Self-drawing SVG line chart inside a stage panel */
.ls-report .lsr-draw { width: 100%; height: auto; overflow: visible; }
.ls-report .lsr-draw-grid { stroke: var(--lsr-hairline); stroke-width: 1; }
.ls-report .lsr-draw-line {
  fill: none;
  stroke: var(--lsr-blue);
  stroke-width: 4;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: 620;
  stroke-dashoffset: 620;
  transition: stroke-dashoffset 1.5s ease .1s;
}
.ls-report .lsr-stage-panel.is-active .lsr-draw-line { stroke-dashoffset: 0; }
.ls-report .lsr-draw-dot { fill: var(--lsr-blue); opacity: 0; transition: opacity .3s ease 1.2s; }
.ls-report .lsr-stage-panel.is-active .lsr-draw-dot { opacity: 1; }

/* Compare bars inside the navy panel */
.ls-report .lsr-cmp { display: grid; gap: 18px; }
.ls-report .lsr-cmp-row { display: grid; gap: 8px; }
.ls-report .lsr-cmp-top { display: flex; justify-content: space-between; font-size: 15px; font-weight: 700; }
.ls-report .lsr-cmp-track { display: block; height: 18px; border-radius: 999px; background: rgba(255,255,255,.16); overflow: hidden; }
.ls-report .lsr-cmp-fill { display: block; height: 100%; width: 0; border-radius: 999px; background: #8FC0FF; transition: width 1s cubic-bezier(.2,.7,.2,1) .15s; }
.ls-report .lsr-cmp-row.is-accent .lsr-cmp-fill { background: var(--lsr-green); }
.ls-report .lsr-stage-panel.is-active .lsr-cmp-fill { width: calc(var(--v, 0) * 1%); }

/* Steps column */
.ls-report .lsr-scrolly-steps { padding-block: 12vh 20vh; }
.ls-report .lsr-step { min-height: 78vh; display: flex; align-items: center; }
.ls-report .lsr-step-inner {
  background: var(--lsr-white);
  border: 1px solid var(--lsr-border);
  border-radius: 16px;
  padding: 28px 30px;
  opacity: .4;
  transform: translateY(14px);
  transition: opacity .45s ease, transform .45s cubic-bezier(.2,.7,.2,1), box-shadow .45s ease;
}
.ls-report .lsr-step.is-active .lsr-step-inner {
  opacity: 1;
  transform: none;
  box-shadow: 0 16px 44px rgba(15,46,90,.13);
}
.ls-report .lsr-step-kicker { font-size: 13px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; color: var(--lsr-blue); margin: 0 0 8px; }
.ls-report .lsr-step h3 { font-size: clamp(1.3rem, 3vw, 1.8rem); line-height: 1.15; color: var(--lsr-navy); margin: 0 0 10px; }
.ls-report .lsr-step p { margin: 0; color: var(--lsr-sub); font-size: 16px; }

@media (max-width: 760px) {
  /* Single column: the graphic pins as an opaque, colour-matched band
     just below the sticky nav, and the steps scroll up behind it. */
  .ls-report .lsr-scrolly-inner { grid-template-columns: 1fr; gap: 0; }
  .ls-report .lsr-scrolly-sticky {
    position: sticky;
    top: calc(var(--lsr-nav-h) + 4px);
    height: 40vh;
    z-index: 3;
    align-items: center;
    background: var(--lsr-cream);
    transition: background-color .7s ease;
    box-shadow: 0 12px 16px -14px rgba(15,46,90,.55);
  }
  .ls-report .lsr-scrolly[data-bg="1"] .lsr-scrolly-sticky { background: var(--lsr-surface2); }
  .ls-report .lsr-scrolly[data-bg="2"] .lsr-scrolly-sticky { background: #E9F7F1; }
  .ls-report .lsr-scrolly-graphic { aspect-ratio: auto; height: 36vh; max-width: 460px; margin-inline: auto; }
  .ls-report .lsr-scrolly-steps { padding-block: 2vh 24vh; }
  /* Steps are tall and bottom-aligned so the active card sits in the
     lower reading zone, clear of the pinned band above it. */
  .ls-report .lsr-step { min-height: 62vh; align-items: flex-end; }
  .ls-report .lsr-step-inner { margin-bottom: 3vh; }
}

/* ============================================================
 * STORY SCENES — full-bleed, viewport-pinned, skimmable.
 * Each .lsr-scene is a tall block; its .lsr-scene-pin sticks for
 * the scroll, so one big statement + one animated figure hold the
 * screen. Alternate sides with --flip; pick a bold background with
 * --navy / --blue / --tint / --cream. Figures animate on .is-live.
 * ============================================================ */
.ls-report .lsr-scene { position: relative; min-height: 172vh; }
.ls-report .lsr-scene-pin {
  position: sticky;
  top: 0;
  height: 100vh;
  display: flex;
  align-items: center;
  overflow: hidden;
  transition: background-color .5s ease;
}
.ls-report .lsr-scene-inner {
  width: 100%;
  max-width: var(--lsr-wide);
  margin-inline: auto;
  padding-inline: var(--lsr-gutter);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(28px, 5vw, 72px);
  align-items: center;
}
.ls-report .lsr-scene--flip .lsr-scene-fig { order: -1; }   /* graphic on the left */

.ls-report .lsr-scene-kicker {
  font-size: 13px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;
  color: var(--lsr-blue); margin: 0 0 16px;
}
.ls-report .lsr-scene h2 {
  font-size: clamp(1.9rem, 4.8vw, 3.6rem);
  line-height: 1.06; letter-spacing: -0.02em; font-weight: 900;
  color: var(--lsr-navy); margin: 0; max-width: 16ch;
}
.ls-report .lsr-scene-sub {
  margin: 20px 0 0; font-size: clamp(1.05rem, 2vw, 1.35rem); line-height: 1.4;
  color: var(--lsr-sub); max-width: 30ch; font-weight: 400;
}

/* Background variants + contrast */
.ls-report .lsr-scene--navy .lsr-scene-pin { background: var(--lsr-navy); }
.ls-report .lsr-scene--blue .lsr-scene-pin { background: var(--lsr-blue); }
.ls-report .lsr-scene--tint .lsr-scene-pin { background: var(--lsr-surface2); }
.ls-report .lsr-scene--cream .lsr-scene-pin { background: var(--lsr-cream); }
.ls-report .lsr-scene--navy h2, .ls-report .lsr-scene--blue h2 { color: #fff; }
.ls-report .lsr-scene--navy .lsr-scene-kicker { color: #8FC0FF; }
.ls-report .lsr-scene--blue .lsr-scene-kicker { color: #E0EDFF; }
.ls-report .lsr-scene--navy .lsr-scene-sub { color: #C9D8EE; }
.ls-report .lsr-scene--blue .lsr-scene-sub { color: #EAF3FF; }

/* Text entrance (staggered) */
.ls-report .lsr-scene-text > * { opacity: 0; transform: translateY(22px); transition: opacity .6s ease, transform .6s cubic-bezier(.2,.7,.2,1); }
.ls-report .lsr-scene.is-live .lsr-scene-text > * { opacity: 1; transform: none; }
.ls-report .lsr-scene.is-live .lsr-scene-text > *:nth-child(2) { transition-delay: .10s; }
.ls-report .lsr-scene.is-live .lsr-scene-text > *:nth-child(3) { transition-delay: .20s; }

/* ---- Figure: isotype pictograph (1 icon = a share) ---- */
.ls-report .lsr-iso { display: flex; flex-direction: column; gap: 22px; }
.ls-report .lsr-iso-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; max-width: 440px; }
.ls-report .lsr-iso-cell {
  aspect-ratio: 1; color: #CBD3DF; opacity: 0; transform: scale(.5);
  transition: opacity .45s ease, transform .5s cubic-bezier(.2,.9,.3,1);
}
.ls-report .lsr-iso-cell svg { width: 100%; height: 100%; display: block; fill: currentColor; }
.ls-report .lsr-iso-cell.is-on { color: var(--lsr-blue); }
.ls-report .lsr-scene.is-live .lsr-iso-cell { opacity: 1; transform: none; }
.ls-report .lsr-iso-cell:nth-child(1) { transition-delay: .02s; }
.ls-report .lsr-iso-cell:nth-child(2) { transition-delay: .07s; }
.ls-report .lsr-iso-cell:nth-child(3) { transition-delay: .12s; }
.ls-report .lsr-iso-cell:nth-child(4) { transition-delay: .17s; }
.ls-report .lsr-iso-cell:nth-child(5) { transition-delay: .22s; }
.ls-report .lsr-iso-cell:nth-child(6) { transition-delay: .27s; }
.ls-report .lsr-iso-cell:nth-child(7) { transition-delay: .32s; }
.ls-report .lsr-iso-cell:nth-child(8) { transition-delay: .37s; }
.ls-report .lsr-iso-cell:nth-child(9) { transition-delay: .42s; }
.ls-report .lsr-iso-cell:nth-child(10) { transition-delay: .47s; }
.ls-report .lsr-iso-legend { display: flex; align-items: center; gap: 10px; font-size: 15px; font-weight: 700; color: var(--lsr-sub); }
.ls-report .lsr-iso-key { width: 26px; height: 26px; color: var(--lsr-blue); flex: 0 0 auto; }
.ls-report .lsr-iso-key svg { width: 100%; height: 100%; fill: currentColor; }

/* ---- Figure: giant number ---- */
.ls-report .lsr-bignum-num {
  font-size: clamp(4rem, 14vw, 9.5rem); font-weight: 900; line-height: .88;
  letter-spacing: -0.04em; color: var(--lsr-navy);
  display: flex; align-items: baseline; gap: 4px;
}
.ls-report .lsr-scene--navy .lsr-bignum-num, .ls-report .lsr-scene--blue .lsr-bignum-num { color: #fff; }
.ls-report .lsr-bignum-num .lsr-stat-affix { font-size: .4em; color: var(--lsr-blue); }
.ls-report .lsr-scene--navy .lsr-bignum-num .lsr-stat-affix { color: #8FC0FF; }
.ls-report .lsr-scene--blue .lsr-bignum-num .lsr-stat-affix { color: #DCEBFF; }
.ls-report .lsr-bignum-cap { margin: 16px 0 0; font-size: 1.05rem; color: var(--lsr-sub); max-width: 26ch; }
.ls-report .lsr-scene--navy .lsr-bignum-cap { color: #C9D8EE; }
.ls-report .lsr-scene--blue .lsr-bignum-cap { color: #EAF3FF; }

/* ---- Figure: self-drawing journey path to a far-off year ---- */
.ls-report .lsr-journey svg { width: 100%; height: auto; overflow: visible; }
.ls-report .lsr-journey-path {
  fill: none; stroke: #fff; stroke-width: 10; stroke-linecap: round; stroke-linejoin: round;
  stroke-dasharray: 1200; stroke-dashoffset: 1200;
  transition: stroke-dashoffset 1.9s ease .2s;
}
.ls-report .lsr-scene.is-live .lsr-journey-path { stroke-dashoffset: 0; }
.ls-report .lsr-journey-flag { opacity: 0; transform: translateY(10px); transition: opacity .5s ease 1.5s, transform .5s ease 1.5s; }
.ls-report .lsr-scene.is-live .lsr-journey-flag { opacity: 1; transform: none; }
.ls-report .lsr-journey-dot { fill: #fff; opacity: 0; transition: opacity .4s ease; }
.ls-report .lsr-scene.is-live .lsr-journey-dot { opacity: 1; }

/* ---- Figure: drop-in pills falling into a house ---- */
.ls-report .lsr-drop { display: flex; flex-direction: column; align-items: center; gap: 26px; }
.ls-report .lsr-drop-items { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 12px; max-width: 420px; }
.ls-report .lsr-drop-item {
  background: #fff; color: var(--lsr-navy); font-weight: 800; font-size: 14px;
  padding: 9px 16px; border-radius: 999px; box-shadow: 0 8px 22px rgba(0,0,0,.18);
  opacity: 0; transform: translateY(-160px) rotate(-4deg);
  transition: opacity .5s ease, transform .8s cubic-bezier(.25,.9,.3,1);
}
.ls-report .lsr-scene.is-live .lsr-drop-item { opacity: 1; transform: none; }
.ls-report .lsr-drop-item:nth-child(1){transition-delay:.05s}
.ls-report .lsr-drop-item:nth-child(2){transition-delay:.18s}
.ls-report .lsr-drop-item:nth-child(3){transition-delay:.31s}
.ls-report .lsr-drop-item:nth-child(4){transition-delay:.44s}
.ls-report .lsr-drop-item:nth-child(5){transition-delay:.57s}
.ls-report .lsr-drop-item:nth-child(6){transition-delay:.70s}
.ls-report .lsr-drop-house { width: clamp(120px, 22vw, 168px); color: rgba(255,255,255,.92); }
.ls-report .lsr-drop-house svg { width: 100%; height: auto; fill: currentColor; }

@media (max-width: 760px) {
  .ls-report .lsr-scene { min-height: 0; }
  .ls-report .lsr-scene-pin { position: static; height: auto; padding-block: 64px; }
  .ls-report .lsr-scene-inner { grid-template-columns: 1fr; gap: 32px; }
  .ls-report .lsr-scene--flip .lsr-scene-fig { order: 0; }
  .ls-report .lsr-iso-grid { margin-inline: auto; }
}

/* ============================================================
 * VIDEO SCENES — full-bleed background video with a text card
 * that scrolls over it. Muted / looping / plays only while in view
 * (JS pauses off-screen); the poster frame shows before load and
 * under prefers-reduced-motion. Use as an occasional cinematic
 * break between sections — not back-to-back.
 * ============================================================ */
.ls-report .lsr-video { position: relative; }
.ls-report .lsr-video-sticky {
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;
  z-index: 0;
  background: #0A1526;   /* dark base before the frame paints */
}
.ls-report .lsr-video-bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* Legibility scrim — darkest on the left where the card sits */
.ls-report .lsr-video-scrim {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(90deg, rgba(7,15,28,.84) 0%, rgba(7,15,28,.55) 34%, rgba(7,15,28,.12) 64%, rgba(7,15,28,.02) 100%),
    linear-gradient(0deg, rgba(7,15,28,.35) 0%, rgba(7,15,28,0) 42%);
}
.ls-report .lsr-video-content {
  position: relative;
  z-index: 1;
  margin-top: -100vh;      /* overlap the pinned video */
  min-height: 118vh;       /* a little scroll travel over the video */
  display: flex;
  align-items: center;
  padding-block: 12vh;
}
.ls-report .lsr-video-card {
  max-width: 34rem;
  background: rgba(9,17,30,.9);
  color: #fff;
  border-radius: 18px;
  padding: clamp(26px, 4vw, 44px);
  box-shadow: 0 24px 70px rgba(0,0,0,.4);
}
.ls-report .lsr-video-card .lsr-scene-kicker { color: #8FC0FF; }
.ls-report .lsr-video-card h2 {
  color: #fff;
  font-size: clamp(1.6rem, 3.6vw, 2.7rem);
  line-height: 1.1;
  letter-spacing: -0.02em;
  font-weight: 900;
  margin: 0 0 16px;
  max-width: 18ch;
}
.ls-report .lsr-video-card p {
  color: rgba(255,255,255,.82);
  margin: 0;
  font-size: clamp(1rem, 1.6vw, 1.15rem);
  line-height: 1.5;
  max-width: 44ch;
}
@media (max-width: 760px) {
  .ls-report .lsr-video-content { min-height: 108vh; }
  .ls-report .lsr-video-card { max-width: none; }
  /* stronger top-to-bottom scrim on narrow screens */
  .ls-report .lsr-video-scrim {
    background: linear-gradient(0deg, rgba(7,15,28,.6) 0%, rgba(7,15,28,.2) 55%, rgba(7,15,28,.4) 100%);
  }
}

/* ============================================================
 * Pull quote (full-bleed tinted band)
 * ============================================================ */
.ls-report .lsr-quote-band { background: var(--lsr-surface2); padding-block: clamp(56px, 9vw, 104px); }
.ls-report .lsr-quote { max-width: 46rem; margin-inline: auto; text-align: center; }
.ls-report .lsr-quote blockquote {
  margin: 0;
  font-size: clamp(1.5rem, 4vw, 2.4rem);
  line-height: 1.25;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--lsr-navy);
}
.ls-report .lsr-quote blockquote::before { content: "\201C"; color: var(--lsr-blue); }
.ls-report .lsr-quote blockquote::after  { content: "\201D"; color: var(--lsr-blue); }
.ls-report .lsr-quote figcaption { margin-top: 24px; font-size: 15px; color: var(--lsr-sub); }
.ls-report .lsr-quote figcaption b { color: var(--lsr-navy); font-weight: 800; display: block; }

/* ============================================================
 * Timeline (vertical, e.g. year-by-year progress)
 * ============================================================ */
.ls-report .lsr-timeline { position: relative; padding-left: 34px; }
.ls-report .lsr-timeline::before {
  content: ""; position: absolute; left: 7px; top: 6px; bottom: 6px;
  width: 2px; background: var(--lsr-border);
}
.ls-report .lsr-tl-item { position: relative; padding-bottom: 40px; }
.ls-report .lsr-tl-item:last-child { padding-bottom: 0; }
.ls-report .lsr-tl-item::before {
  content: ""; position: absolute; left: -34px; top: 4px;
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--lsr-white); border: 3px solid var(--lsr-blue);
}
.ls-report .lsr-tl-year { font-size: 14px; font-weight: 800; color: var(--lsr-blue); letter-spacing: .04em; }
.ls-report .lsr-tl-item h3 { margin: 4px 0 8px; font-size: 1.25rem; }
.ls-report .lsr-tl-item p { margin: 0; color: var(--lsr-sub); font-size: 16px; }

/* ============================================================
 * Methodology / about-the-data box
 * ============================================================ */
.ls-report .lsr-method {
  background: var(--lsr-surface);
  border: 1px solid var(--lsr-border);
  border-radius: 16px;
  padding: clamp(24px, 4vw, 40px);
}
.ls-report .lsr-method h2 { font-size: 1.3rem; margin: 0 0 12px; }
.ls-report .lsr-method p { font-size: 15px; color: var(--lsr-sub); margin: 0 0 14px; }
.ls-report .lsr-method p:last-child { margin: 0; }

/* ============================================================
 * Closing CTA band
 * ============================================================ */
.ls-report .lsr-cta-band {
  background: radial-gradient(120% 140% at 85% 0%, #163f77 0%, var(--lsr-navy) 55%, var(--lsr-navy-deep) 100%);
  color: var(--lsr-white);
  padding-block: clamp(56px, 9vw, 104px);
  text-align: center;
}
.ls-report .lsr-cta-band h2 { color: var(--lsr-white); font-size: clamp(1.8rem, 4vw, 2.8rem); margin: 0 auto 16px; max-width: 20ch; }
.ls-report .lsr-cta-band p { color: #C9D8EE; max-width: 44ch; margin: 0 auto 32px; }
.ls-report .lsr-btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: var(--lsr-blue);
  color: var(--lsr-white);
  font-weight: 800;
  font-size: 17px;
  font-family: inherit;
  text-decoration: none;
  padding: 15px 30px;
  border: 0;
  cursor: pointer;
  border-radius: 999px;
  transition: background .15s, transform .15s;
}
.ls-report .lsr-btn:hover { background: var(--lsr-blue-dark); transform: translateY(-1px); }
/* pointer-events:none so a click on the icon registers on the button itself
   (OptiMonk's click trigger doesn't fire for a parent when a child is clicked,
   so this keeps the #lsr-download selector reliable). */
.ls-report .lsr-btn svg { width: 20px; height: 20px; pointer-events: none; }
.ls-report .lsr-cta-note { font-size: 13px; color: #9FB4D4; margin-top: 18px; }

/* ============================================================
 * Lead-capture modal (OptiMonk embedded campaign) — gates the
 * "Download the full report" CTA, mirroring the LS calculators.
 * ============================================================ */
.ls-report .lsr-modal-backdrop {
  display: none; position: fixed; inset: 0; z-index: 9999;
  background: rgba(15,46,90,.6); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
  align-items: center; justify-content: center; padding: 20px; overflow: auto; box-sizing: border-box;
}
.ls-report .lsr-modal-backdrop.is-open { display: flex; }
.ls-report .lsr-modal {
  position: relative; background: #fff; border-radius: 16px; width: 100%; max-width: 460px;
  padding: 36px 32px 30px; box-shadow: 0 24px 64px rgba(15,46,90,.25);
  box-sizing: border-box; max-height: calc(100vh - 40px); overflow: auto; text-align: center;
}
.ls-report .lsr-modal-close {
  position: absolute; top: 10px; right: 14px; border: 0; background: transparent;
  font-size: 26px; line-height: 1; color: var(--lsr-muted); cursor: pointer;
}
.ls-report .lsr-modal-h { font-size: 1.4rem; font-weight: 900; color: var(--lsr-navy); margin: 0 0 8px; }
.ls-report .lsr-modal-p { color: var(--lsr-sub); margin: 0 0 16px; font-size: 15px; }
.ls-report .lsr-modal-trust { font-size: 12px; color: var(--lsr-muted); margin-top: 12px; }
.ls-report .lsr-modal .om-embedded-campaign { min-height: 40px; }
/* OptiMonk renders its own heading, copy and two-column layout, so hide our
   chrome and widen the modal to give its design room (otherwise the heading
   wraps and the form is crushed). */
.ls-report .lsr-modal:has(.om-embedded-campaign) { max-width: 920px; width: 94vw; padding: 10px; }
.ls-report .lsr-modal:has(.om-embedded-campaign) .lsr-modal-h,
.ls-report .lsr-modal:has(.om-embedded-campaign) .lsr-modal-p,
.ls-report .lsr-modal:has(.om-embedded-campaign) .lsr-modal-trust { display: none; }
@media (max-width: 640px) {
  .ls-report .lsr-modal-backdrop { padding: 12px; }
  .ls-report .lsr-modal { padding: 26px 20px 20px; }
  .ls-report .lsr-modal:has(.om-embedded-campaign) { padding: 6px; }
}

/* ---- Post-submit confirmation panel (shown by JS after the OptiMonk form
   is submitted; replaces the blank state OptiMonk leaves behind) ---- */
.ls-report .lsr-modal-thanks { text-align: center; padding: 8px 12px 4px; }
.ls-report .lsr-thanks-tick {
  width: 58px; height: 58px; margin: 4px auto 16px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: #E7F6EE; color: #1E9E63;
}
.ls-report .lsr-thanks-tick svg { width: 30px; height: 30px; }
.ls-report .lsr-thanks-h { font-size: 1.4rem; font-weight: 900; color: var(--lsr-navy); margin: 0 0 8px; }
.ls-report .lsr-thanks-p { color: var(--lsr-sub); margin: 0 auto 22px; font-size: 15px; max-width: 36ch; }
.ls-report .lsr-modal-thanks .lsr-btn { display: inline-flex; }
.ls-report .lsr-thanks-back {
  display: block; margin: 16px auto 0; padding: 0; border: 0; background: none;
  color: var(--lsr-sub); font: inherit; font-size: 14px; font-weight: 700;
  text-decoration: underline; cursor: pointer;
}
/* When confirmed, hide the OptiMonk area + our chrome and reset the modal to a
   compact width (override the :has(.om-embedded-campaign) widen). */
.ls-report .lsr-modal.is-thanks {
  max-width: 460px !important; width: 100% !important; padding: 36px 32px 30px !important;
}
.ls-report .lsr-modal.is-thanks .om-embedded-campaign,
.ls-report .lsr-modal.is-thanks .lsr-modal-trust { display: none !important; }
@media (max-width: 640px) {
  .ls-report .lsr-modal.is-thanks { padding: 26px 20px 20px !important; }
}

/* ---- Footer / credit line ---- */
.ls-report .lsr-foot {
  padding-block: 40px;
  border-top: 1px solid var(--lsr-border);
  font-size: 13px;
  color: var(--lsr-muted);
}
.ls-report .lsr-foot a { color: var(--lsr-sub); }

/* ============================================================
 * Scroll-reveal
 * ============================================================ */
.ls-report .lsr-reveal {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity .6s ease, transform .6s cubic-bezier(.2,.7,.2,1);
}
.ls-report .lsr-reveal.is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .ls-report .lsr-reveal,
  .ls-report .lsr-stat,
  .ls-report .lsr-step-inner { opacity: 1; transform: none; transition: none; }
  .ls-report .lsr-bar-fill,
  .ls-report .lsr-cmp-fill,
  .ls-report .lsr-progress-fill,
  .ls-report .lsr-btn { transition: none; }
  .ls-report .lsr-bars.is-in .lsr-bar-fill,
  .ls-report .lsr-reveal.is-in .lsr-bar-fill { width: calc(var(--v, 0) * 1%); }

  /* No parallax */
  .ls-report .lsr-hero::before,
  .ls-report .lsr-hero .lsr-wrap { transform: none; opacity: 1; }

  /* Un-pin the scrolly: stack graphic panels and show every step */
  .ls-report .lsr-scrolly, .ls-report .lsr-scrolly[data-bg] { background: var(--lsr-cream); }
  .ls-report .lsr-scrolly-sticky { position: static; height: auto; display: block; margin-bottom: 24px; }
  .ls-report .lsr-scrolly-graphic { position: static; aspect-ratio: auto; display: grid; gap: 16px; }
  .ls-report .lsr-stage-panel { position: static; opacity: 1; transform: none; }
  .ls-report .lsr-draw-line { stroke-dashoffset: 0; }
  .ls-report .lsr-draw-dot { opacity: 1; }
  .ls-report .lsr-cmp-fill { width: calc(var(--v, 0) * 1%); }
  .ls-report .lsr-step { min-height: 0; margin-bottom: 16px; }

  /* Scenes: un-pin, reveal every figure statically */
  .ls-report .lsr-scene { min-height: 0; }
  .ls-report .lsr-scene-pin { position: static; height: auto; padding-block: 72px; }
  .ls-report .lsr-scene-text > *,
  .ls-report .lsr-iso-cell,
  .ls-report .lsr-drop-item { opacity: 1; transform: none; }
  .ls-report .lsr-journey-path { stroke-dashoffset: 0; }
  .ls-report .lsr-journey-flag, .ls-report .lsr-journey-dot { opacity: 1; transform: none; }
}

/* ---- Small screens ---- */
@media (max-width: 640px) {
  .ls-report { font-size: 17px; }
  .ls-report .lsr-bar-row { grid-template-columns: 1fr; gap: 6px; }
  .ls-report .lsr-bar-row .lsr-bar-val { text-align: left; }
}

/* ============================================================
 * Hero media (right-hand image on desktop)
 * ============================================================ */
.ls-report .lsr-hero-grid {
  display: grid;
  grid-template-columns: 1.15fr .85fr;
  gap: clamp(28px, 5vw, 64px);
  align-items: center;
}
.ls-report .lsr-hero-media {
  position: relative;
  border-radius: 20px;
  overflow: hidden;
  aspect-ratio: 4 / 3;
  background: linear-gradient(135deg, rgba(255,255,255,.16), rgba(255,255,255,.04));
  border: 1px solid rgba(255,255,255,.18);
  display: flex;
  align-items: center;
  justify-content: center;
  color: rgba(255,255,255,.55);
}
/* Image sits on top of the placeholder; if it fails to load (onerror
   hides it) the placeholder shows through. */
.ls-report .lsr-hero-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }

/* Inline image inside a light section (e.g. the MTD journey banner) */
.ls-report .lsr-inline-img { display: block; width: 100%; height: auto; border-radius: 16px; margin-top: 32px; }
/* Full-bleed variant: edge-to-edge, no rounding (used with .lsr-bleed) */
.ls-report .lsr-inline-img.lsr-bleed { width: 100vw; max-width: 100vw; border-radius: 0; margin-top: 40px; }
.ls-report .lsr-hero-ph { display: flex; flex-direction: column; align-items: center; gap: 10px; font-size: 12px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; }
.ls-report .lsr-hero-ph svg { width: 46px; height: 46px; opacity: .6; }
@media (max-width: 760px) {
  .ls-report .lsr-hero-grid { grid-template-columns: 1fr; }
  .ls-report .lsr-hero-media { aspect-ratio: 16 / 10; margin-top: 28px; }
}

/* ============================================================
 * Quote avatar (profile image / placeholder circle)
 * ============================================================ */
.ls-report .lsr-quote-avatar {
  width: 72px; height: 72px; border-radius: 50%;
  margin: 0 auto 20px; overflow: hidden;
  background: #DDE3EC; color: #8090A8;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 20px rgba(15,46,90,.14);
}
.ls-report .lsr-quote-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ls-report .lsr-quote-avatar svg { width: 40px; height: 40px; }

/* ============================================================
 * Tinted "summary" section (distinct from white sections)
 * ============================================================ */
.ls-report .lsr-section--tint { background: var(--lsr-surface2); }
.ls-report .lsr-section--gray { background: var(--lsr-surface); }
.ls-report .lsr-numlist { list-style: none; counter-reset: lsrnum; margin: 28px 0 0; padding: 0; display: grid; gap: 14px; }
.ls-report .lsr-numlist li {
  counter-increment: lsrnum;
  position: relative;
  padding: 20px 24px 20px 70px;
  background: #fff;
  border: 1px solid var(--lsr-border);
  border-radius: 14px;
  font-size: 16px;
  color: var(--lsr-sub);
}
.ls-report .lsr-numlist li::before {
  content: counter(lsrnum, decimal-leading-zero);
  position: absolute; left: 24px; top: 18px;
  font-size: 20px; font-weight: 900; color: var(--lsr-blue);
}
.ls-report .lsr-numlist strong { color: var(--lsr-navy); }

/* Inline CTA used inside light sections (e.g. What to do next) */
.ls-report .lsr-inline-cta { margin-top: 32px; }

/* ============================================================
 * "You might also be interested" — blog placards
 * ============================================================ */
.ls-report .lsr-blogs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-top: 32px; }
.ls-report .lsr-blog-card {
  display: flex; flex-direction: column;
  border: 1px solid var(--lsr-border); border-radius: 16px; overflow: hidden;
  background: #fff; text-decoration: none;
  transition: box-shadow .2s ease, transform .2s ease;
}
.ls-report a.lsr-blog-card:hover { box-shadow: 0 16px 40px rgba(15,46,90,.12); transform: translateY(-2px); }
.ls-report .lsr-blog-thumb {
  aspect-ratio: 16 / 10;
  background: linear-gradient(135deg, #E7EDF5, #F5F6F8);
  display: flex; align-items: center; justify-content: center; color: #9AA8BD;
}
.ls-report .lsr-blog-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ls-report .lsr-blog-thumb svg { width: 40px; height: 40px; opacity: .6; }
.ls-report .lsr-blog-body { padding: 20px 22px 24px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.ls-report .lsr-blog-cat { font-size: 12px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--lsr-blue); }
.ls-report .lsr-blog-title { font-size: 1.15rem; font-weight: 800; color: var(--lsr-navy); line-height: 1.25; margin: 0; }
.ls-report .lsr-blog-more { margin-top: auto; font-size: 14px; font-weight: 800; color: var(--lsr-blue); }
@media (max-width: 860px) { .ls-report .lsr-blogs { grid-template-columns: 1fr; } }

/* ============================================================
 * Feedback round: hero image, hub diagram, summary split,
 * quote logo, capped full-bleed image.
 * ============================================================ */

/* Hero media when a real image is supplied (drops the placeholder frame) */
.ls-report .lsr-hero-media.has-image { border: none; background: none; aspect-ratio: auto; display: block; overflow: visible; }
.ls-report .lsr-hero-media.has-image img { position: static; width: 100%; height: auto; }

/* Circular hub diagram — survey data at the centre, themes around it */
.ls-report .lsr-hub { position: relative; width: 100%; max-width: 540px; margin: 24px auto 0; aspect-ratio: 1 / 0.94; }
.ls-report .lsr-hub-svg { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; }
.ls-report .lsr-hub-svg line { stroke: #C7D6EC; stroke-width: 2; stroke-dasharray: 5 5; }
.ls-report .lsr-hub-center {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);
  width: 37%; aspect-ratio: 1; border-radius: 50%;
  background: radial-gradient(circle at 32% 26%, #1b4f9c, var(--lsr-navy));
  color: #fff; display: flex; align-items: center; justify-content: center; text-align: center;
  font-weight: 800; font-size: clamp(12px, 2.6vw, 15px); line-height: 1.2; padding: 12px;
  box-shadow: 0 16px 34px rgba(15,46,90,.28); z-index: 2;
}
.ls-report .lsr-hub-node {
  position: absolute; transform: translate(-50%,-50%); width: 44%;
  background: #fff; border: 1px solid var(--lsr-border); border-top: 3px solid var(--lsr-blue);
  border-radius: 12px; padding: 12px 14px; text-align: center;
  font-size: clamp(12px, 1.9vw, 14px); font-weight: 700; color: var(--lsr-navy); line-height: 1.3;
  box-shadow: 0 10px 24px rgba(15,46,90,.12); z-index: 2;
}
.ls-report .lsr-hub-node--1 { left: 50%; top: 12%; }
.ls-report .lsr-hub-node--2 { left: 22%; top: 85%; border-top-color: #E4A400; }
.ls-report .lsr-hub-node--3 { left: 78%; top: 85%; border-top-color: var(--lsr-green); }
@media (max-width: 480px) {
  .ls-report .lsr-hub { aspect-ratio: auto; max-width: 320px; display: flex; flex-direction: column; gap: 12px; }
  .ls-report .lsr-hub-svg { display: none; }
  .ls-report .lsr-hub-center, .ls-report .lsr-hub-node { position: static; transform: none; width: auto; }
  .ls-report .lsr-hub-center { width: 128px; height: 128px; margin: 0 auto; }
}

/* Two-column split (text + supporting image), e.g. the summary section */
.ls-report .lsr-split { display: grid; grid-template-columns: 1.25fr .75fr; gap: clamp(24px, 4vw, 56px); align-items: center; }
/* Balanced variant (short heading left, content-heavy column right) */
.ls-report .lsr-split--balanced { grid-template-columns: .9fr 1.1fr; align-items: start; }
.ls-report .lsr-split-text { max-width: var(--lsr-read); }
.ls-report .lsr-split-media img { width: 100%; height: auto; display: block; }
@media (max-width: 760px) { .ls-report .lsr-split { grid-template-columns: 1fr; } }

/* Landlord Studio logo under a quote attribution */
.ls-report a.lsr-quote-logo-link { display: block; width: fit-content; margin: 16px auto 0; }
.ls-report a.lsr-quote-logo-link img { height: 28px; width: auto; display: block; }

/* Cap the full-bleed inline image height so a tall illustration stays sane */
.ls-report .lsr-inline-img.lsr-bleed { max-height: 31vh; object-fit: contain; }

/* ============================================================
 * Penalties / "cost of getting it wrong" — soft-warning band
 * and 3-up column cards.
 * ============================================================ */
.ls-report .lsr-col-fig { font-size: clamp(2rem, 4vw, 2.8rem); font-weight: 900; line-height: 1; letter-spacing: -0.02em; color: var(--lsr-navy); margin-bottom: 8px; }
.ls-report .lsr-cols3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 2.4vw, 24px); margin-top: 28px; }
.ls-report .lsr-col {
  background: #fff;
  border: 1px solid var(--lsr-border);
  border-top: 3px solid var(--lsr-blue);
  border-radius: 14px;
  padding: 22px 22px 24px;
  box-shadow: 0 10px 24px rgba(15,46,90,.08);
}
.ls-report .lsr-col--1 { border-top-color: var(--lsr-blue); }
.ls-report .lsr-col--2 { border-top-color: #E4A400; }
.ls-report .lsr-col--3 { border-top-color: #D6453D; }
.ls-report .lsr-col-label { font-size: 12px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--lsr-navy); margin: 0 0 10px; }
.ls-report .lsr-col p:last-child { margin: 0; font-size: 15px; color: var(--lsr-sub); line-height: 1.5; }
@media (max-width: 760px) { .ls-report .lsr-cols3 { grid-template-columns: 1fr; } }

/* ============================================================
 * No-sticky fallback. position:sticky breaks when an ANCESTOR of
 * the embed clips overflow (overflow:hidden/auto, or overflow-x:hidden
 * -> overflow-y:auto) or is transformed — very common in Webflow
 * (body/page-wrapper often has overflow-x:hidden). JS detects that and
 * adds .lsr-no-sticky, which un-pins the scenes / scrolly / video into
 * a clean stacked layout with no giant empty gaps.
 * ============================================================ */
.ls-report.lsr-no-sticky .lsr-scene { min-height: 0; }
.ls-report.lsr-no-sticky .lsr-scene-pin { position: static; height: auto; padding-block: clamp(56px, 9vw, 96px); }

/* Confidence scrolly (fallback): JS drops each step's text INTO its graphic
   panel; the panels then lay out as three self-contained cards in a row. */
.ls-report.lsr-no-sticky .lsr-scrolly { padding-block: clamp(48px, 8vw, 88px); }
.ls-report.lsr-no-sticky .lsr-scrolly-inner {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: clamp(18px, 2.4vw, 28px); align-items: stretch;
}
.ls-report.lsr-no-sticky .lsr-stage-panel {
  position: static; opacity: 1; transform: none;
  height: 100%; justify-content: flex-start; gap: 18px;
  padding: clamp(22px, 2.4vw, 30px);
}
.ls-report.lsr-no-sticky .lsr-stage-cap { display: none; }       /* narrative below replaces it */
.ls-report.lsr-no-sticky .lsr-stage-panel .lsr-step { min-height: 0; display: block; }
.ls-report.lsr-no-sticky .lsr-stage-panel .lsr-step-inner { background: transparent; border: 0; box-shadow: none; padding: 0; opacity: 1; transform: none; }
.ls-report.lsr-no-sticky .lsr-stage-panel .lsr-step h3 { margin: 0 0 8px; }
.ls-report.lsr-no-sticky .lsr-stage-panel.panel-navy .lsr-step h3 { color: #fff; }
.ls-report.lsr-no-sticky .lsr-stage-panel.panel-navy .lsr-step p { color: #C9D8EE; }

/* All panels are visible at once, so force their graphics to final state */
.ls-report.lsr-no-sticky .lsr-draw-line { stroke-dashoffset: 0; }
.ls-report.lsr-no-sticky .lsr-draw-dot { opacity: 1; }
.ls-report.lsr-no-sticky .lsr-cmp-fill { width: calc(var(--v, 0) * 1%); }

@media (max-width: 820px) {
  .ls-report.lsr-no-sticky .lsr-scrolly-inner { grid-template-columns: 1fr; gap: 20px; }
}

/* Video: keep the card-over-footage look via a relative overlap (no pin) */
.ls-report.lsr-no-sticky .lsr-video-sticky { position: relative; height: 72vh; }
.ls-report.lsr-no-sticky .lsr-video-content { margin-top: -72vh; min-height: 72vh; }
