/* web-blocks-v65.css
   v65 = v64 with the house-ad button rule also styling a <button>
   (web-ha-*-v6 draws Bookmark as one), plus a reset so it looks the same
   as the link. Nothing else changed.

   v64 = v63 + the Bookmark how-to panel (Clean-Up S1). A Bookmark house ad
   (web-ha-*-v5) carries a hidden .nlw-ha-howto; body.js 1.14 (section 19)
   opens it. A centred card on a dimmed page, edged in the ad's colour, with
   a close button shaped like the ad's button. Colours come from the ad's own
   values (--nl-ha-c, --nl-ha-on) and the title's ink. Nothing else changed.

   v63 = v62 + section art bullet and rule, and no duplicate RE heading
   (Design Pass 2 S3; D184, D185).
     - TS and Compact section art (D184, review option T4): a dot in the
       group's colour, the art, then a thin rule in that colour at 35% to
       the tile's edge. The colour is the panel edge of the group the story
       sits in (--nl-grp-edge: Accent, Main or Highlight); outside a group,
       the title's Highlight. --nl-art-dot overrides it.
     - RE (D185): when section art shows, the text heading under it is
       hidden; with no art the heading stays.
   Nothing else changed.

   v62 = v61 with RE section art drawn like TS section art (D183): left-
   aligned, at most 40px tall (34px on phones), its whole image shown. Was a
   full-width banner cropped to 120px. --nl-re-art-h still overrides the
   height. Nothing else changed.

   v61 = v60 + RE on a white tile (Design Pass 2 S3; D181).
     - The RE block (On the Market) sits on the white story ground like
       stories and ads: --nl-re-bg the story ground, 12px corners, 28px
       padding (20px 16px on phones).
     - RE section art shows when the title names it (--nl-re-art-display
       block; was none by default). The art comes from the title's
       types.RE.franchiseId (206 v1.33).
   Nothing else changed.

   v60 = v59 with the column paper a few shades darker: --nl-paper #F0EDE6
   (was #F8F6F1), so the white story and ad tiles stand off it more
   clearly. The fallback in the wrapper rule follows. Nothing else changed.

   v59 = v58 + ad tiles and smaller TS section art (Design Pass 2 S3;
   D177, D178).
     - Ad tiles (D177). Each banner sits in its own white tile, like a story:
       12px corners, 28px above and below, no frame line (the ad keeps its
       own 1px border). A group is its label once, then its tiles, 22px
       apart; the shared white mat is gone. A lone banner is the same tile
       under its own label. Tile ground --nl-ba-tile-bg (default the story
       ground), corners --nl-ba-tile-radius, gap --nl-ba-group-gap.
     - TS section art (D178), such as Pet Spotlight's and Recipe Corner's:
       left-aligned and at most 40px tall (34px on phones); was centred at
       up to 80px. --nl-ts-franchise-h still overrides the height.
   Nothing else changed.

   v58 = v57 + ad framing (Design Pass 2 S3; D176).
     - Every banner image has a 1px border, --nl-ba-img-border (platform
       default: the title's Main at 18% on white). Ads come in every colour;
       one that matches the page lost its edge. The border sits inside the
       banner's width (box-sizing), so all banners stay the same size.
     - Ads placed together are 40px apart (--nl-ba-group-gap; was 8px).
     - The white mat has 28px above and below its ads (--nl-ba-group-mat-pad
       28px 8px; was 8px all round). A banner on its own gets the same in its
       frame (--nl-ba-pad 28px 10px; was 10px).
   Nothing else changed.

   v57 = v56 with the banner width worked out from the window, not the column.
     v56 made the newsletter column a size container (container-type) so the
     width could read the column. On the live page the column sits in a
     Webflow wrapper that sizes itself to its content; a size container has
     no content width, so the whole column collapsed to a sliver. v57 removes
     container-type entirely and uses the window width instead:
         width: min(--nl-banner-w, 100vw - --nl-banner-inset)
       --nl-banner-w      500px
       --nl-banner-inset  190px above 560px wide: page edges 16, column
                          padding 40, panel 61, story card 56, scrollbar
                          and slack 17
                          121px on phones: page edges 16, column padding
                          40, panel 33, story card 32
     Above about 690px the 500px cap wins, so desktop is 500px everywhere.
   Nothing else changed from v56.

   v56 = v55 + one banner width (Design Pass 2 S3; D175).
     Every banner image renders at the same width wherever it sits: a banner
     on its own, inside an ad group's mat, inside a group panel, and the
     payer's ad inside a paid story. The width is the narrowest place a
     banner can land (a paid story's card inside a group panel), so all of
     them fit:
         width: min(--nl-banner-w, 100cqw - --nl-banner-inset)
       --nl-banner-w      500px  the width when there is room (desktop)
       --nl-banner-inset  117px  desktop: panel 28+28+5, story card 28+28
                           65px  phones:  panel 14+14+5, story card 16+16
     100cqw is the newsletter column, made a size container here. A browser
     without container units keeps the old full-width banners.
     A banner's own frame (.nlw-ba a) now hugs the image instead of spanning
     the column, so the frame is the same width too.
   Nothing else changed.

   v55 = v54 + story design review v0.1 (Design Pass 2 S3; D172 to D174).
     - Stories sit on white (D174, option W1). FA, TS and Compact stories
       get the platform values --nl-article-bg #FFFFFF, --nl-article-pad
       28px (20px 16px on phones) and --nl-article-radius 12px. A section
       skin's surface still wins on its own blocks.
       Two stories in a row are 22px apart (--nl-story-gap). The v54
       hairline between stories (D171) is retired: the white ground does
       that job.
     - The column paper is a token, --nl-paper, and a shade deeper,
       #F8F6F1 (was #FAF9F5 typed in the wrapper rule), so white stories
       read against it.
     - Side-by-side headlines (D173) take --nl-split-headline-size, 27px
       (22px on phones); was the 23px title size.
     - Centred photos are cropped 4:3 by Uploadcare's smart crop in the
       centred templates (D172): web-fa-centered-v8, web-ts-centered-v4.
       Nothing in this file changes for that.
   Nothing else changed.

   v54 = v53 + group shading and a line between stories (Design Pass 2 S3,
   G9 option S3, G10 option H1; D170, D171).
     - Group panel (D170). The run an opener holds (.nlw-run, written by
       newsletter-render v1.10.0) sits on a tinted panel, 14px radius, with a
       5px left edge. Tint and edge come from the title's colours, chosen by
       the opener inside the run (:has):
         Around Town      Accent 11% on white, Accent edge
         Community News   Main (ink) 6% on white, Main edge
         Spotlights       Highlight 10% on white, Highlight edge
       Each has an override: --nl-grp-at-bg / -edge, --nl-grp-cn-bg / -edge,
       --nl-grp-sp-bg / -edge. A browser without :has shows every panel in
       the Around Town colours. The closing mark stays, flush with the panel.
     - Story line (D171). A story (FA, TS, Compact) followed directly by
       another story ends with a 1px hairline, the block gap above and below.
       No line after a group's last story, before an ad, or before any other
       block. FA templates v7/v5 drop their own 2px <hr>, which put a heavier
       line after FA stories only.
   Nothing else changed.

   v53 = v52 + story groups (Design Pass 2 S3, D162 to D168).
     - Two new openers in the Around Town family (D165). Both are AT blocks;
       their DESIGNS record picks the look:
         .nlw-at--community  Community News: centred between double rules,
                             italic title at 40px (32px on phones).
         .nlw-at--spot       Spotlights: a band in the title's Highlight with
                             a tilted sticker in the Accent; title 46px italic
                             (36px on phones). Text on the band is
                             --nl-sp-ink (platform default white; a title whose
                             Highlight is light sets its ink, as WLN does).
     - Flag (D163): .nlw-flag, a pill above the headline in the Highlight.
       Text colour --nl-flag-ink (platform default white).
     - Story link (D164): .nlw-cta--story turns the dark button into a text
       link with an accent underline and an arrow. A new class, because the
       older .nlw-cta--link (the dormant FA-hero rule, uppercase and
       tracked, with !important) is a different look and no template uses it.
     - Compact (D141): .nlw-story--compact, a thumbnail beside the headline
       and a summary clipped to two lines. One file serves FA and TS.
     - New token --nl-highlight-ink: the Highlight darkened 30%, for text in
       the Highlight. The Highlight itself is a fill colour; as text at small
       sizes it often fails contrast (WLN's salmon is 2.95:1 on white). The
       AT and EV eyebrows now read --nl-highlight-ink.
     - Fraunces 700 and 800, roman and italic, added to the font import. The
       Around Town title asked for 800 and was getting a synthesised bold.
   The name-only franchise band (.nlw-franchise-name) stays styled for any
   template that still prints it; the v6/v4/v3 story templates no longer do
   (D162).
   Nothing else changed.

   v52 = v51 + a compact Center house ad. Center put the art across the full
   column at its natural shape, which made the postcard about 700px tall on
   desktop. The art band is now capped (--nl-ha-center-art-h, 300px; 220px
   on phones), the drawing centred inside it, and each kind's art ground
   fills the band so a drawing narrower than the band has no white edges.
   Left and Right are unchanged.
   Nothing else changed.

   v51 = v50 + house ads and a bigger Around Town (Design Pass 2 S2,
   D129 to D132, D146, D148).
     - House ads (.nlw-ha): a split card with a 2px border in the ad's own
       colour and a 16px radius (banners sit on an 8px mat, so the two
       shapes read differently). The title's postmark hangs in a tab from
       the top edge; the button is a tab breaking the bottom edge. Layouts:
       --left (art left), --right (art right), --center (art above). On
       phones every layout stacks, art first.
       Colours come from the title (D129): Subscribe its Highlight, deepened
       so white text passes contrast; Advertise Main; Bookmark Accent. Each
       has an override: --nl-ha-subscribe, --nl-ha-advertise, --nl-ha-bookmark.
     - A new type role, --nl-t-opener: 52px, 38px on phones. Around Town's
       title uses it (D148).
   Nothing else changed.

   v50 = v49 + Around Town as an opener over a run, and ad groups as one mat
   (Design Pass 2 S2, D142, D145). Pairs with newsletter-render v1.9.0,
   which writes the wrappers these rules style.
     - AT is no longer a card. Eyebrow, the words "Around Town" at the hero
       size (the size of a Lead headline) in extra-bold, the teaser, then a
       short accent bar on a hairline: the same rule a section opener uses.
     - .nlw-run holds the opener and the blocks under it, up to the next ad.
       .nlw-run-end is the small dark mark that closes it.
     - .nlw-ba-group (two or three ads placed together): one label above one
       white mat holding the ads, as in the full-issue mock. The group no
       longer draws its own cream box; the mat is the frame.
   New values: --nl-at-title-weight, --nl-at-rule-w, --nl-run-end-w,
   --nl-run-end-color, --nl-ba-group-mat-bg, --nl-ba-group-mat-pad.
   Nothing else changed.

   v49 = v48 + the Around Town opener (Design Pass 2, D133, D138).
   A new block, AT, that the MNA places like any other (usually first).
   Eyebrow, the words "Around Town", one teaser sentence. No list, nothing
   collapsed. A white card with the title's accent along the top, from the
   accepted issue rhythm mock v0.4. Its words come from the block or from
   the labels map (D144); the template holds the platform defaults.
   New values, each with a platform default so no shell needs to set one:
     --nl-at-bg, --nl-at-border, --nl-at-rule, --nl-at-radius, --nl-at-pad,
     --nl-at-mb, --nl-at-eyebrow-color, --nl-at-eyebrow-ls,
     --nl-at-title-size, --nl-at-teaser-size.
   The title uses the title role (23px), not the mock's 28px: sizes point
   at roles. A title that wants it larger sets --nl-at-title-size.
   Nothing else changed.

   v48 = v47 + the sign-off name and role ignore inherited text styles.
   A stray inherited rule set the publisher's name in capitals with wide
   spacing; name and role now set text-transform and letter-spacing
   themselves. Nothing else changed.

   v47 = v46 + the signed sign-off card (Design Pass 2, D127).
   The sign-off becomes the same dark card as the greeting ("Dear Wyckoff"),
   so the issue opens and closes with the publisher: the Closing Note (or the
   default line) in the display face, italic; a short accent rule; then the
   publisher's headshot, name, and role. Uses the greeting's own values
   (--nl-inv-*), so a title's greeting and sign-off always match. Display
   face, not the logo face (D123). The v5 sign-off rules stay for shells on
   the old markup.

   v46 = v45 + the issue bar leaves the logo's typeface (D122, D123).
   Rule D123: no block uses the title's logo typeface, so the logo reads as
   a mark, not a headline (the NYT nameplate rule). WLN's logo face is
   Playfair Display, which the seal bar was also using.
     - New value --nl-ib-font: the seal bar's face. Defaults to the
       title's UI face (--nl-font-ui; Jost for WLN).
     - Title: --nl-ib-font, 700. "No.": small, upright, uppercase, spaced.
       Number: --nl-ib-font, 700. Date line and faded date unchanged.
     - Phone seal 68px (was 52px in v45), number 29px.
   The v5 bar rules still read --nl-bar-font and are untouched.

   v45 = v44 + the phone issue bar, option D (Design Pass 2, D121).
   On phones the live bar left its right third empty, because the faded
   date was hidden there. Now, at 560px and narrower:
     - the seal is smaller (52px), with "No." and the number centred in it;
     - the title is bigger (23px), so it carries the bar;
     - the faded date comes back at phone size (92px) on the right.
   Desktop is unchanged.

   v44 = v43 with the page around the newsletter handed to Site Chrome
   (ix-site-chrome, D115 to D120). Site Chrome now draws the navbar, the
   logo band, the phone row and the page background on every page, from
   TITLES. So:
     - the v42 PAGE CHROME block (D111) is removed: no rule in this file
       reaches outside .ix-nl any more. HC-P-DP6-4 closes with it.
     - the column lift (D113) keys on the seal issue bar instead of the
       MNA masthead, because shell v30 no longer draws a masthead. When the
       issue bar is the column's first piece it covers the wrapper's top
       padding and takes the column's rounded top corners.
     - the masthead rules stay, untouched, for any shell still on v28/v29.

   v43 = v42 + the column stack and the page sides (Design Pass 2, D113).
     The masthead read as part of the page band, not the column, because
     the sides were the same teal as the logo's ground. Now:
     - the page sides take --nl-page-bg, a new title value. Platform default
       #ECEAE5, a neutral light warm grey; WLN sets #DCEBE8 (pale teal).
     - the column (masthead, issue bar, content) is one object: a gap above
       it on desktop and tablet, rounded top corners on the masthead to
       match the column's own, and a soft edge shadow mixed from the title's
       main colour so it lifts off a light page.
     - phones are unchanged: the column fills the screen.
     The navbar stays Webflow's in this version; it moves to MNA in v44 (D112).

   v42 = v41 + the masthead, the seal issue bar, and the page around the
   newsletter (Design Pass 2, decisions D108 to D111).
     - MASTHEAD. The title's logo now comes from MNA: TITLES-ADMIN
       title-masthead-ulc-link (ctx.masthead), the same image the email
       uses, or the issue's own art from the PUBLICATION PLAN design-json
       (ctx.themeMasthead) when one is set. It sits on --nl-ink, the
       title's main colour, above the column.
     - ISSUE BAR (.nlw-issuebar--seal). Fills the column edge to edge on the
       title's bar colour. The issue number sits in a round seal, the title
       sits left beside it, the date is spelled out once under the title,
       and a large faded date (ctx.issueDateNumeric) sits behind the right
       side. The faded date hides on phones. The seal ring is mixed from
       the bar colour and the bar ink, so a title gets its own ring with no
       new setting. The v5 issue bar rules stay below, untouched, for any
       shell still on the old markup.
     - PAGE CHROME (D111). On pages MNA builds, and only there, this file
       styles Webflow's navbar, masthead section and page background from
       the title's values: full-width nav band on --nl-ink-deep, a full-width
       accent rule under it, links in --nl-on-ink, the page on --nl-ink.
       Webflow's logo is hidden so MNA's is the only one; on tablets and
       phones Webflow's masthead strip stays, slimmed, because it holds the
       menu button. Legacy issues carry no .ix-nl and are untouched.
       Every selector in that block depends on a Webflow class name. They
       are listed at the head of the block and logged as HC-P-DP6-4.
     - NEW TOKEN --nl-on-ink: text that sits on the main colour (nav links).
       Platform default warm off-white.
     - Playfair Display italic 500 added to the font import ("No." in the
       seal).

   v41 = v40 + the franchise block can name itself in words.
   Email has always shown the franchise NAME on the ink band when a block has
   a franchise but no art — it is the thing that says what a block is part of.
   Web showed nothing, and let a separate rubric carry that job. The article
   templates now mirror email (web-fa-* v5/v3, web-ts-* v2/v3) and print
   .nlw-franchise-name when there is no art. Styled here to match email's
   band: display face, italic, inverse ink, on the ink ground.

   v40 = v39 + the RE list rows breathe: the row's own padding grows from
   20px to 26px and the thumbnail from 90x58 to 120x80, so a listing has
   the height its photo and four lines of detail need. Email matches.

   v39 = v38 + the RE list, which renders for the first time with
   web-re-listing-v2:
     - the status chip is filled and sits on its own line above the
       address, at every width. It carries the realtor's own words from
       Display Status, so one colour serves every phrase.
     - on a phone the row becomes image-forward: the thumbnail grows to
       full width and everything stacks beneath it. Four listings is the
       cap on both surfaces, so nothing is hidden at any size.
   and two fixes:
     - the address is a link, so it was arriving underlined and in the
       page's link colour. It now inherits the address colour and drops
       the underline, matching email.
     - the listing row's line height is set on the link too, for the same
       reason the EV title needed it in v36.

   v38 = v37 + the TXA card drops the customer logo and takes a mark.
   Logos arrive in every shape and several carry their own white ground,
   so at any fixed size some looked tiny and some looked like accidents.
   In their place, a small diamond in the left gutter: a square turned 45
   degrees, drawn rather than typed, so no font has to carry the glyph.
   Email does the same; Outlook ignores the rotation and shows a square,
   which is a fair fallback rather than a broken one.
   The mark's colour is a token, so a title can use its own.

   v37 = v36 + the TXA card logo at 73px, up from 52px, which read as
   undersized against a 23px card name. Same value on email.
   The card's call to action also changes words, from "Visit site" to
   "Check them out" — that lives in web-txa-find-v7.html, not here.

   v36 = v35 + the wrapped event title's leading actually taking effect on
   phones. v35 set the line height on the h3, but the title's text sits
   inside a link, and an inline element's own line height governs the lines
   it generates. Whatever the page around us sets on links was winning.
   Fixed by setting line-height: inherit on the link, which is more specific
   than any tag-level rule the page can carry. The same line is added to the
   TXA card name and the FA and TS headlines, which are links too and have
   the same exposure.
   Also adds -webkit-text-size-adjust to the wrapper, so iOS stops
   enlarging text on its own judgement.

   v35 = v34 + two corrections from the phone check:
     - a wrapped event title on a phone was too loosely leaded. 1.18 to 1.08.
     - the day numeral was vertically smushed: 2px added above and below it.
       This applies at every width, not just phones, because the numeral's
       line height is the same on both. It nudges the desktop tile 4px taller.

   v34 = v33 + the EV row rebuilt for phones, from the round 2 review:
     - the date tile stops being a tile: full height of the row, flush to
       the left edge, square on that side. An anchor, not a chip.
     - the meta line parses: time on its own line, venue under it, no
       separator between them. It was one run-on line wrapping mid-venue.
     - the event title gets bigger and tighter: it was small next to the
       meta line and too loosely leaded.
     - the meta line gets a line height. v32 set its size and not its
       leading, so it inherited the body's 1.6. That was my omission.
   Phone only, max-width 560. Desktop is unchanged.
   Email is NOT covered: its phone rules live in the title's shell and
   would need a new shell file.

   v33 = v32 + the TXA disclosure line (TXA-15). Web had none; the email
   block has carried it since v1. It sits inside the frame, under the last
   card, at the micro size in the mid text colour. Needs web-txa-find-v6.html.
   Nothing else in this file changed: the orange stays #ff4400 in the title
   shell (TXA-13 keeps web as it was), and the card name stays Spectral.

   v32 = v31 + two EV meta-line changes, from the round 1 review:
     The meta line (time and venue) is 12px, was 10px. It is its own token
     now, --nl-ev-meta-size, so a title can set it without moving the
     rubric, which shares the 10px label role.
     On a one-event block the meta line leads with the date, e.g.
     "Sep 10 · 9:00 AM · Indian Trail Club". Needs web-ev-cards-v4.html,
     which prints .nlw-ev-date. At two or more events the date tile at
     left already shows it, so the CSS hides it there.

   v31 = v30 + EV email review v0.1, the three items that also change web:
     EV-12  The event eyebrow gets a style: UI face, micro size, bold tracked
            caps, in the new --nl-highlight (platform default: ink). Before
            v31 it had no rule and printed as plain body text.
     EV-14  The platform date chip is ink, not the beige issue-bar colour.
            White on #E4E0D4 was 1.3:1 for any title with no EV colours.
     EV-6   The date stack is even. The day numeral takes
            --nl-ev-chip-day-font (default: the UI face). Display faces
            place numerals too differently to stack evenly. Month, day and
            weekday get explicit line heights per density, the same numbers
            as email-ev-cards-v4. No other change.
   v30 = v29 + split headlines (FA and TS, photo left or right) use the
     title role: 23px desktop, 18px phone. At the hero size a headline
     wrapped to three or four lines in the half-width column. Centered FA
     and TS keep the hero size. A title can override with
     --nl-split-headline-size. No other change.
   v29 = v28 + EV fix: at 2 or 3 events the "Details" link now shows as the
     same right-edge chevron as 4+ events. In v27/v28 its word was hidden and
     no chevron was drawn, so the link was invisible. Also removes a stray
     selector fragment left by an earlier fold (no visual effect). No other change.
   INBXIFY · MNA web render stylesheet
   v28 = v27 + Design Port numbers v0.2 (Design-Port-Numbers-v0_2.md).
     July's type scale is the platform default, desktop and phone. Today's
     scale moves to the opt-in class ix-scale-quiet. Platform colours are
     neutral and carry no brand, INBXIFY's included. Renamed: --nl-teal ->
     --nl-ink, --nl-teal-deep -> --nl-ink-deep, --nl-gold -> --nl-accent.
     EV reads the palette. GR title and sign-off take the title role. Sizes
     that bypassed the roles now point at one. Jost adds 400 and 600.
   v27 = v6 + Session 5 honing pass. FA/TS design locked. Spectral added.
   Border-radius 6px platform-wide. FA centered photo 580px. TS franchise full-width.
   1..N events from one block; density comes from .nlw-ev--nN set by x_evCount,
   so a new arrangement is a CSS rule, not a build.
   v5 = v4 + the B1 fan-out (GR/BA/FA-split/TS/RE/TXA/spacer) + THE BRAND LIFT:
   every publisher-brand value that v4 carried as a literal (WLN gold bar,
   Playfair/Jost, signoff trim) now reads a --nl-* variable with a NEUTRAL
   platform default. The title's web shell sets the brand — bnm-wln/web-shell-v5
   sets WLN's values; a Renna shell will set Renna's. The shared stylesheet
   contains no publisher. (Font @import still loads all families; per-title
   font loading is a later optimization, logged.)
   ─────────────────────────────────────────────────────────────
   SELF-CONTAINED ON PURPOSE. Loads on the PUBLIC Newsletter Collection
   page where ix-tokens is NOT loaded. Every custom prop is defined here,
   on .ix-nl — never assume :root.
   TYPOGRAPHY IS ARMORED: every font-family carries !important (RTE lesson).
   AD FRAMES COLLAPSE BY DEFAULT (8/16): stored HTML never changes; the
   hydration script un-collapses a frame only when a sponsor resolves.
   LEGACY SEAM (D5): every selector scoped under .ix-nl. */

@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,500;0,9..144,600;0,9..144,700;0,9..144,800;1,9..144,600;1,9..144,700;1,9..144,800&family=DM+Sans:wght@400;500;700&family=DM+Mono:wght@400;500&family=Playfair+Display:ital,wght@0,700;1,500;1,700&family=Spectral:ital,wght@0,400;0,600;1,400;1,600&family=Jost:wght@400;600;700&display=swap');

.ix-nl{
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  /* Body copy scale — teaser, blurb, greeting body. One size platform-wide.
     Per-block tokens fall back to these, so blocks match unless deliberately
     overridden. */
  --nl-body-size: var(--nl-t-body);
  --nl-body-lh: 1.62;
  /* Deck / subhead scale — above body, well below headline. One size. */
  --nl-subhead-size: var(--nl-t-deck);
  --nl-subhead-lh: 1.5;
  /* Space between blocks. One value platform-wide; a block that needs a
     different rhythm overrides its own token rather than drifting. */
  --nl-block-gap: 52px;

  /* ── Type scale by ROLE, not by block ────────────────────────────
     Every piece of text in the newsletter belongs to one of these.
     Change a role and every block follows. Mobile values live in the
     @media block at the foot of this file. */
  /* Platform scale = July (~2.7:1 display over body). A title that wants
     quieter type adds the class ix-scale-quiet to its .ix-nl wrapper
     (see the foot of this file). WLN uses the platform scale. */
  --nl-t-opener:  52px;   /* the Around Town opener (v51, D148)         */
  --nl-t-hero:    40px;   /* FA / TS headline, issue title, TXA theme   */
  --nl-t-title:   23px;   /* section heads, EV/RE titles, GR, sign-off  */
  --nl-t-deck:    17px;   /* subhead                                    */
  --nl-t-lead:    17px;   /* tracked-caps lead, e.g. TXA business       */
  --nl-t-body:    15px;   /* teaser, blurb, greeting body, page base    */
  --nl-t-price:   17px;   /* RE price                                   */
  --nl-t-byline:  10px;   /* byline, agent line, sponsor line           */
  --nl-t-button:  10.5px; /* CTA and pill labels                        */
  --nl-t-label:   10px;   /* mono caps: rubric, meta, specs             */
  --nl-t-micro:    8.5px; /* chips and flags                            */
  --nl-t-numeral: 38px;   /* EV date chip day number                    */
  --nl-hero-lh:   1.08;
  --nl-label-ls:  2.6px;
  /* platform palette — neutral. No publisher and no INBXIFY brand.
     --nl-ink     the dark brand colour: headlines, links, dark cards
     --nl-accent  the accent: link underlines, rules, badges, EV button
     A title's shell sets both. --nl-text is body copy. */
  --nl-ink:#22201C;
  --nl-ink-deep:#0E0D0B;
  --nl-accent:#A89E8C;
  --nl-accent-ink:var(--nl-ink);
  /* v42: text that sits on the main colour, e.g. nav links on the nav band */
  --nl-on-ink:#F4F0E4;
  /* v43: page sides, around the column (D113) */
  --nl-page-bg:#ECEAE5;
  --nl-ink-body:var(--nl-text-mid);
  --nl-ink-soft:var(--nl-text-mid);
  --nl-rule:var(--nl-border);
  --nl-card-bg:var(--nl-surface);
  --nl-radius:6px;
  /* small emphasis text, e.g. the EV eyebrow. A title's shell sets it. */
  --nl-highlight:var(--nl-ink);
  /* v53: the Highlight as TEXT, darkened so small type passes contrast */
  --nl-highlight-ink:color-mix(in srgb, var(--nl-highlight), #000 30%);
  /* TXA meta line; eyebrow and theme accent fall back to it */
  --nl-txa-meta-color:var(--nl-text-mid);
  --nl-cream:#FAF9F5;
  --nl-cream-warm:#FDFCF8;
  --nl-text:#1E2A3A;
  --nl-text-mid:#5A6478;
  --nl-text-light:#8A8E9A;
  --nl-border:#E4E0D4;
  --nl-border-soft:#EEE9DC;
  --nl-surface:#FFFFFF;

  /* type — NEUTRAL platform defaults; the title shell sets the brand.
     (v4 hardcoded Fraunces here; Fraunces is WLN's, so it moved to the shell.) */
  --nl-font-display:Georgia,'Times New Roman',serif;
  --nl-font-body:'DM Sans',system-ui,sans-serif;
  --nl-font-mono:'DM Mono',ui-monospace,monospace;
  --nl-font-ui:var(--nl-font-body);

  /* brand-carrying furniture — neutral defaults, shell-set per title */
  --nl-bar-bg:var(--nl-border);
  --nl-bar-ink:var(--nl-text);
  --nl-bar-font:var(--nl-font-display);
  --nl-bar-label-font:var(--nl-font-mono);
  --nl-signoff-border:var(--nl-accent);
  --nl-signoff-ink:#444444;
  --nl-signoff-font:var(--nl-font-display);

  /* inverted (dark) card — GR and any future dark block */
  --nl-inv-bg:var(--nl-ink);
  --nl-inv-ink:#F2E9D8;
  --nl-inv-ink-soft:#DCE5E2;
  --nl-inv-rule:color-mix(in srgb, var(--nl-accent) 55%, transparent);

  display:block;
  max-width:680px;
  margin:0 auto;
  padding:18px 20px 36px;
  background:var(--nl-paper, #F0EDE6);
  border-radius:6px;
  font-family:var(--nl-font-body) !important;
  font-size:var(--nl-t-body);
  line-height:1.6;
  color:var(--nl-text);
  -webkit-text-size-adjust:100%;
}
.ix-nl *,.ix-nl *::before,.ix-nl *::after{box-sizing:border-box;}
.ix-nl img{max-width:100%;height:auto;display:block;}
.ix-nl a{color:var(--nl-ink);text-decoration:underline;text-decoration-color:var(--nl-accent);text-underline-offset:2px;}
.ix-nl a:hover{color:var(--nl-ink-deep);}

/* ── FA block ─────────────────────────────────────────────── */
/* Article surround. A fill groups the headline, photo and teaser without
   the hard edge a border gives — borders stay reserved for discrete units
   (events, businesses, listings, ads). Transparent by default. */
.ix-nl .nlw-fa{
  margin: 0 0 var(--nl-sp-fa, var(--nl-block-gap));
  background: var(--nl-article-bg, transparent);
  padding: var(--nl-article-pad, 0px);
  border-radius: var(--nl-article-radius, 6px);
}

.ix-nl .nlw-franchise{margin:16px 0 36px;}
.ix-nl .nlw-fa--split .nlw-franchise,.ix-nl .nlw-ts--split .nlw-franchise{margin:0 0 24px;}
.ix-nl .nlw-rubric{margin-bottom:10px;}
.ix-nl .nlw-ts .nlw-franchise{margin:0 0 14px;}
.ix-nl .nlw-ts .nlw-franchise img{width:auto;max-width:100%;max-height:none;margin:0;border-radius:0;display:block;}
.ix-nl .nlw-franchise img{display:block;margin-left:auto;margin-right:auto;max-height:55px;width:auto;}
/* Per-block franchise art sizing */
.ix-nl .nlw-fa .nlw-franchise img{max-height:var(--nl-franchise-h, 45px);}
.ix-nl .nlw-fa--split .nlw-franchise img{max-height:var(--nl-franchise-h, 40px);margin-left:0;margin-right:0;}
.ix-nl .nlw-ts .nlw-franchise img{max-height:var(--nl-ts-franchise-h, var(--nl-franchise-h, 80px));}

/* The franchise, in words. Email's fallback, now on web too. */
.ix-nl .nlw-franchise-name{
  margin: 0;
  padding: var(--nl-franchise-name-pad, 18px 20px);
  text-align: center;
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-franchise-name-size, var(--nl-t-title));
  font-weight: 600;
  font-style: italic;
  line-height: 1.2;
  color: var(--nl-franchise-name-ink, var(--nl-inv-ink, #FFFFFF));
  background: var(--nl-franchise-name-bg, var(--nl-ink));
  border-bottom: 2px solid var(--nl-franchise-name-rule, var(--nl-accent-soft, var(--nl-accent)));
}

.ix-nl .nlw-rubric{
  font-family:var(--nl-font-mono) !important;
  font-size: var(--nl-t-label);letter-spacing:2.2px;text-transform:uppercase;
  color:var(--nl-ink);font-weight:500;text-align:center;margin:0 0 8px;
}

.ix-nl .nlw-headline{
  font-family:var(--nl-font-display) !important;
  font-size: var(--nl-t-hero);line-height:1.36;font-weight:600;
  color:var(--nl-ink);text-align:center;margin:48px 0 20px;
}
.ix-nl .nlw-subhead{
  font-family:var(--nl-font-body) !important;
  font-size:var(--nl-subhead-size);line-height:var(--nl-subhead-lh, 1.5);color:var(--nl-text-mid);
  text-align:center;margin:0 0 18px;
}

/* byline — fresh-sheet anatomy: name [, title] / business line 2 */
.ix-nl .nlw-byline{
  text-align:center;margin:0 0 18px;
  font-size:var(--nl-t-byline);color:var(--nl-text-mid);
}
.ix-nl .nlw-byline .nlw-by-name{font-weight:700;color:var(--nl-text);}
.ix-nl .nlw-byline .nlw-by-biz{
  display:block;margin-top:2px;
  font-family:var(--nl-font-mono) !important;
  font-size:var(--nl-t-label);letter-spacing:1.2px;text-transform:uppercase;
  color:var(--nl-text-light);
}

.ix-nl .nlw-photo{margin:0 0 6px;}
.ix-nl .nlw-photo img{width:100%;border-radius:6px;}
/* FA centered: photo 580px max, centered; credit and teaser align to it */
.ix-nl .nlw-fa:not(.nlw-fa--split) .nlw-photo img{max-width:580px;display:block;margin-left:auto;margin-right:auto;}
.ix-nl .nlw-fa:not(.nlw-fa--split) .nlw-photo-credit{max-width:580px;margin-left:auto;margin-right:auto;text-align:right;}
.ix-nl .nlw-fa:not(.nlw-fa--split) .nlw-teaser{max-width:580px;margin-left:auto;margin-right:auto;}

.ix-nl .nlw-photo-credit{
  font-size:var(--nl-t-label);color:var(--nl-text-light);text-align:right;margin:4px 0 18px;
}

.ix-nl .nlw-teaser{margin:0 0 18px;}
.ix-nl .nlw-teaser p{margin:0 0 14px;}

/* paid receipt badge — frozen with the issue */
.ix-nl .nlw-paid{
  display:inline-block;background:var(--nl-accent);color:#FFFFFF;
  font-family:var(--nl-font-mono) !important;
  font-size:var(--nl-t-micro);letter-spacing:1.6px;font-weight:500;
  padding:3px 10px;border-radius:6px;margin:0 0 10px;
}

.ix-nl .nlw-cta{text-align:center;margin:6px 0 0;}
.ix-nl .nlw-cta a{
  display:inline-block;background:var(--nl-ink);color:#FFFFFF;
  font-family:var(--nl-font-body) !important;
  font-weight:700;font-size:var(--nl-t-button);text-decoration:none;
  padding:12px 26px;border-radius:6px;
}
.ix-nl .nlw-cta a:hover{background:var(--nl-ink-deep);color:#FFFFFF;}

/* ── payor's baked ad — the receipt, frozen with the issue ── */
.ix-nl .nlw-paidad{
  margin:26px 0 0;padding:18px 0 0;
  border-top:1px solid var(--nl-border-soft);
}
.ix-nl .nlw-paidad-label{
  font-family:var(--nl-font-mono) !important;
  font-size:var(--nl-t-micro);letter-spacing:1.8px;text-transform:uppercase;
  color:var(--nl-text-light);text-align:center;margin:0 0 10px;
}
.ix-nl .nlw-paidad a{display:block;text-decoration:none;}
.ix-nl .nlw-paidad img{margin:0 auto;border-radius:6px;}

/* ── sponsor / ad frames — collapsed until hydrated ───────── */
.ix-nl [data-ix-ad-frame]{display:none;}
.ix-nl [data-ix-ad-frame].ix-hydrated{display:block;margin:22px 0 0;}
.ix-nl [data-ix-ad-frame].ix-hydrated .nlw-sponsor-line{
  font-size:var(--nl-t-byline);color:var(--nl-text-mid);text-align:center;margin:0 0 8px;
}
.ix-nl [data-ix-ad-frame].ix-hydrated .nlw-sponsor-line b{color:var(--nl-text);}
.ix-nl [data-ix-ad-frame].ix-hydrated img{margin:0 auto;border-radius:6px;}

/* ── divider ──────────────────────────────────────────────── */
.ix-nl .nlw-divider{
  border: 0;
  border-top: var(--nl-divider-w, 2px) var(--nl-divider-style, solid) var(--nl-divider-color, var(--nl-border));
  width: var(--nl-divider-width, 100%);
  margin: var(--nl-divider-mt, 0px) auto var(--nl-sp-div, 60px);
}

/* ── shell furniture: issue bar + sign-off — brand via variables ── */
.ix-nl .nlw-issuebar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:var(--nl-bar-bg);border-radius:6px;padding:18px 18px;margin:0 0 26px;
}
.ix-nl .nlw-issuebar .nlw-ib-side{flex:0 0 auto;text-align:left;}
.ix-nl .nlw-issuebar .nlw-ib-side--right{text-align:right;}
.ix-nl .nlw-issuebar .nlw-ib-label{
  font-family:var(--nl-bar-label-font) !important;
  font-size:var(--nl-t-label);font-weight:700;letter-spacing:1.5px;color:var(--nl-bar-ink);opacity:.6;display:block;
}
.ix-nl .nlw-issuebar .nlw-ib-big{
  font-family:var(--nl-bar-font) !important;
  font-size:var(--nl-t-title);font-weight:700;color:var(--nl-bar-ink);line-height:1.1;display:block;
}
.ix-nl .nlw-issuebar .nlw-ib-title{
  flex:1 1 auto;text-align:center;margin:0;
  font-family:var(--nl-bar-font) !important;
  font-size: var(--nl-t-hero);font-weight:700;font-style:italic;
  color:var(--nl-bar-ink);line-height:1.2;
}
@media (max-width:480px){
  .ix-nl .nlw-issuebar{flex-wrap:wrap;justify-content:center;text-align:center;}
  .ix-nl .nlw-issuebar .nlw-ib-side,.ix-nl .nlw-issuebar .nlw-ib-side--right{text-align:center;}
}

.ix-nl .nlw-signoff{
  background:var(--nl-surface);border:2px solid var(--nl-signoff-border);border-radius:6px;
  padding:28px 20px;text-align:center;margin:6px 0 10px;
}
.ix-nl .nlw-signoff p{
  margin:0;font-family:var(--nl-signoff-font) !important;
  font-size: var(--nl-t-title);font-style:italic;line-height:1.45;color:var(--nl-signoff-ink);
}

/* ═══════════ v5 · B1 fan-out blocks (approved mockup v0_1) ═══════════ */

/* ── GR · publisher welcome — inverted card ── */
.ix-nl .nlw-gr{background:var(--nl-inv-bg);border-radius:var(--nl-gr-radius, 6px);padding:var(--nl-gr-pad, 26px 26px 24px);margin:0 0 var(--nl-gr-mb, var(--nl-block-gap));}
.ix-nl .nlw-gr-title{font-family:var(--nl-font-display) !important;font-style:italic;font-size: var(--nl-t-title);font-weight:600;color:var(--nl-inv-ink);margin:0 0 12px;}
.ix-nl .nlw-gr-rule{border:0;border-top:1px solid var(--nl-inv-rule);margin:0 0 14px;width:64px;}
.ix-nl .nlw-gr-body{color:var(--nl-inv-ink-soft);font-size:var(--nl-gr-body-size, var(--nl-body-size));}
.ix-nl .nlw-gr-body p{margin:0 0 12px;}
.ix-nl .nlw-gr-body p:last-child{margin-bottom:0;}

/* ── BA · banner — matted, labelled, whole card linked ──────────────────
   An unsold slot renders nothing: no mat, no label, no gap (D10).

   Consecutive BA blocks are wrapped by the Worker in .nlw-ba-group so a run
   of ads reads as one deliberate section rather than three singles that
   happen to be adjacent. Inside a group the individual mats stand down —
   the group carries the frame, the label appears once. */

.ix-nl .nlw-ba{
  margin: var(--nl-ba-mt, 0px) 0 var(--nl-ba-mb, var(--nl-block-gap));
}

.ix-nl .nlw-ba-label{
  font-family: var(--nl-font-mono) !important;
  font-size: var(--nl-ba-label-size, var(--nl-t-label));
  letter-spacing: var(--nl-ba-label-ls, 1.8px);
  text-transform: uppercase;
  color: var(--nl-ba-label-color, var(--nl-text-light));
  text-align: var(--nl-ba-label-align, center);
  margin: 0 0 var(--nl-ba-label-mb, 8px);
}

.ix-nl .nlw-ba a{
  display: block;
  background: var(--nl-ba-mat, var(--nl-surface));
  border: var(--nl-ba-border-w, 1px) solid var(--nl-ba-border, var(--nl-border));
  border-radius: var(--nl-ba-radius, 6px);
  padding: var(--nl-ba-pad, 10px);
  text-decoration: none;
}
.ix-nl .nlw-ba a:hover{ border-color: var(--nl-ba-border-hover, var(--nl-accent)); }

.ix-nl .nlw-ba img{
  display: block;
  width: 100%;
  margin: 0 auto;
  border-radius: var(--nl-ba-img-radius, 6px);
}

/* ── BA group — two or more consecutive slots ── */
.ix-nl .nlw-ba-group{
  /* v50: the group is a label and a mat; the mat is the frame */
  background: var(--nl-ba-group-bg, transparent);
  border: 0;
  padding: 0;
  margin: var(--nl-ba-group-mt, 0px) 0 var(--nl-ba-group-mb, var(--nl-block-gap));
}
.ix-nl .nlw-ba-group-mat{
  display: grid;
  gap: var(--nl-ba-group-gap, 8px);
  background: var(--nl-ba-group-mat-bg, var(--nl-surface));
  border: var(--nl-ba-group-border-w, 1px) solid var(--nl-ba-group-border, var(--nl-border));
  border-radius: var(--nl-ba-group-radius, 8px);
  padding: var(--nl-ba-group-mat-pad, 8px);
}

/* One label for the whole run, not one per ad */
.ix-nl .nlw-ba-group .nlw-ba-label{ display: none; }
.ix-nl .nlw-ba-group-label{
  font-family: var(--nl-font-mono) !important;
  font-size: var(--nl-ba-group-label-size, var(--nl-t-label));
  letter-spacing: var(--nl-ba-label-ls, 1.8px);
  text-transform: uppercase;
  color: var(--nl-ba-group-label-color, var(--nl-text-light));
  text-align: var(--nl-ba-label-align, center);
  margin: 0 0 var(--nl-ba-group-label-mb, 8px);
}

/* Inside a group the mats stand down — the group is the frame */
.ix-nl .nlw-ba-group .nlw-ba{ margin: 0; }
.ix-nl .nlw-ba-group .nlw-ba:last-child{ margin-bottom: 0; }
.ix-nl .nlw-ba-group .nlw-ba a{
  background: var(--nl-ba-group-mat, transparent);
  border-color: var(--nl-ba-group-inner-border, transparent);
  padding: var(--nl-ba-group-inner-pad, 0);
}

/* ── FA split variants ── */
.ix-nl .nlw-fa--split .nlw-fa-cols{display:flex;gap:22px;align-items:stretch;flex-wrap:wrap;}
.ix-nl .nlw-fa--split .nlw-fa-media{flex:0 0 calc(50% - 11px);}
.ix-nl .nlw-fa--split .nlw-fa-copy{flex:0 0 calc(50% - 11px);display:flex;flex-direction:column;justify-content:center;}
.ix-nl .nlw-fa--split .nlw-fa-media img{width:100%;border-radius:6px;}
/* Split photo: 1:1 square, cover crop, no distortion */
.ix-nl .nlw-fa--split .nlw-photo--sq,
.ix-nl .nlw-ts--split .nlw-photo--sq{aspect-ratio:1/1;overflow:hidden;border-radius:6px;}
.ix-nl .nlw-fa--split .nlw-photo--sq img,
.ix-nl .nlw-ts--split .nlw-photo--sq img{width:100%;height:100%;object-fit:cover;object-position:center;border-radius:0;}

.ix-nl .nlw-fa--photoleft .nlw-fa-cols{flex-direction:row;}
.ix-nl .nlw-fa--photoright .nlw-fa-cols{flex-direction:row-reverse;}
.ix-nl .nlw-fa--split .nlw-headline,
.ix-nl .nlw-fa--split .nlw-subhead,
.ix-nl .nlw-fa--split .nlw-byline,
.ix-nl .nlw-fa--split .nlw-cta{text-align:left;}
.ix-nl .nlw-fa--split .nlw-headline{font-size: var(--nl-t-hero);line-height:1.32;margin-top:0;}
.ix-nl .nlw-fa--split .nlw-rubric{text-align:left;}
@media (max-width:560px){
  .ix-nl .nlw-fa--split .nlw-fa-cols{flex-direction:column;}
  .ix-nl .nlw-fa--split .nlw-fa-media{flex-basis:auto;width:100%;}
}


/* ── TS · teaser story — the FA anatomy at digest scale ── */

.ix-nl .nlw-ts{
  margin: 0 0 var(--nl-sp-ts, var(--nl-block-gap));
  background: var(--nl-article-bg, transparent);
  padding: var(--nl-article-pad, 0px);
  border-radius: var(--nl-article-radius, 6px);
}
.ix-nl .nlw-ts .nlw-headline{font-size: var(--nl-t-hero);line-height:1.32;}
.ix-nl .nlw-ts .nlw-subhead{font-size:var(--nl-ts-subhead-size, var(--nl-subhead-size));line-height:var(--nl-subhead-lh, 1.5);margin-bottom:18px;}
.ix-nl .nlw-ts .nlw-teaser{font-size:var(--nl-ts-teaser-size, var(--nl-body-size));}
.ix-nl .nlw-ts .nlw-cta a{font-size:var(--nl-t-button);padding:10px 20px;}
.ix-nl .nlw-ts--split .nlw-ts-cols{display:flex;gap:18px;align-items:stretch;flex-wrap:wrap;}
.ix-nl .nlw-ts--split .nlw-ts-media{flex:0 0 calc(50% - 9px);}
/* Split below — teaser and CTA run full width under the photo+headline columns */
.ix-nl .nlw-fa--split .nlw-split-below,
.ix-nl .nlw-ts--split .nlw-split-below{flex:0 0 100%;margin-top:16px;}
.ix-nl .nlw-fa--split .nlw-cta,
.ix-nl .nlw-ts--split .nlw-cta{text-align:left;}

.ix-nl .nlw-ts--split .nlw-ts-copy{flex:0 0 calc(50% - 9px);display:flex;flex-direction:column;justify-content:center;}
.ix-nl .nlw-ts--split .nlw-ts-media img{width:100%;border-radius:6px;}
.ix-nl .nlw-ts--photoleft .nlw-ts-cols{flex-direction:row;}
.ix-nl .nlw-ts--photoright .nlw-ts-cols{flex-direction:row-reverse;}
.ix-nl .nlw-ts--split .nlw-headline,
.ix-nl .nlw-ts--split .nlw-subhead,
.ix-nl .nlw-ts--split .nlw-byline,
.ix-nl .nlw-ts--split .nlw-rubric,
.ix-nl .nlw-ts--split .nlw-cta{text-align:left;}
@media (max-width:560px){
  .ix-nl .nlw-ts--split .nlw-ts-cols{flex-direction:column;}
  .ix-nl .nlw-ts--split .nlw-ts-media{flex-basis:auto;width:100%;}
}

/* ── RE · listing card ── */
/* ── RE · Local Real Estate — editorial list ──────────────────────────
   No panel and no masthead art by default: a heading and a rule do the same
   job in a fraction of the height. Holds four to eight listings without
   getting long, and never competes with the blocks above or below.

   The section is sponsorable. The sponsor slot lives in the heading and
   collapses to nothing when unsold (D10) — no reserved space, no empty
   frame. Label copy is FTC-conforming per D12; "Presented by" alone is not
   sufficient on a natively styled unit, so the slot carries a Sponsored
   eyebrow as well. */

.ix-nl .nlw-re-block{
  background: var(--nl-re-bg, transparent);
  padding: var(--nl-re-block-pad, 0px);
  border-radius: var(--nl-re-block-radius, 0px);
  margin: 0 0 var(--nl-re-block-mb, var(--nl-block-gap));
}

/* Optional masthead art. Off by default in this treatment — set
   --nl-re-art-display:block in the shell to bring it back. */
.ix-nl .nlw-re-block .nlw-franchise{
  display: var(--nl-re-art-display, none);
  margin: 0 0 var(--nl-re-art-mb, 16px);
}
.ix-nl .nlw-re-block .nlw-franchise img{
  display: block; width: 100%; max-width: none;
  max-height: var(--nl-re-art-h, 120px); object-fit: cover; border-radius: 0;
}

/* ── Heading ── */
.ix-nl .nlw-re-head{
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 14px;
  border-bottom: var(--nl-re-rule-w, 2px) solid var(--nl-re-rule-color, var(--nl-ink));
  padding-bottom: var(--nl-re-head-pad, 8px);
  margin: 0 0 var(--nl-re-head-mb, 4px);
}
.ix-nl .nlw-re-title{
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-re-title-size, var(--nl-t-title));
  font-weight: 600;
  line-height: 1;
  color: var(--nl-re-title-color, var(--nl-ink));
  margin: 0;
}
.ix-nl .nlw-re-count{
  font-family: var(--nl-font-mono) !important;
  font-size: var(--nl-re-count-size, var(--nl-t-label));
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--nl-re-count-color, var(--nl-text-light));
  white-space: nowrap;
}

/* ── Sponsor slot — collapses entirely when unsold ── */
.ix-nl .nlw-re-sponsor{
  display: flex;
  align-items: center;
  gap: var(--nl-re-sponsor-gap, 7px);
  text-decoration: none;
}
.ix-nl .nlw-re-sponsor-label{
  font-family: var(--nl-font-mono) !important;
  font-size: var(--nl-re-sponsor-label-size, var(--nl-t-micro));
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--nl-re-sponsor-label-color, var(--nl-text-light));
  text-align: right;
  line-height: 1.35;
}
.ix-nl .nlw-re-sponsor-label b{
  display: block;
  font-weight: 700;
  font-size: var(--nl-re-sponsor-name-size, var(--nl-t-label));
  letter-spacing: 0.06em;
  color: var(--nl-re-sponsor-name-color, var(--nl-text));
}
.ix-nl .nlw-re-sponsor img{
  display: block;
  height: var(--nl-re-sponsor-logo-h, 36px);
  width: auto;
  border-radius: var(--nl-re-sponsor-logo-radius, 2px);
}

/* ── Listing row ── */
.ix-nl .nlw-re{
  display: flex;
  align-items: center;
  gap: var(--nl-re-row-gap, 16px);
  padding: var(--nl-re-row-pad, 26px) 0;
  border-bottom: 1px solid var(--nl-re-divider, var(--nl-border));
  background: none;
  border-radius: 0;
  margin: 0;
}
.ix-nl .nlw-re:last-child{ border-bottom: 0; }

.ix-nl .nlw-re-photo{ flex: 0 0 var(--nl-re-thumb-w, 120px); position: relative; }
.ix-nl .nlw-re-photo img{
  display: block;
  width: var(--nl-re-thumb-w, 120px);
  height: var(--nl-re-thumb-h, 80px);
  object-fit: cover;
  border-radius: var(--nl-re-thumb-radius, 3px);
}

.ix-nl .nlw-re-body{
  flex: 1 1 auto;
  min-width: 0;
  padding: 0;
  display: block;
}

.ix-nl .nlw-re-topline{
  display: flex;
  align-items: center;
  gap: var(--nl-re-flag-gap, 9px);
  margin: 0 0 var(--nl-re-addr-mb, 3px);
}

.ix-nl .nlw-re-address{
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-re-addr-size, var(--nl-t-title));
  font-weight: 600;
  line-height: 1.2;
  color: var(--nl-re-addr-color, var(--nl-ink));
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ix-nl .nlw-re-address a{
  color: inherit;
  text-decoration: none;
  line-height: inherit;
}

/* Status chip: filled, on its own line above the address. */
.ix-nl .nlw-re-flag{
  display: inline-block;
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-re-flag-size, 9px);
  font-weight: 700;
  letter-spacing: var(--nl-re-flag-ls, 1.4px);
  text-transform: uppercase;
  color: var(--nl-re-flag-ink, #FFFFFF);
  background: var(--nl-re-flag-bg, #5F8C4B);
  border: 0;
  padding: var(--nl-re-flag-pad-v, 4px) var(--nl-re-flag-pad-h, 9px);
  border-radius: var(--nl-re-flag-radius, 2px);
  margin: 0 0 var(--nl-re-flag-mb, 6px);
  white-space: nowrap;
  position: static;
}

.ix-nl .nlw-re-specs{
  display: block;
  font-family: var(--nl-font-mono) !important;
  font-size: var(--nl-re-specs-size, var(--nl-t-label));
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--nl-re-specs-color, var(--nl-text-light));
  border: 0;
  padding: 0;
  margin: 0;
}

.ix-nl .nlw-re-price{
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-re-price-size, var(--nl-t-price));
  font-weight: 600;
  line-height: 1;
  color: var(--nl-re-price-color, var(--nl-ink));
  white-space: nowrap;
  margin: 0;
  flex: 0 0 auto;
}

.ix-nl .nlw-re-agent{
  font-size: var(--nl-re-agent-size, var(--nl-t-byline));
  color: var(--nl-re-agent-color, var(--nl-text-light));
  margin: 3px 0 0;
}

/* ── Sponsor banner — the payer's creative, at the foot of the section.
   Frozen receipt (D12): the ad as bought, not a live lookup. Collapses
   entirely when the section is unsold. The heading credit and this banner
   are one purchase; a section never carries one without the other. */
.ix-nl .nlw-re-sponsorad{
  display: block;
  margin: var(--nl-re-sponsorad-mt, 18px) 0 0;
  padding: var(--nl-re-sponsorad-pad, 10px);
  background: var(--nl-re-sponsorad-mat, var(--nl-surface, #ffffff));
  border: 1px solid var(--nl-re-sponsorad-border, var(--nl-border));
  border-radius: var(--nl-re-sponsorad-radius, 6px);
  text-decoration: none;
}
.ix-nl .nlw-re-sponsorad img{
  display: block;
  width: 100%;
  border-radius: var(--nl-re-sponsorad-img-radius, 4px);
}
.ix-nl .nlw-re-sponsorad-label{
  display: block;
  font-family: var(--nl-font-mono) !important;
  font-size: var(--nl-re-sponsorad-label-size, var(--nl-t-micro));
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--nl-re-sponsorad-label-color, var(--nl-text-light));
  text-align: var(--nl-re-sponsorad-label-align, center);
  margin: 0 0 var(--nl-re-sponsorad-label-mb, 7px);
}

/* Exclusive showcase: every listing came from the payer, so the section
   needs a plainer disclosure than the heading credit alone. */
/* Exclusive showcase: every agent line would read the same, so suppress it. */
.ix-nl .nlw-re--exclusive .nlw-re-agent{ display: none; }

.ix-nl .nlw-re-exclusive{
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-re-exclusive-size, var(--nl-t-body));
  line-height: 1.45;
  color: var(--nl-re-exclusive-color, var(--nl-text-light));
  background: var(--nl-re-exclusive-bg, transparent);
  padding: var(--nl-re-exclusive-pad, 0px);
  margin: var(--nl-re-exclusive-mt, 10px) 0 0;
}

@media (max-width:560px){
  /* Image-forward: the photo leads, everything stacks under it. */
  .ix-nl .nlw-re{ flex-direction: column; align-items: stretch; gap: 0; }
  .ix-nl .nlw-re-photo{ flex: 0 0 auto; margin: 0 0 10px; }
  .ix-nl .nlw-re-photo img{
    width: 100%;
    height: var(--nl-re-photo-h-m, 150px);
    border-radius: var(--nl-re-photo-radius-m, 4px);
  }
  .ix-nl .nlw-re-address{ font-size: var(--nl-re-addr-size-m, 20px); white-space: normal; }
  .ix-nl .nlw-re-price{ font-size: var(--nl-re-price-size-m, 19px); margin: 6px 0 0; }
  .ix-nl .nlw-re-head{ flex-direction: column; align-items: flex-start; gap: 8px; }
}

.ix-nl .nlw-re-agent img{width:44px;height:44px;border-radius:6px;object-fit:contain;background:var(--nl-cream);}
.ix-nl .nlw-re-agent b{color:var(--nl-text);}
.ix-nl .nlw-re-agent .nlw-re-brokerage{display:block;font-family:var(--nl-font-mono) !important;font-size:var(--nl-t-label);letter-spacing:1.2px;text-transform:uppercase;color:var(--nl-text-light);}
.ix-nl .nlw-re .nlw-cta{text-align:left;}

/* ── TXA · The Find — framed theme, open cards ────────────────────────
   The frame does the grouping: one container holds the masthead, the theme
   plate and every customer, so "these belong together" is stated once
   instead of once per card.

   Cards inside carry no border and no logo box. What makes them read as
   contents of the frame rather than items on the sheet is the side padding
   they sit inside, and a hairline between each.

   The theme plate is white on the frame's warm fill with air on all four
   sides and a shadow, so it sits on a different plane from everything else
   in the block. It is the only white object here, which is what makes it
   read as the one important thing. It does not overlap the masthead. */

.ix-nl .nlw-txa{
  background: var(--nl-txa-frame-bg, var(--nl-cream, #F3EFE7));
  border: 1px solid var(--nl-txa-frame-border, var(--nl-border));
  border-radius: var(--nl-txa-frame-radius, 6px);
  padding: 0 var(--nl-txa-frame-pad, 34px) var(--nl-txa-frame-pad-b, 26px);
  margin: 0 0 var(--nl-txa-mb, var(--nl-block-gap));
  overflow: hidden;
}

/* Masthead runs edge to edge by pulling against the frame padding. */
.ix-nl .nlw-txa .nlw-franchise{
  margin: 0 calc(-1 * var(--nl-txa-frame-pad, 34px)) 0;
  text-align: center;
}
.ix-nl .nlw-txa .nlw-franchise img{
  display: block; width: 100%; max-width: none;
  max-height: var(--nl-txa-art-h, 180px);
  object-fit: cover; border-radius: 0; margin: 0;
}

/* ── Theme plate ── */
.ix-nl .nlw-txa-plate{
  background: var(--nl-txa-plate-bg, #ffffff);
  border: 1px solid var(--nl-txa-plate-border, #E4DACA);
  border-radius: var(--nl-txa-plate-radius, 4px);
  box-shadow: var(--nl-txa-plate-shadow, 0 8px 26px rgba(0,0,0,.12));
  margin: var(--nl-txa-plate-mt, 26px) 0 var(--nl-txa-plate-mb, 24px);
  padding: var(--nl-txa-plate-pad-v, 26px) var(--nl-txa-plate-pad-h, 28px) var(--nl-txa-plate-pad-b, 22px);
  text-align: center;
}
.ix-nl .nlw-txa-eyebrow{
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-txa-eyebrow-size, var(--nl-t-micro));
  font-weight: 600;
  letter-spacing: var(--nl-txa-eyebrow-ls, 3px);
  text-transform: uppercase;
  color: var(--nl-txa-eyebrow-color, var(--nl-txa-meta-color));
  margin: 0;
}
.ix-nl .nlw-txa-kicker{
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-txa-kicker-size, var(--nl-t-hero));
  font-weight: 700;
  font-style: normal;
  line-height: 1.05;
  color: var(--nl-txa-kicker-color, var(--nl-ink));
  text-align: center;
  margin: var(--nl-txa-kicker-mt, 6px) 0 0;
}
/* the accent word inside the theme carries the one italic in the plate */
.ix-nl .nlw-txa-kicker em{
  font-style: italic;
  font-weight: 600;
  color: var(--nl-txa-kicker-accent, var(--nl-txa-meta-color));
}
.ix-nl .nlw-txa-count{
  display: flex; align-items: center; justify-content: center;
  gap: var(--nl-txa-count-gap, 10px);
  margin: var(--nl-txa-count-mt, 12px) 0 0;
}
.ix-nl .nlw-txa-count span{ flex: 1; height: 1px; background: var(--nl-txa-count-rule, var(--nl-border)); }
.ix-nl .nlw-txa-count i{
  font-family: var(--nl-font-ui) !important;
  font-style: normal; white-space: nowrap;
  font-size: var(--nl-txa-count-size, var(--nl-t-micro));
  font-weight: 600;
  letter-spacing: var(--nl-txa-count-ls, 2.6px);
  text-transform: uppercase;
  color: var(--nl-txa-count-color, var(--nl-text-light));
}

/* ── Cards: open, hairline separated ── */
.ix-nl .nlw-txa-card{
  background: none; border: 0; border-radius: 0;
  border-bottom: 1px solid var(--nl-txa-divider, #DED7C7);
  padding: var(--nl-txa-card-pad, 20px) 0;
  margin: 0;
  position: static;
}
.ix-nl .nlw-txa-card:last-child{ border-bottom: 0; padding-bottom: 0; }

.ix-nl .nlw-txa-head{
  display: flex; gap: var(--nl-txa-card-gap, 16px);
  align-items: flex-start; margin: 0 0 var(--nl-txa-head-mb, 12px);
}
/* The mark. A square turned 45 degrees; Outlook keeps it square. */
.ix-nl .nlw-txa-mark{
  flex: 0 0 var(--nl-txa-mark-col, 46px);
  display: block;
}
.ix-nl .nlw-txa-mark i{
  display: block;
  width: var(--nl-txa-mark-size, 14px);
  height: var(--nl-txa-mark-size, 14px);
  margin: var(--nl-txa-mark-offset, 6px) 0 0;
  background: var(--nl-txa-mark-color, var(--nl-accent));
  transform: rotate(45deg);
}
/* logo styling retired with v38; the rule stays so an older template
   that still prints .nlw-txa-logo does not render an unsized image */
.ix-nl .nlw-txa-logo{ display: none; }
.ix-nl .nlw-txa-copy{ flex: 1 1 auto; min-width: 0; }

.ix-nl .nlw-txa-name{
  font-family: var(--nl-txa-name-font, var(--nl-font-display)) !important;
  font-size: var(--nl-txa-name-size, var(--nl-t-title));
  font-style: var(--nl-txa-name-style, italic);
  font-weight: var(--nl-txa-name-weight, 600);
  line-height: 1.15;
  color: var(--nl-txa-name-color, #2C3A4A);
  margin: 0 0 var(--nl-txa-name-mb, 3px);
}
.ix-nl .nlw-txa-meta{
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-txa-meta-size, var(--nl-t-lead));
  letter-spacing: var(--nl-txa-meta-ls, 2.6px);
  text-transform: uppercase;
  color: var(--nl-txa-meta-color, var(--nl-text-mid));
  margin: 0;
}
.ix-nl .nlw-txa-blurb{
  font-family: var(--nl-font-body) !important;
  font-size: var(--nl-txa-blurb-size, var(--nl-t-body));
  line-height: var(--nl-txa-blurb-lh, var(--nl-body-lh));
  color: var(--nl-txa-blurb-color, #1E2A36);
  margin: 0 0 var(--nl-txa-blurb-mb, 11px);
}
.ix-nl .nlw-txa-detail{
  font-family: var(--nl-font-mono) !important;
  font-size: var(--nl-txa-detail-size, var(--nl-t-label));
  letter-spacing: 1px;
  color: var(--nl-txa-detail-color, var(--nl-text-light));
  margin: 0 0 var(--nl-txa-detail-mb, 10px);
}

/* No card means no corner to park a circle in — the CTA is a link. */
.ix-nl .nlw-txa-card .nlw-txa-visit{
  position: static;
  display: inline-block;
  width: auto; height: auto;
  background: none; border-radius: 0;
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-txa-visit-size, var(--nl-t-button));
  font-weight: 700;
  letter-spacing: var(--nl-txa-visit-ls, 2.4px);
  text-transform: uppercase;
  color: var(--nl-txa-visit-color, var(--nl-ink));
  text-decoration: none;
  border-bottom: 2px solid var(--nl-txa-visit-rule, var(--nl-accent));
  padding: 0 0 3px;
}
.ix-nl .nlw-txa-card .nlw-txa-visit::after{ content: "\00A0\2192"; font-size: inherit; }

/* Disclosure — inside the frame, under the last card. */
.ix-nl .nlw-txa-disclosure{
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-txa-disclosure-size, var(--nl-t-micro));
  font-weight: 600;
  letter-spacing: var(--nl-txa-disclosure-ls, 2px);
  text-transform: uppercase;
  color: var(--nl-txa-disclosure-color, var(--nl-text-mid));
  text-align: center;
  margin: var(--nl-txa-disclosure-mt, 22px) 0 0;
}

@media (max-width:560px){
  .ix-nl .nlw-txa{ padding-left: 16px; padding-right: 16px; }
  .ix-nl .nlw-txa .nlw-franchise{ margin-left: -16px; margin-right: -16px; }
  .ix-nl .nlw-txa-plate{ padding-left: 18px; padding-right: 18px; }
  .ix-nl .nlw-txa-head{ gap: 12px; }
}


/* ── spacer ── */
/* Spacer — vertical air with no rule. The per-issue escape hatch when two
   blocks need more room than the platform gap gives them. If the same
   spacer keeps appearing in the same place, the block gap is wrong. */
.ix-nl .nlw-spacer{
  height: var(--nl-spacer-h, 68px);
  margin: 0;
}

/* ═══════════ v6 · EV · Events Display Engine ═══════════ */
/* One block renders 1..N events. .nlw-ev--nN comes from x_evCount.        */
/* 1-3 = cards. 4+ = compact rows: photo and teaser drop, chip narrows.    */
/* Adding an arrangement means adding a rule here, not a template.         */

/* Brand-at-shell per D17: every value here is a --nl-* variable with a */
/* neutral platform default. No publisher appears in this file. */

.ix-nl .nlw-ev{
  padding: var(--nl-block-pad, 28px) var(--nl-gutter, 24px);
  background: var(--nl-ev-bg, var(--nl-surface, #ffffff));
  margin: 0 0 var(--nl-ev-mb, var(--nl-block-gap));
}

/* EV masthead art — height is title-level, set in the shell.
   Art URL itself comes from TITLES-ADMIN via the render context. */
.ix-nl .nlw-ev .nlw-franchise{text-align:center;margin:0 0 16px;}
.ix-nl .nlw-ev .nlw-franchise img{
  display:block;margin:0 auto;width:auto;max-width:100%;
  max-height:var(--nl-ev-franchise-h, 120px);
}

.ix-nl .nlw-ev-art{
  margin: 0 0 18px;
}
.ix-nl .nlw-ev-art img{
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--nl-radius) var(--nl-radius) 0 0;
}

.ix-nl .nlw-ev-heading{
  font-family: var(--nl-font-display, Georgia, serif) !important;
  font-size: var(--nl-h2-size, var(--nl-t-title));
  font-weight: 600;
  color: var(--nl-ink);
  margin: 0 0 18px;
  letter-spacing: -0.01em;
}

/* ── Grid. Density comes from the count class, nothing else. ───────── */

.ix-nl .nlw-ev-grid{
  display: grid;
  gap: var(--nl-ev-gap, 16px);
  grid-template-columns: 1fr;
}

/* Offered counts are 1, 2, 4, 5. n3 is not offered in the picker because a
   third card leaves a hole in a two-column grid; if it ever arrives from data
   it falls back to the 2-up grid rather than breaking. */
/* Two-up card grid retired: a lone event is a card, everything else stacks
   as full-width rows. Kept as a no-op guard so any stale --n2/--n3 class
   still lands in the row treatment below rather than in a dead grid. */
.ix-nl .nlw-ev--dead-grid{
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}

/* 4 and up drop to compact rows: chip left, text right, no photo. */
.ix-nl .nlw-ev--n2 .nlw-ev-card,
.ix-nl .nlw-ev--n3 .nlw-ev-card,
.ix-nl .nlw-ev--n4 .nlw-ev-card,
.ix-nl .nlw-ev--n5 .nlw-ev-card,
.ix-nl .nlw-ev--n6 .nlw-ev-card,
.ix-nl .nlw-ev--n7 .nlw-ev-card,
.ix-nl .nlw-ev--n8 .nlw-ev-card{
  flex-direction: row;
  align-items: flex-start;
  gap: 14px;
}
/* Compact rows hide the photo and teaser by default, but both are tokens
   rather than hard rules. A title that wants teasers in its compact rows
   sets --nl-ev-teaser-show-n4:block in its shell; the platform default
   stays hidden. Note this is a DESIGN switch: whether the teaser has any
   content at all is a separate question the template already answers with
   x_hasTeaser. Turning it on here shows nothing if the event has no
   teaser text. */
.ix-nl .nlw-ev--n2 .nlw-ev-photo,
.ix-nl .nlw-ev--n3 .nlw-ev-photo,
.ix-nl .nlw-ev--n4 .nlw-ev-photo,
.ix-nl .nlw-ev--n5 .nlw-ev-photo,
.ix-nl .nlw-ev--n6 .nlw-ev-photo,
.ix-nl .nlw-ev--n7 .nlw-ev-photo,
.ix-nl .nlw-ev--n8 .nlw-ev-photo{
  display: var(--nl-ev-photo-show-n4, none);
}
.ix-nl .nlw-ev--n2 .nlw-ev-teaser,
.ix-nl .nlw-ev--n3 .nlw-ev-teaser,
.ix-nl .nlw-ev--n4 .nlw-ev-teaser,
.ix-nl .nlw-ev--n5 .nlw-ev-teaser,
.ix-nl .nlw-ev--n6 .nlw-ev-teaser,
.ix-nl .nlw-ev--n7 .nlw-ev-teaser,
.ix-nl .nlw-ev--n8 .nlw-ev-teaser{
  display: var(--nl-ev-teaser-show-n4, none);
  font-size: var(--nl-ev-teaser-size-n4, var(--nl-body-size));
  line-height: var(--nl-ev-teaser-lh-n4, var(--nl-body-lh));
}

/* ── Card ──────────────────────────────────────────────────────────── */

.ix-nl .nlw-ev-card{
  display: flex;
  flex-direction: column;
  background: var(--nl-card-bg);
  border: 1px solid var(--nl-rule);
  border-radius: var(--nl-radius);
  overflow: hidden;
}

/* ── Date chip ─────────────────────────────────────────────────────── */

/* Chip geometry and type are per-density. n1, n2 and n4+ are three
   different objects: a full-width header on a single card, a header on a
   half-width card, and a narrow left tile in a compact row. The base rule
   below holds the shared skin; the density blocks further down set the
   size tokens each one uses. */
.ix-nl .nlw-ev-chip{
  display: block;
  text-align: center;
  padding: var(--nl-ev-chip-pad, 8px 10px 9px);
  background: var(--nl-ev-chip-bg, var(--nl-ink));
  color: var(--nl-ev-chip-ink, #ffffff);
  text-decoration: none;
  flex: 0 0 auto;
}
.ix-nl .nlw-ev-chip-mo{
  display: block;
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-ev-chip-mo-size, var(--nl-t-micro));
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: var(--nl-ev-chip-mo-lh, 1.167);
  color: var(--nl-ev-chip-mo-color, var(--nl-accent));
}
.ix-nl .nlw-ev-chip-day{
  display: block;
  font-family: var(--nl-ev-chip-day-font, var(--nl-font-ui)) !important;
  font-size: var(--nl-ev-chip-day-size, 32px);
  font-weight: 700;
  line-height: var(--nl-ev-chip-day-lh, 0.9);
  padding: var(--nl-ev-chip-day-pad, 2px 0);
}
.ix-nl .nlw-ev-chip-dow{
  display: block;
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-ev-chip-dow-size, var(--nl-t-micro));
  letter-spacing: 0.08em;
  text-transform: uppercase;
  line-height: var(--nl-ev-chip-dow-lh, 0.889);
  opacity: 0.65;
}

/* ── Chip per density ──────────────────────────────────────────────
   Each density sets its own size tokens. Change one and the others are
   untouched. */

/* n1 — single full-width card, chip is a wide header */
.ix-nl .nlw-ev--n1 .nlw-ev-chip{
  --nl-ev-chip-day-size: var(--nl-ev-chip-day-size-n1, var(--nl-t-numeral));
  --nl-ev-chip-mo-size:  var(--nl-ev-chip-mo-size-n1, 13px);
  --nl-ev-chip-dow-size: var(--nl-ev-chip-dow-size-n1, 11px);
  --nl-ev-chip-pad:      var(--nl-ev-chip-pad-n1, 9px 10px 8px);
  --nl-ev-chip-mo-lh:    0.923;
  --nl-ev-chip-day-lh:   0.974;
  --nl-ev-chip-dow-lh:   0.818;
}

/* n2 — two cards side by side, chip is a half-width header */
.ix-nl .nlw-ev--n3 .nlw-ev-chip{
  --nl-ev-chip-day-size: var(--nl-ev-chip-day-size-n2, 38px);
  --nl-ev-chip-mo-size:  var(--nl-ev-chip-mo-size-n2, 12px);
  --nl-ev-chip-dow-size: var(--nl-ev-chip-dow-size-n2, 11px);
  --nl-ev-chip-pad:      var(--nl-ev-chip-pad-n2, 8px 10px 9px);
}

/* n4+ — compact rows, chip is a narrow left tile of fixed width so rows align */
.ix-nl .nlw-ev--n2 .nlw-ev-chip,
.ix-nl .nlw-ev--n3 .nlw-ev-chip,
.ix-nl .nlw-ev--n4 .nlw-ev-chip,
.ix-nl .nlw-ev--n5 .nlw-ev-chip,
.ix-nl .nlw-ev--n6 .nlw-ev-chip,
.ix-nl .nlw-ev--n7 .nlw-ev-chip,
.ix-nl .nlw-ev--n8 .nlw-ev-chip{
  width: var(--nl-ev-chip-w-n4, 78px);
  border-radius: var(--nl-radius-sm, 6px);
  margin: 12px 0 12px 12px;
  --nl-ev-chip-day-size: var(--nl-ev-chip-day-size-n4, calc(var(--nl-t-numeral) * 0.8));
  --nl-ev-chip-mo-size:  var(--nl-ev-chip-mo-size-n4, 12px);
  --nl-ev-chip-dow-size: var(--nl-ev-chip-dow-size-n4, 9px);
  --nl-ev-chip-pad:      var(--nl-ev-chip-pad-n4, 6px 6px 7px);
}

/* ── Body ──────────────────────────────────────────────────────────── */

.ix-nl .nlw-ev-body{
  padding: 12px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 1 1 auto;
  min-width: 0;
}

.ix-nl .nlw-ev-photo{
  display: block;
  margin: 0 0 8px;
}
.ix-nl .nlw-ev-photo img{
  display: block;
  width: 100%;
  height: auto;
  border-radius: 4px;
}

.ix-nl .nlw-ev-eyebrow{
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-ev-eyebrow-size, var(--nl-t-micro));
  font-weight: 700;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  line-height: 1.3;
  color: var(--nl-ev-eyebrow-color, var(--nl-highlight-ink));
  margin: 0;
}

.ix-nl .nlw-ev-title{
  font-family: var(--nl-font-display, Georgia, serif) !important;
  font-size: var(--nl-ev-title-size, var(--nl-t-title));
  font-weight: 600;
  line-height: var(--nl-ev-title-lh, 1.25);
  margin: 0;
  padding: var(--nl-ev-title-pad, 0);
}
.ix-nl .nlw-ev-title a{
  color: var(--nl-ink);
  text-decoration: none;
  line-height: inherit;
}
.ix-nl .nlw-ev-title a:hover { text-decoration: underline; }

.ix-nl .nlw-ev-meta{
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-ev-meta-size, 12px);
  line-height: var(--nl-ev-meta-lh, 1.45);
  color: var(--nl-ev-meta-color, var(--nl-ink-soft));
  margin: 0;
  padding: var(--nl-ev-meta-pad, 0);
}
.ix-nl .nlw-ev-sep { margin: 0 6px; opacity: 0.5; }

/* The date leads the meta line on a one-event block only; at 2+ the tile
   at left already carries it. */
.ix-nl .nlw-ev--n2 .nlw-ev-date,
.ix-nl .nlw-ev--n3 .nlw-ev-date,
.ix-nl .nlw-ev--n4 .nlw-ev-date,
.ix-nl .nlw-ev--n5 .nlw-ev-date,
.ix-nl .nlw-ev--n6 .nlw-ev-date,
.ix-nl .nlw-ev--n7 .nlw-ev-date,
.ix-nl .nlw-ev--n8 .nlw-ev-date,
.ix-nl .nlw-ev--n2 .nlw-ev-date + .nlw-ev-sep,
.ix-nl .nlw-ev--n3 .nlw-ev-date + .nlw-ev-sep,
.ix-nl .nlw-ev--n4 .nlw-ev-date + .nlw-ev-sep,
.ix-nl .nlw-ev--n5 .nlw-ev-date + .nlw-ev-sep,
.ix-nl .nlw-ev--n6 .nlw-ev-date + .nlw-ev-sep,
.ix-nl .nlw-ev--n7 .nlw-ev-date + .nlw-ev-sep,
.ix-nl .nlw-ev--n8 .nlw-ev-date + .nlw-ev-sep{
  display: var(--nl-ev-date-show-n4, none);
}

.ix-nl .nlw-ev-teaser{
  font-family: var(--nl-font-body, Arial, sans-serif) !important;
  font-size: var(--nl-ev-teaser-size, var(--nl-body-size));
  line-height: var(--nl-ev-teaser-lh, var(--nl-body-lh));
  color: var(--nl-ink-body);
  margin: 0;
  padding: var(--nl-ev-teaser-pad, 0);
}
/* Collapse rather than leave a gap when the field is empty. */
.ix-nl .nlw-ev-teaser:empty { display: none; }

/* Card CTA keeps its wording; the arrow is appended in the ::after below
   so the template text stays plain. */
.ix-nl .nlw-ev-cta{
  align-self: flex-start;
  font-family: var(--nl-font-ui) !important;
  font-size:var(--nl-t-button);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--nl-accent-ink);
  background: var(--nl-accent);
  padding: 8px 16px;
  border-radius: var(--nl-radius-pill, 999px);
  text-decoration: none;
  margin-top: 2px;
}
.ix-nl .nlw-ev--n1 .nlw-ev-cta::after{
  content: "\00A0\2192";             /* nbsp + right arrow */
}
/* Compact rows: the whole row already links, so the pill is redundant and
   visually heavy. It becomes a chevron parked on the right edge, centred
   against the row, reading as an affordance rather than a button. */
.ix-nl .nlw-ev--n2 .nlw-ev-card,
.ix-nl .nlw-ev--n3 .nlw-ev-card,
.ix-nl .nlw-ev--n4 .nlw-ev-card,
.ix-nl .nlw-ev--n5 .nlw-ev-card,
.ix-nl .nlw-ev--n6 .nlw-ev-card,
.ix-nl .nlw-ev--n7 .nlw-ev-card,
.ix-nl .nlw-ev--n8 .nlw-ev-card{
  position: relative;
}
.ix-nl .nlw-ev--n2 .nlw-ev-body,
.ix-nl .nlw-ev--n3 .nlw-ev-body,
.ix-nl .nlw-ev--n4 .nlw-ev-body,
.ix-nl .nlw-ev--n5 .nlw-ev-body,
.ix-nl .nlw-ev--n6 .nlw-ev-body,
.ix-nl .nlw-ev--n7 .nlw-ev-body,
.ix-nl .nlw-ev--n8 .nlw-ev-body{
  padding-right: var(--nl-ev-cta-gutter-n4, 40px);
}
.ix-nl .nlw-ev--n2 .nlw-ev-cta,
.ix-nl .nlw-ev--n3 .nlw-ev-cta,
.ix-nl .nlw-ev--n4 .nlw-ev-cta,
.ix-nl .nlw-ev--n5 .nlw-ev-cta,
.ix-nl .nlw-ev--n6 .nlw-ev-cta,
.ix-nl .nlw-ev--n7 .nlw-ev-cta,
.ix-nl .nlw-ev--n8 .nlw-ev-cta{
  position: absolute;
  right: var(--nl-ev-cta-right-n4, 14px);
  top: 50%;
  transform: translateY(-50%);
  align-self: auto;
  margin: 0;
  padding: 0;
  background: none;
  border-radius: 0;
  letter-spacing: 0;
  text-transform: none;
  font-size: 0;                      /* hide the word, keep the link */
  line-height: 1;
  color: var(--nl-ev-cta-chevron-color-n4, var(--nl-accent));
}
.ix-nl .nlw-ev--n2 .nlw-ev-cta::after,
.ix-nl .nlw-ev--n3 .nlw-ev-cta::after,
.ix-nl .nlw-ev--n4 .nlw-ev-cta::after,
.ix-nl .nlw-ev--n5 .nlw-ev-cta::after,
.ix-nl .nlw-ev--n6 .nlw-ev-cta::after,
.ix-nl .nlw-ev--n7 .nlw-ev-cta::after,
.ix-nl .nlw-ev--n8 .nlw-ev-cta::after{
  content: "\203A";                  /* single right angle quote */
  font-size: var(--nl-ev-cta-chevron-size-n4, 28px);
  font-weight: 400;
  line-height: 1;
  display: block;
}

/* ── Sponsor ───────────────────────────────────────────────────────── */

.ix-nl .nlw-ev-sponsor{
  margin-top: 18px;
  padding-top: 14px;
  border-top: 1px solid var(--nl-rule);
  text-align: center;
}
.ix-nl .nlw-ev-sponsor-label{
  font-family: var(--nl-font-ui) !important;
  font-size:var(--nl-t-micro);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--nl-ink-soft);
  margin: 0 0 10px;
}
.ix-nl .nlw-ev-sponsor-ad{
  display: block;
  width: 100%;
  max-width: 500px;
  height: auto;
  margin: 0 auto;
  border-radius: var(--nl-radius-sm, 6px);
}
.ix-nl .nlw-fa:not(.nlw-fa--split) .nlw-subhead{margin-left:32px;margin-right:32px;}
.ix-nl .nlw-fa:not(.nlw-fa--split) .nlw-headline{margin-left:24px;margin-right:24px;}
.ix-nl .nlw-fa--split .nlw-subhead{font-size:var(--nl-subhead-size);margin-left:0;margin-right:0;}
.ix-nl .nlw-fa .nlw-teaser{font-size:var(--nl-fa-teaser-size, var(--nl-body-size));}
.ix-nl .nlw-teaser{line-height:var(--nl-body-lh);margin-bottom:22px;}

/* ── Mobile layer — below 560px ───────────────────────────────────────
   The roles are restated here at phone sizes. One column of values, so
   what changes between breakpoints is readable at a glance rather than
   scattered through the file. */
@media (max-width:560px){
  .ix-nl{
    --nl-t-opener:  38px;
    --nl-t-hero:    30px;
    --nl-t-title:   18px;
    --nl-t-deck:    16px;
    --nl-t-lead:    16px;
    --nl-t-body:    15px;
    --nl-t-price:   16px;
    --nl-t-byline:  10px;
    --nl-t-button:  10.5px;
    --nl-t-label:   10px;
    --nl-t-micro:    8.5px;
    --nl-t-numeral: 28px;
    --nl-hero-lh:   1.12;

    --nl-block-gap: 34px;
    --nl-body-lh:   1.55;
  }
  .ix-nl .nlw-ev, .ix-nl .nlw-txa, .ix-nl .nlw-re-block{
    padding-left: 14px; padding-right: 14px;
  }
  .ix-nl .nlw-gr{ padding: 18px; }
  .ix-nl .nlw-fa, .ix-nl .nlw-ts{ padding: var(--nl-m-article-pad, 0px); }
  .ix-nl .nlw-txa-card{ padding: 16px; }
  .ix-nl .nlw-ba-group{ padding-left: 10px; padding-right: 10px; }

  /* Fixed tiles — objects, not type. */
  .ix-nl .nlw-ev--n2 .nlw-ev-chip, .ix-nl .nlw-ev--n3 .nlw-ev-chip,
  .ix-nl .nlw-ev--n4 .nlw-ev-chip, .ix-nl .nlw-ev--n5 .nlw-ev-chip,
  .ix-nl .nlw-ev--n6 .nlw-ev-chip, .ix-nl .nlw-ev--n7 .nlw-ev-chip,
  .ix-nl .nlw-ev--n8 .nlw-ev-chip{ width: 56px; }

  /* EV rows on phones — the tile becomes the row's left edge. */
  .ix-nl .nlw-ev--n2 .nlw-ev-card, .ix-nl .nlw-ev--n3 .nlw-ev-card,
  .ix-nl .nlw-ev--n4 .nlw-ev-card, .ix-nl .nlw-ev--n5 .nlw-ev-card,
  .ix-nl .nlw-ev--n6 .nlw-ev-card, .ix-nl .nlw-ev--n7 .nlw-ev-card,
  .ix-nl .nlw-ev--n8 .nlw-ev-card{
    gap: 0;
    align-items: stretch;
    overflow: hidden;
  }
  .ix-nl .nlw-ev--n2 .nlw-ev-chip, .ix-nl .nlw-ev--n3 .nlw-ev-chip,
  .ix-nl .nlw-ev--n4 .nlw-ev-chip, .ix-nl .nlw-ev--n5 .nlw-ev-chip,
  .ix-nl .nlw-ev--n6 .nlw-ev-chip, .ix-nl .nlw-ev--n7 .nlw-ev-chip,
  .ix-nl .nlw-ev--n8 .nlw-ev-chip{
    margin: 0;
    border-radius: 0;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    justify-content: center;
    flex: 0 0 auto;
  }
  .ix-nl .nlw-ev--n2 .nlw-ev-body, .ix-nl .nlw-ev--n3 .nlw-ev-body,
  .ix-nl .nlw-ev--n4 .nlw-ev-body, .ix-nl .nlw-ev--n5 .nlw-ev-body,
  .ix-nl .nlw-ev--n6 .nlw-ev-body, .ix-nl .nlw-ev--n7 .nlw-ev-body,
  .ix-nl .nlw-ev--n8 .nlw-ev-body{
    padding: 12px 34px 12px 14px;
    gap: 6px;
  }

  /* The title carries the row; it was too small and too loosely leaded. */
  .ix-nl .nlw-ev-title{ font-size: var(--nl-ev-title-size-m, 20px); line-height: var(--nl-ev-title-lh-m, 1.08); }

  /* The meta line parses instead of running on. */
  .ix-nl .nlw-ev-meta{ line-height: 1.4; }
  .ix-nl .nlw-ev-time{ display: block; }
  .ix-nl .nlw-ev-venue{ display: block; }
  .ix-nl .nlw-ev-time + .nlw-ev-sep{ display: none; }

  /* v39: the RE photo is image-forward on a phone; the old 68px thumbnail
     rule here is retired rather than fighting the block above. */
  .ix-nl .nlw-txa-logo img{ width: 56px; height: 56px; }
}

/* ── Quiet scale (opt-in) ───────────────────────────────────────────
   The Session 5 scale, ~1.9:1 display over body. A title opts in by
   adding the class ix-scale-quiet to its .ix-nl wrapper in its shell.
   No title uses it today. Its phone values sit in the media query below,
   at the same specificity, so they win on phones. */
.ix-nl.ix-scale-quiet{
  --nl-t-hero:    35px;
  --nl-t-title:   24px;
  --nl-t-deck:    20px;
  --nl-t-lead:    19px;
  --nl-t-body:    18px;
  --nl-t-price:   17px;
  --nl-t-byline:  14px;
  --nl-t-button:  13px;
  --nl-t-label:   11px;
  --nl-t-micro:    9px;
  --nl-t-numeral: 41px;
  --nl-hero-lh:   1.18;
  --nl-body-lh:   1.6;
  --nl-label-ls:  2.2px;
}
@media (max-width:560px){
  .ix-nl.ix-scale-quiet{
    --nl-t-hero:    26px;
    --nl-t-title:   19px;
    --nl-t-deck:    17px;
    --nl-t-lead:    15px;
    --nl-t-body:    16px;
    --nl-t-price:   15px;
    --nl-t-byline:  13px;
    --nl-t-button:  12px;
    --nl-t-label:   10px;
    --nl-t-micro:    9px;
    --nl-t-numeral: 30px;
    --nl-body-lh:   1.55;
  }
}

/* ── Unboxed treatment ────────────────────────────────────────────────
   July's central claim: whitespace separates, boxes do not. Applied to
   the panelled blocks so the two can be compared rather than argued. */
.ix-nl.ix-unboxed .nlw-ev,
.ix-nl.ix-unboxed .nlw-txa,
.ix-nl.ix-unboxed .nlw-re-block{ background:transparent; padding-left:0; padding-right:0; }
.ix-nl.ix-unboxed .nlw-ev-card,
.ix-nl.ix-unboxed .nlw-txa-card{
  background:transparent; border:0; border-radius:0;
  padding-left:0; padding-right:0;
  border-bottom:1px solid var(--nl-border);
}
.ix-nl.ix-unboxed .nlw-fa,
.ix-nl.ix-unboxed .nlw-ts{ background:transparent; padding:0; }

/* ── FA hero: full-bleed art, text link instead of a button ───────────*/
.ix-nl .nlw-fa--bleed .nlw-photo{ margin-left:calc(-1 * var(--nl-bleed, 30px)); margin-right:calc(-1 * var(--nl-bleed, 30px)); }
.ix-nl .nlw-fa--bleed .nlw-photo img{ border-radius:0; }

.ix-nl .nlw-cta--link a{
  background:none !important;
  color: var(--nl-readon-ink, var(--nl-text)) !important;
  padding:0 0 3px !important;
  border-radius:0 !important;
  border-bottom: var(--nl-readon-rule, 2px) solid var(--nl-readon-color, var(--nl-accent));
  letter-spacing: var(--nl-readon-ls, 2.4px);
  text-transform: uppercase;
}

/* ── Banderole: ribbon kicker breaking the left edge of split art ─────*/
.ix-nl .nlw-fa--split .nlw-fa-media{ position:relative; }
.ix-nl .nlw-banderole{
  position:absolute;
  left: var(--nl-band-left, -6px);
  top:  var(--nl-band-top, 18px);
  background: var(--nl-band-bg, var(--nl-accent));
  color: var(--nl-band-ink, #ffffff);
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-band-size, var(--nl-t-micro));
  font-weight:600;
  letter-spacing: var(--nl-band-ls, 2.4px);
  text-transform:uppercase;
  padding: var(--nl-band-pad-v, 6px) var(--nl-band-pad-h, 12px);
  border-radius: var(--nl-band-radius, 0px);
}

/* ── Byline in the editorial register: italic "By", tracked name ──────*/
.ix-nl .nlw-byline--editorial{
  font-family: var(--nl-font-ui) !important;
  letter-spacing: var(--nl-byline-ls, 1.8px);
  text-transform: uppercase;
}
.ix-nl .nlw-byline--editorial .nlw-by-lead{
  font-family: var(--nl-font-body) !important;
  font-style: italic; text-transform:none; letter-spacing:0;
  font-size: var(--nl-byline-lead-size, var(--nl-t-byline));
}

/* headline line-height becomes a token so the scale can tighten it */
.ix-nl .nlw-headline{ line-height: var(--nl-hero-lh, 1.18); }
.ix-nl .nlw-rubric{ letter-spacing: var(--nl-label-ls, 2.2px); }

/* Selectors the FA bench reads for its starting values. Declared so the
   controls open at the real number instead of their minimum. */
.ix-nl .nlw-fa .nlw-headline{ font-size: var(--nl-fa-headline-size, var(--nl-t-hero)); }
.ix-nl .nlw-fa .nlw-subhead{  font-size: var(--nl-fa-subhead-size, var(--nl-t-deck)); }
.ix-nl .nlw-by-lead{          font-size: var(--nl-byline-lead-size, var(--nl-t-byline)); }
.ix-nl{ --nl-bleed: 30px; }

/* Franchise art alignment is title-level: WLN centred, another title left.
   Declared last so it wins over the earlier per-block rules. */
.ix-nl .nlw-franchise{ text-align: var(--nl-franchise-align, center); }
.ix-nl .nlw-franchise img{
  display:block;
  margin-left: var(--nl-franchise-ml, auto);
  margin-right: var(--nl-franchise-mr, auto);
}
.ix-nl[data-art-align="left"] .nlw-franchise img{ margin-left:0; margin-right:auto; }

/* ── v30 · Split headlines take the title role ─────────────────────────
   Placed last so it outranks .nlw-fa .nlw-headline and .nlw-ts .nlw-headline,
   which have the same specificity. */
.ix-nl .nlw-fa--split .nlw-headline,
.ix-nl .nlw-ts--split .nlw-headline{
  font-size: var(--nl-split-headline-size, var(--nl-t-title));
}

/* ═══════════ v42 · Design Pass 2 · masthead and seal issue bar ═══════════ */

/* ── Masthead (D108, D109) ────────────────────────────────────────────
   First thing inside .ix-nl. It covers the wrapper's top padding and its
   paper ground with the title's main colour, so the logo reads as sitting
   on the page band, above the column. */
.ix-nl .nlw-mast{
  margin: -18px -20px 0;
  padding: var(--nl-mast-pad, 30px 20px 30px);
  background: var(--nl-ink);
  border-radius: var(--nl-radius, 6px) var(--nl-radius, 6px) 0 0;
  text-align: center;
}

/* ── Column stack (D113) ──────────────────────────────────────────────
   The column lifts off the page: a gap above it and a soft edge mixed
   from the title's main colour. Phones: no gap, no edge; the column
   fills the screen. */
.ix-nl:has(> .nlw-mast),
.ix-nl:has(> .nlw-issuebar--seal){
  margin-top: var(--nl-col-gap, 44px);
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--nl-ink) 6%, transparent),
    0 12px 40px color-mix(in srgb, var(--nl-ink) 12%, transparent);
}
@media (max-width:991px){
  .ix-nl:has(> .nlw-mast),
  .ix-nl:has(> .nlw-issuebar--seal){ margin-top: var(--nl-col-gap-tablet, 24px); }
}
/* Below 768px Webflow's wrapper adds its own 20px above the column. */
@media (max-width:767px){
  .ix-nl:has(> .nlw-mast),
  .ix-nl:has(> .nlw-issuebar--seal){ margin-top: 0; }
}
@media (max-width:479px){
  .ix-nl:has(> .nlw-mast),
  .ix-nl:has(> .nlw-issuebar--seal){ box-shadow: none; }
  .ix-nl .nlw-mast{ border-radius: 0; }
}
.ix-nl .nlw-mast a{ display:inline-block; text-decoration:none; }
.ix-nl .nlw-mast img{
  display: block;
  width: 100%;
  max-width: var(--nl-mast-logo-w, 460px);
  height: auto;
  margin: 0 auto;
}

/* ── Seal issue bar (D110) ────────────────────────────────────────────
   Fills the column edge to edge: the negative side margins cancel the
   wrapper's 20px padding. Square corners. */
.ix-nl .nlw-issuebar.nlw-issuebar--seal{
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 24px;
  margin: 0 -20px 26px;
  padding: 22px 28px 22px 30px;
  min-height: 156px;
  border-radius: 0;
  background: var(--nl-bar-bg);
  color: var(--nl-bar-ink);
}
.ix-nl .nlw-issuebar--seal .nlw-ib-ghost{
  position: absolute;
  right: -14px;
  top: 50%;
  transform: translateY(-50%);
  font-family: var(--nl-bar-label-font) !important;
  font-size: var(--nl-ib-ghost-size, 150px);
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.02em;
  white-space: nowrap;
  color: var(--nl-bar-ink);
  opacity: var(--nl-ib-ghost-opacity, .09);
  pointer-events: none;
  user-select: none;
}
.ix-nl .nlw-issuebar--seal .nlw-ib-seal{
  position: relative;
  flex: 0 0 auto;
  width: 116px;
  height: 116px;
  border-radius: 50%;
  border: 3px solid var(--nl-ib-ring, color-mix(in srgb, var(--nl-bar-bg), var(--nl-bar-ink) 30%));
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-left: 22px;
}
.ix-nl .nlw-issuebar--seal .nlw-ib-seal::before{
  content: "";
  position: absolute;
  inset: -9px;
  border-radius: 50%;
  border: 1.5px dashed var(--nl-ib-ring, color-mix(in srgb, var(--nl-bar-bg), var(--nl-bar-ink) 30%));
}
.ix-nl .nlw-issuebar--seal .nlw-ib-no{
  font-family: var(--nl-bar-font) !important;
  font-style: italic;
  font-weight: 500;
  font-size: 22px;
  line-height: 1;
}
.ix-nl .nlw-issuebar--seal .nlw-ib-num{
  font-family: var(--nl-bar-font) !important;
  font-weight: 700;
  font-size: 50px;
  line-height: .95;
  letter-spacing: -0.02em;
}
.ix-nl .nlw-issuebar--seal .nlw-ib-text{ position: relative; min-width: 0; }
.ix-nl .nlw-issuebar--seal .nlw-ib-headline{
  margin: 0 0 10px;
  font-family: var(--nl-bar-font) !important;
  font-size: var(--nl-ib-title-size, 30px);
  font-weight: 700;
  font-style: normal;
  line-height: 1.15;
  color: var(--nl-bar-ink);
  text-align: left;
}
.ix-nl .nlw-issuebar--seal .nlw-ib-date{
  font-family: var(--nl-bar-label-font) !important;
  font-size: var(--nl-ib-date-size, 12px);
  font-weight: 600;
  letter-spacing: .28em;
  text-transform: uppercase;
  line-height: 1.2;
}
@media (max-width:560px){
  .ix-nl .nlw-mast{ padding: var(--nl-m-mast-pad, 20px 16px 20px); }
  .ix-nl .nlw-mast img{ max-width: var(--nl-m-mast-logo-w, 260px); }
  /* flex-wrap and alignment undo the v5 bar's phone rule (480px), which
     would otherwise stack the seal above the title. */
  .ix-nl .nlw-issuebar.nlw-issuebar--seal{ flex-wrap: nowrap; justify-content: flex-start; text-align: left; gap: 14px; padding: 16px; min-height: 0; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-ghost{ display: none; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-seal{ width: 74px; height: 74px; border-width: 2px; padding-left: 13px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-seal::before{ inset: -6px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-no{ font-size: 14px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-num{ font-size: 31px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-headline{ font-size: var(--nl-m-ib-title-size, 20px); margin-bottom: 7px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-date{ font-size: var(--nl-m-ib-date-size, 9.5px); letter-spacing: .2em; }
}

/* ── v44 · Issue bar as the column's first piece ─────────────────────
   No MNA masthead above it (shell v30): the bar covers the wrapper's top
   padding and takes the column's rounded top corners. */
.ix-nl:not(:has(> .nlw-mast)) > .nlw-issuebar.nlw-issuebar--seal{
  margin-top: -18px;
  border-radius: var(--nl-radius, 6px) var(--nl-radius, 6px) 0 0;
}
@media (max-width:479px){
  .ix-nl:not(:has(> .nlw-mast)) > .nlw-issuebar.nlw-issuebar--seal{ border-radius: 0; }
}

/* ── v45 · Phone issue bar, option D (D121) ───────────────────────── */
@media (max-width:560px){
  .ix-nl .nlw-issuebar.nlw-issuebar--seal{ gap: 12px; padding: 14px 16px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-ghost{
    display: block;
    font-size: var(--nl-m-ib-ghost-size, 92px);
    right: -8px;
  }
  .ix-nl .nlw-issuebar--seal .nlw-ib-seal{
    width: 52px;
    height: 52px;
    border-width: 2px;
    padding: 0;
    align-items: center;
  }
  .ix-nl .nlw-issuebar--seal .nlw-ib-seal::before{ inset: -4px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-no{ font-size: 10px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-num{ font-size: 21px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-headline{ font-size: var(--nl-m-ib-title-size, 23px); margin-bottom: 6px; }
}

/* ── v46 · Issue bar face (D122, D123) ─────────────────────────────── */
.ix-nl{ --nl-ib-font: var(--nl-font-ui); }
.ix-nl .nlw-issuebar--seal .nlw-ib-headline{
  font-family: var(--nl-ib-font) !important;
  font-weight: 700;
  letter-spacing: -0.005em;
}
.ix-nl .nlw-issuebar--seal .nlw-ib-seal{ align-items: center; padding: 0; }
.ix-nl .nlw-issuebar--seal .nlw-ib-no{
  font-family: var(--nl-ib-font) !important;
  font-style: normal;
  font-weight: 600;
  font-size: 15px;
  letter-spacing: .18em;
  text-transform: uppercase;
  margin-bottom: 3px;
}
.ix-nl .nlw-issuebar--seal .nlw-ib-num{
  font-family: var(--nl-ib-font) !important;
  font-weight: 700;
  font-size: 46px;
  letter-spacing: -0.01em;
}
@media (max-width:560px){
  .ix-nl .nlw-issuebar.nlw-issuebar--seal{ gap: 14px; padding: 16px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-seal{ width: 68px; height: 68px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-seal::before{ inset: -5px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-no{ font-size: 11px; margin-bottom: 2px; }
  .ix-nl .nlw-issuebar--seal .nlw-ib-num{ font-size: 29px; }
}

/* ── v47 · Signed sign-off card (D127) ─────────────────────────────── */
.ix-nl .nlw-signoff.nlw-signoff--card{
  background: var(--nl-inv-bg);
  border: 0;
  border-radius: var(--nl-gr-radius, 6px);
  padding: var(--nl-gr-pad, 26px 26px 24px);
  margin: 6px 0 10px;
  text-align: left;
}
.ix-nl .nlw-signoff--card .nlw-so-note{
  margin: 0;
  font-family: var(--nl-font-display) !important;
  font-style: italic;
  font-weight: 400;
  font-size: var(--nl-so-note-size, 21px);
  line-height: 1.45;
  color: var(--nl-inv-ink);
}
.ix-nl .nlw-signoff--card .nlw-so-rule{
  border: 0;
  border-top: 1px solid var(--nl-inv-rule);
  width: 64px;
  margin: 16px 0;
}
.ix-nl .nlw-signoff--card .nlw-so-who{ display: flex; align-items: center; gap: 12px; }
.ix-nl .nlw-signoff--card .nlw-so-head{
  width: 46px; height: 46px; flex: 0 0 auto;
  border-radius: 50%;
  border: 2px solid var(--nl-accent);
  object-fit: cover;
  display: block;
}
.ix-nl .nlw-signoff--card .nlw-so-name{
  display: block;
  text-transform: none !important;
  letter-spacing: normal !important;
  font-family: var(--nl-font-ui) !important;
  font-weight: 600;
  font-size: 14px;
  line-height: 1.3;
  color: var(--nl-inv-ink);
}
.ix-nl .nlw-signoff--card .nlw-so-role{
  display: block;
  text-transform: none !important;
  letter-spacing: normal !important;
  font-family: var(--nl-font-ui) !important;
  font-weight: 400;
  font-size: 12.5px;
  line-height: 1.4;
  color: color-mix(in srgb, var(--nl-inv-ink-soft) 75%, transparent);
}
@media (max-width:560px){
  .ix-nl .nlw-signoff.nlw-signoff--card{ padding: 20px 18px; }
  .ix-nl .nlw-signoff--card .nlw-so-note{ font-size: var(--nl-m-so-note-size, 18px); }
}


/* ── AT · Around Town opener (v50, D133, D138, D145) ───────────────────── */
.ix-nl .nlw-at{
  background: var(--nl-at-bg, transparent);
  border: 0;
  border-radius: 0;
  padding: var(--nl-at-pad, 0);
  margin: 0 0 var(--nl-at-mb, var(--nl-block-gap));
}
.ix-nl .nlw-at-eyebrow{
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-t-label);
  font-weight: 600;
  letter-spacing: var(--nl-at-eyebrow-ls, .24em);
  text-transform: uppercase;
  line-height: 1.4;
  color: var(--nl-at-eyebrow-color, var(--nl-highlight-ink));
  margin: 0;
}
.ix-nl .nlw-at-title{
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-at-title-size, var(--nl-t-opener));
  font-weight: var(--nl-at-title-weight, 800);
  font-style: normal;
  line-height: var(--nl-hero-lh, 1.08);
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--nl-ink);
  margin: 4px 0 10px;
}
.ix-nl .nlw-at-teaser{
  font-family: var(--nl-font-body) !important;
  font-size: var(--nl-at-teaser-size, var(--nl-body-size));
  line-height: 1.5;
  color: var(--nl-text);
  margin: 0;
}
.ix-nl .nlw-at-rule{
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 16px 0 0;
}
.ix-nl .nlw-at-rule-bar{
  display: block;
  width: var(--nl-at-rule-w, 44px);
  height: 3px;
  background: var(--nl-accent);
  flex: 0 0 auto;
}
.ix-nl .nlw-at-rule-line{
  display: block;
  flex: 1 1 auto;
  height: 1px;
  background: var(--nl-border);
}

/* ── Opener run (v50, D145) — written by newsletter-render v1.9.0 ── */
.ix-nl .nlw-run{ margin: 0; }
.ix-nl .nlw-run-end{
  width: var(--nl-run-end-w, 44px);
  height: 2px;
  margin: 0 auto var(--nl-block-gap);
  background: var(--nl-run-end-color, var(--nl-ink));
  opacity: .85;
}

/* ── House ads (v51, D129 to D132, D146) ──────────────────────────────── */
.ix-nl .nlw-ha{
  --nl-ha-c: var(--nl-ink);
  --nl-ha-on: #ffffff;
  position: relative;
  display: grid;
  grid-template-columns: 1fr 1fr;
  background: var(--nl-ha-bg, #ffffff);
  border: 2px solid var(--nl-ha-c);
  border-radius: var(--nl-ha-radius, 16px);
  margin: 0 0 var(--nl-block-gap);
}
.ix-nl .nlw-ha--subscribe{
  --nl-ha-c: var(--nl-ha-subscribe, color-mix(in srgb, var(--ix-t-highlight, var(--nl-highlight)), #000 22%));
  --nl-ha-on: var(--nl-ha-subscribe-on, #ffffff);
}
.ix-nl .nlw-ha--advertise{
  --nl-ha-c: var(--nl-ha-advertise, var(--nl-ink));
  --nl-ha-on: var(--nl-ha-advertise-on, var(--nl-cream, #F5F1E8));
}
.ix-nl .nlw-ha--bookmark{
  --nl-ha-c: var(--nl-ha-bookmark, var(--nl-accent));
  --nl-ha-on: var(--nl-ha-bookmark-on, var(--nl-ink));
}
.ix-nl .nlw-ha-art{
  display: flex;
  overflow: hidden;
  min-height: 330px;
  border-radius: 14px 0 0 14px;
}
.ix-nl .nlw-ha-art > svg{ display: block; width: 100%; height: 100%; }
.ix-nl .nlw-ha--right .nlw-ha-art{ order: 2; border-radius: 0 14px 14px 0; }
.ix-nl .nlw-ha--center{ grid-template-columns: 1fr; }
.ix-nl .nlw-ha--center .nlw-ha-art{
  min-height: 0;
  height: var(--nl-ha-center-art-h, 300px);
  justify-content: center;
  border-radius: 14px 14px 0 0;
}
.ix-nl .nlw-ha--center .nlw-ha-art > svg{ width: auto; max-width: 100%; }
/* each drawing's own ground, so a capped band has no white edges */
.ix-nl .nlw-ha--subscribe .nlw-ha-art{ background: var(--nl-ha-art-bg, #efe1c3); }
.ix-nl .nlw-ha--advertise .nlw-ha-art{ background: var(--nl-ha-art-bg, #e4ece9); }
.ix-nl .nlw-ha--bookmark  .nlw-ha-art{ background: var(--nl-ha-art-bg, #f6ead0); }
.ix-nl .nlw-ha-type{
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 66px 22px 70px;
}
.ix-nl .nlw-ha-tab{
  position: absolute;
  top: -2px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--nl-ha-c);
  color: var(--nl-ha-on);
  padding: 6px 14px 8px;
  border-radius: 0 0 12px 12px;
  line-height: 0;
}
.ix-nl .nlw-ha-pm{ display: block; width: 54px; height: 54px; }
.ix-nl .nlw-ha-eyebrow{
  margin: 0;
  font-family: var(--nl-font-ui) !important;
  font-style: italic;
  font-weight: 600;
  font-size: var(--nl-t-label);
  letter-spacing: .2em;
  text-transform: uppercase;
  line-height: 1.4;
  color: var(--nl-text);
}
.ix-nl .nlw-ha-headline{
  margin: 6px 0 0;
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-ha-headline-size, var(--nl-t-hero));
  font-weight: 600;
  font-style: normal;
  line-height: 1.05;
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--nl-ink);
}
.ix-nl .nlw-ha-brush{
  display: block;
  width: 170px;
  max-width: 80%;
  height: 14px;
  margin: 10px auto 0;
  color: var(--nl-ha-c);
}
.ix-nl .nlw-ha-copy{
  margin: 12px 0 0;
  max-width: 290px;
  font-family: var(--nl-font-display) !important;
  font-size: var(--nl-ha-copy-size, var(--nl-t-deck));
  line-height: 1.32;
  color: var(--nl-text);
  white-space: pre-line;
}
.ix-nl a.nlw-ha-cta,
.ix-nl button.nlw-ha-cta{
  position: absolute;
  bottom: -2px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--nl-ha-c);
  color: var(--nl-ha-on) !important;
  padding: 12px 26px 13px;
  border-radius: 12px 12px 0 0;
  font-family: var(--nl-font-ui) !important;
  font-weight: 600;
  font-size: 12.5px;
  letter-spacing: .22em;
  text-transform: uppercase;
  text-decoration: none !important;
  white-space: nowrap;
}
.ix-nl a.nlw-ha-cta:hover,
.ix-nl button.nlw-ha-cta:hover{ filter: brightness(1.08); }
.ix-nl button.nlw-ha-cta{ border: 0; margin: 0; cursor: pointer; line-height: normal; -webkit-appearance: none; appearance: none; }
.ix-nl button.nlw-ha-cta:focus-visible{ outline: 2px solid var(--nl-ink); outline-offset: 2px; }
@media (max-width:560px){
  .ix-nl .nlw-ha{ grid-template-columns: 1fr; }
  .ix-nl .nlw-ha-art,
  .ix-nl .nlw-ha--right .nlw-ha-art{
    order: 0;
    min-height: 0;
    aspect-ratio: 400 / 330;
    border-radius: 14px 14px 0 0;
  }
  .ix-nl .nlw-ha-type{ padding: 80px 16px 66px; }
  .ix-nl .nlw-ha--center .nlw-ha-art{ height: var(--nl-ha-center-art-h-phone, 220px); aspect-ratio: auto; }
}

/* ── v53 · Story groups (Design Pass 2 S3, D162 to D168) ─────────────────── */

/* Community News opener (D165, option B1) */
.ix-nl .nlw-at--community{ text-align: center; }
.ix-nl .nlw-atc-rules{
  border-top: 1px solid var(--nl-ink);
  border-bottom: 1px solid var(--nl-ink);
  padding: 3px 0;
}
.ix-nl .nlw-atc-inner{
  border-top: 1px solid var(--nl-ink);
  border-bottom: 1px solid var(--nl-ink);
  padding: 16px 10px 14px;
}
.ix-nl .nlw-at--community .nlw-at-eyebrow{ color: var(--nl-atc-eyebrow-color, var(--nl-text-mid)); }
.ix-nl .nlw-at--community .nlw-at-title{
  font-size: var(--nl-atc-title-size, 40px);
  font-style: italic;
  font-weight: 700;
  margin: 4px 0 8px;
}
.ix-nl .nlw-at--community .nlw-at-teaser{ max-width: 440px; margin: 0 auto; }

/* Spotlights opener (D165, option C1) */
.ix-nl .nlw-at--spot{
  position: relative;
  overflow: hidden;
  background: var(--nl-sp-bg, var(--nl-highlight));
  color: var(--nl-sp-ink, #FFFFFF);
  border-radius: var(--nl-sp-radius, 10px);
  padding: 26px 26px 24px;
}
.ix-nl .nlw-at--spot .nlw-at-eyebrow{
  color: var(--nl-sp-ink, #FFFFFF);
  max-width: calc(100% - 140px);
}
.ix-nl .nlw-at--spot .nlw-at-title{
  color: var(--nl-sp-ink, #FFFFFF);
  font-size: var(--nl-sp-title-size, 46px);
  font-style: italic;
  font-weight: 800;
  line-height: 1.05;
  margin: 4px 0 8px;
}
.ix-nl .nlw-at--spot .nlw-at-teaser{ color: var(--nl-sp-ink, #FFFFFF); max-width: 420px; }
.ix-nl .nlw-sp-sticker{
  position: absolute;
  right: 18px;
  top: 16px;
  transform: rotate(9deg);
  background: var(--nl-sp-sticker-bg, var(--nl-accent));
  color: var(--nl-sp-sticker-ink, var(--nl-accent-ink));
  font-family: var(--nl-font-ui) !important;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  line-height: 1;
  padding: 9px 12px;
  border-radius: 4px;
  box-shadow: 0 3px 0 rgba(0,0,0,.15);
  white-space: nowrap;
}

/* Flag (D163): a pill above the headline */
.ix-nl .nlw-flag-wrap{ margin: 0 0 10px; }
.ix-nl .nlw-fa:not(.nlw-fa--split) .nlw-flag-wrap,
.ix-nl .nlw-ts:not(.nlw-ts--split) .nlw-flag-wrap{ text-align: center; }
.ix-nl .nlw-flag{
  display: inline-block;
  background: var(--nl-flag-bg, var(--nl-highlight));
  color: var(--nl-flag-ink, #FFFFFF);
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-flag-size, 9px);
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  line-height: 1;
  padding: 6px 10px 5px;
  border-radius: 999px;
}

/* Story link (D164): replaces the dark button */
.ix-nl .nlw-cta--story a{
  display: inline-block;
  background: transparent;
  color: var(--nl-ink);
  font-family: var(--nl-font-ui) !important;
  font-size: var(--nl-story-link-size, 13px);
  font-weight: 600;
  letter-spacing: .02em;
  text-decoration: none;
  padding: 0 0 2px;
  border-radius: 0;
  border-bottom: 2px solid var(--nl-accent);
}
.ix-nl .nlw-cta--story a:hover{
  background: transparent;
  color: var(--nl-ink-deep);
  border-bottom-color: var(--nl-ink);
}
.ix-nl .nlw-ts .nlw-cta--story a{ font-size: var(--nl-story-link-size, 13px); padding: 0 0 2px; }

/* Compact (D141): thumbnail beside the headline, two-line summary */
.ix-nl .nlw-story--compact{
  margin: 0 0 var(--nl-block-gap);
  background: var(--nl-article-bg, transparent);
  padding: var(--nl-article-pad, 0px);
  border-radius: var(--nl-article-radius, 6px);
}
.ix-nl .nlw-compact-row{
  display: grid;
  grid-template-columns: var(--nl-compact-thumb, 112px) minmax(0, 1fr);
  gap: 16px;
  align-items: start;
}
.ix-nl .nlw-compact-row--nophoto{ grid-template-columns: minmax(0, 1fr); }
.ix-nl .nlw-compact-thumb{ border-radius: var(--nl-radius); overflow: hidden; }
.ix-nl .nlw-compact-thumb img{ display: block; width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; }
.ix-nl .nlw-story--compact .nlw-franchise{ margin: 0 0 10px; }
.ix-nl .nlw-story--compact .nlw-franchise img{ max-height: var(--nl-franchise-h, 32px); margin: 0; }
.ix-nl .nlw-story--compact .nlw-headline{
  font-size: var(--nl-t-title);
  line-height: 1.2;
  margin: 0;
}
.ix-nl .nlw-compact-teaser{
  margin: 6px 0 8px;
  font-family: var(--nl-font-body) !important;
  font-size: var(--nl-body-size);
  line-height: 1.5;
  color: var(--nl-text);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}
.ix-nl .nlw-story--compact .nlw-cta{ text-align: left; margin: 0; }
.ix-nl .nlw-story--compact .nlw-flag-wrap{ margin: 0 0 8px; }

@media (max-width:560px){
  .ix-nl .nlw-at--community .nlw-at-title{ font-size: var(--nl-atc-title-size-phone, 32px); }
  .ix-nl .nlw-at--spot{ padding: 22px 18px 20px; }
  .ix-nl .nlw-at--spot .nlw-at-title{ font-size: var(--nl-sp-title-size-phone, 36px); }
  .ix-nl .nlw-at--spot .nlw-at-eyebrow{ max-width: calc(100% - 100px); }
  .ix-nl .nlw-sp-sticker{ right: 10px; top: 10px; font-size: 9px; padding: 6px 8px; }
  .ix-nl .nlw-compact-row{ grid-template-columns: var(--nl-compact-thumb-phone, 84px) minmax(0, 1fr); gap: 12px; }
}

/* ── v54 · Group panels and story lines (D170, D171) ─────────────────────── */

.ix-nl .nlw-run{
  --nl-grp-bg: var(--nl-grp-at-bg, color-mix(in srgb, var(--nl-accent) 11%, #FFFFFF));
  --nl-grp-edge: var(--nl-grp-at-edge, var(--nl-accent));
  margin: 0 0 var(--nl-block-gap);
  padding: 28px 28px 26px;
  border-radius: var(--nl-grp-radius, 14px);
  border-left: 5px solid var(--nl-grp-edge);
  background: var(--nl-grp-bg);
}
.ix-nl .nlw-run:has(> .nlw-at--community){
  --nl-grp-bg: var(--nl-grp-cn-bg, color-mix(in srgb, var(--nl-ink) 6%, #FFFFFF));
  --nl-grp-edge: var(--nl-grp-cn-edge, var(--nl-ink));
}
.ix-nl .nlw-run:has(> .nlw-at--spot){
  --nl-grp-bg: var(--nl-grp-sp-bg, color-mix(in srgb, var(--nl-highlight) 10%, #FFFFFF));
  --nl-grp-edge: var(--nl-grp-sp-edge, var(--nl-highlight));
}
.ix-nl .nlw-run > :last-child{ margin-bottom: 0; }
.ix-nl .nlw-run .nlw-run-end{ margin-bottom: 0; }

/* v55: the v54 hairline between stories (D171) is retired by D174 */

@media (max-width:560px){
  .ix-nl .nlw-run{ padding: 20px 14px 18px; border-radius: var(--nl-grp-radius-phone, 12px); }
}

/* ── v55 · Stories on white, split headline size (D173, D174) ────────────── */

.ix-nl{
  --nl-paper: #F0EDE6;
  --nl-article-bg: #FFFFFF;
  --nl-article-pad: 28px 28px 26px;
  --nl-article-radius: 12px;
  --nl-split-headline-size: 27px;
}
/* a story followed directly by another story: a short gap, not the block gap */
.ix-nl :is(.nlw-fa, .nlw-ts, .nlw-story):has(+ :is(.nlw-fa, .nlw-ts, .nlw-story)){
  margin-bottom: var(--nl-story-gap, 22px);
}

@media (max-width:560px){
  .ix-nl{
    --nl-article-pad: 20px 16px 18px;
    --nl-m-article-pad: 20px 16px 18px;  /* the phone rule for FA and TS reads this one */
    --nl-split-headline-size: 22px;
  }
}

/* ── v56 · One banner width (D175) ───────────────────────────────────────── */

.ix-nl{
  --nl-banner-w: 500px;
  --nl-banner-inset: 190px;
}
.ix-nl .nlw-ba img,
.ix-nl .nlw-paidad img,
.ix-nl [data-ix-ad-frame].ix-hydrated img{
  width: min(var(--nl-banner-w), calc(100vw - var(--nl-banner-inset)));
  max-width: 100%;
  height: auto;
  margin-left: auto;
  margin-right: auto;
}
/* the single banner's frame hugs its image */
.ix-nl .nlw-ba a{
  width: fit-content;
  max-width: 100%;
  margin-left: auto;
  margin-right: auto;
}

@media (max-width:560px){
  .ix-nl{ --nl-banner-inset: 121px; }
}

/* ── v58 · Ad framing (D176) ─────────────────────────────────────────────── */

.ix-nl{
  --nl-ba-group-gap: 40px;
  --nl-ba-group-mat-pad: 28px 8px;
  --nl-ba-pad: 28px 10px;
}
.ix-nl .nlw-ba img,
.ix-nl .nlw-paidad img,
.ix-nl [data-ix-ad-frame].ix-hydrated img{
  box-sizing: border-box;
  border: 1px solid var(--nl-ba-img-border, color-mix(in srgb, var(--nl-ink) 18%, #FFFFFF));
}

/* ── v59 · Ad tiles (D177), smaller TS section art (D178) ────────────────── */

.ix-nl{
  --nl-ba-group-gap: 22px;
}
/* every banner's frame is a full-width white tile */
.ix-nl .nlw-ba a,
.ix-nl .nlw-ba-group .nlw-ba a{
  width: auto;
  background: var(--nl-ba-tile-bg, var(--nl-article-bg, #FFFFFF));
  border: 0;
  border-radius: var(--nl-ba-tile-radius, var(--nl-article-radius, 12px));
  padding: var(--nl-ba-pad, 28px 10px);
}
.ix-nl .nlw-ba a:hover{ border: 0; }
/* the group's mat stands down: only the label and the tiles remain */
.ix-nl .nlw-ba-group-mat{
  background: transparent;
  border: 0;
  border-radius: 0;
  padding: 0;
}

/* TS section art: small and left */
.ix-nl .nlw-ts .nlw-franchise{ text-align: left; }
.ix-nl .nlw-ts .nlw-franchise img{
  max-height: var(--nl-ts-franchise-h, 40px);
  margin-left: 0;
  margin-right: auto;
}

@media (max-width:560px){
  .ix-nl .nlw-ts .nlw-franchise img{ max-height: var(--nl-ts-franchise-h-phone, 34px); }
}

/* ── v61 · RE on a white tile (D181) ─────────────────────────────────────── */

.ix-nl{
  --nl-re-bg: var(--nl-article-bg, #FFFFFF);
  --nl-re-block-pad: 28px 28px 26px;
  --nl-re-block-radius: var(--nl-article-radius, 12px);
  --nl-re-art-display: block;
}
@media (max-width:560px){
  .ix-nl .nlw-re-block{ padding: 20px 16px 18px; }
}

/* ── v62 · RE section art like TS (D183) ─────────────────────────────────── */
.ix-nl .nlw-re-block .nlw-franchise{ text-align: left; }
.ix-nl .nlw-re-block .nlw-franchise img{
  width: auto;
  max-width: 100%;
  max-height: var(--nl-re-art-h, 40px);
  object-fit: contain;
  margin-left: 0;
  margin-right: auto;
}
@media (max-width:560px){
  .ix-nl .nlw-re-block .nlw-franchise img{ max-height: var(--nl-re-art-h-phone, 34px); }
}

/* ── v63 · Section art bullet and rule (D184), RE heading (D185) ─────────── */
.ix-nl .nlw-ts .nlw-franchise,
.ix-nl .nlw-story--compact .nlw-franchise{
  display: flex;
  align-items: center;
  gap: 12px;
  text-align: left;
}
.ix-nl .nlw-ts .nlw-franchise::before,
.ix-nl .nlw-story--compact .nlw-franchise::before{
  content: "";
  flex: none;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--nl-art-dot, var(--nl-grp-edge, var(--nl-highlight)));
}
.ix-nl .nlw-ts .nlw-franchise::after,
.ix-nl .nlw-story--compact .nlw-franchise::after{
  content: "";
  flex: 1 1 auto;
  min-width: 24px;
  height: 2px;
  background: color-mix(in srgb, var(--nl-art-dot, var(--nl-grp-edge, var(--nl-highlight))) 35%, #FFFFFF);
}
.ix-nl .nlw-ts .nlw-franchise img,
.ix-nl .nlw-story--compact .nlw-franchise img{
  flex: 0 1 auto;
  min-width: 0;
  margin: 0;
}

.ix-nl .nlw-re-block:has(> .nlw-franchise img) .nlw-re-title{ display: none; }

/* ── v64 · Bookmark how-to panel (Clean-Up S1) ──────────────────────────── */
.ix-nl .nlw-ha-howto{
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: color-mix(in srgb, var(--nl-ink-deep) 55%, transparent);
}
.ix-nl .nlw-ha-howto[hidden]{ display: none; }
.ix-nl .nlw-ha-howto-card{
  width: 100%;
  max-width: 380px;
  background: var(--nl-ha-bg, var(--nl-cream));
  border: 2px solid var(--nl-ha-c);
  border-radius: var(--nl-ha-radius, 16px);
  padding: 26px 24px 0;
  text-align: center;
  overflow: hidden;
  box-shadow: 0 18px 50px color-mix(in srgb, var(--nl-ink-deep) 30%, transparent);
}
.ix-nl .nlw-ha-howto-title{
  margin: 0 0 12px;
  font-family: var(--nl-font-display);
  font-size: var(--nl-t-title);
  line-height: 1.2;
  color: var(--nl-ink);
}
.ix-nl .nlw-ha-howto-line{
  margin: 0 0 8px;
  font-family: var(--nl-font-body);
  font-size: var(--nl-t-body);
  line-height: 1.5;
  color: var(--nl-text, var(--nl-ink));
}
.ix-nl .nlw-ha-howto-line[hidden]{ display: none; }
.ix-nl .nlw-ha-howto-close{
  display: inline-block;
  margin: 14px 0 0;
  border: 0;
  cursor: pointer;
  background: var(--nl-ha-c);
  color: var(--nl-ha-on);
  padding: 12px 26px 13px;
  border-radius: 12px 12px 0 0;
  font-family: var(--nl-font-ui);
  font-weight: 600;
  font-size: 12.5px;
  letter-spacing: .22em;
  text-transform: uppercase;
}
.ix-nl .nlw-ha-howto-close:hover{ filter: brightness(1.08); }
.ix-nl .nlw-ha-howto-close:focus-visible{ outline: 2px solid var(--nl-ink); outline-offset: 2px; }
