/*
  Buffer landing page (/home): sections, widgets and the Book-a-call modal.
  The page is v4 (design_handoff_buffer_home_v4: Buffer Home v4.dc.html and
  its CLAUDE_CODE_PROMPT.md); the modal keeps the v3 values from
  design/v3-handoff/Book Call Modal v3.dc.html. Shared tokens and components
  live in v3-site.css.
*/

/* v4's container (a 16–48px gutter that grows with the screen), section
   rhythm and band tint. */
:root {
  --gutter: clamp(16px, 4vw, 48px);
  --rhythm: clamp(80px, 9vw, 128px);
  --band: var(--sage-100);
}

/* v4 type and details, on this page only: the blog and legal pages share
   v3-site.css and keep theirs. */
.v3-h2 { font-size: clamp(2rem, 4.4vw, 3.25rem); line-height: 1.05; }

main :is(h1, h2, h3) { text-wrap: balance; }
main p { text-wrap: pretty; }

main .v3-i,
main .v3-i[width] { stroke-width: 1.75; }

main :focus-visible { outline-offset: 3px; }

/* Buttons grow with their label, so a long one wraps instead of clipping. */
main .v3-btn {
  height: auto;
  min-height: 48px;
  padding: 12px 24px;
  line-height: 1.2;
  white-space: normal;
  text-align: center;
}

/* ---------------------------------------------------------------- hero */

.v3-top { position: relative; scroll-margin-top: 24px; }

/* The first screen is the hero alone, its content centred; the pillar
   cards overlap its bottom edge and peek in below. */
.v3-hero {
  position: relative;
  margin: clamp(8px, 1vw, 12px) clamp(8px, 1vw, 12px) 0;
  border-radius: clamp(24px, 3vw, 28px);
  overflow: hidden;
  isolation: isolate;
  background: linear-gradient(180deg, var(--sage-200) 0%, var(--sage-100) 55%, var(--white) 100%);
  padding: clamp(104px, 11vw, 160px) 0 clamp(128px, 11vw, 160px);
  min-height: calc(100vh - clamp(8px, 1vw, 12px));
  min-height: calc(100svh - clamp(8px, 1vw, 12px));
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

/* The design's four glows at their resting positions. They are the fallback
   for v3-hero-aurora.js (the moving "warm air" drawn on a canvas that the
   module inserts as the hero's first child): once its first frame is up, the
   module adds .is-aurora-live and the glows cross-fade out underneath it. If
   the module cannot run (no WebGL, software renderer, shader failure) they stay. */
.v3-hero-glow { transition: opacity 1.2s var(--ease); }
.is-aurora-live .v3-hero-glow { opacity: 0; }

.v3-hero-glow-a {
  top: -200px;
  left: -120px;
  width: 720px;
  height: 720px;
  background: radial-gradient(circle closest-side, rgb(var(--teal-rgb) / .5) 0%, rgb(var(--teal-rgb) / .24) 45%, rgb(var(--teal-rgb) / 0) 100%);
}

.v3-hero-glow-b {
  top: -40px;
  right: -160px;
  width: 760px;
  height: 760px;
  background: radial-gradient(circle closest-side, rgb(var(--navy-rgb) / .17) 0%, rgb(var(--navy-rgb) / .08) 45%, rgb(var(--navy-rgb) / 0) 100%);
}

.v3-hero-glow-c {
  top: -80px;
  right: 260px;
  width: 520px;
  height: 520px;
  background: radial-gradient(circle closest-side, rgb(var(--gold-rgb) / .55) 0%, rgb(var(--gold-rgb) / .27) 45%, rgb(var(--gold-rgb) / 0) 100%);
}

.v3-hero-glow-d {
  top: 240px;
  left: 540px;
  width: 560px;
  height: 560px;
  background: radial-gradient(circle closest-side, rgb(var(--gold-rgb) / .42) 0%, rgb(var(--gold-rgb) / .2) 45%, rgb(var(--gold-rgb) / 0) 100%);
}

/* Copy and card side by side from about 1000px, stacked below. */
.v3-hero-inner {
  position: relative;
  width: calc(100% - 2 * var(--gutter));
  max-width: 1200px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: clamp(48px, 6vw, 56px) clamp(32px, 4vw, 56px);
}

.v3-hero-copy {
  flex: 1 1 360px;
  min-width: 0;
  max-width: 680px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: clamp(20px, 2.2vw, 28px);
}

.v3-badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: clamp(32px, 3vw, 34px);
  padding: 0 14px 0 10px;
  border-radius: 999px;
  background: var(--surface);
  border: 1px solid var(--border);
  box-shadow: var(--shadow-card);
  font-size: clamp(11px, .4rem + .6vw, 12px);
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: 0;
  color: var(--ink-2);
}

/* The flag's maple leaf in its red (--maple-red), an exception approved for
   this badge only. On hover, or for a moment after a tap on touch screens
   (.is-waving, v3-home.js), it tilts and grows on a damped spring, and
   springs back after; transitions, so leaving mid-wobble never jumps. */
.v3-badge { -webkit-tap-highlight-color: transparent; }

.v3-badge-leaf {
  display: block;
  width: 18px;
  height: 18px;
  flex: none;
  color: var(--maple-red);
  transform-origin: 50% 80%;
}

@media (prefers-reduced-motion: no-preference) {
  .v3-badge-leaf {
    transition-property: rotate, scale, filter;
    transition-duration: .8s;
    /* A damped spring (overshoots 31%, settles in two wobbles); browsers
       without linear() keep --spring. */
    transition-timing-function: var(--spring);
    transition-timing-function: linear(0, .076, .266, .515, .772, .998, 1.167, 1.27, 1.308, 1.293, 1.238, 1.163, 1.083, 1.011, .956, .92, .905, .908, .923, .945, .97, .993, 1.011, 1.023, 1.029, 1.029, 1.025, 1.018, 1.01, 1.003, .997, .993, 1);
  }
  .v3-badge.is-waving .v3-badge-leaf {
    rotate: -14deg;
    scale: 1.22;
    filter: drop-shadow(0 2px 3px rgb(var(--maple-red-rgb) / .3));
  }
}

@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  .v3-badge:hover .v3-badge-leaf {
    rotate: -14deg;
    scale: 1.22;
    filter: drop-shadow(0 2px 3px rgb(var(--maple-red-rgb) / .3));
  }
}

.v3-hero-title {
  font-size: clamp(2.75rem, 5.6vw, 5rem);
  line-height: 1;
  font-weight: 700;
  letter-spacing: -.04em;
  color: var(--ink);
}

.v3-hero-lead { max-width: 580px; }

.v3-hero-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px 28px;
  width: 100%;
  margin-top: 4px;
}

.v3-hero-actions .v3-link { min-height: 44px; }

/* ------------------------------------------------------ approval card */

/* Tilted: the card -3°, the glass card behind it offset and turned 2°.
   A mouse straightens them (not under reduced motion). */
.v3-approval {
  --tilt: -3deg;
  --back-shift: translate(30px, 26px);
  position: relative;
  flex: 0 1 460px;
  min-width: 0;
  max-width: 100%;
  -webkit-tap-highlight-color: transparent;
}

.v3-approval-back {
  position: absolute;
  inset: 0;
  border-radius: 24px;
  background: rgb(var(--white-rgb) / .66);
  border: 1px solid rgb(var(--white-rgb) / .95);
  box-shadow: var(--shadow-card);
  transform: var(--back-shift) rotate(2deg);
  transition: transform .3s var(--ease);
}

.v3-approval-card {
  position: relative;
  border-radius: 24px;
  background: var(--surface);
  box-shadow: var(--shadow-float);
  padding: clamp(22px, 2.4vw, 28px);
  display: flex;
  flex-direction: column;
  gap: clamp(14px, 1.6vw, 18px);
  transform: rotate(var(--tilt));
  transition: transform .3s var(--ease);
}

@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  .v3-approval:hover .v3-approval-card { transform: rotate(0deg); }
  .v3-approval:hover .v3-approval-back { transform: var(--back-shift) rotate(1deg); }
}

.v3-approval-label {
  font-size: 12px;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: 0;
  color: var(--text-2);
}

.v3-approval-label span { color: var(--accent); white-space: nowrap; }

.v3-approval-title {
  font-family: var(--heading);
  font-size: clamp(1.75rem, 2.6vw, 2.125rem);
  line-height: 1.1;
  font-weight: 700;
  letter-spacing: -.03em;
  color: var(--ink);
}

.v3-approval-title em { color: var(--accent); }

.v3-approval-amount {
  border-radius: 16px;
  background: var(--ink);
  padding: clamp(18px, 2vw, 22px) clamp(20px, 2.2vw, 24px) clamp(16px, 1.8vw, 20px);
}

.v3-approval-amount-label {
  font-size: 12px;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: 0;
  color: var(--on-navy-accent);
}

.v3-approval-amount-row {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-top: 10px;
}

.v3-approval-amount-value {
  font-family: var(--heading);
  font-size: clamp(2.75rem, 4.4vw, 3.5rem);
  line-height: 1;
  font-weight: 700;
  letter-spacing: -.04em;
  color: var(--on-navy);
}

/* sage-300: slate-500 fails contrast on navy. */
.v3-approval-amount-cur {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--on-navy-2);
}

.v3-approval-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding: 0;
  list-style: none;
}

.v3-approval-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 26px;
  padding: 4px 12px;
  border-radius: 999px;
  background: var(--zone);
  color: var(--accent);
  font-size: 12px;
  font-weight: 600;
  line-height: 1.3;
}

/* Party emoji over the card (v3-home.js), an exception approved for this
   card only. They move by Web Animations, transform and opacity only, so
   the compositor runs them; here they only wait, hidden, at the top. Never
   under reduced motion. */
.v3-approval-confetti {
  position: absolute;
  top: -8%;
  bottom: -6%;
  left: -4%;
  right: -4%;
  z-index: 3;
  pointer-events: none;
}

.v3-approval-confetti > span {
  position: absolute;
  top: -6%;
  line-height: 1;
  opacity: 0;
  will-change: transform, opacity;
}

@media (prefers-reduced-motion: reduce) {
  .v3-approval-confetti { display: none; }
}

/* ------------------------------------------------------------- pillars */

/* Two white cards, pulled up over the hero's bottom edge. */
.v3-pillars {
  position: relative;
  z-index: 2;
  width: min(1200px, 100% - 2 * var(--gutter));
  margin: calc(-1 * clamp(72px, 7vw, 88px)) auto 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 440px), 1fr));
  gap: 16px;
}

.v3-pillar {
  border-radius: 20px;
  background: var(--surface);
  box-shadow: var(--shadow-card);
  padding: clamp(24px, 2.4vw, 28px);
  display: flex;
  flex-direction: column;
}

.v3-pillar-title {
  margin-top: 10px;
  font-size: clamp(1.375rem, 2.2vw, 1.75rem);
  line-height: 1.25;
  font-weight: 600;
  letter-spacing: -.02em;
  color: var(--ink);
}

/* Stat tiles: flat, the figure above its label; rows on phones. */
.v3-stats {
  margin-top: clamp(20px, 2.4vw, 28px);
  padding: 0;
  list-style: none;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}

.v3-stat {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: clamp(12px, 1.4vw, 16px);
  border-radius: 12px;
  background: var(--band);
}

.v3-stat-figure {
  font-family: var(--heading);
  font-size: clamp(1.5rem, 1rem + 1.2vw, 2rem);
  line-height: 1;
  font-weight: 700;
  letter-spacing: -.03em;
  color: var(--accent);
  white-space: nowrap;
}

.v3-stat-label {
  font-size: clamp(.8125rem, .7rem + .3vw, .875rem);
  line-height: 1.45;
  color: var(--text-2);
}

.v3-small-title {
  font-size: clamp(1.125rem, 1.4vw, 1.25rem);
  line-height: 1.3;
  font-weight: 600;
  letter-spacing: -.01em;
  color: var(--ink);
}

/* ------------------------------------------------------------ sections */

.v3-section {
  position: relative;
  width: min(1200px, 100% - 2 * var(--gutter));
  margin: var(--rhythm) auto 0;
  scroll-margin-top: 96px;
}

/* A full-width tinted band (calculator, FAQ): its own padding clears the nav. */
.v3-band {
  position: relative;
  margin-top: var(--rhythm);
  padding: var(--rhythm) 0;
  background: var(--band);
}

/* Extra in-page anchors kept from the live page (#pilot, #faq-loans…). */
.v3-anchor-alias {
  position: absolute;
  top: 0;
  left: 0;
  width: 0;
  height: 0;
  scroll-margin-top: 96px;
  pointer-events: none;
}

.v3-band .v3-anchor-alias { scroll-margin-top: 0; }

/* Section heads: kicker, headline and lead in one column. */
.v3-head {
  max-width: 1100px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.v3-head .v3-lead { max-width: 720px; }
.v3-head--narrow { max-width: 820px; }

.v3-head--center {
  margin: 0 auto;
  align-items: center;
  text-align: center;
}

/* The "From the blog" head (server/home-blog.js): headline left, lead and
   link right. */
.v3-section-head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 460px);
  gap: 48px;
  align-items: end;
}

.v3-section-head-main {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.v3-section-head-main .v3-h2 { max-width: 620px; }

.v3-section-head-side {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 24px;
}

.v3-statement {
  font-size: clamp(1.75rem, 2.8vw, 2.5rem);
  line-height: 1.12;
  font-weight: 700;
  letter-spacing: -.03em;
  color: var(--ink);
}

/* -------------------------------------------------------- how it works */

.v3-seg--how { margin-top: 12px; max-width: 100%; }
.v3-seg--how .v3-seg-opt { padding: 0 clamp(14px, 1.6vw, 20px); }

/* A panel a segmented control has just shown fades in (how it works, FAQ). */
.is-entering { animation: v3-panel-in .15s ease-out; }

@keyframes v3-panel-in { from { opacity: 0; } to { opacity: 1; } }

.v3-how-panel { margin-top: clamp(40px, 4.4vw, 56px); }

/* Four across on desktop, 2×2 on tablets, one column on phones. */
.v3-steps {
  padding: 0;
  list-style: none;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 16px;
}

.v3-step {
  border-radius: 20px;
  background: var(--surface);
  padding: clamp(24px, 2.4vw, 28px);
  box-shadow: var(--shadow-card);
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.v3-step-num {
  width: 36px;
  height: 36px;
  flex: none;
  border-radius: 50%;
  background: var(--zone);
  color: var(--accent);
  font-size: 13px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
}

.v3-step-text {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.v3-footnote {
  max-width: 720px;
  margin: 24px auto 0;
  text-align: center;
  font-size: 14px;
  line-height: 1.5;
  color: var(--text-2);
}

/* The request card, below the steps on both tabs. */
.v3-request {
  max-width: 600px;
  margin: clamp(32px, 4vw, 48px) auto 0;
  border-radius: 20px;
  background: var(--surface);
  box-shadow: var(--shadow-card);
  padding: clamp(20px, 2.4vw, 28px);
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.v3-request-copy {
  font-size: 15px;
  line-height: 1.55;
  color: var(--ink-2);
}

/* The field takes the row; on narrow screens the button wraps below it. */
.v3-request-form {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}

.v3-field {
  flex: 999 1 220px;
  min-width: 0;
  height: 48px;
  margin: 0;
  padding: 0 16px;
  border-radius: 12px;
  border: 1.5px solid var(--text-3);
  background: var(--surface);
  font: inherit;
  font-size: 16px;
  color: var(--ink-2);
  transition: border-color .2s var(--ease);
}

.v3-field::placeholder { color: var(--text-2); opacity: 1; }
.v3-field:focus { outline: none; }
.v3-field:focus-visible { border-color: var(--accent); outline: 2px solid var(--focus); outline-offset: 3px; }

.v3-field:disabled {
  background: var(--tray);
  border-color: rgb(var(--navy-rgb) / .12);
  color: var(--text-2);
}

.v3-request-send { flex: 1 1 auto; }

.v3-request-send:disabled {
  opacity: .55;
  cursor: default;
  transform: none;
  background-color: var(--accent);
  box-shadow: var(--shadow-btn);
}

.v3-request-send:disabled::after { display: none; }

/* What happened after "Send the package". Empty, it stays in the
   accessibility tree (so the live region is heard) but out of the flow. */
.v3-request-status {
  font-size: 14px;
  line-height: 1.5;
  color: var(--text-2);
  overflow-wrap: anywhere;
}

.v3-request-status.is-error { color: var(--brick-600); }

.v3-request-status:empty {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
}

/* ---------------------------------------------------------- calculator */

/* One white card: the controls, and the navy summary inside it. */
.v3-calc {
  margin-top: clamp(40px, 4.4vw, 56px);
  border-radius: clamp(24px, 3vw, 28px);
  background: var(--surface);
  box-shadow: var(--shadow-card);
  padding: clamp(20px, 3.4vw, 40px);
  display: flex;
  flex-wrap: wrap;
  gap: clamp(28px, 3vw, 40px);
}

.v3-calc-input {
  flex: 1 1 380px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: clamp(28px, 3vw, 36px);
}

.v3-calc-label {
  display: block;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.4;
  color: var(--ink);
}

.v3-calc-amount-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 16px;
}

.v3-calc-amount {
  font-size: 15px;
  font-weight: 600;
  line-height: 1.4;
  color: var(--accent);
}

/* The native range input is the real control; track, fill and thumb are drawn. */
.v3-slider {
  --f: .2857143;
  position: relative;
  height: 28px;
  margin-top: 16px;
}

.v3-slider-track,
.v3-slider-fill {
  position: absolute;
  left: 0;
  top: 10px;
  height: 8px;
  border-radius: 999px;
}

.v3-slider-track { right: 0; background: var(--tray); }
.v3-slider-fill { width: calc(14px + var(--f) * (100% - 28px)); background: var(--accent); }

.v3-slider-thumb {
  position: absolute;
  top: 0;
  left: calc(var(--f) * (100% - 28px));
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--surface);
  border: 3px solid var(--accent);
  box-shadow: var(--shadow-thumb);
  pointer-events: none;
  transition: transform .15s var(--ease), box-shadow .15s var(--ease);
}

.v3-slider-input {
  position: absolute;
  inset: 0;
  z-index: 2;
  width: 100%;
  height: 28px;
  margin: 0;
  padding: 0;
  opacity: 0;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  background: transparent;
  -webkit-tap-highlight-color: transparent;
}

/* Size the native thumb like the drawn one so both travel the same distance. */
.v3-slider-input::-webkit-slider-runnable-track { height: 28px; background: transparent; border: 0; }
.v3-slider-input::-webkit-slider-thumb { -webkit-appearance: none; width: 28px; height: 28px; border: 0; border-radius: 50%; background: transparent; }
.v3-slider-input::-moz-range-track { height: 28px; background: transparent; border: 0; }
.v3-slider-input::-moz-range-thumb { width: 28px; height: 28px; border: 0; border-radius: 50%; background: transparent; }

.v3-slider-input:focus-visible { outline: none; }
.v3-slider-input:focus-visible ~ .v3-slider-thumb { outline: 2px solid var(--focus); outline-offset: 3px; }

@media (hover: hover) and (pointer: fine) {
  .v3-slider:hover .v3-slider-thumb { transform: scale(calc(1 + .08 * var(--m))); }
}

.v3-slider.is-dragging .v3-slider-thumb {
  transform: scale(calc(1 + .15 * var(--m)));
  box-shadow: 0 0 0 6px rgb(var(--teal-rgb) / .18), var(--shadow-thumb);
}

.v3-slider-scale {
  display: flex;
  justify-content: space-between;
  margin-top: 10px;
  font-size: 13px;
  font-weight: 500;
  color: var(--text-2);
}

/* Segmented controls that span their column, options of equal width. */
.v3-seg--fill { display: flex; width: 100%; margin-top: 14px; }

.v3-seg--fill .v3-seg-opt {
  flex: 1 1 0;
  min-width: 0;
  height: auto;
  min-height: 40px;
  padding: 0 4px;
}

/* "0% — interest-free within 29 days" wraps on narrow screens. */
.v3-seg--apr .v3-seg-opt { padding: 8px 12px; line-height: 1.25; white-space: normal; }

.v3-notice {
  display: flex;
  gap: 14px;
  align-items: flex-start;
  padding: 18px 20px;
  border-radius: 16px;
  background: var(--zone);
}

.v3-notice .v3-i { margin-top: 1px; color: var(--accent); }

.v3-notice p {
  font-size: 15px;
  line-height: 1.55;
  color: var(--ink-2);
}

.v3-notice strong { font-weight: 600; color: var(--ink); }

/* The navy summary: flat inside the card, a still gold glow top right. */
.v3-calc-result {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  flex: 1 1 380px;
  min-width: 0;
  border-radius: 20px;
  background: var(--ink);
  padding: clamp(24px, 3vw, 32px);
  color: var(--on-navy);
  display: flex;
  flex-direction: column;
}

.v3-calc-result-glow {
  position: absolute;
  top: -180px;
  right: -180px;
  width: 460px;
  height: 460px;
  border-radius: 50%;
  background: radial-gradient(closest-side, rgb(var(--gold-rgb) / .4), rgb(var(--gold-rgb) / 0));
  filter: blur(30px);
  pointer-events: none;
}

.v3-calc-result-top { position: relative; }

.v3-calc-pay-label {
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  color: var(--on-navy-2);
}

.v3-calc-pay {
  margin-top: 12px;
  font-family: var(--heading);
  font-size: clamp(2.25rem, 7vw, 3.5rem);
  line-height: 1;
  font-weight: 700;
  letter-spacing: -.04em;
  color: var(--on-navy);
  white-space: nowrap;
}

.v3-calc-pay-sub {
  margin-top: 12px;
  font-size: 15px;
  line-height: 1.5;
  color: var(--on-navy-2);
}

.v3-calc-rows {
  position: relative;
  margin-top: 28px;
  padding-top: 12px;
  border-top: 1px solid var(--hairline-dark);
  display: flex;
  flex-direction: column;
}

.v3-calc-rows > div {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 16px;
  padding: 10px 0;
  font-size: 15px;
  line-height: 1.4;
}

.v3-calc-rows dt { color: var(--on-navy-2); }
.v3-calc-rows dd { font-weight: 600; color: var(--on-navy); text-align: right; white-space: nowrap; }

.v3-calc-rows > .v3-calc-total { padding: 12px 0 0; }
.v3-calc-total dt { font-size: 16px; font-weight: 600; color: var(--on-navy); }

.v3-calc-total dd {
  font-family: var(--heading);
  font-size: 20px;
  line-height: 1.2;
  font-weight: 700;
  letter-spacing: -.02em;
  color: var(--on-navy-accent);
}

.v3-calc-free {
  position: relative;
  margin-top: 16px;
  font-size: 13px;
  line-height: 1.5;
  color: var(--on-navy);
}

.v3-calc-foot {
  position: relative;
  margin-top: auto;
  padding-top: 20px;
  font-size: 13px;
  line-height: 1.55;
  color: var(--on-navy-3);
}

/* ------------------------------------------------------------------ why */

.v3-why-grid {
  margin-top: clamp(40px, 4.4vw, 56px);
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
}

.v3-why-card {
  border-radius: 20px;
  background: var(--surface);
  padding: clamp(24px, 2.6vw, 32px);
  box-shadow: var(--shadow-card);
  display: flex;
  flex-direction: column;
  gap: 10px;
}

/* ---------------------------------------------------------------- story */

.v3-story {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: clamp(32px, 4.4vw, 56px);
}

.v3-story-img {
  flex: 1 1 400px;
  min-width: 0;
  display: block;
  height: auto;
  aspect-ratio: 4 / 5;
  max-height: 680px;
  object-fit: cover;
  object-position: 50% 30%;
  border-radius: clamp(24px, 3vw, 28px);
  background: var(--tray);
  box-shadow: var(--shadow-float);
}

.v3-story-body {
  flex: 1 1 440px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

/* Two flat panels: without Buffer on the line tint, with it on sage. */
.v3-compare {
  margin-top: 8px;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr));
  gap: 16px;
}

.v3-compare-card {
  border-radius: 20px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.v3-compare-card--without { background: var(--tray); }
.v3-compare-card--with { background: var(--zone); }

.v3-compare-title {
  font-family: var(--sans);
  font-size: 16px;
  line-height: 1.4;
  font-weight: 600;
  color: var(--ink);
}

/* ------------------------------------------------------- from the blog */

/* A featured card, then up to two compact cards beside it (the live
   server's layout, server/home-blog.js). Each card is a single link. */
.v3-blog-preview-side { gap: 20px; }
.v3-blog-preview-side .v3-link { align-self: flex-end; }

.v3-blog-preview-grid {
  margin-top: 56px;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 20px;
}

.v3-blog-preview-more {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.v3-blog-preview-more .v3-blog-card { flex: 1; }

.v3-blog-card {
  border-radius: 20px;
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--ink);
  text-decoration: none;
}

.v3-blog-card--featured {
  display: grid;
  grid-template-columns: 46% minmax(0, 1fr);
  overflow: hidden;
  box-shadow: var(--shadow-card);
}

.v3-blog-card-cover { padding: 12px; }

/* At least 16:10, stretched to the card's height. */
.v3-blog-card-frame {
  position: relative;
  width: 100%;
  min-height: 100%;
  aspect-ratio: 16 / 10;
  border-radius: 16px;
  overflow: hidden;
  background: var(--tray);
}

.v3-blog-card-frame img,
.v3-blog-card-thumb img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.v3-blog-card-frame img { transition: transform var(--dur-base) var(--ease); }

.v3-blog-card-body {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 14px;
  min-width: 0;
  padding: 26px 36px 26px 24px;
}

.v3-blog-card-pills {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.v3-blog-pill {
  display: inline-flex;
  align-items: center;
  height: 26px;
  padding: 0 12px;
  border-radius: 999px;
  background: var(--zone);
  color: var(--accent);
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}

.v3-blog-pill--new {
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--ink-2);
}

.v3-blog-pill--sm { height: 24px; padding: 0 11px; }

/* Titles and excerpts end in an ellipsis, never mid-word. */
.v3-blog-card-title,
.v3-blog-card-excerpt {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  overflow: hidden;
}

.v3-blog-card-title {
  font-size: 28px;
  line-height: 1.25;
  font-weight: 600;
  letter-spacing: -.02em;
  color: var(--ink);
  text-wrap: pretty;
}

.v3-blog-card-excerpt {
  font-size: 16px;
  line-height: 1.6;
  color: var(--text-2);
}

.v3-blog-stat {
  align-self: stretch;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 16px 18px;
  border-radius: 12px;
  background: var(--tray);
}

.v3-blog-stat-row {
  display: flex;
  align-items: center;
  gap: 16px;
}

.v3-blog-stat-value {
  flex: none;
  font-family: var(--heading);
  font-size: 40px;
  line-height: 1;
  font-weight: 700;
  letter-spacing: -.03em;
  color: var(--accent);
}

.v3-blog-stat-label { font-size: 14px; line-height: 1.45; color: var(--ink-2); }
.v3-blog-stat-source { font-size: 12px; line-height: 1.5; color: var(--text-2); }

/* Meta and link settle at the bottom, with or without the stat. */
.v3-blog-card-foot {
  margin-top: auto;
  padding-top: 2px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
}

.v3-blog-card-meta { font-size: 13px; color: var(--text-2); }

.v3-blog-card-read {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
}

.v3-blog-card-read .v3-i { transition: transform var(--dur-base) var(--ease); }

/* Desktop, 2–3 articles: the featured card (≈64%) beside the compact
   cards, which stretch to its height. */
@media (min-width: 1024px) {
  .v3-blog-preview-grid--2,
  .v3-blog-preview-grid--3 { grid-template-columns: minmax(0, 1.78fr) minmax(0, 1fr); }

  .v3-blog-preview-grid--2 .v3-blog-card-body,
  .v3-blog-preview-grid--3 .v3-blog-card-body { padding: 24px 26px 24px 20px; }

  .v3-blog-preview-grid--2 .v3-blog-stat,
  .v3-blog-preview-grid--3 .v3-blog-stat { padding: 14px 16px; }

  .v3-blog-preview-grid--2 .v3-blog-stat-row,
  .v3-blog-preview-grid--3 .v3-blog-stat-row { gap: 14px; }
}

/* Compact: no excerpt or stat, and no shadow until hovered. */
.v3-blog-card--compact {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding: 16px;
}

.v3-blog-card-thumb {
  position: relative;
  flex: none;
  width: 112px;
  height: 112px;
  border-radius: 12px;
  overflow: hidden;
  background: var(--tray);
}

.v3-blog-card-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
  min-width: 0;
  padding-top: 2px;
}

.v3-blog-card--compact .v3-blog-card-title {
  -webkit-line-clamp: 2;
  line-clamp: 2;
  font-size: 18px;
  line-height: 1.35;
  letter-spacing: -.01em;
}

[data-press="card"].is-pressed {
  transform: translateY(0) scale(calc(1 - .01 * var(--m))) !important;
  transition: transform .09s ease-out, box-shadow .09s ease-out !important;
}

@media (hover: hover) and (pointer: fine) {
  .v3-blog-card:hover .v3-blog-card-frame img { transform: scale(calc(1 + .03 * var(--m))); }
  .v3-blog-card:hover .v3-blog-card-read .v3-i { transform: translateX(calc(3px * var(--m))); }
}

/* ------------------------------------------------------------------ faq */

/* One centred column on the band: the intro, then the accordion. */
.v3-faq-wrap {
  width: min(800px, 100% - 2 * var(--gutter));
  margin: 0 auto;
}

.v3-faq-intro {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  text-align: center;
}

.v3-faq-intro .v3-lead { max-width: 620px; }
.v3-faq-intro .v3-link { min-height: 44px; }

.v3-seg--faq { margin-top: 4px; max-width: 100%; }
.v3-seg--faq .v3-seg-opt { padding: 0 22px; }

.v3-faq-lists { margin-top: clamp(32px, 4vw, 48px); }

.v3-faq-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.v3-faq-item {
  border-radius: 20px;
  background: var(--surface);
  box-shadow: var(--shadow-card);
  cursor: pointer;
}

.v3-faq-h { font: inherit; }

.v3-faq-q {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: clamp(16px, 2vw, 24px);
  width: 100%;
  padding: clamp(18px, 1.8vw, 22px) clamp(20px, 2.4vw, 28px);
  border: 0;
  border-radius: 20px;
  background: none;
  text-align: left;
  font-size: clamp(1rem, 1.3vw, 1.125rem);
  font-weight: 600;
  line-height: 1.35;
  color: var(--ink);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

.v3-faq-icon {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: none;
  background: var(--tray);
  color: var(--ink);
  transition: transform var(--dur-base) var(--ease), background-color var(--dur-base) var(--ease), color var(--dur-base) var(--ease);
}

.v3-faq-item.is-open .v3-faq-icon {
  background: var(--ink);
  color: var(--on-navy);
  transform: rotate(45deg);
}

/* Height + fade: the answer grid animates 0fr -> 1fr. */
.v3-faq-a {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  visibility: hidden;
  transition: grid-template-rows var(--dur-slow) var(--ease), opacity var(--dur-slow) var(--ease), visibility 0s linear var(--dur-slow);
}

.v3-faq-item.is-open .v3-faq-a {
  grid-template-rows: 1fr;
  opacity: 1;
  visibility: visible;
  transition: grid-template-rows var(--dur-slow) var(--ease), opacity var(--dur-slow) var(--ease), visibility 0s;
}

/* Without JavaScript the accordion cannot open, so show every answer. */
.v3-no-js .v3-faq-a { grid-template-rows: 1fr; opacity: 1; visibility: visible; }

.v3-faq-a-inner { min-height: 0; overflow: hidden; }

.v3-faq-a-body {
  max-width: 680px;
  padding: 0 clamp(20px, 2.4vw, 28px) clamp(18px, 1.8vw, 22px);
  display: flex;
  flex-direction: column;
  gap: 12px;
  cursor: auto;
}

.v3-faq-a-body p {
  font-size: 16px;
  line-height: 1.6;
  color: var(--text-2);
}

/* Draw the focus ring around the whole card rather than the question row. */
@supports selector(:has(*)) {
  .v3-faq-q:focus-visible { outline: none; }
  .v3-faq-item:has(.v3-faq-q:focus-visible) { outline: 2px solid var(--focus); outline-offset: 3px; }
}

@media (prefers-reduced-motion: reduce) {
  .v3-faq-a, .v3-faq-item.is-open .v3-faq-a, .v3-faq-icon { transition: none; }
}

/* ------------------------------------------------------------------ cta */

.v3-cta-panel {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  border-radius: 28px;
  background: var(--ink);
  padding: 80px 72px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 440px);
  gap: 64px;
  align-items: center;
  box-shadow: var(--shadow-float);
}

.v3-cta-panel .v3-glow-cta {
  --t: .6;
  bottom: -260px;
  left: -200px;
  width: 640px;
  height: 640px;
  background: radial-gradient(circle closest-side, rgb(var(--teal-rgb) / .6) 0%, rgb(var(--teal-rgb) / .3) 45%, rgb(var(--teal-rgb) / 0) 100%);
  animation: v3-driftA 23s var(--drift) -12s infinite;
}

.v3-cta-title { position: relative; max-width: 560px; color: var(--on-navy); }

.v3-cta-side {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 28px;
}

.v3-cta-text {
  position: relative;
  font-size: 17px;
  line-height: 1.6;
  color: var(--on-navy-2);
}

/* ------------------------------------------------------- 768–1023: tablet */

@media (max-width: 1023px) {
  .v3-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }

  /* from the blog: the head in one column, the cover above the text, so it
     keeps its 16:10 crop */
  .v3-section-head { display: block; }
  .v3-section-head-main { gap: 12px; }
  .v3-section-head-side { margin-top: 16px; }
  .v3-blog-preview-side .v3-link { align-self: flex-start; }
  .v3-blog-preview-grid--3 .v3-blog-preview-more { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .v3-blog-card--featured { display: flex; flex-direction: column; }
  .v3-blog-card-cover { padding: 12px 12px 0; }
  .v3-blog-card-frame { min-height: 0; }
  .v3-blog-card-body { padding: 24px 28px 28px; }

  .v3-cta-panel { grid-template-columns: minmax(0, 1fr); gap: 28px; padding: 64px 56px; }
}

/* ------------------------------------------------------------ < 768 */

@media (max-width: 767px) {
  /* hero */
  .v3-hero-glow-a { top: -140px; left: -100px; width: 440px; height: 440px; }
  .v3-hero-glow-b { top: 300px; right: -160px; width: 480px; height: 480px; }
  .v3-hero-glow-c { display: none; }
  .v3-hero-glow-d { top: 480px; left: -40px; width: 400px; height: 400px; }

  .v3-badge-leaf { width: 16px; height: 16px; }

  /* The primary call goes full width; the row is centred. */
  .v3-hero-actions { justify-content: center; }
  .v3-hero-actions .v3-btn { width: 100%; }

  .v3-approval { --tilt: -2deg; --back-shift: translate(10px, 14px); }
  .v3-approval-back { transform: var(--back-shift) rotate(1.5deg); }

  /* pillars: each stat tile becomes a row, figure left */
  .v3-stats { grid-template-columns: minmax(0, 1fr); }
  .v3-stat { flex-direction: row; align-items: center; gap: 14px; }
  .v3-stat-figure { flex: none; min-width: 5.25rem; }

  /* how it works */
  .v3-steps { grid-template-columns: minmax(0, 1fr); }

  /* why */
  .v3-why-grid { grid-template-columns: minmax(0, 1fr); }

  /* from the blog */
  .v3-blog-preview-grid { margin-top: 24px; gap: 12px; }
  .v3-blog-preview-more,
  .v3-blog-preview-grid--3 .v3-blog-preview-more { display: flex; flex-direction: column; gap: 12px; }
  .v3-blog-card-body { padding: 20px; }
  .v3-blog-card-title { font-size: 22px; }
  .v3-blog-stat { padding: 14px 16px; }
  .v3-blog-stat-row { gap: 14px; }
  .v3-blog-card-foot { margin-top: 0; padding-top: 0; gap: 14px; }
  .v3-blog-card--compact { gap: 14px; padding: 14px; }
  .v3-blog-card-thumb { width: 88px; height: 88px; }
  .v3-blog-card-text { gap: 8px; padding-top: 0; }

  /* cta */
  .v3-cta-panel {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 20px;
    padding: 40px 24px;
    border-radius: 24px;
  }

  .v3-cta-panel .v3-glow-cta { bottom: -200px; left: -160px; width: 460px; height: 460px; }
  .v3-cta-side { display: contents; }
  .v3-cta-text { font-size: 16px; }
  .v3-cta-panel .v3-btn { margin-top: 8px; }
}

/* Very narrow phones: the audience tabs split the row, so they never
   outgrow it (at 320px the pill has 2px to spare). */
@media (max-width: 359px) {
  .v3-seg--how { display: grid; grid-template-columns: 1fr 1fr; width: 100%; }
  .v3-seg--how .v3-seg-opt { padding: 0 8px; }
}

/* ---------------------------------------------------- Book-a-call modal */

.v3-bc-root {
  position: fixed;
  inset: 0;
  z-index: 1000;
  font-family: var(--sans);
  font-variant-numeric: normal;
  color: var(--ink);
}

.v3-bc-backdrop {
  position: absolute;
  inset: 0;
  background: rgb(var(--navy-rgb) / .4);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  animation: v3-bc-fade-in .2s ease-out;
}

.v3-bc-root[data-closing] .v3-bc-backdrop { animation: v3-bc-fade-out .2s ease-out forwards; }

.v3-bc-guard { position: absolute; width: 1px; height: 1px; overflow: hidden; }

/* desktop dialog */
.v3-bc-center {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  pointer-events: none;
}

.v3-bc-dialog {
  position: relative;
  pointer-events: auto;
  width: 1040px;
  max-width: 100%;
  height: min(760px, 92vh);
  height: min(760px, 92dvh);
  border-radius: 28px;
  background: var(--surface);
  overflow: hidden;
  box-shadow: var(--shadow-float);
  display: grid;
  grid-template-columns: 380px minmax(0, 1fr);
  animation: v3-bc-dialog-in var(--dur-slow) var(--ease);
}

.v3-bc-root[data-closing] .v3-bc-dialog { animation: v3-bc-dialog-out .2s var(--ease) forwards; }

.v3-bc-side {
  position: relative;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-width: none;
  isolation: isolate;
  background: var(--ink);
  padding: 40px 36px 32px;
  display: flex;
  flex-direction: column;
  color: var(--on-navy);
}

.v3-bc-side::-webkit-scrollbar { display: none; }

.v3-bc-glow {
  --t: .6;
  top: -200px;
  right: -220px;
  width: 520px;
  height: 520px;
  background: radial-gradient(circle closest-side, rgb(var(--gold-rgb) / .4) 0%, rgb(var(--gold-rgb) / .2) 45%, rgb(var(--gold-rgb) / 0) 100%);
  animation: v3-driftA 26s var(--drift) -7s infinite;
}

.v3-bc-side-main {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.v3-bc-eyebrow {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--on-navy-accent);
}

.v3-bc-title {
  font-family: var(--heading);
  font-size: 36px;
  line-height: 1.08;
  font-weight: 700;
  letter-spacing: -.035em;
  color: var(--on-navy);
}

.v3-bc-title em {
  letter-spacing: -.02em;
  color: var(--on-navy-accent);
}

/* 85% rather than the drawn 72%: the card's gold glow drifts behind this
   text and took .72 to 4.4:1 on phones. */
.v3-bc-text {
  font-size: 15px;
  line-height: 1.6;
  color: rgb(var(--warm-white-rgb) / .85);
}

.v3-bc-label {
  margin-top: 8px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--on-navy-3);
}

.v3-bc-cover {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 0;
  list-style: none;
}

.v3-bc-cover li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: 15px;
  line-height: 1.5;
  color: var(--on-navy);
}

.v3-bc-cover .v3-i { margin-top: 2px; color: var(--on-navy-accent); }

.v3-bc-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 4px;
  padding: 0;
  list-style: none;
}

.v3-bc-chip {
  height: 30px;
  padding: 0 12px;
  border-radius: 999px;
  background: rgb(var(--warm-white-rgb) / .08);
  border: 1px solid rgb(var(--warm-white-rgb) / .12);
  font-size: 13px;
  font-weight: 600;
  color: var(--on-navy);
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
}

.v3-bc-side-foot {
  position: relative;
  margin-top: auto;
  padding-top: 28px;
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.v3-bc-host { display: flex; align-items: center; gap: 12px; }

.v3-bc-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: var(--accent);
  color: var(--on-navy);
  font-size: 16px;
  font-weight: 600;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: none;
}

.v3-bc-host-text { display: flex; flex-direction: column; gap: 2px; }
.v3-bc-host-name { font-size: 14px; font-weight: 600; color: var(--on-navy); }
.v3-bc-host-role { font-size: 13px; color: var(--on-navy-2); }

.v3-bc-note {
  font-size: 13px;
  line-height: 1.5;
  color: var(--on-navy-3);
}

.v3-bc-main {
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
}

.v3-bc-head {
  padding: 28px 76px 14px 32px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.v3-bc-head-title { font-size: 17px; font-weight: 600; color: var(--ink); }
.v3-bc-head-sub { font-size: 13px; color: var(--text-2); }

.v3-bc-stage {
  position: relative;
  flex: 1;
  min-height: 0;
  min-width: 320px;
}

.v3-bc-mount { position: absolute; inset: 0; min-width: 320px; }
.v3-bc-mount iframe { display: block; width: 100%; height: 100%; border: 0; }

/* The dialog was opened on a wide screen that has since narrowed (a phone
   rotated to portrait, split view): drop the navy panel so the calendar
   keeps the whole width. The dialog keeps its name from the hidden title. */
@media (max-width: 767px) {
  .v3-bc-center { padding: 12px; }
  .v3-bc-dialog { grid-template-columns: minmax(0, 1fr); }
  .v3-bc-side { display: none; }
  .v3-bc-dialog .v3-bc-stage,
  .v3-bc-dialog .v3-bc-mount { min-width: 0; }
}

.v3-bc-close {
  position: absolute;
  top: 16px;
  right: 16px;
  z-index: 3;
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--ink);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

/* loading skeleton */
.v3-bc-skeleton {
  position: absolute;
  inset: 0;
  z-index: 1;
  padding: 6px 32px 24px;
  background: var(--surface);
  display: grid;
  grid-template-columns: minmax(0, 1fr) 200px;
  gap: 28px;
  pointer-events: none;
  transition: opacity .2s ease-out;
}

.v3-bc-skel-cal { display: flex; flex-direction: column; gap: 18px; }
.v3-bc-skel-bar { display: flex; justify-content: space-between; align-items: center; }
.v3-bc-skel-month { width: 160px; height: 20px; border-radius: 6px; }
.v3-bc-skel-arrows { display: flex; gap: 8px; }
.v3-bc-skel-arrows span { width: 28px; height: 28px; border-radius: 50%; }
.v3-bc-skel-days { display: grid; grid-template-columns: repeat(7, 1fr); row-gap: 8px; }
.v3-bc-skel-days span { display: flex; justify-content: center; }
.v3-bc-skel-days i { display: block; width: 36px; height: 36px; border-radius: 50%; }
.v3-bc-skel-times { display: flex; flex-direction: column; gap: 12px; padding-top: 40px; }
.v3-bc-skel-times span { height: 46px; border-radius: 12px; }

/* Too narrow for the calendar and the times side by side (a tablet in
   portrait, a narrowed window): stack them, as the phone sheet does. */
.v3-bc-stage { container-type: inline-size; }

@container (max-width: 579px) {
  .v3-bc-skeleton { display: flex; flex-direction: column; gap: 18px; }
  .v3-bc-skel-times { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding-top: 0; }
}

.v3-bc-shimmer {
  background: linear-gradient(90deg, var(--tray) 25%, var(--warm-white) 50%, var(--tray) 75%);
  background-size: 200% 100%;
  animation: v3-bc-shimmer 1.4s linear infinite;
}

/* booked / fallback */
.v3-bc-state {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px;
}

.v3-bc-state-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 18px;
  max-width: 380px;
}

.v3-bc-fallback .v3-bc-state-inner { max-width: 400px; }

.v3-bc-check {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: var(--zone);
  color: var(--accent);
  display: flex;
  align-items: center;
  justify-content: center;
}

.v3-bc-check .v3-i {
  stroke-dasharray: 24;
  stroke-dashoffset: 24;
  animation: v3-bc-draw .5s var(--ease) .1s forwards;
}

/* Focused by script so screen readers announce the new state; not a control. */
.v3-bc-state-title:focus { outline: none; animation: none; }

.v3-bc-state-title {
  font-family: var(--heading);
  font-size: 32px;
  line-height: 1.1;
  font-weight: 700;
  letter-spacing: -.03em;
  color: var(--ink);
}

.v3-bc-state-title em { color: var(--accent); }

.v3-bc-state-text {
  font-size: 16px;
  line-height: 1.6;
  color: var(--text-2);
}

.v3-bc-done { margin-top: 6px; padding: 0 28px; }

.v3-bc-small {
  font-size: 13px;
  line-height: 1.5;
  color: var(--text-2);
}

.v3-bc-warn {
  width: 48px;
  height: 48px;
  border-radius: 12px;
  background: var(--amber-100);
  color: var(--amber-700);
  display: flex;
  align-items: center;
  justify-content: center;
}

.v3-bc-fallback .v3-bc-state-title { font-size: 24px; line-height: 1.15; }
.v3-bc-fallback .v3-bc-state-text { font-size: 15px; }
.v3-bc-fallback .v3-btn { margin-top: 6px; gap: 8px; }

.v3-bc-retry {
  display: inline-flex;
  align-items: center;
  height: 44px;
  padding: 0;
  border: 0;
  background: none;
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
  cursor: pointer;
}

/* The ghost underline sits under the text, not under the 44px hit area. */
.v3-bc-retry[data-ghost]::after { bottom: 10px; }

/* which view is showing */
.v3-bc-root:not([data-view="loading"]):not([data-view="loaded"]) .v3-bc-mount,
.v3-bc-root:not([data-view="loading"]):not([data-view="loaded"]) .v3-bc-skeleton,
.v3-bc-root[data-skeleton-done] .v3-bc-skeleton,
.v3-bc-root:not([data-view="booked"]) .v3-bc-booked,
.v3-bc-root:not([data-view="fallback"]) .v3-bc-fallback { display: none; }

.v3-bc-root[data-view="loaded"] .v3-bc-skeleton { opacity: 0; }

/* mobile sheet */
.v3-bc-sheet-wrap {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: max(12px, env(safe-area-inset-top));
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  animation: v3-bc-sheet-in .38s var(--sheet);
}

.v3-bc-root[data-closing] .v3-bc-sheet-wrap { animation: v3-bc-sheet-out .2s var(--sheet) forwards; }

/* Closed by dragging: the sheet carries on from where the finger let go. */
.v3-bc-root[data-drag-close] .v3-bc-sheet-wrap { animation: none !important; }

.v3-bc-sheet {
  position: relative;
  width: 100%;
  max-width: 600px;
  height: 100%;
  margin: 0 auto;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  border-radius: 24px 24px 0 0;
  background: var(--surface);
  box-shadow: 0 -20px 60px -30px rgb(var(--navy-rgb) / .4);
  display: flex;
  flex-direction: column;
}

.v3-bc-sheet-top {
  position: sticky;
  top: 0;
  z-index: 3;
  flex: none;
  background: var(--surface);
  border-radius: 24px 24px 0 0;
  touch-action: none;
}

.v3-bc-grab {
  padding: 8px 0 4px;
  display: flex;
  justify-content: center;
  touch-action: none;
  cursor: grab;
}

.v3-bc-grab span {
  width: 40px;
  height: 4px;
  border-radius: 999px;
  background: rgb(var(--navy-rgb) / .16);
}

.v3-bc-sheet-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 4px 8px 8px 20px;
}

.v3-bc-sheet-title { font-size: 17px; font-weight: 600; color: var(--ink); }
.v3-bc-sheet .v3-bc-close { position: static; }

.v3-bc-card {
  position: relative;
  flex: none;
  overflow: hidden;
  isolation: isolate;
  margin: 8px 16px 0;
  border-radius: 20px;
  background: var(--ink);
  padding: 22px;
  color: var(--on-navy);
}

.v3-bc-card .v3-bc-glow { top: -180px; right: -180px; width: 420px; height: 420px; }

.v3-bc-card-main {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.v3-bc-card .v3-bc-eyebrow { font-size: 11px; }
.v3-bc-card .v3-bc-title { font-size: 28px; line-height: 1.1; }
.v3-bc-intro { display: flex; flex-direction: column; gap: 14px; }
.v3-bc-card .v3-bc-text { line-height: 1.55; }
.v3-bc-card .v3-bc-chips { margin-top: 0; }
.v3-bc-card .v3-bc-chip { height: 28px; padding: 0 10px; font-size: 12px; }

.v3-bc-disclosure {
  border-top: 1px solid rgb(var(--warm-white-rgb) / .12);
  padding-top: 4px;
}

.v3-bc-disclosure-btn {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  height: 44px;
  padding: 0;
  border: 0;
  border-radius: 10px;
  background: none;
  font-size: 14px;
  font-weight: 600;
  color: var(--on-navy);
  text-align: left;
  cursor: pointer;
}

.v3-bc-disclosure-btn .v3-i { color: var(--on-navy-accent); transition: transform var(--dur-base) var(--ease); }
.v3-bc-disclosure-btn[aria-expanded="true"] .v3-i { transform: rotate(180deg); }

.v3-bc-card .v3-bc-cover { gap: 10px; padding: 2px 0 8px; }
.v3-bc-card .v3-bc-cover li { gap: 10px; font-size: 14px; }

/* Booked and fallback collapse the navy card to its title. */
.v3-bc-root[data-view="booked"] .v3-bc-card .v3-bc-eyebrow,
.v3-bc-root[data-view="booked"] .v3-bc-intro,
.v3-bc-root[data-view="fallback"] .v3-bc-card .v3-bc-eyebrow,
.v3-bc-root[data-view="fallback"] .v3-bc-intro { display: none; }

.v3-bc-sheet .v3-bc-stage {
  flex: none;
  min-height: 0;
  min-width: 0;
  margin-top: 12px;
}

.v3-bc-sheet .v3-bc-mount {
  position: relative;
  inset: auto;
  width: 100%;
  height: 680px;
}

.v3-bc-sheet .v3-bc-skeleton {
  padding: 8px 16px 0;
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.v3-bc-sheet .v3-bc-skel-month { width: 150px; }
.v3-bc-sheet .v3-bc-skel-times { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding-top: 0; }

.v3-bc-sheet .v3-bc-state { position: static; display: block; padding: 40px 24px 24px; }
.v3-bc-sheet .v3-bc-state-inner { gap: 16px; max-width: none; }
.v3-bc-sheet .v3-bc-booked .v3-bc-state-title { font-size: 30px; }
.v3-bc-sheet .v3-bc-state-text { font-size: 15px; }
.v3-bc-sheet .v3-bc-done,
.v3-bc-sheet .v3-bc-fallback .v3-btn { margin-top: 4px; }

.v3-bc-sheet-foot {
  margin-top: auto;
  flex: none;
  padding: 24px 20px calc(28px + env(safe-area-inset-bottom));
  display: flex;
  flex-direction: column;
  gap: 14px;
  border-top: 1px solid rgb(var(--navy-rgb) / .08);
}

.v3-bc-sheet-foot .v3-bc-host-name { color: var(--ink); }
.v3-bc-sheet-foot .v3-bc-host-role { color: var(--text-2); }
.v3-bc-sheet-foot .v3-bc-note { color: var(--text-2); }

@keyframes v3-bc-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes v3-bc-fade-out { from { opacity: 1; } to { opacity: 0; } }
@keyframes v3-bc-dialog-in { from { opacity: 0; transform: scale(.96) translateY(12px); } to { opacity: 1; transform: none; } }
@keyframes v3-bc-dialog-out { from { opacity: 1; transform: none; } to { opacity: 0; transform: scale(.96) translateY(12px); } }
@keyframes v3-bc-sheet-in { from { transform: translateY(100%); } to { transform: none; } }
@keyframes v3-bc-sheet-out { from { transform: none; } to { transform: translateY(100%); } }
@keyframes v3-bc-shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
@keyframes v3-bc-draw { to { stroke-dashoffset: 0; } }

@media (prefers-reduced-motion: reduce) {
  .v3-bc-dialog,
  .v3-bc-sheet-wrap { animation: v3-bc-fade-in .2s ease-out; }

  .v3-bc-root[data-closing] .v3-bc-dialog,
  .v3-bc-root[data-closing] .v3-bc-sheet-wrap { animation: v3-bc-fade-out .2s ease-out forwards; }

  .v3-bc-shimmer { animation: none; background: var(--tray); }
  .v3-bc-check .v3-i { animation: none; stroke-dashoffset: 0; }
  .v3-bc-disclosure-btn .v3-i { transition: none; }
}
