/* ════════════════════════════════════════════════════════════════
   sell-fast-page — block 1 (hero + CLO intro-CTA bridge + personalize
   rail + ranked paths). Ported 1:1 from mocks/sell_fast/tampa_v2.html
   (v2.10.2, 2026-07-23); selectors scoped under .sell-fast-page except the
   QA-026 body-level visual-only fee-tooltip portal.
   Brand values ride on --clvr-* tokens (clever-design-tokens handle);
   page-scoped custom props (--cb-fs-*, --hero-band, --conversion-*)
   are block-local by design.
   ════════════════════════════════════════════════════════════════ */
/* ════════════════════════════════════════════════════════════════
   Block 1 v3.15 — SBR components (SSH port) + CLO-series hero band + "On this page" TOC bar +
   CLO intro-CTA bridge + sticky personalize rail + ranked row-cards.
   ⚠️ The version also lives in the JS `BUILD` constant, which drives the on-page badge. Bump both.
       ⚠️ They HAD drifted: this changelog stopped at v2.73 while `BUILD` already read v2.74. Re-synced at
       v2.75 — if you bump one and not the other, the on-page badge lies about what is deployed.
   v3.15 = TIER FRAMING + COMPLETE SELLER PROTECTION (Jamie 2026-08-06). Keeps the estimator's
           U.S./state/local labels through interactions and publishes all approved merged-workbook
           safety resources, with explicit partial-source notices for Kansas and Washington, D.C.
   v3.14 = TIER-AWARE TEMPLATE VARIANTS (Jamie 2026-08-06). Adds state/head benchmark and localization
           modules plus scope-aware hero, CTA, rail, comparison, and path-section language.
   v3.13 = TIER-AWARE LINK TREE (Jamie 2026-08-06). Adds an inventory-driven local/state/national location
           tree after methodology, with crawlable relative links and compact responsive columns.
   v3.12 = MOBILE-FIRST SOURCE DRAWERS (Jamie 2026-08-06). Replaces the four-column methodology source
           table with a stacked disclosure list; the source is always visible and use/scope open in-place.
   v3.11 = EXPANDED METHODOLOGY (Jamie 2026-08-06). Adds the data-layer sequence, reader-facing formulas,
   a nine-row source map, and explicit fallback/sample/update rules; public-record vendors remain unnamed.
   v3.10 = FULL METHODOLOGY (Jamie 2026-08-06). Adds a crawlable model explanation covering the default
   home, five path formulas, timelines, local evidence, source scope, freshness, and explicit limitations.
   v3.09 = BALANCED SECTION DIVIDERS (Jamie 2026-08-06). Adds the same thin gray divider between every
   path breakdown and every major section that follows, with equal whitespace above and below: 48px on
   desktop and 32px on mobile. Removes the Go-deeper-era override that suppressed path dividers.
   v3.08 = SELLER-PROTECTION SEO VERTICAL SLICE (Jamie 2026-08-06). Adds a five-step pre-signing
   checklist, evergreen warning signs, and feed-backed official Florida/Tampa verification and complaint
   resources. Buyer-network counts and screening claims are deliberately excluded.
   v2.99 = COST-TO-SELL SEO VERTICAL SLICE (Jamie 2026-08-05). Separates pricing trade-offs, explicit
   seller charges, and optional waiting/prep costs using the default local estimator ledger.
   v2.98 = MARKET-SPEED VISUAL RESTORATION (Jamie 2026-08-05). Replaces the flat v2.97 treatments with
   established SBR-style callout cards, an elevated timeline panel, and the LWC editorial table pattern.
   v2.97 = MARKET-SPEED UX EDIT (Jamie 2026-08-05). Simplifies the section into an answer-first market read,
   quiet evidence strip, comparative timeline chart, one mechanics drawer, and unboxed property-type table.
   v2.96 = MARKET-SPEED ANALYSIS (Jamie 2026-08-05). Replaces the source-first stat readout with a reader-
           facing market assessment, decision signals, path-impact timeline, and property-type comparison.
   v2.95 = MARKET-SPEED SEO VERTICAL SLICE (Jamie 2026-08-05). Wires the first crawlable local SEO section
           from the compact feed: local/state/U.S. timing, market verdict, type table, and current signals.
   v2.94 = QUIET TINTED GO-DEEPER MODULE (Jamie 2026-08-05). Removes the competing outer/card borders and
   uses one brand-blue-light surface with equal 16px padding. White cards get only the smallest Clever shadow;
   the H3 returns inside the container so the module reads as one unit rather than three nested outlines.
   v2.93 = FRAMED GO-DEEPER MODULE (Jamie 2026-08-05). Adds a thin neutral rounded outline around the related-
   link row, with the H3 sitting in a clean break in the top border. Cards, icons, and padding shrink slightly
   so the module delineates paths without reading as another major content block.
   v2.92 = RENDERED GO-DEEPER PARITY (Jamie 2026-08-05). Raises selector specificity above the generic path-H3
   theme rule so the live heading truly renders at the same 16px/700 Rubik treatment as the price/timeline H3s.
   v2.91 = GO-DEEPER HEADING PARITY (Jamie 2026-08-05). Removes the lightbulb and matches “Go deeper” to the
   path subsection H3s: same heading font, 1rem size, weight, and letter spacing.
   v2.90 = GO-DEEPER HEADING ICON (Jamie 2026-08-05). Keeps “Go deeper” as the semantic H3 beneath each path
   H2 and adds a small muted lucide:lightbulb to identify the related-reading module without adding visual weight.
   v2.89 = RELATED-LINK PLACEHOLDERS (Jamie 2026-08-05). Extends the approved low-profile “Go deeper” shell
   to the other four paths with two clearly non-clickable topic placeholders each. This settles whole-page
   rhythm without inventing or shipping dead URLs; link sources and final icons remain a later content pass.
   v2.88 = CASH RELATED-LINK PROTOTYPE (Jamie 2026-08-05). Replaces the lone cash-buyer button with a
   low-profile two-card “Go deeper” row: one programmatic local directory link and one evergreen investor-
   pricing guide. The row becomes a native horizontal scroller only when it overflows on small screens and
   replaces the oversized divider/whitespace before the next path.
   v2.87 = DRAWER LABEL ICONS (Jamie 2026-08-05). Timeline context uses fi-rr-pending, money formulas use
   lucide:bar-chart-2, and price/offer context uses fi-rr-calculator-money. Icons resolve from the maintained
   Clever icon library and share one compact, muted leading slot.
   v2.86 = CLOSED DRAWER GROUPS (Jamie 2026-08-05). The last drawer in each timeline or price group receives
   a bottom divider, matching the established FAQ/accordion pattern instead of leaving the group open-ended.
   v2.85 = EDITORIAL-TO-DRAWER SPACING (Jamie 2026-08-05). Applies the same spacing between the visible
   answer and first drawer whether the drawer is nested in the review mock or rendered as a WordPress sibling.
   Timeline sections now match the more comfortable price-section rhythm.
   v2.84 = STACKED INLINE PRICE DRAWERS (Jamie 2026-08-05). The money breakdown now uses the same
   inline divider/summary/chevron treatment as the estimate-context drawer. The chart icon and special
   compact money-summary styling are gone; the two drawers stack directly.
   v2.83 = CONSISTENT PRICE DRAWER ORDER + SPACING + WP PATH EDITORIAL (Jamie 2026-08-05). Every price section now reads
   short answer → money breakdown → estimate context. Drawer dividers receive tokenized breathing room so
   the line no longer touches the preceding excerpt. WordPress strips the Tampa review literals and rebuilds
   all ten blurbs from the shared `editorial.paths` facts and plugin-owned templates.
   v2.82 = PATH-BLURB DISCLOSURE PASS (Jamie 2026-08-05). Replaces ten inline cutoff/Read more blocks
   with short visible answers plus semantic, purpose-labelled drawers. Timeline methodology and price
   sensitivities now scan as bullets; the existing money drawer remains the arithmetic source.
   v2.81 = PATH-BLURB CLARITY PASS (Jamie 2026-08-05). Every blurb now names its selling path in the
   opening sentence, replaces abstract “the model” phrasing with direct explanations, and uses shorter
   declarative sentences for readers, search engines, and LLM extraction. No fact or calculation changed.
   v2.80 = TAMPA PATH-BLURB EDITORIAL DRAFT (Jamie 2026-08-05). Adds mock-only timeline and economics
   interpretation beneath all five path sections. The draft distinguishes fixed program terms from local
   comparisons, gives sell-before two clocks, and translates provider structures into Tampa dollars. Explicit
   MOCK_PATH_EDITORIAL_DRAFT markers keep these typed Tampa review values out of generated WordPress assets.
   v2.79 = PATH INTRO TABS (Jamie 2026-08-05). All five full path sections now share the accessible
   Overview / Who it’s for / Pros & cons component. Path-specific timeline and net comparisons are
   populated from the same live path objects as the cards and formula drawers.
   v2.78 = LOCALIZED TRANSACTION COSTS (Jamie 2026-08-05). The state seller-closing-cost input now powers
   every modeled seller-paid closing event: traditional, 7-day, iBuyer, and both sell-before transactions.
   Partner fees, repair deductions, commissions, and published timelines remain path-specific. Formula
   tooltips read the same live rates as the arithmetic, so no visible percentage can drift independently.
   v2.77 = PATH FORMULA DRAWERS (Jamie 2026-08-05). Every path price section now exposes the same
   “How the money breaks down” drawer. Each drawer consumes that path's existing reconciled ledger;
   sell-before-you-list retains its purpose-built purchase/resale sequence rather than a generic fee stack.
   v2.76 = SUMMARY-CARD SIMPLIFICATION (Jamie 2026-08-05). The cards now render only their default state;
   the expandable drawers and their private presentation builders are removed. `Learn more` jump-links each
   card to its full path breakdown, where the timeline callouts and reconciled cost ledger now live.
   v2.75 = CALCULATOR QA pass (Jamie 2026-08-04). ONE change shipped, NO number touched.
   · ⛔ **Per-badge coloured outlines were built and REVERTED in the same pass** (green Most money · blue
     Best value · purple Fastest, each matching its chip). It rendered correctly; Jamie cut it on the live
     page — *"i think just #1 is better. less busy."* The `i===0` blue outline is unchanged from v2.74.
     Don't rebuild it without asking; the reasoning is at `.mf-wrap--top`.
   v2.73 = QA PUNCHLIST pass 1 (Jamie 2026-08-03) — four items, NO number touched. Items 2 (timelines) and
   5 (drawer timeline block) are deliberately NOT here: Jamie is still deciding the day counts, and item 5's
   layout depends on that answer.
   · **Ribbon icons are uicons SOLID**: Fastest → `fi-sr-bolt`, Best value → `fi-sr-crown` (was a stroke
     star), Most money → `fi-sr-star` (was a stroke trophy). Resolved via `pipeline/icons/icon.py`, not
     drawn. `IC` keys renamed to match what they draw.
     ⚠️ `fi-sr-usd-circle` shipped for ONE deploy here and was rejected — see the note at `IC.star` for the
     rule that replaced it (the label carries the noun, the icon carries the superlative) and why crown
     stays on Best value rather than moving to Most money (crown belongs on the RECOMMENDED tier by web
     convention, and Most money lands on traditional agent sale — the path we least want to elevate).
   · **`$0` breakdown lines are no longer dimmed** — `.mf-amt--zero` moves --clvr-text-muted →
     --clvr-text-secondary, matching the "100%"/"0%" column beside them. Reachable on exactly two paths,
     and on both the zero is a selling point.
   · **`Net vs. agent` on the baseline card prints "—", not "$0"** — it compares against itself, so the box
     is not-applicable rather than a measured zero.
   · **Sell-before-you-list splits its net segment**: light blue = upfront cash, dark blue = the settle-up
     amount after resale, and the "Net upfront cash" chip matches the light segment. The two halves sum to
     the same net width the other paths draw, so bar geometry is unchanged.
   v2.72 = BEDROOMS REMOVED ENTIRELY (Jamie 2026-08-03), UX **and** data path — option B of the scoped
   plan. Gone from here: the Bedrooms brick row, `BEDS`, `bedAdjust`, `snapBeds`, `bedLabel`, `bedPhrase`,
   `renderBeds`, `DEFAULT_BEDS`, `state.beds`, and `D.bedOptions` / `D.bedRatio`. `estimate()` drops to
   `(type,cond)`. Gone downstream: `bedOptions`/`bedRatio` from lib/data.php, `bed_options` +
   `bed_ratio_1..5` from poc_ratio_profiles.csv and build_characteristic_ratios.py, and both gates' key
   lists (engine mirror 10 → 8).
   🔑 **NO DEFAULT-STATE FIGURE MOVED on any of the 91 pages** — the old 3-bed bucket was the reference
   cell and exactly 1.0, so dropping the factor is arithmetically a no-op at defaults. That is the
   property that made this safe to do in one pass instead of element by element.
   ⚠️ TWO THINGS DID CHANGE, both expected: the value-slider FLOOR rises (the cheapest reachable cell
   was a 1-bed poor condo; Tampa ~$75K → ~$125K), and the `g-context` sentence loses its bed phrase
   ("showing a single-family home in fair condition worth $443,000").
   The 5 `zillow_extras_home_value_by_bedrooms_*` columns are deliberately LEFT in the wide export —
   inert raw passthrough, nothing reads them, and dropping them is a live-table schema change for no gain.
   v2.71 = CARD COPY (Jamie 2026-08-03): "Instant cash offer" → "iBuyer offer", plural to match. Copy only —
   no number, gate or eligibility touched. This restores the v2.40 label, and the reason is in v2.40's own
   note: `type:'iBuyer'` is read by NOTHING (layout A dropped the eyebrow), so under "Instant cash offer"
   the word readers actually search for appeared nowhere on the card. Confirmed 2026-08-03 that we broker
   this path — Opendoor is `in_network` and its Cash Offer maps to `instant_offer_final`.
   v2.70 = DEAD-CODE SWEEP (2026-08-01). No rendered change; 54 scenarios reconcile, badges and all
   fifteen row values identical. Removed: netDisplay() (the old row-card renderer — render() has built
   netLbl/netCell inline since the row became timeline/offer/net), repairsFor() (nothing has called it
   since repairs became display-only), IS_POOR (defined, never referenced), IC.down (the only icon with
   no consumer), the write-only `netNow` property, and 25 CSS rules / ~3KB (the whole .row-card* family,
   which was transitively dead behind netDisplay, plus .mf-sub, .mf-chip--all, .mf-box-v--neg,
   .cb-cmp__cta*). Each verified with comments stripped before deletion.
   ⚠️ D.repairAvg is unread by the engine but the KEY STAYS — lib/data.php ships it and
   check_path_sync.py gates it, so dropping it here alone would break the mirror check.
   ⛔ D.l4lGap was in this same category and was DELETED 2026-08-03 — from BOTH sides at once, which is
   the only way to move a mirrored key. See the note at the deletion site for why the measure itself is
   retired, not merely unread.

   v2.69 = PIPELINE-AUDIT P0 FIXES (2026-07-31). Three live bugs, no number moved.
   (1) `syncBricks()` puts `is-on` where the ENGINE's defaults are, at boot — the markup hardcoded `good`
       while DEFAULT_COND is `fair` in 164 of 259 markets, and nothing re-synced it, so those markets
       highlighted one band while pricing another. No static `is-on` can be right across markets.
   (2) The port's REQUIRED guard tested `== null`, so `paths: []` (what data.php returns on a failed
       lookup) sailed through and every card rendered `$NaN`. Now an empty object/array/string counts
       as missing — the protection its own comment claimed.
   (3) `GET OFFERS NOW` pointed at `#offers`, the id of its own wrapper. Target + tracking hook taken
       from the real component in `_clo_reference/intro-cta.php:74`.
   Full findings → tickets/PIPELINE_AUDIT_20260731.md

   v2.68 = THE TIMELINES ARE SETTLED, AND ⚡ FASTEST IS COMPUTED. The row now shows ONE TYPICAL figure
   per path instead of a range — the row is a points row everywhere else (Est. offer and Est. net are both
   midpoints), and `dmid` used to be a SEPARATE hidden number from the displayed range while driving the
   sort, daysSaved, Speed cost and the badge. One figure means what you see is what ranks.
   Typicals: cash ~17 · sell-before-you-list ~30 · iBuyer ~37 · 7-day ~40 (derived) · agent ~76 (derived).
   Published FLOORS move to the drawer + the row tooltip: 7 / 10 / 14 / 7.
   ⚠️ METHOD (Jamie's correction of a wrong inference of mine): "as fast as X" is a FLOOR, not a norm —
   four partners publishing 'as fast as 14 days' tells you the floor is 14 and nothing about the typical.
   Where a path publishes a WINDOW, the typical is that window's midpoint. Traditional cash is fastest on
   its own published 7-30, not because we put it there.
   ⚠️ OUR OWN DEALS SAY CASH IS SLOWER — median 37 days across 1,353 closed investor deals against the
   shipped 17. Jamie's call, defensible because our cohort shops multiple offers and 17 sits inside
   Clever's published window. On the record in canonical `timelines.contradicting_measurement`.
   ⚡ Fastest was the last TYPED badge (`fastest:true` on the cash card) while Most money and Best value
   were computed. Now min(dmid) among eligible paths.
   v2.67 = THE CONDITION LADDER IS REBUILT ON A WITHIN-HOME MEASUREMENT. The old ladder was HC
   CROSS-SECTIONAL — median price of class-X homes vs median price of typical-class homes, i.e. DIFFERENT
   HOUSES — so it confounded condition with size, age and neighbourhood. Read as what happens to ONE home
   it implied renovation returns of 9.3x-22.4x and an investor offer at 100.3% of market value. Jamie
   caught it from that >100%. Replaced by Clever agent sales / a CONDITION-BLIND AVM (n=2,446), where the
   discount tracks REPAIR COST AS A SHARE OF VALUE. Now PER TYPE (a repair bill is a bigger deal on a
   $221k condo than a $398k house) via one national model at each type's own anchor — NOT a return to
   per-type ladders, which invert in 17.4% of condo cells and stay rejected.
   Tampa house: poor $204,000 -> $352,000 · fair $321,000 -> $386,000 · good $398,000 (unchanged) ·
   like-new $580,000 -> $401,000. ARV on a $500,000 house: poor $1,424,000 -> $571,000.
   ⚠️ THE LADDER IS MUCH FLATTER — 1.14x where it was 2.85x, and like-new is only +0.84% over good. That
   is what the within-home data says and it matches renovation economics. The CARDS still move a long way
   because condition also drives investorRatio / ibuyerRepairs / sevenDayConcession directly.
   ⚠️ FIRST THING TO REVISIT: band DEFINITIONS, not the model — HC class 6 vs 5 is physical condition,
   the deals cohort's "modern" vs "older finishes" is a finish gap and both are move-in ready.
   v2.66 = THE READER'S OWN VALUE IS NOW SACRED, AND ARV IS DERIVED FROM IT.
   `state.override` (wiped on EVERY brick click) -> `state.customV`, used verbatim and cleared ONLY by
   Reset. Jamie: "If they type in 500,000 and then they click 'New', it should stay 500,000. Only the ARV
   in the backend changes ... it would be really annoying to have that value I just entered manually
   change every time I clicked a thing." The value control sits ABOVE the characteristics in the rail, so
   typing first and refining after is the natural order, and a number that moved underneath them would
   punish exactly that order. The bricks still drive everything else: condition feeds investorRatio,
   ibuyerRepairs and sevenDayConcession directly, so the cards keep responding to it.
   NEW `arvOf(V,type,cond)` = V x ratio[likenew] / ratio[cond], carried on every path as `.arv`. At
   like-new ARV == V by construction. On $500,000: likenew $500,000 / good $728,000 / fair $902,000 /
   poor $1,424,000. ⚠️ DISPLAY/COPY ONLY — the ladder is a cross-sectional gradient, so read as a
   renovation return it implies 9.3x-22.4x on repair spend, and an investor offer priced off it lands at
   100.3% of market value. The investor card stays on the measured per-band ratio.
   ALSO: a VALUE GATE on Sell-before-you-list (`upNow > 0`). The $14,000 program-fee floor exceeds the
   offer below V ~ $16,900, which rendered a NEGATIVE net (-$2,912 at $12,000) — reachable at the poor
   band in low-cost markets.
   v2.65 = the 7-day concession gains a PROPERTY-TYPE NUDGE (Jamie: "i think it could adjust a bit with
   property type"). nudge_pp = max(0, saleToList[sfr] - saleToList[type]) — Tampa condo +3.1pp, townhome
   +0.2pp, national condo +1.0pp. A DIFFERENCE, NOT A RATIO: the ratio's denominator is (1 - saleToList) for
   houses, which is 0.5pp nationally, so it explodes to 3.00x = a 12.69% concession on a condo. This is a
   WITHIN-MARKET comparison, which is why the market-heat confound that killed the per-market LEVEL formula
   largely cancels — it only says a condo is harder to move fast than a house HERE. ⚠️ NOT a deduction:
   our FMV is already a median SALE price, so applying sale-to-list as a step in the money stack would
   double-count. ⚠️ Clamped at zero (Miami townhomes actually sell 1.5pp closer to list than Miami houses).
   Tampa condo now concedes 6.10-8.68%, townhome 3.20-5.78%, house unchanged at 3.00-5.58%.
   v2.64 = THE 7-DAY PRICE CONCESSION IS A CONDITION CURVE (Jamie: "it gets harder to sell a house fast in
   7 days the worse shape the house is in ... we could create a defensible percentage curve across condition
   classes", and explicitly "it can be very minor"). poor 5.58% / fair 4.37% / good 4.23% / like-new 3.00%,
   replacing a flat 3.0%. LEVEL is anchored at like-new — Jamie's "3% is safe for a nice house in a hot
   market" is the BEST case, so the old flat number became the TOP of the ladder, not its middle. SHAPE is
   (1 - investorRatio) normalised to like-new, because this path is CASH-BUYERS-ONLY and so meets the same
   buyers whose condition aversion those 1,531 investor sales measure. Net by band: 88.2 / 89.3 / 89.5 /
   90.6% of FMV. ⚠️ Only the SHAPE is measured; the LEVEL is still a judgement call. An independent
   diff-in-differences on our own agent deals corroborates the direction (like-new none / good +1.0pp /
   fair +1.0pp / poor +9.9pp) and says poor should be steeper — we are conservative there because n=42.
   Badges and ordering hold at every band. Also: the buyer-side commission question is ANSWERED (Jamie —
   a 7-day cash sale DOES presume it), so that assumption is now recorded rather than open.
   v2.63 = CLEVER'S 1.5% LISTING FEE IS GONE FROM THE MODEL (Jamie: "we're getting rid of the 1.5% ...
   doing full commissions. so that whole benefit disappears"). Both agent paths now use the SURVEY MARKET
   RATE with its state -> national fallback. Traditional net 94.1% -> 93.4% ($371,851); 7-day 91.8% ->
   90.6% ($360,696). The 7-day card moved MORE because it was paying Clever's rate at BOTH ends while
   traditional paid it at one — the two cards were being compared on different fee stacks. Traditional
   COLLAPSES TO A POINT: its range WAS market-rate vs Clever, and with one product there is nothing left
   to span. ⚠️ Traditional is the BASELINE, so every card's `Net vs. agent` and `Speed cost` moved even
   where its own net did not. Ranking and all three badges unchanged. Table 39 -> 37 columns.
   v2.62 = SELL BEFORE YOU LIST gets its two-transaction ledger. Its EST. OFFER was rendering $398,000
   (market value) on a path that advances 84% — now $334,320, the same gross meaning the other four
   cards use. The drawer gains a five-line ledger with a `Net upfront cash` SUBTOTAL of 76.5%, which is
   QuickBuy's own published first-closing figure. Net moves 85.0% -> 85.9% because the card now derives
   from seven shipped components instead of reading the cross-partner envelope `upsideTotal`.
   NEW ENGINE CONCEPT: `sale` = the price the home ULTIMATELY transacts at, defaulting to `offer`. Only
   this path sets it (the partner buys at 84%, the open market buys at 100%), and it is what keeps
   `fees = sale - net` and `discount = V - sale` true here — so the money-flow guarantee holds on all
   five cards instead of being excepted on one. Carry stays OUT of the point estimate (Jamie): only one
   of three partners charges it, and it already drives `upsideTotal[0]`, the range's low end.
   v2.61 = the iBuyer repair deduction is CONDITION-KEYED (fair 0.05 / good 0.03 / like-new 0.01, all inside
   the measured 0.01–0.05 range) and the iBuyer net is now DERIVED AT READ TIME from the decomposition.
   Net mid by band: fair 79.9% / good 81.9% / like-new 83.9%. `P.ibuyer` is now the across-band ENVELOPE,
   a cross-check only — reading it directly would make the card stop responding to condition.
   v2.60 = iBuyer card finalised — net [0.7465, 0.892] (was [0.681, 0.911]), range re-anchored on OPENDOOR's
   measured discount instead of Offerpad's tails (18 purchases in 12mo vs Opendoor's 1,255). Median moves
   0.8147 -> 0.8145, i.e. the centre was already right; only the spread was wrong. Path stays condition-FLAT,
   now evidenced (measured 0.976/0.966/0.968/0.941 across classes 3-6). DECISION_LOG 2026-07-31.
   v2.59 = the investor cash offer is PER CONDITION BAND (0.7084/0.7718/0.7792/0.8433), reversing flat 0.75.
   Product reason, not a statistical one: a visible constant showed 75.0% of FMV for every band/type/market.
   ⚠️ At `likenew` the cash net (84.3%) now exceeds the iBuyer's (79.6%), so cash is no longer last at every
   rung — it is 4th there. Accepted; the other four paths are still condition-flat. DECISION_LOG 2026-07-31.
   v2.58 = the panel's closing line is now just the anchor CTA (the "— every fee sourced…" tail deleted), one
   type step larger. (2026-07-30)
   v2.57 = percents to ONE DECIMAL everywhere (Jamie: 79.6%, not 80%) — the integer rounding was also driving
   the bar's segment widths; and each bar fill now carries its own %, in ledger order (net, below-market, fees).
   v2.56 = the "below market value" subtext is CUT (Jamie: self-explanatory) and the fees `[i]` moves next to
   its label. With both gone the annotation column has no occupants, so the ledger is back to three columns.
   v2.55 = ledger gains a 4th ANNOTATION column so the digits stay aligned — putting "below market value"
   inside the right-aligned amount cell had pushed one figure 111.7px off the others.
   v2.54 = the fees `[i]` becomes a working tooltip, copy per path (`feeNote`). Jamie's iBuyer line verbatim;
   the other four are drafts on the same pattern. Note the page's OTHER `[i]` markers are still decorative.
   v2.53 = the below-market row rewritten to Jamie's sketch — the row LABEL is now the offer itself
   ("$350,240 offer") and the amount explains the gap ("−$47,760 below market value"); `[i]` on fees; deduction
   percents red; the now-redundant offer-amount footnote deleted. (2026-07-30)
   v2.52 = the two colour axes separated: deductions move off the amber that the fees chip owns and onto
   `--clvr-danger`, so amount colour means "what this does to your proceeds" and chip colour means only
   "which bar segment". (2026-07-30)
   v2.51 = `Net-to-value` (hyphenated = ratio); $0 goes grey, not green; the section link reads
   "See the full breakdown for <plural> ↓" off an AUTHORED plural; `See breakdown` → `View details`. Dead
   `cosCell`/`.mf-val--zero` removed. (2026-07-30)
   v2.50 = breakdown bar back to the THICK 30px form, full panel width, with the only number inside the blue:
   "Net: $298,500 (75% of fair market value)". The external caption + FMV total are deleted. (2026-07-30)
   v2.49 = box icons removed (Jamie); box 1 renamed `Net to value`; `+54 days` becomes
   `54 days faster` with the unit words small. (2026-07-30)
   v2.48 = the four drawer boxes made DISTINCT from the row (Jamie: the first two "literally repeat the
   callouts right above"): % home value · Net vs. agent · Time vs. agent · Speed cost. The one-version-old
   third line and the merged two-stat box are both gone — separate boxes for money and time removed the need.
   v2.47 = Jamie's sketch, both surfaces. ROW = Est. timeline · Est. offer · Est. net (% mkt value leaves the
   row). DRAWER = four boxes each with a THIRD line: offer/net carry their % of fair market value, the two
   vs-agent stats merge into one box (money on the value line, days on the sub-line), and "per day faster"
   drops out of the Speed cost value into its sub-line. (2026-07-30)
   v2.46 = box labels + values to Jamie's wording: Est. offer amt · Est. net vs. agent · Est. time vs. agent ·
   Speed cost, with "54 days faster" / "$1,065 per day" — the unit words ride in `.mf-of` because they don't
   fit at the value size. (2026-07-30)
   v2.45 = breakdown callout boxes relabelled with the first icons from the Clever Icons library (Jamie's
   refs): [messages-dollar] Est. offer · [calculator-money] vs. agent sale · [time-fast] vs. agent sale ·
   [payroll-calendar] per day faster. Retires the open "Speed price vs Speed cost" question — both words are
   gone. (2026-07-30)
   v2.44 = `Learn more →` (arrow, no period) + nowrap, matching the page's existing `→ = navigates` /
   `⌄ = expands in place` convention. (2026-07-30)
   v2.43 = descriptor vertically CENTRED in the block below the name (was top-aligned to the label row) —
   Jamie: the leftover space read better split above/below than as one gap under the text. (2026-07-30)
   v2.42 = descriptor DIALLED BACK on Jamie's review of v2.41: .8rem (not .85), THREE rows (not four), no
   "How it works:" lead-in, copy re-cut to 83–100 chars so `Learn more` always lands on row 3. The
   top-alignment from v2.41 stays. (2026-07-30)
   v2.41 = the row DESCRIPTOR rebuilt (Jamie: "too small, too much dead space"): .85rem on its own type step,
   four lines, top-aligned to the label row, a "How it works:" lead-in, and all five strings rewritten to
   ~110–145 chars. The air was an EMPTY LINE, not padding — the field was running at half its char budget.
   (2026-07-30)
   v2.40 = path labels (Jamie): "iBuyer offer" → "Instant cash offer", "7-day agent sale" → "7-day sold";
   the other three left as they were. The breakdown link stopped pluralising the label (it would have printed
   "7-day solds"). ⚠️ The path objects' `type:` eyebrow field is read by NOTHING — layout A dropped the
   eyebrow — so the taxonomy half of the reframe has no visible surface. (2026-07-30)
   v2.39 = two nits (Jamie): the callout tooltip is now genuinely 9.5px with a .5px OPTICAL lift, and
   "See breakdown" drops from weight 600 to 400. The tooltip needed a second pass because a THEME RULE FLOORS
   EVERY SVG AT min-width/min-height:1em — a min floor beats `width`, so the v2.37 resize was a silent no-op
   and the icon was still rendering at 10.56px. `.mf-i` now clears the floor. (2026-07-30)
   v2.38 = the Est. net callout shows EXACT dollars ($298,500), so the row and the ledger agree to the
   dollar. Rounding to $10/$25/$50 was weighed and rejected — see the note at `netCell`. (2026-07-30)
   v2.37 = UX punchlist pass 1 (Jamie 2026-07-30): app-like "Sort by: [Speed] [Price]"; label→value gap
   17px → 9px; EST. NET → EST. NET TO YOU; the net callout shows full dollars ($299,000, not $299K);
   "Breakdown +" → neutral-grey "See breakdown ⌄" with a flipping chevron; rank tile + tooltip icon retuned
   for PROPORTION (their centres already measured sub-pixel — see the CSS notes). (2026-07-30)
   v2.36 = badge colours split three ways (money green · value blue · speed purple) + the dead per-path
   icon code removed (five glyphs, the clock, their two CSS rules, and the `icon:` key on every path —
   `t.icon` had been read by nothing since layout A). (2026-07-30)
   v2.35 =the 0–100 cost-vs-speed RATING DELETED (it was the only figure on the page not traceable to
   measured data) and replaced by a COMPUTED "Best value" badge; four callout boxes above the breakdown
   (offer amount added); bar captions moved outside the bar and onto the segment boundary; the decorative
   glyphs removed from the callout labels. Two sorts unchanged — `$/day faster` already orders the paths, so
   the index was never load-bearing. (2026-07-29, second session)
   v2.34 = the money-flow model built + the "Ways to sell" row/breakdown rebuilt with Jamie (2026-07-29):
   layout A (name on its own line), the SBR-borrowed breakdown panel, and the since-removed rating.
   v2.33 = engine decomposition (offer/fees/discount/netClose/net/payoff/cos/pctOfFmv per path) + the first
   three-callout row. Full narrative → CHANGELOG 2026-07-29; the why → DECISION_LOG 2026-07-29.
   v2.32 = AXIS 3: all five path economics rebuilt on sourced numbers (D.paths). Investor cash from
   1,531 real Clever investor sales; instant-offer/with-upside from partner net sheets verified to the
   dollar; commission from our own survey. Provenance → canonical/path_economics.json.
   THIS FILE IS THE SPEC: pipeline/wp_port/port_block1.py generates the WP plugin from it.
   Version history lives in CHANGELOG.md / STATE.md — bump the number above when you change this file.
   ════════════════════════════════════════════════════════════════ */
.sell-fast-page{--rail-stick-top:24px;
  --clvr-blue:#0075EB; --clvr-blue-dark:#005bb5;
  --clvr-text:#22293b; --clvr-text-secondary:#4b698b; --clvr-text-muted:#4E79A6;  /* QA-075: was #86a5c6 = 2.56:1 on white, used for real reading copy —
     the CTA disclaimer, the estimate provenance note, slider min/max, inactive tab labels, source
     lines. #4E79A6 is 4.56:1, the lightest value on the same hue that clears AA, and stays visibly
     lighter than --clvr-text-secondary (#4B698B, 5.69:1) so the muted/secondary step survives. */
  --clvr-bg:#ffffff; --clvr-bg-subtle:#f5f8fc; --clvr-bg-muted:#f3f5f9; --clvr-bg-tint:#F0F5FA;
  --clvr-border:#bfcbde; --clvr-border-light:#e2e8f0; --clvr-border-card:#dde4ed;
  --clvr-success:#0ec18f; --clvr-danger:#C62828;   /* danger = underwater net proceeds (2026-07-24) */
  --clvr-radius:8px; --clvr-radius-sm:4px; --clvr-btn-radius:4px;
  --clvr-shadow-lg:0 4px 8px rgba(12,20,42,.08),0 12px 32px rgba(12,20,42,.10);
  --clvr-card-shadow:0 1px 3px rgba(0,46,93,0.06),0 1px 2px rgba(0,46,93,0.04);
  --clvr-transition:200ms ease;
  --clvr-font:"Inter",arial,sans-serif; --clvr-font-heading:"Rubik","Inter",sans-serif;
  --clvr-sp-1:.25rem; --clvr-sp-2:.5rem; --clvr-sp-3:.75rem; --clvr-sp-4:1rem; --clvr-sp-6:1.5rem; --clvr-sp-8:2rem; --clvr-sp-10:2.5rem; --clvr-sp-12:3rem; --clvr-sp-16:4rem;
  --cb-fs-caption:.75rem; --cb-fs-small:.875rem; --cb-fs-body:1rem; --cb-fs-h3:1.25rem; --cb-fs-h2:1.5rem;
  --hero-band:#E8F2FE;               /* CLO blue tint (cream tried + reverted 2026-07-23; blue/gray variant TBD) */
  --conversion-orange:#FF6900; --conversion-orange-dark:#e85d00;
  --cta-green:#00B373; --cta-green-dark:#009960;  /* design-system CTA green — tried on the offers button + reverted (orange pops); kept for future use */
  /* ── component width schema (Jamie 2026-07-23): every element uses one of THREE widths ──
     1. full wrap (1144 → .wrap)          hero band · CTA card · shell · sections
     2. form panel (--sf-panel-w)         the CLO 300px conversion column
     3. reading column (--sf-body-w)      TOC · intro · text blocks — DERIVED as wrap − panel,
                                          so its right edge always aligns with the CTA divider */
  --sf-panel-w:300px;
  --sf-body-w:calc(100% - var(--sf-panel-w));
}
.sell-fast-page,.sell-fast-page *{box-sizing:border-box;margin:0;padding:0}
.sell-fast-page{font-family:var(--clvr-font);font-size:var(--cb-fs-body);line-height:1.6;color:var(--clvr-text);background:var(--clvr-bg);-webkit-font-smoothing:antialiased}
.sell-fast-page h1,.sell-fast-page h2,.sell-fast-page h3,.sell-fast-page h4{font-family:var(--clvr-font-heading);line-height:1.3;letter-spacing:-0.015em}
.sell-fast-page h2{font-size:var(--cb-fs-h2);font-weight:700;color:var(--clvr-blue)}
.sell-fast-page p{margin:0 0 .9rem}
.sell-fast-page a{color:var(--clvr-blue-dark);text-decoration:none}
/* QA-053 — colour-only hover, page-wide. Base anchors rest at --clvr-blue-dark, so hover BRIGHTENS to
   --clvr-blue; hovering to the resting token would have been an invisible no-op. The :not() keeps the three
   conversion CTAs out of it — a global a:hover colour would repaint their white button labels. */
.sell-fast-page a:hover:not([data-clvr-cta]){color:var(--clvr-blue)}
.sell-fast-page .wrap{max-width:1144px;margin:0 auto;padding:0 24px}
.sell-fast-page :focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:2px;border-radius:4px}

/* header */
.sell-fast-page .btn-cta{display:inline-flex;align-items:center;gap:.45rem;padding:.5rem 1rem;border-radius:8px;background:var(--conversion-orange);color:#fff!important;
  font-family:var(--clvr-font-heading);font-weight:600;font-size:var(--cb-fs-small);text-decoration:none!important;white-space:nowrap;border:none;cursor:pointer;transition:var(--clvr-transition)}
.sell-fast-page .btn-cta:hover,.sell-fast-page .btn-cta:focus-visible{background:var(--conversion-orange-dark);color:#fff!important}

/* ─── HERO BAND (CLO series pattern, LWC type) ─── */
/* hard border-bottom replaced with a soft blurred drop shadow (Jamie 2026-07-22) */
.sell-fast-page .hero{background:var(--hero-band);box-shadow:0 12px 24px -16px rgba(22,42,76,.22)}
/* 1px bottom padding stops the bridge CTA's negative margin collapsing through the hero, so the card truly protrudes */
.sell-fast-page .hero .wrap{padding:36px 24px 1px}
/* H1 spans the full wrap width (same bounds as the bridge CTA); intro stays narrow for line length (Jamie 2026-07-23) */
.sell-fast-page .hero h1{font-size:2.5rem;font-weight:600;color:#161E26;letter-spacing:-0.02em;line-height:1.22}
@media(max-width:640px){.sell-fast-page .hero h1{font-size:1.9rem}}
.sell-fast-page .hero__byline{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem .75rem;margin:1rem 0 0;font-size:var(--cb-fs-caption);color:#6B7280}
.sell-fast-page .hero__byline-main,.sell-fast-page .hero__byline-extra{display:contents}
.sell-fast-page .hero__byline-item{display:inline-flex;align-items:center;gap:.45rem;min-width:0}
.sell-fast-page .hero__byline-avatar{width:28px;height:28px;border-radius:50%;object-fit:cover;box-shadow:0 0 0 2px #fff,0 0 0 3px var(--clvr-border-light);flex:none}
.sell-fast-page .hero__byline-avatar--fallback{display:inline-flex;align-items:center;justify-content:center;background:var(--clvr-blue);color:#fff;font-family:var(--clvr-font-heading);font-size:.67rem;font-weight:700;letter-spacing:.02em}
.sell-fast-page .hero__byline-copy{display:flex;flex-wrap:wrap;align-items:baseline;gap:.15rem .25rem;min-width:0}
.sell-fast-page .hero__byline-role{white-space:nowrap}
.sell-fast-page .hero__byline a{color:var(--clvr-text);font-weight:600;text-decoration:underline;text-underline-offset:2px;text-decoration-color:#b8c7da}
.sell-fast-page .hero__byline a:hover{color:var(--clvr-blue-dark)}
.sell-fast-page .hero__byline a:focus-visible,.sell-fast-page .hero__byline-toggle:focus-visible{outline:2px solid var(--conversion-orange)!important;outline-offset:2px;border-radius:4px}
.sell-fast-page .hero__byline-dot{color:#B3C5D9}
.sell-fast-page .hero__byline-updated{flex-basis:100%;font-weight:500}
.sell-fast-page .hero__byline-toggle{display:none;align-items:center;gap:.15rem;min-height:28px;padding:.1rem .15rem;border:0;border-radius:var(--clvr-radius-sm);background:transparent;color:var(--clvr-link,var(--clvr-blue));font:600 var(--cb-fs-caption)/1.2 var(--clvr-font-body);white-space:nowrap;cursor:pointer}
.sell-fast-page .hero__byline-toggle:hover .hero__byline-toggle-label{color:var(--clvr-blue-dark)}
.sell-fast-page .hero__byline-toggle-icon{width:14px;height:14px;flex:none}
.sell-fast-page .hero__byline.is-expanded .hero__byline-toggle-icon{transform:rotate(180deg)}
@media(max-width:640px){
  .sell-fast-page .hero__byline{display:grid;grid-template-columns:minmax(0,1fr);gap:.55rem;margin-top:.9rem}
  .sell-fast-page .hero__byline-main{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.2rem .3rem;min-width:0}
  .sell-fast-page .hero__byline-toggle{display:inline-flex;flex:none}
  .sell-fast-page .hero__byline-toggle[hidden]{display:none}
  .sell-fast-page .hero__byline-extra{display:none}
  .sell-fast-page .hero__byline.is-expanded .hero__byline-extra{display:grid;gap:.5rem;padding:.15rem 0 0 1px}
  .sell-fast-page .hero__byline-extra[hidden]{display:none!important}
  .sell-fast-page .hero__byline-extra .hero__byline-dot{display:none}
  .sell-fast-page .hero__byline-updated{font-size:.75rem}
}
/* collapsed "On this page" TOC bar — delineates the byline block from the intro (CLO pattern, Jamie 2026-07-23) */
.sell-fast-page .hero__toc{max-width:var(--sf-body-w);margin:var(--clvr-sp-4) 0 0;background:#fff;border:1px solid var(--clvr-border-light);border-radius:var(--clvr-radius);box-shadow:0 1px 2px rgba(12,20,42,.04)}
.sell-fast-page .hero__toc summary{display:flex;align-items:center;gap:.6rem;padding:.7rem 1rem;cursor:pointer;font-size:var(--cb-fs-small);font-weight:600;color:var(--clvr-text);line-height:1.4;list-style:none;user-select:none}
.sell-fast-page .hero__toc summary::-webkit-details-marker{display:none}
.sell-fast-page .hero__toc summary:focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:2px;border-radius:var(--clvr-radius)}
.sell-fast-page .hero__toc-ico{width:16px;height:16px;color:var(--clvr-blue);flex:none}
.sell-fast-page .hero__toc-chev{width:16px;height:16px;color:var(--clvr-text-muted);margin-left:auto;flex:none;transition:transform var(--clvr-transition)}
.sell-fast-page .hero__toc[open] .hero__toc-chev{transform:rotate(180deg)}
.sell-fast-page .hero__toc-list{display:grid;gap:.4rem;padding:.15rem 1rem .85rem 2.35rem}
.sell-fast-page .hero__toc-list a{font-size:var(--cb-fs-small);font-weight:500;color:var(--clvr-blue-dark);text-decoration:none;width:fit-content}
.sell-fast-page .hero__toc-list a:hover{color:var(--clvr-blue)}
.sell-fast-page :where(#offers,.sell-fast-page #ways,.sell-fast-page #path-sections,.sell-fast-page #market-speed,.sell-fast-page #investor-market-data,.sell-fast-page #trust,.sell-fast-page #methodology){scroll-margin-top:72px}
.sell-fast-page .hero__intro{font-size:var(--cb-fs-body);font-weight:400;line-height:1.65;color:var(--clvr-text);max-width:var(--sf-body-w);margin:var(--clvr-sp-4) 0 0}
.sell-fast-page .hero__intro b{font-weight:600;color:#161E26}
.sell-fast-page .hero__intro-lead{margin:0}
.sell-fast-page .hero__intro-label{margin:.45rem 0 0}
.sell-fast-page .hero__intro-points{margin:.45rem 0 0;padding-left:1.3rem;display:grid;gap:.3rem}
.sell-fast-page .hero__intro-points li::marker{color:var(--clvr-blue)}
/* reading column falls back to full width once the CTA stacks (no divider to align to) */
@media(max-width:820px){.sell-fast-page .hero__toc,.sell-fast-page .hero__intro{max-width:100%}}
.sell-fast-page .hero__intro .skip{font-weight:600;color:var(--clvr-blue-dark)}

/* ─── shell: sticky personalize rail (left) + content column ─── */
/* extra top margin clears the bridge CTA's protrusion below the hero seam (keep in sync with --bridge-drop) */
.sell-fast-page .shell{display:block;margin-top:calc(92px + var(--clvr-sp-8))}
@media(min-width:920px){
  .sell-fast-page .shell{display:grid;grid-template-columns:280px minmax(0,1fr);gap:var(--clvr-sp-10);align-items:start}
}
/* sticky only when the viewport is tall enough to show the WHOLE rail while pinned — on short windows
   a pinned-but-cut-off rail reads as broken (Jamie screen recording 2026-07-23). The threshold is
   MEASURED from the rail at runtime (see stickyGate() in the script), not hard-coded: a fixed
   min-height went stale twice in two days as the rail's contents changed, silently switching the
   feature off on mid-height windows (2026-07-24). JS adds .can-stick to .shell when it fits.
   no max-height/overflow — inner scrollbar stays killed (Jamie 2026-07-22) */
@media(min-width:920px){
  .sell-fast-page .shell.can-stick .rail{position:sticky;top:var(--rail-stick-top,calc(56px + 1.25rem))}
}
.sell-fast-page .sell-fast-page__content{min-width:0}
.sell-fast-page .section{margin-bottom:var(--clvr-sp-12)}
.sell-fast-page .section h2{margin:0 0 var(--clvr-sp-4)}
/* section h3: smaller + dark, not the blue h2 treatment (Jamie 2026-07-23) */
.sell-fast-page .section h3{margin:0 0 var(--clvr-sp-4);font-size:var(--cb-fs-h3);font-weight:600;color:var(--clvr-text)}

/* personalize panel (cb-about card language, vertical rail layout) */
.sell-fast-page .pers{background:var(--clvr-bg);border:1px solid var(--clvr-border-card);border-radius:var(--clvr-radius);padding:var(--clvr-sp-4) var(--clvr-sp-4) var(--clvr-sp-6);
  box-shadow:0 1px 3px rgba(0,46,93,0.05);margin-bottom:var(--clvr-sp-6)}
/* header: one line, sentence case, no icon (Jamie 2026-07-22) */
.sell-fast-page .pers__lead{display:flex;align-items:baseline;gap:.6rem;margin:0 0 var(--clvr-sp-4)}
/* no icon on this header — tried a solid house glyph 2026-07-24, Jamie: "i don't like the icon" */
.sell-fast-page .pers__lead h3{font-size:1.125rem;font-weight:600;color:var(--clvr-text);margin:0;line-height:1.3;white-space:nowrap}
.sell-fast-page .pers__reset{margin-left:auto;background:none;border:0;font:inherit;font-size:var(--cb-fs-caption);font-weight:600;color:var(--clvr-text-secondary);cursor:pointer;text-decoration:underline;text-underline-offset:2px;white-space:nowrap}
.sell-fast-page .pers__reset:hover{color:var(--clvr-text)}
.sell-fast-page .pers__k{font-size:var(--cb-fs-small);font-weight:600;color:var(--clvr-text);margin:.95rem 0 .45rem;display:flex;align-items:center;gap:.35rem;white-space:nowrap}
.sell-fast-page .pers__k:first-of-type{margin-top:0}
/* value readout shares the label row — kills a line break */
/* Jamie's layout (2026-07-24): label + ⓘ on their own line, then the field LEFT and the mode chip
   RIGHT on the next line, then the slider. Earlier attempts crammed label + field + chip onto one
   line (~255px of content in a ~246px rail → the label wrapped), and stacking the chip under the
   field inside the label row made the label center against the field+chip block, so it read low. */
.sell-fast-page .pers__valrow{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.55rem}
/* ── real tooltip (replaces native title=, which is slow, unstyled and dead on touch) ──
   Opens on hover, keyboard focus, or tap; Escape closes. 210px in a 280px rail, so it can't overflow. */
.sell-fast-page .pers__info{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;
  width:15px;height:15px;border-radius:50%;border:1px solid var(--clvr-border);background:var(--clvr-bg);
  font-family:var(--clvr-font);font-size:.62rem;font-weight:700;line-height:1;
  color:var(--clvr-text-secondary);cursor:help;transition:var(--clvr-transition)}
.sell-fast-page .pers__info:hover,.sell-fast-page .pers__info:focus-visible{border-color:var(--clvr-blue);color:var(--clvr-blue);outline:none!important}
/* centred on the icon (anchored at left:-8px a 210px tip overhung the rail's right edge by ~52px) and
   ABOVE it — below, the tip covered the value field and slider it was telling you to use */
.sell-fast-page .pers__tip{position:absolute;bottom:calc(100% + 8px);left:50%;z-index:60;width:210px;
  background:var(--clvr-text);color:#fff;border-radius:var(--clvr-radius-sm);padding:.5rem .6rem;
  font-family:var(--clvr-font);font-size:.72rem;font-weight:500;font-style:normal;line-height:1.45;
  letter-spacing:0;text-transform:none;white-space:normal;text-align:left;   /* .pers__k sets nowrap */
  box-shadow:0 6px 16px rgba(12,20,42,.18);
  opacity:0;visibility:hidden;transform:translate(-50%,3px);   /* rises into place from below */
  transition:opacity .16s ease,transform .16s ease,visibility .16s}
.sell-fast-page .pers__info:hover .pers__tip,.sell-fast-page .pers__info:focus .pers__tip,.sell-fast-page .pers__info.is-open .pers__tip{opacity:1;visibility:visible;transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){.sell-fast-page .pers__tip{transition:none}}
/* ── optional loan payoff (last control) ──
   Label first, checkbox to its RIGHT (Jamie 2026-07-24). The checkbox is drawn from scratch: this
   theme applies appearance:none to checkboxes with no replacement, so the native box renders as an
   invisible 26×15 blank — nothing to see and nothing to aim at, which is why it read as broken. */
.sell-fast-page .pers__toggle{display:inline-flex;align-items:center;gap:.5rem;margin:1.1rem 0 .1rem;font-size:var(--cb-fs-small);font-weight:600;color:var(--clvr-text);cursor:pointer;user-select:none}
/* the box is WRAPPED for the same reason the value field is: this theme overrides width on inputs
   (the checkbox came out 26×18 instead of square), so a span I own sets the size */
.sell-fast-page .pers__cbox{display:flex;flex:none;width:18px;height:18px}
/* padding:0 is the load-bearing bit — the theme puts 12px padding on inputs, which with border-box
   forced a 26px-wide box no matter what width/size/wrapper we used. */
.sell-fast-page .pers__toggle input{appearance:none;-webkit-appearance:none;flex:1 1 0;position:relative;width:100%;min-width:0;height:18px;margin:0;padding:0;
  border:1px solid var(--clvr-border);border-radius:var(--clvr-radius-sm);background:var(--clvr-bg);
  cursor:pointer;transition:var(--clvr-transition);box-shadow:inset 0 1px 2px rgba(22,42,76,.06)}
.sell-fast-page .pers__toggle:hover input{border-color:var(--clvr-blue)}
.sell-fast-page .pers__toggle input:checked{background:var(--clvr-blue);border-color:var(--clvr-blue);box-shadow:none}
/* checkmark */
.sell-fast-page .pers__toggle input:checked::after{content:"";position:absolute;left:5px;top:2px;width:5px;height:9px;
  border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg)}
.sell-fast-page .pers__toggle input:focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:2px}
/* the expand: animates height + fade so it reads as intentional, not a jump (Jamie: "slick").
   visibility:hidden while closed keeps the collapsed field out of tab order and screen readers. */
.sell-fast-page .pers__payoff{overflow:hidden;max-height:0;opacity:0;visibility:hidden;transform:translateY(-4px);
  transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .22s ease,transform .3s cubic-bezier(.4,0,.2,1),visibility .3s}
.sell-fast-page .pers__payoff.is-open{max-height:160px;opacity:1;visibility:visible;transform:none}
@media(prefers-reduced-motion:reduce){.sell-fast-page .pers__payoff{transition:none}}
.sell-fast-page .pers__valrow--payoff{margin:.45rem 0 0}
.sell-fast-page .pers__valrow--payoff .pers__valinput::placeholder{color:var(--clvr-text-muted);font-weight:700}
.sell-fast-page .pers__valrow .mode{font-size:.65rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--clvr-text-muted);white-space:nowrap}
/* the value is a text INPUT (Jamie: slider OR type your own). It must LOOK like a field — a subtle
   dashed underline was invisible as an affordance ("i would never know i could edit it by typing",
   Jamie 2026-07-24), so it's a real bordered box. Width is set in JS from the character count so the
   row stays tight from $50K to $2,100,000. */
/* --val-box-w balances the field against the "Estimated value ⓘ" label above it (~126px measured).
   The WRAPPER carries the width because this theme ignores both `width` and `size=` on the input
   itself — the field kept sizing to its content. Tune the balance here, one number. */
.sell-fast-page .pers__valbox{display:flex;flex:0 0 auto;width:var(--val-box-w,132px)}
.sell-fast-page .pers__valinput{font-family:var(--clvr-font-heading);font-weight:700;font-size:1.125rem;
  letter-spacing:-0.015em;color:var(--clvr-text);font-variant-numeric:tabular-nums;
  background:var(--clvr-bg);border:1px solid var(--clvr-border);border-radius:6px;
  /* the WP theme forces line-height:40px on inputs (same quirk as the CTA zip field, 2026-07-23),
     which made this box 48.4px tall next to 37.8px filter bricks — it read as extra padding but the
     padding was already SMALLER than the bricks'. Override the line-height and let padding set the
     height: 22.5 + 2×8 + 2 = ~40.5px, a touch taller than the bricks, which suits the bigger type. */
  /* left-aligned to match the CTA zip field and the page's manual-entry convention (Jamie 2026-07-24).
     Horizontal padding stays modest: the box is 132px, and the widest value any market can produce
     ($2,100,000, ~103px of text) needs the room — the CTA field's 16px left padding would risk
     clipping the last digits, which is how overflow fails when text is left-aligned. */
  line-height:1.25;padding:.5rem .5rem;margin:0;text-align:left;cursor:text;transition:var(--clvr-transition);
  flex:1 1 0;width:100%;min-width:0;   /* shrink into the wrapper instead of sizing to content */
  box-shadow:inset 0 1px 2px rgba(22,42,76,.06)}
.sell-fast-page .pers__valinput:hover{border-color:var(--clvr-blue)}
.sell-fast-page .pers__valinput:focus{outline:none!important;border-color:var(--clvr-blue);box-shadow:0 0 0 3px rgba(0,117,235,.15)}
.sell-fast-page input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:9999px;background:linear-gradient(90deg,var(--clvr-blue) var(--fill,30%),var(--clvr-bg-muted) var(--fill,30%));outline:none;margin:.35rem 0 .25rem}
.sell-fast-page input[type=range]:focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:2px}
.sell-fast-page input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--clvr-blue);cursor:pointer;border:3px solid #fff;box-shadow:0 1px 4px rgba(0,46,93,.35)}
.sell-fast-page input[type=range]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--clvr-blue);cursor:pointer;border:3px solid #fff;box-shadow:0 1px 4px rgba(0,46,93,.35)}
.sell-fast-page input[type=range]::-moz-range-progress{background:var(--clvr-blue);height:6px;border-radius:9999px}
.sell-fast-page .pers__ends{display:flex;justify-content:space-between;font-size:var(--cb-fs-caption);color:var(--clvr-text-muted)}
.sell-fast-page .pers__details-toggle{display:none}
.sell-fast-page .pers__details-more[hidden]{display:none}
@media(max-width:767px){
  .sell-fast-page .pers__details-toggle{display:inline-flex;align-items:center;gap:.35rem;margin:.9rem 0 0;padding:.35rem 0;background:none;border:0;
    color:var(--clvr-blue-dark);font:inherit;font-size:var(--cb-fs-small);font-weight:600;line-height:1.35;cursor:pointer;text-align:left}
  .sell-fast-page .pers__details-toggle:hover{color:var(--clvr-blue-dark)}
  .sell-fast-page .pers__details-toggle:focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:2px;border-radius:var(--clvr-radius-sm)}
  .sell-fast-page .pers__details-chev{width:16px;height:16px;flex:none;transition:transform var(--clvr-transition)}
  .sell-fast-page .pers__details-toggle[aria-expanded="true"] .pers__details-chev{transform:rotate(180deg)}
}
@media(prefers-reduced-motion:reduce){.sell-fast-page .pers__details-chev{transition:none}}
.sell-fast-page .pers__bricks{display:flex;flex-wrap:wrap;gap:.4rem}
.sell-fast-page .brick{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.42rem .6rem;border-radius:var(--clvr-radius);border:1px solid var(--clvr-border-light);
  background:var(--clvr-bg);font-size:var(--cb-fs-small);font-weight:500;color:var(--clvr-text);cursor:pointer;transition:var(--clvr-transition);font-family:var(--clvr-font);white-space:nowrap}
/* ⚠️ MUST come after .brick's display. `syncBricks()` degrades an unreported property type with
   `b.hidden=true`, which relies on the UA stylesheet's `[hidden]{display:none}` — but ANY author
   `display` beats a UA rule, so `.brick{display:inline-flex}` silently cancelled the degrade and the
   brick stayed clickable. Clicking it priced the home off a missing anchor and every card rendered $0.
   Found live on albuquerque_nm (sfr only) and alaska (no townhouse) 2026-08-01. The JS was correct the
   whole time; this one line is what makes it take effect. */
.sell-fast-page .brick[hidden]{display:none}
.sell-fast-page .brick:hover{border-color:var(--clvr-blue);background:var(--clvr-bg-tint)}
.sell-fast-page .brick.is-on{border-color:var(--clvr-blue);background:var(--clvr-bg-tint);font-weight:600;color:var(--clvr-blue-dark);box-shadow:inset 0 0 0 .5px var(--clvr-blue)}
.sell-fast-page .pers__bricks--grid4{display:grid;grid-template-columns:repeat(4,1fr)}
.sell-fast-page .pers__bricks--grid2{display:grid;grid-template-columns:repeat(2,1fr)}
.sell-fast-page .pers__foot{font-size:.72rem;line-height:1.5;color:var(--clvr-text-muted);margin-top:.9rem}
/* rail__nudge (compact CTA card below the panel) REMOVED 2026-07-24 — Jamie: other CTAs + a
   scroll-depth sticky footer will carry this job. Markup + CSS recoverable from the plugin repo at
   commit ebaf645 if it comes back. */

/* QA-050 — post-path sticky footer. Behavior follows the maintained CLO series pattern, while the trigger
   is the complete local #path-sections boundary and all visual values come from the LWC token layer. */
.sell-fast-page .sell-fast-sticky-footer{position:fixed;right:0;bottom:max(var(--clvr-sp-2),env(safe-area-inset-bottom));left:0;z-index:80;
  opacity:0;visibility:hidden;transform:translateY(var(--clvr-sp-3));pointer-events:none}
.sell-fast-page .sell-fast-sticky-footer.is-visible{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}
.sell-fast-page .sell-fast-sticky-footer.is-dismissed{display:none}
.sell-fast-page .sell-fast-sticky-footer__inner{display:flex;align-items:center;gap:var(--clvr-sp-4);width:calc(100% - 48px);max-width:1096px;margin:0 auto;
  padding:var(--clvr-sp-3) var(--clvr-sp-4);border:1px solid rgba(255,255,255,.12);
  border-radius:var(--clvr-radius);background:rgba(11,26,46,.72);-webkit-backdrop-filter:blur(12px) saturate(180%);
  backdrop-filter:blur(12px) saturate(180%);box-shadow:var(--clvr-shadow-lg);color:var(--clvr-text-inverse)}
.sell-fast-page .sell-fast-sticky-footer__brand{display:inline-flex;align-items:center;justify-content:center;flex:none;width:1em;height:1.2em;color:var(--clvr-text-inverse)}
.sell-fast-page .sell-fast-sticky-footer__brand .co-icon{display:block;width:1em;height:1.2em;flex:none}
.sell-fast-page .sell-fast-sticky-footer__brand .co-icon path{fill:currentColor}
.sell-fast-page .sell-fast-sticky-footer__text{flex:1;margin:0!important;font-size:var(--cb-fs-small)!important;font-weight:500;line-height:1.35!important;color:inherit!important}
.sell-fast-page .sell-fast-sticky-footer__text strong{font-weight:700}
.sell-fast-page .sell-fast-sticky-footer__cta,.sell-fast-page .sell-fast-sticky-footer__cta:link,.sell-fast-page .sell-fast-sticky-footer__cta:visited{display:inline-flex;align-items:center;justify-content:center;
  /* QA-071: on-scale padding and the shared button radius. Vertical stays deliberately slim — this is
     a fixed overlay bar, so sp-3 would cost 12px of viewport on every scroll. sp-2/sp-8 is +2px. */
  padding:var(--clvr-sp-2) var(--clvr-sp-8);border-radius:var(--clvr-btn-radius);background:var(--clvr-blue,#0075EB);
  color:var(--clvr-text-inverse,#fff)!important;font-size:var(--cb-fs-small);font-weight:700;line-height:1.4;
  /* QA-069: deliberately NO text-transform. CTA labels render sentence case page-wide. The uppercase QA-061
     added here on 2026-08-09 came out the next day when Jamie reversed the direction — Clever's design language
     never calls for uppercase CTAs and its editorial bar warns against landing-page treatments. Do not
     reinstate: check_qa002_049_050_052.py asserts its absence. */
  text-decoration:none;white-space:nowrap;transition:background var(--clvr-transition),transform var(--clvr-transition)}
.sell-fast-page .sell-fast-sticky-footer__cta:hover{background:#0066d0;color:var(--clvr-text-inverse,#fff)!important;text-decoration:none;transform:translateY(-1px)}
.sell-fast-page .sell-fast-sticky-footer__cta:focus-visible{outline:2px solid var(--clvr-text-inverse)!important;outline-offset:3px}
.sell-fast-page .sell-fast-sticky-footer__close{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;flex:none;padding:0;border:0;border-radius:var(--clvr-radius-sm);
  background:transparent;color:rgba(255,255,255,.35);cursor:pointer}
.sell-fast-page .sell-fast-sticky-footer__close:hover{color:rgba(255,255,255,.9)}
.sell-fast-page .sell-fast-sticky-footer__close:focus-visible{color:rgba(255,255,255,.9);outline:2px solid rgba(255,255,255,.6)!important;outline-offset:2px}
.sell-fast-page .sell-fast-sticky-footer__close svg{width:18px;height:18px;min-width:0;min-height:0}
@media(prefers-reduced-motion:no-preference){.sell-fast-page .sell-fast-sticky-footer{transition:opacity .3s ease,transform .3s ease,visibility .3s}}
@media(max-width:640px){
  .sell-fast-page .sell-fast-sticky-footer{right:var(--clvr-sp-2);left:var(--clvr-sp-2)}
  .sell-fast-page .sell-fast-sticky-footer__inner{display:grid;grid-template-columns:1em minmax(0,1fr) 32px;width:100%;gap:var(--clvr-sp-2) var(--clvr-sp-3);padding:var(--clvr-sp-3) 14px}
  .sell-fast-page .sell-fast-sticky-footer__brand{grid-column:1;grid-row:1;align-self:start;margin-top:2px}
  .sell-fast-page .sell-fast-sticky-footer__text{grid-column:2;grid-row:1;font-size:15px!important;line-height:1.35!important}
  /* QA-061: the second sentence is desktop-only. display:none (not visibility/clip) so it leaves the
     accessibility and render tree entirely at mobile widths, per the ticket's acceptance test 1. */
  .sell-fast-page .sell-fast-sticky-footer__text-second{display:none}
  .sell-fast-page .sell-fast-sticky-footer__cta{grid-column:1 / 4;grid-row:2;width:100%;padding:8px 20px;font-size:14px}
  .sell-fast-page .sell-fast-sticky-footer__close{grid-column:3;grid-row:1;width:32px;height:32px;align-self:start}
}

/* ─── options list: ranked row-cards + sort (replaces the cb-cmp carousel — stashed in _archive) ─── */
.sell-fast-page .cb-cmp__sub{margin:calc(-1 * var(--clvr-sp-2)) 0 var(--clvr-sp-4);font-size:var(--cb-fs-body);line-height:1.6;color:var(--clvr-text-secondary)}
.sell-fast-page .cb-cmp__sub b{color:var(--clvr-text);font-weight:600}
/* `.cb-cmp__type-ico` / `.cb-cmp__days-ico` DELETED 2026-07-30 — the row schema carries no per-path
   glyph and no clock any more (layout A, v2.34/35), so both rules had no markup to style. The five
   path glyphs they sized went with them. Recoverable from `_archive/tampa_v2_v234_pre_panel_pass_20260729.html`. */
.sell-fast-page .rows__bar{display:flex;align-items:center;gap:.6rem;margin:0 0 var(--clvr-sp-4)}
.sell-fast-page .rows__bar-k{font-size:var(--cb-fs-small);font-weight:600;color:var(--clvr-text-secondary)}
.sell-fast-page .rows__sort{display:flex;gap:.4rem}
.sell-fast-page .rows{display:flex;flex-direction:column;gap:var(--clvr-sp-3)}

/* underwater: a loan payoff can take net proceeds below zero — show the negative number in red with a
   plain-language callout rather than a bare minus sign (Jamie 2026-07-24) */

/* ─── MONEY-FLOW ROW + QUICK BREAKDOWN (2026-07-29) ───────────────────────────────────────────────
   Replaces the flex row-card with a 2-row grid: identity (name + blurb) spans both rows on the left,
   each money column is label-over-value, and the actions stack on the right. Rationale + the measured
   alternatives (A/B/C/D, mobile) live in mocks/sell_fast/row_schema_variants_20260729.html.
   Money columns are sized minmax(64px,max-content) because a column is sized by its HEADING, not its
   figure ("EST. TIMELINE" is 92px, "$374K" is 48px) — a fixed width over-reserves and squeezes the
   blurb into a wrap. */
/* ── money-flow component: one type scale, one spacing grid ────────────────────────────────────────
   Audited 2026-07-29: a single card contained FIFTEEN distinct font sizes and three different container
   paddings. That inconsistency is what read as "unpolished" more than any single element. Everything
   below draws from these tokens instead — six type steps, spacing on a 4px grid. */
.sell-fast-page .mf-wrap,.sell-fast-page .pb--current{
  --mf-fs-lbl:.66rem;    /* uppercase column labels + box headings */
  --mf-fs-micro:.72rem;  /* notes, facts, footnotes */
  /* A SEVENTH step, added deliberately 2026-07-30 against this block's own "six steps" rule. The descriptor
     is the card's only prose — the one element a reader actually reads rather than scans — and it was sharing
     `--mf-fs-micro` with footnotes, which is what made it read as fine print. Keeping the footnote step where
     it is and giving prose its own step is the narrow exception; do not reach for this token for anything
     that isn't sentence copy. */
  --mf-fs-desc:.875rem;  /* the row descriptor (supporting prose) */
  --mf-fs-mid:.8rem;     /* ledger line labels + percents */
  --mf-fs-num-sm:.95rem; /* ledger amounts */
  --mf-fs-num:1.22rem;   /* the row's callout figures */
  --mf-pad:16px; --mf-pad-y:12px; --mf-gap:8px; --mf-gap-lg:24px;
}
.sell-fast-page .mf-wrap{background:var(--clvr-bg);border:1px solid var(--clvr-border-card);border-radius:12px;
  box-shadow:var(--clvr-card-shadow);overflow:hidden;transition:box-shadow .18s ease,border-color .18s ease}
.sell-fast-page .mf-wrap:hover{box-shadow:0 6px 18px rgba(0,46,93,0.10)}
/* ONE outline, on the #1 row only. ⛔ TRIED AND REVERTED 2026-08-04 — do not rebuild it: outlining all
   three badge-holders in their own chip hue (green Most money · blue Best value · purple Fastest). It
   worked and matched the chips exactly; Jamie looked at it live and cut it — *"i think just #1 is better.
   less busy."* Three coloured rings out of five rows made the list read as decoration rather than a
   ranking. The chips already carry the per-category signal; the outline's job is only to mark the top row. */
.sell-fast-page .mf-wrap--top{border-color:var(--clvr-blue);box-shadow:inset 0 0 0 .5px var(--clvr-blue),var(--clvr-card-shadow)}
.sell-fast-page .mf-wrap--gated{opacity:.62}
.sell-fast-page .mf-card{display:grid;
  /* identity · timeline · net · SPACER · actions — the spacer is the whole point: with `1fr` on identity
     the leftover space stacked up inside the identity column (dead air after a short blurb) and the money
     columns ended up jammed against the actions rail. Slack now lands in front of the rail instead.
     Every card shares this template, so the columns still line up down the list — which a max-content
     identity would have broken, since each card's blurb is a different length. */
  /* Identity is CAPPED, not 1fr: at 1fr it swallowed the slack and shoved the callouts against the rail;
     but shrinking it too far made "Traditional agent sale" + the "Most money" badge wrap to a second
     line, so cards 1 and 5 grew taller than the rest. 292px is what the longest name+badge pair needs on
     one line. The SPACER takes 1fr instead, so all remaining space becomes air before the rail and the
     callouts sit at the same x on every card. */
  /* 333px is MEASURED, not chosen: the widest name+badge pair ("Traditional agent sale" + "Most money")
     needs 322px plus the cell's padding to stay on one line. Below that, cards 1 and 5 wrapped their
     badge and grew ~29px taller than the rest — uneven card heights are worse than a tight gap.
     The remaining slack goes to the SPACER (1fr) so it lands as air before the actions rail rather than
     piling up inside the identity column, which is what made the callouts feel jammed. */
  /* Blurb column is capped (a width we choose, not one the longest badge dictates — templated copy gets
     authored to it). The three callouts then split ALL the remaining width as equal fractions, which is
     what lets their figures be bigger. There is no trailing spacer: the disclosure overlaps the callout
     region on the last row instead of claiming a column, which is where that width came from. */
  grid-template-columns:minmax(200px,300px) repeat(3,1fr);
  column-gap:22px;align-items:start;padding:var(--mf-pad-y) var(--mf-pad)}
.sell-fast-page .mf-head{grid-row:1;grid-column:1 / -1;display:flex;align-items:flex-start;gap:var(--clvr-sp-3);min-width:0;padding:0 0 .3rem}
.sell-fast-page .mf-name{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;
  font-family:var(--clvr-font-heading);font-weight:600;font-size:var(--cb-fs-body);line-height:1.3;
  color:var(--clvr-text);min-width:0}
.sell-fast-page .mf-name-link,.sell-fast-page .mf-name-link:link,.sell-fast-page .mf-name-link:visited{color:inherit;text-decoration:none}
.sell-fast-page .mf-name-link:hover{color:var(--clvr-blue-dark)}
/* QA-053 splits hover from focus deliberately: focus-visible keeps its underline. Removing it would weaken a
   focus indicator, which check_non_range_focus.py pins and the ticket forbids. */
.sell-fast-page .mf-name-link:focus-visible{text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px}
.sell-fast-page .mf-name-link:focus-visible{outline:2px solid var(--clvr-orange)!important;outline-offset:2px;border-radius:var(--clvr-radius-sm)}
.sell-fast-page .mf-breakdown,.sell-fast-page .mf-breakdown:link,.sell-fast-page .mf-breakdown:visited{display:flex;align-items:center;justify-content:flex-end;gap:var(--clvr-sp-1);width:100%;
  padding:0 var(--mf-pad) var(--clvr-sp-2);color:var(--clvr-link,var(--clvr-blue));
  font-size:var(--cb-fs-caption);font-weight:700;line-height:1.35;text-decoration:none;white-space:nowrap}
.sell-fast-page .mf-breakdown:hover{color:var(--clvr-blue-dark)}
.sell-fast-page .mf-breakdown:focus-visible{color:var(--clvr-link,var(--clvr-blue));text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px}
.sell-fast-page .mf-breakdown:focus-visible{outline:2px solid var(--clvr-orange)!important;outline-offset:2px;border-radius:var(--clvr-radius-sm)}
.sell-fast-page .mf-breakdown svg{width:16px;height:16px;min-width:0;min-height:0;flex:none}
/* Rank tile, retuned 2026-07-30. Jamie read the digit as off-centre; **it was not** — measured ink centre
   was 0.03px off the box centre vertically and 0.3px horizontally. What was actually wrong was PROPORTION:
   an 8.1px cap in a 20px box is 40% fill, so the digit floated. Now 19px with a .78rem digit ≈ 46% fill.
   `tabular-nums` equalises the advances — non-tabular "1" is 5.7px against "2"/"3" at 7.5px, which is what
   made tile 1 look different from its neighbours down the list — and `box-sizing:border-box` keeps the 1px
   border inside the 19px.
   ⚠️ **Do NOT add `line-height:1` here.** Tried it in this pass as "harmless tidying" and it knocked the
   digit **1.9px above** the box centre: flex centring centres the LINE BOX, and at `line-height:1` that box
   is shorter than the font's ascent+descent, so the baseline stops sitting where the centring assumes.
   Inherited line-height measures 0.03px off. It would have shipped the exact defect this pass was fixing. */
.sell-fast-page .mf-rank{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;
  width:19px;height:19px;flex:none;font-variant-numeric:tabular-nums;
  border:1px solid var(--clvr-blue);border-radius:5px;font-size:.78rem;font-weight:700;
  color:var(--clvr-blue);font-family:var(--clvr-font-heading)}
.sell-fast-page .mf-wrap--gated .mf-rank{border-color:var(--clvr-border);color:var(--clvr-text-muted)}
/* DESCRIPTOR, rebuilt 2026-07-30. Jamie: "too small, too much dead space / padding around it."
   ⚠️ The dead space was NOT padding, and this is the useful part: the box measured 36px inside a 77px column
   with `align-self:center`, so ~41px of air split above and below — while the copy ran at 80–90 chars against
   a 3-line budget of ~156. **The field was half empty, not badly padded.** Only content and alignment fix
   that; a size bump alone moves ~6px of the 41.
   ⚠️ **CORRECTED SAME DAY — the first fix overshot.** It went to .85rem / FOUR lines / a bolded
   "How it works:" lead-in, and Jamie: *"whoa, these are way too long at 4 rows of text… i want 3 rows max,
   Learn more should always fit on third row."* So the air was real but filling it with prose was the wrong
   trade — a comparison list is scanned, not read, and four rows of copy per card × five cards buries the
   numbers that are the point. Now **.8rem, THREE lines, no lead-in**.
   ⚠️ **`align-self:center`, NOT `start` — settled 2026-07-30 after trying both.** v2.41 top-aligned line 1 to
   the `EST. TIMELINE` label row, which is the tidier *alignment* but leaves the whole leftover ~19px of the
   77px column as one visible gap under the text. Jamie: *"rather than being aligned with the callout eyebrows
   I think the text field should be centered between card header and bottom of card… too much dead space
   between the bottom of the text and the bottom of the card, but I wouldn't want the text to be any longer."*
   Centring splits that gap (~9px above / ~9px below), which reads as a margin instead of a hole. **The gap is
   structural — the row is 3 lines of prose beside a 77px number stack — so the only other levers are longer
   copy (rejected) or a shorter stack. Don't "fix" it by top-aligning again.**
   🔴 **HARD RULE: `Learn more` MUST LAND ON LINE 3.** Budget ≈ **135 chars total at .8rem** (3 × ~46)
   including the ~11-char link, so **sentence copy ≈ 95–110 chars.** Two traps behind that number:
   the clamp truncates SILENTLY and eats the LINK first (a long draft dropped both the tail and "Learn more"
   with no visible ellipsis); and **character count is not the constraint, WRAPPING is** — 159 chars fitted on
   one path and clipped on another, because long unbreakable tokens ("open-market", "the company resells")
   waste line width. **Always re-measure every path after a copy edit; don't trust the count.** */
.sell-fast-page .mf-blurb{grid-row:2 / span 3;grid-column:1;font-size:var(--mf-fs-desc);line-height:1.5;color:var(--clvr-text-secondary);
  padding:0 1.4rem 0 0;min-width:0;align-self:center;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
/* QA-002: navigation is no longer buried inside the clamped descriptor. The path name and the explicit
   right-side `See breakdown` control are separate semantic anchors with the same exact destination. */
/* `.mf-lead` ("How it works:") DELETED same day it was added — Jamie cut the lead-in with the 4-row copy.
   Kept as a note only so nobody re-derives it: it read fine as a field label, but it cost ~14 chars of a
   ~135-char budget, and the budget is the scarce thing here. */
/* Callout labels carry NO leading glyph (Jamie 2026-07-29). They were decorative; they cost ~13px each in
   a row where "% MKT VALUE" is already the widest element; and `.mf-ico` was the unsized-inline-SVG
   landmine that inflated these label rows twice in one day. The [i] affordance (`.mf-i`) stays — unlike the
   glyphs it does a job. If a glyph ever comes back it needs explicit width/height, not a shared class. */
/* Label→value gap TIGHTENED 2026-07-30 (Jamie: "too thick"). It measured 17px ink-to-ink; the two paddings
   here and on `.mf-cell` are the only levers (the rest is the two line boxes' half-leading, which is
   intrinsic). .35rem + .28rem → .1rem + .06rem takes it to ~9px, so the label reads as attached to its
   number instead of floating between two rows. */
.sell-fast-page .mf-lbl{grid-row:2;font-size:var(--mf-fs-lbl);text-transform:uppercase;letter-spacing:.04em;font-weight:600;
  color:var(--clvr-text-secondary);white-space:nowrap;padding:0 0 .1rem;display:flex;align-items:center;gap:.25rem}
/* .mf-cell wraps the value cells that render their own markup; it must move rows in lockstep with
   .mf-val or the three callouts fall onto different rows (which is exactly what happened on mobile) */
/* the ONLY place vertical spacing for the value row lives — every value cell is one of these, so no cell
   can drift relative to another (which is exactly what happened when one was a direct grid child) */
.sell-fast-page .mf-cell{grid-row:3;padding:.06rem 0 0}
.sell-fast-page .mf-val{font-family:var(--clvr-font-heading);font-weight:700;font-size:var(--mf-fs-num);
  letter-spacing:-0.02em;color:var(--clvr-text);font-variant-numeric:tabular-nums;white-space:nowrap}
/* `.mf-fmv` (the FMV share riding inline with the net) DELETED 2026-07-30 — dead since the share became its
   own `% mkt value` callout column. No markup had used it for two versions. */
.sell-fast-page .mf-val--neg{color:var(--clvr-danger)}
.sell-fast-page .mf-val--dim{font-family:var(--clvr-font);font-size:var(--cb-fs-caption);font-weight:600;
  color:var(--clvr-text-secondary);white-space:normal;line-height:1.4}
/* 11px → 9.5px, plus a 1px OPTICAL lift (2026-07-30, both from Jamie's eye — and the second one after I twice
   reported it "already centred" on the numbers).
   The measurement was right and still not the answer: the icon's geometric centre sits 0.57px from the label's
   ink centre. But this glyph is a CIRCLE (`cy=12 r=10`, i.e. its ink fills the box) sitting beside flat-topped,
   flat-bottomed uppercase letterforms. A round shape at the same geometric centre as flat caps reads LOW,
   because the circle's overshoot crosses both the cap line and the baseline. Compared five treatments at 3×
   before choosing (`_archive` note in CHANGELOG 2026-07-30): centred at 9.5px and 8.5px both still read low;
   bottom-on-baseline read high; **9.5px lifted 1px** was the one that looked right.
   `position:relative` deliberately — an optical nudge must not change layout, and negative margin would alter
   the flex line's cross size. **Do not "fix" this back to 0 because the rect maths looks off by 1px.**

   🔴 `min-width:0;min-height:0` IS LOAD-BEARING — see the SVG-floor gotcha in STATE. A theme rule floors every
   SVG at `min-width/min-height:1em`, and a min floor BEATS `width`. Without these two declarations this icon
   renders at 1em of the label (10.56px), not 9.5px — which is why the first attempt at this nit changed
   nothing on the live page and Jamie flagged it a second time. */
/* ⚠️ The `[i]` glyphs elsewhere on this page (the three row callout labels) are still DECORATIVE — they carry
   no tooltip text. Fee explanations use native buttons with one hidden description each. A single visual-only
   fixed bubble is portalled to `body` so the open text cannot be clipped by the money drawer's overflow boundary;
   the per-button description remains the sole announcement source. Copy still comes only from the path's current
   `feeNote`/`buyNote`/`sellNote` fields. */
.sell-fast-page .mf-tip-wrap{display:inline-flex;align-items:center}
.sell-fast-page .mf-tip{appearance:none;-webkit-appearance:none;display:inline-flex;align-items:center;justify-content:center;
  width:20px;height:20px;margin:-5px 0;padding:0;border:0;border-radius:var(--clvr-radius-sm);background:transparent;
  color:var(--clvr-text-muted);font:inherit;line-height:1;cursor:help}
.sell-fast-page .mf-tip:hover,.sell-fast-page .mf-tip.is-open{color:var(--clvr-blue)}
.sell-fast-page .mf-tip:focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:1px}
.sell-fast-page .mf-tip__sr{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;
  overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
body > .mf-tip__bubble{position:fixed;z-index:100000;box-sizing:border-box;width:min(280px,calc(100vw - 24px));
  padding:var(--clvr-sp-3);border-radius:var(--clvr-radius-sm);background:var(--clvr-text);color:var(--clvr-text-inverse);
  box-shadow:var(--clvr-shadow-lg);font-family:var(--clvr-font);font-size:.75rem;font-weight:500;line-height:1.45;
  white-space:normal;text-align:left;pointer-events:none;opacity:0;visibility:hidden;
  transition:opacity .16s ease,visibility .16s}
body > .mf-tip__bubble.is-open{opacity:1;visibility:visible}
@media(prefers-reduced-motion:reduce){body > .mf-tip__bubble{transition:none}}
.sell-fast-page .mf-i{width:9.5px;height:9.5px;min-width:0;min-height:0;flex:none;color:var(--clvr-text-muted);cursor:help;
  position:relative;top:-.5px}
/* Three columns, each sized to content, with a generous EVEN gap — the old layout had a 1fr label column
   that pushed the numbers to the far right and left a canyon in the middle (Jamie: "there's a massive gap
   between the line items and the actual numbers"). fit-content on the grid stops it stretching. */
/* THREE columns: label · amount · percent. It briefly had a FOURTH for annotations, which is worth recording
   because the sequence is instructive: "below market value" went in beside the amount (v2.53) and broke digit
   alignment — `.mf-amt` is `text-align:right`, so the suffix took the right edge and pushed one figure 111.7px
   off the others; a 4th column fixed that (v2.55); then Jamie cut the subtext as self-explanatory and moved the
   fees `[i]` onto the label (v2.56), leaving the column with nothing in it. **He was right that the ledger
   explains itself** — the balance-sheet shape (FMV, minus, minus, equals, with the offer named in its own row
   label) already says the −$99,500 is the gap below market value.
   ⚠️ If an annotation ever returns, bring the 4th column back with it — do NOT put it in the amount cell. */
.sell-fast-page .mf-rows{display:grid;grid-template-columns:max-content max-content max-content;align-items:baseline;
  gap:.55rem 2.75rem;list-style:none;margin:0;width:fit-content}
.sell-fast-page .mf-row{display:grid;grid-column:1 / -1;grid-template-columns:subgrid;align-items:baseline}
/* the two subtracted lines are indented so the arithmetic reads as a balance sheet */
.sell-fast-page .mf-row--sub .mf-k{padding-left:1.15rem}
.sell-fast-page .mf-chip--fmv{background:#0EA47A}
.sell-fast-page .mf-of{font-family:var(--clvr-font);font-size:var(--mf-fs-micro);font-weight:500;color:var(--clvr-text-muted);
  white-space:nowrap;margin-left:.3rem}
.sell-fast-page .mf-k{display:inline-flex;align-items:center;gap:.45rem;font-size:var(--mf-fs-mid);font-weight:600;color:var(--clvr-text)}
.sell-fast-page .mf-row--sum .mf-k{font-weight:700}
.sell-fast-page .mf-chip{width:9px;height:9px;border-radius:2px;flex:none}

.sell-fast-page .mf-chip--net{background:var(--clvr-blue)}
/* A lighter blue distinguishes upfront cash from the later settle-up amount in the two-transaction ledger. */
.sell-fast-page .mf-chip--net-now{background:#8CC1F5}
.sell-fast-page .mf-chip--fees{background:#E9A33A}
.sell-fast-page .mf-chip--disc{background:#B9C7D8}
.sell-fast-page .mf-amt{font-family:var(--clvr-font-heading);font-weight:700;font-size:var(--mf-fs-num-sm);color:var(--clvr-text);
  font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}
/* ══ COLOUR HAS EXACTLY TWO JOBS IN THIS PANEL — keep them on separate hues (Jamie 2026-07-30) ══
   Jamie: "it seems like you've got deductions in orange in the math, but the chip next to fees and costs is
   that same orange? … i feel like we need two axes here."  He was right, and it was a genuine collision:
   deduction amounts were `#B26A00` (hue 36°) while the fees chip/segment is `#E9A33A` (hue 38°) — one hue
   family carrying two unrelated meanings, so orange read as "fees" in one column and "deduction" in the next.

   AXIS 1 — THE AMOUNT COLUMN says what the number DOES to your proceeds:
     deduction      -> var(--clvr-danger)      (a subtraction: below-market offer, fees, mortgage payoff, owe)
     nil            -> var(--clvr-text-muted)  ($0 — nothing happened on this line)
     total / value  -> var(--clvr-text)        (FMV and the net; the sum is bold, not coloured)
   AXIS 2 — THE CHIPS distinguish the ledger categories: `--fmv` #0EA47A · `--disc` #B9C7D8 ·
     `--fees` #E9A33A · `--net` blue.

   🔴 So: never give an amount a hue that appears in the chips. Red is free in axis 2 (no chip is red),
   which is why the deduction moved rather than the chip — amber-for-fees remains meaningful. Red also
   unifies "money leaving you" with the existing underwater treatment (`.mf-val--neg`, `.mf-box-v--neg`).
   If it reads hot on a routine commission line, a muted `#B3403A` is a one-token change. 5.27:1 on the panel. */
.sell-fast-page .mf-amt--neg{color:var(--clvr-danger)}
/* A nil line is de-emphasised, NOT celebrated. This was green (#2f7a33) and Jamie: "the $0 shouldn't be
   green it clashes with the Fair market value box" — the FMV chip is #0EA47A, so a green $0 two rows below it
   read as a related signal when it only means "this line is zero". Applies to `Fees & costs $0` on as-is cash
   and `Below market offer $0` on the agent paths. */
/* $0 lines match the RIGHT-HAND percent column, not the muted grey (Jamie 2026-08-03, v2.73). Was
   --clvr-text-muted, which sat a step lighter than the "100%" / "0%" beside it on the same row and read
   as though the line were disabled. Only reachable on the two paths with a genuine zero: traditional
   agent sale ($0 below-market discount) and traditional cash offer ($0 fees & costs) — and on both it is
   a SELLING POINT, which is the argument for not dimming it. Kept a shade below the black amounts so it
   still reads as "nil" rather than a figure. */
.sell-fast-page .mf-amt--zero{color:var(--clvr-text-secondary)}
.sell-fast-page .mf-pct{font-family:var(--clvr-font-heading);font-weight:600;font-size:var(--mf-fs-mid);color:var(--clvr-text-secondary);
  font-variant-numeric:tabular-nums;white-space:nowrap;text-align:left}
.sell-fast-page .mf-row--sum{border-top:1px solid var(--clvr-border);padding-top:.4rem;margin-top:.15rem}
.sell-fast-page .mf-row--sum .mf-amt{font-size:1.1rem}
.sell-fast-page .mf-row--sum .mf-pct{color:var(--clvr-text);font-weight:700;font-size:.9rem}
/* MID-LEDGER SUBTOTAL — Sell-before-you-list only, the one card with two cash events (2026-07-31).
   It is a `--sum` row so it gets the rule above it and the bold key, then steps BACK DOWN in size so the
   final `Total net after resale` still reads as the answer. Without this the drawer has two equally loud
   totals and the eye can't tell which one is the number the row is quoting. */
.sell-fast-page .mf-row--mid .mf-amt{font-size:.98rem}
.sell-fast-page .mf-row--mid .mf-pct{font-size:.82rem}
/* Deduction percents follow AXIS 1 with the amount beside them (Jamie 2026-07-30: "i also think we could have
   the %s be red"). Same `--clvr-danger`, not a softer tint, so axis 1 stays literally one colour — the rule
   written above `.mf-amt--neg` only holds if the deduction hue doesn't fork.
   ⚠️ If a softer red is wanted, there is little room: at .8rem/600 this is NORMAL text for WCAG, so it needs
   4.5:1 on the `#f5f8fc` panel. `#B94A47` measures 4.82:1 and is about as soft as it can get; `#CF6B6B` looks
   right but is 3.28:1 and fails. */
.sell-fast-page .mf-pct--neg{color:var(--clvr-danger)}
/* ⛔ `.mf-fastnote` DELETED v2.74 — it styled "Typically 17 days — as fast as 7 days if you need it.",
   which Jamie rejected 2026-08-03. Replaced by the `.mf-tl` block at the TOP of the drawer. */
/* ── TIMELINE BLOCK, first thing in the drawer (v2.74) ──────────────────────────────────────────────
   Label-over-value, same shape as `.mf-box` so the two rows read as one system — but with a BORDER and a
   transparent fill instead of `--clvr-bg-subtle`, so it reads as a header strip rather than a fifth and
   sixth callout competing with the four measured ones below it. Values are boxed per Jamie's sketch
   ("Min. closing timeline [7 days] · Typical range [14-30 days]").
   `auto-fit` + `minmax` matches `.mf-boxes`, so at narrow widths both grids collapse the same way. */
.sell-fast-page .mf-tl{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin:0 0 14px}
.sell-fast-page .mf-tl-item{display:flex;flex-direction:column;gap:4px;padding:10px 14px;border-radius:8px;
  border:1px solid var(--clvr-border-card);background:transparent}
.sell-fast-page .mf-tl-k{font-size:var(--mf-fs-lbl);text-transform:uppercase;letter-spacing:.05em;font-weight:600;
  color:var(--clvr-text-secondary)}
.sell-fast-page .mf-tl-v{font-family:var(--clvr-font-heading);font-weight:700;font-size:1.35rem;line-height:1.15;
  color:var(--clvr-text);font-variant-numeric:tabular-nums;
  /* en dash in "21–60 days" must not break across lines */white-space:nowrap}
.sell-fast-page .mf-tl-note{font-size:.72rem;line-height:1.35;color:var(--clvr-text-secondary);font-weight:400}

/* Speed cost is boxed outside the arithmetic stack because it compares this path with another path. */
/* Borderless light-fill callouts, borrowed from the SBR score block. */
/* FOUR boxes now, not three (Jamie's sketch 2026-07-29: offer amount added, so the row reads as a sentence —
   what you get, what it cost, what it bought, the rate). The min track came DOWN 150 -> 126px to fit four
   across the real 776px card; every value is <=9 characters ("−$75,839", "+58 days"), so 126 holds. ⚠️ If a
   fifth box is ever added, or a value grows, they wrap to 2x2 silently — measure at 1280x900, not the pane. */
.sell-fast-page .mf-boxes{display:grid;grid-template-columns:repeat(auto-fit,minmax(126px,1fr));gap:12px;margin:0 0 16px}
.sell-fast-page .mf-box{display:flex;flex-direction:column;gap:3px;padding:12px 14px;border-radius:8px;
  background:var(--clvr-bg-subtle);border:0}
.sell-fast-page .mf-box-k{font-size:var(--mf-fs-lbl);text-transform:uppercase;letter-spacing:.05em;font-weight:600;
  color:var(--clvr-text-secondary);display:flex;align-items:center;gap:5px}
/* `.mf-bico` deleted with the box icons (2026-07-30). If they return: 12px was the measured size — the
   label cap band is 8.2px, 13px let the icon dominate it, 11px muddied `calculator-money` — and the rule
   MUST carry `min-width:0;min-height:0` or the theme's 1em svg floor silently clamps it. */
/* The UNIT SUFFIX on boxes 3 and 4 ("days faster" / "per day") reuses `.mf-of` — the same class the ledger
   already uses for "of fair market value" — rather than adding a style. Jamie's wording (2026-07-30) does not
   fit at the value size: measured against 148.5px of usable box width, "54 days faster" is 149.8px and
   "$1,065 per day" is 153px at 1.35rem, so both would have wrapped. Shrinking all four values to 1.1rem also
   fits but costs the two money figures their prominence; splitting number-at-full-size from unit-at-micro
   keeps every figure the same size and reads as one row.
   ⚠️ Note the REAL SPACE before each `.mf-of` span. The class carries `margin-left:.3rem`, so the gap LOOKS
   right without one — but the text node then reads "58days faster", which is what copies to the clipboard and
   what a screen reader announces. The ledger's "75% of fair market value" has the same space for the same
   reason. Visual spacing is not textual spacing. */
/* `.mf-box-s` (a third line per box) lived for ONE version and is deleted. It existed to solve "vs. agent
   sale has two stats in one box" by stacking them — but Jamie then spotted the real problem with that
   layout: boxes 1 and 2 were repeating `Est. offer` and `Est. net` from the row directly above. Making the
   four boxes DISTINCT from the row dissolved the two-stat problem instead, since money and time got their
   own boxes back. Kept as a note because the measurement is still useful: inline, "−$75,839, +58 days" is
   203.8px against 148.5px usable and only fits at .94rem. */
.sell-fast-page .mf-box-v{font-family:var(--clvr-font-heading);font-weight:700;font-size:1.35rem;letter-spacing:-0.02em;
  color:var(--clvr-text);font-variant-numeric:tabular-nums;line-height:1.15}
/* ⚠️ AFTER `.mf-box-v`, not before. These first shipped ABOVE it and did nothing: same specificity, so the
   base rule's own `color` won on source order, and the underwater net box rendered near-black while the row
   beside it was correctly red. A modifier that loses to its own base class is invisible in code review. */

/* ⛔ `.mf-box-v--zero` DELETED v2.73. The baseline card compares against ITSELF, so `Net vs. agent` is
   structurally not-applicable and now prints "—" (Jamie 2026-08-03: "should also be '—', not '$0'").
   The modifier is gone rather than restyled: `Time vs. agent` and `Speed cost` on the SAME card already
   printed a plain em dash in the DEFAULT colour, so muting only this one left three identical dashes in
   two different colours — measured at rgb(134,165,198) vs rgb(34,41,59). "Also" meant match those. */
/* QA-055: mobile keeps the card identity and blurb full-width, then turns the three callouts into
   distinct label/value rows. The value size follows the established Clever comparison-series behavior:
   labels retain their desktop size while values step down from ~19.5px to 17px. Two quiet inset rules
   make the three facts read as one scan group without turning the card into a boxed table. */
@media(max-width:640px){
  .sell-fast-page .mf-card{grid-template-columns:minmax(0,1fr) auto;column-gap:var(--clvr-sp-4);row-gap:0;padding:.85rem}
  .sell-fast-page .mf-head{grid-row:1;grid-column:1 / -1;padding:0;flex-wrap:wrap;overflow:visible}
  .sell-fast-page .mf-breakdown{padding:.2rem .85rem .65rem}
  /* row 2 only — the desktop rule spans rows 2-3 to balance the callouts, which here would collide with
     the label row. And no clamp: at full width two lines is free, so the copy shouldn't be cut. */
  .sell-fast-page .mf-blurb{grid-row:2;grid-column:1 / -1;padding:.1rem 0 .55rem;display:block;overflow:visible;-webkit-line-clamp:none}
  .sell-fast-page .mf-lbl{grid-column:1!important;padding:.4rem 0;align-self:center}
  .sell-fast-page .mf-cell{grid-column:2!important;padding:.4rem 0;align-self:center;text-align:right}
  .sell-fast-page .mf-lbl--timeline,.sell-fast-page .mf-cell--timeline{grid-row:3}
  .sell-fast-page .mf-lbl--offer,.sell-fast-page .mf-cell--offer{grid-row:4}
  .sell-fast-page .mf-lbl--net,.sell-fast-page .mf-cell--net{grid-row:5}
  .sell-fast-page .mf-card::before,.sell-fast-page .mf-card::after{content:"";display:block;grid-column:1 / -1;height:1px;background:#E5EBF2;align-self:start;pointer-events:none}
  .sell-fast-page .mf-card::before{grid-row:4}
  .sell-fast-page .mf-card::after{grid-row:5}
  .sell-fast-page .mf-val{font-size:1.0625rem}
}

.sell-fast-page .cb-hero__tag{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .6rem;border-radius:9999px;background:#e9f6ea;color:#2f7a33;font-size:var(--cb-fs-caption);font-weight:600;white-space:nowrap;line-height:1.2}
/* THREE BADGES, THREE COLOURS (Jamie 2026-07-30): money = green · value = blue · speed = PURPLE.
   Each is a pale tint + dark text, so they read as one set and each passes AA on its own fill
   (green 5.9:1 · blue 5.8:1 · purple 6.4:1).
   ⚠️ Yellow was tried first (the lightning read) and REJECTED — Jamie: "yellow indicates 'fair/bad' in
   UX terms." It is worse than generic caution here: `#E9A33A` amber IS the fees segment of the breakdown
   bar two lines below, so a yellow pill would import "this is about cost" into the one badge that means
   speed. Purple is the only free hue in this component. */
.sell-fast-page .cb-hero__tag--speed{background:#F1ECFB;color:#6B3FA0}
.sell-fast-page .cb-hero__tag--value{background:#E6F1FD;color:var(--clvr-blue-dark)}
.sell-fast-page .cb-hero__tag-ico{width:12px;height:12px;flex:none}

/* ─── offers CTA: CLO intro-CTA (ported from clo-directory-block) in the bridge position — v2.10, variant E ─── */
.sell-fast-page .cta-bridge{--bridge-drop:92px;margin-top:var(--clvr-sp-6);margin-bottom:calc(-1 * var(--bridge-drop));position:relative;z-index:5}
.sell-fast-page .cb-intro-cta{background:#fff;border-radius:12px;border:1px solid var(--clvr-border-card);box-shadow:var(--clvr-shadow-lg);overflow:hidden;display:flex;flex-direction:column}
@media(min-width:821px){.sell-fast-page .cb-intro-cta{flex-direction:row}}
.sell-fast-page .cb-intro-cta__body{flex:1;padding:1.75rem;display:flex;flex-direction:column;justify-content:center}
@media(min-width:821px){.sell-fast-page .cb-intro-cta__body{padding:2rem}}
.sell-fast-page .cb-intro-cta__headline{font-family:var(--clvr-font-heading);font-size:20px;font-weight:700;color:var(--clvr-text);line-height:1.375;margin:0 0 .75rem}
@media(min-width:821px){.sell-fast-page .cb-intro-cta__headline{font-size:22px}}
.sell-fast-page .cb-intro-cta__headline--blue{color:var(--clvr-blue)}
.sell-fast-page .cb-intro-cta__headline .co-brand{color:var(--clvr-blue);white-space:nowrap}
.sell-fast-page .co-icon{display:inline-block;height:1.05em;width:auto;vertical-align:-.12em}
.sell-fast-page .cb-intro-cta__subhead{font-family:var(--clvr-font-heading);font-size:15px;font-weight:600;color:#374151;letter-spacing:-.015em;line-height:1.45;margin:0;white-space:nowrap}
@media(max-width:820px){.sell-fast-page .cb-intro-cta__subhead{white-space:normal}}
.sell-fast-page .cb-intro-cta__subhead .highlight{color:inherit;font-weight:700}
.sell-fast-page .cb-intro-cta__subtext{font-size:14px;color:#4b5563;line-height:1.625;margin:0}
.sell-fast-page .cb-intro-cta__subtext strong{color:var(--clvr-text)}
/* one-row roster (variant E): count line + investor-monogram facepile at the end of the row */
.sell-fast-page .cta-roster{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem 10px;margin:0 0 .75rem}
.sell-fast-page .cta-facepile{display:flex;align-items:center}
.sell-fast-page .fp{width:28px;height:28px;border-radius:50%;border:2px solid #fff;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;letter-spacing:.02em;color:#fff;box-shadow:0 1px 2px rgba(22,42,76,.18);position:relative;flex-shrink:0}
.sell-fast-page .fp+.fp,.sell-fast-page .fp+.fp-more{margin-left:-8px}
.sell-fast-page .fp--1{background:#2B6CB0;z-index:6}.sell-fast-page .fp--2{background:#3E5C76;z-index:5}.sell-fast-page .fp--3{background:#557A95;z-index:4}
.sell-fast-page .fp--4{background:#4A6FA5;z-index:3}.sell-fast-page .fp--5{background:#6B8CAE;z-index:2}
.sell-fast-page .fp-check{position:absolute;right:-3px;bottom:-3px;width:13px;height:13px;border-radius:50%;background:#43a046;border:2px solid #fff;display:flex;align-items:center;justify-content:center}
.sell-fast-page .fp-check svg{width:7px;height:7px;stroke:#fff;stroke-width:3;fill:none}
.sell-fast-page .fp-more{height:28px;padding:0 9px;border-radius:14px;background:#EAF2FB;color:#005bb5;font-size:11px;font-weight:700;display:flex;align-items:center;border:2px solid #fff;flex-shrink:0}
.sell-fast-page .cb-intro-cta__form{background:#f8f9fb;border-top:1px solid #E5E7EB;padding:1.5rem;display:flex;flex-direction:column;justify-content:center}
@media(min-width:821px){.sell-fast-page .cb-intro-cta__form{width:300px;flex-shrink:0;border-top:none;border-left:1px solid #E5E7EB;padding:1.75rem}}
.sell-fast-page .cb-intro-cta__addr{position:relative;display:flex;align-items:center;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;margin-bottom:.75rem;transition:border-color .2s ease;cursor:text}
.sell-fast-page .cb-intro-cta__addr:focus-within{border-color:var(--clvr-blue);box-shadow:0 0 0 2px rgba(0,117,235,.15)}
.sell-fast-page .cb-intro-cta__addr.addr-valid{border-color:#43a046}
.sell-fast-page .cb-intro-cta__addr.addr-valid:focus-within{box-shadow:0 0 0 2px rgba(67,160,70,.15)}
.sell-fast-page .cb-intro-cta__input,.sell-fast-page .cb-intro-cta__input:focus{flex:1;border:none;box-shadow:none;outline:none!important;padding:.7rem 0 .7rem 1rem;font-size:.875rem;line-height:1.4;font-family:inherit;background:transparent;min-width:0;-webkit-appearance:none}
.sell-fast-page .cb-intro-cta__pin{flex-shrink:0;width:20px;height:20px;margin-right:.75rem;color:#A7C0DB;transition:color .2s ease}
.sell-fast-page .cb-intro-cta__addr.addr-valid .cb-intro-cta__pin{color:#43a046}
/* QA-072 — DELIBERATE, decided by Jamie 2026-08-09. White on --conversion-orange is Clever Offers brand: it is
   what cleveroffers.com and the PPC landers use, and funnel continuity was judged to outweigh the contrast
   ratio. Measured 2.89:1, which is below WCAG AA (4.5:1 for a 14px/700 label). Alternatives were priced and
   rejected: a dark label on this orange reaches 5.02:1 but was rejected on looks; #005BB5 blue reaches 6.64:1
   but leaves the brand colour. Do NOT "fix" this to a compliant pairing without Jamie — it has been raised and
   settled. Full analysis: tickets/qa/items/QA-072_hero-cta-contrast.md */
.sell-fast-page .cb-intro-cta__button{display:block;width:100%;background:var(--conversion-orange);color:#fff;font-weight:700;font-size:14px;line-height:1.4;white-space:nowrap;padding:var(--clvr-sp-3) var(--clvr-sp-4);border:none;border-radius:var(--clvr-btn-radius);  /* QA-071: radius to --clvr-btn-radius (4px on LWC; 8px was off-token), padding onto the spacing
     scale, and letter-spacing dropped — the .025em tracking existed to space out ALL CAPS, which
     QA-069 removed, so it was an orphaned decision. Expert Take was already the compliant one. */cursor:pointer;transition:background .2s ease,transform .2s ease,box-shadow .2s ease;text-align:center;text-decoration:none;font-family:inherit}
.sell-fast-page .cb-intro-cta__button:hover{background:var(--conversion-orange-dark);transform:translateY(-1px);box-shadow:0 2px 8px rgba(255,105,0,.25)}
.sell-fast-page .cb-intro-cta__disclaimer{font-size:11px;color:var(--clvr-text-muted);margin:.75rem 0 0;text-align:center;line-height:1.5}

.sell-fast-page .next-note{margin:var(--clvr-sp-12) 0;border:2px dashed var(--clvr-border-light);border-radius:12px;padding:var(--clvr-sp-6);text-align:center;color:var(--clvr-text-muted);font-size:var(--cb-fs-caption);font-weight:700;letter-spacing:.05em;text-transform:uppercase}

/* ══════════════════════════════════════════════════════════════════════════════════════════════════
   ZONE B DRAFT — per-path breakdown sections (`.pb`). Added 2026-08-03.
   ⚠️ THE MARKUP IS MOCK-ONLY (it sits after `<section id="ways">`, which is the last region
   port_block1.py cuts) BUT THIS CSS SHIPS: the port takes <style> wholesale. Unused selectors on the
   live pages until a cut rule exists — harmless, but delete this block if Zone B is abandoned.
   Design intent: Bankrate/Wirecutter informational card. One repeatable schema per path so five
   sections read as one system — rank + verdict eyebrow, spec strip, bold lead-in rows, one callout,
   pros/cons columns, deeper-reading link.
   ══════════════════════════════════════════════════════════════════════════════════════════════════ */
/* ⛔ DO NOT ADD `max-width:var(--sf-body-w)` HERE. That was the first draft and it rendered the card at
   roughly mobile width (Jamie caught it on sight). `--sf-body-w` is `calc(100% - var(--sf-panel-w))`, and
   `.pb` already lives inside `.sell-fast-page__content`, which is the flex sibling of the 300px rail — so the
   rail width came off twice. The tiles above set no max-width at all; they fill the content column. Match that. */
.sell-fast-page .pb{border:1px solid var(--clvr-border-card);border-radius:14px;background:var(--clvr-bg);
    box-shadow:var(--clvr-card-shadow);overflow:hidden;margin:0 0 var(--clvr-sp-10)}
.sell-fast-page .pb__head{padding:var(--clvr-sp-6) var(--clvr-sp-6) var(--clvr-sp-4);border-bottom:1px solid var(--clvr-border-light)}
.sell-fast-page .pb__eyebrow{display:flex;align-items:center;gap:.5rem;font-size:var(--cb-fs-caption);font-weight:700;
    letter-spacing:.06em;text-transform:uppercase;color:var(--clvr-text-muted)}
.sell-fast-page .pb__rank{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;flex:none;
    border-radius:50%;background:var(--clvr-blue);color:#fff;font-size:11px;font-weight:700;letter-spacing:0}
.sell-fast-page .pb__verdict{color:var(--clvr-blue-dark)}
.sell-fast-page .pb__title{margin:.45rem 0 0;font-size:1.4rem;font-weight:600;letter-spacing:-.01em;color:var(--clvr-text);
    font-family:var(--clvr-font-heading)}
.sell-fast-page .pb__sub{margin:.35rem 0 0;font-size:var(--cb-fs-small);color:var(--clvr-text-secondary);line-height:1.5}
/* Spec strip — the at-a-glance row. 4-up, collapsing to 2-up in a narrow container. */
.sell-fast-page .pb__specs{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--clvr-border-light);
    border-bottom:1px solid var(--clvr-border-light)}
@media(max-width:640px){.sell-fast-page .pb__specs{grid-template-columns:repeat(2,1fr)}}
.sell-fast-page .pb__spec{background:var(--clvr-bg-tint);padding:var(--clvr-sp-3) var(--clvr-sp-4)}
.sell-fast-page .pb__spec dt{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
    color:var(--clvr-text-muted);margin:0 0 .2rem}
.sell-fast-page .pb__spec dd{margin:0;font-size:1.05rem;font-weight:600;color:var(--clvr-text);line-height:1.2}
.sell-fast-page .pb__spec small{display:block;margin-top:.15rem;font-size:var(--cb-fs-caption);color:var(--clvr-text-muted)}
/* Body rows — the bold lead-in schema. The label is the scan layer. */
.sell-fast-page .pb__body{padding:var(--clvr-sp-6)}
.sell-fast-page .pb__row{margin:0 0 var(--clvr-sp-4)}
.sell-fast-page .pb__row:last-child{margin-bottom:0}
.sell-fast-page .pb__lead{font-weight:700;color:var(--clvr-text)}
.sell-fast-page .pb__row p{margin:0;font-size:var(--cb-fs-body);line-height:1.65;color:var(--clvr-text-secondary)}
.sell-fast-page .pb__row p b,.sell-fast-page .pb__row li b{color:var(--clvr-text);font-weight:600}
.sell-fast-page .pb__row ul{margin:.5rem 0 0;padding-left:1.1rem}
.sell-fast-page .pb__row li{font-size:var(--cb-fs-body);line-height:1.6;color:var(--clvr-text-secondary);margin:0 0 .4rem}
/* One callout per section. Tint + hairline + left rule so it reads against the white card. */
.sell-fast-page .pb__callout{margin:var(--clvr-sp-4) 0 0;padding:var(--clvr-sp-4);border:1px solid var(--clvr-border-light);
    border-left:3px solid var(--clvr-blue);border-radius:var(--clvr-radius);background:var(--clvr-bg-subtle)}
.sell-fast-page .pb__callout-k{display:block;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
    color:var(--clvr-blue-dark);margin-bottom:.25rem}
.sell-fast-page .pb__callout p{margin:0;font-size:var(--cb-fs-small);line-height:1.6;color:var(--clvr-text-secondary)}
/* Pros / cons — cards, not a table (2 items). */
.sell-fast-page .pb__pc{display:grid;grid-template-columns:1fr 1fr;gap:var(--clvr-sp-4);margin:var(--clvr-sp-6) 0 0}
@media(max-width:640px){.sell-fast-page .pb__pc{grid-template-columns:1fr}}
.sell-fast-page .pb__pc-col{border:1px solid var(--clvr-border-light);border-radius:var(--clvr-radius);padding:var(--clvr-sp-4)}
.sell-fast-page .pb__pc-col h4{margin:0 0 .5rem;font-size:var(--cb-fs-caption);font-weight:700;letter-spacing:.06em;
    text-transform:uppercase;display:flex;align-items:center;gap:.4rem}
.sell-fast-page .pb__pc--pro h4{color:#0a8f6b}
.sell-fast-page .pb__pc--con h4{color:var(--clvr-danger)}
.sell-fast-page .pb__pc-col ul{margin:0;padding:0;list-style:none}
.sell-fast-page .pb__pc-col li{position:relative;padding-left:1.15rem;margin:0 0 .45rem;font-size:var(--cb-fs-small);
    line-height:1.55;color:var(--clvr-text-secondary)}
.sell-fast-page .pb__pc-col li:last-child{margin-bottom:0}
.sell-fast-page .pb__pc-col li::before{position:absolute;left:0;top:-.02em;font-weight:700}
.sell-fast-page .pb__pc--pro li::before{content:"✓";color:#0a8f6b}
.sell-fast-page .pb__pc--con li::before{content:"—";color:var(--clvr-danger)}
.sell-fast-page .pb__foot{margin:var(--clvr-sp-4) 0 0;padding-top:var(--clvr-sp-4);border-top:1px solid var(--clvr-border-light);
    font-size:var(--cb-fs-small)}
.sell-fast-page .pb__foot a{color:var(--clvr-blue-dark);font-weight:600}
.sell-fast-page .pb__src{margin:.5rem 0 0;font-size:var(--cb-fs-caption);color:var(--clvr-text-muted);line-height:1.5}
.sell-fast-page .pb__tk{background:#FFF3CD;border-bottom:1px dashed #B8860B;font-weight:600;color:#6b5200}
/* ── Decision line: the two things a scanner needs without opening anything ────────────────────── */
.sell-fast-page .pb__decide{display:grid;grid-template-columns:1fr 1fr;gap:var(--clvr-sp-4);margin:0 0 var(--clvr-sp-4)}
@media(max-width:640px){.sell-fast-page .pb__decide{grid-template-columns:1fr}}
.sell-fast-page .pb__decide div{font-size:var(--cb-fs-small);line-height:1.55;color:var(--clvr-text-secondary)}
.sell-fast-page .pb__decide b{display:block;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
    margin-bottom:.2rem}
.sell-fast-page .pb__decide .is-for b{color:#0a8f6b}
.sell-fast-page .pb__decide .is-not b{color:var(--clvr-danger)}
/* ── Drawers. <details> not a JS tab set: content stays in the DOM (these sections are the page's
   SEO body) and it matches the "On this page" TOC, which is the drawer pattern already on this page. ── */
.sell-fast-page .pb--current .pb__drawer{overflow:hidden;border:1px solid var(--clvr-border-card);
    border-radius:var(--clvr-radius);background:var(--clvr-bg)}
.sell-fast-page .pb--current .pb__drawer summary,.sell-fast-page .pb__related summary{position:relative;display:flex;align-items:center;gap:.6rem;
    padding:14px var(--clvr-sp-4);cursor:pointer;font-size:var(--cb-fs-small);font-weight:600;
    color:var(--clvr-text);list-style:none;transition:background-color var(--clvr-transition),color var(--clvr-transition)}
.sell-fast-page .pb--current .pb__drawer summary::-webkit-details-marker,.sell-fast-page .pb__related summary::-webkit-details-marker{display:none}
.sell-fast-page .pb--current .pb__drawer summary:hover,.sell-fast-page .pb__related summary:hover{background:var(--clvr-bg-subtle);color:var(--clvr-blue-dark)}
.sell-fast-page .pb--current .pb__drawer summary:focus-visible,.sell-fast-page .pb__related summary:focus-visible{
    outline:2px solid var(--clvr-blue)!important;outline-offset:-2px}
.sell-fast-page .pb--current .pb__drawer[open]>summary::after,.sell-fast-page .pb__related[open]>summary::after{content:"";position:absolute;
    right:var(--clvr-sp-4);bottom:0;left:var(--clvr-sp-4);height:1px;background:var(--clvr-border-light)}
.sell-fast-page .pb__drawer-icon{width:16px;height:16px;min-width:0;min-height:0;flex:none;color:var(--clvr-text-muted)}
.sell-fast-page .pb__drawer-icon--fill{fill:currentColor}
.sell-fast-page .pb__drawer-icon--stroke{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sell-fast-page .pb__chev{width:14px;height:14px;flex:none;margin-left:auto;color:var(--clvr-text-muted);
    transition:transform var(--clvr-transition)}
.sell-fast-page .pb__drawer[open] .pb__chev{transform:rotate(180deg)}
.sell-fast-page .pb__drawer-hint{font-weight:400;color:var(--clvr-text-muted);font-size:var(--cb-fs-caption)}
.sell-fast-page .pb--current .pb__drawer-body{padding:14px var(--clvr-sp-4)}
.sell-fast-page .pb__drawer-body>*:first-child{margin-top:0}
.sell-fast-page .pb--current .pb__drawer-body.cash-editorial__text>ul{margin:0;padding-left:26px}
.sell-fast-page .pb--current .pb__drawer-body.cash-editorial__text>ul>li{padding-left:0}
.sell-fast-page .pb--current .pb__drawer-body.cash-editorial__text>ul>li+li{margin-top:var(--clvr-sp-2)}

/* ── Current per-path sections (2026-08-05). The older one-shot drafts remain hidden below as a copy bank. ── */
.sell-fast-page .path-sections{margin-top:var(--clvr-sp-12)}
.sell-fast-page .path-sections__title{margin:0 0 var(--clvr-sp-6);font-family:var(--clvr-font-heading);
    font-size:var(--cb-fs-h2);font-weight:700;line-height:1.25;letter-spacing:-.01em;color:var(--clvr-text)}
.sell-fast-page .path-sections__title+.offers-marketplace-tip{margin-top:var(--clvr-sp-8)}
.sell-fast-page .pb--current{container-type:inline-size;scroll-margin-top:calc(var(--clvr-sp-16) + var(--clvr-sp-4));
    overflow:visible;border:0;border-radius:0;background:transparent;box-shadow:none;
    margin:0 0 var(--clvr-sp-12)}
.sell-fast-page .pb--current+.pb--current{padding-top:var(--clvr-sp-12);border-top:1px solid var(--clvr-border-light)}
.sell-fast-page .path-sections~.section{padding-top:var(--clvr-sp-12);border-top:1px solid var(--clvr-border-light)}
.sell-fast-page .pb--current .pb__head{padding:0;border:0;background:transparent}
.sell-fast-page .pb__title-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--clvr-sp-2)}
.sell-fast-page .pb--current .pb__title{margin:0;font-size:var(--cb-fs-h3)}
.sell-fast-page .pb__path-icon{display:grid;width:28px;height:28px;min-width:28px;place-items:center;flex:0 0 28px;
    border-radius:8px;background:rgba(0,117,235,.1);color:#3878ff}
.sell-fast-page .pb__path-icon svg{width:16px;height:16px;min-width:0;min-height:0;fill:currentColor;flex:none}
.sell-fast-page .pb--current .pb__body{padding:var(--clvr-sp-4) 0 0}
.sell-fast-page .pb__intro{margin-top:var(--clvr-sp-3);overflow:hidden;border:1px solid var(--clvr-border-card);
    border-radius:var(--clvr-radius);background:var(--clvr-bg);box-shadow:none}
.sell-fast-page .pb__tablist{display:flex;align-items:flex-end;overflow-x:auto;border:0;background:var(--clvr-bg);
    scrollbar-width:thin}
.sell-fast-page .pb__tab{position:relative;flex:0 0 auto;margin:0;padding:var(--clvr-sp-3) var(--clvr-sp-4);
    border:0;background:transparent;color:var(--clvr-text-muted);font-family:var(--clvr-font);
    font-size:var(--cb-fs-small);font-weight:600;line-height:1.35;cursor:pointer;
    transition:color var(--clvr-transition)}
.sell-fast-page .pb__tab::after{content:"";position:absolute;right:var(--clvr-sp-4);bottom:0;left:var(--clvr-sp-4);
    height:2px;border-radius:var(--clvr-radius-sm) var(--clvr-radius-sm) 0 0;background:transparent;
    transition:background-color var(--clvr-transition)}
.sell-fast-page .pb__tab:hover{background:transparent;color:var(--clvr-text-secondary)}
/* QA-068 — below ~363px the three tabs total 313px against a strip that is only 270px wide, so "Pros & cons"
   is clipped mid-word on ALL FIVE path cards. The strip is overflow-x:auto so nothing escapes the page and the
   document never scrolls sideways — but there is no scrollbar or fade on mobile, so the third tab reads as a
   truncated word rather than as something you can swipe to. Trimming the horizontal padding from sp-4 to sp-2
   recovers 8px x 2 sides x 3 tabs = 48px, which fits 313 -> 265 inside 270 with headroom to spare. The
   ::after underline insets move with the padding or the active indicator would overhang its label. Breakpoint
   is 380px, not the exact 363px, so it also covers 360px devices; 390px already fits and is left alone.
   overflow-x:auto stays as the safety net if a future label runs longer. */
@media (max-width:380px){
  .sell-fast-page .pb__tab{padding-right:var(--clvr-sp-2);padding-left:var(--clvr-sp-2)}
  .sell-fast-page .pb__tab::after{right:var(--clvr-sp-2);left:var(--clvr-sp-2)}
}
.sell-fast-page .pb__tab:focus-visible{outline:2px solid var(--clvr-orange)!important;outline-offset:-2px;color:var(--clvr-text)}
.sell-fast-page .pb__tab[aria-selected="true"]{background:transparent;color:var(--clvr-text);font-weight:700}
.sell-fast-page .pb__tab[aria-selected="true"]::after{background:var(--clvr-link)}
.sell-fast-page .pb__tabpanel{padding:var(--clvr-sp-4)}
.sell-fast-page .pb__tabpanel[hidden]{display:none}
@media (prefers-reduced-motion:no-preference){
  .sell-fast-page .pb__tabpanel:not([hidden]){animation:pb-tab-panel-in var(--clvr-transition)}
  @keyframes pb-tab-panel-in{from{opacity:.6;transform:translateY(-2px)}to{opacity:1;transform:none}}
}
.sell-fast-page .pb__intro-lead{margin:0;font-size:var(--cb-fs-body);font-weight:400;line-height:1.65;color:var(--clvr-text)}
.sell-fast-page .pb__fit{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--clvr-sp-4);
    margin:0;padding:0}
.sell-fast-page .pb__fit p{margin:0;font-size:var(--cb-fs-small);line-height:1.5;color:var(--clvr-text-secondary)}
.sell-fast-page .pb__fit p+p{padding-left:var(--clvr-sp-4);border-left:1px solid var(--clvr-border-light)}
.sell-fast-page .pb__fit strong,.sell-fast-page .pb__pros-cons h4{font-family:var(--clvr-font);font-size:var(--cb-fs-small);
    font-weight:700;line-height:normal}
.sell-fast-page .pb__fit strong{display:block;margin-bottom:var(--clvr-sp-1);letter-spacing:normal;text-transform:none}
.sell-fast-page .pb__pros-cons{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--clvr-sp-4)}
.sell-fast-page .pb__pros-cons>div+div{padding-left:var(--clvr-sp-4);border-left:1px solid var(--clvr-border-light)}
.sell-fast-page .pb__pros-cons h4{margin:0 0 var(--clvr-sp-2)}
.sell-fast-page .pb__fit p:first-child strong,.sell-fast-page .pb__pros-cons>div:first-child h4{color:#2f7a33}
.sell-fast-page .pb__fit p:last-child strong,.sell-fast-page .pb__pros-cons>div:last-child h4{color:var(--clvr-danger)}
.sell-fast-page .pb__pros-cons ul{margin:0;padding-left:var(--clvr-sp-4);color:var(--clvr-text-secondary)}
.sell-fast-page .pb__pros-cons li{margin:0;font-size:var(--cb-fs-small);line-height:1.5}
.sell-fast-page .pb__pros-cons li+li{margin-top:var(--clvr-sp-2)}
.sell-fast-page .pb__metric-section{margin-top:var(--clvr-sp-6)}
.sell-fast-page .pb__metric-section:first-child{margin-top:0}
.sell-fast-page .pb__metric-section>h3{margin:0 0 var(--clvr-sp-3);font-family:var(--clvr-font-heading);
    font-size:1rem;font-weight:700;letter-spacing:-.015em;color:var(--clvr-text)}
.sell-fast-page .pb__metrics{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:var(--clvr-sp-4)}
.sell-fast-page .pb__metrics .mf-box,.sell-fast-page .pb__metrics .mf-tl-item{min-width:0}
.sell-fast-page .pb__metrics .mf-tl-item{border:0;background:var(--clvr-bg-subtle)}
.sell-fast-page .pb__metrics .mf-box-v{overflow-wrap:anywhere}
.sell-fast-page .pb__metric-status{display:none;margin:calc(-1 * var(--clvr-sp-2)) 0 var(--clvr-sp-4);
    font-size:var(--cb-fs-caption);color:var(--clvr-text-secondary)}
.sell-fast-page .pb--unavailable .pb__metric-status{display:block}
.sell-fast-page .pb--unavailable .pb__metrics{opacity:.7}
.sell-fast-page .pb__money-body{padding:0 var(--clvr-sp-4) 14px}
.sell-fast-page .pb__money-body .mf-rows{max-width:620px;margin:0}
/* QA-075: the ledger is three max-content columns with a 2.75rem column gap — 88px of pure gap in a
   316px container, which forced 6 of 7 rows to wrap and one to three lines. Give the label column
   flex instead of max-content and cut the gap; the amount and percent stay auto-sized. */

.sell-fast-page .cash-editorial__copy>.pb__drawer{margin-top:var(--clvr-sp-3)}
.sell-fast-page .pb__metric-section>.cash-editorial__copy+.pb__drawer{margin-top:var(--clvr-sp-3)}
.sell-fast-page .pb__metric-section--speed>.pb__drawer{border-radius:var(--clvr-radius)}
.sell-fast-page .pb__metric-section--price>.pb__money{margin-top:var(--clvr-sp-3);border-radius:var(--clvr-radius) var(--clvr-radius) 0 0}
.sell-fast-page .pb__metric-section--price>.pb__money+.pb__context-drawer{margin-top:0;border-top:0;border-radius:0}
.sell-fast-page .cash-editorial__copy{margin-top:var(--clvr-sp-3)}
.sell-fast-page .cash-editorial__copy>.cash-editorial__text{margin:0;font-size:var(--cb-fs-body);font-weight:400;line-height:1.65;color:var(--clvr-text)}
.sell-fast-page .pb__drawer-body.cash-editorial__text{margin:0;font-size:var(--cb-fs-small);line-height:1.6;color:var(--clvr-text-secondary)}
.sell-fast-page .cash-editorial__copy--collapsible:not(.is-ready):not(.is-expanded) .cash-editorial__text{max-height:4.8em;overflow:hidden}
.sell-fast-page .cash-editorial__ellipsis[hidden],.sell-fast-page .cash-editorial__tail[hidden]{display:none}
.sell-fast-page .cash-editorial__toggle{display:inline-flex;align-items:center;gap:var(--clvr-sp-1);padding:0;border:0;
    background:transparent;color:var(--clvr-link);font:inherit;vertical-align:baseline;
    font-size:var(--cb-fs-caption);font-weight:600;line-height:1.6;cursor:pointer}
.sell-fast-page .cash-editorial__chev{width:12px;height:12px;flex:none;transition:transform var(--clvr-transition)}
.sell-fast-page .cash-editorial__copy.is-expanded .cash-editorial__chev{transform:rotate(180deg)}
.sell-fast-page .cash-editorial__toggle:hover{color:var(--clvr-link-hover)}
.sell-fast-page .cash-editorial__toggle:focus-visible{outline:2px solid var(--clvr-orange)!important;outline-offset:2px;
    border-radius:var(--clvr-radius-sm)}
.sell-fast-page .pb__section-link{margin:var(--clvr-sp-6) 0 0}
.sell-fast-page .pb__section-link a{display:inline-flex;align-items:center;justify-content:center;max-width:100%;
    padding:var(--clvr-sp-2) var(--clvr-sp-3);border:2px solid var(--clvr-blue);
    border-radius:var(--clvr-btn-radius);background:transparent;color:var(--clvr-blue);
    font-size:var(--cb-fs-small);font-weight:700;line-height:1.35;text-align:left;
    text-decoration:none;transition:background-color var(--clvr-transition),
    border-color var(--clvr-transition),color var(--clvr-transition)}
.sell-fast-page .pb__section-link a:link,.sell-fast-page .pb__section-link a:visited{color:var(--clvr-blue)!important}
.sell-fast-page .pb__section-link a:hover,.sell-fast-page .pb__section-link a:focus-visible{border-color:var(--clvr-blue);
    background:var(--clvr-blue);color:var(--clvr-text-inverse)!important;text-decoration:none}
.sell-fast-page .pb__section-link a:focus-visible{outline:2px solid var(--clvr-orange)!important;outline-offset:2px}
.sell-fast-page .pb__related{margin-top:0;overflow:hidden;border:1px solid var(--clvr-border-card);border-top:0;
    border-radius:0 0 var(--clvr-radius) var(--clvr-radius);background:var(--clvr-bg)}
.sell-fast-page .pb .pb__related-title{margin:0;padding:0;background:transparent;font:inherit;letter-spacing:0;color:inherit}
.sell-fast-page .pb__related-icon{width:16px;height:16px;min-width:0;min-height:0;flex:none;fill:currentColor;
    color:var(--clvr-text-muted)}
.sell-fast-page .pb__related-chev{width:14px;height:14px;min-width:0;min-height:0;flex:none;margin-left:auto;
    color:var(--clvr-text-muted);transition:transform var(--clvr-transition)}
.sell-fast-page .pb__related[open] .pb__related-chev{transform:rotate(180deg)}
.sell-fast-page .pb__related-list{margin:0;padding:14px var(--clvr-sp-4) 14px 42px}
.sell-fast-page .pb__related-list li{padding-left:0;font-size:var(--cb-fs-small);line-height:1.45;color:var(--clvr-text)}
.sell-fast-page .pb__related-list li+li{margin-top:var(--clvr-sp-2)}
.sell-fast-page .pb__related-list a{color:var(--clvr-blue-dark);font-weight:500;text-decoration:none}
.sell-fast-page .pb__related-list a:hover{color:var(--clvr-blue)}
.sell-fast-page .pb__related-list a:focus-visible{outline:2px solid var(--clvr-orange)!important;outline-offset:2px;border-radius:2px}
.sell-fast-page .pb__metric-section--price+.pb__related{margin-top:0}
.sell-fast-page .pb--shell .pb__body{padding-top:var(--clvr-sp-4)}
.sell-fast-page .pb--shell .pb__metric-section{margin-top:var(--clvr-sp-6)}
.sell-fast-page .pb--shell .pb__metric-section:first-child{margin-top:0}
@container (min-width:640px){
  .sell-fast-page .pb--current .pb__metrics{grid-template-columns:repeat(4,minmax(0,1fr))}
}
@container (max-width:299px){
  .sell-fast-page .pb--current .pb__metrics{grid-template-columns:1fr}
}
@container (max-width:419px){
  .sell-fast-page .pb--current+.pb--current{padding-top:var(--clvr-sp-8)}
  .sell-fast-page .pb--current .pb__head{padding:0}
  .sell-fast-page .pb--current .pb__body{padding:var(--clvr-sp-4) 0 0}
  .sell-fast-page .pb__money-body{overflow-x:auto}
  /* QA-075: was three columns — 1.3fr label / max-content amount / 1fr percent. At 316px that left the
     label ~119px and forced 6 of 7 rows to wrap, one to three lines, on the sell-before-you-list
     ledger. The percent cell is the culprit: it carries prose like "85.6% of market value", not just
     a number. Two columns now, with the percent dropping to its own line beneath the pair it
     annotates. Subgrid on .mf-row makes that fall out automatically. */
  .sell-fast-page .pb__money-body .mf-rows{width:100%;max-width:100%;grid-template-columns:minmax(0,1fr) max-content;
      gap:.55rem var(--clvr-sp-3)}
  .sell-fast-page .pb__money-body .mf-pct{grid-column:1 / -1;margin-top:-.1rem}
  .sell-fast-page .pb__money-body .mf-pct{white-space:normal}
  .sell-fast-page .pb__money-body .mf-of{display:block;margin:var(--clvr-sp-1) 0 0;white-space:normal}
}
@container (max-width:559px){
  .sell-fast-page .pb__fit{grid-template-columns:1fr;gap:var(--clvr-sp-3)}
  .sell-fast-page .pb__fit p+p{padding:var(--clvr-sp-3) 0 0;border-left:0;border-top:1px solid var(--clvr-border-light)}
  .sell-fast-page .pb__pros-cons{grid-template-columns:1fr;gap:var(--clvr-sp-3)}
  .sell-fast-page .pb__pros-cons>div+div{padding:var(--clvr-sp-3) 0 0;border-left:0;border-top:1px solid var(--clvr-border-light)}
  .sell-fast-page .pb--current .pb__drawer summary,.sell-fast-page .pb__related summary{padding:13px var(--clvr-sp-3)}
  .sell-fast-page .pb--current .pb__drawer-body,.sell-fast-page .pb__money-body{padding-right:var(--clvr-sp-3);padding-left:var(--clvr-sp-3)}
  .sell-fast-page .pb__related-list{padding:13px var(--clvr-sp-3) 13px 38px}
}

/* ══ ZONE C/D DRAFT — evidence sections (`.zs`). Different job from the path cards: these are not options
   to choose between, they are the market behind the numbers. So: no card chrome, takeaway-first lead,
   a stat row, then interpretation. Question H2s here (unlike Zone B's takeaway headings) because these
   match real query families — "how fast do homes sell in orlando". ══ */
.sell-fast-page .zs{margin:0 0 var(--clvr-sp-12)}
.sell-fast-page .zs h2{margin:0 0 var(--clvr-sp-3);font-size:var(--cb-fs-h2);font-weight:600;letter-spacing:-.01em;
    color:var(--clvr-text);font-family:var(--clvr-font-heading)}
.sell-fast-page .zs__lead{margin:0 0 var(--clvr-sp-4);font-size:1.05rem;line-height:1.6;color:var(--clvr-text)}
.sell-fast-page .zs__lead b{font-weight:600}
.sell-fast-page .zs p{font-size:var(--cb-fs-body);line-height:1.65;color:var(--clvr-text-secondary);margin:0 0 var(--clvr-sp-4)}
.sell-fast-page .zs p:last-child{margin-bottom:0}
.sell-fast-page .zs h3{margin:var(--clvr-sp-6) 0 var(--clvr-sp-3);font-size:var(--cb-fs-h3);font-weight:600;color:var(--clvr-text)}
/* Stat row — 3–4 metrics with their own provenance. Cards, so each carries a value + what it means. */
.sell-fast-page .zs__stats{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--clvr-sp-3);margin:0 0 var(--clvr-sp-6)}
@media(max-width:700px){.sell-fast-page .zs__stats{grid-template-columns:repeat(2,1fr)}}
.sell-fast-page .zs__stat{border:1px solid var(--clvr-border-light);border-radius:var(--clvr-radius);padding:var(--clvr-sp-3);
    background:var(--clvr-bg)}
.sell-fast-page .zs__stat dt{font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
    color:var(--clvr-text-muted);margin:0 0 .2rem;line-height:1.3}
.sell-fast-page .zs__stat dd{margin:0;font-size:1.25rem;font-weight:600;color:var(--clvr-text);line-height:1.15}
.sell-fast-page .zs__stat small{display:block;margin-top:.25rem;font-size:var(--cb-fs-caption);color:var(--clvr-text-muted);
    line-height:1.4}
/* Comparison table — genuinely tabular data (many rows, uniform columns), so a table is right here. */
.sell-fast-page .zs__table{width:100%;border-collapse:collapse;margin:0 0 var(--clvr-sp-4);font-size:var(--cb-fs-small)}
.sell-fast-page .zs__table th{text-align:left;padding:.5rem .6rem;background:var(--clvr-bg-tint);font-size:10px;
    font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--clvr-text-muted);
    border-bottom:1px solid var(--clvr-border-light)}
.sell-fast-page .zs__table td{padding:.55rem .6rem;border-bottom:1px solid var(--clvr-border-light);
    color:var(--clvr-text-secondary);line-height:1.45}
.sell-fast-page .zs__table td:first-child{font-weight:600;color:var(--clvr-text)}
.sell-fast-page .zs__table tr:last-child td{border-bottom:none}
.sell-fast-page .zs__table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
/* Context strip — local vs state vs US. ⚠️ `nearby` is deliberately absent: it has no source. See
   PAGE_OUTLINE_V2 §8①. Rendered as a caption under a headline stat, not as its own component. */
.sell-fast-page .zs__ctx{font-size:var(--cb-fs-caption);color:var(--clvr-text-muted);margin:-.5rem 0 var(--clvr-sp-4)}
.sell-fast-page .zs__ctx b{color:var(--clvr-text-secondary);font-weight:600}
.sell-fast-page .zs__src{font-size:var(--cb-fs-caption);color:var(--clvr-text-muted);line-height:1.5;
    padding-top:var(--clvr-sp-3);border-top:1px solid var(--clvr-border-light);margin:var(--clvr-sp-4) 0 0}
/* QA-045 lower editorial replacement. This is the maintained CSS source for the hand-authored
   server-rendered partials; the port drops the superseded lower-page selector families below. */
.sell-fast-page .lower-editorial{container-type:inline-size;padding-top:var(--clvr-sp-12);border-top:1px solid var(--clvr-border-light)}
.sell-fast-page .lower-editorial h2{margin:0!important;font-size:var(--cb-fs-h2)!important;line-height:1.3!important}
.sell-fast-page .lower-editorial__callouts{--mf-fs-lbl:.66rem;margin-top:var(--clvr-sp-6);margin-bottom:0}
.sell-fast-page .lower-editorial__number-row{display:flex;align-items:center;gap:5px}
.sell-fast-page .zs p.lower-editorial__answer{max-width:760px;margin:var(--clvr-sp-4) 0 0!important;font-size:1rem!important;font-weight:400!important;line-height:1.65!important;color:var(--clvr-text)}
.sell-fast-page .lower-editorial__answer strong{color:inherit;font-weight:inherit}
.sell-fast-page .lower-editorial__drawers{display:block;margin:var(--clvr-sp-8) 0 0}
.sell-fast-page .lower-editorial__drawers>.lower-editorial__drawer{margin:0!important;border-radius:0!important}
.sell-fast-page .lower-editorial__drawers>.lower-editorial__drawer+.lower-editorial__drawer{border-top:0!important}
.sell-fast-page .lower-editorial__drawers>.lower-editorial__drawer:first-child{border-radius:var(--clvr-radius) var(--clvr-radius) 0 0!important}
.sell-fast-page .lower-editorial__drawers>.lower-editorial__drawer:last-child{border-radius:0 0 var(--clvr-radius) var(--clvr-radius)!important}
.sell-fast-page .lower-editorial__drawers>.lower-editorial__drawer:only-child{border-radius:var(--clvr-radius)!important}
.sell-fast-page .lower-editorial__drawer-body{color:var(--clvr-text-secondary)}
.sell-fast-page .lower-editorial__drawer-body>*:first-child{margin-top:0!important}.sell-fast-page .lower-editorial__drawer-body>*:last-child{margin-bottom:0!important}
.sell-fast-page .lower-editorial__drawer-body>p{margin:0!important}.sell-fast-page .lower-editorial__drawer-body>p+p{margin-top:var(--clvr-sp-3)!important}
/* QA-075: these wrappers hold a 520px table in a 314px viewport at 390px. They already scroll, but with
   no scrollbar on mobile the table just looks cut off. Classic local/scroll background trick: the
   cover gradients travel with the content (local) and the shadows do not (scroll), so a shadow shows
   only on the side that still has content off-screen, and disappears at each end. No layout change. */
.sell-fast-page .lower-editorial__table-wrap{margin-top:var(--clvr-sp-4);overflow-x:auto;border:1px solid var(--clvr-border-light);border-radius:var(--clvr-radius);
  background:
    linear-gradient(to right,var(--clvr-bg) 40%,rgba(255,255,255,0)) left center/28px 100% no-repeat local,
    linear-gradient(to left,var(--clvr-bg) 40%,rgba(255,255,255,0)) right center/28px 100% no-repeat local,
    radial-gradient(farthest-side at 0 50%,rgba(34,41,59,.16),rgba(34,41,59,0)) left center/14px 100% no-repeat scroll,
    radial-gradient(farthest-side at 100% 50%,rgba(34,41,59,.16),rgba(34,41,59,0)) right center/14px 100% no-repeat scroll,
    var(--clvr-bg)}
.sell-fast-page .lower-editorial__drawer-body>.lower-editorial__table-wrap:first-child{margin-top:0}
.sell-fast-page .lower-editorial__table-wrap+.lower-editorial__source-note{margin-top:var(--clvr-sp-3)!important}
.sell-fast-page .lower-editorial__table-wrap:focus-visible{outline:2px solid var(--clvr-orange)!important;outline-offset:2px}
.sell-fast-page table.lower-editorial__table{width:100%;min-width:520px;margin:0;border-collapse:collapse;font-size:var(--cb-fs-small)}
.sell-fast-page .lower-editorial__table th,.sell-fast-page .lower-editorial__table td{padding:var(--clvr-sp-3);border:0;background:var(--clvr-bg);text-align:left;vertical-align:top}
.sell-fast-page .lower-editorial__table thead th{border-bottom:1px solid var(--clvr-border-light);font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--clvr-text-secondary)}
.sell-fast-page .lower-editorial__metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--clvr-sp-3);margin-top:var(--clvr-sp-4)}
.sell-fast-page .lower-editorial__metrics>div{padding:var(--clvr-sp-3);border:1px solid var(--clvr-border-light);border-radius:var(--clvr-radius)}
.sell-fast-page .lower-editorial__metrics span,.sell-fast-page .lower-editorial__metrics small{display:block;font-size:var(--cb-fs-caption);color:var(--clvr-text-muted)}
.sell-fast-page .lower-editorial__metrics strong{display:inline-block;margin-right:4px;color:var(--clvr-text)}
/* QA-074: was a saturated blue callout with white text — hard to read, and the contextual link inside it
   rendered in link blue ON blue, so it disappeared entirely. Now plain interpretation text sitting BELOW
   the stats it explains (the markup order moved with it in market-speed.php). No box, no inverse text. */
.sell-fast-page .lower-editorial__verdict{margin-top:var(--clvr-sp-4)}
.sell-fast-page .lower-editorial__verdict strong{font-family:var(--clvr-font-heading)}.sell-fast-page .lower-editorial__verdict p{margin:var(--clvr-sp-1) 0 0!important}
.sell-fast-page .lower-editorial__expert h3,.sell-fast-page .lower-editorial__expert h4{margin:var(--clvr-sp-4) 0 var(--clvr-sp-2)!important;font-size:var(--cb-fs-h4)!important;color:var(--clvr-text)!important}
.sell-fast-page .lower-editorial__expert>p{margin:0 0 var(--clvr-sp-4)!important;line-height:1.65!important}
.sell-fast-page .lower-editorial__expert ul,.sell-fast-page .lower-editorial__expert ol{margin:0!important;padding-left:20px!important}
.sell-fast-page .lower-editorial__expert li{padding-left:var(--clvr-sp-1);line-height:1.65!important}
.sell-fast-page .lower-editorial__expert li+li{margin-top:var(--clvr-sp-4)}
.sell-fast-page .lower-editorial__expert li strong{color:var(--clvr-text)}
.sell-fast-page .lower-editorial__footnote{margin:var(--clvr-sp-4) 0 0;border:0}
.sell-fast-page .lower-editorial__footnote>summary{display:flex;align-items:center;width:max-content;max-width:100%;padding:var(--clvr-sp-3) 0;list-style:none;cursor:pointer;font-size:var(--cb-fs-small);font-weight:600;color:var(--clvr-text-secondary)}
.sell-fast-page .lower-editorial__footnote>summary:focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:2px}
.sell-fast-page .lower-editorial__footnote>summary:after{content:"";width:7px;height:7px;margin-left:var(--clvr-sp-2);border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform var(--clvr-transition)}
.sell-fast-page .lower-editorial__footnote[open]>summary:after{transform:rotate(225deg)}
.sell-fast-page .lower-editorial__footnote>div{max-width:720px;padding:0 0 var(--clvr-sp-3);font-size:var(--cb-fs-small);color:var(--clvr-text-secondary)}
.sell-fast-page .lower-editorial__footnote>div p{margin:0 0 var(--clvr-sp-2)!important}.sell-fast-page .lower-editorial__footnote>div p:last-child{margin-bottom:0!important}
.sell-fast-page .lower-editorial__checklist{counter-reset:checks;margin:0;padding:0;list-style:none}
.sell-fast-page .lower-editorial__checklist li{position:relative;min-height:48px;padding:var(--clvr-sp-3) 0 var(--clvr-sp-3) 34px;border-bottom:1px solid var(--clvr-border-light)}
.sell-fast-page .lower-editorial__checklist li:last-child{border-bottom:0}.sell-fast-page .lower-editorial__checklist li:before{counter-increment:checks;content:counter(checks);position:absolute;top:13px;left:0;display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--clvr-bg-tint);font-size:11px;font-weight:700;color:var(--clvr-blue)}
.sell-fast-page .lower-editorial__resources article{padding:var(--clvr-sp-4) 0}.sell-fast-page .lower-editorial__resources article+article{border-top:1px solid var(--clvr-border-light)}
.sell-fast-page .lower-editorial__resources a{font-weight:600}.sell-fast-page .lower-editorial__resources span,.sell-fast-page .lower-editorial__resources small{display:block;margin-top:2px}.sell-fast-page .lower-editorial__resources small,.sell-fast-page .lower-editorial__source-note{font-size:var(--cb-fs-caption);color:var(--clvr-text-muted)}
.sell-fast-page .lower-editorial__resources a:focus-visible{outline:2px solid var(--clvr-blue)!important;outline-offset:2px}
.sell-fast-page .lower-editorial__external-icon{display:inline-block;width:14px;height:14px;margin-left:3px;vertical-align:-2px}
.sell-fast-page .lower-methodology__intro,.sell-fast-page .lower-methodology__copy,.sell-fast-page .lower-methodology__limit{max-width:720px;color:var(--clvr-text-secondary)}
.sell-fast-page .lower-methodology__intro{margin:var(--clvr-sp-4) 0 0!important}.sell-fast-page .lower-methodology__group{margin-top:var(--clvr-sp-8)}.sell-fast-page .lower-methodology__group h3{margin:0!important;color:var(--clvr-text)!important}
.sell-fast-page .lower-methodology__source-list{max-width:720px;margin:var(--clvr-sp-4) 0 0;padding:0;list-style:none}
.sell-fast-page .lower-methodology__source-list li+li{margin-top:var(--clvr-sp-4)}
.sell-fast-page .lower-methodology__source-list h4{margin:0 0 var(--clvr-sp-1)!important;font-family:var(--clvr-font-heading);font-size:var(--cb-fs-body)!important;font-weight:600;line-height:1.4;color:var(--clvr-text)!important}
.sell-fast-page .lower-methodology__source-list p{margin:0!important;color:var(--clvr-text-secondary)}.sell-fast-page .lower-methodology__source-list small{display:block;margin-top:2px;font-size:var(--cb-fs-caption);color:var(--clvr-text-muted)}
.sell-fast-page .lower-methodology__copy{margin-top:var(--clvr-sp-4)}.sell-fast-page .lower-methodology__copy p{margin:0!important}.sell-fast-page .lower-methodology__copy p+p{margin-top:var(--clvr-sp-4)!important}.sell-fast-page .lower-methodology__details{max-width:760px;margin:var(--clvr-sp-6) 0 0}
.sell-fast-page .lower-methodology__formula-list{margin:0;padding:0}
.sell-fast-page .lower-methodology__formula-list>div{padding:var(--clvr-sp-3) 0;border-bottom:1px solid var(--clvr-border-light)}
.sell-fast-page .lower-methodology__formula-list>div:first-child{padding-top:0}.sell-fast-page .lower-methodology__formula-list>div:last-child{padding-bottom:0;border-bottom:0}
.sell-fast-page .lower-methodology__formula-list dt{margin:0 0 var(--clvr-sp-1);font-weight:600;color:var(--clvr-text)}
.sell-fast-page .lower-methodology__formula-list dd{margin:0;font-size:var(--cb-fs-small);line-height:1.6;color:var(--clvr-text-secondary)}
.sell-fast-page .lower-methodology__limit{margin:0!important;font-size:var(--cb-fs-small)!important}
@container(max-width:620px){.sell-fast-page .lower-editorial__metrics{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){.sell-fast-page .lower-editorial__footnote>summary:after{transition:none}}
/* v3.00 investor activity: answer-first synthesis, one condition table, and a same-home resale sequence. */
.sell-fast-page .investor-activity{container-type:inline-size;padding-top:var(--clvr-sp-12);border-top:1px solid var(--clvr-border-light)}
@media (prefers-reduced-motion: reduce){.sell-fast-page *{transition:none!important}}
/* v2.98 market-speed: SBR-informed editorial cards, comparative chart, and site-standard table. */
.sell-fast-page .market-speed{container-type:inline-size;padding-top:var(--clvr-sp-12);border-top:1px solid var(--clvr-border-light)}
/* v2.99 market-costs: one seller-net comparison, one decomposition table, and quiet scenario modules. */
/* v3.08 seller protection: plain editorial flow, one warning component, verified-resource list, one CTA. */
.sell-fast-page .seller-protection{container-type:inline-size;padding-top:var(--clvr-sp-12);border-top:1px solid var(--clvr-border-light)}
/* v3.12 methodology: explicit data layering, path math, stacked source drawers, and fallback rules. */
.sell-fast-page .methodology{container-type:inline-size}
.sell-fast-page .link-tree{container-type:inline-size}
.sell-fast-page .link-tree__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--clvr-sp-2) var(--clvr-sp-8);margin:var(--clvr-sp-6) 0 0;padding-left:var(--clvr-sp-6);list-style:disc}
.sell-fast-page .link-tree--national .link-tree__grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--clvr-sp-2) var(--clvr-sp-6)}
.sell-fast-page .link-tree__grid li{min-width:0;padding-left:var(--clvr-sp-1)}
.sell-fast-page .link-tree__grid li::marker{color:var(--clvr-blue)}
.sell-fast-page .link-tree__grid a{display:inline;font-size:var(--cb-fs-small);font-weight:600;line-height:1.5;color:var(--clvr-link);text-decoration:none;overflow-wrap:anywhere}
.sell-fast-page .link-tree__grid a:hover{color:var(--clvr-blue-dark)}
.sell-fast-page .link-tree__grid a:focus-visible{border-radius:2px;outline:2px solid var(--clvr-orange)!important;outline-offset:2px}
@container(max-width:620px){.sell-fast-page .link-tree--national .link-tree__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--clvr-sp-2) var(--clvr-sp-4)}}
@container(max-width:420px){.sell-fast-page .link-tree__grid,.sell-fast-page .link-tree--national .link-tree__grid{grid-template-columns:1fr}}
@media(max-width:700px){.sell-fast-page .path-sections .pb--current,.sell-fast-page .path-sections~.section{margin-bottom:var(--clvr-sp-8)}.sell-fast-page .path-sections .pb--current+.pb--current,.sell-fast-page .path-sections~.section{padding-top:var(--clvr-sp-8)}}

/* QA-010 lower-page component-language migration.
   Scope begins at market-speed. The approved estimator/path zone above it is intentionally unchanged. */
.sell-fast-page .market-speed,
.sell-fast-page .investor-activity,
.sell-fast-page .seller-protection,
.sell-fast-page .methodology,
.sell-fast-page .link-tree{padding-top:var(--clvr-sp-16)}
.sell-fast-page .zs h2{max-width:720px;margin-bottom:var(--clvr-sp-4)}
.sell-fast-page .zs__lead{max-width:720px;font-size:var(--cb-fs-body);line-height:1.7;color:var(--clvr-text-secondary)}
.sell-fast-page .market-speed>h3{margin:0 0 var(--clvr-sp-3)!important}



/* One lower-page disclosure grammar: quiet dividers, explicit state label, no competing card shell. */

/* Methodology defaults to editorial flow. Deeper mechanics remain crawlable and opt-in. */

@container(max-width:640px){
}
@container(max-width:520px){
}
@media(max-width:700px){
  .sell-fast-page .path-sections~.section{padding-top:var(--clvr-sp-8);margin-bottom:var(--clvr-sp-8)}
}
