/* ==========================================================================
   Accessible-hidden utility â€” clips content off-screen instead of
   display:none, so screen readers and crawlers that read the rendered
   accessibility tree (search engines, AI browsing agents) still see it.
   Used for the h1 on ansoegning.html and the semantic comparison table
   that duplicates the .edge-compare visual for machine readers.
   ========================================================================== */
.sr-only{
  position:absolute;
  width:1px; height:1px;
  padding:0; margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}
/* table-layout:auto (the default) ignores width:1px and expands to fit
   cell content, which as a position:absolute box enlarges the page's
   scrollable area even though it's visually clipped. Fixed layout makes
   it actually honor the 1px width. */
table.sr-only{ table-layout:fixed; }

/* ==========================================================================
   Tap Media: Growth Partnership: Design Tokens
   ========================================================================== */
:root{
  --graphite: #0E1013;
  --graphite-soft: #14171B;
  --graphite-card: #1A1E23;
  --limestone: #F3F1EC;
  --limestone-card: #FFFFFF;
  --limestone-line: rgba(14,16,19,0.10);
  --ink: #14171B;
  --ink-soft: #565B62;
  --ink-faint: #8A8F97;
  --on-dark: #F3F1EC;
  --on-dark-soft: #A6ABB3;
  --signal-blue: #4A63F0;
  --signal-blue-dim: #3C50C4;
  --warm-metal: #C9A876;

  --radius-lg: 28px;
  --radius-md: 20px;
  --radius-sm: 14px;
  --radius-pill: 999px;

  --container: 1180px;
  --container-narrow: 760px;

  --ease: cubic-bezier(.22,.61,.36,1);
  --dur-fast: .25s;
  --dur-med: .4s;
  --dur-slow: .6s;

  --shadow-card: 0 2px 4px rgba(14,16,19,0.05), 0 18px 40px -14px rgba(14,16,19,0.18);
  --shadow-lift: 0 24px 70px -18px rgba(14,16,19,0.4);

  --icon-blue-bg: #E4E9FF;
  --icon-blue-fg: #3C50C4;
  --icon-metal-bg: #F5EBDB;
  --icon-metal-fg: #8A6A32;
  --icon-green-bg: #DDF3E4;
  --icon-green-fg: #1F7A45;
}

*,*::before,*::after{ box-sizing:border-box; }
html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; text-size-adjust:100%; }
a,button{ -webkit-tap-highlight-color:transparent; }
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{ animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important; scroll-behavior:auto !important; }
}

body{
  margin:0;
  background:var(--limestone);
  color:var(--ink);
  font-family:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  font-size:16px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  background-image:
    radial-gradient(circle at 1px 1px, rgba(14,16,19,0.05) 1px, transparent 0);
  background-size: 28px 28px;
}

.cursor-glow{
  position:fixed;
  inset:0;
  z-index:-1;
  pointer-events:none;
  opacity:0;
  transition:opacity .4s ease;
  background-image:radial-gradient(circle at 1px 1px, rgba(208,95,59,.85) 1.6px, transparent 0);
  background-size:18px 18px;
  background-position:0 0;
  -webkit-mask-image:radial-gradient(140px circle at var(--mx,50vw) var(--my,25vh), #000 0%, transparent 78%);
  mask-image:radial-gradient(140px circle at var(--mx,50vw) var(--my,25vh), #000 0%, transparent 78%);
}
.cursor-glow.is-active{ opacity:1; }
@media (prefers-reduced-motion: reduce){
  .cursor-glow{ display:none; }
}

img,svg{ display:block; max-width:100%; }
a{ color:inherit; text-decoration:none; }
ul{ margin:0; padding:0; list-style:none; }
h1,h2,h3,h4,p{ margin:0; }
button{ font-family:inherit; }

.container{ max-width:var(--container); margin:0 auto; padding:0 32px; }
.container-narrow{ max-width:var(--container-narrow); }

::selection{ background:var(--signal-blue); color:#fff; }

:focus-visible{
  outline:2px solid var(--signal-blue);
  outline-offset:3px;
  border-radius:6px;
}

/* ==========================================================================
   Reveal-on-scroll
   ========================================================================== */
[data-reveal]{
  opacity:0;
  transform:translateY(32px) scale(0.985);
  transition:opacity .85s cubic-bezier(.16,.8,.24,1), transform .85s cubic-bezier(.16,.8,.24,1);
  transition-delay:calc(var(--reveal-delay, 0) * 70ms);
  will-change:opacity, transform;
}
[data-reveal].is-visible{
  opacity:1;
  transform:translateY(0) scale(1);
}
.process-row[data-reveal]{
  transform:translateY(40px) scale(0.97);
  transition:opacity 1s cubic-bezier(.16,.8,.24,1), transform 1s cubic-bezier(.16,.8,.24,1);
}
.process-row[data-reveal].is-visible{
  transform:translateY(0) scale(1);
}
.edge-vs[data-reveal]{
  transform:translate(-50%,-50%) translateY(20px) scale(0.85);
}
.edge-vs[data-reveal].is-visible{
  transform:translate(-50%,-50%) translateY(0) scale(1);
}
.deco2[data-reveal]{
  transform:rotate(var(--r,0deg)) translateY(28px) scale(0.8);
  transition:opacity .85s cubic-bezier(.16,.8,.24,1), transform .85s cubic-bezier(.16,.8,.24,1);
  transition-delay:calc(var(--reveal-delay, 0) * 70ms);
}
.deco2[data-reveal].is-visible{
  transform:rotate(var(--r,0deg)) translateY(0) scale(1);
}
.deco2[data-reveal]:hover{
  transform:rotate(var(--r,0deg)) scale(1.14);
}
@media (prefers-reduced-motion: reduce){
  [data-reveal]{ opacity:1; transform:none; transition:none; }
}

/* ==========================================================================
   Buttons & Pills
   ========================================================================== */
.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  border-radius:var(--radius-pill);
  font-weight:600;
  font-size:15px;
  padding:13px 26px;
  cursor:pointer;
  border:1px solid transparent;
  transition:transform var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);
  white-space:nowrap;
}
.btn-primary{
  background:var(--signal-blue);
  color:#fff;
  box-shadow:0 1px 2px rgba(74,99,240,0.15), 0 10px 24px -10px rgba(74,99,240,0.55);
}
.btn-primary:hover{ background:var(--signal-blue-dim); transform:translateY(-1px); }
.btn-primary:active{ transform:translateY(0); }
@media (hover:none){
  .btn:active{ transform:scale(0.96); }
  .pill-link:active{ border-color:var(--signal-blue); color:var(--signal-blue); }
}
.btn-lg{ padding:16px 32px; font-size:16px; }
.btn-block{ width:100%; }
.btn-nav{ padding:10px 20px; font-size:14px; }

.pill{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:8px 16px;
  border-radius:var(--radius-pill);
  font-size:13px;
  font-weight:600;
  letter-spacing:0.01em;
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  color:var(--ink-soft);
}
.pill-link{ cursor:pointer; transition:border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease); }
.pill-link:hover{ border-color:var(--signal-blue); color:var(--signal-blue); }
.pill-static{ margin-bottom:20px; color:var(--signal-blue); }
.pill-on-dark{ background:rgba(255,255,255,0.06); border-color:rgba(255,255,255,0.12); color:#8CA0FF; }

.accent{ color:var(--signal-blue); }
.accent-underline{
  position:relative;
  color:var(--signal-blue);
}

.eyebrow{
  display:inline-block;
  font-size:12px;
  font-weight:700;
  letter-spacing:0.06em;
  color:var(--signal-blue);
  margin-bottom:12px;
}
.eyebrow-inverse{ color:#8CA0FF; }
.hero-eyebrow{
  display:inline-block;
  font-size:13px;
  font-weight:700;
  letter-spacing:0.1em;
  text-transform:uppercase;
  color:var(--signal-blue);
}

.icon-badge{
  display:inline-flex; align-items:center; justify-content:center;
  width:48px; height:48px;
  border-radius:14px;
  margin-bottom:18px;
  flex-shrink:0;
}
.icon-badge svg{ width:22px; height:22px; }
.icon-badge-blue{ background:var(--icon-blue-bg); color:var(--icon-blue-fg); }
.icon-badge-metal{ background:var(--icon-metal-bg); color:var(--icon-metal-fg); }
.icon-badge-green{ background:var(--icon-green-bg); color:var(--icon-green-fg); }
.icon-badge-dark{ background:rgba(255,255,255,0.08); color:#8CA0FF; }

/* ==========================================================================
   Nav
   ========================================================================== */
.nav-wrap{
  position:absolute;
  top:16px; left:16px; right:16px;
  z-index:100;
  display:flex;
  justify-content:center;
  pointer-events:none;
}
.nav{
  position:relative;
  pointer-events:auto;
  width:100%;
  max-width:var(--container);
  display:grid;
  grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);
  align-items:center;
  gap:24px;
  padding:10px 44px;
  background:transparent;
  transition:padding var(--dur-med) var(--ease);
}
.nav-logo{ justify-self:start; }
.nav-links{ justify-self:center; }
.nav-right{ justify-self:end; }
.nav-logo{
  display:flex; align-items:center; gap:9px;
  font-weight:900; font-size:24px; letter-spacing:0.01em;
  text-transform:uppercase;
  color:var(--ink);
}
.nav-links{
  display:flex; align-items:center; gap:32px;
  font-size:12.5px; font-weight:700; color:var(--ink);
}
.nav-links a{
  position:relative;
  text-transform:uppercase;
  letter-spacing:0.06em;
  padding:4px 0;
  transition:color var(--dur-fast) var(--ease);
}
.nav-links a:not(.btn)::after{
  content:'';
  position:absolute;
  left:0; right:100%;
  bottom:0;
  height:2px;
  background:var(--signal-blue);
  transition:right var(--dur-fast) var(--ease);
}
.nav-links a:not(.btn):hover{ color:var(--ink); }
.nav-links a:not(.btn):hover::after{ right:0; }

.nav-right{ display:flex; align-items:center; gap:14px; }
.nav-lang{
  display:flex; align-items:center; gap:5px;
  font-size:11px; font-weight:700;
  letter-spacing:0.02em;
}
.nav-lang-mobile{ display:none; }
.nav-lang-btn{
  background:none; border:none; padding:2px; cursor:pointer;
  font:inherit; color:var(--ink-faint);
  transition:color var(--dur-fast) var(--ease);
}
.nav-lang-btn.is-active{ color:var(--ink); }
.nav-lang-btn:hover{ color:var(--signal-blue); }
.nav-lang-sep{ color:var(--limestone-line); font-size:10px; }

.nav-toggle{ display:none; }
.btn-nav-mobile{ display:none; }

/* ==========================================================================
   Layout helpers
   ========================================================================== */
.section{ padding:140px 0; position:relative; }
.section-head{ max-width:680px; margin-bottom:56px; }
.section-head h2{
  font-size:clamp(2rem, 3.6vw, 3rem);
  font-weight:800;
  letter-spacing:-0.02em;
  line-height:1.12;
  color:var(--ink);
}
.section-lede{
  margin-top:18px;
  font-size:18px;
  line-height:1.6;
  color:var(--ink-soft);
  max-width:560px;
}
.section-head-dark h2{ color:var(--on-dark); }
.section-lede-dark{ color:var(--on-dark-soft); }

/* ==========================================================================
   Hero
   ========================================================================== */
.hero{
  position:relative;
  padding:140px 0 20px;
  overflow:hidden;
}
.hero-bg{
  position:absolute; inset:0;
  background:
    radial-gradient(ellipse 60% 46% at 22% 8%, rgba(74,99,240,0.16), transparent 68%),
    radial-gradient(ellipse 50% 40% at 82% 4%, rgba(201,168,118,0.16), transparent 65%);
  pointer-events:none;
}
.hero-inner{
  position:relative;
  text-align:center;
  display:flex;
  flex-direction:column;
  align-items:center;
}
.hero-h1{
  margin-top:26px;
  font-size:clamp(3rem, 6.6vw, 5.6rem);
  font-weight:900;
  letter-spacing:-0.035em;
  line-height:1.03;
  color:var(--ink);
  max-width:980px;
}
.hero-sub{
  margin-top:26px;
  font-size:clamp(1.05rem, 1.6vw, 1.25rem);
  color:var(--ink-soft);
  max-width:600px;
  line-height:1.6;
}
.hero-cta{
  margin-top:38px;
  display:flex; flex-direction:column; align-items:center; gap:14px;
}
.hero-micro{ font-size:13px; color:var(--ink-faint); }

.funnel-wrap{
  position:relative;
  max-width:860px;
  margin:-15px auto 0;
  height:1243px;
  padding:0 20px;
}
.funnel-lines{ position:absolute; inset:0; width:100%; height:100%; overflow:visible; }
.funnel-lines-mobile{ display:none; }
.funnel-mobile-marker{ display:none; }
.funnel-path{
  fill:none;
  stroke:url(#funnelGradient);
  stroke-width:2;
  opacity:0.72;
  stroke-dasharray:9 9;
}
.funnel-path-dashed{ stroke-dasharray:6 8; opacity:0.6; }
.funnel-trunk{ stroke-dasharray:none; opacity:0.62; }
/* Reveal-on-load for the 6 fan-out lines + their dots, timed to match each
   icon's own pop-in delay. Each variant gets its own @keyframes with a fixed
   numeric end-opacity rather than var(--target-opacity) in the keyframe body:
   browsers don't reliably resolve custom properties per-element when several
   elements share one @keyframes name with different variable values. */
.funnel-path:not(.funnel-trunk):not(.funnel-path-dashed),
.funnel-path-dashed{
  opacity:0;
}
.funnel-path-dot{
  /* The icon badge sits directly on top of this anchor point once revealed,
     so showing the bare dot first (before its icon pops in) just reads as a
     flash of stray dots with no purpose. */
  display:none;
}
.funnel-wrap.is-visible .funnel-path:not(.funnel-trunk):not(.funnel-path-dashed){
  animation:funnelPathRevealSolid .45s ease-out forwards;
  animation-delay:var(--path-delay, 0s);
}
.funnel-wrap.is-visible .funnel-path-dashed{
  animation:funnelPathRevealDashed .45s ease-out forwards;
  animation-delay:var(--path-delay, 0s);
}
@keyframes funnelPathRevealSolid{ from{ opacity:0; } to{ opacity:0.72; } }
@keyframes funnelPathRevealDashed{ from{ opacity:0; } to{ opacity:0.6; } }
@media (prefers-reduced-motion: reduce){
  .funnel-path:not(.funnel-trunk):not(.funnel-path-dashed),
  .funnel-path-dashed{ opacity:0.72; }
  .funnel-path-dashed{ opacity:0.6; }
  .funnel-wrap.is-visible .funnel-path:not(.funnel-trunk):not(.funnel-path-dashed),
  .funnel-wrap.is-visible .funnel-path-dashed{ animation:none; }
}
.funnel-connector{
  fill:none;
  stroke:#8a94b0;
  stroke-opacity:0.4;
  stroke-width:2;
  stroke-dasharray:9 9;
  stroke-linecap:round;
}
.funnel-path-dot{
  fill:var(--signal-blue);
  opacity:0.9;
}
.funnel-dot-accent{
  fill:var(--signal-blue);
  stroke:#fff;
  stroke-width:2;
}
.funnel-marker-bg{ fill:#fff; stroke:rgba(28,45,110,0.08); stroke-width:1; filter:drop-shadow(0 2px 6px rgba(28,45,110,0.14)); }
.funnel-marker circle{ fill:var(--signal-blue); stroke:#fff; stroke-width:2; }
.funnel-marker path{ stroke:#fff; stroke-width:2; stroke-linecap:round; }
.funnel-marker text{ font-family:'Inter',sans-serif; font-size:12.5px; font-weight:800; letter-spacing:0.03em; fill:var(--ink); fill-opacity:1; }
.funnel-node{
  position:absolute;
  transform:translate(-50%,-50%) scale(0.4);
  opacity:0;
}
.funnel-wrap.is-visible .funnel-node{
  animation:funnelNodePop .6s cubic-bezier(.34,1.4,.64,1) forwards;
  animation-delay:var(--node-delay, 0s);
}
@keyframes funnelNodePop{
  0%{ opacity:0; transform:translate(-50%,-50%) scale(0.4); }
  60%{ opacity:1; transform:translate(-50%,-50%) scale(1.1); }
  100%{ opacity:1; transform:translate(-50%,-50%) scale(1); }
}
@media (prefers-reduced-motion: reduce){
  .funnel-node{ opacity:1; transform:translate(-50%,-50%); }
  .funnel-wrap.is-visible .funnel-node{ animation:none; }
}
.funnel-node-icon{
  position:relative;
  width:44px; height:44px;
  border-radius:13px;
  display:flex; align-items:center; justify-content:center;
  box-shadow:var(--shadow-card);
  color:#fff;
}
.funnel-node-icon svg{ width:20px; height:20px; }
.funnel-node-icon.logo-badge svg{ width:26px; height:26px; }
.funnel-node-badge-mini{
  position:absolute; right:-4px; bottom:-4px;
  width:20px; height:20px;
  border-radius:50%;
  background:#fff;
  border:2px solid #fff;
  box-shadow:0 4px 10px rgba(0,0,0,.18);
  display:flex; align-items:center; justify-content:center;
}
.funnel-node-badge-mini svg{ width:12px; height:12px; }
.funnel-node-icon-sm{
  width:70px; height:70px; border-radius:50%;
  border:3px solid #fff;
  transition:transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);
}
.funnel-node-icon-sm svg{ width:29px; height:29px; }
.funnel-system:hover .funnel-node-icon-sm{ transform:scale(1.08) rotate(-2deg); }
.funnel-chip{
  position:absolute;
  top:100%;
  left:50%;
  transform:translateX(-50%);
  margin-top:10px;
  display:inline-block;
  padding:8px 15px;
  border-radius:var(--radius-pill);
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  font-size:12.5px;
  font-weight:700;
  color:var(--ink);
  box-shadow:var(--shadow-card);
  white-space:nowrap;
}
.funnel-system{
  position:absolute;
  transform:translate(-50%,-50%) scale(0.5);
  opacity:0;
}
.funnel-system.in-view{
  animation:funnelNodePop .55s cubic-bezier(.34,1.4,.64,1) forwards;
  animation-delay:var(--sys-delay, 0s);
}
@media (prefers-reduced-motion: reduce){
  .funnel-system{ opacity:1; transform:translate(-50%,-50%); }
  .funnel-system.in-view{ animation:none; }
}
/* Risk markers + capability-icon labels: scroll-triggered fade, each observed
   individually so they reveal precisely as they enter view rather than all
   firing together with the hero icons on page load. */
.funnel-marker{ opacity:0; }
.funnel-marker.in-view{
  animation:funnelMarkerReveal .45s ease-out forwards;
  animation-delay:var(--marker-delay, 0s);
}
@keyframes funnelMarkerReveal{ from{ opacity:0; } to{ opacity:1; } }
.funnel-system-label{
  opacity:0;
  transform:translateY(-50%) translateY(6px);
}
.funnel-system-label.in-view{
  animation:funnelLabelReveal .4s ease-out forwards;
  animation-delay:var(--sys-delay, 0s);
}
@keyframes funnelLabelReveal{
  from{ opacity:0; transform:translateY(-50%) translateY(6px); }
  to{ opacity:1; transform:translateY(-50%); }
}
@media (prefers-reduced-motion: reduce){
  .funnel-marker{ opacity:1; }
  .funnel-marker.in-view{ animation:none; }
  .funnel-system-label{ opacity:1; transform:translateY(-50%); }
  .funnel-system-label.in-view{ animation:none; }
}
.funnel-node-icon-sm.tone-ink{ color:#fff; background:#14171b; box-shadow:0 14px 28px -8px rgba(20,23,27,.5), 0 0 0 1px rgba(20,23,27,.08); }
.funnel-node-icon-sm.tone-orange{ color:#fff; background:#d05f3b; box-shadow:0 14px 28px -8px rgba(208,95,59,.55), 0 0 0 1px rgba(208,95,59,.1); }
.funnel-system-label{
  position:absolute;
  transform:translateY(-50%);
  width:168px;
  font-size:13.5px;
  font-weight:600;
  line-height:1.35;
  color:var(--ink);
  text-align:left;
}
.funnel-system-label-right{ text-align:right; }

.funnel-transition{
  text-align:center;
  max-width:820px;
  margin:0 auto;
  padding:0 20px 0;
  position:relative;
  z-index:1;
}
.funnel-transition-connector{
  display:none;
}
.funnel-transition .pill{ margin-top:0; position:relative; z-index:1; }
.funnel-transition h2{
  font-size:clamp(2.3rem,5vw,4.1rem) !important;
  line-height:1.04 !important;
  margin-top:22px;
}

.cost-timeline{
  position:relative;
  max-width:1040px;
  margin:64px auto 0;
  padding:0 20px 28px;
}
.cost-timeline::before{
  content:'';
  position:absolute;
  left:50%; top:0; bottom:0;
  width:3px;
  background:var(--signal-blue);
  opacity:0.7;
  transform:translateX(-50%);
}
.cost-timeline-stage{
  position:relative;
  min-height:280px;
}
.cost-timeline-content{
  position:absolute;
  width:34%;
  top:50%;
}
.cost-timeline-stage[data-side="left"] .cost-timeline-content{ left:0; text-align:right; }
.cost-timeline-stage[data-side="right"] .cost-timeline-content{ right:0; text-align:left; }
.cost-timeline-connector{
  position:absolute;
  top:50%;
  height:2px;
  transform:translateY(-1px);
  background-image:repeating-linear-gradient(to right, rgba(138,148,176,.6) 0, rgba(138,148,176,.6) 9px, transparent 9px, transparent 18px);
}
.cost-timeline-stage[data-side="left"] .cost-timeline-connector{ left:34%; width:16%; }
.cost-timeline-stage[data-side="right"] .cost-timeline-connector{ right:34%; width:16%; }
.cost-timeline-week{
  position:absolute;
  left:50%; top:50%;
  transform:translate(-50%,-50%);
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:2px;
  width:92px; height:92px;
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:22px;
  box-shadow:var(--shadow-card);
  z-index:1;
  transition:transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);
}
.cost-timeline-week:hover{
  transform:translate(-50%,-50%) scale(1.08);
  box-shadow:0 18px 36px -6px rgba(208,95,59,.5), 0 0 0 1px rgba(28,45,110,.08);
}
.cost-timeline-week em{
  font-style:normal;
  font-size:11px;
  font-weight:800;
  letter-spacing:0.08em;
  color:var(--ink-soft);
}
.cost-timeline-week strong{
  font-size:30px;
  font-weight:900;
  letter-spacing:-0.02em;
  color:var(--ink);
  line-height:1.1;
}
.cost-timeline-badge{
  display:inline-block;
  padding:8px 18px;
  border-radius:var(--radius-pill);
  font-size:14px;
  font-weight:700;
  margin-bottom:16px;
  transform:translateY(-50%);
}
.cost-timeline-badge-neutral{ background:#14171b; border:none; color:#fff; }
.cost-timeline-badge-warn{ background:#c2410c; border:none; color:#fff; }
.cost-timeline-badge-loss{ background:#dc2626; border:none; color:#fff; }
.cost-timeline-content h4{ font-size:23px; font-weight:800; color:var(--ink); margin-bottom:10px; letter-spacing:-0.01em; line-height:1.2; }
.cost-timeline-content p{ font-size:15.5px; line-height:1.6; color:var(--ink-soft); }

.cost-timeline-verdict{
  position:relative;
  max-width:420px;
  margin:172px auto 0;
  padding:18px 26px;
  text-align:center;
  background:linear-gradient(150deg, var(--signal-blue), var(--signal-blue-dim));
  border:none;
  border-radius:var(--radius-lg);
  box-shadow:0 8px 16px -14px rgba(208,95,59,.25);
  transition:opacity .85s cubic-bezier(.16,.8,.24,1), transform .85s cubic-bezier(.16,.8,.24,1), box-shadow var(--dur-fast) var(--ease);
}
.cost-timeline-verdict:hover{
  transform:scale(1.03);
  box-shadow:0 8px 14px -10px rgba(208,95,59,.3);
}
.cost-timeline-verdict p{
  font-size:15px;
  font-weight:600;
  line-height:1.45;
  color:#fff;
}
.cost-timeline-verdict strong{ font-weight:800; color:#fff; }

/* ==========================================================================
   Cards
   ========================================================================== */
.two-card-row{ display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-bottom:24px; }
.compare-row{ display:grid; grid-template-columns:1fr 1fr; gap:24px; }

/* ==========================================================================
   Edge comparison
   ========================================================================== */
.edge-compare{
  position:relative;
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:72px;
  max-width:980px;
  margin:0 auto;
  align-items:stretch;
}
.edge-compare[data-reveal]{ opacity:1; transform:none; transition:none; }
.edge-vs{
  position:absolute;
  left:50%; top:50%;
  width:50px; height:50px;
  border-radius:50%;
  background:linear-gradient(150deg, var(--signal-blue), var(--signal-blue-dim));
  border:3px solid var(--limestone);
  display:flex; align-items:center; justify-content:center;
  font-size:11px; font-weight:800; letter-spacing:0.03em;
  color:#fff;
  box-shadow:0 10px 24px -6px rgba(208,95,59,.65), 0 0 0 6px rgba(208,95,59,.12);
  z-index:2;
}
.edge-col{
  position:relative;
  z-index:1;
  border-radius:var(--radius-lg);
  padding:44px 40px;
}
.edge-col-us{
  background:linear-gradient(165deg, #ffffff 0%, #fff6f1 100%);
  border:2px solid var(--signal-blue);
  box-shadow:0 30px 60px -24px rgba(208,95,59,0.38), 0 4px 14px -4px rgba(20,23,27,.06);
}
.edge-col-them{
  background:rgba(255,255,255,0.35);
  border:1px solid var(--limestone-line);
  box-shadow:none;
}
.edge-col-badge{
  position:absolute;
  top:0; right:32px;
  transform:translateY(-50%);
  display:inline-flex; align-items:center; gap:6px;
  background:linear-gradient(135deg, var(--signal-blue), var(--signal-blue-dim));
  color:#fff;
  font-size:11.5px;
  font-weight:800;
  letter-spacing:0.04em;
  text-transform:uppercase;
  padding:8px 16px 8px 12px;
  border-radius:var(--radius-pill);
  box-shadow:0 10px 20px -6px rgba(208,95,59,0.55);
}
.edge-col-badge svg{ width:13px; height:13px; flex-shrink:0; }
.nav-logo-mark{
  display:flex; align-items:center; justify-content:center;
  width:30px; height:30px;
  border-radius:9px;
  background:linear-gradient(150deg, var(--signal-blue), var(--signal-blue-dim));
  color:#fff;
  flex-shrink:0;
  box-shadow:0 6px 14px -5px rgba(208,95,59,.55), inset 0 1px 1px rgba(255,255,255,.35);
}
.edge-col-head{
  display:flex; align-items:center; gap:12px;
  padding-bottom:18px;
  margin-bottom:6px;
  font-size:18px; font-weight:800; color:var(--ink); letter-spacing:-0.01em;
}
.edge-col-them .edge-col-head{
  color:var(--ink-soft);
  font-weight:700;
  gap:10px;
}
.edge-col-them-mark{
  display:flex; align-items:center; justify-content:center;
  width:30px; height:30px;
  border-radius:9px;
  border:1.5px solid var(--limestone-line);
  color:var(--ink-faint);
  flex-shrink:0;
}
.edge-col-them-mark svg{ width:14px; height:14px; }
.edge-col-caption{
  font-size:13px; color:var(--ink-faint); font-weight:500;
  padding-bottom:20px; margin-bottom:20px;
  border-bottom:1px solid var(--limestone-line);
}
.edge-col-them .edge-col-caption{ color:var(--ink-soft); }
.edge-col ul{ display:flex; flex-direction:column; gap:22px; }
.edge-col li{ display:flex; align-items:center; gap:16px; }
.edge-col li span:last-child{ font-size:15.5px; line-height:1.5; color:var(--ink); }
.edge-col-them li span:last-child{ color:var(--ink-soft); font-weight:500; }
.edge-icon{
  flex-shrink:0;
  width:48px; height:48px;
  border-radius:14px;
  display:flex; align-items:center; justify-content:center;
}
.edge-icon svg{ width:23px; height:23px; }
.edge-icon-us{
  background:linear-gradient(150deg, var(--signal-blue), var(--signal-blue-dim));
  color:#fff;
  box-shadow:0 8px 16px -7px rgba(208,95,59,.6), inset 0 1px 1px rgba(255,255,255,.3);
}
.edge-icon-them{
  background:transparent;
  border:1.5px solid var(--limestone-line);
  color:var(--ink-soft);
  width:48px; height:48px;
}
.edge-icon-them svg{ width:19px; height:19px; }

@media (max-width:760px){
  .edge-compare{ grid-template-columns:1fr; gap:24px; }
  .edge-divider{ display:none; }
  .edge-vs{ display:none; }
  .edge-col{ padding:32px 26px; }
  .edge-col-badge{ right:26px; }
}
.card{
  padding:36px;
  border-radius:var(--radius-lg);
}
.card-light{
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  box-shadow:var(--shadow-card);
  transition:transform var(--dur-med) var(--ease), box-shadow var(--dur-med) var(--ease);
}
.card-light:hover{ transform:translateY(-4px); box-shadow:var(--shadow-lift); }
.card-light h3,.card-light h4{ font-size:20px; font-weight:700; margin-bottom:12px; letter-spacing:-0.01em; }
.card-light p{ color:var(--ink-soft); line-height:1.6; font-size:15px; }
.card-dark{
  background:var(--graphite);
  color:var(--on-dark);
}
.card-dark h3,.card-dark h4{ font-size:20px; font-weight:700; margin-bottom:12px; color:#fff; letter-spacing:-0.01em; }
.card-dark p{ color:var(--on-dark-soft); line-height:1.6; font-size:15px; }

.highlight-bar{
  margin-top:24px;
  padding:34px 40px;
  border-radius:var(--radius-lg);
  background:#E4E9FF;
  color:var(--ink);
}
.highlight-bar p{ font-size:clamp(1.1rem,1.8vw,1.4rem); font-weight:600; line-height:1.4; letter-spacing:-0.01em; }
.highlight-bar strong{ color:var(--signal-blue-dim); }
.highlight-bar-dark{ background:var(--graphite); color:var(--on-dark); }
.highlight-bar-dark strong{ color:#8CA0FF; }

/* ==========================================================================
   Timeline (section 03)
   ========================================================================== */
.timeline{ position:relative; padding:20px 0; max-width:900px; margin:0 auto; }
.timeline-line{
  position:absolute; left:50%; top:0; bottom:0; width:2px;
  background:var(--limestone-line);
  transform:translateX(-50%);
}
.timeline-line-fill{
  position:absolute; top:0; left:0; width:100%; height:0%;
  background:var(--signal-blue);
  transition:height .2s linear;
}
.timeline-step{
  position:relative;
  width:calc(50% - 40px);
  margin-bottom:32px;
}
.timeline-step-right{ margin-left:calc(50% + 40px); }
.timeline-marker{
  position:absolute; top:0;
  width:36px; height:36px;
  border-radius:50%;
  background:var(--limestone-card);
  border:2px solid var(--limestone-line);
  display:flex; align-items:center; justify-content:center;
  font-size:12px; font-weight:700; color:var(--ink-soft);
}
.timeline-step:not(.timeline-step-right) .timeline-marker{ right:-58px; }
.timeline-step-right .timeline-marker{ left:-58px; }
.timeline-step.is-active .timeline-marker{ background:var(--signal-blue); border-color:var(--signal-blue); color:#fff; }
.timeline-card{
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:var(--radius-md);
  padding:24px 26px;
  box-shadow:var(--shadow-card);
}
.timeline-card h4{ font-size:16.5px; font-weight:700; margin-bottom:8px; letter-spacing:-0.01em; }
.timeline-card p{ font-size:14.5px; color:var(--ink-soft); line-height:1.55; }

/* ==========================================================================
   Process rows (section 04)
   ========================================================================== */
.section-system{ overflow:visible; margin-top:-140px; }
.section-bridge-line{
  width:3px;
  height:100px;
  margin:-20px auto 0;
  background:var(--signal-blue);
  opacity:0.7;
}
/* Desktop-only bridge; the mobile equivalent (.cost-timeline-bend, a
   curved SVG rather than a straight bar) takes over below 760px â€” see
   that media query for why a straight line can't do this job there. */
.cost-timeline-bend{ display:none; }
.section-head-center{
  position:relative;
  max-width:720px;
  margin-left:auto;
  margin-right:auto;
  text-align:center;
  padding-top:70px;
}
.section-head-center .section-lede{ margin-left:auto; margin-right:auto; }
.section-head-connector{
  position:absolute;
  left:50%; top:0;
  width:2px; height:70px;
  transform:translateX(-50%);
  background:var(--signal-blue);
  opacity:0.7;
}
#system .section-head-connector{ width:3px; }
/* Pulls the edge-comparison section up so the gap below the case-study
   carousel matches the tight gap above it (headline to images), instead
   of the much larger default section spacing. */
#fordel{ margin-top:-224px; }
@media (max-width:1024px){ #fordel{ margin-top:-168px; } }
#system .section-head-center{ transform:none !important; margin-bottom:76px; }
/* The process-list connector (below) is extended all the way into this
   section's headline, so cadence doesn't need its own short connector â€”
   having both rendered a visible double-line where they overlapped. */
#cadence .section-head-connector{ display:none; }
#fordel .section-head-connector{ display:none; }
#system .section-head-center .pill-static{ margin-bottom:40px; }

.process-list{ position:relative; display:flex; flex-direction:column; gap:40px; margin-bottom:40px; margin-top:56px; max-width:960px; margin-left:auto; margin-right:auto; }
/* The list itself is only observed (via [data-reveal]) so the connector
   line below can fade in on the same schedule as the cards â€” the rows
   already animate individually, so the container's own default reveal
   transform/opacity is cancelled out here to avoid double-animating them. */
.process-list[data-reveal]{ opacity:1; transform:none; transition:none; }
.process-list::before{
  content:'';
  position:absolute;
  left:50%; top:-36px; bottom:-230px;
  width:3px;
  background:var(--signal-blue);
  opacity:0;
  transform:translateX(-50%);
  transition:opacity .9s cubic-bezier(.16,.8,.24,1);
  transition-delay:.15s;
  z-index:0;
}
.process-list[data-reveal].is-visible::before{ opacity:0.7; }
@media (prefers-reduced-motion: reduce){
  .process-list::before{ opacity:0.7; transition:none; }
}
.process-row{ position:relative; z-index:1; }
.process-row{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:56px;
  align-items:center;
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:var(--radius-lg);
  padding:40px;
  box-shadow:var(--shadow-card);
}
.process-row-reverse{ direction:rtl; }
.process-row-reverse > *{ direction:ltr; }
.process-num{
  display:inline-flex; align-items:center; justify-content:center;
  width:60px; height:60px; border-radius:50%;
  background:var(--signal-blue); color:#fff;
  font-weight:800; font-size:20px; margin-bottom:24px;
}
.process-copy h3{ font-size:34px; font-weight:900; letter-spacing:-0.02em; line-height:1.1; margin-bottom:16px; }
.process-copy p{ color:var(--ink-soft); line-height:1.65; font-size:16.5px; font-weight:400; max-width:440px; }

.process-visual{ align-self:stretch; display:flex; }
.mock-card{
  position:relative;
  border-radius:var(--radius-md);
  overflow:hidden;
  min-height:320px;
  width:100%;
  background-size:cover;
  background-position:center;
  box-shadow:0 20px 40px -18px rgba(28,45,110,0.32);
}
.mock-diagnose{ background-image:url('images/2026-07-22-19-22-37-process-diagnose.jpg?v=3'); }
.mock-build{ background-image:url('images/2026-07-22-19-22-50-process-build.jpg?v=3'); }
.mock-launch{ background-image:url('images/2026-07-22-19-23-05-process-launch.jpg?v=3'); }
.mock-optimise{ background-image:url('images/2026-07-22-19-23-20-process-optimize.jpg?v=3'); }
.mock-card-panel{
  position:relative;
  z-index:2;
  margin:18px;
  padding:18px 20px;
  background:rgba(255,255,255,0.94);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border-radius:14px;
  box-shadow:0 10px 28px rgba(15,22,50,0.22);
  display:flex; flex-direction:column; gap:12px;
}
.mock-row{ display:flex; align-items:center; justify-content:space-between; font-size:14px; color:var(--ink-soft); }
.mock-row strong{ color:var(--ink); font-size:15px; }
.mock-tag{ font-size:11.5px; font-weight:700; padding:4px 10px; border-radius:var(--radius-pill); }
.mock-tag-ok{ background:#DDF3E4; color:#1F7A45; }
.mock-tag-pending{ background:#FDEBD3; color:#A5651A; }
.mock-bar{ height:6px; border-radius:99px; background:var(--limestone-line); overflow:hidden; margin-top:4px; }
.mock-bar div{ height:100%; background:var(--signal-blue); border-radius:99px; }
.mock-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.mock-tile{
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:12px;
  padding:20px 14px;
  text-align:center;
  font-size:13.5px;
  font-weight:600;
  color:var(--ink-soft);
}
.mock-channel{ display:flex; align-items:center; gap:10px; font-size:14px; font-weight:600; color:var(--ink); padding:10px 0; border-bottom:1px solid var(--limestone-line); }
.mock-channel:last-child{ border-bottom:none; }
.mock-channel-off{ color:var(--ink-faint); font-weight:500; }
.mock-dot{ width:9px; height:9px; border-radius:50%; background:var(--ink-faint); flex-shrink:0; }
.mock-sparkline{ width:100%; height:80px; margin-bottom:8px; }

/* ==========================================================================
   Cadence carousel â€” full-bleed, large-format image gallery. Breaks out of
   .container entirely (edge to edge) with an infinite/looping scroll (see
   script.js), closer to a social/ad-creative feed than a bordered card
   grid: big bold photos, no card chrome, caption sits directly on the
   cream page background rather than in a shadowed box.
   ========================================================================== */
.section-cadence{ margin-top:-160px; }
.section-cadence .section-head-center{ margin-bottom:56px; max-width:860px; }

.cadence-carousel{
  display:flex;
  gap:24px;
  overflow-x:auto;
  scroll-behavior:smooth;
  padding:4px max(24px, calc((100vw - var(--container))/2)) 8px;
  scrollbar-width:none;
  touch-action:pan-x;
}
.cadence-carousel::-webkit-scrollbar{ display:none; }
.cadence-slide{
  flex:0 0 auto;
  width:340px;
}
.cadence-visual{
  position:relative;
  aspect-ratio:3/4;
  border-radius:28px;
  margin-bottom:18px;
  overflow:hidden;
}
.cadence-visual img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
  transition:transform var(--dur-med) var(--ease);
}
.cadence-slide:hover .cadence-visual img{ transform:scale(1.04); }
.cadence-slide{
  opacity:0;
  transform:translateY(26px) scale(0.97);
  transition:opacity .7s cubic-bezier(.16,.8,.24,1), transform .7s cubic-bezier(.16,.8,.24,1);
}
.cadence-carousel.is-visible .cadence-slide{ opacity:1; transform:none; }
.cadence-slide:nth-child(9n+2){ transition-delay:70ms; }
.cadence-slide:nth-child(9n+3){ transition-delay:140ms; }
.cadence-slide:nth-child(9n+4){ transition-delay:210ms; }
.cadence-slide:nth-child(9n+5){ transition-delay:280ms; }
.cadence-slide:nth-child(9n+6){ transition-delay:350ms; }
.cadence-slide:nth-child(9n+7){ transition-delay:420ms; }
.cadence-slide:nth-child(9n+8){ transition-delay:490ms; }
.cadence-slide:nth-child(9n+9){ transition-delay:560ms; }
@media (prefers-reduced-motion: reduce){
  .cadence-slide{ opacity:1; transform:none; transition:none; }
}
.cadence-visual::after{
  content:'';
  position:absolute; inset:0;
  background:linear-gradient(to top, rgba(10,10,10,.65) 0%, rgba(10,10,10,.08) 34%, transparent 55%);
  pointer-events:none;
}
.cadence-visual-stat{
  position:absolute;
  left:18px; bottom:16px;
  z-index:1;
  font-size:14px;
  font-weight:700;
  color:#fff;
  text-shadow:0 1px 3px rgba(0,0,0,.4);
}
.cadence-visual-stat strong{ font-size:17px; font-weight:800; }

.cadence-tag{
  display:inline-block;
  font-size:12px; font-weight:800;
  letter-spacing:0.06em;
  color:var(--signal-blue);
  margin-bottom:10px;
}
.cadence-slide h3{ font-size:22px; font-weight:800; color:var(--ink); margin-bottom:10px; letter-spacing:-0.015em; }
.cadence-slide p{
  font-size:14.5px; line-height:1.6; color:var(--ink-soft); max-width:300px;
  display:-webkit-box;
  -webkit-line-clamp:4;
  -webkit-box-orient:vertical;
  overflow:hidden;
}

@media (max-width:760px){
  .cadence-slide{ width:76vw; }
}

@media (max-width:760px){
  .section-cadence .section-head-center{ margin-bottom:32px; }
  .cadence-slide{ width:72vw; }
}

/* ==========================================================================
   Dark capability section (05)
   ========================================================================== */
.section-dark{
  background:var(--graphite);
  padding:140px 0;
  position:relative;
}
.cap-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }
.cap-card{
  background:var(--graphite-card);
  border:1px solid rgba(255,255,255,0.07);
  border-radius:var(--radius-lg);
  padding:32px;
  transition:transform var(--dur-med) var(--ease), border-color var(--dur-med) var(--ease);
}
.cap-card:hover{ transform:translateY(-4px); border-color:rgba(74,99,240,0.4); }
.cap-card h4{ font-size:19px; font-weight:700; color:#fff; margin-bottom:16px; letter-spacing:-0.01em; }
.cap-card ul{ display:flex; flex-direction:column; gap:9px; }
.cap-card li{
  font-size:14px; color:var(--on-dark-soft); line-height:1.5;
  padding-left:16px; position:relative;
}
.cap-card li::before{
  content:''; position:absolute; left:0; top:8px;
  width:5px; height:5px; border-radius:50%; background:var(--signal-blue);
}

/* ==========================================================================
   Growth loop (07)
   ========================================================================== */
.loop-wrap{ position:relative; max-width:640px; margin:0 auto; aspect-ratio:1/1; cursor:pointer; }
.loop-svg{ width:100%; height:100%; overflow:visible; }

.loop-ring-outer{
  stroke:var(--ink);
  stroke-width:1;
  opacity:0.16;
}
.loop-ring{
  stroke:var(--ink);
  stroke-width:1.8;
  opacity:0.4;
  stroke-dasharray:2 12;
  transform-origin:320px 320px;
  animation:loopRotate 60s linear infinite;
}
@keyframes loopRotate{ to{ transform:rotate(360deg); } }

.loop-spokes{ pointer-events:none; }
.loop-spoke{
  stroke:var(--ink);
  stroke-width:1.6;
  stroke-linecap:round;
  opacity:0.3;
  transition:opacity var(--dur-med) var(--ease), stroke-width var(--dur-med) var(--ease), stroke var(--dur-med) var(--ease);
}
.loop-spoke.is-active{
  stroke:var(--signal-blue);
  opacity:0.95;
  stroke-width:2.4;
  stroke-dasharray:5 7;
  animation:loopSpokeFlow 1.1s linear infinite;
}
@keyframes loopSpokeFlow{ to{ stroke-dashoffset:-24; } }

.loop-cursor-dot{
  fill:var(--signal-blue);
  opacity:0;
  transition:opacity var(--dur-fast) var(--ease);
}
.loop-wrap:hover .loop-cursor-dot{ opacity:1; }

.loop-hub-halo{
  fill:none;
  stroke:var(--signal-blue);
  stroke-width:1;
  opacity:0.18;
}
.loop-hub-ring{
  stroke:rgba(255,255,255,0.14);
  stroke-width:1;
}
.loop-hub-orbit-dot{
  fill:var(--warm-metal);
  transform-origin:320px 320px;
  animation:loopOrbit 12s linear infinite;
}
@keyframes loopOrbit{ to{ transform:rotate(360deg); } }

.loop-center{ fill:var(--graphite); }
.loop-center-label{ fill:var(--warm-metal); font-size:12px; font-weight:700; letter-spacing:0.12em; font-family:'Inter',sans-serif; }
.loop-center-title{ fill:#fff; font-size:15.5px; font-weight:800; letter-spacing:-0.01em; font-family:'Inter',sans-serif; }

.loop-hub-card{ display:none; }

.loop-node{
  position:absolute; transform:translate(-50%,-50%);
  display:flex; flex-direction:column; align-items:center; gap:0;
  text-align:center;
  background:linear-gradient(180deg, var(--limestone-card), #fbf9f5);
  border:1px solid var(--limestone-line);
  border-radius:50%;
  width:140px; height:140px;
  padding:22px 20px;
  box-sizing:border-box;
  justify-content:center;
  box-shadow:var(--shadow-card);
  transition:transform var(--dur-med) var(--ease), border-color var(--dur-med) var(--ease), box-shadow var(--dur-med) var(--ease);
  cursor:pointer;
}
.loop-node-num{
  display:inline-block;
  font-size:10px; font-weight:800; color:var(--signal-blue);
  letter-spacing:0.14em;
  margin-bottom:8px;
}
.loop-node-icon{
  display:inline-flex; align-items:center; justify-content:center;
  width:38px; height:38px; margin-bottom:9px; flex-shrink:0;
  border-radius:11px;
  background:var(--icon-blue-bg, #ffe8e1);
  color:var(--signal-blue);
  transition:transform var(--dur-med) var(--ease), background var(--dur-med) var(--ease);
}
.loop-node-icon svg{ width:18px; height:18px; }
.loop-node:hover, .loop-node.is-near{
  transform:translate(-50%,-50%) scale(1.08);
  border-color:var(--signal-blue);
  box-shadow:0 24px 60px -16px rgba(208,95,59,.35), var(--shadow-lift);
}
.loop-node:hover .loop-node-icon{ transform:scale(1.1); background:var(--signal-blue); color:#fff; }
.loop-node:focus-visible{ outline:2px solid var(--signal-blue); outline-offset:3px; }
.loop-node-title{ font-size:14px; font-weight:700; color:var(--ink); line-height:1.2; max-width:88px; }
.loop-node-sub{ font-size:11px; color:var(--ink-faint); margin-top:3px; max-width:88px; line-height:1.3; }

.section-tail-connector{
  display:block;
  width:2px; height:64px;
  margin:0 auto;
  background-image:linear-gradient(to bottom, var(--signal-blue) 60%, transparent 0%);
  background-size:2px 12px;
  background-repeat:repeat-y;
  opacity:0.6;
}
@media (prefers-reduced-motion: reduce){
  .loop-ring{ animation:none; }
  .loop-hub-orbit-dot{ animation:none; }
  .loop-spoke.is-active{ animation:none; }
}

/* ==========================================================================
   Dashboard mockup (08)
   ========================================================================== */
.section-mockup{ overflow:visible; }
.dash-stage{
  position:relative;
  max-width:1040px;
  margin:64px auto 0;
  padding:64px 56px 72px;
  border-radius:44px;
  background:
    radial-gradient(ellipse 70% 55% at 18% 0%, rgba(208,95,59,.14), transparent 60%),
    radial-gradient(ellipse 60% 50% at 100% 100%, rgba(28,45,110,.08), transparent 60%),
    var(--limestone);
  border:1px solid var(--limestone-line);
  overflow:visible;
}
.dash-frame{
  position:relative;
  max-width:960px;
  margin:0 auto;
  padding:8px;
  border-radius:32px;
  background:linear-gradient(160deg, #ffe4d8, var(--limestone-card) 55%);
  box-shadow:0 40px 90px -30px rgba(28,45,110,.28);
}
.dash-window{
  background:var(--limestone-card);
  border-radius:26px;
  overflow:hidden;
  box-shadow:var(--shadow-lift);
  border:1px solid var(--limestone-line);
}
.dash-topbar{
  display:flex; align-items:center; justify-content:space-between;
  padding:18px 26px;
  background:var(--graphite);
  color:#fff;
}
.dash-brand{ font-weight:700; font-size:15px; }
.dash-pill{ font-size:12px; font-weight:600; background:rgba(255,255,255,0.1); padding:5px 12px; border-radius:var(--radius-pill); }
.dash-body{ display:grid; grid-template-columns:0.9fr 1.4fr; gap:1px; background:var(--limestone-line); }
.dash-col{ background:var(--limestone-card); padding:24px; display:flex; flex-direction:column; gap:16px; }
.dash-col-wide{ }
.dash-card{ background:var(--limestone); border-radius:16px; padding:20px; }
.dash-label{ font-size:12.5px; font-weight:600; color:var(--ink-soft); }
.dash-big{ display:block; font-size:30px; font-weight:800; letter-spacing:-0.02em; margin-top:8px; }
.dash-big small{ font-size:16px; font-weight:600; color:var(--ink-soft); }
.dash-mini-row{ font-size:12.5px; color:var(--ink-faint); margin-top:6px; }
.dash-up{ color:#1F7A45; font-weight:700; }
.dash-quality{ display:flex; align-items:center; gap:12px; margin-top:10px; }
.dash-quality-bar{ flex:1; height:8px; border-radius:99px; background:var(--limestone-line); overflow:hidden; }
.dash-quality-bar div{ height:100%; background:var(--warm-metal); border-radius:99px; }
.dash-row-between{ display:flex; align-items:center; justify-content:space-between; }
.dash-select{ font-size:12px; color:var(--ink-faint); background:var(--limestone-card); padding:5px 10px; border-radius:99px; border:1px solid var(--limestone-line); }
.dash-chart{ width:100%; height:110px; margin-top:14px; }
.dash-card-ai{ background:var(--graphite); }
.dash-card-ai .dash-label{ color:var(--on-dark-soft); }
.dash-ai-query{ color:#fff; font-size:14.5px; font-style:italic; margin:10px 0; }
.dash-ai-answer{ font-size:12.5px; color:var(--on-dark-soft); display:flex; align-items:center; gap:8px; }
.dash-ai-check{ color:#8CA0FF; font-weight:700; }
.dash-toast{
  position:absolute; top:-18px; right:24px;
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:var(--radius-pill);
  padding:11px 18px;
  font-size:13px; font-weight:600;
  display:flex; align-items:center; gap:9px;
  box-shadow:var(--shadow-lift);
  opacity:0;
  transform:translateY(8px);
  transition:opacity .4s var(--ease), transform .4s var(--ease);
  z-index:2;
}
.dash-toast.is-shown{ opacity:1; transform:translateY(0); }
.dash-toast-dot{ width:8px; height:8px; border-radius:50%; background:#1F7A45; }

.dash-badge-float{
  position:absolute; left:-28px; bottom:-26px;
  display:flex; flex-direction:column;
  background:var(--graphite);
  color:#fff;
  border-radius:20px;
  padding:16px 22px;
  box-shadow:0 24px 50px -16px rgba(28,45,110,.5);
  transform:rotate(-4deg);
  z-index:2;
}
.dash-badge-float-num{ font-size:26px; font-weight:800; letter-spacing:-0.02em; color:var(--warm-metal); }
.dash-badge-float-label{ font-size:12px; font-weight:600; color:var(--on-dark-soft); margin-top:2px; }

/* ==========================================================================
   Cost table (09)
   ========================================================================== */
.cost-card{
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:var(--radius-lg);
  padding:40px 44px;
  box-shadow:var(--shadow-card);
}
.cost-row{ display:flex; align-items:center; justify-content:space-between; padding:16px 0; border-bottom:1px solid var(--limestone-line); font-size:15.5px; }
.cost-row span{ color:var(--ink-soft); }
.cost-row strong{ font-weight:700; }
.cost-row-total{
  margin-top:8px;
  border-bottom:none;
  background:var(--graphite);
  color:#fff;
  padding:20px 24px;
  border-radius:var(--radius-md);
}
.cost-row-total span{ color:var(--on-dark-soft); font-weight:600; }
.cost-row-total strong{ font-size:18px; }
.cost-caveat{ font-size:13px; color:var(--ink-faint); margin-top:16px; font-style:italic; }
.fee-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; margin-top:56px; }

/* ==========================================================================
   FAQ
   ========================================================================== */
.faq-list{ display:flex; flex-direction:column; gap:12px; }
.faq-item{
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:var(--radius-md);
  padding:22px 26px;
}
.faq-item summary{
  cursor:pointer;
  font-weight:600;
  font-size:16px;
  list-style:none;
  display:flex;
  align-items:center;
  justify-content:space-between;
}
.faq-item summary::-webkit-details-marker{ display:none; }
.faq-item summary::after{
  content:'+';
  font-size:20px;
  color:var(--ink-faint);
  transition:transform var(--dur-fast) var(--ease);
  flex-shrink:0;
  margin-left:16px;
}
.faq-item[open] summary::after{ transform:rotate(45deg); }
.faq-item p{ margin-top:14px; color:var(--ink-soft); font-size:14.5px; line-height:1.6; }

/* ==========================================================================
   Final CTA (10)
   ========================================================================== */
.section-final{
  position:relative; overflow:hidden;
  min-height:100vh;
  display:flex; align-items:center; justify-content:center;
  padding-top:120px; padding-bottom:120px;
  box-sizing:border-box;
}
.section-final::before{
  content:'';
  position:absolute; inset:0;
  background:radial-gradient(ellipse 55% 45% at 50% 50%, rgba(208,95,59,.10), transparent 70%);
  pointer-events:none;
}
.section-final .section-head{ text-align:center; margin-left:auto; margin-right:auto; margin-bottom:48px; max-width:900px; }
.section-final .section-head h2{
  font-size:clamp(2.4rem, 4.5vw, 4.2rem) !important;
  line-height:1.02 !important;
}
.section-final .section-lede{ margin-left:auto; margin-right:auto; }
.final-cta{ margin-top:8px; }
.final-cta .btn-lg{ padding:19px 44px; font-size:17px; }
.final-deco{ position:absolute; inset:0; pointer-events:none; }
.deco{
  position:absolute;
  filter:drop-shadow(0 16px 30px rgba(28,45,110,0.16));
}
.deco-badge{
  display:flex; align-items:center; justify-content:center;
  width:100%; height:100%;
  border-radius:28%;
}
.deco-badge svg{ width:44%; height:44%; }
.deco-badge-navy-fill{ background:var(--graphite); color:#fff; border-radius:50%; }
.deco-badge-orange-fill{ background:var(--signal-blue); color:#fff; border-radius:50%; }
.deco-badge-cream{ background:var(--icon-metal-bg, #fff0e8); color:var(--signal-blue-dim, var(--signal-blue)); border:1px solid rgba(28,45,110,.08); }
.deco-badge-navy-tint{ background:rgba(28,45,110,.08); color:var(--graphite); border:1px solid rgba(28,45,110,.12); }
.deco-badge-orange-tint{ background:var(--icon-blue-bg, #ffe8e1); color:var(--signal-blue); border-radius:50%; }

.final-deco-illustrated .deco{ filter:drop-shadow(0 18px 32px rgba(28,45,110,0.22)); }
.final-deco-illustrated .deco img{
  width:100%; height:100%;
  object-fit:cover;
  border-radius:28%;
  background:#f7f2ea;
}

.final-deco-loose{ overflow:visible; }
.deco2{
  position:absolute;
  filter:drop-shadow(0 14px 26px rgba(28,45,110,0.22));
  transform:rotate(var(--r,0deg));
  transition:transform var(--dur-fast) var(--ease), filter var(--dur-fast) var(--ease);
  pointer-events:auto;
  cursor:default;
}
.deco2:hover{
  transform:rotate(var(--r,0deg)) scale(1.14);
  filter:drop-shadow(0 20px 34px rgba(208,95,59,0.4));
}
.deco2 img{ width:100%; height:auto; display:block; }

.deco2-1{  top:6%;   left:16%;  width:158px; --r:-8deg; }
.deco2-2{  top:70%;  left:5%;   width:120px; --r:11deg; }
.deco2-3{  top:15%;  left:37%;  width:70px;  --r:-14deg; }
.deco2-4{  bottom:4%; right:29%; width:132px; --r:7deg; }
.deco2-5{  top:47%;  left:2%;   width:70px;  --r:12deg; opacity:0.95; }
.deco2-6{  top:7%;   right:9%;  width:104px; --r:-11deg; }
.deco2-7{  top:83%;  left:47%;  width:56px;  --r:10deg; opacity:0.95; }
.deco2-8{  top:29%;  right:5%;  width:94px;  --r:-6deg; }
.deco2-9{  top:59%;  right:1%;  width:50px;  --r:16deg; opacity:0.9; }
.deco2-10{ bottom:9%; left:33%; width:128px; --r:5deg; }
.deco2-11{ top:35%;  right:21%; width:88px;  --r:-9deg; }
.deco2-12{ top:90%;  left:64%;  width:60px;  --r:-15deg; opacity:0.9; }

@media (max-width:760px){
  /* The desktop layout scatters 12 stickers across a short, wide section,
     leaving plenty of margin beside the centered headline. On mobile the
     section is much narrower and taller, so those same positions land
     directly on top of the headline and button. Rather than reuse
     percentages tuned for a different aspect ratio, only the stickers that
     sit cleanly in the top and bottom margins are kept, shrunk down so
     they read as light corner accents instead of dominating a small
     screen. */
  .deco2{ transform:scale(0.58) rotate(var(--r,0deg)); }
  /* All 12 now kept (only 5 were before) â€” repositioned into the top and
     bottom margins around the headline/button instead of reusing
     desktop's wide-short-section percentages, which land several of
     these directly on top of the text on a narrow-tall mobile section. */
  .deco2-1{ top:1%; left:2%; bottom:auto; right:auto; }
  .deco2-2{ top:auto; bottom:2%; left:0; right:auto; }
  .deco2-3{ top:16%; left:6%; bottom:auto; right:auto; }
  .deco2-4{ top:auto; bottom:15%; right:16%; left:auto; }
  .deco2-5{ top:24%; right:10%; bottom:auto; left:auto; }
  .deco2-6{ top:1%; right:0; left:auto; bottom:auto; }
  .deco2-7{ top:auto; bottom:22%; left:22%; right:auto; }
  .deco2-8{ top:9%; right:-2%; left:auto; bottom:auto; }
  .deco2-9{ top:20%; left:22%; bottom:auto; right:auto; }
  .deco2-10{ top:auto; bottom:6%; left:24%; right:auto; }
  .deco2-11{ top:12%; right:24%; bottom:auto; left:auto; }
  .deco2-12{ top:auto; bottom:1%; right:4%; left:auto; }
}
.deco-1{ top:8%;  left:6%;  width:126px; height:126px; transform:rotate(-9deg); }
.deco-2{ top:14%; right:8%; width:104px; height:104px; transform:rotate(11deg); }
.deco-3{ bottom:22%; left:14%; width:86px;  height:86px;  transform:rotate(-7deg); }
.deco-4{ bottom:10%; right:16%; width:118px; height:118px; transform:rotate(6deg); }
.deco-5{ top:48%; left:3%;  width:74px;  height:74px;  transform:rotate(14deg); opacity:0.92; }
.deco-6{ top:6%;  right:26%; width:70px;  height:70px;  transform:rotate(-12deg); opacity:0.9; }
.deco-7{ bottom:6%; left:34%; width:80px; height:80px; transform:rotate(9deg); opacity:0.9; }

.apply-form{
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  border-radius:var(--radius-lg);
  padding:44px;
  box-shadow:var(--shadow-card);
}
.form-grid{ display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-bottom:28px; }
.form-field{ display:flex; flex-direction:column; gap:8px; }
.form-field-full{ grid-column:1 / -1; }
.form-field span{ font-size:13px; font-weight:600; color:var(--ink-soft); }
.form-field input, .form-field select, .form-field textarea{
  font-family:inherit;
  font-size:15px;
  padding:12px 14px;
  border-radius:11px;
  border:1px solid var(--limestone-line);
  background:var(--limestone);
  color:var(--ink);
  resize:vertical;
  transition:border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
}
.form-field input:focus, .form-field select:focus, .form-field textarea:focus{
  outline:none;
  border-color:var(--signal-blue);
  background:#fff;
}
.form-note{ text-align:center; margin-top:16px; font-size:13px; color:var(--ink-faint); }

/* ==========================================================================
   Footer
   ========================================================================== */
.footer{ padding:36px 0 48px; border-top:1px solid var(--limestone-line); }
.footer-inner{ display:flex; align-items:center; justify-content:space-between; font-size:13px; color:var(--ink-faint); }
.footer-links{ display:flex; gap:20px; }
.footer-links a{ transition:color var(--dur-fast) var(--ease); }
.footer-links a:hover{ color:var(--ink); }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width:1024px){
  .container{ padding:0 24px; }
  .section{ padding:100px 0; }
  .process-list::before{ bottom:-154px; }
  .section-cadence{ margin-top:-120px; }
  .cap-grid{ grid-template-columns:1fr 1fr; }
  .cadence-grid{ grid-template-columns:1fr; gap:20px; }
  .fee-grid{ grid-template-columns:1fr; }
  .dash-body{ grid-template-columns:1fr; }
  .form-grid{ grid-template-columns:1fr; }
  .loop-node{ width:110px; height:110px; }
}

/* Below the width where equal centered columns have room for the
   lang switcher + CTA, cluster logo+links left instead of colliding. */
@media (min-width:761px) and (max-width:1150px){
  .nav{ display:flex; gap:28px; }
  .nav-logo{ justify-self:auto; }
  .nav-links{ justify-self:auto; gap:18px; font-size:11.5px; }
  .nav-right{ justify-self:auto; margin-left:auto; }
}

@media (max-width:760px){
  .nav-wrap{ top:max(12px, env(safe-area-inset-top)); left:12px; right:12px; }
  /* Base .nav is a 3-col grid (logo / links / right) for desktop's centered
     nav-links. On mobile nav-links is pulled out with position:absolute, so
     its grid track collapses to near-zero width but still eats a share of
     the free space, leaving the hamburger stranded mid-header instead of
     flush right. Flex with space-between sidesteps the grid math entirely. */
  .nav{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 8px 8px 16px; }
  /* .nav-right (desktop lang switcher + CTA, both display:none below) still
     counts as a 3rd flex item even though it's visually empty, so
     space-between spreads logo/toggle/nav-right evenly across the header
     instead of pinning logo left and toggle right. Removing it from flow
     leaves exactly the two items space-between is meant to split. */
  .nav-right{ display:none; }
  .nav-logo-text{ font-size:19px; white-space:nowrap; }
  /* Full-screen takeover sheet, not a floating dropdown card: it fills
     everything below the header bar (the header itself, logo + close icon,
     stays visible on top as the panel's title row) so opening the menu
     reads as switching screens the way a native app does. */
  .nav-links{
    position:fixed;
    top:0; left:0; right:0; bottom:0;
    width:100%;
    height:100%;
    margin:0;
    max-width:none;
    transform:none;
    flex-direction:column;
    align-items:stretch;
    justify-content:flex-start;
    gap:2px;
    background:
      radial-gradient(ellipse 75% 42% at 10% 0%, rgba(208,95,59,.16), transparent 60%),
      radial-gradient(ellipse 60% 40% at 100% 14%, rgba(74,99,240,.14), transparent 62%),
      var(--limestone);
    border:none;
    border-radius:0;
    box-shadow:none;
    padding:calc(max(12px, env(safe-area-inset-top)) + 76px) 22px calc(28px + env(safe-area-inset-bottom));
    opacity:0;
    visibility:hidden;
    z-index:41;
    transition:opacity .3s var(--ease), visibility 0s linear .3s;
  }
  .nav-links.is-open{
    opacity:1;
    visibility:visible;
    transition:opacity .3s var(--ease);
  }
  .nav-backdrop{ display:none; }
  body.nav-open{ overflow:hidden; }
  .nav-links a:not(.btn){
    padding:20px 6px;
    border-radius:14px;
    font-size:24px;
    font-weight:800;
    letter-spacing:0;
    text-transform:none;
    border-bottom:1px solid var(--limestone-line);
    -webkit-tap-highlight-color:transparent;
    transition:background .15s var(--ease), color .15s var(--ease), transform .15s var(--ease);
  }
  /* :last-of-type can't be used here: it matches the last <a> among ALL
     <a> siblings regardless of the :not(.btn) filter on this rule, and
     the "Apply for a partnership" link (also an <a>, just .btn) comes
     after "Our edge" in the DOM â€” so :last-of-type never matched "Our
     edge" at all, leaving its border-bottom rendering right on top of
     .nav-lang-mobile's own border-top just below it (a doubled-up
     divider line). nth-last-of-type(2) is exactly "Our edge": counting
     back through all <a> tags, position 1 is the .btn link, position 2
     is the last non-btn one. */
  .nav-links a:not(.btn):nth-last-of-type(2){ border-bottom:none; }
  .nav-links a:not(.btn)::after{ display:none; }
  @media (hover:hover){
    .nav-links a:not(.btn):hover{ background:rgba(14,16,19,0.04); }
  }
  .nav-links a:not(.btn):active{ background:rgba(14,16,19,0.06); transform:scale(0.98); }
  .nav-lang-desktop{ display:none; }
  .nav-lang-mobile{
    display:flex; justify-content:center;
    margin:22px 0 4px; padding:22px 0 2px;
    border-right:none;
    border-top:1px solid var(--limestone-line);
  }
  .nav-lang-mobile .nav-lang-btn{ padding:8px 14px; font-size:14px; }
  .btn-nav-mobile{ display:flex; margin:26px 4px 4px; justify-content:center; }
  /* .btn-nav-mobile is the link itself (not a wrapper around a nested
     .btn), so ".btn-nav-mobile .btn" never matched anything â€” this button
     was silently still running on the generic ".nav-links a" styling
     (padding:4px 0, uppercase, letter-spacing:0.06em, 12.5px), nothing
     like the hero CTA it's supposed to mirror. ".nav-links a" is (1
     class + 1 element) specificity; matching that requires at least two
     classes here too, hence ".nav-links a.btn-nav-mobile" rather than
     ".btn-nav-mobile" alone. Values below are copied 1:1 from the hero's
     .btn.btn-lg computed styles at this breakpoint (padding, font-size,
     weight, and â€” critically â€” text-transform:none / letter-spacing:
     normal to undo the uppercase nav styling), so this button reads as
     the exact same button, not a smaller lookalike.
     box-shadow needs !important: the brand-override block (section 9,
     unscoped by width) forces .btn-primary's shadow at every breakpoint,
     so a plain declaration here would silently lose to it. */
  .nav-links a.btn-nav-mobile{
    width:100%;
    padding:16px 32px;
    font-size:16px;
    font-weight:600;
    text-transform:none;
    letter-spacing:normal;
    border-radius:var(--radius-pill);
    box-shadow:0 1px 2px rgba(208,95,59,.18), 0 10px 26px -10px rgba(208,95,59,.52) !important;
    transition:transform .15s var(--ease), box-shadow .15s var(--ease);
  }
  .nav-links a.btn-nav-mobile:active{
    transform:scale(0.97);
  }
  .btn-nav-desktop{ display:none; }
  /* nav-links is a fixed full-screen sheet at z-index:41 painted after
     these in DOM order, so without their own stacking position it would
     render on top and bury the logo/close icon. Lifting both above it
     keeps the header row visible as the panel's title bar while open. */
  .nav-logo{ position:relative; z-index:42; }
  .nav-toggle{
    display:flex; flex-direction:column; justify-content:center; align-items:center; gap:5px;
    width:44px; height:44px; border:none; background:transparent; cursor:pointer;
    flex-shrink:0; border-radius:12px;
    position:relative; z-index:42;
    -webkit-tap-highlight-color:transparent;
    transition:background .15s var(--ease);
  }
  .nav-toggle:active{ background:rgba(14,16,19,0.06); }
  .nav-toggle span{
    width:19px; height:2px; background:var(--ink); margin:0 auto; border-radius:2px;
    transition:transform .28s cubic-bezier(.34,1.42,.64,1), opacity .18s var(--ease);
  }
  .nav-toggle[aria-expanded="true"] span:first-child{ transform:translateY(3.5px) rotate(45deg); }
  .nav-toggle[aria-expanded="true"] span:last-child{ transform:translateY(-3.5px) rotate(-45deg); }

  .hero{ padding:150px 0 40px; }

  /* Scaling the exact desktop canvas down (the previous approach here)
     guaranteed identical curves, but desktop's icons sit spread across a
     wide 860px canvas â€” shrinking that whole canvas to fit a phone made
     everything, icons included, too small to read comfortably. This is a
     compact mobile-native layout instead: fixed, legible icon/text sizes
     in a tight 6-column grid (so the 6 channel icons land 3-per-row and
     the capability rows land as dark-icon/label/label/orange-icon pairs),
     with connecting lines computed at runtime by funnelMobileLines() in
     script.js from each icon's actual on-screen position â€” needed because
     row heights vary with label length/language and can't be hardcoded.
     Packing 6 icons into a narrower column spread than desktop's 860px
     span also naturally produces a tighter "V" convergence instead of a
     wide shallow arc. */
  .funnel-wrap{
    position:relative;
    display:grid;
    grid-template-columns:repeat(6, 1fr);
    grid-auto-flow:dense;
    align-items:start;
    column-gap:3%;
    row-gap:22px;
    height:auto;
    width:auto;
    max-width:100%;
    left:auto;
    transform:none;
    margin:32px auto 0;
    padding:0 16px;
    box-sizing:border-box;
  }
  .funnel-lines-mobile{
    display:block;
    position:absolute;
    inset:0;
    width:100%;
    height:100%;
    z-index:-1;
    overflow:visible;
  }
  /* Solid, not dashed: 6 dashed curves converging on one point put several
     lines' dash/gap segments on top of each other right at the merge,
     which reads as chaotic no matter how the curves themselves are eased.
     Solid strokes overlapping there just blend into a slightly thicker
     line â€” no dash pattern to clash. */
  .funnel-mobile-path{
    fill:none;
    stroke:#d05f3b;
    stroke-width:2;
    opacity:0.5;
  }
  .funnel-mobile-trunk{
    fill:none;
    stroke:#d05f3b;
    stroke-width:2.5;
    opacity:0.62;
  }
  .funnel-lines,
  .funnel-marker,
  .funnel-connector{ display:none; }
  /* Mobile version of desktop's .funnel-marker pills â€” top set by
     funnelMobileLines() in script.js (the trunk's length is content-
     driven, not a fixed value), left:50% + translateX(-50%) centers them
     on the trunk since there's no room on a phone to stagger them to
     alternating sides the way desktop does. */
  .funnel-mobile-marker{
    display:flex;
    align-items:center;
    gap:7px;
    position:absolute;
    left:50%;
    transform:translate(-50%,-50%) translateY(10px);
    opacity:0;
    transition:opacity .45s ease-out, transform .45s ease-out;
    background:#fff;
    border-radius:var(--radius-pill);
    padding:6px 14px 6px 6px;
    font-size:10.5px;
    font-weight:800;
    letter-spacing:0.02em;
    color:var(--ink);
    box-shadow:var(--shadow-card);
    white-space:nowrap;
    z-index:1;
  }
  .funnel-mobile-marker.in-view{
    opacity:1;
    transform:translate(-50%,-50%);
  }
  .funnel-mobile-marker-x{
    display:flex; align-items:center; justify-content:center;
    width:20px; height:20px;
    border-radius:50%;
    background:#d05f3b;
    color:#fff;
    flex-shrink:0;
  }
  .funnel-mobile-marker-x svg{ width:9px; height:9px; }
  /* !important: the scroll-reveal rules (.funnel-wrap.is-visible
     .funnel-node etc.) are more specific than a plain .funnel-node
     selector, so without it the reveal animation keeps winning and holds
     every icon at its mid-animation translate(-50%,-50%) offset. The
     desktop keyframe/scale animation is still swapped out for a plain
     opacity+translateY transition here (rather than left fully static) so
     mobile gets its own real, layout-safe entrance instead of popping in
     instantly with no motion at all. */
  .funnel-node{
    position:static !important;
    transform:translateY(16px) !important;
    opacity:0 !important;
    animation:none !important;
    transition:opacity .6s cubic-bezier(.16,.8,.24,1), transform .6s cubic-bezier(.16,.8,.24,1);
    transition-delay:var(--node-delay, 0s);
    grid-column:span 2;
    display:flex;
    flex-direction:column;
    align-items:center;
  }
  .funnel-wrap.is-visible .funnel-node{
    transform:translateY(0) !important;
    opacity:1 !important;
  }
  .funnel-chip{
    position:static;
    transform:none;
    margin-top:12px;
    padding:6px 12px;
    font-size:13px;
    white-space:normal;
    text-align:center;
    box-shadow:none;
  }
  .funnel-node-icon-sm{ width:46px; height:46px; }
  .funnel-node-icon-sm svg{ width:20px; height:20px; }
  /* Explicit grid-column, not span-based auto-flow: puts the dark icon in
     column 1 (flush left) and mirrors the orange icon into column 6
     (flush right), with both labels pulled toward the middle â€” this is
     what actually keeps text off the trunk line at 50%, since a plain
     span-based left label would end exactly there. Regardless of DOM
     order (icon, then label) CSS grid can place things anywhere, so the
     right column renders label-then-icon visually without touching the
     HTML. grid-auto-flow:dense above is required for this to work: with
     the default sparse algorithm the placement cursor only moves forward,
     and the label (col 4-6) coming right after its icon (col 6-7) in DOM
     order would get dropped to a new row since its start column is
     behind the cursor. */
  .funnel-system{
    position:static !important;
    transform:translateY(16px) !important;
    opacity:0 !important;
    animation:none !important;
    transition:opacity .55s cubic-bezier(.16,.8,.24,1), transform .55s cubic-bezier(.16,.8,.24,1);
    transition-delay:var(--sys-delay, 0s);
    grid-column:1 / 2;
    display:flex;
    align-items:center;
    justify-content:center;
  }
  .funnel-system.in-view{
    transform:translateY(0) !important;
    opacity:1 !important;
  }
  .funnel-system-right{ grid-column:6 / 7; }
  .funnel-system-label{
    position:static !important;
    transform:translateY(16px) !important;
    opacity:0 !important;
    animation:none !important;
    transition:opacity .55s cubic-bezier(.16,.8,.24,1), transform .55s cubic-bezier(.16,.8,.24,1);
    transition-delay:var(--sys-delay, 0s);
    grid-column:2 / 4;
    width:auto;
    min-width:0;
    display:flex;
    align-items:center;
    min-height:46px;
    padding:0 10px 0 8px;
    font-size:14px;
    line-height:1.3;
    text-align:left !important;
    /* Some Danish labels (e.g. "konverteringssporing") are one long word
       with no space to wrap at, so they were overflowing their column
       horizontally into the next one instead of wrapping â€” this lets long
       words break mid-word rather than spill over. min-width:0 above is
       needed too: as a grid item this would otherwise refuse to shrink
       below its text's natural unbroken width regardless of overflow-wrap. */
    overflow-wrap:break-word;
    word-break:break-word;
  }
  .funnel-system-label.in-view{
    transform:translateY(0) !important;
    opacity:1 !important;
  }
  .funnel-system-label-right{ grid-column:4 / 6; padding:0 8px 0 10px; }
  /* The gap the fan needs to actually read as "converging" before the
     trunk starts â€” script.js measures this gap live rather than
     hardcoding it, so it stays correct if this value changes.
     nth-of-type(10)/(11), not (7)/(8): :nth-of-type counts among ALL
     sibling <div>s in DOM order, and the 3 .funnel-mobile-marker divs
     (added for the risk-marker pills) now come before the 6 .funnel-node
     divs, shifting the first .funnel-system pair from the 7th/8th div to
     the 10th/11th. Any time a div is added/removed before this point in
     the markup, these indices need to move with it. */
  .funnel-system:nth-of-type(10),
  .funnel-system:nth-of-type(11){ margin-top:280px; }
  /* .funnel-system-label is a <span> and the icon above is a <div>, so
     these are two separate nth-of-type counts (each counts only among
     same-tag siblings, unaffected by the marker divs) â€” the label's own
     count still starts at 1. Without shifting the label to match, the
     icon drops 280px into the gap while its label stays put, desyncing
     the pair. */
  .funnel-system-label:nth-of-type(1),
  .funnel-system-label:nth-of-type(2){ margin-top:280px; }

  .funnel-transition{ padding-top:0; margin-top:48px; max-width:100%; }
  .funnel-transition-connector{ display:none; }
  /* The manual <br> after "marketing" was tuned for desktop's much wider,
     larger-font headline â€” at 30px on a narrow mobile column it forces
     an early break and then wraps AGAIN within each half anyway, costing
     an extra line for no benefit. Letting it wrap naturally across the
     full width uses the space better. */
  .funnel-transition h2 br{ display:none; }
  /* 30px matches every other section headline on mobile (see #fordel,
     #system, #cadence below) â€” only the hero h1 and .section-final's
     headline keep their own larger sizes. */
  .funnel-transition h2{ font-size:30px !important; line-height:1.18 !important; margin-top:16px; }

  /* Desktop centers everything with position:absolute + top:50% against a
     tall fixed-height stage. On mobile the stage height is content-driven
     instead, so that whole scheme (including the badge's leftover
     translateY(-50%)) was fighting the real layout: the week box clipped
     off the left edge and the badge sat shifted above the heading instead
     of level with the box. Flexbox replaces it outright: box and content
     as two row items sharing the same top edge is what actually guarantees
     "the line through the box center" and "badge level with the box". */
  /* padding-bottom:0 (not the 28px desktop uses) so the rail â€” which
     spans this container's full top:0 to bottom:0 â€” ends exactly at the
     verdict box's own bottom edge instead of continuing past it into
     empty space below the box. */
  .cost-timeline{ margin:64px auto 0; max-width:100%; padding:0 20px 0; }
  .cost-timeline::before{ left:48px; }
  .cost-timeline-stage{
    display:flex;
    align-items:flex-start;
    gap:18px;
    min-height:0;
    padding-left:0;
    margin-bottom:36px;
  }
  .cost-timeline-content{
    position:static;
    width:auto;
    flex:1 1 auto;
    transform:none;
    text-align:left !important;
  }
  .cost-timeline-badge{ transform:none; }
  .cost-timeline-connector{ display:none; }
  /* DOM order is content, then week (desktop alternates which side each
     lands on visually via absolute positioning) â€” order:-1 is needed to
     actually put the week box first/left in the flex row to sit on the
     line, otherwise it flows after content and ends up stranded on the
     right, disconnected from the line entirely. */
  .cost-timeline-week{
    position:static;
    order:-1;
    flex-shrink:0;
    transform:none;
    width:56px; height:56px;
    border-radius:16px;
  }
  .cost-timeline-week strong{ font-size:18px; }
  .cost-timeline-content h4{ font-size:19px; }
  /* The box's own left padding edge (22px box padding + the container's
     22.7px left offset) lands almost exactly on the timeline rail at
     48px â€” so left-aligning the text (instead of desktop's centered)
     makes the rail flow straight into where the copy starts, rather
     than the rail cutting across a centered paragraph off to its side
     the way it did before, which read as broken/misaligned since every
     other line on the page runs centered but this was the one place a
     line visibly crossed through a block of centered text. */
  /* radius-lg (28px) is wider than the 25.3px gap between the box's own
     left edge (22.7px) and the rail at 48px, so the rounded bottom-left
     corner was sweeping past the rail's x position before reaching the
     box's true bottom edge â€” a visible notch between the rail and the
     box. A smaller radius here keeps the corner's arc inside that gap. */
  .cost-timeline-verdict{ margin:36px 0 0 0; max-width:100%; padding:20px 22px; text-align:left; border-radius:14px; }
  .cost-timeline-verdict p{ font-size:15.5px; }
  /* No connecting line between the verdict box and "How it works" at all
     now â€” the rail stops flush at the box (see .cost-timeline padding
     above) and the pill has no lead-in line either (see
     #system .section-head-connector below), instead of trying to
     visually bridge the two. */
  .cost-timeline-bend{ display:none; }
  /* No orange line touching the "How it works" pill at all on mobile. */
  #system .section-head-connector{ display:none; }
  /* Also a floating standalone bar with nothing above or below it to
     connect to on mobile (it's a desktop-only decorative element between
     the hero and #system) â€” without this it was still rendering at its
     default desktop position/size, showing up as an orphan orange line
     with empty space on both sides of it. */
  .section-bridge-line{ display:none; }
  /* Same orphan-line issue as #system/#cadence above, just never given
     the matching override: #fordel's pill has nothing above it on
     mobile to connect to either. */
  #fordel .section-head-connector{ display:none; }
  /* Uppercase + bold at the default clamp() size wraps this specific
     headline to 5 very uneven lines (several down to a single short
     word) on a ~350px-wide mobile column â€” shrinking it to 2-3 balanced
     lines uses the width much better. Scoped to #fordel only, not the
     shared .section-head h2 rule every other section's headline uses. */
  /* !important needed: the unscoped brand-override block (further down
     this file) sets h2 font-size with !important at every breakpoint, so
     a plain declaration here would silently lose to it. */
  #fordel .section-head h2{ font-size:30px !important; line-height:1.18 !important; }
  /* Same 30px as #fordel â€” every section headline on mobile matches now
     except the hero h1 and .section-final's, which keep their own larger
     sizes (see those rules for why). */
  #system .section-head h2, #cadence .section-head h2{ font-size:30px !important; line-height:1.18 !important; }
  /* Matches the 30px section headlines above (see #cadence) â€” the process
     card h3s used their own larger 34px, which read visibly bigger than
     every other headline on the page once those were normalized. */
  .process-copy h3{ font-size:30px !important; line-height:1.18 !important; }
  .cost-timeline-bend path{
    fill:none;
    stroke:var(--signal-blue);
    stroke-width:3;
    stroke-linecap:round;
    opacity:0.7;
  }

  .two-card-row, .compare-row, .cap-grid, .fee-grid{ grid-template-columns:1fr; }
  .process-row, .process-row-reverse{ grid-template-columns:1fr; direction:ltr; padding:28px; }
  /* .process-list::before is a center spine meant to run behind desktop's
     alternating left/right cards, visually connecting them. On mobile the
     rows above are forced to grid-template-columns:1fr â€” full-width,
     stacked, no left/right split â€” so that spine has nothing left to
     connect; it just shows as a stray vertical segment in the gaps
     between cards (hidden behind the cards themselves the rest of the
     time), which is the disconnected "line going into nothing" look. */
  .process-list::before{ display:none; }

  .timeline-line{ left:18px; }
  .timeline-step, .timeline-step-right{ width:calc(100% - 56px); margin-left:56px !important; }
  .timeline-step:not(.timeline-step-right) .timeline-marker, .timeline-step-right .timeline-marker{ left:-56px; right:auto; }

  .loop-wrap{
    max-width:100%; aspect-ratio:auto; cursor:default;
    display:flex; flex-direction:column; gap:12px;
    counter-reset:loopstep;
  }
  .loop-svg{ display:none; }
  .loop-hub-card{
    display:flex; align-items:center; gap:14px;
    background:var(--graphite);
    border-radius:var(--radius-lg);
    padding:20px 22px;
    box-shadow:var(--shadow-card);
    order:-1;
  }
  .loop-hub-card-icon{
    display:flex; align-items:center; justify-content:center;
    width:44px; height:44px; border-radius:12px; flex-shrink:0;
    background:rgba(255,255,255,0.1); color:var(--warm-metal);
  }
  .loop-hub-card-icon svg{ width:22px; height:22px; }
  .loop-hub-card-text{ display:flex; flex-direction:column; }
  .loop-hub-card-label{
    font-size:11px; font-weight:700; letter-spacing:0.1em;
    color:var(--warm-metal); text-transform:uppercase;
  }
  .loop-hub-card-title{ font-size:16.5px; font-weight:800; color:#fff; margin-top:2px; }

  .loop-node{
    position:relative; left:auto !important; top:auto !important; transform:none; text-align:left;
    display:grid; grid-template-columns:38px 1fr; align-items:center; column-gap:14px; row-gap:1px;
    width:100%; height:auto; border-radius:18px;
    padding:14px 18px;
  }
  .loop-node:hover, .loop-node.is-near{ transform:none; }
  .loop-node:not(:last-of-type)::after{
    content:''; position:absolute; left:32px; top:100%; width:2px; height:12px;
    background:var(--limestone-line); z-index:1;
  }
  .loop-node-icon{
    grid-row:span 2; align-self:center;
    width:38px; height:38px; border-radius:11px; margin-bottom:0;
    background:var(--icon-blue-bg, #ffe8e1);
  }
  .loop-node-icon svg{ width:19px; height:19px; }
  .loop-node-num{ display:none; }
  .loop-node-title{ font-size:15px; margin-top:0; }
  .loop-node-sub{ display:block; }

  .dash-stage{ padding:52px 20px 56px; border-radius:28px; margin-top:44px; }
  .dash-toast{ top:-14px; right:14px; padding:9px 14px; font-size:12px; }
  .dash-badge-float{ left:8px; bottom:-20px; padding:12px 16px; border-radius:16px; }
  .dash-badge-float-num{ font-size:20px; }
  .dash-badge-float-label{ font-size:11px; }

  .cadence-grid{ grid-template-columns:1fr; }
  .cost-card{ padding:28px; }
  .cost-row{ font-size:14px; flex-direction:column; align-items:flex-start; gap:4px; }

  .section-final{ padding-top:96px; padding-bottom:96px; }
  .deco{ transform:scale(0.6) rotate(var(--deco-rot, 0deg)); }
  .deco-1{ transform:scale(0.6) rotate(-9deg); top:4%; left:2%; }
  .deco-2{ transform:scale(0.6) rotate(11deg); top:8%; right:0%; }
  .deco-3{ transform:scale(0.55) rotate(-7deg); bottom:26%; left:0%; }
  .deco-4{ transform:scale(0.6) rotate(6deg); bottom:16%; right:2%; }
  .deco-6, .deco-7{ display:none; }
  .deco-5{ top:44%; left:-4%; }

  .footer-inner{ flex-direction:column; gap:14px; text-align:center; }
  /* Desktop's row layout (gap:20px, no wrap control) wraps onto two
     uneven lines on a narrow mobile column (email alone, then Privacy
     Policy + Terms of Service crammed together). Stacking each link on
     its own centered line reads cleanly instead. */
  .footer-links{ flex-direction:column; align-items:center; gap:10px; }
}

@media (max-width:760px) and (prefers-reduced-motion: reduce){
  .funnel-node,
  .funnel-system,
  .funnel-system-label{
    opacity:1 !important;
    transform:none !important;
    transition:none !important;
  }
  .funnel-mobile-marker{
    opacity:1;
    transform:translate(-50%,-50%);
    transition:none;
  }
}

/* =====================================================
   FYNZA VISUAL REFERENCE: Full Theme Override
   ===================================================== */

/* ---- 1. Color System -------------------------------- */
:root{
  --orange:        #d05f3b;
  --orange-dim:    #b04e2d;
  --navy:          #1c2d6e;
  --navy-card:     #18245c;

  /* Override existing tokens */
  --signal-blue:     #d05f3b;
  --signal-blue-dim: #b04e2d;
  --graphite:        #1c2d6e;
  --graphite-soft:   #1c2d6e;
  --graphite-card:   #18245c;
  --limestone:       #ecebe6;
  --limestone-card:  #ffffff;
  --limestone-line:  rgba(28,45,110,.09);
  --ink:             #14171b;
  --ink-soft:        #565b62;
  --ink-faint:       #8a8f97;
  --warm-metal:      #e8a070;
  --icon-blue-bg:    #ffe8e1;
  --icon-blue-fg:    #d05f3b;
  --icon-metal-bg:   #fff0e8;
  --icon-metal-fg:   #b04e2d;
  --icon-green-bg:   #ffe8e1;
  --icon-green-fg:   #d05f3b;
  --shadow-card:     0 2px 4px rgba(28,45,110,.05), 0 18px 40px -14px rgba(28,45,110,.14);
  --shadow-lift:     0 24px 70px -18px rgba(28,45,110,.28);
}

/* ---- 2. Body: warm cream + white dot grid ---------- */
body{
  background-color:#ecebe6;
  background-image:radial-gradient(circle at 1px 1px, rgba(255,255,255,.92) 1.2px, transparent 0);
  background-size:18px 18px;
  color:var(--ink);
}

/* ---- 3. Orange bloom at top (fixed layer) ----------- */
body::before{
  content:'';
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:-1;
  background:
    radial-gradient(ellipse 90% 38% at 50% -2%,  rgba(208,95,59,.30), transparent 62%),
    radial-gradient(ellipse 26% 18% at   0% 100%, rgba(208,95,59,.12), transparent 55%),
    radial-gradient(ellipse 26% 18% at 100% 100%, rgba(208,95,59,.12), transparent 55%);
}

/* ---- 4. Hero: remove the old blue-tinted bg -------- */
.hero-bg{ background:none !important; }

/* ---- 5. Hero headline: ALL CAPS, bigger, navy ------ */
.hero-h1{
  font-size:clamp(2.6rem,5.8vw,4.6rem) !important;
  font-weight:900 !important;
  letter-spacing:-0.04em !important;
  line-height:0.98 !important;
  text-transform:uppercase !important;
  color:var(--ink) !important;
}
@media(max-width:760px){
  .hero-h1{ font-size:clamp(1.8rem,7.6vw,3.1rem) !important; }
}

/* ---- 6. All section h2: ALL CAPS, 900w, navy ------- */
.section-head h2, h2{
  text-transform:uppercase !important;
  font-size:clamp(2.4rem,5vw,4rem) !important;
  font-weight:900 !important;
  letter-spacing:-0.045em !important;
  line-height:0.96 !important;
  color:var(--ink) !important;
}

/* ---- 7. Accent colour ------------------------------- */
.accent,.accent-underline{ color:#d05f3b !important; }

/* ---- 8. Pill badges ---------------------------------- */
.pill{ background:#fff; border-color:rgba(28,45,110,.12); color:var(--ink); }
.pill-static{ color:#d05f3b !important; }
.pill-link:hover{ border-color:#d05f3b; color:#d05f3b; }
.pill-on-dark{ background:rgba(255,255,255,.10); border-color:rgba(255,255,255,.24); color:rgba(255,255,255,.92); }

/* ---- 9. Buttons ------------------------------------- */
.btn-primary{
  background:#d05f3b !important;
  box-shadow:0 1px 2px rgba(208,95,59,.18), 0 10px 26px -10px rgba(208,95,59,.52) !important;
}
.btn-primary:hover{ background:#b04e2d !important; }
::selection{ background:#d05f3b; color:#fff; }
:focus-visible{ outline-color:#d05f3b; }

/* ---- 10. Nav ---------------------------------------- */
.nav{
  max-width:1280px;
  background:transparent !important;
  border:none !important;
  box-shadow:none !important;
  padding:10px 44px !important;
}
.nav-logo{ color:var(--ink) !important; font-weight:900 !important; }

/* ---- 11. Eyebrow ------------------------------------ */
.eyebrow{ color:#d05f3b !important; }
.eyebrow-inverse{ color:#ffb08a !important; }

/* ---- 12. Funnel viz: solid orange lines + circles -- */
.funnel-path{
  stroke:#d05f3b !important;
  stroke-width:2.2 !important;
}
.funnel-path-dot{ fill:#d05f3b !important; }
.funnel-node-icon:not(.funnel-node-icon-sm){
  border-radius:50% !important;
  border:4px solid #fff !important;
  box-shadow:0 14px 30px -6px rgba(208,95,59,.5), 0 0 0 1px rgba(28,45,110,.06) !important;
  width:78px !important; height:78px !important;
  transition:transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease) !important;
}
.funnel-node-icon.logo-badge{ background:#fff !important; }
.funnel-node-icon:not(.funnel-node-icon-sm) svg{ width:30px !important; height:30px !important; }
.funnel-node-icon.logo-badge svg{ width:36px !important; height:36px !important; }
.funnel-node:hover .funnel-node-icon{
  transform:scale(1.08) !important;
  box-shadow:0 18px 36px -6px rgba(208,95,59,.6), 0 0 0 1px rgba(28,45,110,.08) !important;
}
.funnel-chip{
  background:#fff !important;
  border-color:rgba(28,45,110,.10) !important;
  color:var(--ink) !important;
  font-weight:700 !important;
}

/* ---- 13. Cards -------------------------------------- */
.card-dark{ background:#1c2d6e !important; }
.highlight-bar{ background:#ffe8df !important; }
.highlight-bar strong{ color:#b04e2d !important; }
.highlight-bar-dark{ background:#1c2d6e !important; }
.highlight-bar-dark strong{ color:#ffb08a !important; }
.icon-badge-blue{ background:#ffe8e1 !important; color:#d05f3b !important; }
.icon-badge-metal{ background:#fff0e8 !important; color:#b04e2d !important; }
.icon-badge-green{ background:#ffe8e1 !important; color:#d05f3b !important; }

/* ---- 14. Process numbers ---------------------------- */
.process-num{ background:#d05f3b !important; }

/* ---- 15. Timeline ----------------------------------- */
.timeline-line-fill{ background:#d05f3b !important; }
.timeline-step.is-active .timeline-marker{ background:#d05f3b !important; border-color:#d05f3b !important; }
.timeline-marker{ color:var(--ink) !important; }

/* ---- 16. Dark capability section (navy) ------------- */
.section-dark{ background:#1c2d6e !important; }
.cap-card{ background:rgba(12,22,80,.50) !important; border-color:rgba(255,255,255,.10) !important; }
.cap-card:hover{ border-color:rgba(208,95,59,.55) !important; }
.cap-card li::before{ background:#d05f3b !important; }
.icon-badge-dark{ background:rgba(255,255,255,.10) !important; color:rgba(255,255,255,.88) !important; }

/* ---- 17. Growth loop -------------------------------- */
/* Colors resolve via the CSS custom properties redefined in the
   :root override above (--ink, --signal-blue, --warm-metal), so no
   per-element overrides are needed here. */

/* ---- 18. Dashboard ---------------------------------- */
.dash-topbar{ background:#1c2d6e !important; }
.dash-quality-bar div{ background:var(--warm-metal) !important; }
.dash-toast-dot{ background:#d05f3b !important; }
.dash-up{ color:#d05f3b !important; }
.dash-card-ai{ background:#1c2d6e !important; }
.dash-ai-check{ color:#ffb08a !important; }

/* ---- 19. Cost table --------------------------------- */
.cost-row-total{ background:#1c2d6e !important; }
.cost-caveat{ color:#8a94b0 !important; }

/* ---- 20. Compare cards ------------------------------ */
.compare-row .card-dark{ background:#d05f3b !important; }

/* ---- 21. Cadence ------------------------------------ */
.cadence-tag{ color:#d05f3b !important; }

/* ---- 27. Vores fordel comparison --------------------- */
/* Colors resolve via the --signal-blue custom property redefined in the
   :root override above, so no per-element overrides are needed here. */

/* ---- 22. Form --------------------------------------- */
.form-field input:focus,.form-field select:focus,.form-field textarea:focus{
  border-color:#d05f3b !important;
}

/* ---- 23. FAQ ---------------------------------------- */
.faq-item summary::after{ color:#d05f3b !important; }

/* ---- 24. Soft text ---------------------------------- */
.section-lede,.hero-sub{ color:#546280 !important; }
.hero-micro{ color:#8a94b0 !important; }

/* ---- 25. Footer ------------------------------------- */
.footer{ border-top-color:rgba(28,45,110,.09) !important; }

/* ---- 26. Mock card details -------------------------- */
.mock-tag-ok{ background:#ffe8df !important; color:#b04e2d !important; }
.mock-bar div{ background:#d05f3b !important; }

/* ==========================================================================
   Legal pages (Privacy Policy / Terms of Service)
   ========================================================================== */
.legal-hero{ padding-top:180px; padding-bottom:40px; }
.legal-back{
  display:inline-flex; align-items:center; gap:8px;
  font-size:14px; font-weight:700; color:var(--ink-soft);
  margin-bottom:28px;
  transition:color var(--dur-fast) var(--ease), gap var(--dur-fast) var(--ease);
}
.legal-back svg{ width:13px; height:13px; flex-shrink:0; transition:transform var(--dur-fast) var(--ease); }
.legal-back:hover{ color:var(--signal-blue); gap:11px; }
.legal-back:hover svg{ transform:translateX(-2px); }
.legal-hero h1{
  font-size:clamp(2.4rem, 5vw, 3.4rem);
  font-weight:900; letter-spacing:-0.02em; line-height:1.05;
  color:var(--ink); margin-top:18px;
}
.legal-updated{ margin-top:16px; font-size:14px; color:var(--ink-faint); font-weight:500; }

.legal-toc{
  display:flex; flex-wrap:wrap; gap:10px;
  margin:8px 0 0;
  padding-bottom:40px;
  border-bottom:1px solid var(--limestone-line);
}
.legal-toc a{
  font-size:13.5px; font-weight:700; color:var(--ink-soft);
  padding:9px 16px;
  border-radius:var(--radius-pill);
  background:var(--limestone-card);
  border:1px solid var(--limestone-line);
  transition:color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
}
.legal-toc a:hover{ color:var(--signal-blue); border-color:var(--signal-blue); background:var(--icon-blue-bg); }

.legal-body{ padding-top:8px; }
.legal-section{
  padding:44px 0;
  border-bottom:1px solid var(--limestone-line);
  display:grid; grid-template-columns:56px 1fr; gap:24px;
  scroll-margin-top:110px;
}
.legal-section:last-child{ border-bottom:none; padding-bottom:0; }
.legal-num{
  display:flex; align-items:center; justify-content:center;
  width:40px; height:40px;
  border-radius:50%;
  background:linear-gradient(150deg, var(--signal-blue), var(--signal-blue-dim));
  color:#fff; font-weight:800; font-size:14px;
  box-shadow:0 8px 16px -7px rgba(208,95,59,.5), inset 0 1px 1px rgba(255,255,255,.3);
  flex-shrink:0;
}
.legal-section h2{ font-size:22px; font-weight:800; letter-spacing:-0.01em; color:var(--ink); margin-bottom:14px; }
.legal-section h3{ font-size:16px; font-weight:700; color:var(--ink); margin:22px 0 8px; }
.legal-section p{ font-size:15.5px; line-height:1.7; color:var(--ink-soft); margin-bottom:14px; }
.legal-section p:last-child{ margin-bottom:0; }
.legal-section ul{ display:flex; flex-direction:column; gap:10px; margin:14px 0; padding-left:0; list-style:none; }
.legal-section ul:last-child{ margin-bottom:0; }
.legal-section li{ display:flex; align-items:flex-start; gap:12px; font-size:15.5px; line-height:1.6; color:var(--ink-soft); }
.legal-section li::before{
  content:''; flex-shrink:0; margin-top:9px;
  width:6px; height:6px; border-radius:50%;
  background:var(--signal-blue);
}
.legal-section strong{ color:var(--ink); font-weight:700; }
.legal-link{ color:var(--signal-blue); font-weight:600; text-decoration:underline; text-underline-offset:3px; }
.legal-callout{
  margin:22px 0; padding:22px 24px;
  border-radius:var(--radius-md);
  background:var(--icon-blue-bg);
  border:1px solid rgba(208,95,59,.18);
  font-size:14.5px; line-height:1.65; color:var(--ink);
}
.legal-callout:last-child{ margin-bottom:0; }
.legal-callout strong{ color:var(--ink); }

.legal-cross-link{
  margin-top:28px;
  font-size:14.5px; color:var(--ink-faint);
  text-align:center;
}

@media (max-width:640px){
  .legal-hero{ padding-top:140px; }
  .legal-section{ grid-template-columns:1fr; gap:14px; }
  .legal-num{ width:34px; height:34px; font-size:12.5px; }
}

/* ---- 14. Mobile nav: the brand-override block above forces
   `.nav{ padding:10px 44px !important; }` at every width (section 10,
   unscoped by any media query). On a ~360-400px viewport that 44px side
   padding alone eats ~22% of the header's width, which is what was
   squeezing the logo inward and stranding the hamburger short of the
   true right edge no matter what the mobile nav rules further up set.
   This needs matching !important, placed after that block, to win. ---- */
@media (max-width:760px){
  .nav{ padding:8px 8px 8px 16px !important; }
}
