/*
Theme Name: Astra Child (Southern Home)
Theme URI: https://southernhomemagazine.com/
Description: Astra child theme for Southern Home. Holds custom styles and front-end scripts (e.g. content slideshow) so parent theme updates are safe.
Author: OP Solutions
Template: astra
Version: 1.0.0
Text Domain: astra-child-sh
*/

@import url("https://use.typekit.net/dmk6eru.css");


/* ===== POST TEMPLATE · MOCKUP MATCH ===== */
:root{--sh-blue:#1E2A8C;--sh-blue-deep:#141D66;--sh-pink:#C72869;--sh-ink:#1C1C1E;--sh-gray:#6E6E73;--sh-paper:#FAF8F3;--sh-rule:#E7E2D6;--sh-caslon:big-caslon-fb,"Big Caslon",Georgia,serif;--sh-caslon-text:benton-modern-display,Georgia,serif;--sh-futura:futura-pt,"Futura PT",sans-serif}
/* 1 sticky rail */
.elementor-column:has(.sh-rail-grid){align-self:start}
.elementor-column:has(.sh-rail-grid) > .elementor-widget-wrap,.elementor-column:has(.sh-rail-grid) > .elementor-element-populated{position:sticky;top:100px;align-self:start}
.elementor-section:has(.sh-rail-grid) > .elementor-container{align-items:flex-start}
/* 2 rail items */
.sh-rail-grid .e-loop-item{display:grid;grid-template-columns:64px 1fr;gap:16px;align-items:center;padding:14px 0;border-bottom:1px solid var(--sh-rule)}
.sh-rail-grid .e-loop-item > .e-con,.sh-rail-grid .e-loop-item > .e-con-inner{display:contents}
.sh-rail-grid .e-loop-item .elementor-widget-theme-post-featured-image{margin:0}
.sh-rail-grid .e-loop-item img{aspect-ratio:1/1!important;object-fit:cover;width:64px;height:64px;display:block}
.sh-rail-grid .e-loop-item .elementor-heading-title{font-family:var(--sh-caslon-text)!important;font-size:14.5px!important;font-weight:400!important;line-height:1.4!important;color:var(--sh-ink)!important;-webkit-line-clamp:3}
.sh-rail-grid .e-loop-item:hover .elementor-heading-title{color:var(--sh-blue)!important}
.sh-rail-grid .e-loop-item .elementor-widget-theme-post-title::before{content:"No. 01";display:block;font-family:var(--sh-caslon);font-size:13px;color:var(--sh-pink);margin-bottom:2px}
.sh-rail-grid .e-loop-item + .e-loop-item .elementor-widget-theme-post-title::before{content:"No. 02"}
.sh-rail-grid .e-loop-item + .e-loop-item + .e-loop-item .elementor-widget-theme-post-title::before{content:"No. 03"}
.sh-rail-grid .e-loop-item + .e-loop-item + .e-loop-item + .e-loop-item .elementor-widget-theme-post-title::before{content:"No. 04"}
.elementor-column:has(.sh-rail-grid) > .elementor-widget-wrap > .elementor-widget-heading:first-of-type .elementor-heading-title{font-family:var(--sh-futura);font-weight:500;letter-spacing:.24em;text-transform:uppercase;font-size:11px;color:var(--sh-ink);border-bottom:1px solid var(--sh-ink);padding-bottom:12px;display:block}
/* 3 related paper band */
.elementor-section:has(.sh-related-grid){background-color:var(--sh-paper);padding-top:88px;padding-bottom:88px;border-bottom:1px solid var(--sh-rule)}
.elementor-section:has(.sh-related-grid) .elementor-widget-heading{text-align:center}
.sh-related-grid .elementor-grid,.sh-related-grid .elementor-loop-container{gap:36px}
.sh-related-grid .e-loop-item img{aspect-ratio:4/3!important;object-fit:cover;width:100%;height:auto}
.sh-related-grid .e-loop-item .elementor-heading-title{font-family:var(--sh-caslon)!important;font-size:20px!important;font-weight:400!important;line-height:1.3!important;color:var(--sh-ink)!important}
.sh-related-grid .e-loop-item:hover .elementor-heading-title{color:var(--sh-blue)!important}
/* 4 article body */
.elementor-widget-theme-post-content{max-width:720px;margin-inline:auto}
.elementor-widget-theme-post-content > .elementor-widget-container{font-family:var(--sh-caslon-text);font-size:18.5px;line-height:1.85;color:#26262a}
.elementor-widget-theme-post-content p{margin-bottom:28px}
.sh-dropcap-off .elementor-widget-theme-post-content > .elementor-widget-container > p:first-of-type::first-letter{font-family:var(--sh-caslon);font-size:76px;float:left;line-height:.78;padding:8px 14px 0 0;color:var(--sh-pink)}
.elementor-widget-theme-post-content figure{margin:44px 0}
.elementor-widget-theme-post-content figcaption{font-family:var(--sh-futura);font-weight:400;font-size:12px;letter-spacing:.08em;color:var(--sh-gray);padding-top:12px;padding-bottom:14px;border-bottom:1px solid var(--sh-rule);line-height:1.6}
.elementor-widget-theme-post-content img{width:100%;height:auto;display:block}
.elementor-widget-theme-post-content blockquote{border-top:1px solid var(--sh-ink);border-bottom:1px solid var(--sh-ink);border-left:0;padding:36px 8px;margin:48px 0;text-align:center}
.elementor-widget-theme-post-content blockquote p{font-family:var(--sh-caslon);font-size:27px;line-height:1.4;font-style:italic;color:var(--sh-blue);margin-bottom:0}
.elementor-widget-theme-post-content blockquote cite{font-family:var(--sh-futura);font-weight:400;font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--sh-gray);font-style:normal;display:block;margin-top:16px}
/* 6 prev/next */
.elementor-widget-post-navigation{border-top:1px solid var(--sh-ink);border-bottom:1px solid var(--sh-rule)}
.elementor-widget-post-navigation .elementor-post-navigation__link a{padding:36px;display:block}
.elementor-widget-post-navigation .post-navigation__prev--label,.elementor-widget-post-navigation .post-navigation__next--label{font-family:var(--sh-futura);font-weight:400;font-size:10px;letter-spacing:.26em;text-transform:uppercase;color:var(--sh-gray);display:block;margin-bottom:10px}
.elementor-widget-post-navigation .post-navigation__prev--title,.elementor-widget-post-navigation .post-navigation__next--title{font-family:var(--sh-caslon);font-weight:400;font-size:21px;line-height:1.25;color:var(--sh-ink)}
.elementor-widget-post-navigation .elementor-post-navigation__next{text-align:right}
.elementor-widget-post-navigation .elementor-post-navigation__separator{background:var(--sh-rule);width:1px}
@media(max-width:1080px){.elementor-column:has(.sh-rail-grid) > .elementor-widget-wrap,.elementor-column:has(.sh-rail-grid) > .elementor-element-populated{position:static}.elementor-widget-theme-post-content{max-width:100%}.elementor-widget-post-navigation .elementor-post-navigation__next{text-align:left}}
/* ===== END POST TEMPLATE MOCKUP MATCH ===== */

/* ===== PATCH A ===== */
/* body measure: the widget's own 17px typography outranks the earlier rule */
.elementor-widget-theme-post-content > .elementor-widget-container{font-size:18.5px!important;line-height:1.85!important}
/* the location kicker belongs on the 3-up related cards, not in the rail */
.sh-rail-grid .e-loop-item .sh-loc{display:none}
/* related card: give the kicker breathing room above the title */
.sh-related-grid .e-loop-item .sh-loc{margin-bottom:8px}
/* ===== END PATCH A ===== */

/* ===== PATCH B =====
   theme-post-content renders its paragraphs as DIRECT children — there is
   no .elementor-widget-container wrapper — so the earlier rules matched
   nothing. Target the widget itself. */
.elementor-widget-theme-post-content{font-size:18.5px!important;line-height:1.85!important;color:#26262a}
.elementor-widget-theme-post-content > p{margin-bottom:28px;font-size:18.5px;line-height:1.85}
.sh-dropcap-off .elementor-widget-theme-post-content > p:first-of-type::first-letter{font-family:big-caslon-fb,"Big Caslon",Georgia,serif;font-size:76px;float:left;line-height:.78;padding:8px 14px 0 0;color:#C72869}
.elementor-widget-theme-post-content figure.wp-caption{margin:44px 0;max-width:100%!important;width:auto!important}
.elementor-widget-theme-post-content figure.wp-caption img{width:100%;height:auto;display:block}
/* ===== END PATCH B ===== */

/* ===== PATCH C =====
   The rail-heading rule was matching every heading in the column, including
   the loop card titles (theme-post-title also carries elementor-widget-heading)
   and the In Print block. Scoped above; restore the intended styling here. */
.sh-rail-grid .e-loop-item .elementor-heading-title{
  font-family:var(--sh-caslon-text)!important;font-size:14.5px!important;font-weight:400!important;
  line-height:1.4!important;letter-spacing:normal!important;text-transform:none!important;
  border-bottom:0!important;padding-bottom:0!important;color:var(--sh-ink)!important;display:block!important}
.sh-rail-grid .e-loop-item{align-items:start}
.sh-rail-grid .e-loop-item .elementor-widget-theme-post-title{overflow:visible}
/* In Print block in the rail: kicker pink, headline Caslon (mockup .rail-issue) */
.elementor-column:has(.sh-rail-grid) > .elementor-widget-wrap > .elementor-widget-heading:not(:first-of-type) .elementor-heading-title{
  border-bottom:0!important;padding-bottom:0!important}
/* ===== END PATCH C ===== */



/* ===== PATCH E =====
   Elementor prints an empty <figcaption> when an image has no attachment
   caption, which leaves a gap. Most of the archive photos have no caption. */
.widget-image-caption:empty,.elementor-image-caption:empty,.wp-caption-text:empty{display:none!important}
/* ===== END PATCH E ===== */

/* ===== DESIGNER Q&A TEMPLATE (25901) ===== */
/* portrait hero */
.elementor-page-25901 .elementor-widget-image img{max-width:440px;margin-inline:auto}
/* facts card: three inner columns read as one ruled card */
.elementor-page-25901 .elementor-inner-section:has(.elementor-widget-heading) .elementor-container{border:1px solid var(--sh-ink,#1C1C1E);max-width:560px}
.elementor-page-25901 .elementor-inner-section .elementor-column + .elementor-column{border-left:1px solid #E7E2D6}
/* related grid: centred arched portraits */
.sh-qa-related-grid .elementor-grid,.sh-qa-related-grid .elementor-loop-container{gap:36px}
.sh-qa-related-grid .e-loop-item{text-align:center}
/* Q&A rhythm — these classes live in the POST BODY, not the template.
   Inert until apply-cleanup.php has run and the bodies hold real markup. */
.elementor-page-25901 .elementor-widget-theme-post-content .q{margin:44px 0 18px;padding-top:34px;border-top:1px solid #E7E2D6}
.elementor-page-25901 .elementor-widget-theme-post-content .q .mark{font-family:big-caslon-fb,Georgia,serif;font-style:italic;color:#C72869;font-size:22px;margin-right:12px}
.elementor-page-25901 .elementor-widget-theme-post-content .q p{display:inline;font-family:futura-pt,sans-serif;font-weight:400;font-size:17.5px;line-height:1.6;color:#1E2A8C}
.elementor-page-25901 .elementor-widget-theme-post-content .a p{margin-bottom:24px}
/* LIGHTNING ROUND — inserted in the post body from the
   "Lightning Round (Q&A)" pattern (post 25937). Rows are core/columns,
   so the layout is flex, not grid. */
.sh-lightning{background:#FAF8F3;border:1px solid #E7E2D6;padding:44px 48px;margin:56px 0 20px}
.sh-lightning h3{font-family:"futura-pt",sans-serif;font-weight:300;font-size:22px;letter-spacing:.04em;text-transform:uppercase;margin:0 0 8px}
.sh-lightning h3 em{font-style:italic;color:#C72869}
.sh-lightning .sub{font-family:"futura-pt",sans-serif;font-weight:300;font-size:13px;color:#6E6E73;margin:0 0 26px}
.sh-lightning .wp-block-columns.zap{padding:14px 0;border-top:1px solid #E7E2D6;margin:0;gap:18px;align-items:baseline}
.sh-lightning > *:first-child{margin-top:0}
.sh-lightning .zap .wp-block-column{margin-bottom:0}
.sh-lightning .zq{font-family:"futura-pt",sans-serif;font-weight:500;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:#1E2A8C;margin:0}
.sh-lightning .za{font-family:"benton-modern-display",Georgia,serif;font-style:italic;font-size:16.5px;margin:0}
@media(max-width:781px){.sh-lightning{padding:28px 22px}.sh-lightning .zap{gap:2px}}

/* These two rules are the phone treatment for the Q&A layout: the portrait fills the
   390px measure and the facts-card columns swap their left dividers for top ones once
   Elementor stacks them. The opening @media line had been lost, leaving an orphaned
   closing brace below, so both rules were applying at every width - capping every
   image on a Q&A post at 340px on desktop and drawing the stacked-column borders
   there too. 767px is Elementor's mobile breakpoint, i.e. the width at which those
   inner-section columns actually stack, which is what the border rule depends on. */
@media (max-width:767px){
.elementor-page-25901 .elementor-widget-image img{max-width:340px}
 .elementor-page-25901 .elementor-inner-section .elementor-column + .elementor-column{border-left:0;border-top:1px solid #E7E2D6}
}
/* ===== END DESIGNER Q&A ===== */

/* PATCH F — Q&A facts card: no orphaned labels, no empty box.
   Elementor removes a dynamic widget entirely when its custom field is
   empty, which left the static label ("Firm") stranded above nothing.
   Each label+value pair lives in its own inner column, so a label that is
   both first AND last child means its value was dropped. */

/* 1. Hide the whole cell (border included) when its value is missing. */
.sh-facts .elementor-inner-column:has(> .elementor-widget-wrap > .elementor-widget-heading:first-child:last-child) {
	display: none;
}

/* 2. If no fact survived, collapse the card rather than draw an empty box. */
.sh-facts:not(:has(.elementor-widget-wrap > .elementor-widget + .elementor-widget)) {
	display: none;
}

/* 3. Fallback for browsers without :has() — hides the label, not the border. */
.sh-facts .elementor-widget-wrap > .elementor-widget-heading:first-child:last-child {
	display: none;
}

/* PATCH G — card date. Loop card 25846 now carries a Post Date line so it
   can serve category archives. The post-template rail and related grids
   were designed without it, so hide it there. */
.sh-rail-grid .sh-card-date,
.sh-related-grid .sh-card-date,
.sh-qa-related-grid .sh-card-date {
	display: none;
}

/* ===== PATCH H — CATEGORY ARCHIVES (templates 25950 / 25955) ===== */

/* Ad slots. The archive templates use classes rather than inline styles
   so the AdButler tags can be pasted in without touching the CSS. */
.sh-ad{display:flex;flex-direction:column;align-items:center;gap:10px}
.sh-ad-label{font-family:"futura-pt",sans-serif;font-weight:300;font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:#6E6E73}
.sh-ad-box{background:#FAF8F3;border:1px solid #E7E2D6;display:flex;align-items:center;justify-content:center;font-family:"futura-pt",sans-serif;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:#6E6E73;max-width:100%}
.sh-ad-728{width:728px;height:90px}
.sh-ad-300{width:300px;height:250px}

/* Archive header.

   The heading used to be built as a CSS prefix — content:"The " — plus the
   category name. That produced "The Design", "The On Trend" and "The
   Uncategorized", none of which are department names anyone would say out
   loud, and because the word lived in a stylesheet no editor could change it
   and no search engine could read it.

   The name now comes from the "Department name" ACF field on each category,
   falling back to the category name when the field is empty.

   Emphasis: the whole heading is Ink, and only an <em> inside it takes the
   pink italic. A small script wraps the last word automatically so editors
   type plain text; if they write their own <em> it is left alone. */
.sh-arch-title{font-style:normal;color:#1C1C1E}
.sh-arch-title .elementor-heading-title{font-style:normal;color:#1C1C1E}
.sh-arch-title em{color:#C72869;font-style:italic}
.sh-arch-desc{max-width:620px;margin-left:auto;margin-right:auto;line-height:1.6}

/* Archive grid cards: give the date some air under the title. */
.sh-archive-grid .sh-card-date,
.sh-qa-archive-grid .sh-card-date{margin-top:6px}

/* Load More button, matched to the mockup. */
.sh-archive-grid .elementor-button,
.sh-qa-archive-grid .elementor-button{
	background-color:#1E2A8C;color:#fff;border-radius:0;
	padding:13px 30px;font-family:"futura-pt",sans-serif;font-weight:500;
	font-size:11px;letter-spacing:2px;text-transform:uppercase;
}
.sh-archive-grid .elementor-button:hover,
.sh-qa-archive-grid .elementor-button:hover{background-color:#141D66;color:#fff}

/* ===== PATCH I — ARCHIVE FEATURED STORY =====
   The newest post is promoted out of the grid into a hero by CSS rather
   than by a second Loop Grid. One query means no offset, no duplicate,
   and Load More cannot drift. Default order is date DESC, so the first
   loop item IS the newest post, and it stays put as more pages load.

   NOTE: use :first-of-type, NOT :first-child. Elementor puts a <style>
   node first inside .elementor-loop-container, so :first-child matches
   nothing at all -- silently. */

.sh-archive-grid .e-loop-item:first-of-type{grid-column:1 / -1;margin-bottom:32px}
.sh-archive-grid .e-loop-item:first-of-type > .e-con,
.sh-archive-grid .e-loop-item:first-of-type > .e-con-inner{
	display:grid;grid-template-columns:7fr 5fr;column-gap:56px;
	/* Trailing 1fr row soaks up the slack left by the tall image, so the
	   text stacks tightly instead of spreading across stretched rows. */
	grid-template-rows:repeat(3,min-content) 1fr;align-items:start;
}

/* Image fills the left column and spans however many text rows exist. */
.sh-archive-grid .e-loop-item:first-of-type .elementor-widget-image{
	grid-column:1;grid-row:1 / -1;align-self:center;
}
.sh-archive-grid .e-loop-item:first-of-type .elementor-widget-image img{
	width:100% !important;height:auto;aspect-ratio:15/11;object-fit:cover;
}
/* Everything else stacks in the right column. */
.sh-archive-grid .e-loop-item:first-of-type > .e-con > *:not(.elementor-widget-image),
.sh-archive-grid .e-loop-item:first-of-type > .e-con-inner > *:not(.elementor-widget-image){
	grid-column:2;
}

/* Hero typography, scaled up from the card. */
.sh-archive-grid .e-loop-item:first-of-type .elementor-widget-theme-post-title .elementor-heading-title{font-size:36px;line-height:1.14;-webkit-line-clamp:4}
.sh-archive-grid .e-loop-item:first-of-type .sh-card-dek{font-size:16px;max-width:50ch}

/* "The Latest" sits on the TITLE widget, not the location kicker --
   the kicker widget disappears when a post has no location, which would
   take the label with it. The title is always present. */
.sh-archive-grid .e-loop-item:first-of-type .sh-loc{display:none}
.sh-archive-grid .e-loop-item:first-of-type .elementor-widget-theme-post-title::before{
	content:"The Latest";display:block;margin-bottom:14px;
	font-family:"futura-pt",sans-serif;font-weight:500;font-size:11px;
	letter-spacing:.26em;text-transform:uppercase;color:#C72869;
}

/* "Read the Story" hangs off the date, which is always present. */
/* "Read the Story" is a real Button widget in the loop template now, linked to
   the post permalink. It used to be a ::after on the DATE widget — a CSS
   pseudo-element cannot carry a link, so there was nothing to click, and the
   words lived in a stylesheet where no screen reader or crawler could see them.

   The loop template ("SH Loop — Related Card") is shared with other placements,
   so the button is hidden everywhere except the lead card of an archive grid. */
.sh-card-cta{display:none}
.sh-archive-grid .e-loop-item:first-of-type .sh-card-cta{display:block}

/* Even card heights. Cards were running 439–491px because the dek and the
   location kicker are present on some posts and not others.

   Headlines get THREE lines, not two: every current title already fits in two
   (45–73 chars), so a 2-line cap would change nothing today and start chopping
   real headlines the first time someone writes a long one. A truncated headline
   reads as a bug on an editorial page in a way a truncated dek does not. */
.sh-archive-grid .elementor-widget-theme-post-title .elementor-heading-title{
	display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
}
.sh-archive-grid .sh-card-dek{
	display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.sh-archive-grid .e-loop-item:first-of-type:hover .sh-card-date::after{background:#1C1C1E;color:#fff}

/* Deks belong on archive cards, not in the post-template rail or related. */
.sh-rail-grid .sh-card-dek,
.sh-related-grid .sh-card-dek,
.sh-qa-related-grid .sh-card-dek{display:none}

@media(max-width:980px){
	.sh-archive-grid .e-loop-item:first-of-type > .e-con,
	.sh-archive-grid .e-loop-item:first-of-type > .e-con-inner{grid-template-columns:1fr;row-gap:28px}
	.sh-archive-grid .e-loop-item:first-of-type .elementor-widget-image{grid-row:auto;grid-column:1}
	.sh-archive-grid .e-loop-item:first-of-type > .e-con > *:not(.elementor-widget-image),
	.sh-archive-grid .e-loop-item:first-of-type > .e-con-inner > *:not(.elementor-widget-image){grid-column:1}
}

/* ===== PATCH J — LINKED CARD IMAGES =====
   Linking a loop card image wraps the <img> in an inline-block <a>, which
   shrink-wraps to the file's intrinsic width. Every card image was then
   rendering at its raw size (200-300px) inside a 353px column, at ragged
   widths. Make the anchor a block so width:100% has something to fill. */

.sh-rail-grid .elementor-widget-image a,
.sh-related-grid .elementor-widget-image a,
.sh-qa-related-grid .elementor-widget-image a,
.sh-archive-grid .elementor-widget-image a,
.sh-qa-archive-grid .elementor-widget-image a{display:block;width:100%}

.sh-related-grid .elementor-widget-image img,
.sh-qa-related-grid .elementor-widget-image img,
.sh-archive-grid .elementor-widget-image img,
.sh-qa-archive-grid .elementor-widget-image img{width:100%;height:auto}

/* Uniform crops so the grid reads as a grid. Landscape contexts only --
   the Q&A card keeps its arched 4:5 portrait. */
.sh-archive-grid .e-loop-item .elementor-widget-image img,
.sh-related-grid .elementor-widget-image img{aspect-ratio:4/3;object-fit:cover}
.sh-archive-grid .e-loop-item:first-of-type .elementor-widget-image img{aspect-ratio:15/11}

/* ===== PATCH K — FOOTER TEMPLATE (25977) + ARCHIVE HEADER RULE ===== */

/* 56px centred hairline under the category description, per the mockup. */
.sh-arch-desc::after{content:"";display:block;width:56px;height:1px;background:#1C1C1E;margin:26px auto 0}
/* If a category has no description the widget is dropped, so hang a
   fallback rule off the title instead. */
.sh-arch-title:last-child .elementor-heading-title::after{content:"";display:block;width:56px;height:1px;background:#1C1C1E;margin:26px auto 0}

/* Newsletter band */
.sh-newsletter .sh-nl-head{margin-top:14px}
.sh-newsletter .sh-nl-dek{max-width:52ch;margin:12px auto 30px}
.sh-nl-form{max-width:600px;margin:0 auto;text-align:left}

/* HubSpot INLINE (non-iframe) markup only. If the form renders as an
   iframe none of this applies -- see B4c in the consolidation doc. */
.sh-nl-form form.hs-form{display:flex;flex-wrap:wrap;gap:12px}
.sh-nl-form .hs-form-field{flex:1 1 200px;margin:0}
.sh-nl-form .hs-form-field > label{
	display:block;margin-bottom:6px;font-family:"futura-pt",sans-serif;
	font-weight:500;font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:#6E6E73;
}
.sh-nl-form .hs-form-field > label .hs-form-required{color:#C72869}
.sh-nl-form input[type=email],
.sh-nl-form input[type=text]{
	width:100%;border:1px solid #E7E2D6;border-radius:0;outline:0;background:#fff;
	padding:14px 16px;font-family:"futura-pt",sans-serif;font-weight:300;font-size:14px;color:#1C1C1E;
	transition:border-color .2s;
}
.sh-nl-form input[type=email]:focus,
.sh-nl-form input[type=text]:focus{border-color:#1E2A8C}
.sh-nl-form .hs-submit{flex:1 1 100%;margin-top:4px}
.sh-nl-form .hs-button{
	width:100%;border:0;border-radius:0;background:#1E2A8C;color:#fff;cursor:pointer;
	font-family:"futura-pt",sans-serif;font-weight:500;font-size:11.5px;
	letter-spacing:.2em;text-transform:uppercase;padding:15px 32px;transition:.25s;
}
.sh-nl-form .hs-button:hover{background:#141D66}
.sh-nl-form .hs-error-msgs{list-style:none;margin:6px 0 0;padding:0;flex:1 0 100%;
	font-family:"futura-pt",sans-serif;font-size:12px;color:#C72869}
.sh-nl-form .hs-form-field .hs-error-msgs{flex:none}
.sh-nl-form .legal-consent-container{flex:1 0 100%;font-family:"futura-pt",sans-serif;
	font-weight:300;font-size:11.5px;line-height:1.5;color:#6E6E73}
.sh-nl-form .submitted-message{font-family:"futura-pt",sans-serif;font-weight:300;font-size:15px;color:#1C1C1E}

/* Deep-blue footer */
.sh-footer{text-align:center}
.sh-footer .sh-foot-logo{margin-bottom:20px}
.sh-foot-links{display:flex;justify-content:center;gap:28px;flex-wrap:wrap;margin-bottom:28px}
.sh-foot-links a{font-family:"futura-pt",sans-serif;font-weight:300;font-size:12px;
	letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.75);text-decoration:none;transition:.2s}
.sh-foot-links a:hover{color:#FF9AB9}
.sh-footer .sh-foot-fine p{margin:0}

@media(max-width:620px){
	.sh-nl-form form.hs-form{flex-direction:column}
	.sh-nl-form .hs-button{width:100%}
	.sh-foot-links{gap:16px 20px}
}

/* In-grid 300x250 cell, inserted by the child theme (section 5 of
   functions.php). It is a real grid child, so the cards reflow round it. */
.sh-grid-ad-cell{display:flex;align-items:center;justify-content:center}
.sh-grid-ad-cell .sh-ad{margin-top:30px}

/* ===== PATCH L — HEADER TEMPLATE (25992) ===== */

/* Sticky masthead sits above Elementor overlays but below the WP admin bar. */
.sh-masthead{z-index:40}
.sh-masthead.elementor-sticky--effects{box-shadow:0 1px 0 rgba(28,28,30,.08)}
.admin-bar .sh-masthead.elementor-sticky--active{top:32px !important}
@media(max-width:782px){.admin-bar .sh-masthead.elementor-sticky--active{top:46px !important}}

/* Logo sits flush left and keeps the 70px band tight. */
/* The logo PNG is 600x200 but the wordmark ink is only 384x148 — 26px of
   transparent padding top and bottom. At max-height:52px the letterforms
   rendered just 38px tall, which is why the masthead read as undersized.
   70px here puts the ink at roughly 52px. If the file is ever re-exported
   cropped to its ink, drop this back to 52px. */
.sh-mast-logo img{display:block;max-height:100px;width:auto}

/* The calendar filter bar is sticky and must clear the masthead. Overriding
   the plugin here rather than re-importing it, so the two can be kept in step
   from one place. Only the NAV row is sticky now — the brand row above it scrolls away — so
   this clears 71px, not the full masthead. 32px more with the admin bar
   showing. */
.tribe-events .sh-filter-bar{top:71px}
.admin-bar .tribe-events .sh-filter-bar{top:103px}

/* Nav: the pink underline is the pointer, so kill Astra's own link styling. */
.sh-mast-nav .elementor-item{padding-top:4px;padding-bottom:4px}
/* Elementor's menu_space_between control emitted no margin here, so the
   gap is set directly. 30px between items, per the mockup. */
.sh-mast-nav .elementor-nav-menu--main > .elementor-nav-menu > li + li{margin-left:30px}
@media(max-width:1024px){.sh-mast-nav .elementor-nav-menu--main > .elementor-nav-menu > li + li{margin-left:18px}}
.sh-mast-nav .elementor-nav-menu--dropdown > li + li{margin-left:0}
.sh-mast-nav .elementor-nav-menu--dropdown a{padding:12px 20px}

/* Astra hardcodes a #046BD2 focus ring on form fields regardless of the
   global palette. Bring it to brand. */
input:focus,textarea:focus,select:focus,
.wp-block-search__input:focus{border-color:#1E2A8C !important;outline-color:#1E2A8C}

/* --------------------------------------------------------------------------
   Designer Q&A portraits in landscape frames

   The Q&A featured images are vertical environmental portraits (~0.8 ratio).
   Anywhere they appear in a landscape card — the Design parent archive, the
   home rails — object-fit:cover keeps the middle ~62% of the image, and on a
   standing subject that middle band starts below the chin. Tested all six
   against the 4:3 card: at centre, two of them lost their heads entirely.

   35% biases the crop window up just enough to keep every face, without
   opening dead ceiling above the ones that were already framed well. 25% also
   keeps the faces but starts adding empty wall to the seated portraits.

   Not applied on the Q&A archive itself — that grid is already 4:5, the frame
   matches the source, and centre is correct there.
   -------------------------------------------------------------------------- */
.e-loop-item.category-designer-q-a img{object-position:50% 35%}
.sh-qa-archive-grid .e-loop-item.category-designer-q-a img{object-position:50% 50%}

/* The LEAD card is 15/11, wider than the 4/3 grid cards, so it discards more
   height and needs a stronger bias. Checked all six in that frame: at 35%
   Lauren Liess is cut off at the collarbone. 20% recovers her and leaves the
   other five well placed; going lower starts opening ceiling above the seated
   portraits. */
.sh-archive-grid .e-loop-item:first-of-type.category-designer-q-a img{object-position:50% 20%}

/* Lauren Liess (25613) is the one atypical source in the set — a full-length
   standing shot with the subject small and high in frame, where every other
   portrait is half or three-quarter length. She needs the lead-card bias even
   when she drops back into the 4/3 grid. */
.e-loop-item.post-25613 img{object-position:50% 20%}

/* ===== SH-REVIEW-LAYER-START - delete to SH-REVIEW-LAYER-END to remove ===== */
/* Southern Home: type scale + section rhythm. Sizes per learnui.design
   text-heavy guidance (body 18-24, titles 35-50, secondary = body-2px,
   inputs >=16px so iOS does not zoom). 23 distinct sizes reduced to eight. */
:root{
--sh-display:52px; --sh-section:44px; --sh-section-alt:32px; --sh-headline:26px;
--sh-body:19px; --sh-label:15px; --sh-button:16px; --sh-micro:12px;
--sh-lh-section:1.15; --sh-lh-head:1.22; --sh-lh-body:1.6; --sh-lh-label:1.35;
--sh-gap:96px; --sh-white:#FFFFFF; --sh-cream:#FAF8F3; --sh-blue:#1E2A8C; --sh-on-blue:#FAF8F3;
}
@media (max-width:767px){:root{
--sh-display:34px; --sh-section:32px; --sh-section-alt:26px; --sh-headline:22px;
--sh-body:17px; --sh-label:14px; --sh-button:16px; --sh-micro:11px; --sh-gap:64px;
}}
/* 1. MICRO - advertisement labels only, the deliberate exception to the floor */
.sh-ad-break .elementor-heading-title, .sh-ad-label,
.elementor-element-4c599b05 .elementor-heading-title,
.elementor-element-fbd7b48 .elementor-heading-title
{font-size:var(--sh-micro)!important; line-height:var(--sh-lh-label)!important}
/* 2. LABEL - kickers, nav, dates, photo credits, section eyebrows. Was 9-12px */
.sh-mast-nav .elementor-heading-title, .sh-mast-nav a,
.sh-nl-kicker .elementor-heading-title, .sh-foot-fine .elementor-heading-title,
.sh-foot-links a, .sh-arch-kicker .elementor-heading-title,
.sh-card-date .elementor-heading-title, .sh-loc .elementor-heading-title,
.sh-ad-box .elementor-heading-title,
.elementor-element-17af28d .elementor-heading-title,
.elementor-element-1b9ebffb .elementor-heading-title,
.elementor-element-1c12a2a7 .elementor-heading-title,
.elementor-element-1c5d3102 .elementor-heading-title,
.elementor-element-1fa8b123 .elementor-heading-title,
.elementor-element-2233e4bc .elementor-heading-title,
.elementor-element-266155e9 .elementor-heading-title,
.elementor-element-276b647c .elementor-heading-title,
.elementor-element-2ccb2b2d .elementor-heading-title,
.elementor-element-3864d8c1 .elementor-heading-title,
.elementor-element-4a830a9e .elementor-heading-title,
.elementor-element-53be8599 .elementor-heading-title,
.elementor-element-66954278 .elementor-heading-title,
.elementor-element-66b1325c .elementor-heading-title,
.elementor-element-69771a8b .elementor-heading-title,
.elementor-element-6ba08e77 .elementor-heading-title,
.elementor-element-71e45c75 .elementor-heading-title,
.elementor-element-76e9e0ce .elementor-heading-title,
.elementor-element-9a6a7f3 .elementor-heading-title,
.elementor-element-d577660 .elementor-heading-title,
.elementor-element-2cd9ee9b .elementor-heading-title,
.elementor-element-59af696c .elementor-heading-title,
.elementor-element-4be88f4e .elementor-heading-title,
.elementor-element-a3f5f38 .elementor-heading-title,
.elementor-element-1c11e02 .elementor-heading-title,
.elementor-element-59339e36 .elementor-heading-title,
.elementor-widget-post-navigation .post-navigation__prev--label,
.elementor-widget-post-navigation .post-navigation__next--label
{font-size:var(--sh-label)!important; line-height:var(--sh-lh-label)!important}
/* letterspacing tuned for 10px is too open at 15px */
.sh-mast-nav .elementor-heading-title,
.elementor-element-d577660 .elementor-heading-title,
.elementor-element-2cd9ee9b .elementor-heading-title,
.elementor-element-59af696c .elementor-heading-title,
.elementor-element-4be88f4e .elementor-heading-title{letter-spacing:.06em!important}
/* 3. BUTTONS - nothing interactive below 16px */
.sh-card-cta .elementor-heading-title, .sh-card-cta a,
.elementor-widget-button .elementor-button,
.elementor-element-18499e95 .elementor-heading-title,
.elementor-element-269462a8 .elementor-heading-title,
.elementor-element-279de17a .elementor-heading-title,
.elementor-element-3722c202 .elementor-heading-title,
.elementor-element-456ca398 .elementor-heading-title,
.elementor-element-6335612a .elementor-heading-title,
.elementor-element-643e2c1c .elementor-heading-title,
.elementor-element-6453ac5 .elementor-heading-title,
.elementor-element-6b345750 .elementor-heading-title,
.elementor-element-706c8785 .elementor-heading-title,
.elementor-element-880ede7 .elementor-heading-title
{font-size:var(--sh-button)!important; line-height:var(--sh-lh-label)!important}
/* iOS zooms the page when a focused input is under 16px */
.sh-nl-form input, .sh-nl-form label, .sh-nl-form .elementor-field,
input[type="text"], input[type="email"], input[type="search"], textarea, select
{font-size:16px!important}
/* 4. BODY - deks and standfirsts */
.sh-nl-dek, .sh-nl-dek p, .sh-card-dek, .sh-card-dek p,
.elementor-element-13d8b61 .elementor-widget-container,
.elementor-element-17326260 .elementor-widget-container,
.elementor-element-2381076e .elementor-widget-container,
.elementor-element-3d59e0f .elementor-widget-container,
.elementor-element-5ce0f24f .elementor-widget-container,
.elementor-element-6d9d0fb .elementor-widget-container
{font-size:var(--sh-body)!important; line-height:var(--sh-lh-body)!important}
/* 5. CARD HEADLINES - were 20/21/22 across three grids */
.elementor-element-57c86c55 .elementor-heading-title,
.elementor-element-72b4040 .elementor-heading-title,
.elementor-element-518deaed .elementor-heading-title,
.elementor-element-33e3288e .elementor-heading-title,
.elementor-element-e87d6c9 .elementor-heading-title
{font-size:var(--sh-headline)!important; line-height:var(--sh-lh-head)!important}
/* 6. SECTION HEADERS. Two families are in play: the Caslon ones get 44px,
   the Jost ones a smaller step since matching sizes across different
   families looks wrong. Unifying the family is flagged, not done here. */
.sh-arch-title .elementor-heading-title,
.elementor-element-74df3e8d .elementor-heading-title,
.elementor-element-38a289cd .elementor-heading-title,
.elementor-element-2d76eef8 .elementor-heading-title,
.elementor-element-4aad5f30 .elementor-heading-title
{font-size:var(--sh-section)!important; line-height:var(--sh-lh-section)!important}
.elementor-element-58c5235a .elementor-heading-title,
.elementor-element-70cd7e1a .elementor-heading-title,
.elementor-element-2edb4ef6 .elementor-heading-title,
.elementor-element-325c1955 .elementor-heading-title
{font-size:var(--sh-section-alt)!important; line-height:var(--sh-lh-section)!important}
/* 7. SECTION RHYTHM - one gap everywhere. Was 39/48/84/96/100/104.
   Some sections are two stacked containers, so the halves split the padding. */
.elementor-element-5824a62, .elementor-element-54efee2d,
.elementor-element-10453e87, .elementor-element-7c9dcc51
{padding-top:var(--sh-gap)!important; padding-bottom:var(--sh-gap)!important}
.elementor-element-71a91aa7, .elementor-element-6dc3557d,
.elementor-element-781c1b36, .elementor-element-3d7118ff
{padding-top:var(--sh-gap)!important; padding-bottom:0!important}
.elementor-element-35b54b43, .elementor-element-7170e56e,
.elementor-element-173e000, .elementor-element-239c91b9
{padding-top:0!important; padding-bottom:var(--sh-gap)!important}
.elementor-element-33e8c4e6{padding-bottom:var(--sh-gap)!important}
.elementor-element-7eacdeb5{margin-bottom:0!important; padding-bottom:var(--sh-gap)!important}
/* 8. SECTION BACKGROUNDS - REMOVED at Courtney's request.
   The strict white/cream/white/blue rotation moved the blue off Places
   with Presence and onto In Print and Behind the Masthead, which did not
   read well. Section backgrounds are back to whatever the Elementor
   templates set. The even 96px spacing above is unaffected. */

/* --- PASS 2: text-editor and html widgets ------------------------------
   This Elementor build has no .elementor-widget-container wrapper and these
   widgets are text-editors, not headings, so pass 1 missed them. Elementor
   sets the size on the widget div itself, so target that and its children.
   Each widget below carries a single size, so this cannot flatten a
   hierarchy - the one exception, EDITOR IN CHIEF, is handled via its span. */
.elementor-element-fbd7b48 span,
.elementor-element-4fcfcde .shh-ad-label,
.elementor-element-4c599b05, .elementor-element-4c599b05 *
{font-size:var(--sh-micro)!important; line-height:var(--sh-lh-label)!important}

.elementor-element-59339e36, .elementor-element-59339e36 *,
.elementor-element-1fa8b123, .elementor-element-1fa8b123 *,
.elementor-element-1c5d3102, .elementor-element-1c5d3102 *,
.elementor-element-6ba08e77, .elementor-element-6ba08e77 *,
.elementor-element-2233e4bc, .elementor-element-2233e4bc *,
.elementor-element-71e45c75, .elementor-element-71e45c75 *,
.elementor-element-5489d3f, .elementor-element-5489d3f *,
.elementor-element-1b9ebffb, .elementor-element-1b9ebffb *,
.elementor-element-17af28d span
{font-size:var(--sh-label)!important; line-height:var(--sh-lh-label)!important}

.elementor-element-6453ac5, .elementor-element-6453ac5 *,
.elementor-element-456ca398, .elementor-element-456ca398 *,
.elementor-element-269462a8, .elementor-element-269462a8 *,
.elementor-element-643e2c1c, .elementor-element-643e2c1c *,
.elementor-element-18499e95, .elementor-element-18499e95 *,
.elementor-element-6b345750, .elementor-element-6b345750 *,
.elementor-element-880ede7, .elementor-element-880ede7 *
{font-size:var(--sh-button)!important; line-height:var(--sh-lh-label)!important}

.elementor-element-5ce0f24f, .elementor-element-5ce0f24f *,
.elementor-element-13d8b61, .elementor-element-13d8b61 *,
.elementor-element-3d59e0f, .elementor-element-3d59e0f *,
.elementor-element-2381076e, .elementor-element-2381076e *,
.elementor-element-6d9d0fb, .elementor-element-6d9d0fb *
{font-size:var(--sh-body)!important; line-height:var(--sh-lh-body)!important}


/* --- PASS 3: consolidate the remaining strays ---------------------------
   Second-wave sizes that were not below the floor but sat off the scale:
   16.5 / 17 / 18 / 20 / 24 / 29. Product names, book titles, the editor's
   letter and three card headlines. Mapping them onto existing steps rather
   than inventing new ones. */
.elementor-element-2fcf98dc .elementor-heading-title
{font-size:var(--sh-display)!important; line-height:var(--sh-lh-display,1.08)!important}

.sh-nl-head .elementor-heading-title
{font-size:var(--sh-section)!important; line-height:var(--sh-lh-section)!important}

.elementor-element-3466412e .elementor-heading-title,
.elementor-element-6035d500 .elementor-heading-title,
.elementor-element-5ef85a57 .elementor-heading-title,
.elementor-element-7bbdd56d, .elementor-element-7bbdd56d p,
.elementor-element-17af28d p, .elementor-element-17af28d em
{font-size:var(--sh-headline)!important; line-height:var(--sh-lh-head)!important}

.elementor-element-36e9a240 .elementor-heading-title,
.elementor-element-45098030 .elementor-heading-title,
.elementor-element-5b11f626 .elementor-heading-title,
.elementor-element-49e3dd03 .elementor-heading-title,
.elementor-element-5642e041 .elementor-heading-title,
.elementor-element-8f3198f, .elementor-element-8f3198f p,
.elementor-element-6247712, .elementor-element-6247712 p
{font-size:var(--sh-body)!important; line-height:var(--sh-lh-body)!important}

/* the label inside the masthead widget must survive the rule above */
.elementor-element-17af28d span{font-size:var(--sh-label)!important}


/* --- PASS 4: two corrections -------------------------------------------
   1. The rail's lead card was 34px against 21px siblings - deliberately the
      biggest thing in that section. Its siblings are now 26, so the lead
      moves to the 32 step to keep the hierarchy instead of flattening it.
   2. Behind the Masthead used a 100px bottom margin and no top padding.
      Now that it is a blue block it needs real top padding or the type
      sits against the edge. */
.elementor-element-39e0f5 .elementor-heading-title
{font-size:var(--sh-section-alt)!important; line-height:var(--sh-lh-head)!important}

.elementor-element-7eacdeb5{padding-top:var(--sh-gap)!important}


/* --- PASS 5: the single-post template ----------------------------------
   Its own widget IDs, so none of the above reached it. Note the three
   kicker/date instances that were rendering at 20px come DOWN to 15 - the
   same widget renders at two sizes depending on which grid it lands in,
   and one label size sitewide is the point of the exercise. */
.elementor-element-10827859 .elementor-heading-title,
.elementor-element-16a22c4 .elementor-heading-title,
.elementor-element-4469e03a .elementor-heading-title,
.elementor-element-69d740f5 .elementor-heading-title,
.elementor-element-1cffa900 .elementor-heading-title,
.elementor-element-48b0757 .elementor-heading-title,
.elementor-element-4ac6ebc .elementor-heading-title,
.elementor-element-be3e54f .elementor-heading-title,
figcaption.wp-caption-text
{font-size:var(--sh-label)!important; line-height:var(--sh-lh-label)!important}

.elementor-element-32f07641 .elementor-heading-title,
.elementor-element-32f07641 h1, .elementor-element-32f07641 h2,
.elementor-element-32f07641 h3, .elementor-element-32f07641 a
{font-size:var(--sh-headline)!important; line-height:var(--sh-lh-head)!important}

.elementor-element-2e64b3b9 span, .elementor-element-3f2cfa73 span
{font-size:var(--sh-micro)!important}

/* article running copy was 18.5, just off the scale */
.elementor-element-1159e5ae p, .elementor-element-1159e5ae a
{font-size:var(--sh-body)!important; line-height:var(--sh-lh-body)!important}


/* --- PASS 6: neutralise the three blanket rules -------------------------
   Pre-existing CSS set one size for EVERY heading inside a grid:
     .sh-rail-grid .e-loop-item .elementor-heading-title    -> 14.5px
     .sh-related-grid .e-loop-item .elementor-heading-title -> 20px
     .elementor-widget-theme-post-content                   -> 18.5px
   All three are !important and more specific than a widget-ID selector,
   which is why kickers, dates and card titles shared one size in those
   grids. Restating the same selectors here wins on source order, so the
   grid default becomes the headline step and roles override from there. */
.sh-rail-grid .e-loop-item .elementor-heading-title,
.sh-related-grid .e-loop-item .elementor-heading-title
{font-size:var(--sh-headline)!important; line-height:var(--sh-lh-head)!important}

.elementor-widget-theme-post-content,
.elementor-widget-theme-post-content > .elementor-widget-container
{font-size:var(--sh-body)!important; line-height:var(--sh-lh-body)!important}

/* roles inside those grids - four classes, so these beat the grid default */
.sh-rail-grid .e-loop-item .elementor-element-4ac6ebc .elementor-heading-title,
.sh-rail-grid .e-loop-item .elementor-element-be3e54f .elementor-heading-title,
.sh-related-grid .e-loop-item .elementor-element-4ac6ebc .elementor-heading-title,
.sh-related-grid .e-loop-item .elementor-element-be3e54f .elementor-heading-title,
.sh-rail-grid .e-loop-item .sh-loc .elementor-heading-title,
.sh-rail-grid .e-loop-item .sh-card-date .elementor-heading-title,
.sh-related-grid .e-loop-item .sh-loc .elementor-heading-title,
.sh-related-grid .e-loop-item .sh-card-date .elementor-heading-title
{font-size:var(--sh-label)!important; line-height:var(--sh-lh-label)!important}

.sh-rail-grid .e-loop-item .sh-card-cta .elementor-heading-title,
.sh-related-grid .e-loop-item .sh-card-cta .elementor-heading-title
{font-size:var(--sh-button)!important}

/* remaining article-page strays */
.elementor-element-18a8b7db .elementor-heading-title,
.elementor-element-363aa1c1 .elementor-heading-title
{font-size:var(--sh-section)!important; line-height:var(--sh-lh-section)!important}

.elementor-element-b607105, .elementor-element-b607105 p,
.elementor-widget-post-navigation .post-navigation__prev--title,
.elementor-widget-post-navigation .post-navigation__next--title
{font-size:var(--sh-body)!important; line-height:var(--sh-lh-body)!important}


/* --- PASS 7: last three ------------------------------------------------
   The Load More button was 11px, which matters most of the three - it is
   interactive and it was the only control still under the 16px floor. */
.elementor-element-a4e8872 .elementor-button,
.elementor-element-a4e8872 .e-load-more-spinner,
.elementor-element-a4e8872 a, .elementor-element-a4e8872 button
{font-size:var(--sh-button)!important; line-height:var(--sh-lh-label)!important}

.elementor-element-2767b2ac .elementor-heading-title,
.elementor-widget-post-navigation .post-navigation__arrow-wrapper,
.elementor-widget-post-navigation .post-navigation__arrow-prev,
.elementor-widget-post-navigation .post-navigation__arrow-next
{font-size:var(--sh-headline)!important}


/* --- PASS 8: width, bleed, ad placement, archive headers, nav state -----
   Second round of designer feedback. */
:root{--sh-wide:1200px}

/* A. Let backgrounds bleed. Astra wraps all content in .ast-container at
   1240px (1200 inside padding), which is why the cream and blue blocks
   stopped short and left white gutters. Unconstrain that wrapper and
   re-constrain the inner container instead, so colour runs edge to edge
   while text stays in a readable column. Content width stays at the
   original 1200 - the 1360 experiment was reverted: it read too wide on
   the hero image, the architecture cards and the editor's letter. Only
   the edge-to-edge colour was kept from that change. */
.ast-container{max-width:100%!important; padding-left:0!important; padding-right:0!important}
.elementor-section.elementor-section-boxed > .elementor-container
{max-width:var(--sh-wide)!important; margin-left:auto!important; margin-right:auto!important}
.e-con.e-parent > .e-con-inner
{max-width:var(--sh-wide)!important; margin-left:auto!important; margin-right:auto!important}

/* B. The 728 now reads as masthead furniture instead of the first story.
   The header's dividing rule is dropped and the ad's own lighter rule
   becomes the header/content boundary, so the ad sits inside the header
   band rather than above the hero as content. */
.elementor-element-e14d955{border-bottom:0!important}
.elementor-element-50a35d3
{padding-top:10px!important; padding-bottom:18px!important;
 border-bottom:1px solid #E7E2D6!important}

/* mid-page ad break: was 96 above + 326 reserved + 96 below for a 90px ad */
.elementor-element-fd18d98{padding-top:0!important; padding-bottom:0!important}
.elementor-element-7170e56e{padding-bottom:48px!important}
.elementor-element-781c1b36{padding-top:48px!important}

/* C. Drop the big title block on the three parent categories that act as
   hubs (design, extras, travel - the ones with children). Kept on every
   leaf category: antiques, architecture, architects, featured, and all
   child categories. The nav state below tells you where you are instead. */
body.category-design .elementor-element-5d7919e,
body.category-extras .elementor-element-5d7919e,
body.category-travel .elementor-element-5d7919e
{display:none!important}

/* D. Highlight the current section in the nav. WordPress already flags it.

   CORRECTED: the masthead nav already draws its own 2px magenta bar on the
   active item, via an ::after pseudo-element pinned to bottom:0. Adding a
   border here put a second navy line 3px under it - the double underline.
   The bar was there before this layer existed, so the designer's "highlight
   the nav" note was already satisfied and the border was never needed on
   this menu. Elementor nav items now take the colour only.

   The border is kept for menus that have no bar of their own - Astra-rendered
   menus and the footer links - hence the :not(.elementor-item) below. Both
   selector groups match the same <a> in the masthead, so excluding by class
   is the only way to separate them. */
.elementor-nav-menu .elementor-item-active,
.elementor-nav-menu .elementor-item-ancestor,
.sh-mast-nav .elementor-item-active,
.sh-mast-nav .elementor-item-ancestor,
.menu-item.current-menu-item > a,
.menu-item.current-menu-ancestor > a,
.menu-item.current-category-ancestor > a
{color:var(--sh-blue)!important}

.menu-item.current-menu-item > a:not(.elementor-item),
.menu-item.current-menu-ancestor > a:not(.elementor-item),
.menu-item.current-category-ancestor > a:not(.elementor-item)
{border-bottom:1px solid currentColor!important; padding-bottom:3px!important}


/* --- PASS 9: align the one full-width section --------------------------
   Places with Presence is built as a full_width section while its lower
   half is boxed, so after the bleed change its header sat ~30px wider than
   the cards beneath it. Constrain just this one rather than every
   full_width section, since the other is meant to run edge to edge. */
.elementor-element-781c1b36 > .elementor-container
{max-width:var(--sh-wide)!important; margin-left:auto!important; margin-right:auto!important}


/* --- PASS 10: close the gap under the masthead -------------------------
   With the ad pulled up into the header band, the hero's 96px top padding
   left ~110px of white between the divider rule and the first image, which
   read as exactly the dead space the designer flagged. The first section
   after the masthead does not need a full section gap above it. */
.elementor-element-5824a62{padding-top:44px!important}


/* --- PASS 11: reading measure on running text ---------------------------
   Three blocks of running copy were spanning the full 1200 column:
     editor's letter          124 characters per line
     sister-brands standfirst 148
     hero feature dek         112
   The guideline is 50-75. This is what made From the Editor read as
   stretched - it was the worst line length on the site and the type bump
   made it more obvious. Capped with ch units rather than pixels so the
   measure holds if a size ever changes. Auto margins keep them centred. */
.elementor-element-8f3198f, .elementor-element-8f3198f p,
.elementor-element-17af28d,
.elementor-element-6bf4c494, .elementor-element-6bf4c494 p,
.elementor-element-6247712, .elementor-element-6247712 p
{max-width:58ch!important; margin-left:auto!important; margin-right:auto!important}


/* --- PASS 12: SVG logos -------------------------------------------------
   Header now uses SHome-logo-blues.svg (attachment 26123) in place of the
   600x200 PNG. The SVG carries only a viewBox and no width/height, so the
   browser gave it a 48x24 fallback - it has to be sized in CSS. Height is
   matched to the old logo's 100px so the masthead does not change height;
   the SVG is 2:1 rather than 3:1 so it renders ~200px wide instead of 300. */
header.elementor-location-header .elementor-widget-theme-site-logo img,
header.elementor-location-header .elementor-element-45f54b2 img
{height:100px!important; width:auto!important; max-width:100%!important}

/* The navy footer bar carried the wordmark as live text, which would read as
   a duplicate next to a logo, so the white SVG takes its place. The text is
   kept in the DOM at zero size so screen readers still announce the brand. */
.elementor-element-39852d1 .elementor-heading-title
{font-size:0!important; line-height:0!important}
.elementor-element-39852d1 .elementor-heading-title::before{
 content:''; display:block; width:200px; height:100px; margin:0 auto 4px;
 background:url(/wp-content/uploads/2026/08/SHome-White-logo.svg) center/contain no-repeat;
}


/* --- PASS 13: compensate for the SVG export padding --------------------
   Both logo SVGs were exported on a 1200x600 canvas with the artwork
   floating in the middle, and by different amounts:
     blues  artwork 599x247 at 300,177 - fills 50% wide, 41% tall
     white  artwork 294x132 at 451,233 - fills 25% wide, 22% tall
   So at any given box size the white one renders half the size of the blue
   one. Scaled here to match the old logo's ~210x95 visible wordmark.
   THE REAL FIX is to re-export both cropped to the artwork, or just edit
   the viewBox - see the note handed over with this file. Then these two
   rules can be deleted and the logos will size normally. */
header.elementor-location-header .elementor-widget-theme-site-logo img,
header.elementor-location-header .elementor-element-45f54b2 img
{height:100px!important; width:auto!important; max-width:100%!important;
 transform:scale(2.1); transform-origin:center center}

.elementor-element-39852d1 .elementor-heading-title::before{
 background-size:400% auto;
}


/* --- PASS 14: drop the city/state from the post-page loops --------------
   The bottom "More Homes We Love" grid and the "Editors' Picks" rail share
   loop template 25846, so both printed the location kicker. With the city
   and state now shown on the article itself, repeating it on the related
   cards is redundant. Scoped to these two grids only - the category archive
   cards keep their location line. */
.sh-related-grid .elementor-element-4ac6ebc,
.sh-rail-grid .elementor-element-4ac6ebc,
.sh-related-grid .sh-loc,
.sh-rail-grid .sh-loc
{display:none!important}


/* --- PASS 15: tidy the previous/next block ------------------------------
   Three separate faults, none of them the font sizes:

   1. Elementor's own widget CSS puts white-space:nowrap, overflow:hidden and
      text-overflow:ellipsis on the titles, so every headline was cut off
      mid-word. Allowed to wrap to two lines instead.
   2. The arrow wrapper is a full-width display:flex row with no justify, so
      the chevron sat at the LEFT of the column on both sides - which on the
      right-aligned Next side left it floating under the middle of the title.
      Each side is now justified to match its own text alignment.
   3. The wrapper inherited the body's 1.65 line-height, giving a ~43px line
      box around a 16px glyph and pushing the chevrons off centre. Pinned to 1.
*/
.elementor-widget-post-navigation .post-navigation__prev--title,
.elementor-widget-post-navigation .post-navigation__next--title{
 white-space:normal!important; overflow:hidden!important; text-overflow:clip!important;
 display:-webkit-box!important; -webkit-line-clamp:2; -webkit-box-orient:vertical;
 line-height:1.3!important;
}

.elementor-widget-post-navigation .post-navigation__arrow-wrapper{
 line-height:1!important; align-items:center!important;
}
.elementor-widget-post-navigation .post-navigation__prev .post-navigation__arrow-wrapper{
 justify-content:flex-start!important;
}
.elementor-widget-post-navigation .post-navigation__next .post-navigation__arrow-wrapper{
 justify-content:flex-end!important;
}

/* a little air between the label, the headline and the chevron row */
.elementor-widget-post-navigation .post-navigation__prev--label,
.elementor-widget-post-navigation .post-navigation__next--label{
 margin-bottom:6px!important; display:block!important;
}


/* --- PASS 16: the actual cause of the floating chevrons -----------------
   The <a> inside each prev/next block already carries Elementor's
   justify-content and align-items, but it is rendering as display:block, so
   both were inert and the chevron dropped onto its own line - above the
   label on the left, below the headline on the right. Making the anchor a
   flex row puts the arrow beside the text on both sides, and because the DOM
   order is arrow-then-text on prev and text-then-arrow on next, each chevron
   ends up on the correct side without any reordering. */
.elementor-widget-post-navigation .elementor-post-navigation__prev > a,
.elementor-widget-post-navigation .elementor-post-navigation__next > a{
 display:flex!important; align-items:center!important; gap:16px;
}
.elementor-widget-post-navigation .elementor-post-navigation__prev > a{ justify-content:flex-start!important; }
.elementor-widget-post-navigation .elementor-post-navigation__next > a{ justify-content:flex-end!important; }

/* arrow sized to its glyph, text free to wrap in what is left */
.elementor-widget-post-navigation .post-navigation__arrow-wrapper{
 flex:0 0 auto!important; width:auto!important; line-height:1!important;
}
/* Elementor mixes prefixed and unprefixed classes in this widget: the arrow
   wrapper is post-navigation__arrow-wrapper but the blocks are
   elementor-post-navigation__next. Missing that prefix is why the first
   attempt at this silently matched nothing. */
.elementor-post-navigation__link__prev,
.elementor-post-navigation__link__next{
 min-width:0!important; flex:1 1 auto!important;
}


/* --- PASS 17: centre the footer newsletter form -------------------------
   It is a HubSpot embed. The block was already centred as a whole, but
   HubSpot's own stylesheet caps its fieldsets and gives each field 48% with
   a float, so inside the 600px column the name row filled only ~390px, the
   email sat at half width on the left, and the submit ran the full 600 -
   which read as ragged rather than centred.

   Fieldsets are unclamped and laid out with flex instead of HubSpot's floats,
   which also avoids the 8px inner margin that makes a straight 50% overflow.
   Labels are centred; text typed into the inputs stays left-aligned, which is
   the readable convention - say the word if you want that centred too. */
.sh-nl-form{ text-align:center!important; }

.sh-nl-form fieldset,
.sh-nl-form fieldset.form-columns-2,
.sh-nl-form fieldset.form-columns-1{
 max-width:100%!important; width:100%!important; float:none!important;
}

/* name row: two equal halves that actually fill the column */
.sh-nl-form fieldset.form-columns-2{
 display:flex!important; gap:12px!important; flex-wrap:nowrap!important;
}
.sh-nl-form fieldset.form-columns-2 .hs-form-field{
 width:auto!important; flex:1 1 0!important; float:none!important;
}

/* HubSpot puts an inner .input div with a right margin on the first column */
.sh-nl-form .hs-form-field > .input,
.sh-nl-form fieldset .input{ margin:0!important; }

.sh-nl-form .hs-input,
.sh-nl-form input[type="text"],
.sh-nl-form input[type="email"]{
 width:100%!important; box-sizing:border-box!important;
}

.sh-nl-form .hs-form-field > label,
.sh-nl-form label{ display:block!important; text-align:center!important; width:100%!important; }

.sh-nl-form .hs_submit,
.sh-nl-form .hs_submit .actions{
 width:100%!important; text-align:center!important; margin-left:0!important; margin-right:0!important;
}

/* stack the name row on phones rather than squeezing two fields into it */
@media (max-width:767px){
 .sh-nl-form fieldset.form-columns-2{ flex-direction:column!important; gap:0!important; }
}


/* --- PASS 18: brand fonts where Elementor was falling back -------------
   ROOT CAUSE, worth fixing properly: all four Elementor global typography
   slots are empty --e-global-typography-primary/secondary/text/accent all
   resolve to "". Any widget whose font is set to "Global" therefore emits
   font-family: var(--e-global-typography-text-font-family), which is an
   invalid declaration, so the browser falls back to its own default. That is
   why the featured image caption came out in Roboto and the previous/next
   block in Roboto Slab - neither font is loaded on purpose anywhere.

   Setting those four slots in Elementor > Site Settings > Typography is the
   real fix and would catch anything else bound to them. Held off because the
   site currently runs two serif families (big-caslon-fb on articles, Libre
   Caslon Display on the homepage) and picking the globals is tangled up with
   resolving that. These rules pin the two visible offenders to the families
   their own neighbours already use. */

/* featured image caption: match the in-content captions exactly */
.elementor-widget-image .widget-image-caption,
.elementor-widget-image figcaption.wp-caption-text{
 font-family:futura-pt,"Futura PT",sans-serif!important;
 letter-spacing:1.2px!important;
 color:#6E6E73!important;
}

/* previous/next labels are labels - same family as kickers and credits */
.elementor-widget-post-navigation .post-navigation__prev--label,
.elementor-widget-post-navigation .post-navigation__next--label{
 font-family:futura-pt,"Futura PT",sans-serif!important;
}

/* previous/next headlines read as headlines, so the article serif */
.elementor-widget-post-navigation .post-navigation__prev--title,
.elementor-widget-post-navigation .post-navigation__next--title{
 font-family:big-caslon-fb,sans-serif!important;
}


/* --- DROP CAP SUSPENDED (not deleted) ----------------------------------
   Measured on a 150-post sample: 92 posts (61%) open with a credit line
   rather than the story - 87 of them with the literal word "Text" - so the
   pink initial was landing on the T of "Text Frances Flautt Zook" instead of
   the first word of the copy. Wrong about six times in ten.

   Both rules are still here, disabled by an .sh-dropcap-off prefix that
   nothing on the site carries. Delete that prefix from both selectors to
   switch the drop cap back on - the intention once the credit lines have been
   lifted out of the body copy into the writer/photographer fields. */


/* --- PASS 19: Designer Q&A body copy ----------------------------------
   Two separate faults with the same symptom - Q&A copy not reading as
   article copy.

   1. FIXED AT SOURCE, no CSS here. Template 25901 had its
      theme-post-content widget (9a4e158) set to Jost 12px in #8A6D3B - a
      credit-line style applied to the entire article body, so every
      paragraph on every Q&A post inherited brown Jost. Changed in Elementor
      to match template 25839 content widget af9961c:
      benton-modern-display / #26262A / 17px / 400.

   2. NEEDS CSS. A handful of posts have their copy built in Elementor
      rather than typed into the editor. Elementor own frontend CSS gives
      every text-editor widget:
        font-family: var( --e-global-typography-text-font-family ), Sans-serif
      and because that global is empty the declaration still parses - the
      Sans-serif fallback keeps it valid - so it beats the article body font
      and lands on the browser default, which is why Lauren Liess came out in
      Roboto. Copy sitting inside the article should read as the article, so
      those widgets are told to inherit rather than carry their own face.
      This also covers the same trap on the main article template. */

.elementor-widget-theme-post-content .elementor-widget-text-editor,
.elementor-widget-theme-post-content .elementor-widget-text-editor p,
.elementor-widget-theme-post-content .elementor-widget-text-editor li{
 font-family:inherit!important;
 color:inherit!important;
}


/* and the same blanket 18.5px rule has a direct-child-paragraph variant
   that PASS 6 missed. It only ever bit where article paragraphs are direct
   children of the content widget, which is the Q&A layout - the main
   article template nests them, so the sitewide size check read clean. */
.elementor-widget-theme-post-content > p,
.elementor-widget-theme-post-content > .elementor-widget-container > p{
 font-size:var(--sh-body)!important;
 line-height:var(--sh-lh-body)!important;
}


/* --- PASS 20: keep the section highlight out of the dropdown -----------
   PASS 8-D marks the current section by forcing the nav link to --sh-blue.
   Its selectors were never scoped to the top level, so they also caught the
   current item INSIDE a dropdown - and Elementor already fills that item
   with the same navy. Measured on the Designer Q&As archive: the link
   computed to colour rgb(30,42,140) on background rgb(30,42,140). Not a
   hover problem - the child category you were standing on was invisible at
   rest, and the underline drew navy on navy as well. The 3px padding from
   the same rule also made that row 9px shorter than its neighbours.

   Inside a dropdown the filled block IS the highlight, so the label goes
   white and the underline comes off. Top-level nav is untouched. */

.elementor-nav-menu--dropdown .elementor-item-active,
.elementor-nav-menu--dropdown .elementor-item-ancestor,
.elementor-nav-menu--dropdown .elementor-item.highlighted,
.sub-menu .menu-item.current-menu-item > a,
.sub-menu .menu-item.current-menu-ancestor > a,
.sub-menu .menu-item.current-category-ancestor > a{
 color:#FFFFFF!important;
 border-bottom:0!important;
 padding-bottom:12px!important;
}


/* --- PASS 21: archive leaderboard label ---------------------------------
   The category and Designer Q&A archive templates were shipping a literal
   placeholder - an HTML widget holding nothing but a "paste the tag here"
   comment and a line of dummy text naming the slot size - so every archive
   rendered an empty cream box
   where the leaderboard should be. Not a zone misconfiguration: no ad call
   was ever made. Both widgets now carry the same tag as the single-post
   leaderboard (73be3d8 on tpl 25950, 388ea9c on tpl 25955).

   The tag renders its own "Advertisement" label, so the placeholder's
   wrapper markup came out with it - it was duplicating the label and
   painting a cream panel behind the creative. These two ids just join the
   existing rule that sizes that label on the post templates. */
.elementor-element-73be3d8 span, .elementor-element-388ea9c span
{font-size:var(--sh-micro)!important}


/* --- PASS 22: the newsletter page signup form ---------------------------
   Two separate faults, and the CSS was the second of them.

   1. The embed was calling hbspt.forms.create() with no target. Without one,
      HubSpot v2 renders into a wrapper of its own making and here it fell
      back to an <iframe class="hs-form-iframe"> whose src stayed about:blank
      forever - a 254px empty box, every load. The footer embed always worked
      because its call passes target and css. Fixed at source: the page widget
      now passes target:"#sh-nl-target" and css:"" too. This was also the real
      reason the old WPBakery page had no form, not the duplicate form GUID I
      first blamed.

   2. css:"" stops HubSpot injecting its own stylesheet, which is what makes
      the rules below possible rather than a fight. Fonts here are the
      page-side stack (Jost / Libre Caslon Text) to match this page, not the
      article stack used elsewhere in this layer. */

.sh-nl-page form.hs-form{ margin:0!important; }
.sh-nl-page fieldset{ max-width:none!important; }

/* HubSpot ships the name pair as fieldset.form-columns-2 with floated halves */
.sh-nl-page fieldset.form-columns-2{ display:flex!important; gap:20px!important; }
.sh-nl-page fieldset .hs-form-field{
 flex:1 1 0!important; width:auto!important; float:none!important; padding:0!important;
 margin:0 0 26px!important;
}
.sh-nl-page .hs-form-field > .input,
.sh-nl-page fieldset .input{ margin:0!important; }

.sh-nl-page .hs-form-field > label{
 display:block!important;
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:12px!important; font-weight:500!important;
 letter-spacing:1.6px!important; text-transform:uppercase!important;
 color:#6E6E73!important; margin:0 0 8px!important;
}
.sh-nl-page .hs-form-required{ color:#C72869!important; }

/* ruled underline rather than a grey box - reads as a subscription card */
.sh-nl-page input[type="text"],
.sh-nl-page input[type="email"]{
 width:100%!important; box-sizing:border-box!important;
 font-family:"Libre Caslon Text",Georgia,serif!important;
 /* 16px floor stops iOS zooming the page on focus */
 font-size:16px!important;
 color:#1C1C1E!important;
 background:transparent!important;
 border:0!important; border-bottom:1px solid #E3DFD6!important;
 border-radius:0!important;
 padding:9px 2px!important;
 transition:border-color .18s ease;
}
.sh-nl-page input[type="text"]:focus,
.sh-nl-page input[type="email"]:focus{
 outline:none!important; border-bottom-color:#1E2A8C!important;
}

.sh-nl-page .hs_submit .actions{ padding:0!important; margin:14px 0 0!important; }
.sh-nl-page input[type="submit"]{
 display:block!important; width:100%!important;
 background:#1E2A8C!important; color:#FFFFFF!important;
 border:0!important; border-radius:0!important;
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:16px!important; font-weight:500!important;
 letter-spacing:2.2px!important; text-transform:uppercase!important;
 padding:19px 24px!important;
 cursor:pointer; transition:background-color .18s ease;
}
.sh-nl-page input[type="submit"]:hover{ background:#141D66!important; }

/* validation and the post-submit message */
.sh-nl-page .hs-error-msg,
.sh-nl-page .hs-error-msgs li,
.sh-nl-page .hs_error_rollup{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:12px!important; letter-spacing:.4px!important;
 color:#C72869!important; list-style:none!important;
 margin:6px 0 0!important; padding:0!important;
}
.sh-nl-page .submitted-message{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:19px!important; line-height:1.62!important; color:#26262A!important;
}

@media (max-width:767px){
 .sh-nl-page fieldset.form-columns-2{ flex-direction:column!important; gap:0!important; }
}


/* --- SCOPING NOTE (supersedes the page-ID lists in PASSES 23-25) --------
   The plain editorial pages - About, Contact, Advertising, Submit an Event -
   used to be styled through a hard-coded list of four page IDs repeated on
   every selector: 28, 26217, 26227, 26228. It worked, and it was a trap: a
   fifth page inherited nothing, silently, and the reason would not have been
   findable from the page itself.

   One body class now does it: .sh-page. It arrives from the "Southern Home -
   Simple Page" entry in Page Attributes -> Template. The PHP behind that is
   in southern-home-design-calendar.php (the shdc_simple_page_* functions) -
   not calendar work, but that plugin is the only file on this site that is
   both ours and safe from theme updates, and the header there says so.

   To put a new page in the house style: pick that template. Nothing to add
   here, no ID to remember.

   Deliberately opt-in rather than automatic. Styling every page that is not
   built with Elementor would have swept in cart, checkout, my-account and
   shop, where a 720px measure and a serif face on form inputs are wrong. */

/* --- PASS 23: the event submission form --------------------------------
   /submit-an-event/ carries Gravity Forms form 5, which feeds
   inc/event-submissions.php and creates DRAFT tribe_events. Gravity Forms
   ships its own stylesheet and there is no css:"" equivalent to switch it
   off, so this overrides rather than replaces - hence the !importants.

   These rules cover every Gravity Form that lands on an .sh-page - form 5
   here, form 2 on /contact/ - which is why there is no longer a near-identical
   second copy of them further down.

   Same visual language as the newsletter form in PASS 22: Jost uppercase
   labels, ruled underlines instead of boxes, navy submit. The page-side
   stack, since this is a marketing page and not an article.

   Gravity Forms hides its honeypot with display:none on
   .gform_validation_container - verified hidden here. Do not add rules that
   could reveal it; a visible honeypot silently fails real submissions. */

/* the theme runs .ast-container at max-width:100% with no gutter, so the
   content has to centre and pad itself here */
.sh-page .entry-content{
 max-width:720px;
 margin-left:auto!important; margin-right:auto!important;
 padding-left:24px; padding-right:24px;
}
.sh-page h1{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:44px!important; line-height:1.12!important; font-weight:400!important;
 color:#1C1C1E!important; margin:0 0 18px!important;
}
@media (max-width:767px){
.sh-page h1{ font-size:32px!important; }
}

/* section headings on the simple pages */
.sh-page .entry-content h2{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:26px!important; line-height:1.2!important; font-weight:400!important;
 color:#1C1C1E!important; margin:44px 0 14px!important;
}
.sh-page .entry-content h3{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:22px!important; line-height:1.24!important; font-weight:400!important;
 color:#1C1C1E!important; margin:32px 0 12px!important;
}
.sh-page .entry-content a:not(.wp-block-button__link){
 color:#1E2A8C!important; text-decoration:underline!important;
 text-decoration-thickness:1px!important; text-underline-offset:2px!important;
}
.sh-page .entry-content > p{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:19px!important; line-height:1.62!important; color:#26262A!important;
 max-width:56ch;
 margin-left:0!important;
}
.sh-page .gform_wrapper{ margin-top:40px!important; }
.sh-page .gform_wrapper .gform_fields{ grid-row-gap:26px!important; }
.sh-page .gform_wrapper .gfield_label{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:12px!important; font-weight:500!important;
 letter-spacing:1.6px!important; text-transform:uppercase!important;
 color:#6E6E73!important; margin:0 0 8px!important;
}
.sh-page .gform_wrapper .gfield_required{ color:#C72869!important; font-weight:500!important; }
.sh-page .gform_wrapper .gfield_description{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:12px!important; color:#6E6E73!important;
 padding-top:6px!important;
}
.sh-page .gform_wrapper input[type="text"],
.sh-page .gform_wrapper input[type="email"],
.sh-page .gform_wrapper input[type="url"],
.sh-page .gform_wrapper textarea,
.sh-page .gform_wrapper select{
 width:100%!important; box-sizing:border-box!important;
 font-family:"Libre Caslon Text",Georgia,serif!important;
 /* 16px floor stops iOS zooming the page on focus */
 font-size:16px!important;
 color:#1C1C1E!important;
 background:transparent!important;
 border:0!important; border-bottom:1px solid #E3DFD6!important;
 border-radius:0!important;
 padding:9px 2px!important;
 box-shadow:none!important;
 transition:border-color .18s ease;
}
.sh-page .gform_wrapper textarea{ min-height:150px!important; }
.sh-page .gform_wrapper input:focus,
.sh-page .gform_wrapper textarea:focus,
.sh-page .gform_wrapper select:focus{
 outline:none!important; border-bottom-color:#1E2A8C!important;
}
.sh-page .gform_wrapper .gform_footer{ margin-top:36px!important; padding:0!important; }
.sh-page .gform_wrapper .gform_button{
 display:block!important; width:100%!important; max-width:340px!important;
 background:#1E2A8C!important; color:#FFFFFF!important;
 border:0!important; border-radius:0!important;
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:16px!important; font-weight:500!important;
 letter-spacing:2.2px!important; text-transform:uppercase!important;
 padding:19px 24px!important;
 cursor:pointer; transition:background-color .18s ease;
}
.sh-page .gform_wrapper .gform_button:hover{ background:#141D66!important; }

/* validation + the post-submit confirmation */
.sh-page .gform_wrapper .gfield_validation_message,
.sh-page .gform_wrapper .validation_message,
.sh-page .gform_wrapper .gform_validation_errors{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:12px!important; letter-spacing:.4px!important;
 color:#C72869!important; background:transparent!important;
 border:0!important; box-shadow:none!important; padding:6px 0 0!important;
}
.sh-page .gform_confirmation_message{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:19px!important; line-height:1.62!important; color:#26262A!important;
 background:#FAF8F3!important; padding:40px 32px!important;
}


/* --- PASS 24: footer link columns --------------------------------------
   The footer gained a three-column link block (section shft1000) above the
   existing bottom bar. It reuses .sh-foot-links, which was written for a
   single horizontal row in the bottom bar, so .sh-foot-col restacks it
   vertically without disturbing the original row. */

.sh-foot-col{ display:flex!important; flex-direction:column!important; align-items:flex-start!important; gap:11px!important; margin:16px 0 0!important; }

/* sentence case in the footer link columns. The column headings stay
   uppercase - label above, list below reads as a hierarchy rather than two
   competing rows of capitals. The bottom-bar policy link follows the links,
   not the headings, so it matches the copyright line beside it. */
.sh-foot-col a,
.sh-foot-legal a{
 text-transform:none!important;
 letter-spacing:.01em!important;
}
.sh-foot-col a{
 color:#FAF8F3!important;
 text-decoration:none!important;
 opacity:.86;
 transition:opacity .18s ease;
}
.sh-foot-col a:hover{ opacity:1; text-decoration:underline!important; }

/* the Hoffman line sits apart from the social list above it */
.sh-foot-more{ margin-top:26px!important; }
.sh-foot-more a{ opacity:.66; }

/* bottom bar: one policy link, centred with the copyright */
.sh-foot-legal{ justify-content:center!important; }
.sh-foot-legal a{ color:#FAF8F3!important; opacity:.7; text-decoration:none!important; }
.sh-foot-legal a:hover{ opacity:1; text-decoration:underline!important; }

@media (max-width:767px){
 .sh-foot-col{ gap:14px!important; }
}


/* --- PASS 25: buttons and the contact form on the simple pages ----------
   The About and Contact pages use core button blocks; Contact also carries
   Gravity Forms form 2 - which PASS 23 now styles directly, so the duplicate
   copy of those rules that used to sit here has been deleted. */
.sh-page .entry-content .wp-block-button__link{
 display:inline-block!important;
 background:#1E2A8C!important; color:#FFFFFF!important;
 border:0!important; border-radius:0!important;
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:16px!important; font-weight:500!important;
 letter-spacing:2.2px!important; text-transform:uppercase!important;
 padding:18px 34px!important; text-decoration:none!important;
 transition:background-color .18s ease;
}
.sh-page .entry-content .wp-block-button__link:hover{ background:#141D66!important; }
.sh-page .wp-block-buttons{ margin:28px 0 8px!important; }

/* Gravity Forms puts checkbox and radio option text in a label class of its own,
   which every rule above missed - it was the last text on any form still sitting
   in the system font. Matched to the input values rather than to the field
   labels, because that is what these are: you are choosing a value, not being
   told what to type. Applies to all four simple pages, not just /advertising/. */
.sh-page .gform_wrapper .gchoice label,
.sh-page .gform_wrapper .gform-field-label--type-inline{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:16px!important; font-weight:400!important;
 letter-spacing:0!important; text-transform:none!important;
 color:#26262A!important;
}

/* sub-labels under compound fields (First / Last on a name field) were
   left in the system font, which is the one bit of the form that gave the
   game away. Both form pages. */
.sh-page .gform_wrapper .gform-field-label--type-sub,
.sh-page .gform_wrapper .ginput_complex label{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; font-weight:400!important;
 letter-spacing:1.2px!important; text-transform:uppercase!important;
 color:#6E6E73!important; margin:6px 0 0!important;
}


/* --- PASS 26: the header search ----------------------------------------
   Elementor Pro's Search widget in the header (widget a5240d9). Out of the box
   it was a 64px full-width bordered box with a near-black submit button beside
   it, sitting in a row of its own under the menu - which read as a search
   *page*, and added about 114px to an already tall masthead.

   It now lives in the menu row itself: collapsed to just a magnifier at the
   right end, opening to a ruled field on focus. Because it is positioned
   absolutely it takes no space in the flow, so the masthead is back to the
   height it was before the widget existed and the menu stays optically centred.

   Focus, not hover. Hover-to-open fires by accident on the way to SUBSCRIBE.

   There is no room to sit beside the menu when open - the last item ends about
   37px from the container edge - so the open field crosses over it on an opaque
   white ground. That is the trade for keeping the menu centred.

   Three things had to be fixed in the header template rather than here, because
   CSS cannot reach them: the placeholder text ("Type to start searching..." ->
   "Search"), the submit trigger (button gone, Enter submits, and Elementor
   keeps a screen-reader-only submit for a11y), and the field typography, which
   was bound to Elementor's "Secondary" global. That global is unset, so it
   resolved to Roboto Slab - the same bug that put Roboto on the featured-image
   caption. It is explicit now.

   Same language as every other input on the site (PASSES 22, 23, 25): no box,
   no fill, one hairline rule, Jost micro-caps placeholder, Caslon for what you
   type, navy on focus. */

.elementor-element-a5240d9 .e-search{ background:transparent!important; }

/* Elementor hangs the magnifier off an absolutely-offset label that sits beside
   the input wrapper, not inside it. Making the FORM the flex row and the label
   a plain flex item puts the icon inline ahead of the field, which is what lets
   the whole control collapse to icon width without the icon sliding out of
   view. The rule lives on the form so it spans icon and field together.

   Deliberately no overflow:hidden anywhere - the live-results <output> is a
   child of the input wrapper, and clipping it would clip the dropdown. */
.elementor-element-a5240d9 .e-search-form{
 display:flex!important; align-items:center!important;
 background:transparent!important; border:0!important;
 border-bottom:1px solid #E7E2D6!important;
 transition:border-color .18s ease;
}
.elementor-element-a5240d9 .e-search-label{
 position:static!important; flex:0 0 auto!important; width:auto!important;
 margin:0!important; padding:0!important;
 display:flex!important; align-items:center!important;
}
.elementor-element-a5240d9 .e-search-label svg{
 position:static!important; inset:auto!important; margin:0!important;
 width:12px!important; height:12px!important; fill:#1E2A8C!important;
}
.elementor-element-a5240d9 .e-search-input-wrapper{
 flex:1 1 auto!important; min-width:0!important;
 background:transparent!important; border:0!important; box-shadow:none!important;
}
.elementor-element-a5240d9 .e-search-input{
 width:100%!important; border:0!important; border-radius:0!important;
 background:transparent!important; box-shadow:none!important;
 height:30px!important; min-height:0!important;
 padding:0 6px 0 8px!important;
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:16px!important; color:#1C1C1E!important;
}
.elementor-element-a5240d9 .e-search-input:focus,
.elementor-element-a5240d9 .e-search-input:focus-visible{
 outline:0!important; box-shadow:none!important;
}
.elementor-element-a5240d9 .e-search-form:focus-within{
 border-bottom-color:#1E2A8C!important;
}
.elementor-element-a5240d9 .e-search-input::placeholder{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; font-weight:400!important;
 letter-spacing:1.6px!important; text-transform:uppercase!important;
 color:#6E6E73!important; opacity:1!important;
}
.elementor-element-a5240d9 .e-search-input-wrapper > svg{
 width:9px!important; height:9px!important; fill:#6E6E73!important;
}

/* --- desktop: collapsed into the menu row ------------------------------- */
@media (min-width:1025px){
 .elementor-element-8a4e28b > .elementor-element-populated{ position:relative!important; }

 .elementor-element-a5240d9{
  position:absolute!important; top:0!important; right:0!important;
  width:24px!important; max-width:none!important; margin:0!important;
  z-index:9; background:#FFFFFF!important;
  transition:width .26s ease;
 }
 .elementor-element-a5240d9 .e-search-form{
  height:28px!important; border-bottom-color:transparent!important;
 }
 .elementor-element-a5240d9 .e-search-input{ cursor:pointer!important; }
 .elementor-element-a5240d9 .e-search-input::placeholder{ opacity:0!important; }

 .elementor-element-a5240d9:focus-within{ width:262px!important; }
 .elementor-element-a5240d9:focus-within .e-search-form{
  border-bottom-color:#1E2A8C!important;
 }
 .elementor-element-a5240d9:focus-within .e-search-input{ cursor:text!important; }
 .elementor-element-a5240d9:focus-within .e-search-input::placeholder{
  opacity:1!important; transition:opacity .18s ease .08s;
 }
}

/* --- tablet and below: the masthead stacks, so the field takes a row ----- */
@media (max-width:1024px){
 .elementor-element-a5240d9{
  max-width:320px!important; margin:6px auto 0!important;
 }
}

/* The live-results dropdown. Elementor prints the results container on every
   page load, empty, so a bordered panel here draws a stray hairline under the
   field before anyone has typed. :has lets the panel exist only once it holds
   results, without depending on class names Elementor toggles at runtime. */
.elementor-element-a5240d9 .e-search-results-container{
 background:transparent!important; border:0!important; border-radius:0!important;
 box-shadow:none!important; margin-top:6px!important;
}
.elementor-element-a5240d9 .e-search-results-container:has(.e-search-results > *){
 background:#FFFFFF!important; border:1px solid #E7E2D6!important;
 box-shadow:0 12px 28px rgba(28,28,30,.09)!important;
}
.elementor-element-a5240d9 .e-search-results a{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:15px!important; color:#1C1C1E!important; text-decoration:none!important;
}
.elementor-element-a5240d9 .e-search-results a:hover{ color:#1E2A8C!important; }

/* --- PASS 27: the search results page -----------------------------------
   Search results do NOT run through the Elementor archive template - only
   category archives do - so this page was untouched Astra: system font on the
   headline, the cards, the meta and the pagination, while every other index on
   the site is branded.

   Pointing the archive template at search results was tried and reverted: its
   Archive Posts widget returns nothing for a search query, so the page rendered
   with a header and zero results. Styling Astra's own search template is the
   correct fix, not a workaround.

   The headline mirrors the category archive's treatment - futura-pt, 300 weight,
   1px tracking, uppercase - so a search reads as one more index rather than a
   different kind of page. Card titles, kickers and excerpts mirror the archive
   cards.

   No author byline here on purpose, and it is not hidden with CSS: Customize ->
   Blog -> Meta no longer lists Author, so "admin" is out of the markup and
   there is no /author/admin/ link for a crawler to follow either. Hiding it in
   CSS would have left the " / " separator stranded. */

body.search h1.page-title,
body.search .ast-archive-title{
 font-family:futura-pt,"Jost",sans-serif!important;
 font-size:34px!important; font-weight:300!important;
 letter-spacing:1px!important; text-transform:uppercase!important;
 color:#1C1C1E!important; line-height:1.2!important;
}
body.search .ast-breadcrumbs,
body.search .ast-breadcrumbs *,
body.search .trail-items{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; font-weight:400!important;
 letter-spacing:1.4px!important; text-transform:uppercase!important;
 color:#6E6E73!important;
}
body.search .ast-breadcrumbs a{ color:#1E2A8C!important; }

body.search article.post .entry-title,
body.search article.post .entry-title a{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:19px!important; font-weight:400!important;
 line-height:1.35!important; letter-spacing:0!important;
 text-transform:none!important; color:#1C1C1E!important;
}
body.search article.post .entry-title a:hover{ color:#1E2A8C!important; }

body.search article.post .entry-meta,
body.search article.post .entry-meta *,
body.search article.post .ast-blog-category,
body.search article.post .ast-terms-link a{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; font-weight:400!important;
 letter-spacing:1.4px!important; text-transform:uppercase!important;
 color:#6E6E73!important;
}
body.search article.post .ast-terms-link a{ color:#1E2A8C!important; }

body.search article.post .entry-content p,
body.search article.post .ast-excerpt-container p{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:15.5px!important; line-height:1.6!important; color:#26262A!important;
}

body.search .ast-pagination,
body.search .ast-pagination *{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:12px!important; font-weight:400!important;
 letter-spacing:1.4px!important; text-transform:uppercase!important;
}
body.search .ast-pagination a{ color:#1E2A8C!important; }
body.search .ast-pagination .page-numbers.current{ color:#1C1C1E!important; }

/* The query term: Astra ships it at weight 600, which at this size and
   tracking reads as a different typeface rather than emphasis. Distinguished by
   colour instead. */
body.search h1.page-title span{
 font-weight:300!important; color:#1E2A8C!important;
}

/* Astra frames the title block in 48px of padding on top of 32px of margin -
   160px of air between the masthead and the first result. Tightened. */
body.search .ast-archive-description{
 padding:26px 0 22px!important; margin:0 0 8px!important;
}

/* the empty-handed case, which is the one people actually remember */
body.search .no-results .entry-title,
body.search .no-results h1,
body.search .no-results h2{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:28px!important; font-weight:400!important;
 text-transform:none!important; letter-spacing:0!important; color:#1C1C1E!important;
}
body.search .no-results p{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:17px!important; line-height:1.6!important; color:#26262A!important;
}

/* Astra also drops its own boxed search form on the no-results page - grey
   fill, rounded, a button. Same hairline treatment as the header field, since
   this is the one moment someone is definitely about to search again. */
body.search .no-results .search-form{
 display:flex!important; align-items:center!important;
 max-width:340px!important; margin:22px auto 0!important;
 background:transparent!important; border:0!important;
 border-bottom:1px solid #E7E2D6!important;
}
body.search .no-results .search-form label{
 flex:1 1 auto!important; margin:0!important; display:block!important;
}
body.search .no-results .search-field{
 width:100%!important; border:0!important; border-radius:0!important; background:transparent!important;
 box-shadow:none!important; height:34px!important; padding:0!important;
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:16px!important; color:#1C1C1E!important;
}
body.search .no-results .search-field::placeholder{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; letter-spacing:1.6px!important;
 text-transform:uppercase!important; color:#6E6E73!important; opacity:1!important;
}
body.search .no-results .search-form:focus-within{ border-bottom-color:#1E2A8C!important; }
body.search .no-results .search-submit,
body.search .no-results button[type="submit"]{
 background:transparent!important; border:0!important; box-shadow:none!important;
 padding:0 0 0 10px!important; min-height:0!important;
}
body.search .no-results .search-submit *{ color:#1E2A8C!important; fill:#1E2A8C!important; }

/* --- PASS 28: the article rail stops being dead space -------------------
   Both single-post templates lay the article out as a 70% column with a 30%
   rail beside it, and both sections are set to top-align, so the rail column
   ends where its content ends. Measured on staging:

     Designer Q&A (template 25901)  body 8,450px   rail 1,236px
     Feature      (template 25839)  body 7,355px   rail 1,019px

   About 85% of the scroll had an empty column next to it, and the AdButler
   slot in that rail was on screen for the first sixth of the article and then
   gone. Stretching the rail column to the section height gives a sticky child
   somewhere to travel; the ad then rides the whole article.

   Why order:99 rather than moving the widget in the templates: a sticky element
   pins while its later siblings keep scrolling, so with the ad first in the
   rail the recirculation lists slid up behind it. Sending it last in the flex
   order puts it after everything, with nothing left to collide with, and
   leaves the DOM (and the ad script) untouched. Reversible by deleting one
   declaration.

   The trade: the ad now sits below the "More Q&As" list instead of above it, so
   it is a little lower on first paint. It is on screen for roughly 85% of the
   article instead of 15%, which is the better end of that trade for a
   direct-sold slot. Flip it by removing order:99.

   top:94px clears the masthead - section e14d955 goes position:fixed at 78px
   tall once you scroll, so anything sticky nearer the top hides behind it. The
   admin bar shifts that down another 32px when you are logged in, which is
   what the admin-bar rule is for; visitors never see it. */

@media (min-width:1025px){
 .elementor-element-426bcfd6 > .elementor-container,
 .elementor-element-dd04c1d > .elementor-container{
  align-items:stretch!important;
 }

 .elementor-element-4f105b07,
 .elementor-element-2cecc485{ align-self:stretch!important; }

 .elementor-element-4f105b07 > .elementor-widget-wrap,
 .elementor-element-2cecc485 > .elementor-widget-wrap{
  height:100%!important; align-content:flex-start!important;
 }

 .elementor-element-48377409,
 .elementor-element-3f2cfa73{
  order:99!important;
  position:sticky!important; top:94px!important;
  align-self:flex-start!important;
  margin-top:36px!important;
 }

 body.admin-bar .elementor-element-48377409,
 body.admin-bar .elementor-element-3f2cfa73{ top:126px!important; }
}

/* --- PASS 29: the advertising page ------------------------------------
   /advertising/ is a media-kit landing page built from core blocks, wrapped in
   a single group with the class sh-adv. Everything below hangs off that class,
   not off a page ID - so a second sales page can reuse the whole treatment by
   wrapping its content the same way.

   The page runs a wider measure than the other simple pages (1040 against 720)
   because it carries stat grids, a four-column card set and a calendar table.
   Text inside it is still held to a 680px reading measure; only the bands,
   figure and grids use the full width. No 100vw full-bleed anywhere on purpose:
   100vw ignores the scrollbar and the usual fix, overflow-x:hidden on an
   ancestor, would create a scroll container and break the sticky rail ad from
   PASS 28.

   Rates are deliberately absent from the page - they live in the PDF, which
   downloads without a form. Gating a media kit blocks the behaviour you want
   (a buyer forwarding it), collects mostly junk addresses, and hides the
   audience numbers from search. The inquiry form (Gravity Forms 6) sits at the
   bottom to catch intent instead, and inherits the form styling from PASS 23.

   Note for the next editor: do NOT open this page in Elementor. It had been
   opened once already, which set _elementor_edit_mode to "builder" - after that
   Elementor renders its own stored copy and silently ignores the page content,
   which is why the first version of this design did not appear on the front end.
   Edit it in the block editor. */

.sh-page .entry-content:has(> .sh-adv){ max-width:1040px!important; }

.sh-adv > p,
.sh-adv > h2,
.sh-adv > ul,
.sh-adv > .wp-block-buttons{ max-width:680px; margin-left:auto; margin-right:auto; }

/* --- hero --- */
.sh-adv-kicker{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; font-weight:400!important;
 letter-spacing:2.2px!important; text-transform:uppercase!important;
 color:#1E2A8C!important; text-align:center!important;
 margin:0 auto 18px!important;
}
.sh-page .entry-content .sh-adv h1{
 font-size:56px!important; line-height:1.06!important;
 text-align:center!important; margin:0 0 22px!important;
}
.sh-adv h1 em{ font-style:italic; }
.sh-adv-standfirst{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:21px!important; line-height:1.55!important;
 color:#3A3A3C!important; text-align:center!important;
 max-width:620px!important; margin:0 auto 30px!important;
}
/* PASS 25 sets .sh-page .wp-block-buttons{margin:28px 0 8px!important}, which at
   (0,2,0) outranks a bare .sh-adv-cta and zeroed the inline margins - so the
   buttons sat flush left inside a 680px box while their contents centred within
   it. Third time this stylesheet has bitten me on specificity; hence the long
   selector rather than another layer on top. */
.sh-page .entry-content .sh-adv .sh-adv-cta{
 justify-content:center!important; gap:14px!important;
 margin:0 auto 8px!important; max-width:680px;
}
.sh-adv .wp-block-button.is-style-outline .wp-block-button__link{
 background:transparent!important; color:#1E2A8C!important;
 border:1px solid #1E2A8C!important;
}
.sh-adv .wp-block-button.is-style-outline .wp-block-button__link:hover{
 background:#1E2A8C!important; color:#FFFFFF!important;
}


/* Belt and braces: every box that is constrained to the 680px reading measure
   centres, whatever else in the layer sets its margins. The element selector
   pushes these to (0,3,1) so they outrank anything class-only above. */
.sh-page .entry-content .sh-adv > p,
.sh-page .entry-content .sh-adv > h1,
.sh-page .entry-content .sh-adv > h2,
.sh-page .entry-content .sh-adv > ul,
.sh-page .entry-content .sh-adv > .wp-block-buttons,
.sh-page .entry-content .sh-adv-band > h2,
.sh-page .entry-content .sh-adv-band > p,
.sh-page .entry-content .sh-adv-sec > h2,
.sh-page .entry-content .sh-adv-sec > p{
 margin-left:auto!important; margin-right:auto!important;
}

/* --- the photograph --- */
.sh-adv-figure{ margin:52px 0!important; }
.sh-adv-figure img{ width:100%!important; height:auto!important; display:block; }

/* --- bands and sections --- */
.sh-adv-band{ padding:56px 34px!important; margin:0 0 8px!important; }
.sh-adv-band--navy{ background:#1E2A8C!important; }
.sh-adv-band--paper{ background:#FAF8F3!important; }
.sh-adv-sec{ padding:56px 0 48px!important; }

.sh-adv-band > h2, .sh-adv-band > p,
.sh-adv-sec > h2, .sh-adv-sec > p{ max-width:680px; margin-left:auto; margin-right:auto; }

.sh-page .entry-content .sh-adv h2{
 font-size:32px!important; text-align:center!important; margin:0 auto 14px!important;
}
.sh-adv-band--navy h2{ color:#FAF8F3!important; }
.sh-adv-eyebrow{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; letter-spacing:2.2px!important;
 text-transform:uppercase!important; text-align:center!important;
 color:rgba(250,248,243,.62)!important; margin:0 auto 30px!important; max-width:680px;
}
.sh-adv-lede{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:19px!important; line-height:1.6!important;
 color:#3A3A3C!important; text-align:center!important;
 max-width:640px!important; margin:0 auto 34px!important;
}
.sh-adv-source{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11.5px!important; line-height:1.5!important;
 color:#6E6E73!important; text-align:center!important;
 margin:26px auto 0!important;
}
.sh-adv-band--navy .sh-adv-source{ color:rgba(250,248,243,.55)!important; }
.sh-adv-note{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:16px!important; line-height:1.6!important;
 color:#6E6E73!important; text-align:center!important;
 margin:30px auto 0!important;
}

/* --- the numbers --- */
.sh-stats{ gap:26px!important; margin:0!important; }
.sh-stats .wp-block-column{ flex-basis:0; }
.sh-stat{ text-align:center!important; }
.sh-stat__n{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:44px!important; line-height:1.05!important; font-weight:400!important;
 color:#1E2A8C!important; margin:0 0 8px!important; letter-spacing:0!important;
}
.sh-stat__l{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; font-weight:400!important;
 letter-spacing:1.4px!important; text-transform:uppercase!important;
 color:#6E6E73!important; line-height:1.5!important; margin:0!important;
}
.sh-adv-band--navy .sh-stat__n{ color:#FAF8F3!important; }
.sh-adv-band--navy .sh-stat__l{ color:rgba(250,248,243,.7)!important; }
.sh-stats--3{ margin-bottom:34px!important; }

/* --- ways to appear --- */
.sh-adv-cards{ gap:34px!important; margin:0 0 34px!important; }
.sh-adv-card{ border-top:1px solid #E7E2D6!important; padding-top:20px!important; }
.sh-page .entry-content .sh-adv-card h3{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:22px!important; font-weight:400!important; text-transform:none!important;
 letter-spacing:0!important; color:#1C1C1E!important; margin:0 0 10px!important;
 text-align:left!important;
}
.sh-adv-card p{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:16.5px!important; line-height:1.62!important; color:#26262A!important; margin:0!important;
}

/* --- the calendar --- */
.sh-adv-cal{ margin:0 auto!important; }
/* The table element itself carries border-top and border-left but no right or
   bottom - Astra’s table default, the old collapsed-border trick where cells are
   meant to supply the other two sides. Zeroing the cell borders (below) left
   those two orphaned: a vertical rule down the left and a line across the top
   with nothing to close against on the right. Hence border:0 here. The design
   wants horizontal rules only, so there are no vertical rules to close. */
.sh-adv-cal table{
 width:100%!important; border-collapse:collapse!important; border:0!important;
}
.sh-adv-cal th{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:10.5px!important; font-weight:400!important;
 letter-spacing:1.6px!important; text-transform:uppercase!important;
 color:#6E6E73!important; text-align:left!important;
 padding:0 24px 16px 0!important; border:0!important;
 border-bottom:1px solid #1C1C1E!important;
}
.sh-adv-cal td{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:16px!important; color:#1C1C1E!important;
 padding:20px 24px 20px 0!important;
 border:0!important; border-bottom:1px solid #E7E2D6!important;
}
/* The ad-close column is the one a planner is actually looking for, so it is
   picked out in navy - and right-aligned along with its header, so the column
   closes flush with the end of the rules. Left-aligned, the dates stopped about
   60px short and the rules ran on into blank space, which read as unfinished. */
.sh-adv-cal th:last-child,
.sh-adv-cal td:last-child{ text-align:right!important; padding-right:0!important; }
.sh-adv-cal td:last-child{ color:#1E2A8C!important; }
.sh-adv-cal td em{ font-style:italic; }

/* --- specs --- */
.sh-adv-specs{ gap:40px!important; margin:0!important; }
.sh-page .entry-content .sh-adv-specs h3{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; font-weight:400!important;
 letter-spacing:1.8px!important; text-transform:uppercase!important;
 color:#1E2A8C!important; margin:0 0 12px!important; text-align:left!important;
}
.sh-adv-specs ul{ list-style:none!important; margin:0!important; padding:0!important; }
.sh-adv-specs li{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:15.5px!important; color:#26262A!important;
 padding:9px 0!important; border-bottom:1px solid #E7E2D6!important; margin:0!important;
}

/* --- talk to us --- */
.sh-adv-talk{ border-top:1px solid #E7E2D6!important; }
.sh-adv-talk .gform_wrapper{ max-width:680px!important; margin:0 auto!important; }

@media (max-width:781px){
 .sh-page .entry-content .sh-adv h1{ font-size:36px!important; }
 .sh-adv-standfirst{ font-size:18px!important; }
 .sh-adv-band{ padding:38px 20px!important; }
 .sh-adv-sec{ padding:38px 0 30px!important; }
 .sh-stat__n{ font-size:36px!important; }
 .sh-stats{ gap:22px!important; }
 .sh-adv-cal th{ font-size:9.5px!important; letter-spacing:1px!important; }
 .sh-adv-cal td{ font-size:14.5px!important; }
}

/* --- PASS 30: /about/ ------------------------------------------------
   Reuses the editorial vocabulary from PASS 29 - .sh-adv-band, .sh-adv-sec,
   .sh-stat and friends - so /about/ and /advertising/ read as one system. The
   sh-adv prefix is historical: those classes were written for the advertising
   page and are now the shared treatment for both. Renaming them to something
   neutral is worth doing and is not worth doing the day before a content
   migration, so the three new pieces here are named plainly instead, to keep
   the debt from growing.

   The departments are set as a contents page rather than a sentence - eight
   ruled cells in a grid. It is the one place on the site where the shape of the
   magazine itself is visible. */

.sh-statement{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:30px!important; line-height:1.4!important; font-weight:400!important;
 color:#FAF8F3!important; text-align:center!important;
 max-width:760px!important; margin:0 auto!important;
}

/* The departments, set as one quiet run rather than a ruled grid. The grid
   version - eight cells, a hairline over each - was a template pattern, not an
   editorial one; it announced itself. A line of italic titles says the same
   thing and gets out of the way. */
.sh-dept{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-style:italic!important; font-weight:400!important;
 font-size:21px!important; line-height:1.85!important;
 color:#1C1C1E!important; text-align:center!important;
 max-width:780px!important; margin:8px auto 0!important;
}

@media (max-width:781px){
 .sh-statement{ font-size:22px!important; }
 .sh-dept{ font-size:18px!important; }
}

/* --- PASS 31: the 404 -------------------------------------------------
   Header and footer are ours; everything between them was Astra default -
   system-font headline, generic copy, a boxed search widget. Same shape of
   problem as the search results page in PASS 27, and the same fix.

   The copy itself ("This page doesn’t seem to exist") is hardcoded in the
   theme, so it cannot be changed from here. Changing it, or adding a way back
   into the magazine, needs an Elementor 404 template - worth doing, not needed
   to stop this looking broken. */

body.error404 .ast-404-layout-1{ padding:64px 0 72px!important; }

body.error404 h1.page-title{
 font-family:"Libre Caslon Display",Georgia,serif!important;
 font-size:40px!important; font-weight:400!important;
 letter-spacing:0!important; text-transform:none!important;
 color:#1C1C1E!important; text-align:center!important;
 margin:0 0 14px!important;
}
body.error404 .page-sub-title{
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:19px!important; font-weight:400!important;
 line-height:1.6!important; color:#3A3A3C!important;
 text-align:center!important; text-transform:none!important;
 letter-spacing:0!important; max-width:560px!important;
 margin:0 auto 30px!important;
}

/* the search box, given the same hairline treatment as every other field on
   the site rather than Astra’s grey rounded widget */
body.error404 .ast-404-search{ text-align:center!important; }
body.error404 .ast-404-search .widget_search{
 width:340px!important; max-width:100%!important;
 margin:0 auto!important; float:none!important;
}
body.error404 .search-form{
 display:flex!important; align-items:center!important;
 width:100%!important; max-width:none!important; margin:0!important;
 background:transparent!important; border:0!important;
 border-bottom:1px solid #E7E2D6!important;
}
body.error404 .search-form label{ flex:1 1 auto!important; margin:0!important; display:block!important; }
body.error404 .search-field{
 width:100%!important; border:0!important; border-radius:0!important;
 background:transparent!important; box-shadow:none!important;
 height:34px!important; padding:0!important;
 font-family:"Libre Caslon Text",Georgia,serif!important;
 font-size:16px!important; color:#1C1C1E!important;
}
body.error404 .search-field::placeholder{
 font-family:"Jost",futura-pt,sans-serif!important;
 font-size:11px!important; letter-spacing:1.6px!important;
 text-transform:uppercase!important; color:#6E6E73!important; opacity:1!important;
}
body.error404 .search-form:focus-within{ border-bottom-color:#1E2A8C!important; }
body.error404 .search-submit{
 background:transparent!important; border:0!important; box-shadow:none!important;
 padding:0 0 0 10px!important; min-height:0!important;
}
body.error404 .search-submit *{ color:#1E2A8C!important; fill:#1E2A8C!important; }

@media (max-width:781px){
 body.error404 h1.page-title{ font-size:30px!important; }
 body.error404 .ast-404-layout-1{ padding:44px 0 52px!important; }
}

/* ===== SH-REVIEW-LAYER-END ===== */


/* ==============================================================
   PASS 32 — 404 recirculation row
   Markup is printed by the Southern Home Design Calendar plugin
   on astra_primary_content_bottom (shdc_404_recirculation), because
   this Elementor Pro build has no error-404 template type.
   ============================================================== */
body.error404 .sh-404-more{
	max-width:820px;
	margin:16px auto 0;
	padding:0 20px 8px;
	text-align:center;
}
body.error404 .sh-404-more__eyebrow{
	font-family:"Jost",sans-serif;
	font-size:11px;
	font-weight:500;
	letter-spacing:.16em;
	text-transform:uppercase;
	color:#6E6E73;
	margin:0 0 16px;
}
body.error404 .sh-404-more__list{
	list-style:none;
	margin:0;
	padding:0;
	display:flex;
	flex-wrap:wrap;
	justify-content:center;
	align-items:baseline;
	column-gap:40px;
	row-gap:12px;
}
body.error404 .sh-404-more__list li{
	margin:0;
	padding:0;
	display:flex;
	align-items:baseline;
	list-style:none;
}
body.error404 .sh-404-more__list a{
	font-family:"Libre Caslon Text",Georgia,serif!important;
	font-size:17px;
	line-height:1.5;
	color:#1C1C1E!important;
	text-decoration:none!important;
	border-bottom:1px solid transparent;
	padding-bottom:1px;
	transition:color .18s ease,border-color .18s ease;
}
body.error404 .sh-404-more__list a:hover,
body.error404 .sh-404-more__list a:focus{
	color:#1E2A8C!important;
	border-bottom-color:#1E2A8C;
}
body.error404 .sh-404-more__home{
	font-family:"Jost",sans-serif;
	font-size:13px;
	font-weight:400;
	letter-spacing:.02em;
	color:#6E6E73;
	margin:24px 0 0;
}
body.error404 .sh-404-more__home a{
	color:#6E6E73!important;
	text-decoration:none!important;
	border-bottom:1px solid rgba(110,110,115,.42);
}
body.error404 .sh-404-more__home a:hover,
body.error404 .sh-404-more__home a:focus{
	color:#1E2A8C!important;
	border-bottom-color:#1E2A8C;
}
@media (max-width:600px){
	body.error404 .sh-404-more__list{ column-gap:26px; }
	body.error404 .sh-404-more__list a{ font-size:16px; }
}


/* ==============================================================
   PASS 33 — slideshow fit (child theme component)
   The child theme sizes every slide to a fixed landscape box.
   Most of the converted Newspaper slideshows are portrait-led, so
   the viewport is given the aspect ratio of the tallest image in
   that particular slideshow. --sh-slide-ar is set per slideshow by
   shdc_slideshow_fit() in the Southern Home Design Calendar plugin;
   the fallback below is used if that script does not run.
   ============================================================== */
.sh-slideshow__viewport{
	width:100%!important;
	aspect-ratio:1 / var(--sh-slide-ar,.72)!important;
	max-height:78vh!important;
	min-height:300px!important;
	background:#F4F2EE!important;
	border-radius:0!important;
}
.sh-slideshow__track{
	height:100%!important;
	align-items:stretch!important;
}
.sh-slideshow .sh-slide{
	height:100%!important;
	min-height:0!important;
	padding:0!important;
}
.sh-slideshow .sh-slide img{
	width:100%!important;
	height:100%!important;
	object-fit:contain!important;
	margin:0!important;
}

/* The heading Newspaper repeated above every slide is the article title, so
   the slideshow title duplicates the H1 directly above it. Hide it. */
.sh-slideshow__title{
	display:none!important;
}

/* Empty <h3> shells left behind where a run was consumed. */
.entry-content h3:empty,
.elementor-widget-theme-post-content h3:empty{
	display:none!important;
}

@media (max-width:600px){
	.sh-slideshow__viewport{
		max-height:70vh!important;
	}
}


/* ==============================================================
   PASS 34 - archive card dek: always exactly two lines
   The clamp caps a long dek at two lines, but a short one still
   collapsed to one and shortened its card. Reserving the height in em
   means the lead card, whose dek is set smaller, reserves two of its
   own lines rather than two of the grid's.
   ============================================================== */
.sh-archive-grid .sh-card-dek{
	min-height:calc(2em * var(--sh-lh-body,1.6))!important;
}
.sh-archive-grid .sh-card-dek p:last-child{
	margin-bottom:0!important;
}


/* ==============================================================
   PASS 35 - legacy pages picked up by shdc_auto_page_body_class
   These sit on the Astra plain container, so they need the
   reading measure and vertical rhythm that the rebuilt pages
   were given by hand.
   ============================================================== */
.sh-page--auto .entry-content,
.sh-page--auto .entry-header{
	max-width:760px;
	margin-left:auto!important;
	margin-right:auto!important;
	padding-left:20px;
	padding-right:20px;
}
.sh-page--auto .entry-header{ padding-top:56px; }
.sh-page--auto .entry-content{ padding-bottom:72px; }
.sh-page--auto .entry-content img,
.sh-page--auto .entry-content iframe{ max-width:100%; height:auto; }
.sh-page--auto .entry-content p{ margin:0 0 1.3em; }
.sh-page--auto .entry-content > *{ max-width:100%; }


/* ==============================================================
   PASS 36 - shared page vocabulary, used by /contact/
   Neutral names on purpose: the equivalents on /advertising/ are
   still sh-adv-* and can migrate onto these after launch, rather
   than every page inventing its own prefix.
   ============================================================== */
.sh-page .sh-kicker{
	font-family:'Jost',sans-serif!important;
	font-size:11px!important;
	font-weight:500!important;
	letter-spacing:.18em!important;
	text-transform:uppercase!important;
	color:#6E6E73!important;
	text-align:center!important;
	margin:0 0 10px!important;
}
.sh-page .sh-kicker + h1{ text-align:center!important; }
.sh-page .sh-standfirst{
	font-family:'Libre Caslon Text',Georgia,serif!important;
	font-size:21px!important;
	line-height:1.65!important;
	color:#3A3A3E!important;
	text-align:center!important;
	max-width:620px!important;
	margin:0 auto 8px!important;
}
.sh-page .sh-figure{ margin:44px auto!important; }
.sh-page .sh-figure img{ width:100%!important; height:auto!important; display:block!important; }
/* PASS 36 wide rule superseded by PASS 38 */
.sh-page .sh-band{ margin:44px auto!important; padding:38px 32px 34px!important; text-align:center!important; }
.sh-page .sh-band--paper{ background:#F4F2EE!important; }
.sh-page .sh-band .sh-eyebrow{
	font-family:'Jost',sans-serif!important;
	font-size:11px!important;
	font-weight:500!important;
	letter-spacing:.16em!important;
	text-transform:uppercase!important;
	color:#6E6E73!important;
	margin:0 0 12px!important;
}
.sh-page .sh-band p{ margin-left:auto!important; margin-right:auto!important; max-width:520px!important; }
.sh-page .sh-band .wp-block-buttons{ justify-content:center!important; margin:22px 0 6px!important; }
.sh-page .sh-note{
	font-family:'Jost',sans-serif!important;
	font-size:14px!important;
	color:#6E6E73!important;
	margin:14px auto 0!important;
}
@media (max-width:600px){
	.sh-page .sh-standfirst{ font-size:19px!important; }
	.sh-page .sh-band{ padding:30px 20px 28px!important; }
}


/* PASS 37 - .sh-figure--wide breaks out of the measure */
.sh-page .sh-figure--wide{position:relative;left:50%;transform:translateX(-50%);width:min(1040px,calc(100vw - 3rem));max-width:none;margin-top:3rem;margin-bottom:3rem;}
.sh-page .sh-figure--wide img{width:100%;height:auto;}
.sh-page .sh-figure--wide figcaption{max-width:42rem;margin-left:auto;margin-right:auto;}


/* PASS 38 - .sh-figure--wide breaks out of the measure */
/* PASS 39 */ .sh-page .sh-figure--wide{ position:static!important; transform:none!important; width:min(1040px,calc(100vw - 3rem))!important; max-width:none!important; margin:48px calc(50% - min(520px, calc(50vw - 1.5rem)))!important; }
.sh-page .sh-figure--wide img{ width:100%!important; height:520px!important; object-fit:cover!important; object-position:center 38%!important; }
.sh-page .sh-figure--wide figcaption{ max-width:620px!important; margin:10px auto 0!important; }
@media (max-width:900px){ .sh-page .sh-figure--wide img{ height:min(58vw,380px)!important; } }
@media (max-width:600px){ .sh-page .sh-figure--wide{ margin:32px calc(50% - min(520px, calc(50vw - 1.5rem)))!important; } }


/* PASS 40 - contact page: split band, display-serif section titles, card row, centred form */
.sh-page .sh-band--split{ width:min(1040px,calc(100vw - 3rem))!important; max-width:none!important; margin:56px calc(50% - min(520px, calc(50vw - 1.5rem)))!important; padding:0!important; text-align:left!important; overflow:hidden!important; }
.sh-page .sh-band--split .wp-block-columns{ gap:0!important; margin:0!important; align-items:stretch!important; }
.sh-page .sh-band--split .wp-block-column{ padding:0!important; }
.sh-page .sh-split__media figure{ margin:0!important; height:100%!important; }
.sh-page .sh-split__media img{ width:100%!important; height:100%!important; min-height:420px!important; object-fit:cover!important; display:block!important; }
.sh-page .sh-split__body{ padding:46px 52px 44px!important; align-self:center!important; }
.sh-page .sh-band--split p{ margin-left:0!important; margin-right:0!important; max-width:34em!important; text-align:left!important; }
.sh-page .sh-band--split .wp-block-buttons{ justify-content:flex-start!important; margin:24px 0 4px!important; }
.sh-page .sh-band--split .sh-note{ margin:16px 0 0!important; }
.sh-page .sh-band__title{ font-family:"Libre Caslon Display",Georgia,serif!important; font-size:clamp(30px,3.4vw,42px)!important; font-weight:400!important; line-height:1.12!important; letter-spacing:0!important; text-transform:none!important; color:#1B1B1F!important; margin:0 0 14px!important; }
.sh-page .sh-section-title{ text-align:center!important; font-family:"Libre Caslon Display",Georgia,serif!important; font-size:clamp(26px,2.8vw,34px)!important; margin:56px 0 6px!important; }
.sh-page .sh-cards{ width:min(900px,calc(100vw - 3rem))!important; max-width:none!important; margin:34px calc(50% - min(450px, calc(50vw - 1.5rem))) 8px!important; gap:0!important; }
.sh-page .sh-cards .wp-block-column{ padding:4px 28px!important; border-left:1px solid #E3DFD8!important; }
.sh-page .sh-cards .wp-block-column:first-child{ border-left:0!important; padding-left:0!important; }
.sh-page .sh-cards .wp-block-column:last-child{ padding-right:0!important; }
.sh-page .sh-card__title{ font-family:Jost,sans-serif!important; font-size:12px!important; font-weight:500!important; letter-spacing:.16em!important; text-transform:uppercase!important; color:#6E6E73!important; margin:0 0 10px!important; }
.sh-page .sh-cards p{ font-family:"Libre Caslon Text",Georgia,serif!important; font-size:16px!important; line-height:1.6!important; color:#3A3A3E!important; margin:0 0 12px!important; }
.sh-page .sh-card__link{ margin:0!important; }
.sh-page .sh-card__link a{ font-family:Jost,sans-serif!important; font-size:11px!important; font-weight:500!important; letter-spacing:.14em!important; text-transform:uppercase!important; text-decoration:none!important; border-bottom:1px solid #C9C3B8!important; padding-bottom:2px!important; }
.sh-page .sh-formpanel{ width:min(1040px,calc(100vw - 3rem))!important; max-width:none!important; margin:60px calc(50% - min(520px, calc(50vw - 1.5rem))) 0!important; padding:54px 24px 46px!important; background:#FBFAF8!important; border-top:1px solid #E7E2DA!important; border-bottom:1px solid #E7E2DA!important; text-align:center!important; }
.sh-page .sh-formpanel .sh-band__title{ text-align:center!important; margin:0 0 10px!important; }
.sh-page .sh-formpanel .sh-note{ margin:0 auto 30px!important; max-width:44em!important; }
.sh-page .gform_wrapper{ max-width:600px!important; margin:0 auto!important; text-align:left!important; }
.sh-page .gform_wrapper .gform_footer{ justify-content:center!important; text-align:center!important; display:block!important; }
.sh-page .gform_wrapper .gform_button{ width:auto!important; min-width:280px!important; display:inline-block!important; float:none!important; }
.sh-page .gform_wrapper .ginput_recaptcha{ display:flex!important; justify-content:center!important; }
@media (max-width:781px){
  .sh-page .sh-band--split .wp-block-columns{ flex-wrap:wrap!important; }
  .sh-page .sh-split__media img{ min-height:0!important; height:280px!important; }
  .sh-page .sh-split__body{ padding:30px 22px 34px!important; }
  .sh-page .sh-cards .wp-block-column{ border-left:0!important; border-top:1px solid #E3DFD8!important; padding:20px 0 0!important; margin-top:20px!important; }
  .sh-page .sh-cards .wp-block-column:first-child{ border-top:0!important; padding-top:0!important; margin-top:0!important; }
  .sh-page .sh-formpanel{ padding:36px 18px 32px!important; }
}


/* PASS 41 - beat the .sh-page .entry-content h2/h3 size rules from PASS 35 */
.sh-page .entry-content .sh-band__title{ font-family:"Libre Caslon Display",Georgia,serif!important; font-size:clamp(32px,3.4vw,44px)!important; font-weight:400!important; line-height:1.12!important; letter-spacing:0!important; text-transform:none!important; color:#1B1B1F!important; margin:0 0 14px!important; }
.sh-page .entry-content .sh-section-title{ font-family:"Libre Caslon Display",Georgia,serif!important; font-size:clamp(28px,2.6vw,34px)!important; font-weight:400!important; letter-spacing:0!important; text-transform:none!important; text-align:center!important; margin:56px 0 4px!important; }
.sh-page .entry-content .sh-card__title{ font-family:Jost,sans-serif!important; font-size:12px!important; font-weight:500!important; line-height:1.4!important; letter-spacing:.16em!important; text-transform:uppercase!important; color:#6E6E73!important; margin:0 0 10px!important; }


/* PASS 42 - contact page polish: serif band copy, bottom-aligned card links, exact button centring */
.sh-page .entry-content .sh-band--split p:not(.sh-note){ font-family:"Libre Caslon Text",Georgia,serif!important; font-size:18px!important; line-height:1.65!important; color:#3A3A3E!important; }
.sh-page .sh-cards .wp-block-column{ display:flex!important; flex-direction:column!important; }
.sh-page .sh-card__link{ margin-top:auto!important; padding-top:6px!important; }
.sh-page .sh-cards{ margin-top:26px!important; }
.sh-page .gform_wrapper .gform_footer{ display:flex!important; justify-content:center!important; align-items:center!important; flex-wrap:wrap!important; }
.sh-page .gform_wrapper .gform_footer .gform_ajax_spinner{ position:absolute!important; }


/* PASS 43 - kill the Gravity Forms button margin and win the card-link margin */
.sh-page .gform_wrapper .gform_footer .gform_button{ margin:0!important; }
.sh-page .entry-content .sh-card__link{ margin:auto 0 0!important; padding-top:6px!important; }


/* PASS 44 - mobile menu toggle styling + split-band fallback if the sh-band--split class gets lost in the editor */
.elementor-menu-toggle{ background:transparent!important; border-radius:0!important; padding:2px 0!important; font-size:26px!important; color:#1B1B1F!important; }
.elementor-menu-toggle:hover,.elementor-menu-toggle:focus{ background:transparent!important; }
.elementor-nav-menu--dropdown{ box-shadow:0 14px 30px rgba(0,0,0,.10)!important; }
.sh-page .sh-band:has(> .wp-block-columns){ width:min(1040px,calc(100vw - 3rem))!important; max-width:none!important; margin:56px calc(50% - min(520px, calc(50vw - 1.5rem)))!important; padding:0!important; text-align:left!important; overflow:hidden!important; }
.sh-page .sh-band:has(> .wp-block-columns) > .wp-block-columns{ gap:0!important; margin:0!important; align-items:stretch!important; }
.sh-page .sh-band:has(> .wp-block-columns) p{ margin-left:0!important; margin-right:0!important; max-width:34em!important; text-align:left!important; }
.sh-page .sh-band:has(> .wp-block-columns) .wp-block-buttons{ justify-content:flex-start!important; margin:24px 0 4px!important; }


/* PASS 45 - the masthead logo is scaled 2.1x, which overflowed the viewport on phones; step it down. Plus kicker specificity. */
@media (max-width:700px){ header.elementor-location-header .elementor-widget-theme-site-logo img, header.elementor-location-header .elementor-element-45f54b2 img{ transform:scale(1.6)!important; } }
@media (max-width:420px){ header.elementor-location-header .elementor-widget-theme-site-logo img, header.elementor-location-header .elementor-element-45f54b2 img{ transform:scale(1.45)!important; } }
@media (max-width:360px){ header.elementor-location-header .elementor-widget-theme-site-logo img, header.elementor-location-header .elementor-element-45f54b2 img{ transform:scale(1.3)!important; } }
.sh-page .entry-content .sh-kicker{ font-family:Jost,sans-serif!important; font-size:11px!important; font-weight:500!important; line-height:1.4!important; letter-spacing:.18em!important; text-transform:uppercase!important; color:#6E6E73!important; text-align:center!important; margin:0 0 10px!important; }


/* ===== ACCESSIBILITY: contrast fixes for Elementor per-widget inline colors =====
 * These widgets carry a literal color value in Elementor's own generated inline
 * <style> block (set via the widget's color picker in the page content itself),
 * so they can't be fixed by changing --sh-pink / --sh-gray. Overriding here with
 * !important is the safe, reversible fix without touching Elementor page data.
 * Same target ratios as the --sh-pink (#C72869) / --sh-gray (#6E6E73) tokens above.
 */
.elementor-element-59af696c .elementor-heading-title,
.elementor-element-66b1325c .elementor-heading-title,
.elementor-element-7f78bf8 .elementor-heading-title,
.elementor-element-ab27914 .elementor-heading-title,
.elementor-element-055c857 .elementor-heading-title,
.elementor-element-27c8e0b .elementor-heading-title,
.elementor-element-9a6a7f3 .elementor-heading-title,
.elementor-element-53be8599 .elementor-heading-title,
.elementor-element-66954278 .elementor-heading-title,
.elementor-element-266155e9 .elementor-heading-title,
.elementor-element-2ccb2b2d .elementor-heading-title,
.elementor-element-3864d8c1 .elementor-heading-title,
.elementor-element-276b647c .elementor-heading-title,
.elementor-element-3054249 .elementor-heading-title
{color:#C72869!important;}

.elementor-element-9d0fcdc span,
.shh-ad-label
{color:#6E6E73!important;}

.elementor-element-80380c4 p
{color:rgba(255,255,255,.65)!important;}
