/* ================================================================
   Brand substitution.

   reference.css is used untouched. Everything in it resolves colour
   through the swatch variables and type through the font-family
   variables, so redefining those here re-skins the whole sheet
   without editing a single rule.
   ================================================================ */


/* ------------------------------------------------------------- LOGO FIT
   The reference's marquee marks were square-ish SVGs drawn to fill a
   240x140 slot, so it sets object-fit: cover on them. Ours are wide
   wordmarks — cherry.svg is 437x122, an aspect of 3.58 against the slot's
   1.71 — so cover scales them to the slot HEIGHT and crops roughly half the
   width away, which is why CareCredit and Cherry rendered as giant
   fragments. contain fits the whole mark; the padding keeps it off the
   divider rules either side. */
.n4-marquee_logo {
  object-fit: contain !important;
  padding: 1.1rem 1.9rem;
}

/* ------------------------------------------------ THE PAGE YOU ARE ON, IN THE BAR
   Webflow marks the link to the current page with .w--current and paints it its own
   blue (#0082f3), which read as a stray teal word in a purple bar. The reference's
   own treatment — the nav's dark ink with a purple rule under it — is restated here
   so it holds on every page, including the ones whose stylesheet lacks the rule. */
.nav__link-item.cc-nav.w--current,
.nav__link-item.cc-nav.w--current:hover {
  color: #35303b;
}
.nav__link-item.w--current {
  position: relative;
}
.nav__link-item.w--current:before {
  content: " ";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 2px;
  background: #7f61a0;
}

/* ----------------------------------------- IVORY GROUND, PURPLE AS THE ACCENT
   The reference builds its long middle stretch out of near-black slabs. In
   violet that read as a wall of dark purple, so the slabs take the ground the
   rest of the page already uses — the reference's own cream — and the purple
   does the work it is better at: the cards, the marks, the buttons and the
   rules against it.

   Type follows the ground, with one exception. A card's title sits ON a
   photograph, not on the slab, so it keeps its white; only text on the cream
   itself becomes ink. That is what :not([class*=card]) is guarding. */
main .n4-g_background,
section.n4-stories_wrap.n4-u-theme-dark {
  background-color: #ede9e3 !important;
}
/* The hero's film keeps its dark scrim — white type over a dim room needs it — but the
   frame around that film is part of the page, not part of the video, so it takes the cream. */
.n4-hero_main_wrap .n4-g_background {
  background-color: #ede9e3 !important;
}
main section:not(.n4-hero_main_wrap) :is(h1, h2, h3, h4, p, span, div, li):not([class*=card] *):not([class*=card]):not([class*=tabs] *) {
  color: #2f213e !important;
}

/* ------------------------------------------------ THE GROUND: A MESH, NOT A FLAT
   Four soft purple lights bleeding into the cream from the corners, with a fine
   grain over them. The grain is the part that matters: a gradient this wide bands
   into visible stripes on an ordinary screen without it. The dark bands keep their
   own colour — this paints the cream ones only. */
main .n4-g_background:not(.n4-hero_main_wrap *),
main section.n4-features_wrap,
main section.n4-stats_wrap,
section.fl-why,
.n4-hero_main_wrap .n4-g_background {
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.2'/%3E%3C/svg%3E"),
    radial-gradient(52% 44% at 12% 8%,  rgba(201, 168, 224, .55) 0%, rgba(201, 168, 224, 0) 70%),
    radial-gradient(46% 40% at 88% 18%, rgba(169, 139, 208, .40) 0%, rgba(169, 139, 208, 0) 72%),
    radial-gradient(60% 50% at 70% 92%, rgba(231, 220, 243, .85) 0%, rgba(231, 220, 243, 0) 70%),
    radial-gradient(40% 36% at 30% 78%, rgba(135, 102, 170, .20) 0%, rgba(135, 102, 170, 0) 70%)
    !important;
  background-color: #ede9e3 !important;
  background-repeat: repeat, no-repeat, no-repeat, no-repeat, no-repeat;
  background-size: 200px 200px, auto, auto, auto, auto;
}

/* the text cards float on the mesh as frosted glass; the ones with a photograph
   behind them stay solid, because glass over a picture is just a haze */
.fl-why .c-photo,
.fl-why .c-rev {
  background: rgba(255, 255, 255, .55) !important;
  backdrop-filter: blur(18px) saturate(140%);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  border: 1px solid rgba(255, 255, 255, .65);
  box-shadow: 0 12px 40px rgba(74, 47, 99, .08);
}
/* Safari before 15.4 has no backdrop-filter: those viewers get the solid card */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .fl-why .c-photo, .fl-why .c-rev { background: #f7f4ef !important; }
}

/* The three quotes, their portraits and the switcher now live in
   scripts/stories_section.py, which carries its own scoped stylesheet. The
   reference's tab strip is gone from the markup, so its rules went with it. */

/* ----------------------------------------------- THE BANDS DOWN THE HOMEPAGE
   Cream is the ground. Four bands stay dark purple so the page has a rhythm
   rather than one long scroll: the listening section, the affiliations
   marquee (its wordmarks are white and need the dark), the stories band and
   the closing call to action. The ball behind that call ran lavender to cyan
   — the reference's colour, not the practice's — and the stories card washed
   its photograph in purple, which left its heading dark on dark. */
/* Dark bands: the listening section, the affiliations marquee, the stories band
   and the closing call to action. Everything between them is cream. */
main section.n4-section_wrap:has(.n4-industries_contain) .n4-g_background,
main section.n4-section_wrap:has(.n4-cta_main_bg_wrap) .n4-g_background,
main section.n4-trusted_wrap .n4-g_background,
main .n4-section_padded_wrap:has(.n4-stories_wrap),
main .n4-section_padded_wrap:has(.n4-stories_wrap) .n4-g_background {
  background-color: #2f213e !important;
  /* flat. The mesh paints the cream bands; on these it showed through as blotches */
  background-image: none !important;
}
body main section.n4-section_wrap:has(.n4-industries_contain)
  :is(h1, h2, h3, h4, p, span, div, li, a):not([class*=card] *):not([class*=card]),
body main section.n4-section_wrap:has(.n4-cta_main_bg_wrap)
  :is(h1, h2, h3, h4, p, span, div, li, a):not([class*=card] *):not([class*=card]),
body main section.n4-trusted_wrap
  :is(h1, h2, h3, h4, p, span, div, li, a):not([class*=card] *):not([class*=card]) {
  color: #ffffff !important;
}

/* The ball behind the closing call to action ran lavender to cyan. Cyan is the
   reference's colour, not the practice's: it runs lavender to cream instead. */
.n4-cta_main_bg_circle {
  background-image: linear-gradient(#e7dcf3, #ede9e3) !important;
}

/* The stories card washed its photograph in purple, which left the heading dark
   on dark. The wash is cream, so the type on it reads as it does everywhere else. */
.n4-stories_bg_radial {
  background-image: radial-gradient(circle at 50% 90%,
    rgba(255, 255, 255, .72), #ede9e3 42%, #e2dcd2) !important;
}

/* The affiliations label went dark on dark, leaving its bullet alone on the band. */
#main section.n4-trusted_wrap .n4-g_subtitle_text,
#main section.n4-section_wrap:has(.n4-industries_contain) .n4-g_subtitle_text,
#main section.n4-section_wrap:has(.n4-cta_main_bg_wrap) .n4-g_subtitle_text {
  color: #ffffff !important;
}

/* ------------------------------- THE FEATURE CARDS THE REFERENCE LEFT EMPTY
   Three of its cards are Rive canvases; without that runtime they were blank
   space. These are the SVGs that replaced them, moved with CSS: the clock runs,
   the treatment chips settle in under the roof, and the line between the three
   towns draws itself. Motion stops entirely for anyone who asks it to. */
.fl-viz { display: block; width: 100%; height: 100%; }
.fl-roof { max-width: 15rem; margin-inline: auto; }

.fl-clock-min { transform-origin: 100px 100px; animation: fl-sweep 6s linear infinite; }
.fl-clock-hour { transform-origin: 100px 100px; animation: fl-sweep 72s linear infinite; }
@keyframes fl-sweep { to { transform: rotate(360deg); } }

.fl-roof-line { stroke-dasharray: 220; stroke-dashoffset: 220; animation: fl-draw 1.6s ease-out forwards; }
.fl-roof-dots rect { opacity: 0; animation: fl-pop .5s ease-out forwards; }
.fl-roof-dots rect:nth-child(1) { animation-delay: .5s }
.fl-roof-dots rect:nth-child(2) { animation-delay: .62s }
.fl-roof-dots rect:nth-child(3) { animation-delay: .74s }
.fl-roof-dots rect:nth-child(4) { animation-delay: .86s }
.fl-roof-dots rect:nth-child(5) { animation-delay: .98s }
.fl-roof-dots rect:nth-child(6) { animation-delay: 1.1s }
.fl-roof-dots rect:nth-child(7) { animation-delay: 1.22s }
.fl-roof-dots rect:nth-child(8) { animation-delay: 1.34s }
@keyframes fl-draw { to { stroke-dashoffset: 0; } }
@keyframes fl-pop { from { opacity: 0; transform: translateY(6px) } to { opacity: .85; transform: none } }

.fl-towns-arc { stroke-dasharray: 7 9; animation: fl-travel 2.4s linear infinite; }
@keyframes fl-travel { to { stroke-dashoffset: -32; } }
.fl-towns-dot { transform-box: fill-box; transform-origin: center; animation: fl-pulse 3.2s ease-in-out infinite; }
.fl-towns-dot.fl-is-2 { animation-delay: .4s }
.fl-towns-dot.fl-is-3 { animation-delay: .8s }
@keyframes fl-pulse { 0%, 100% { transform: scale(1) } 50% { transform: scale(1.09) } }

/* the marker that replaced the reference's icon on each chip */
.fl-chip-dot {
  width: .5rem; height: .5rem; border-radius: 50%;
  background: currentColor; opacity: .55; flex: 0 0 auto;
}

@media (prefers-reduced-motion: reduce) {
  .fl-clock-min, .fl-clock-hour, .fl-roof-line, .fl-roof-dots rect,
  .fl-towns-arc, .fl-towns-dot { animation: none; }
  .fl-roof-line { stroke-dashoffset: 0; }
  .fl-roof-dots rect { opacity: .85; }
}

/* -------------------------- THE REVIEW BAND ON THE SERVICE PAGES, MADE READABLE
   .hrmreview_wrap is a dark violet band carrying a heading, a line of review counts
   and a row of cream review cards. The page's blanket rule paints every heading and
   paragraph in a section #2f213e with !important, so the heading and the count line
   were near-black on dark violet — a contrast of 1.63 where 4.5 is the floor. On 39
   service pages.

   Only the type sitting directly on the violet turns white. Anything inside a review
   card keeps its ink: those cards are cream, and painting them white too would hide
   the reviews instead of the heading — the same mistake, one band further down. The
   ID carries the weight, because the rule being corrected is worth (0,4,3). */
#main section.hrmreview_wrap :is(h1, h2, h3, h4, h5, p, span, div, li, em, strong) {
  color: #ffffff !important;
}
/* and the cards take their ink back. Excluding them from the rule above is not enough: their
   text would then inherit the white from the band around them, which is how the review quotes
   turned white on cream the first time this was fixed. */
#main section.hrmreview_wrap .hrm4_card_wrap,
#main section.hrmreview_wrap .hrm4_card_wrap :is(h1, h2, h3, h4, h5, p, span, div, li, em, strong) {
  color: #2f213e !important;
}

/* ============================ NO INVISIBLE TEXT: THE SITE-WIDE SWEEP (2026-09-18)
   Every page was loaded and every element that owns text measured against the colour
   it actually sits on (WCAG contrast), then every photo-backed block checked by
   geometry for text overlapping the photograph. What follows is everything that came
   back under 3:1, grouped by cause. The root cause of most of it is one rule above:
   the blanket ink rule paints every heading, paragraph and div inside a section
   #2f213e with !important. That is right on ivory and wrong on every dark surface —
   and it also overrode each button's own colour system, resting and hover alike.

   Order matters below. Section rules come first; button rules come last and carry an
   extra `html body` so a whitened section can never repaint a button's label. */

/* --- dark surfaces: type turns white ------------------------------------------------ */

/* the dark title bar on the financing plan cards (39 service pages; was 1.63) */
html body #main .plan_title_wrap,
html body #main .plan_title_wrap * { color: #ffffff !important; }
/* …except Cherry's, which is gold (.is-light): white on it read at 1.60 */
html body #main .plan_title_wrap.is-light,
html body #main .plan_title_wrap.is-light * { color: #2f213e !important; }

/* the reviews section on the city pages: heading, eyebrow, quotes, names — every line
   of it was #2f213e on #2f213e, contrast 1.00 (4 pages). Its cards are transparent
   over the violet, so there is no cream card to protect here. */
#main section.n4-experience2_wrap :is(h1, h2, h3, h4, h5, p, span, div, li, em, strong, a) { color: #ffffff !important; }
/* …except the card the carousel is showing. The 21 cards are glass on violet, but the active
   slide flips to an ivory fill (--_theme---background--bg-primary) to stand out, so its type
   has to flip back to ink. Keyed on .is-active, so it follows the carousel as it turns. */
#main .n4-swiper_experience2_swiper_slide.swiper-slide.is-active .n4-experience2_card_wrap,
#main .n4-swiper_experience2_swiper_slide.swiper-slide.is-active .n4-experience2_card_wrap :is(h1, h2, h3, h4, h5, p, span, div, li, em, strong, a) { color: #2f213e !important; }

/* NOT the closing banner on the service pages (.cta1_wrap). It has a photograph behind it, and
   a geometry check found its heading overlapping that photo — but the heading sits on a cream
   card laid over the photo, not on the photo itself. Its dark type was right; whitening it made
   it white on cream on 33 pages until it was caught by eye. Overlap with a photo is not the same
   as sitting on it: check for an opaque layer in between. */

/* the city-page hero sits on a photograph of the team (Baltimore, Towson, Timonium) */
#main section.n4-header1_wrap :is(h1, h2, h3, h4, h5, p, span, div, li, em, strong) { color: #ffffff !important; }

/* the treatment cards on the city pages are 5%-white glass with white type, built for a
   violet ground; the band's own heading and intro were built for a light one. Giving the band
   its violet back (the first attempt) made the heading dark on dark (1.00). The cards take
   dark type instead, so the whole band reads on ivory. */
#main section.n4-programs_wrap :is(.n4-programs_card_heading, .n4-programs_card_text) { color: #2f213e !important; }

/* the "Your smile isn't in pieces" band on /our-services/ sits on a photograph under a
   dark overlay that fades to black; every line of it was #2f213e (1.41). Its only light
   child is the ground layer behind the photo, so there is no card to protect. */
#main section:has(.n4-cta3_para) :is(h1, h2, h3, h4, h5, p, span, div, li, em, strong) { color: #ffffff !important; }

/* --- light surfaces: type turns dark ------------------------------------------------ */

/* one of the six accordion-card colours is a pale blue-grey; cream type on it read at
   1.96. The other five are dark enough and keep their cream. */
#main .hcp1_card.w-variant-a55e5bb6-dc2f-c3ce-88b1-855d5b06883e,
#main .hcp1_card.w-variant-a55e5bb6-dc2f-c3ce-88b1-855d5b06883e * { color: #2f213e !important; }

/* --- buttons: their own colour system, resting and hover ---------------------------- */
/* Each button variant sets --_button-style---text / -text-hover (and the text-link
   buttons --_button-text-style---*). The wrapper uses them; the label inherits. The
   blanket rule matched the wrapper div and the label and painted both #2f213e, which
   is how "Book a visit" became #2f213e on a #2f213e button (1.00, 39 pages) — and why
   hovering could not fix it: the hover colour lost to the same !important. */
html body #main :is(.btn_main_wrap, .n4-btn_main_wrap) { color: var(--_button-style---text) !important; }
html body #main :is(.btn_main_wrap, .n4-btn_main_wrap) :is(div, span, p) { color: inherit !important; }
html body #main :is(.btn_text_wrap, .n4-btn_text_wrap) { color: var(--_button-text-style---text) !important; }
html body #main :is(.btn_text_wrap, .n4-btn_text_wrap) :is(div, span, p) { color: inherit !important; }
/* the treatment cards' "Learn more" is a text button, so the rule above hands it the colour its
   section was built for — white, for a violet ground this band no longer has. It takes the same
   ink as the card text around it, resting and hovered (more specific than both rules). */
html body #main section.n4-programs_wrap .n4-btn_text_wrap,
html body #main section.n4-programs_wrap .n4-btn_text_wrap:hover { color: #2f213e !important; }
@media (hover: hover) {
  html body #main :is(.btn_main_wrap, .n4-btn_main_wrap):hover { color: var(--_button-style---text-hover) !important; }
  html body #main :is(.btn_text_wrap, .n4-btn_text_wrap):hover { color: var(--_button-text-style---text-hover) !important; }
}

/* --------------------------------- THE IVORY BAND ABOVE THE HERO ON A PHONE
   The hero's gradient is a rounded card inset inside its section: 12px at the
   sides and bottom, 54px at the top. On a wide screen that top inset is the room
   the floating, transparent header sits in. On a phone the header is a solid bar
   with its own height, so the inset has nothing to do and 56px of the ivory ground
   shows as a line between the header and the gradient.

   The reference sets padding:0 here below 767px for exactly this reason, and its
   rule does not take: at 375px the media query matches, both copies of the rule
   are parsed and match the element, and the later one still loses to the base
   declaration. Nothing else on the page sets padding on it — not an inline style,
   not one of the in-body <style> blocks, not another sheet — and switching the
   base rule off through the CSSOM does not change the computed value either.
   Unexplained, so this states the same intent in a form that does win. */
@media screen and (max-width: 767px) {
  .n4-hero_main_bg_wrap { padding-top: 0 !important; }
}

/* ------------------------------------------- THE HOMEPAGE HERO: STILL ON PHONES
   Below 768px the hero is a photograph (the film never loads there); from 768px
   up it is the film, and the still is a 1px gif kept out of the way. */
@media screen and (max-width: 767px) { .n4-hero_main_bg_inner .fl-hero-film { display: none !important; } }
@media screen and (min-width: 768px) { .n4-hero_main_bg_inner .fl-hero-still { display: none !important; } }

/* ----------------------------- THE SERVICE PAGES' "ACCESS THE WHOLE PRACTICE" BAND
   Its heading and paragraph sit on a dark photograph of the team; the reference
   marked the paragraph u-color-light, and the blanket ink rule overrode it to
   #2f213e, dark on dark. White here. The service pills that run across the band
   are light chips and keep their ink (restated after, the inheritance trap). */
#main section.practice_wrap .practice_header :is(h1, h2, h3, h4, p, span, div, em, strong) { color: #ffffff !important; }
#main section.practice_wrap .practice_provider_item,
#main section.practice_wrap .practice_provider_item * { color: #2f213e !important; }

/* --------------------------------------------- THE QUOTE MARK BESIDE A REVIEW
   /blog/'s featured review had the doctor's face beside a patient's words; it is
   a quote mark now, in the circle the photograph filled. */
.fl-quote-badge {
  /* its row squeezed the width (the old photo sat at 133x200, an oval); a circle keeps its own size */
  flex: 0 0 auto;
  aspect-ratio: 1 / 1;
  height: auto !important;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #4a2f63;
  color: #ffffff;
  font-family: var(--_typography---font--secondary-family, IvarDisplay, Georgia, serif);
  font-size: 7rem;
  line-height: 1;
  padding-top: 2.2rem;
}
@media (max-width: 767px) { .fl-quote-badge { font-size: 5rem; padding-top: 1.6rem; } }

/* ------------------------------------ THE ABOUT MENU: THE PAGES WITHOUT A CARD
   Four About pages have a photo card; Testimonials, Dental Technology and
   Employment Opportunities do not, so they sit in a row beneath the card grid
   (skin.py places the row after the grid, not in it). Its parent stacks its
   children in a column, so the row must not carry a flex-basis: 100% there
   means 100% of the height, which is how it once stretched the full height of
   the menu and dropped its second line below the page. */
/* The same parent runs side by side from 768px up and stacks below that (measured). Side by
   side, the full-width row needs the parent to wrap, or it sits beside the card grid and squeezes
   all four cards into 179px. Stacked, it must NOT wrap: wrapping a column lets the card grid
   shrink its height and the cards pile on top of one another. So the wrap is 768px and up only.
   Scoped to the About menu (.n4-is-for-you-dp). */
@media (min-width: 768px) {
  .wrap__nav-drop-list.n4-is-for-you-dp { flex-wrap: wrap; }
}
.fl-about-more {
  flex: none;
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  gap: .4rem 1.6rem;
  margin-top: .9rem;
  padding-top: .9rem;
  border-top: 1px solid rgba(47, 33, 62, .12);
}
.fl-about-more-link {
  font-size: .95rem;
  line-height: 1.5;
  color: #2f213e !important;
  text-decoration: none;
  transition: color .15s ease;
}
.fl-about-more-link:hover { color: #7b4fa6 !important; }

/* ------------------------------- THE PATIENT INFO MENU, SIZED TO WHAT IS IN IT
   The reference sets this dropdown to a fixed 820px because a promoted article
   sat beside the list — a label, a headline, a "View guide" link and a thumbnail.
   The link went nowhere and the thumbnail was whatever the image fallback found,
   so scripts/skin.py removes it. Without the override the box keeps its 820px and
   half of it is empty. */
.wrap__nav-drop-list.dropdown-right-v2 {
  width: auto !important;
  min-width: 15rem;
}
.wrap__nav-drop-list.dropdown-right-v2 .mega-nav-left-block {
  padding-right: 2.2rem;
}

/* ------------------------------------ WHAT SITS UNDER FINANCING IN THE MENU
   CareCredit and Cherry are the two ways to pay over time that the Financing
   page explains, so the Patient Info menu sets them in under it with a short
   tick, rather than listing all three as equals. */
.nav__dropdown-item.fl-subitem {
  position: relative;
  padding-left: 1.3rem;
  font-size: .92em;
  opacity: .82;
}
.nav3_dropdown_link_wrap.fl-subitem {
  padding-left: 1.1rem;
  opacity: .82;
}
.nav__dropdown-item.fl-subitem:before {
  content: "";
  position: absolute;
  left: .4rem;
  top: .95em;
  width: .5rem;
  height: 1px;
  background: currentColor;
  opacity: .5;
}

/* The marks are full-colour brand assets — CareCredit is teal, Cherry is a
   green-to-teal gradient — so on the purple marquee they read as two stray
   greens, the exact colour the re-skin removed. The reference ran its own
   logo strip monochrome for the same reason. Knocking them to flat white at
   reduced opacity is the standard reversed-logo treatment and keeps the
   strip reading as one row rather than a colour clash. */
.n4-marquee_logo {
  filter: brightness(0) invert(1);
  opacity: .72;
}

/* ---------------------------------------------------------- FOOTER TYPE
   Matched to the reference, measured rather than guessed. At 1440 its footer
   gives: column titles #71d1b5 at 14.08px/400, no letter-spacing and no
   uppercase; links pure white at 14.08px/400, letter-spacing -0.3178px and
   FULL opacity. An earlier pass here invented uppercase 600 titles and dimmed
   the links to .84 — both are undone below.

   The only thing that changes is hue: those green tokens are rotated to the
   brand purple by palette.apply(), so #71d1b5 arrives as its violet twin at
   the same lightness and chroma. */
.n4-footer_wrap,
.n4-footer_wrap a { color: #fff; }
/* every footer string is white EXCEPT the column titles, which the reference
   colours with its accent token — so that one class is excluded rather than
   overridden, and picks up the rotated purple on its own. */
.n4-footer_link_text:not(.n4-u-color-primary-green950),
.n4-footer_bottom_text,
.n4-footer_content_link,
.n4-footer_form_subtitle_text,
.n4-footer_form_disclaimer { color: #fff !important; }
.n4-footer_link_wrap .n4-footer_link_text { opacity: 1; }
.n4-footer_link_text.n4-u-color-primary-green950 {
  opacity: 1;
  font-weight: 400;
  letter-spacing: normal;
  text-transform: none;
}
/* the practice's mark is dark artwork on transparent; reversed for the slab */
.n4-footer_logo_wrap img,
.n4-footer_wrap img[src$="cropped-logo1-1.png"] {
  filter: brightness(0) invert(1);
  opacity: .92;
}

/* ------------------------------------------ THE ABOUT DROPDOWN'S CARDS
   Lifted from the reference by nav_rules() so every page has them, not only
   the ones whose own stylesheet happened to carry them. */
.n4-nav-dp_for-you_wrap{grid-column-gap:16px;grid-row-gap:16px;grid-template-rows:auto;grid-template-columns:1fr 1fr 1fr 1fr;grid-auto-columns:1fr;display:grid}
.n4-nav-dp_for-you_wrap.n4-u-flex-horizontal-wrap.n4-u-gap-4{flex:1}
.n4-nav-dp_for-you_wrap.n4-u-hflex-left-stretch{flex:none}
.n4-nav-dp_for-you_card{width:100%;max-width:13.5rem;min-height:13.5rem;padding:var(--_spacing---space--4);aspect-ratio:1;border-radius:var(--_site---radius--small);flex:none}
.n4-nav-dp_for-you_card.n4-u-position-relative.n4-u-overflow-hidden.n4-u-hflex-between-stretch.n4-u-theme-dark:hover{color:var(--_theme---text--text-white)}
.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-glp1{background-image:url(https://d3e54v103j8qbb.cloudfront.net/img/background-image.svg);background-position:0 0;background-size:auto}
.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-hormone{object-fit:cover;object-position:100% 50%}
.n4-nav-dp_for-you_card-text.cc-serif{color:var(--teal);font-family:Ivardisplay,Arial,sans-serif;font-style:italic;font-weight:400}
@media screen and (max-width:991px){.n4-nav-dp_for-you_wrap{flex:1;grid-template-columns:1fr}.n4-nav-dp_for-you_wrap.n4-u-flex-horizontal-wrap.n4-u-gap-4{grid-column-gap:var(--_gap---size);grid-row-gap:var(--_gap---size);grid-column-gap:var(--_gap---size);grid-row-gap:var(--_gap---size);grid-column-gap:var(--_gap---size);grid-row-gap:var(--_gap---size);grid-template-rows:auto auto;grid-template-columns:1fr 1fr;grid-auto-columns:1fr;display:grid}.n4-nav-dp_for-you_card{max-width:none}.n4-nav-dp_for-you_card.n4-u-position-relative.n4-u-overflow-hidden.n4-u-hflex-between-stretch.n4-u-theme-dark{aspect-ratio:2.39;aspect-ratio:2.39;aspect-ratio:2.39;aspect-ratio:2.39;aspect-ratio:2.39}.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-glp1{object-fit:cover;object-position:50% 25%}.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-employer{object-position:50% 20%}}
@media screen and (max-width:479px){.n4-nav-dp_for-you_card.n4-u-position-relative.n4-u-overflow-hidden.n4-u-hflex-between-stretch.n4-u-theme-dark{min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3)}}
.n4-nav-dp_for-you_wrap{grid-column-gap:16px;grid-row-gap:16px;grid-template-rows:auto;grid-template-columns:1fr 1fr 1fr 1fr;grid-auto-columns:1fr;display:grid}
.n4-nav-dp_for-you_wrap.n4-u-flex-horizontal-wrap.n4-u-gap-4{flex:1}
.n4-nav-dp_for-you_wrap.n4-u-hflex-left-stretch{flex:none}
.n4-nav-dp_for-you_card{width:100%;max-width:13.5rem;min-height:13.5rem;padding:var(--_spacing---space--4);aspect-ratio:1;border-radius:var(--_site---radius--small);flex:none}
.n4-nav-dp_for-you_card.n4-u-position-relative.n4-u-overflow-hidden.n4-u-hflex-between-stretch.n4-u-theme-dark:hover{color:var(--_theme---text--text-white)}
.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-glp1{background-image:url(https://d3e54v103j8qbb.cloudfront.net/img/background-image.svg);background-position:0 0;background-size:auto}
.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-hormone{object-fit:cover;object-position:100% 50%}
.n4-nav-dp_for-you_card-text.cc-serif{color:var(--teal);font-family:Ivardisplay,Arial,sans-serif;font-style:italic;font-weight:400}
@media screen and (max-width:991px){.n4-nav-dp_for-you_wrap{flex:1;grid-template-columns:1fr}.n4-nav-dp_for-you_wrap.n4-u-flex-horizontal-wrap.n4-u-gap-4{grid-column-gap:var(--_gap---size);grid-row-gap:var(--_gap---size);grid-column-gap:var(--_gap---size);grid-row-gap:var(--_gap---size);grid-column-gap:var(--_gap---size);grid-row-gap:var(--_gap---size);grid-template-rows:auto auto;grid-template-columns:1fr 1fr;grid-auto-columns:1fr;display:grid}.n4-nav-dp_for-you_card{max-width:none}.n4-nav-dp_for-you_card.n4-u-position-relative.n4-u-overflow-hidden.n4-u-hflex-between-stretch.n4-u-theme-dark{aspect-ratio:2.39;aspect-ratio:2.39;aspect-ratio:2.39;aspect-ratio:2.39;aspect-ratio:2.39}.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-glp1{object-fit:cover;object-position:50% 25%}.n4-nav-dp_for-you_img.n4-u-cover-absolute.cc-employer{object-position:50% 20%}}
@media screen and (max-width:479px){.n4-nav-dp_for-you_card.n4-u-position-relative.n4-u-overflow-hidden.n4-u-hflex-between-stretch.n4-u-theme-dark{min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3);min-height:0;padding:var(--_spacing---space--3)}}

/* ---------------------------------------------------------------- TYPE
   Free faces aliased onto the reference's family names. Because the alias
   uses ITS family name, not one rule in reference.css needs editing.

   Helvetica Now Display 400-700 -> Arimo
   Helvetica Now Display 100-300 -> Red Hat Display (light headings)
   Ivar Display italic           -> Playfair Display
   (+ 'Helvetica Now Display' -> Red Hat Display / Arimo, and on the second
      reference site 'Ivardisplay' / 'IvarDisplay Italic' -> Crimson Pro;
      measured by line-fit, see below)
   Basis Grotesque Mono          -> IBM Plex Mono

   Arimo replaced Inter for PARITY. Inter is ~10% wider than Helvetica Now,
   which wrapped footer links and testimonial quotes onto extra lines
   (/solutions footer 585px vs 548). Arimo ships no light weights, and the
   design sets 39 headings (the H1 included) at 300.

   CORRECTION 2026-09-12: an earlier note here said Arimo alone gave
   identical line breaks. It did not — the reference's own @font-face rules
   were still in the page CSS, so for weight 300 the browser was quietly
   downloading the LICENSED Helvetica Now Display Light from the reference's
   CDN. With those rules stripped (localise_css.py), Arimo 400 standing in
   for 300 made /solutions 175px taller than the mirror.

   Light faces were then measured against the licensed Light on the mirror
   (canvas advance widths, all 32 weight-300 strings, 45 Google families):
     Red Hat Display  mean 1.008  worst 0.046   <- chosen
     Urbanist         mean 1.027  worst 0.047
     Inter Tight      mean 1.037  worst 0.060
     Figtree / Inter  wider still
   The italic serif does not move layout; Instrument Serif and EB Garamond
   gave the same page height as Playfair.

   size-adjust was tried and REMOVED. It scales the glyphs, so correcting
   the average advance rendered the type visibly smaller — cap height fell
   from Inter's natural 0.727 to 0.663 — while barely improving fit
   (mean width error 7.76% -> 7.70%, and p90 got worse: 13.8% -> 15.5%).
   It is a fallback-layout-shift tool, not a typeface-matching one.

   Cost of using free faces, measured full-page against the mirror:
     licensed faces   mean width error 4.00%, 90% of nodes within 1%
     free faces       mean width error 7.76%, 61% of nodes within 1%
   Text reflows a little. That is unavoidable with a different typeface.
   ------------------------------------------------------------------ */


@font-face {
  font-family: 'Helveticanowdisplay';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-f70c80f681.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Helveticanowdisplay';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-1aa5637c67.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Helvetica Now Text';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-f70c80f681.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Helvetica Now Text';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-1aa5637c67.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Helveticanowdisplay';
  font-style: normal;
  font-weight: 100 300;
  font-display: swap;
  src: url(../assets/fonts/google/redhatdisplay-7954674046.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Helveticanowdisplay';
  font-style: normal;
  font-weight: 100 300;
  font-display: swap;
  src: url(../assets/fonts/google/redhatdisplay-b0ee7f7451.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Helvetica Now Text';
  font-style: normal;
  font-weight: 100 300;
  font-display: swap;
  src: url(../assets/fonts/google/redhatdisplay-7954674046.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Helvetica Now Text';
  font-style: normal;
  font-weight: 100 300;
  font-display: swap;
  src: url(../assets/fonts/google/redhatdisplay-b0ee7f7451.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Blog templates (/post/..., /blog). Their titles use 'Domaine Display'
   and their small labels 'Proxima Nova'; neither was aliased, so both fell
   back to Arial. No page built before the blog renders either family
   (checked on /, /our-services/, /holistic-dentistry/, /mercury-free-dentistry/).

   Serif by the same LINE-FIT test, on the live post's three Domaine Display
   blocks (50px title, two 40px headings), height change summed:
     1440px  Lora 0   Libre Caslon Display 1   Cormorant 1   Playfair 3
     390px   Libre Caslon Display 1   Cormorant 1   Playfair 2   Lora 42
   Playfair Display: small in both, and the closest widths (361 vs 356px,
   278 vs 277px) where Libre Caslon runs 53px short. Already on the site.
   Proxima Nova -> Montserrat, the practice's own brand face. Only short
   single-line labels use it, so no line-fit test was run for it. */
@font-face {
  font-family: 'Domaine Display';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-7bd4464b2b.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Domaine Display';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-e8ddaaf2e9.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Proxima Nova';
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url(../assets/fonts/google/montserrat-c0721bd57e.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Proxima Nova';
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url(../assets/fonts/google/montserrat-83f20e36c0.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Family names used by the second reference site (mavend2c: /hormone-care,
   /virtual-clinic).

   Serif chosen by a LINE-FIT test on the live reference page, not by
   average advance width: each candidate was set on every heading in its
   real box, and the number whose height changed was counted.
     upright (54 headings)      Crimson Pro 0 changed, 0px   Petrona 1   Newsreader 3
     italic (7 heading blocks)  Crimson Pro 0 changed, 0px
   Sans, same test, by weight (93 regular / 101 medium / 11 bold blocks):
     400  Inter Tight 8 changed   Barlow 8   Source Sans 3 9 ...  Arimo 27 (worst)
     500  Arimo 0 changed         700  Arimo 0 changed
   so this site's regular weight takes Inter Tight and the rest stay Arimo.
   Average width misled: EB Garamond measured 0.999 and still wrapped
   narrow (max-width 181px) headings, +77px in one section; Playfair
   was not in the top 8 at all. The first site's italic aliases below
   are unchanged — /solutions measured the same with any serif. */
@font-face {
  font-family: 'Helvetica Now Display';
  font-style: normal;
  font-weight: 100 300;
  font-display: swap;
  src: url(../assets/fonts/google/redhatdisplay-7954674046.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Helvetica Now Display';
  font-style: normal;
  font-weight: 100 300;
  font-display: swap;
  src: url(../assets/fonts/google/redhatdisplay-b0ee7f7451.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Helvetica Now Display';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/intertight-c7d3aab7f6.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Helvetica Now Display';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/intertight-249c56a5aa.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Helvetica Now Display';
  font-style: normal;
  font-weight: 500 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-f70c80f681.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Helvetica Now Display';
  font-style: normal;
  font-weight: 500 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-1aa5637c67.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IvarDisplay Italic';
  font-style: italic;
  font-weight: 200 900;
  font-display: swap;
  src: url(../assets/fonts/google/crimsonpro-91a72e6fc2.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IvarDisplay Italic';
  font-style: italic;
  font-weight: 200 900;
  font-display: swap;
  src: url(../assets/fonts/google/crimsonpro-02b4e6b4b4.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Ivardisplay Italic';
  font-style: italic;
  font-weight: 200 900;
  font-display: swap;
  src: url(../assets/fonts/google/crimsonpro-91a72e6fc2.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Ivardisplay Italic';
  font-style: italic;
  font-weight: 200 900;
  font-display: swap;
  src: url(../assets/fonts/google/crimsonpro-02b4e6b4b4.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Ivardisplay';
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url(../assets/fonts/google/crimsonpro-f619f4a805.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Ivardisplay';
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url(../assets/fonts/google/crimsonpro-d02a7ae7e5.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'IvarDisplay';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-c61263349f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'IvarDisplay';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-99bd3f4a0d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'IvarDisplay';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-c61263349f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'IvarDisplay';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-99bd3f4a0d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Ivardisplay';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-c61263349f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Ivardisplay';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-99bd3f4a0d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Ivardisplay';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-c61263349f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Ivardisplay';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-99bd3f4a0d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Ivarheadline';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-c61263349f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Ivarheadline';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-99bd3f4a0d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Ivarheadline';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-c61263349f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Ivarheadline';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/playfairdisplay-99bd3f4a0d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Basis Grotesque Mono Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-18610eead9.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Basis Grotesque Mono Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-28b7a6272d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Basis Grotesque Mono Pro';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-8518a4159f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Basis Grotesque Mono Pro';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-d48beb2b7a.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* The page fonts (Arimo, Instrument Serif, IBM Plex Mono), served from this site.
   Generated by scripts/local_fonts.py from Google Fonts' own stylesheet. */
/* cyrillic-ext */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-43f79f20ee.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-4a5b9adcbf.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-9f6db621ea.woff2) format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-18aac4a9cf.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* hebrew */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-6b7711bf35.woff2) format('woff2');
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
/* vietnamese */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-9ad6689d1f.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-f70c80f681.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Arimo';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(../assets/fonts/google/arimo-1aa5637c67.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-8ca1caff41.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-39420b8efb.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* vietnamese */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-87c8c13ace.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-18610eead9.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-28b7a6272d.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-df86a9cca1.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-a024c307a2.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* vietnamese */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-91b5f38583.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-8518a4159f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../assets/fonts/google/ibmplexmono-d48beb2b7a.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Instrument Serif';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/instrumentserif-21ef03f44f.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Instrument Serif';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/instrumentserif-837d4c1443.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Instrument Serif';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/instrumentserif-9790730a9a.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Instrument Serif';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/google/instrumentserif-950f87b880.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* The reference's own @font-face rules are STRIPPED from reference.css
   (localise_css.py). Declaring the aliases later was not enough: they do
   not cover every weight, and for 100/300/500 the browser matched the
   reference's rule and fetched the licensed file from its CDN. */
