/* ═══════════════════════════════════════════════════════════════════════
   css/service.css  —  SERVICE DETAIL  ·  v2

   Namespace .fw-svc-*   ·   loaded only by /service.php
   Design tokens come from css/common.css; everything page-local is scoped
   under .fw-svc-page so nothing can leak sideways.

   THE FIVE DECISIONS EVERYTHING ELSE FOLLOWS
   ──────────────────────────────────────────
   1. FULL BLEED. There is no max-width container in this file. Every
      section is width:100% on a 28px desktop / 14px mobile gutter — the
      same rail .fw-hdr and .fw-nav already sit on, so the page lines up
      with the chrome above it at any window size.

   2. MEASURE, NOT WIDTH. Body copy is held to ~72 characters by the TEXT
      element, never by the section. Tables, timelines, charts and callouts
      break out to the full column. That contrast — measured prose beside
      full-width exhibits — is what reads as editorial rather than stretched.

   3. DEPTH BY LAYERING. Four elevation steps and a hairline ring instead
      of borders. Real backdrop-filter glass, but only over imagery where
      there is something behind it worth blurring.

   4. COLOUR IS RATIONED. Pink is the accent and appears about six times on
      the whole page. Blue carries links, mint means verified, and the
      premium moments are deep ink with a soft brand bloom behind them.
      No pink→purple gradients anywhere — that pairing is the fastest way
      to make a page look machine-generated.

   5. ONE TYPEFACE. Outfit — the brand face, the same font the homepage
      sets every heading in. Display sizes get weight 600 and hard negative
      tracking rather than a second family. A serif in the headings makes
      the page read as a different template bolted onto the site. There is
      no serif anywhere in this file or in css/prose.css.

   SECTIONS
   ────────
     00  Tokens
     01  Primitives — eyebrow, buttons, links, breadcrumb
     02  Reading progress
     03  §1 Masthead — copy, feature plate, vitals
     04  §2 Article grid
     05      Contents index
     06      The article column
     07      FAQ · end matter
     08      Companion rail
     09  §3 Closing band
     10  Reveal-on-scroll
     11  Responsive mode switches
   ═══════════════════════════════════════════════════════════════════════ */

/* ══════════════════════════════════════════════════════════════
   00 · TOKENS
   ══════════════════════════════════════════════════════════════ */

.fw-svc-page{
	/* The gutter. 28px on large screens, 14px on mobile (see §14).
	   A single value, because every section must sit on the same rail as
	   the header — that alignment is most of what "premium" means here. */
	--pad:28px;

	/* Height of the sticky chrome. custom/js/article.js measures the real
	   thing and overwrites this; the literal is only the pre-JS fallback. */
	--article-top:116px;

	/* Ink. --ink is deeper than common.css's --dk, reserved for the two
	   premium dark surfaces (consult card, closing band). */
	--ink:var(--dk-d);
	--paper:var(--wh);
	--paper-2:var(--paper);

	/* Hairlines, never borders */
	--line:color-mix(in srgb, var(--dk) 9%, transparent);
	--line-soft:color-mix(in srgb, var(--dk) 5.5%, transparent);
	--ring:0 0 0 1px var(--ink-a06);

	/* Elevation — four steps. Each is two shadows: a tight contact shadow
	   plus a wide soft one, which is what stops a card looking like a box
	   with a drop-shadow filter on it. */
	--e1:0 1px 2px color-mix(in srgb, var(--dk) 4%, transparent);
	--e2:0 2px 4px -1px color-mix(in srgb, var(--dk) 4%, transparent), 0 8px 16px -6px color-mix(in srgb, var(--dk) 7%, transparent);
	--e3:0 4px 8px -3px color-mix(in srgb, var(--dk) 5%, transparent), 0 18px 36px -12px color-mix(in srgb, var(--dk) 10%, transparent);
	--e4:0 8px 18px -8px color-mix(in srgb, var(--dk) 7%, transparent), 0 44px 88px -24px color-mix(in srgb, var(--dk) 20%, transparent);

	/* Space — one 8px-derived scale used everywhere. Consistent gaps are
	   the difference between "designed" and "assembled". */
	--s1:4px;  --s2:8px;  --s3:12px; --s4:16px; --s5:24px;
	--s6:32px; --s7:48px; --s8:64px; --s9:96px;
	/* Rhythm between major sections */
	--sec:clamp(40px, 4.6vw, 86px);

	--r1:8px; --r2:12px; --r3:16px; --r4:22px;

	--ease:cubic-bezier(.22,1,.36,1);
	--ease-soft:cubic-bezier(.16,1,.3,1);

	--article-progress:0;

	background:var(--paper);
	-webkit-text-size-adjust:100%;
	/* Tabular figures wherever a number sits next to another number */
	font-variant-numeric:normal;
}

/* NO overflow:hidden here, however tempting. `overflow` anything other
   than visible makes an element the scroll container for every sticky
   descendant, and a sticky box then positions against a box that does not
   scroll — so it silently stops sticking. It cost the contents index and
   the consult prompt their entire travel down a 13,000px article, with no
   error and nothing visibly wrong in the CSS.
   Clipping belongs on the section whose decoration needs clipping, and
   both of those (.fw-svc-hero, .fw-svc-close) carry it themselves. */
.fw-svc{display:block;position:relative}

/* Canvas's style.css sets a bottom margin on bare `ul` at specificity
   (0,0,1), which BEATS common.css's `* { margin: 0 }` at (0,0,0) — so every
   list on this page carried ~31px of invisible space under it that the
   global reset never touched. It showed up as a vitals band whose bottom
   padding looked twice its top.
   Listed explicitly rather than as `.fw-svc ul`, because that would tie
   with `.fw-prose ul` on specificity and, loading later, would silently
   flatten the article's list styling. */
.fw-svc-vitals,
.fw-svc-toc__list,
.fw-svc-doc__stats,
.fw-svc-sim,
.fw-svc-res__list,
.fw-svc-ql,
.fw-svc-close__points{margin:0;padding:0;list-style:none}

/* Canvas's style.css carries a bare `em { font-family: var(--cnvs-secondary-font) }`
   — a serif — which silently reskinned every <em> on this page: the four
   vitals labels, and the % and + in the stat figures. The markup no longer
   uses <em> for any of them (they were labels and units, not emphasis), and
   this rule makes sure a future one cannot reintroduce the serif either.
   Bootstrap Icons live in <i>, so <i> is deliberately NOT included here. */
.fw-svc em{font-family:var(--ff)}

/* The one shared layout primitive. width:100% + gutter. No max-width,
   no margin-inline:auto — those are the two properties this file is
   deliberately built without. */
.fw-svc-hero__inner,
.fw-svc-body__inner,
.fw-svc-close__inner{
	position:relative;
	z-index:1;
	width:100%;
	padding-inline:var(--pad);
}

/* ══════════════════════════════════════════════════════════════
   01 · PRIMITIVES
   ══════════════════════════════════════════════════════════════ */

/* ── Eyebrow ── */
.fw-svc-eyebrow{
	display:inline-flex;align-items:center;gap:10px;
	font-family:var(--ff);
	font-size:11px;font-weight:600;
	letter-spacing:.18em;text-transform:uppercase;
	color:var(--pk);
}
.fw-svc-eyebrow__dot{
	width:3px;height:3px;border-radius:50%;
	background:currentColor;opacity:.55;flex-shrink:0
}
.fw-svc-eyebrow--onDark{color:var(--pk-l3)}

/* ── Buttons ──
   One geometry, four skins. 50px tall — comfortably above the 44px touch
   minimum without looking like a mobile app control on desktop. */
.fw-svc-btn{
	display:inline-flex;align-items:center;justify-content:center;gap:9px;
	min-height:46px;padding:0 20px;
	border-radius:100px;
	font-family:var(--ff);
	font-size:14px;font-weight:600;letter-spacing:-.005em;
	white-space:nowrap;
	transition:background .3s var(--ease), color .3s var(--ease),
	           box-shadow .35s var(--ease), transform .3s var(--ease);
	-webkit-tap-highlight-color:transparent
}
.fw-svc-btn i{font-size:1.1em;line-height:1;transition:transform .3s var(--ease)}
.fw-svc-btn:active{transform:scale(.975)}

.fw-svc-btn--full{width:100%}
.fw-svc-btn--pk{
	color:var(--wh);background:var(--pk);
	box-shadow:0 1px 2px color-mix(in srgb, var(--pk) 20%, transparent), 0 10px 24px -8px color-mix(in srgb, var(--pk) 55%, transparent)
}
.fw-svc-btn--pk:hover{
	background:var(--pk-d);
	box-shadow:0 1px 2px color-mix(in srgb, var(--pk) 24%, transparent), 0 16px 34px -10px color-mix(in srgb, var(--pk) 60%, transparent)
}
.fw-svc-btn--pk:hover i{transform:translateX(3px)}

/* Quiet: the secondary action. A ring, not a border — it sits on the page
   rather than being drawn on top of it. */
.fw-svc-btn--quiet{
	color:var(--g8);background:var(--paper);
	box-shadow:var(--ring), var(--e1)
}
.fw-svc-btn--quiet i{color:var(--wa);font-size:1.25em}
.fw-svc-btn--quiet:hover{box-shadow:0 0 0 1px var(--ink-a12), var(--e2)}

/* The two skins used ON a dark surface */
.fw-svc-btn--wh{color:var(--ink);background:var(--wh);box-shadow:0 12px 28px -10px color-mix(in srgb, var(--bk) 50%, transparent)}
.fw-svc-btn--wh:hover{transform:translateY(-1px);box-shadow:0 18px 38px -12px color-mix(in srgb, var(--bk) 60%, transparent)}
.fw-svc-btn--onDark{
	color:color-mix(in srgb, var(--wh) 94%, transparent);background:color-mix(in srgb, var(--wh) 7%, transparent);
	box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--wh) 18%, transparent)
}
.fw-svc-btn--onDark:hover{background:color-mix(in srgb, var(--wh) 13%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--wh) 32%, transparent)}

/* ── Text link ── */
.fw-svc-txtlink{
	display:inline-flex;align-items:center;gap:7px;
	min-height:50px;
	font-size:14.5px;font-weight:500;color:var(--bl);
	transition:color .25s
}
.fw-svc-txtlink i{font-size:11px;transition:transform .3s var(--ease)}
.fw-svc-txtlink:hover{color:var(--bl-d)}
.fw-svc-txtlink:hover i{transform:translateY(2px)}

/* ── Breadcrumb ──
   Quiet by design: it orients, it does not compete with the h1. Scrolls
   sideways on narrow screens instead of wrapping to three ragged lines. */

/* ══════════════════════════════════════════════════════════════
   02 · READING PROGRESS
   A 2px hairline on the bottom edge of the sticky chrome. Solid pink,
   not a gradient — a three-stop rainbow here is the single most
   recognisable "generated" tell.
   ══════════════════════════════════════════════════════════════ */

.fw-svc-progress{
	position:fixed;left:0;right:0;top:var(--article-top);
	height:2px;z-index:995;pointer-events:none
}
.fw-svc-progress>span{
	display:block;height:100%;
	width:calc(var(--article-progress) * 1%);
	background:var(--pk);
	box-shadow:0 0 12px color-mix(in srgb, var(--pk) 50%, transparent);
	transition:width .1s linear
}

/* ══════════════════════════════════════════════════════════════
   03 · §1 MASTHEAD — full-bleed image, copy inside it

   Edge to edge and hard against the nav: no gutter on any side, no
   radius, no shadow, 45vh tall. The only inset is the one the COPY sits
   on, which is the page gutter so the headline still lines up with
   everything below it.
   ══════════════════════════════════════════════════════════════ */

.fw-svc-hero{
	position:relative;
	/* No padding on any edge — the picture starts where the nav ends. */
	padding:0;
	height:60vh;
	/* A short laptop window would otherwise crush the band below the point
	   where the headline and the lead still sit comfortably at the foot. */
	min-height:420px;
	max-height:760px;
	overflow:hidden;
	background:var(--ink)
}

.fw-svc-hero__media{position:absolute;inset:0;margin:0}
.fw-svc-hero__img{
	position:absolute;inset:0;display:block;
	width:100%!important;height:100%!important;
	max-width:none!important;max-height:none!important;
	object-fit:cover!important;object-position:center;
	border-radius:0;
	/* Lifted rather than dimmed. A clinical photograph shot under strip
	   lighting reads flat and grey straight out of the CMS; a small
	   brightness and saturation push is what makes the band feel like a
	   window instead of a scrim. */
	filter:brightness(1.06) saturate(1.1);
	opacity:0;
	transform:scale(1.012);
	transition:opacity .6s var(--ease-soft),
	           filter .7s var(--ease),
	           transform 1.2s var(--ease-soft)
}
/* The `img.` prefix is load bearing: the base rule has to out-specify the
   theme's `img.lazy{max-width:100%}`, and vanilla-lazyload KEEPS the .lazy
   class when it adds .lazy-loaded — so a reveal written with lower
   specificity loses, and the cover downloads perfectly and then sits at
   opacity:0 forever with no error anywhere. .lazy-error is included so a
   404 reveals the frame too. */
img.fw-svc-hero__img.lazy-loaded,
img.fw-svc-hero__img.lazy-error{opacity:1}

/* ── The scrim ──
   Bottom-anchored and deliberately light. The type sits at the foot now,
   so only the foot needs covering — the middle two thirds of the picture
   are left completely clear, which is what makes the band read bright
   rather than tinted.

   The one exception is a soft cap at the very top: the breadcrumb sits up
   there in white, and .22 is the least that carries it over a bright
   cover without greying the picture.

   Hovering does NOT darken. It lifts the photograph — brightness and
   saturation up, a whisper of scale — while the scrim stays put. */
.fw-svc-hero__scrim{
	position:absolute;inset:0;pointer-events:none;
	background:linear-gradient(180deg,
		color-mix(in srgb, var(--dk-d) 22%, transparent) 0%,
		color-mix(in srgb, var(--dk-d) 4%, transparent) 18%,
		transparent   38%,
		color-mix(in srgb, var(--dk-d) 34%, transparent) 66%,
		color-mix(in srgb, var(--dk-d) 72%, transparent) 88%,
		color-mix(in srgb, var(--dk-d) 82%, transparent) 100%)
}
/* A wash of brand pink over the foot only — warms the type end so the
   band belongs to the site rather than to the photograph. */
.fw-svc-hero__scrim::after{
	content:'';position:absolute;inset:0;
	background:linear-gradient(180deg,
		transparent 56%,
		color-mix(in srgb, var(--pk) 5.5%, transparent) 84%,
		color-mix(in srgb, var(--pk) 10%, transparent) 100%)
}
.fw-svc-hero:hover .fw-svc-hero__img{
	filter:brightness(1.13) saturate(1.16);
	transform:scale(1.03)
}

/* ── Copy ──
   Breadcrumb pinned to the top, the rest optically centred in what is
   left. Held to the dark end of the scrim: a headline that runs into the
   clear right-hand side is unreadable at exactly the width where the
   picture is doing its work. */
.fw-svc-hero__inner{
	position:relative;z-index:2;
	display:flex;flex-direction:column;
	height:100%;
	padding-inline:var(--pad);
	padding-block:clamp(16px, 2.4vh, 30px)
}
.fw-svc-hero__copy{
	/* Pinned to the foot, where the scrim is. */
	margin-top:auto;
	/* A proportion, not a measure: it keeps the copy off the right edge of
	   the photograph and still grows with the screen. */
	max-width:70%
}

/* Breadcrumb, on dark */
/* ── Breadcrumb, as badges ──
   Over a photograph a run of plain links has no ground to sit on and its
   legibility changes with whatever is behind each word. Badges give every
   crumb its own backing, so the trail reads the same over a bright corner
   as over a dark one.

   Solid brand blue, not translucent glass. A frosted pill borrows its
   colour from whatever happens to be behind it, which means the trail
   looks different on every service page depending on the cover — and on a
   pale cover it barely reads at all. A solid fill is the same blue every
   time, and it puts the brand at the top of the band. */
/* The current page stays white — it is where you ARE, not somewhere you
   can go, and the colour change says that faster than the missing
   underline would. */
/* The dash between pills shrinks to a dot — a rule reads as a divider
   between blocks, a dot as a step in a trail. */

.fw-svc-hero .fw-svc-eyebrow{color:var(--pk-l3)}

.fw-svc-hero__title{
	margin:clamp(8px, .9vw, 13px) 0 0;
	font-family:var(--ff);
	/* Smaller than it was. Sat at the foot of a 60vh photograph the
	   headline no longer has to hold the band on its own — the picture
	   does that — so it can stop shouting. */
	font-size:clamp(26px, 1.5vw + 13px, 42px);
	font-weight:600;
	line-height:1.06;letter-spacing:-.036em;
	color:var(--wh);
	text-wrap:balance
}
.fw-svc-hero__lead{
	margin:clamp(8px, .8vw, 12px) 0 0;
	/* Wider measure to carry the smaller size: at 13.5px a 60ch column is
	   only ~500px and the sentence broke into five short lines. */
	font-size:clamp(12.5px, .16vw + 11.9px, 13.5px);
	font-weight:400;line-height:1.65;letter-spacing:0;
	color:color-mix(in srgb, var(--wh) 82%, transparent);
	text-wrap:pretty
}

/* ══════════════════════════════════════════════════════════════
   03b · VITALS BAND — under the image, outside it

   Six figures, each stacked icon → value → label. The band carries the
   same blurred brand spots the hero used to, so the photograph and the
   figures read as one masthead rather than a picture with a stats bar
   bolted underneath.
   ══════════════════════════════════════════════════════════════ */

.fw-svc-vitalsband{
	position:relative;
	overflow:hidden;
	background:linear-gradient(180deg, var(--paper) 0%, var(--paper-2) 100%);
	border-bottom:1px solid var(--line-soft)
}

/* ── Ambient colour ──
   Solid brand circles under filter:blur(), drifting slowly. A gradient
   wash reads flat; a blurred disc has a centre of mass and reads like
   light. Each blurred box is its own compositor layer, so there are three
   and the smallest drops out on phones. */
.fw-svc-vitalsband__fx{position:absolute;inset:0;z-index:0;pointer-events:none}
.fw-svc-spot{
	position:absolute;display:block;
	aspect-ratio:1;border-radius:50%;
	filter:blur(66px)
}
.fw-svc-spot--p1{
	top:-150px;left:4%;width:clamp(220px, 24vw, 400px);
	background:color-mix(in srgb, var(--pk) 26%, transparent);
	animation:fwSpotA 21s ease-in-out infinite
}
.fw-svc-spot--b1{
	top:-120px;right:18%;width:clamp(180px, 20vw, 330px);
	background:color-mix(in srgb, var(--bl) 20%, transparent);
	animation:fwSpotB 26s ease-in-out infinite
}
.fw-svc-spot--m1{
	bottom:-170px;right:2%;width:clamp(160px, 17vw, 280px);
	background:color-mix(in srgb, var(--mt) 18%, transparent);
	animation:fwSpotC 24s ease-in-out infinite
}
@keyframes fwSpotA{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(-38px,26px,0) scale(1.12)}}
@keyframes fwSpotB{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(30px,-22px,0) scale(.92)}}
@keyframes fwSpotC{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(-26px,-20px,0) scale(1.14)}}

.fw-svc-vitalsband__inner{
	position:relative;z-index:1;
	width:100%;
	padding-inline:var(--pad);
	padding-block:clamp(18px, 2vw, 30px)
}

/* The doctors who medically reviewed the page (.fw-rvw, css/custom.css), under the vitals. */
.fw-svc-reviewed{margin-top:clamp(14px, 1.6vw, 20px);padding-top:clamp(12px, 1.4vw, 18px);border-top:1px solid var(--line)}
.fw-svc-vitals{
	--vit-gap:clamp(14px, 2vw, 38px);
	/* Six fixed columns, not auto-fit. Auto-fit lands on four or five
	   tracks at some widths and orphans the remainder onto a row of its
	   own, which reads as a mistake rather than a layout. */
	display:grid;grid-template-columns:repeat(6, minmax(0, 1fr));
	gap:18px var(--vit-gap)
}
.fw-svc-vitals li{
	position:relative;
	display:grid;
	grid-template-columns:auto minmax(0, 1fr);
	column-gap:11px;row-gap:1px;
	align-items:center;
	min-width:0
}
.fw-svc-vitals li + li::before{
	content:'';position:absolute;left:calc(var(--vit-gap) / -2);top:2px;bottom:2px;width:1px;
	background:linear-gradient(180deg, transparent, var(--line) 22%, var(--line) 78%, transparent)
}
/* Icon on the left, spanning both text rows, in a soft brand chip. A bare
   glyph beside a number reads as a unit; a chip reads as a marker for the
   pair beside it. */
.fw-svc-vitals > li > i{
	grid-column:1;grid-row:1 / span 2;
	display:flex;align-items:center;justify-content:center;
	width:clamp(32px, 2.2vw, 38px);aspect-ratio:1;
	border-radius:11px;
	font-size:clamp(15px, 1vw, 17px);line-height:1;
	color:var(--pk);
	background:var(--pk-l);
	box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--pk) 10%, transparent)
}
.fw-svc-vitals b{grid-column:2;grid-row:1}
.fw-svc-vitals span{grid-column:2;grid-row:2}
.fw-svc-vitals b{
	font-size:clamp(16px, .62vw + 13.5px, 22px);font-weight:600;
	letter-spacing:-.03em;line-height:1.1;color:var(--ink);
	white-space:nowrap
}
/* Care-area names are long and have to be allowed to wrap. */
.fw-svc-vitals__wrap b{white-space:normal;overflow-wrap:anywhere;line-height:1.2}
.fw-svc-vitals span{
	font-size:9.5px;font-weight:600;
	letter-spacing:.13em;text-transform:uppercase;color:var(--g5);
	line-height:1.35
}

/* ══════════════════════════════════════════════════════════════
   04 · §2 ARTICLE GRID
   Three columns from 1024 up. All three are clamp()-fluid, so on a wide
   monitor the page genuinely uses its width instead of growing margins —
   which is the whole point of dropping the max-width container.
   ══════════════════════════════════════════════════════════════ */

.fw-svc-body{
	position:relative;
	padding:var(--sec) 0 0;
	background:var(--paper)
}
/* ── Brand aura on a white ground ──
   The article is ~13,000px tall, so spots anchored to the section would be
   invisible for most of it. These two bands cover where a reader actually
   starts and finishes; the middle is carried by the rail's own aura, which
   travels with the sticky column (§08). Radial gradients, not blurred
   discs — a filter:blur() over a box this tall is a repaint the page does
   not need to pay for. */
.fw-svc-body::before,
.fw-svc-body::after{content:'';position:absolute;left:0;right:0;pointer-events:none;z-index:0}
.fw-svc-body::before{
	top:0;height:860px;
	background:
		radial-gradient(720px 500px at 88% 3%,  color-mix(in srgb, var(--pk) 10%, transparent), transparent 62%),
		radial-gradient(620px 480px at 5% 18%,  color-mix(in srgb, var(--bl) 8.5%, transparent), transparent 60%),
		radial-gradient(520px 420px at 60% 32%, var(--mt-bg), transparent 64%)
}
.fw-svc-body::after{
	bottom:0;height:700px;
	background:
		radial-gradient(640px 460px at 10% 97%, color-mix(in srgb, var(--pk) 7.5%, transparent), transparent 62%),
		radial-gradient(560px 420px at 92% 86%, color-mix(in srgb, var(--bl) 6.5%, transparent), transparent 60%)
}

.fw-svc-body__grid{
	display:grid;
	/* Full width. No cap on the article column and no centring — the body
	   sits on the same 28/14 gutter as every other section, so the page is
	   edge-to-edge throughout.

	   The reading measure is kept on the TEXT instead (see §06). Tables,
	   figures and embeds take the whole column, which is where the extra
	   width goes — three tables and two figures in this article, all of
	   them better for it.

	   align-items:start, not stretch: the sticky-sidebar plugin sets the
	   rail's height itself, and a stretched grid item fights it. */
	/* OWF's ratio, unchanged: the rail holds three tenths of the row and
	   never drops below 290px, so the article column scales with the
	   viewport without ever running away from it. */
	grid-template-columns:
		minmax(0, 7fr)                /* article */
		minmax(290px, 3fr);           /* rail    */
	column-gap:clamp(26px, 3.4vw, 58px);
	align-items:start
}
.fw-svc-main{grid-column:1;min-width:0}
.fw-svc-rail{grid-column:2;min-width:0}
/* The plugin measures the wrapper and writes inline styles onto the inner
   element; it only needs the wrapper not to collapse before it runs. Same
   line the GG blog sidebar carries. */
.sticky-sidebar-wrap.fw-svc-rail{min-height:1px}

/* ══════════════════════════════════════════════════════════════
   05 · CONTENTS INDEX
   SINGLE MARKUP #2 — one <nav>, two components.

   Here: a quiet numbered index at the top of the companion rail. The
   sticky element is .fw-svc-rail__pin (§11), which wraps this and the
   consult prompt so the two travel together — a sticky box can only move
   inside its containing block, and the rail is tall enough to give it one.

   Below 1024 (§14): the same nav becomes a full-bleed segmented chip bar
   pinned under the header, with the active chip scrolled into view.
   ══════════════════════════════════════════════════════════════ */

.fw-svc-toc__list{display:flex;flex-direction:column;gap:1px}
.fw-svc-toc__link{
	position:relative;
	display:flex;align-items:baseline;gap:10px;
	padding:6px 8px 6px 12px;
	border-radius:var(--r1);
	font-size:13px;font-weight:450;letter-spacing:-.006em;
	color:var(--g5);
	transition:color .25s var(--ease), background .25s var(--ease);
	-webkit-tap-highlight-color:transparent
}
/* Guide line the marker slides along — a rail, not a list of links */
.fw-svc-toc__list::before{
	content:'';position:absolute;left:0;top:6px;bottom:6px;width:1px;
	background:var(--line)
}
.fw-svc-toc__list{position:relative}
.fw-svc-toc__num{
	font-size:10px;font-weight:600;letter-spacing:.04em;
	color:var(--g3);font-variant-numeric:tabular-nums;flex-shrink:0;
	transition:color .25s
}
.fw-svc-toc__txt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fw-svc-toc__link:hover{color:var(--g8)}
.fw-svc-toc__link.is-on{color:var(--ink);font-weight:550}
.fw-svc-toc__link.is-on .fw-svc-toc__num{color:var(--pk)}
.fw-svc-toc__link::before{
	content:'';position:absolute;left:0;top:50%;
	transform:translateY(-50%) scaleY(0);transform-origin:center;
	width:1px;height:16px;background:var(--pk);
	transition:transform .32s var(--ease)
}
.fw-svc-toc__link.is-on::before{transform:translateY(-50%) scaleY(1)}

/* ══════════════════════════════════════════════════════════════
   06 · THE ARTICLE COLUMN
   The reading rules themselves live in css/prose.css and are shared with
   every other page that renders editor HTML. What belongs HERE is only the
   frame around that column — the two knobs .fw-prose exposes, and the
   spacing between the article and the page furniture below it.
   ══════════════════════════════════════════════════════════════ */

.fw-svc-main > .fw-prose{
	/* Media inside the article pulls back out of this inset to run flush
	   with the column edge while the text stays indented. It is a variable
	   because prose.css derives negative margins from it; a literal here
	   and the two drift apart. */
	--prose-inset:clamp(0px, 1.4vw, 22px);
	/* Where an #anchor jump parks a heading: clear of the sticky chrome
	   AND of the chip bar that sits under it on mobile. */
	--prose-anchor:calc(var(--article-top) + 96px)
}

/* NO max-width on the article body, and no centring. This matches the three
   pages that already ship — OWF's css/service-detail.css says it outright:

     "NO max-width and no spacer tracks above 1500px. The body follows the
      project container rule the rest of the site follows: full-bleed, with
      the container gutters (28px desktop / 14px at <=768px) as the only
      inset. The article column simply scales with the viewport."

   GG's blog-detail does the same — `.gg-blgd__article` carries no measure
   at all; its only `max-width:60ch` sits on the hero dek, a standalone
   paragraph, not on the body.

   What constrains the line length is the GRID RATIO, not a cap on the text:
   the rail takes a fixed share of the row, so the article column stays
   proportional at every width instead of being clamped at one. That is why
   the tracks below are 7fr/3fr rather than 1fr plus a measure. */

/* Caption prose.js writes under a table that genuinely overflows. Whether
   it does depends on the width of the article column, not the window, so
   this cannot be a media query. */
.fw-prose__hint{
	display:none;align-items:center;gap:8px;
	margin:-6px 0 clamp(20px, 2.2vw, 32px);
	margin-left:calc(var(--prose-inset) * -1);
	font-size:12px;color:var(--g4)
}
.fw-prose__tw.is-scrollable + .fw-prose__hint{display:flex}
.fw-prose__hint::before{
	content:'';flex-shrink:0;width:14px;height:1px;background:currentColor
}

/* ══════════════════════════════════════════════════════════════
   07 · FAQ · END MATTER
   ══════════════════════════════════════════════════════════════ */

.fw-svc-faq{margin-top:clamp(38px, 4.2vw, 72px)}
.fw-svc-faq__head{margin-bottom:clamp(18px, 2.2vw, 32px)}
.fw-svc-faq__title{
	/* No measure cap here. 16ch held the heading to 304px while the column
	   offered 924px, so it stacked onto three lines for no reason — the body
	   copy below is what needs a reading measure, not a six-word heading.
	   It now sits on one line wherever it fits and wraps on its own below
	   ~360px, where balance splits it evenly rather than leaving an orphan. */
	margin-top:var(--s3);
	font-family:var(--ff);font-weight:600;
	font-size:clamp(23px, 2vw, 34px);line-height:1.1;letter-spacing:-.034em;
	color:var(--ink);text-wrap:balance
}

.fw-svc-faq__list{border-top:1px solid var(--line)}
.fw-svc-faq__item{border-bottom:1px solid var(--line)}
.fw-svc-faq__q{
	display:flex;align-items:center;gap:var(--s5);
	padding:clamp(15px, 1.6vw, 21px) 0;
	cursor:pointer;list-style:none;
	font-size:clamp(16px, 1.3vw, 19px);font-weight:550;letter-spacing:-.015em;
	color:var(--ink);
	transition:color .25s;
	-webkit-tap-highlight-color:transparent
}
.fw-svc-faq__q::-webkit-details-marker{display:none}
.fw-svc-faq__q::marker{content:''}
.fw-svc-faq__q:hover{color:var(--pk)}
.fw-svc-faq__q-txt{flex:1;min-width:0;text-wrap:pretty}

/* +/− drawn from two bars rather than an icon glyph, so the transition is
   one bar collapsing instead of a whole element spinning. */
.fw-svc-faq__q-ico{
	position:relative;flex-shrink:0;
	width:20px;height:20px;
	transition:transform .4s var(--ease)
}
.fw-svc-faq__q-ico::before,
.fw-svc-faq__q-ico::after{
	content:'';position:absolute;left:50%;top:50%;
	background:var(--g4);border-radius:2px;
	transition:transform .4s var(--ease), background .3s
}
.fw-svc-faq__q-ico::before{width:15px;height:1.5px;transform:translate(-50%,-50%)}
.fw-svc-faq__q-ico::after {width:1.5px;height:15px;transform:translate(-50%,-50%)}
.fw-svc-faq__item[open] .fw-svc-faq__q-ico::after{transform:translate(-50%,-50%) scaleY(0)}
.fw-svc-faq__item[open] .fw-svc-faq__q-ico::before,
.fw-svc-faq__item[open] .fw-svc-faq__q-ico::after{background:var(--pk)}

.fw-svc-faq__a{padding:0 0 clamp(20px, 2.2vw, 30px)}
.fw-svc-faq__a p{
	font-size:clamp(15px, 1.02vw, 16.5px);line-height:1.75;color:var(--g6);
	text-wrap:pretty
}

/* ── End matter ── */
/* Sits between the article and the FAQ now, so it is a closing rule for
   the prose above rather than the last thing on the page. The FAQ brings
   its own top margin, which supplies the gap below. */
.fw-svc-end{
	display:flex;align-items:center;justify-content:space-between;
	flex-wrap:wrap;gap:var(--s5);
	margin-top:clamp(32px, 3.4vw, 52px);
	padding-top:clamp(18px, 2.1vw, 28px);
	border-top:1px solid var(--line)
}
.fw-svc-end__share{display:flex;align-items:center;gap:var(--s2)}
.fw-svc-end__lbl{
	margin-right:var(--s2);
	font-size:10.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
	color:var(--g4)
}
.fw-svc-end__btn{
	display:inline-flex;align-items:center;justify-content:center;
	width:44px;height:44px;border-radius:50%;
	font-size:16px;color:var(--g6);
	background:var(--paper);
	box-shadow:var(--ring);
	transition:color .25s, background .25s, box-shadow .3s, transform .3s var(--ease);
	-webkit-tap-highlight-color:transparent
}
.fw-svc-end__btn:hover{
	color:var(--ink);background:var(--paper-2);
	transform:translateY(-2px);box-shadow:var(--ring), var(--e2)
}
.fw-svc-end__btn.is-done{color:var(--mt-d);background:var(--mt-l);box-shadow:none}
.fw-svc-end__cite{
	font-size:12px;line-height:1.6;color:var(--g4);
	text-align:right
}
.fw-svc-end__cite b{color:var(--g6);font-weight:550}

/* ══════════════════════════════════════════════════════════════
   08 · COMPANION RAIL

   NO CARDS. No panel, no surface, no radius, no shadow — a stack of
   containers down a column reads as a widget tray whatever they are made
   of, and the article beside it has no container either.

   What carries the rail instead is its CONTENT and its rhythm: hairline
   rules between sections, a brand tick leading every label, thumbnails on
   the related list, an icon and a one-line blurb on every link, and real
   hover feedback. An earlier pass had rules and bare text and read as
   nothing — the fix was never a box round it, it was that the rows had
   nothing in them.

   The brand aura sits directly behind the type now rather than under
   glass, and travels with the sticky column (see
   .fw-svc-rail__inner::before). It is kept faint for that reason.
   ══════════════════════════════════════════════════════════════ */

.fw-svc-rail__inner{
	position:relative;
	display:flex;flex-direction:column;
	gap:0
}

/* ── The travelling aura ──
   Sits behind the panels and inside the sticky wrapper, so it moves with
   the rail. Radial gradients rather than blurred discs: this element is
   already inside a position:fixed subtree while stuck, and a filter:blur()
   there costs a repaint on every frame of the scroll. */
.fw-svc-rail__inner::before{
	content:'';position:absolute;z-index:0;
	inset:-60px -40px -40px -40px;
	pointer-events:none;
	background:
		radial-gradient(420px 320px at 78% 4%,   color-mix(in srgb, var(--pk) 10%, transparent), transparent 66%),
		radial-gradient(380px 340px at 12% 34%,  color-mix(in srgb, var(--bl) 8.5%, transparent), transparent 64%),
		radial-gradient(340px 300px at 84% 78%,  color-mix(in srgb, var(--mt) 7%, transparent), transparent 66%)
}

/* ── The section ── */
.fw-svc-blk{
	position:relative;z-index:1;
	padding-block:clamp(18px, 1.9vw, 26px);
	border-top:1px solid color-mix(in srgb, var(--dk) 9%, transparent)
}
.fw-svc-blk:last-child{padding-bottom:0}

/* The contents index is the first thing in the rail and needs the same
   rule under it that separates every other section. */
.fw-svc-toc{position:relative;z-index:1;padding-bottom:clamp(18px, 1.9vw, 26px)}

/* Label left, action right, on one baseline. The action used to hang off
   the bottom of each section, which read as a footnote and put four
   near-identical links down the column. Up here it is a header control. */
.fw-svc-blk__head{
	display:flex;align-items:baseline;justify-content:space-between;
	gap:12px;margin-bottom:var(--s3)
}
.fw-svc-blk__head .fw-svc-blk__lbl{margin-bottom:0}
.fw-svc-blk__head .fw-svc-blk__link{margin-top:0;flex-shrink:0}

.fw-svc-blk__lbl{
	display:flex;align-items:center;gap:8px;
	margin-bottom:var(--s3);
	font-size:9.5px;font-weight:600;letter-spacing:.17em;text-transform:uppercase;
	color:var(--g5)
}
/* Short brand rule leading the label — the same device the article's h2
   uses with its number, so the rail and the body agree. */
.fw-svc-blk__lbl::before{
	content:'';width:14px;height:1.5px;border-radius:2px;
	background:var(--pk);flex-shrink:0
}
.fw-svc-blk__lbl--pk{color:var(--pk)}

.fw-svc-blk__link{
	display:inline-flex;align-items:center;gap:5px;
	margin-top:var(--s3);
	font-size:11.5px;font-weight:600;letter-spacing:-.005em;
	color:var(--bl);
	transition:color .25s
}
.fw-svc-blk__link i{font-size:11px;transition:transform .3s var(--ease)}
.fw-svc-blk__link:hover{color:var(--bl-d)}
.fw-svc-blk__link:hover i{transform:translateX(3px)}

/* ── Consult ──
   The one section that has to be noticed, and it is the RULE and the
   filled button that do it, not a container. A 2px brand rule where every
   other section has a 1px hairline is enough of a signal; the pink button
   is the only filled shape in the whole column. */
.fw-svc-blk--cta{
	border-top:2px solid var(--pk);
	padding-top:clamp(16px, 1.7vw, 22px)
}
.fw-svc-blk__say{
	margin-bottom:var(--s4);
	font-size:clamp(15px, 1.05vw, 17px);font-weight:500;
	line-height:1.4;letter-spacing:-.018em;
	color:var(--ink);
	text-wrap:pretty
}
.fw-svc-blk__alt{
	display:inline-flex;align-items:center;gap:7px;
	margin-top:var(--s3);
	font-size:12px;color:var(--g6);
	transition:color .25s
}
.fw-svc-blk__alt i{font-size:14px;color:var(--wa)}
.fw-svc-blk__alt:hover{color:var(--ink)}

/* ── Reviewing clinician ── */
.fw-svc-doc{display:flex;align-items:center;gap:13px}
/* Squircle, not a circle. A round crop on a head-and-shoulders portrait
   cuts the shoulders off and makes every clinician look like an avatar
   chip; the softened square keeps the frame the photograph was shot in. */
.fw-svc-doc__av{
	width:56px;height:56px;border-radius:16px;overflow:hidden;flex-shrink:0;
	background:var(--g2);
	box-shadow:0 0 0 1px color-mix(in srgb, var(--dk) 7%, transparent)
}
.fw-svc-doc__av img{width:100%;height:100%;object-fit:cover;display:block}
.fw-svc-doc__txt{display:flex;flex-direction:column;gap:1px;min-width:0}
.fw-svc-doc__txt b{
	display:flex;align-items:center;gap:5px;
	font-size:15.5px;font-weight:600;letter-spacing:-.018em;color:var(--ink)
}
.fw-svc-doc__txt b i{font-size:12.5px;color:var(--mt-d)}
.fw-svc-doc__txt small{font-size:11px;line-height:1.5;color:var(--g5)}
/* The qualifications line is the credential; the role line is context.
   Same size, different weight, so the eye takes them in that order. */
.fw-svc-doc__txt small:first-of-type{color:var(--g6);font-weight:550}

/* Three equal columns rather than a flex row: the figures line up on a
   grid instead of being pushed around by the width of "4,200+". */
.fw-svc-doc__stats{
	display:grid;grid-template-columns:repeat(3, minmax(0,1fr));
	margin-top:var(--s4);padding-top:var(--s4);
	border-top:1px solid color-mix(in srgb, var(--dk) 8%, transparent)
}
.fw-svc-doc__stats li{
	position:relative;display:flex;flex-direction:column;gap:3px;min-width:0
}
.fw-svc-doc__stats li + li{padding-left:14px}
.fw-svc-doc__stats li + li::before{
	content:'';position:absolute;left:0;top:2px;bottom:2px;width:1px;
	background:linear-gradient(180deg, transparent, color-mix(in srgb, var(--dk) 11%, transparent) 26%, color-mix(in srgb, var(--dk) 11%, transparent) 74%, transparent)
}
.fw-svc-doc__stats b{
	font-size:22px;font-weight:600;line-height:1;letter-spacing:-.035em;
	color:var(--ink);
	font-variant-numeric:tabular-nums
}
/* The + and the % in brand pink — the figure stays ink so the number is
   what you read, and the accent marks it as ours. */
.fw-svc-doc__stats b .fw-svc-u{font-size:.55em;font-weight:500;color:var(--pk);margin-left:1px}
.fw-svc-doc__stats span{
	font-size:9px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;
	color:var(--g5)
}

/* ── Related services ── */
.fw-svc-sim{display:flex;flex-direction:column;gap:2px;margin-top:var(--s2)}
.fw-svc-sim a{
	display:flex;align-items:center;gap:11px;
	padding:8px;margin-inline:-8px;
	border-radius:12px;
	transition:background .25s;
	-webkit-tap-highlight-color:transparent
}
.fw-svc-sim a:hover{background:color-mix(in srgb, var(--pk) 4.5%, transparent)}
.fw-svc-sim__img{
	width:44px;height:44px;border-radius:10px;overflow:hidden;flex-shrink:0;
	background:var(--g1);
	box-shadow:0 0 0 1px var(--ink-a06)
}
.fw-svc-sim__img img{width:100%;height:100%;object-fit:cover;display:block}
.fw-svc-sim__body{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.fw-svc-sim__body b{
	font-size:13.5px;font-weight:600;letter-spacing:-.012em;color:var(--ink);
	white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
	transition:color .25s
}
.fw-svc-sim__body > span{
	font-size:11.5px;line-height:1.4;color:var(--g5);
	display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden
}
.fw-svc-sim__arr{
	font-size:12px;color:var(--g3);flex-shrink:0;
	transition:color .25s, transform .3s var(--ease)
}
.fw-svc-sim a:hover .fw-svc-sim__body b{color:var(--pk-d)}
.fw-svc-sim a:hover .fw-svc-sim__arr{color:var(--pk);transform:translateX(3px)}

/* ── Go deeper ──
   Three groups of two or three links each. Grouped alone they read as one
   long undifferentiated list, so each group gets a ruled head with its own
   icon and a count, and each row inside is numbered within its group. The
   numbering is a CSS counter, so nothing has to be written into the
   content when a fourth guide is added. */
.fw-svc-res + .fw-svc-res{margin-top:var(--s5)}
.fw-svc-res__head{
	display:flex;align-items:center;gap:8px;
	padding-bottom:8px;margin-bottom:4px;
	border-bottom:1px solid color-mix(in srgb, var(--dk) 8%, transparent)
}
.fw-svc-res__head i{font-size:12.5px;color:var(--bl)}
.fw-svc-res__h{
	font-size:10.5px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;
	color:var(--g6)
}
/* Count as a quiet badge — it says how much is behind the head without
   competing with it. */
.fw-svc-res__n{
	margin-left:auto;
	min-width:17px;padding:1px 5px;border-radius:100px;
	font-size:9.5px;font-weight:600;line-height:1.5;text-align:center;
	color:var(--bl-d);background:color-mix(in srgb, var(--bl) 9%, transparent);
	font-variant-numeric:tabular-nums
}

.fw-svc-res__list{counter-reset:fwres}
.fw-svc-res__list li{counter-increment:fwres}
.fw-svc-res__list a{
	display:grid;
	grid-template-columns:20px minmax(0,1fr) auto;
	column-gap:10px;row-gap:2px;
	padding:8px;margin-inline:-8px;
	border-radius:10px;
	transition:background .25s;
	-webkit-tap-highlight-color:transparent
}
.fw-svc-res__list a::before{
	content:counter(fwres, decimal-leading-zero);
	grid-column:1;grid-row:1 / span 2;
	padding-top:2px;
	font-size:9.5px;font-weight:600;letter-spacing:.05em;
	color:var(--g3);font-variant-numeric:tabular-nums;
	transition:color .25s
}
.fw-svc-res__list a:hover{background:color-mix(in srgb, var(--bl) 4.5%, transparent)}
.fw-svc-res__t{
	grid-column:2;grid-row:1;
	font-size:12.5px;font-weight:550;line-height:1.35;letter-spacing:-.008em;
	color:var(--ink);
	transition:color .25s
}
.fw-svc-res__d{
	grid-column:2;grid-row:2;
	font-size:10.5px;line-height:1.4;color:var(--g5);
	display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden
}
.fw-svc-res__list a > i{
	grid-column:3;grid-row:1 / span 2;
	align-self:center;
	font-size:11px;color:var(--g3);
	transition:color .25s, transform .3s var(--ease)
}
.fw-svc-res__list a:hover::before{color:var(--bl)}
.fw-svc-res__list a:hover .fw-svc-res__t{color:var(--bl-d)}
.fw-svc-res__list a:hover > i{color:var(--bl);transform:translateX(3px)}

/* ── Elsewhere ──
   Full-width rows rather than two cramped columns: at 340px a two-up grid
   gave each label ~140px, which truncated half of them. One column with a
   hairline between rows and a chevron at the end reads as navigation,
   which is what it is. Deliberately single-line and un-numbered so it does
   not read as a second "Go deeper". */
.fw-svc-ql{display:flex;flex-direction:column;margin-top:var(--s2)}
.fw-svc-ql li + li{border-top:1px solid var(--ink-a06)}
.fw-svc-ql a{
	display:flex;align-items:center;gap:11px;
	padding:9px 8px;margin-inline:-8px;
	border-radius:9px;
	font-size:12.5px;font-weight:500;color:var(--g7);
	transition:color .25s, background .25s;
	-webkit-tap-highlight-color:transparent
}
.fw-svc-ql a > i:first-child{
	width:16px;flex-shrink:0;text-align:center;
	font-size:13.5px;color:var(--g4);
	transition:color .25s
}
.fw-svc-ql a > span{
	flex:1;min-width:0;
	white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.fw-svc-ql a > i:last-child{
	flex-shrink:0;font-size:10px;color:var(--g3);
	transition:color .25s, transform .3s var(--ease)
}
.fw-svc-ql a:hover{color:var(--ink);background:color-mix(in srgb, var(--pk) 4.5%, transparent)}
.fw-svc-ql a:hover > i:first-child{color:var(--pk)}
.fw-svc-ql a:hover > i:last-child{color:var(--pk);transform:translateX(3px)}

/* ══════════════════════════════════════════════════════════════
   09 · §3 CLOSING BAND
   ══════════════════════════════════════════════════════════════ */

.fw-svc-close{
	position:relative;overflow:hidden;
	margin-top:var(--sec);
	padding:clamp(42px, 4.8vw, 92px) 0;
	background:var(--ink)
}
.fw-svc-close__aura{
	position:absolute;inset:0;pointer-events:none;
	background:
		radial-gradient(900px 620px at 10% -10%,  color-mix(in srgb, var(--pk) 42%, transparent), transparent 62%),
		radial-gradient(820px 640px at 92% 108%,  color-mix(in srgb, var(--bl) 36%, transparent), transparent 60%),
		radial-gradient(620px 460px at 62% 34%,   color-mix(in srgb, var(--mt) 10%, transparent), transparent 64%)
}
/* Single brand hairline on the top edge — the one place a multi-hue rule
   earns its keep, because .fw-tm already uses exactly this device. */
.fw-svc-close::before{
	content:'';position:absolute;top:0;left:0;right:0;height:1px;z-index:1;
	background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--pk) 70%, transparent) 22%, color-mix(in srgb, var(--bl) 70%, transparent) 62%, transparent);
	opacity:.8
}
.fw-svc-close__inner{
	display:grid;
	grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);
	column-gap:clamp(32px, 5vw, 110px);
	align-items:end
}
.fw-svc-close__title{
	margin-top:var(--s5);
	font-family:var(--ff);font-weight:600;
	font-size:clamp(27px, 3.3vw, 52px);line-height:1.06;letter-spacing:-.04em;
	color:var(--wh);
	text-wrap:balance
}
.fw-svc-close__sub{
	font-size:clamp(15.5px, 1.25vw, 19px);font-weight:300;line-height:1.6;
	letter-spacing:-.008em;color:color-mix(in srgb, var(--wh) 66%, transparent);
	text-wrap:pretty
}
.fw-svc-close__btns{display:flex;flex-wrap:wrap;gap:var(--s3);margin-top:clamp(22px, 2.4vw, 32px)}
.fw-svc-close__points{
	display:flex;flex-wrap:wrap;
	gap:clamp(14px, 2vw, 34px);
	margin-top:clamp(22px, 2.6vw, 34px);
	padding-top:clamp(18px, 2vw, 26px);
	border-top:1px solid color-mix(in srgb, var(--wh) 10%, transparent)
}
.fw-svc-close__points li{
	position:relative;padding-left:16px;
	font-size:13px;font-weight:400;color:color-mix(in srgb, var(--wh) 62%, transparent)
}
.fw-svc-close__points li::before{
	content:'';position:absolute;left:0;top:.62em;
	width:4px;height:4px;border-radius:50%;background:var(--mt)
}

/* ══════════════════════════════════════════════════════════════
   10 · REVEAL ON SCROLL
   Scroll-driven CSS animations — no JavaScript, no observer, and no risk
   of a flash of hidden content, because a browser without support simply
   never applies the rule and shows the element normally.
   ══════════════════════════════════════════════════════════════ */

@supports (animation-timeline: view()) {
	@media (prefers-reduced-motion: no-preference) {
		.fw-svc-steps__item,
		.fw-svc-rates__row,
		.fw-svc-blk,
		.fw-svc-note,
		.fw-prose__tw,
		.fw-svc-vitals li,
		.fw-svc-close__title,
		.fw-svc-close__sub{
			animation:svcRise both linear;
			animation-timeline:view();
			animation-range:entry 4% entry 34%
		}
	}
}
@keyframes svcRise{
	from{opacity:0;transform:translateY(16px)}
	to  {opacity:1;transform:none}
}

/* ══════════════════════════════════════════════════════════════
   11 · RESPONSIVE — mode switches only

   Nothing here nudges a font size; the clamp() scale already tracks the
   viewport continuously. Each query changes how a component BEHAVES.

     ≤1024  the big one — gutter drops to 14px, three columns become one,
            and the three single-markup components flip to their mobile form
     ≤ 768  phone spacing, timeline and rates restack
     ≤ 480  cover re-crops, end matter stacks
     ≤ 360  quick links go two-up
   ══════════════════════════════════════════════════════════════ */

@media(max-width:1024px){

	/* The house gutter on mobile. Same 14px the header drops to at this
	   width, so the page keeps lining up with the chrome. */
	.fw-svc-page{--pad:14px}

	/* ── SINGLE MARKUP #3 ──
	   `display:contents` twice over erases the <aside> and its inner
	   wrapper without touching the cards inside, promoting all five to
	   direct children of this flex column. `order` then drops them into
	   the reading flow after the article. No mobile copy of any card. */
	.fw-svc-body{padding-top:clamp(26px, 5vw, 44px)}
	.fw-svc-body__grid{display:flex;flex-direction:column;gap:0;align-items:stretch}
	/* .scwStickySidebar is injected by the plugin around the rail's
	   children, so it has to dissolve alongside the wrappers we wrote or
	   the blocks never reach the grid and `order` cannot place them. */
	.fw-svc-rail,
	.fw-svc-rail__inner,
	.fw-svc-rail .scwStickySidebar{display:contents}
	/* A display:contents element still draws its ::before, so the aura's
	   -40px right inset ran 40px past a phone screen and widened the page
	   (13 Oct 2026). One column has nothing for it to sit behind. */
	.fw-svc-rail__inner::before{display:none}
	.fw-svc-main{order:0}
	.fw-svc-blk{order:1;margin-top:0}
	.fw-svc-blk--cta{order:1;margin-top:clamp(20px, 4vw, 30px)}

	/* ── SINGLE MARKUP #2, mobile half ──
	   The numbered rail becomes a full-bleed segmented chip bar pinned
	   under the site header. custom/js/article.js keeps the active chip
	   scrolled into view, which is what makes it feel like a native
	   segmented control instead of a row of links. */
	.fw-svc-toc{
		order:-1;
		position:sticky;top:var(--article-top);z-index:60;
		margin:0 calc(-1 * var(--pad)) clamp(18px, 4vw, 26px);
		padding:10px 0;
		background:color-mix(in srgb, var(--wh) 82%, transparent);
		backdrop-filter:blur(24px) saturate(180%);
		-webkit-backdrop-filter:blur(24px) saturate(180%);
		box-shadow:0 1px 0 var(--line), 0 10px 24px -18px color-mix(in srgb, var(--dk) 50%, transparent)
	}
	.fw-svc-toc__inner{display:contents}
	.fw-svc-toc .fw-svc-blk__lbl,
	.fw-svc-toc__num{display:none}
	.fw-svc-toc__list{
		flex-direction:row;gap:7px;
		overflow-x:auto;
		scroll-snap-type:x proximity;
		scroll-padding-inline:var(--pad);
		padding-inline:var(--pad);
		overscroll-behavior-x:contain;
		scrollbar-width:none;-ms-overflow-style:none
	}
	.fw-svc-toc__list::-webkit-scrollbar{display:none}
	.fw-svc-toc__list::before{display:none}
	.fw-svc-toc__link{
		min-height:38px;padding:0 16px;
		border-radius:100px;
		background:var(--paper-2);
		box-shadow:0 0 0 1px var(--ink-a06);
		font-size:13px;white-space:nowrap;
		scroll-snap-align:center;
		align-items:center
	}
	.fw-svc-toc__link::before{display:none}
	.fw-svc-toc__txt{overflow:visible;text-overflow:clip}
	.fw-svc-toc__link.is-on{
		color:var(--wh);background:var(--ink);
		box-shadow:0 6px 16px -8px color-mix(in srgb, var(--dk-d) 90%, transparent)
	}

	/* ── Masthead on a phone ──
	   A 45vh band on a 390×844 screen is ~380px, which the headline and a
	   three-line lead just fit. The scrim has to go nearly opaque though:
	   a left-to-right gradient assumes width to fade across, and at 390px
	   there is none, so it becomes a vertical one instead — dark at the
	   foot where the type sits, clear at the head where the picture is. */

	/* The badges wrap to a second row at this width, and the last one is
	   the page title — which the <h1> repeats three lines below it. Drop
	   the badge rather than spend a row saying it twice. */
	/* …and the dot that led to it. NOT `:last-of-type` — the current-page
	   crumb is a <span> too, so it is the last span and the separator
	   never matched. :has() selects the one immediately before it.
	   Where :has() is unsupported the rule is dropped and a trailing dot
	   shows, which is cosmetic rather than broken. */
	.fw-svc-hero__scrim{
		/* The first stop is not decoration: the breadcrumb sits at the top
		   of the band, and .30 over a bright cover would not carry
		   rgba(255,255,255,.6) text. .42 holds it on any photograph while
		   still showing the top of the picture. */
		background:linear-gradient(180deg,
			color-mix(in srgb, var(--dk-d) 40%, transparent) 0%,
			color-mix(in srgb, var(--dk-d) 10%, transparent) 24%,
			color-mix(in srgb, var(--dk-d) 6%, transparent) 44%,
			color-mix(in srgb, var(--dk-d) 44%, transparent) 68%,
			color-mix(in srgb, var(--dk-d) 86%, transparent) 92%,
			color-mix(in srgb, var(--dk-d) 90%, transparent) 100%)
	}
	/* The brand wash follows the type to the foot on a phone too. */
	.fw-svc-hero__scrim::after{
		background:linear-gradient(180deg,
			transparent 62%,
			color-mix(in srgb, var(--pk) 6%, transparent) 86%,
			color-mix(in srgb, var(--pk) 11%, transparent) 100%)
	}
	/* Copy to the foot rather than centred, so it sits on the dark end. */
	.fw-svc-hero__copy{margin-top:auto;margin-bottom:0}

	/* Vitals wrap to multiple rows, so the vertical dividers between them
	   would land halfway down the second one. The gap separates them. */
	.fw-svc-vitals{grid-template-columns:repeat(3, minmax(0, 1fr))}
	.fw-svc-vitals li + li::before{display:none}
	/* A 66px blur radius on a phone GPU is a real cost for an effect
	   nobody can see at that size. */
	.fw-svc-spot--m1{display:none}
	.fw-svc-spot{filter:blur(46px)}

	.fw-svc-close__inner{grid-template-columns:minmax(0,1fr);row-gap:var(--s6)}
}

/* ── ≤768px ── */
@media(max-width:768px){
	.fw-svc-steps__item{
		grid-template-columns:minmax(0,1fr);
		gap:6px;padding:var(--s5) 0
	}
	.fw-svc-steps__num{font-size:19px}

	.fw-svc-rates__row{
		grid-template-columns:minmax(0,1fr) auto;
		grid-template-areas:
			"age pct"
			"bar bar"
			"rng rng";
		gap:8px 14px;padding:var(--s4) 0
	}
	.fw-svc-rates__age{grid-area:age}
	.fw-svc-rates__bar{grid-area:bar;height:7px}
	.fw-svc-rates__pct{grid-area:pct}
	.fw-svc-rates__rng{grid-area:rng;text-align:left}

	/* Tighter cells on a phone. The table itself belongs to css/prose.css;
	   only the density is this page's call. */
	.fw-prose th,
	.fw-prose td{padding:12px 13px}

	.fw-svc-close__btns .fw-svc-btn{flex:1 1 100%}
	.fw-svc-close__points{flex-direction:column;gap:10px}
}

/* ── ≤480px ── */
/* Three columns leave ~115px beside a 35px icon chip, which is not enough
   for "QUESTIONS ANSWERED" on one line. Two columns from here down. */
@media(max-width:600px){
	.fw-svc-vitals{grid-template-columns:repeat(2, minmax(0, 1fr))}
}

@media(max-width:480px){

	.fw-svc-end{flex-direction:column;align-items:flex-start;gap:var(--s4)}
	.fw-svc-end__cite{text-align:left}

	.fw-svc-note{flex-direction:column;gap:var(--s3)}
}

/* ── ≤360px ── */
@media(max-width:360px){
	.fw-svc-ql{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* ══════════════════════════════════════════════════════════════
   TOUCH · MOTION · FOCUS
   ══════════════════════════════════════════════════════════════ */

/* A :hover transform latches after a tap on a touch screen and the element
   stays lifted until you touch something else. Strip the movement; the
   colour changes still read as feedback. */
@media(hover:none){
	.fw-svc-btn--wh:hover,
	.fw-svc-end__btn:hover,
	.fw-svc-blk__link:hover i{transform:none}
	.fw-prose tbody tr:hover th,
	.fw-prose tbody tr:hover td{background:transparent!important}
}

@media(prefers-reduced-motion:reduce){
	.fw-svc-page *,
	.fw-svc-page *::before,
	.fw-svc-page *::after{
		animation-duration:.01ms!important;
		animation-iteration-count:1!important;
		transition-duration:.01ms!important;
		scroll-behavior:auto!important
	}
	.fw-svc-hero__img{opacity:1;transform:none}
	.fw-svc-spot{animation:none}
}

/* ══════════════════════════════════════════════════════════════
   ANCHOR OFFSET
   Every id inside the article region, not just the headings prose.css
   already covers. custom/js/core.js scrolls in-page links with
   scrollIntoView, which honours scroll-margin-top — so this is the single
   place that records how far the sticky chrome reaches, and a section
   added tomorrow clears it without anyone remembering to say so.
   ══════════════════════════════════════════════════════════════ */
.fw-svc [id]{scroll-margin-top:calc(var(--article-top) + 96px)}

.fw-svc-page a:focus-visible,
.fw-svc-page button:focus-visible,
.fw-svc-page summary:focus-visible{
	outline:2px solid var(--bl);
	outline-offset:3px;
	border-radius:8px
}
