.elementor-kit-6{--e-global-color-primary:#6EC1E4;--e-global-color-secondary:#54595F;--e-global-color-text:#7A7A7A;--e-global-color-accent:#61CE70;--e-global-typography-primary-font-family:"Roboto";--e-global-typography-primary-font-weight:600;--e-global-typography-secondary-font-family:"Roboto Slab";--e-global-typography-secondary-font-weight:400;--e-global-typography-text-font-family:"Roboto";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500;}.elementor-kit-6 e-page-transition{background-color:#FFBC7D;}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1140px;}.e-con{--container-max-width:1140px;}.elementor-widget:not(:last-child){--kit-widget-spacing:20px;}.elementor-element{--widgets-spacing:20px 20px;--widgets-spacing-row:20px;--widgets-spacing-column:20px;}{}h1.entry-title{display:var(--page-title-display);}@media(max-width:1024px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}}:root { --paper:#FAF8F4; --paper-warm:#F4F1EA; --ink:#1C2521; --ink-muted:#4C5650; --eucalypt:#2E4B3F; --eucalypt-deep:#233A30; --clay:#C4643C; --clay-deep:#A9502C; --clay-darkest:#8F4324; --sand:#E7E1D6; --sand-line:#CFC7B8; --hairline:#D8D2C6; --hairline-on-fill:rgba(244,241,234,0.22); --ink-muted-on-fill:rgba(244,241,234,0.72); --font-display:Newsreader; --font-body:Figtree; --font-brand:Dancing Script; --fs-body:1.125rem; --fs-small:0.95rem; --fs-label:0.78rem; --wrap-max:92rem; --measure:34em; --fs-hero:clamp(2.15rem, 1.15rem + 4.6vw, 5.1rem); --fs-h2:clamp(1.9rem, 1.3rem + 2.4vw, 3rem); --fs-h3:clamp(1.3rem, 1.05rem + 1vw, 1.65rem); --fs-lede:clamp(1.2rem, 1.06rem + 0.7vw, 1.5rem); --section-y:clamp(3.75rem, 2.2rem + 6vw, 7.5rem); --gutter:clamp(1.5rem, 1.1rem + 1.7vw, 3.25rem); --wrap-max-narrow:70rem; }
/* Start custom CSS *//* ---- Dr Esh: page-level additions Elementor's style layer cannot express ----
   Loads BEFORE Elementor's class CSS, so overrides use doubled class names.

   Responsive behaviour is deliberately NOT here. Everything that changes with
   viewport width is a tablet or mobile variant on the element or the global
   class, so it stays visible and editable in the builder. app.css collapses at
   520, 800, 860 and 1100, which Elementor has no breakpoints for; those are
   mapped onto 767 and 1024 rather than reproduced with raw queries.

   Removed from here on purpose:
   - header and mobile nav rules, now in the child theme (header.php plus
     assets/css/site-chrome.css)
   - the data-URI section icons, now real e-svg elements on the page
   - the classic Form widget rules, now that the contact form stayed atomic
   ---- */
/* Matches the design's own body rule. Without the font-size, bare <span> text
   such as the dash lists inherits the browser's 16px instead of the 18px body
   size, so it renders a step smaller than the surrounding paragraphs. */
body{font-family:Figtree,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:1.125rem;line-height:1.65}
/* Elementor strips multi-family stacks and Figtree has no U+2192, so the arrow
   glyph needs a real fallback or the browser default renders a different arrow. */
.elementor .arrow-glyph.arrow-glyph{font-family:Figtree,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif}
/* the one interaction motif: clay arrow slides, card name underlines.
   Descendant rules are stripped from Elementor's global classes, so these
   have to live here. Targets .card-name rather than the first span, because a
   resource card leads with a category eyebrow and the underline belongs on the
   title. */
.elementor .arrow-link:hover .arrow-glyph,.elementor .card-dir:hover .arrow-glyph{transform:translateX(0.4rem)}
.elementor .card-dir:hover .card-name{background-image:linear-gradient(var(--clay),var(--clay));background-repeat:no-repeat;background-position:0 100%;background-size:100% 2px}
@media (prefers-reduced-motion:reduce){.elementor .arrow-glyph.arrow-glyph{transition:none}}
/* Interior page heroes cap the H1 at 16ch, per app.css. Descendant rule, so
   it cannot live in the page-hero global class. */
.elementor .page-hero .page-title{max-width:16ch}
/* Download arrows on resource cards lift instead of sliding sideways. */
.elementor .rgrid .card-dir:hover .arrow-glyph{transform:translateY(-0.3rem)}
/* ---- LINKED PARAGRAPH TAP TARGETS ----
   Elementor renders a linked paragraph as <span class="..."><a>text</a></span>,
   so any box styling on the class lands on the span while the anchor stays a
   small inline box around the text only. On the jump index that left the pill
   padding and the whole chevron side unclickable, which read as the mobile
   scroll links being broken. Push the anchor out to fill its span and move the
   padding onto it. box-sizing is explicit because the anchor is content-box by
   default, so min-height plus padding would make a 64px pill instead of 44px.
   Doubled class so it outranks the global class. */
.elementor .jump-link.jump-link{padding:0}
.elementor .jump-link>a{box-sizing:border-box;display:flex;align-items:center;width:100%;min-height:44px;padding-block:0.55rem;padding-inline:0.95rem;color:inherit;text-decoration:none}
.elementor .foot-link>a{display:block}
/* ---- outline icons ----
   Elementor rewrites an inlined SVG's fill="none" to fill="currentColor", which
   fills stroke-only line art solid. fill is a presentation attribute, so a CSS
   rule beats it. Scoped to .icon-stroke so filled icons are unaffected, and it
   needs a descendant rule, which global classes strip, so it lives here. */
.elementor .icon-stroke svg,
.elementor .icon-stroke svg *{fill:none;stroke:currentColor}
/* ---- on-page jump index ----
   Stacked full-width at tablet and below, with a chevron so it reads as
   navigation. Matches Elementor's tablet breakpoint. The chevron lives inside
   the anchor so it stays part of the tap target, and a descendant rule cannot
   live on the global class. */
@media (max-width:1024px){
.elementor .jump-link>a{justify-content:space-between}
.elementor .jump-link>a::after{content:"";flex:none;width:0.5rem;height:0.5rem;margin-inline-start:1rem;border-right:1.5px solid var(--clay);border-bottom:1.5px solid var(--clay);transform:rotate(-45deg)}
}
/* ---- reCAPTCHA v2 on the atomic form ----
   The token carrier is a real form field, because the atomic form serialises
   only its own fields and a raw hidden input would never reach the payload. It
   is not meant to be seen or focused, so it is taken out of the layout rather
   than just visually hidden.

   Deliberately no overflow on the widget box. Setting overflow-x alone makes
   the browser compute overflow-y as auto too, and the widget's own sub-pixel
   height was then enough to render a scrollbar. The widget is a fixed 304px,
   which fits every column down to a 360px viewport, so below that it is
   scaled instead: that keeps it clickable and leaves no scrollbar. */
.elementor #dresh-captcha-token{display:none}
.elementor #dresh-captcha{margin-block-end:1.35rem}
@media (max-width:359px){
.elementor #dresh-captcha{height:65px}
.elementor #dresh-captcha>div{transform:scale(.83);transform-origin:0 0}
}/* End custom CSS */