/* Milestone 9: update-safe public Directorist presentation layer. */
body.directorist-content-active main.site-main { background: var(--hp-color-white); color: var(--hp-color-ink); }

/* Owner request (2026-08-21), Section 16: friendly note inserted client-side
 * (directorist.js addLocationGuidance()) just before the Map field on the
 * Add Listing form -- explains why the field matters before a business
 * owner skips it, without editing the vendor template. */
.hp-location-guidance {
	display: flex;
	align-items: flex-start;
	gap: var(--hp-space-2);
	margin: 0 0 var(--hp-space-3);
	padding: var(--hp-space-3) var(--hp-space-4);
	border: 1px solid var(--hp-color-primary-100);
	border-radius: var(--hp-radius-md);
	background: var(--hp-color-primary-100);
	color: var(--hp-color-primary-700);
	font-size: var(--hp-text-sm);
	font-weight: 600;
	line-height: 1.4;
}
.hp-location-guidance::before {
	content: "";
	flex: 0 0 auto;
	width: 18px;
	height: 18px;
	margin-top: 1px;
	background-color: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 6-9 13-9 13s-9-7-9-13a9 9 0 0 1 18 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 6-9 13-9 13s-9-7-9-13a9 9 0 0 1 18 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E") center / contain no-repeat;
}
.hp-directory-empty__eyebrow { margin: 0 0 var(--hp-space-2); color: var(--hp-color-primary-700); font-size: var(--hp-text-sm); font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.hp-directory-empty__actions { display: flex; flex-wrap: wrap; gap: var(--hp-space-3); margin-top: var(--hp-space-6); }
/* Stage B V43 owner correction (2026-08-03): this rule and the more specific
 * .directorist-form-element rule further down both used `outline` with
 * different colours/offsets on the same field (the search input matches
 * both). `outline` does not follow border-radius in Safari/WebKit, so it
 * drew as a sharp-cornered rectangle poking out past the input's rounded
 * corners -- visible as a "double bubble" on iPhone. `box-shadow` always
 * follows border-radius, so it replaces `outline` as the actual visible
 * ring; a transparent outline is kept so forced-colors/high-contrast mode
 * still gets a real ring from the browser. */
.hp-directory-empty a:focus-visible,
body.directorist-content-active .directorist-btn:focus-visible,
body.directorist-content-active button:focus-visible,
body.directorist-content-active input:focus-visible,
body.directorist-content-active select:focus-visible,
body.directorist-content-active a:focus-visible {
	outline: 3px solid transparent !important;
	outline-offset: 3px !important;
	box-shadow: 0 0 0 3px var(--hp-color-primary-500) !important;
}
body.directorist-content-active .directorist-archive-contents,
body.directorist-content-active .directorist-archive-items,
body.directorist-content-active .directorist-header-bar,
body.directorist-content-active .directorist-search-contents { color: var(--hp-color-ink); }
body.directorist-content-active .directorist-btn,
body.directorist-content-active button:not(.cmplz-btn),
body.directorist-content-active .directorist-form-element,
body.directorist-content-active select,
body.directorist-content-active input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]) { min-height: 44px; }
body.directorist-content-active .directorist-pagination .page-numbers,
body.directorist-content-active .directorist-pagination a,
body.directorist-content-active .directorist-viewas-dropdown__links a { display: inline-flex; min-width: 44px; min-height: 44px; align-items: center; justify-content: center; }
.hp-directory-empty { width: min(100%, 42rem); margin: clamp(1.5rem, 5vw, 4rem) auto; padding: clamp(1.5rem, 5vw, 3rem); border: 1px solid var(--hp-color-border); border-radius: var(--hp-radius-xl); background: var(--hp-color-white); box-shadow: var(--hp-shadow-card); color: var(--hp-color-ink); text-align: left; }
.hp-directory-empty h2 { margin: 0 0 var(--hp-space-3); color: var(--hp-color-ink); font-size: clamp(1.5rem, 5vw, 2.25rem); line-height: 1.15; }
.hp-directory-empty > p:not(.hp-directory-empty__eyebrow) { margin: 0; color: var(--hp-color-body); line-height: 1.65; }
@media (max-width: 767px) {
	body.directorist-content-active main.site-main,
	body.directorist-content-active .directorist-archive-contents,
	body.directorist-content-active .directorist-archive-items,
	body.directorist-content-active .directorist-header-bar,
	body.directorist-content-active .directorist-search-contents { background: var(--hp-color-white) !important; }
	.hp-directory-empty__actions { flex-direction: column; }
	.hp-directory-empty__actions a { width: 100%; justify-content: center; }
	.hp-directory-empty { width: calc(100% - 2rem); }
}

/* Milestone 10: restrained business-passport profile hierarchy. */
body.single-at_biz_dir .directorist-single {
	width: min(100%, 78rem) !important;
	max-width: 78rem !important;
	padding: clamp(1.25rem, 4vw, 3rem) var(--hp-space-4) clamp(3rem, 8vw, 6rem) !important;
}

/*
 * Wave 6 owner correction (2026-08-19): "giant empty title/header area"
 * confirmed live via real getBoundingClientRect measurement on MC Sports
 * Therapy & Biomechanics -- ~131px of dead space between the nav and the
 * Back/Share row, then another ~70px before the H1 itself, before any
 * real business content appears. Root cause was NOT this file's own
 * padding (already restyled, not oversized) but two Directorist DEFAULT
 * spacing values this file had never touched: `.directorist-single-
 * contents-area`'s own 50px margin-top, and this h1 rule's own 24px
 * (--hp-space-6) extra top margin stacked on top of the header's own
 * padding. Reduced both below; header padding itself also tightened
 * slightly (was already roughly the same real magnitude as Directorist's
 * own un-overridden default, not actually smaller).
 */
body.single-at_biz_dir .directorist-single-contents-area {
	margin-top: var(--hp-space-4) !important;
}

body.single-at_biz_dir .directorist-single-listing-header {
	margin-bottom: var(--hp-space-6);
	padding: clamp(0.75rem, 2.5vw, 1.5rem) !important;
	border: 1px solid var(--hp-color-primary-100);
	border-radius: var(--hp-radius-xl);
	background: linear-gradient(145deg, var(--hp-color-white), var(--hp-color-primary-100)) !important;
	box-shadow: var(--hp-shadow-card);
}

body.single-at_biz_dir .directorist-single-listing-header h1,
body.single-at_biz_dir .directorist-listing-title {
	max-width: 52rem;
	margin-block: var(--hp-space-3) var(--hp-space-4) !important;
	font-size: clamp(1.75rem, 5vw, 3.5rem) !important;
	line-height: 1.08 !important;
}

/* Owner correction: "Go Back" was wrapping into two lines ("Go" / "Back")
   -- Directorist's own button rule leaves white-space at its default
   (normal), and the button's own width (built from its content) is just
   narrow enough to wrap two words at some viewport widths. */
body.single-at_biz_dir .directorist-single-listing-top .directorist-btn {
	white-space: nowrap;
}

body.single-at_biz_dir .directorist-single-listing-top .directorist-btn,
body.single-at_biz_dir .directorist-single-listing-action,
body.single-at_biz_dir .directorist-single-listing-header .directorist-btn,
body.single-at_biz_dir .directorist-single-info a,
body.single-at_biz_dir .directorist-single-map__direction a {
	min-height: 44px !important;
	min-width: 44px !important;
	align-items: center;
	border-radius: var(--hp-radius-md) !important;
}

body.single-at_biz_dir .directorist-listing-category a {
	min-height: 44px;
	font-weight: 800 !important;
}

/* Final owner acceptance (2026-08-21): the category/Popular pills are useful,
   but Directorist's full-width white wrapper made them look like a form field.
   Keep the real pills and their layout; remove only that redundant visual
   container. This avoids the fragile intrinsic-width changes previously
   investigated and leaves every interactive target untouched. */
body.single-at_biz_dir .directorist-listing-single-quickinfo {
	padding: 0 !important;
	border: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
}

body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-action:not(.directorist-btn-light) {
	background: var(--hp-color-primary-500) !important;
	color: var(--hp-color-white) !important;
}

/* Wave 6 owner polish (2026-08-20), "Improve: CTA visibility": confirmed
   live via computed styles that the Call/Email buttons (a genuinely
   different class, .directorist-btn-default, from the rule just above,
   which only covers .directorist-single-listing-action -- the Back/Share
   utility row) were still Directorist's own bland white/grey default while
   the far-less-important Back/Share buttons already carried the branded
   purple treatment. Additive styling only, no structural/DOM change. */
body.single-at_biz_dir .directorist-listing-actions .directorist-btn.directorist-btn-default {
	background: var(--hp-color-primary-500) !important;
	border-color: var(--hp-color-primary-500) !important;
	color: var(--hp-color-white) !important;
}
body.single-at_biz_dir .directorist-listing-actions .directorist-btn.directorist-btn-default:hover,
body.single-at_biz_dir .directorist-listing-actions .directorist-btn.directorist-btn-default:focus-visible {
	background: var(--hp-color-primary-600) !important;
	border-color: var(--hp-color-primary-600) !important;
}

/* Wave 6 owner polish (2026-08-20), "Reduce: repeated information":
   confirmed live on two real listings (Swan Gallery and Framing, MC Sports
   Therapy & Biomechanics) that Phone/Email repeat a second time in the
   lower "Contact" info card, identical in value to the CTA buttons already
   shown above -- confirmed via a direct site-database read that this site
   has exactly one directory type (Business) and its CTA action-placeholder
   config always includes phone+email, so the top buttons are always
   present whenever this second copy would otherwise show a value; no
   information is lost, only the duplicate row is hidden. Website and
   Social Info are NOT duplicated anywhere else and are left untouched. */
body.single-at_biz_dir .directorist-card-general-section .directorist-single-info-phone,
body.single-at_biz_dir .directorist-card-general-section .directorist-single-info-email {
	display: none;
}

/* Owner fix (2026-08-18): confirmed live the real cause of the wasted hero
 * space -- Directorist's own Swiper gallery renders a fixed ~740x580
 * slide box regardless of the actual image's real proportions, so a
 * roughly-square business logo (the common case for this project's real
 * listing mix -- see the archive-card comment above) sits with large
 * empty margins inside a landscape-shaped box. Capping the slide/wrapper
 * height (CSS only, Swiper's own touch/swipe JS operates on width, not a
 * hard-coded height) tightens this without touching Directorist's own
 * gallery markup/JS -- not an unrelated redesign, the same
 * !important-override pattern already used throughout this file. */
body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider,
body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider > .swiper-wrapper,
body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider > .swiper-wrapper > .swiper-slide {
	max-height: 24rem !important;
}

/*
 * Owner-caught bug (2026-08-21): this rule set object-fit:contain
 * unconditionally for every hero image, with no aspect-ratio gating at
 * all -- confirmed live (specificity math + real fetched markup) that
 * this silently wins over Directorist's own native
 * `.swiper-slide img { object-fit: cover }` rule, and over this site's own
 * real Directorist Builder setting (confirmed live as "background-cover"
 * on the actual slider-wrap class). Real, non-square business photography
 * was very likely rendering needlessly letterboxed on businesses' own
 * detail pages -- the opposite problem from the archive grid's cropping,
 * but the same root cause (an unconditional rule with no logo-vs-photo
 * distinction). Default now matches the other three surfaces (cover for
 * real photography); assets/css/directory-media.css adds the matching
 * contain-for-genuine-logos override, driven by the same aspect-ratio
 * detection already proven on the archive grid.
 */
body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider > .swiper-wrapper > .swiper-slide > img {
	max-height: 24rem;
	object-fit: cover;
	border-radius: var(--hp-radius-xl);
	background: var(--hp-color-primary-100);
}

/*
 * Owner directive (2026-08-21), Business Detail Page upgrade: a genuine
 * two-column premium storefront layout -- name/actions/details on the
 * left, one large gallery on the right -- built entirely with CSS grid on
 * top of Directorist's own existing header markup (no PHP template
 * override, no change to what data renders or how). Confirmed live on two
 * real listings (a data-rich one and Nefel Cafe, the owner's own
 * limited-data example) that .directorist-single-listing-header's direct
 * children are always some subset of: .directorist-single-listing-top
 * (Back/Share), the H1 title, .hp-community-box (Support this business),
 * .directorist-listing-details (category/badges/phone/email -- already
 * hidden entirely by Directorist's own action-section.php when empty, not
 * something this rule needs to handle) and
 * .directorist-single-listing-slider-wrap (the gallery, or the category-
 * artwork fallback when there's no real photo -- same wrapper class
 * either way, confirmed live). Targeting "everything except the slider"
 * rather than naming each part individually means this keeps working
 * regardless of which optional parts a given listing has.
 *
 * Desktop-only (1000px+, matching this theme's existing 2-column
 * breakpoint in homepage.css/compact-filters.css) -- narrower than that,
 * this reverts to the original single-column stack untouched, avoiding an
 * image awkwardly stretched to match a long text column on a phone.
 */
@media (min-width: 1000px) {
	body.single-at_biz_dir .directorist-single-listing-header.hp-storefront-enhanced {
		display: grid;
		grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
		column-gap: var(--hp-space-6);
		align-items: start;
	}
	body.single-at_biz_dir .directorist-single-listing-header .hp-storefront-summary {
		grid-column: 1;
		min-width: 0;
	}
	body.single-at_biz_dir .directorist-single-listing-header.hp-storefront-enhanced > .directorist-single-listing-slider-wrap {
		grid-column: 2;
		grid-row: 1;
		align-self: start;
		position: sticky;
		top: var(--hp-space-4);
		height: auto !important;
		min-height: 0 !important;
	}
	/* The 24rem cap above suits the single-column mobile stack; the two-
	   column layout gives the gallery more room to feel like the "large
	   image area" the owner asked for, still a fixed/predictable shape
	   rather than one that chases the text column's own variable height. */
	body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider,
	body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider > .swiper-wrapper,
	body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider > .swiper-wrapper > .swiper-slide {
		max-height: none !important;
		height: 30rem !important;
	}
	body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider {
		width: 100% !important;
	}
	body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-slider > .swiper-wrapper > .swiper-slide > img {
		height: 30rem;
		max-height: none;
	}
}

body.single-at_biz_dir .directorist-card {
	margin-top: var(--hp-space-6) !important;
	overflow: hidden;
	border: 1px solid var(--hp-color-border) !important;
	border-radius: var(--hp-radius-xl) !important;
	background: var(--hp-color-white) !important;
	box-shadow: var(--hp-shadow-card) !important;
}

body.single-at_biz_dir .directorist-card__header {
	padding: var(--hp-space-4) var(--hp-space-6) !important;
	border-bottom: 1px solid var(--hp-color-border) !important;
	background: var(--hp-color-primary-100) !important;
}

body.single-at_biz_dir .directorist-card__header h2,
body.single-at_biz_dir .directorist-card__header h3 {
	color: var(--hp-color-ink) !important;
	font-size: var(--hp-text-xl) !important;
}

body.single-at_biz_dir .directorist-card__body {
	padding: clamp(1.25rem, 4vw, 2rem) !important;
	font-size: var(--hp-text-base);
	line-height: 1.75;
}

body.single-at_biz_dir .directorist-single-info {
	min-height: 44px;
	align-items: flex-start;
	padding-block: var(--hp-space-2);
}

/*
 * Owner-flagged (2026-08-20): the Contact section's Phone/Email/Social Info
 * rows read as raw, unstyled Directorist output. Traced the real cause
 * rather than guessing (assets/css/all-listings.css, Directorist's own
 * default): the colon is a real `::before` pseudo-element pinned to the
 * RIGHT edge of a fixed-width label box (70-140px) regardless of the
 * label's own text length, so "Phone" and "Social Info" end up with
 * visibly different gaps before their colon. Right-aligning the label text
 * within that same box makes every label hug its own colon consistently,
 * without touching Directorist's colon logic at all. Separately: phone and
 * email are already real <a href="tel:">/<a href="mailto:"> links in the
 * vendor markup (confirmed by reading phone.php/email.php directly) -- they
 * were never actually plain text, just coloured to match ordinary body
 * copy with no link affordance, so this is a colour/underline fix only, no
 * template change needed.
 */
body.single-at_biz_dir .directorist-single-info__label__text {
	text-align: right;
}
body.single-at_biz_dir .directorist-single-info__value a:not(.directorist-btn) {
	color: var(--hp-color-primary-700) !important;
	font-weight: 700 !important;
	text-decoration: underline !important;
	text-underline-offset: 2px;
}
body.single-at_biz_dir .directorist-single-info__value a:not(.directorist-btn):hover {
	color: var(--hp-color-primary-500) !important;
}

.hp-local-map-notice {
	display: flex;
	min-height: 16rem;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: var(--hp-space-3);
	padding: var(--hp-space-6);
	background: var(--hp-color-primary-100);
	color: var(--hp-color-body);
	text-align: center;
}

.hp-local-map-notice strong { color: var(--hp-color-ink); font-size: var(--hp-text-lg); }

.hp-business-claim {
	display: grid;
	width: min(calc(100% - 2rem), 75rem);
	grid-template-columns: minmax(0, 1.25fr) minmax(16rem, .75fr);
	gap: var(--hp-space-6);
	align-items: center;
	margin: var(--hp-space-8) auto var(--hp-space-5);
	padding: clamp(1.5rem, 4vw, 2.5rem);
	border: 1px solid var(--hp-color-primary-200);
	border-radius: var(--hp-radius-xl);
	background: linear-gradient(135deg, var(--hp-color-primary-100), var(--hp-color-white));
	box-shadow: var(--hp-shadow-sm);
}
.hp-business-claim__eyebrow { margin: 0 0 var(--hp-space-2); color: var(--hp-color-primary-700); font-size: var(--hp-text-sm); font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.hp-business-claim h2 { margin: 0 0 var(--hp-space-3); color: var(--hp-color-ink); font-size: clamp(1.5rem, 4vw, 2.25rem); }
.hp-business-claim__copy > p:last-child { margin: 0; color: var(--hp-color-body); line-height: 1.65; }
.hp-business-claim__action { display: flex; flex-direction: column; gap: var(--hp-space-3); align-items: stretch; text-align: center; }
.hp-business-claim__register { display: inline-flex; min-height: 44px; align-items: center; justify-content: center; color: var(--hp-color-primary-700); font-weight: 800; }
.hp-business-claim .directorist-claim-listing-wrapper,
.hp-business-claim .directorist-card { margin: 0 !important; }
/* Owner-caught bug (2026-08-22): .directorist-content-active .directorist-card
   (the vendor's own generic card component) still painted its full white
   background/border/border-radius/box-shadow here -- only margin had been
   reset -- rendering a second, redundant white card behind the claim button,
   nested inside this section's own lavender-gradient card. Neutralised the
   same way .directorist-card__body already was below. */
.hp-business-claim .directorist-card { padding: 0 !important; background: transparent !important; border: none !important; border-radius: 0 !important; box-shadow: none !important; }
.hp-business-claim .directorist-card__header { display: none !important; }
.hp-business-claim .directorist-card__body { padding: 0 !important; background: transparent !important; }
.hp-business-claim .directorist-claim-listing__title,
.hp-business-claim .directorist-claim-listing__description { display: none; }
.hp-business-claim .directorist-btn-modal-js { display: inline-flex !important; width: 100%; min-height: 48px; align-items: center; justify-content: center; border-radius: var(--hp-radius-pill) !important; background: var(--hp-color-primary-600) !important; color: var(--hp-color-white) !important; font-weight: 800 !important; }

/* The existing Partner Hub support action now belongs beside ownership, not
   in the business-first hero. Present it as one compact lavender action strip
   rather than another large white content card. */
body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower {
	display: grid;
	width: min(calc(100% - 2rem), 75rem);
	grid-template-columns: minmax(0, 1fr) auto;
	gap: var(--hp-space-5);
	align-items: center;
	margin: var(--hp-space-8) auto var(--hp-space-4);
	padding: clamp(1.1rem, 3vw, 1.6rem);
	border-color: var(--hp-color-primary-200);
	background: linear-gradient(135deg, var(--hp-color-primary-100), var(--hp-color-white));
	box-shadow: none;
}
body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower .hp-community-box__copy {
	display: grid;
	gap: .35rem;
}
body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower .hp-community-box__copy h2,
body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower .hp-community-box__copy p {
	margin: 0;
}
body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower > :where(form, a) {
	margin: 0;
}
body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower > :where(form, a) .hp-btn,
body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower > a.hp-btn {
	min-width: 10.5rem;
	min-height: 46px;
}
body.single-at_biz_dir .hp-storefront-support-lower + .hp-business-claim {
	margin-top: 0;
}

@media (max-width: 767px) {
	body.single-at_biz_dir .hp-community-box.hp-storefront-support-lower {
		grid-template-columns: 1fr;
	}
}

.hp-profile-discovery {
	display: grid;
	width: min(calc(100% - 2rem), 75rem);
	grid-template-columns: minmax(0, 1.3fr) minmax(18rem, .7fr);
	gap: var(--hp-space-8);
	align-items: center;
	margin: 0 auto clamp(3rem, 7vw, 6rem);
	padding: clamp(1.5rem, 5vw, 3rem);
	border-radius: var(--hp-radius-xl);
	background: var(--hp-color-primary-900);
	color: var(--hp-color-white);
}

.hp-profile-discovery__eyebrow { margin: 0 0 var(--hp-space-2); color: var(--hp-color-primary-200); font-size: var(--hp-text-sm); font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.hp-profile-discovery h2 { margin: 0 0 var(--hp-space-3); color: var(--hp-color-white); font-size: clamp(1.5rem, 4vw, 2.5rem); }
.hp-profile-discovery p:not(.hp-profile-discovery__eyebrow) { margin: 0; color: var(--hp-color-white); line-height: 1.65; }
.hp-profile-discovery__links { display: flex; flex-direction: column; gap: var(--hp-space-3); }
.hp-profile-discovery__links .hp-c-btn { width: 100%; }
.hp-profile-discovery__correction { display: inline-flex; min-height: 44px; align-items: center; justify-content: center; color: var(--hp-color-white); font-weight: 700; }

.hp-trust-badges {
	display: grid;
	gap: var(--hp-space-4);
	margin: var(--hp-space-6) auto;
	max-width: var(--hp-content-wide, 1180px);
	padding-inline: var(--hp-space-4);
}

.hp-trust-badge {
	background: var(--hp-color-white);
	border: 1px solid var(--hp-color-border, #d8dee8);
	border-left: 4px solid var(--hp-color-primary-600, #3154a5);
	border-radius: var(--hp-radius-lg);
	box-shadow: var(--hp-shadow-sm);
	overflow-wrap: anywhere;
	padding: var(--hp-space-5);
}

.hp-trust-badge .hp-status-badge {
	background: var(--hp-color-primary-050, #eef3ff);
	border-radius: 999px;
	color: var(--hp-color-primary-800, #203c7a);
	display: inline-block;
	padding: .35rem .75rem;
}

@media (max-width: 767px) {
	/* Bottom clearance comes from the shared --hp-tabbar-clearance body rule (navigation.css); the old 6rem here stacked a second, phantom band on top of it. */
	body.single-at_biz_dir .directorist-single { padding-inline: var(--hp-space-3) !important; padding-bottom: var(--hp-space-4) !important; }
	body.single-at_biz_dir .directorist-single-listing-header { padding: var(--hp-space-4) !important; }
	body.single-at_biz_dir .directorist-card__header { padding-inline: var(--hp-space-4) !important; }
	.hp-profile-discovery { grid-template-columns: 1fr; gap: var(--hp-space-6); margin-bottom: var(--hp-space-4); }
	.hp-business-claim { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
	body.directorist-content-active *, body.directorist-content-active *::before, body.directorist-content-active *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; }
}

/* Search-led local index direction. */
body.directorist-content-active .directorist-archive-contents {
	width: min(100%, 78rem);
	margin-inline: auto;
	padding: 0 var(--hp-space-4) clamp(3rem, 7vw, 6rem);
}

body.directorist-content-active .elementor-widget-directorist_search_listing,
body.directorist-content-active .directorist-search-contents {
	position: relative;
	z-index: 3;
	pointer-events: none;
}

/* Directorist's search wrapper is taller than its visible form and overlaps
 * the archive toolbar below. Keep the wrapper available as the dropdown
 * stacking context, but only let the actual form receive pointer input so
 * the visible Grid/List/Map controls are never covered by empty space. */
body.directorist-content-active .directorist-search-form {
	pointer-events: auto;
}

body.directorist-content-active .directorist-search-field,
body.directorist-content-active .directorist-form-group {
	margin: 0 !important;
}

body.directorist-content-active .directorist-search-field,
body.directorist-content-active .directorist-form-element,
body.directorist-content-active .select2-selection {
	border-color: var(--hp-color-border) !important;
	border-radius: var(--hp-radius-md) !important;
	background: var(--hp-color-white) !important;
}

/* Stage B V43: the keyword field had no explicit sizing at all, so
 * Directorist's own tight default padding read as cramped/clipped text --
 * the one concrete gap the owner's screenshot showed compared to every
 * other search/filter surface on the site. Extend the existing override
 * block above rather than building a second search component. */
body.directorist-content-active .directorist-form-element,
body.directorist-content-active .select2-selection {
	min-height: 48px !important;
	padding: 12px 16px !important;
	font-size: 0.95rem !important;
	box-sizing: border-box !important;
}

body.directorist-content-active .select2-selection__rendered {
	line-height: 24px !important;
	padding-left: 0 !important;
}

body.directorist-content-active .select2-selection__arrow {
	height: 46px !important;
}

body.directorist-content-active .directorist-search-field__input::placeholder {
	color: var(--hp-color-body) !important;
	opacity: 1;
}

/* Owner correction: Directorist never declares an explicit width/height for this
 * clear (x) control, so it renders sized to its ~16px icon glyph with no real hit
 * area around it -- taps that visibly land on the icon miss the actual clickable
 * box and fall through to the input underneath instead. A negative-inset ::after
 * enlarges the real clickable area to a touch-safe size without moving or resizing
 * the visible icon; the click/keyboard wiring itself lives in directorist.js. */
body.directorist-content-active .directorist-search-field__btn--clear {
	cursor: pointer;
}

body.directorist-content-active .directorist-search-field__btn--clear::after {
	content: "";
	position: absolute;
	inset: -14px;
}

/* Stage B V43 owner correction (2026-08-03): Directorist ships this label as
 * a floating-placeholder that sits absolutely positioned on top of the
 * input (default: centred over it) and is meant to animate out of the way
 * once its own JS toggles .input-is-focused/.input-has-value on the
 * wrapper. Giving the label a real for/id pairing (inc/js/directorist.js)
 * did not touch that JS at all, but on staging the label stopped clearing
 * out of the way on focus, leaving its text visibly overlaid on the field
 * -- confirmed by the owner on iPhone via before/after screenshots. Force
 * it fully off-screen in every state instead of trying to fix Directorist's
 * own animation: it stays in the DOM with its real for/id and accessible
 * name for assistive tech, but is never sighted-visible, focused or not.
 * The class is repeated to out-specify Directorist's own
 * `.input-is-focused .directorist-search-field__label` rule (4 classes
 * deep) with room to spare, since both rules use !important. */
body.directorist-content-active
	.directorist-search-field__label.directorist-search-field__label.directorist-search-field__label.directorist-search-field__label.directorist-search-field__label {
	position: absolute !important;
	top: auto !important;
	left: auto !important;
	width: 1px !important;
	height: 1px !important;
	margin: -1px !important;
	padding: 0 !important;
	overflow: hidden !important;
	clip: rect(0, 0, 0, 0) !important;
	clip-path: inset(50%) !important;
	white-space: nowrap !important;
	border: 0 !important;
	font-size: 0 !important;
	opacity: 0 !important;
}

/* .directorist-form-element/.directorist-btn-search/.directorist-btn-submit
 * are all real <input>/<button> tags already covered by the generic
 * input/button/select/a focus-visible rule above -- this used to also give
 * them a second, conflicting outline (see the note above); now it only adds
 * the border-colour accent. .select2-selection is a plain <div> standing in
 * for a real form control, so it needs its own ring -- given the same
 * box-shadow treatment for the same rounded-corner reason. */
body.directorist-content-active :where(.directorist-form-element, .directorist-btn-search, .directorist-btn-submit):focus-visible {
	border-color: var(--hp-color-primary-500) !important;
}

body.directorist-content-active .select2-container--focus .select2-selection {
	outline: 3px solid transparent;
	outline-offset: 2px;
	box-shadow: 0 0 0 3px var(--hp-color-primary-400) !important;
	border-color: var(--hp-color-primary-500) !important;
}

body.directorist-content-active .directorist-btn-search,
body.directorist-content-active .directorist-btn-submit {
	min-height: 48px !important;
	padding: 12px 20px !important;
	border-radius: var(--hp-radius-md) !important;
	background: var(--hp-color-primary-500) !important;
	box-shadow: var(--hp-shadow-card) !important;
	font-weight: 800 !important;
}

/* HP-SOL-011: retained Directorist /search-home/ route. It remains a real
 * utility route, but now follows the compact site masthead and search-surface
 * language instead of exposing a generic "Search Home" title and black copy. */
.hp-search-home-page main.site-main {
	background: var(--hp-color-canvas, #f8f5fb) !important;
}

.hp-search-home-shell {
	width: min(100% - 2rem, 78rem);
	margin-inline: auto;
	padding-block: clamp(1.5rem, 4vw, 3.5rem);
}

.hp-search-home-shell .directorist-search-top {
	display: none;
}

.hp-search-home-shell .directorist-search-contents {
	margin-top: clamp(1rem, 2vw, 1.5rem);
}

.hp-search-home-shell .directorist-search-form__box {
	border: 1px solid var(--hp-color-border);
	border-radius: var(--hp-radius-xl);
	box-shadow: var(--hp-shadow-card);
}

.hp-search-home-shell .directorist-filter-btn {
	border: 1px solid var(--hp-color-primary-300) !important;
	background: var(--hp-color-primary-100) !important;
	color: var(--hp-color-primary-800) !important;
}

html.hp-experience-dark .hp-search-home-page main.site-main {
	background: #100b17 !important;
}

html.hp-experience-dark .hp-search-home-shell .directorist-search-form__box,
html.hp-experience-dark .hp-search-home-shell .directorist-search-modal__contents,
html.hp-experience-dark .hp-search-home-shell .directorist-search-modal__contents__header,
html.hp-experience-dark .hp-search-home-shell .directorist-search-modal__contents__footer {
	background: #21172d !important;
	border-color: #49375a !important;
	color: #eee6f7 !important;
}

html.hp-experience-dark .hp-search-home-shell .directorist-form-element,
html.hp-experience-dark .hp-search-home-shell .select2-selection {
	background: #180f22 !important;
	border-color: #5b426f !important;
	color: #f5eefb !important;
}

html.hp-experience-dark .hp-search-home-shell .select2-selection__rendered,
html.hp-experience-dark .hp-search-home-shell .select2-selection__placeholder,
html.hp-experience-dark .hp-search-home-shell .directorist-search-modal__contents__title {
	color: #f5eefb !important;
}

html.hp-experience-dark .hp-search-home-shell .directorist-filter-btn {
	border-color: #694d80 !important;
	background: #342243 !important;
	color: #ffffff !important;
}

html.hp-experience-dark .hp-search-home-shell .directorist-search-modal__contents__btn--close {
	background: #342243 !important;
	color: #ffffff !important;
}

@media (max-width: 767px) {
	.hp-search-home-shell {
		width: min(100% - 1rem, 78rem);
		padding-block: 1rem 2rem;
	}
}

/* Final Wave 6 owner acceptance: replace Directorist's empty advanced-filter
 * rail with one useful, existing-route search row and restore a three-card
 * desktop grid. The child-theme sidebar template still calls Directorist's
 * own archive renderer, header, views and pagination. */
body.directorist-content-active .hp-directory-archive-full .listing-with-sidebar__contents,
body.directorist-content-active .hp-directory-archive-full .listing-with-sidebar__listing {
	display: block;
	width: 100%;
	max-width: none;
}

body.directorist-content-active .hp-directory-search-shell {
	margin: 0 0 var(--hp-space-4);
	padding: clamp(.75rem, 1.5vw, 1rem);
	border: 1px solid var(--hp-color-border);
	border-radius: var(--hp-radius-xl);
	background: linear-gradient(135deg, var(--hp-color-white), var(--hp-color-primary-100));
	box-shadow: var(--hp-shadow-card);
}

body.directorist-content-active .hp-directory-widget-search {
	padding: clamp(.8rem, 2vw, 1.6rem) 0 !important;
}

/* The legacy Directory Elementor canvas pulls the listing widget upward by
 * 175px on desktop (20px on phone) to overlap its old shallow search bar.
 * This search is deliberately richer, so restore ordinary document flow. */
body.directorist-content-active .elementor-widget-directorist_all_listing > .elementor-widget-container {
	margin-top: 0 !important;
}

.hp-directory-quick-search {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: .65rem;
	margin: 0;
}

.hp-directory-quick-search__field {
	display: grid;
	gap: .3rem;
	min-width: 0;
}

.hp-directory-quick-search__field label {
	color: var(--hp-color-ink);
	font-size: .74rem;
	font-weight: 750;
	letter-spacing: .035em;
	text-transform: uppercase;
}

.hp-directory-quick-search :where(input, select) {
	box-sizing: border-box;
	width: 100%;
	min-height: 44px;
	margin: 0;
	padding: .55rem .75rem;
	border: 1px solid var(--hp-color-border);
	border-radius: var(--hp-radius-md);
	background: var(--hp-color-white);
	color: var(--hp-color-ink);
	font: inherit;
}

.hp-directory-quick-search :where(input, select):focus-visible {
	border-color: var(--hp-color-primary-500);
	outline: 3px solid var(--hp-color-primary-200);
	outline-offset: 2px;
}

.hp-directory-quick-search__actions {
	display: flex;
	align-items: center;
	gap: .75rem;
}

.hp-directory-quick-search .hp-compact-filters__search {
	min-height: 44px;
	white-space: nowrap;
}

.hp-directory-quick-search .hp-compact-filters__search.hp-c-btn--primary {
	border-color: var(--hp-color-primary-500) !important;
	background: var(--hp-color-primary-500) !important;
	color: var(--hp-color-white) !important;
}

.hp-directory-quick-search .hp-compact-filters__search.hp-c-btn--primary:hover,
.hp-directory-quick-search .hp-compact-filters__search.hp-c-btn--primary:focus-visible {
	border-color: var(--hp-color-primary-600) !important;
	background: var(--hp-color-primary-600) !important;
}

.hp-directory-quick-search .hp-compact-filters__panel {
	grid-template-columns: repeat(2, minmax(0, 1fr)) auto;
	align-items: end;
}

.hp-directory-quick-search__status {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}

.hp-image-guidance {
	margin: 0 0 var(--hp-space-3);
	padding: .75rem .9rem;
	border-left: 3px solid var(--hp-color-primary-500);
	border-radius: 0 var(--hp-radius-md) var(--hp-radius-md) 0;
	background: var(--hp-color-primary-100);
	color: var(--hp-color-body);
	font-size: .9rem;
	line-height: 1.5;
}

@media (min-width: 1000px) {
	body.directorist-content-active .hp-directory-archive-full .directorist-archive-grid-view .directorist-row > [class*="directorist-col-"] {
		flex: 0 0 33.333333% !important;
		max-width: 33.333333% !important;
	}
}

@media (max-width: 699px) {
	.hp-directory-quick-search .hp-compact-filters__search {
		flex: 0 0 auto;
	}
	.hp-directory-quick-search .hp-compact-filters__panel {
		grid-template-columns: 1fr;
	}
	.hp-directory-quick-search__actions {
		justify-content: space-between;
	}
}

/* Owner correction: this card's own rounded corners had no `overflow` set, so
 * Directorist's own square-edged child controls (view/sort toggles) could
 * paint straight past the rounded border in Safari instead of being clipped
 * to it -- read by the owner as a "protruding border/line artifact". */
body.directorist-content-active .directorist-header-bar {
	overflow: hidden;
	margin-bottom: var(--hp-space-6);
	border: 1px solid var(--hp-color-border);
	border-radius: var(--hp-radius-lg);
	background: var(--hp-color-white) !important;
	box-shadow: var(--hp-shadow-card);
}

body.directorist-content-active .directorist-listings-header {
	min-height: 64px;
	align-items: center;
	padding: var(--hp-space-3) !important;
}

/* Owner correction 3 (mobile filter/sort area redesigned, not just shrunk
 * again): two earlier passes only tuned this card's own margins/min-height.
 * The owner's next phone check found the real cause was upstream and asked
 * for the interaction pattern to be reconsidered, not the same box resized
 * a third time.
 *
 * The grid/map/Sort By row was presented as its own bordered, shadowed,
 * rounded "card" sitting apart from the search form above it, with its
 * controls stacked in two rows inside that card. Removing the boxed-card
 * treatment (border/shadow/radius/standalone background) and laying the
 * controls out in one horizontal row lets it read as a continuation of the
 * same white search panel instead of a second, disconnected slab --
 * matching the owner's own preferred direction (a single compact toolbar
 * for grid/map + sort, not a separate box). No dedicated "Filters" control
 * is added: category and keyword filtering already have their own
 * always-visible, clearly labelled fields in the search form immediately
 * above, so a second filter entry point would duplicate rather than
 * clarify. (An earlier draft of this fix also tried shrinking
 * `.directorist-search-contents`'s own 100px/120px hero padding, suspecting
 * it was the cause of the large gap the owner reported below Search
 * Listings -- live measurement showed that assumption was wrong: the real
 * gap between the Search Listings button and this row was already only a
 * few px once the row stopped stacking in two lines, so that padding was
 * left untouched to avoid destabilising Directorist's own hero-search box
 * model for no benefit.)
 */
@media (max-width: 767px) {
	/* Owner correction 4 (final spacing pass): Directorist's own
	 * `.directorist-archive-contents__top` wrapper (a plugin class we don't
	 * control) carries its own `padding: 15px 20px 0` below 575px, meant for
	 * a header title we never render. Left untouched, that 20px side padding
	 * stacked with our own archive-contents gutter (12px) to start this
	 * toolbar 32px from the edge, 17px further right than the "Search
	 * Listings" button's own 15px inset (Directorist's separate
	 * `.directorist-container-fluid` convention) -- read by the owner as
	 * "begins farther to the right ... late-starting". Zeroing it here
	 * (rather than editing the vendor file) lets the toolbar inherit the
	 * same 12px gutter as the rest of the archive content, 3px off the
	 * search button's edge -- visually flush on a real phone.
	 *
	 * That same 15px top padding was also part of why the gap below the
	 * search button measured only ~2px despite a 12px margin-top here: the
	 * hero search block and this listings block overlap in a way neither
	 * this session nor the prior one could fully explain (see the reverted
	 * `.directorist-search-contents` padding experiment above), so rather
	 * than fight that further, the margin-top below was empirically tuned
	 * against the real rendered gap (confirmed live via getBoundingClientRect
	 * before deploying) until it lands on a deliberate, token-sized 16px
	 * gap instead of an accidental ~2px one. */
	body.directorist-content-active .directorist-archive-contents__top {
		padding: 0 !important;
	}

	/* Sticky-below-the-site-header pattern proven in the prior correction:
	 * the site header is opaque white and 60px tall on phone, so without
	 * this the row can scroll to a position half-hidden behind it. */
	body.directorist-content-active .directorist-header-bar {
		position: sticky;
		top: 60px;
		z-index: 400;
		margin-top: 41px !important;
		margin-bottom: var(--hp-space-4) !important;
		border: 0 !important;
		border-radius: 0 !important;
		box-shadow: none !important;
	}

	body.directorist-content-active .directorist-listings-header {
		min-height: 0;
		padding: 0 !important;
	}

	body.directorist-content-active .directorist-listings-header__left,
	body.directorist-content-active .directorist-listings-header__right {
		flex-direction: row !important;
		align-items: center !important;
		flex-wrap: nowrap !important;
		width: auto !important;
	}

	body.directorist-content-active .directorist-listings-header__right > * {
		flex: 0 0 auto !important;
	}

	body.directorist-content-active .directorist-viewas__item {
		min-width: 44px;
		min-height: 44px;
	}
}

body.directorist-content-active .directorist-filter-btn,
body.directorist-content-active .directorist-viewas-dropdown__toggle,
body.directorist-content-active .directorist-sortby-dropdown__toggle {
	border: 1px solid var(--hp-color-border) !important;
	border-radius: var(--hp-radius-md) !important;
	background: var(--hp-color-white) !important;
	color: var(--hp-color-ink) !important;
}

body.directorist-content-active .directorist-archive-grid-view .directorist-row {
	row-gap: clamp(1rem, 3vw, 1.75rem);
}

body.directorist-content-active .directorist-listing-single {
	height: 100%;
	overflow: hidden;
	border: 1px solid var(--hp-color-border) !important;
	border-radius: var(--hp-radius-xl) !important;
	background: var(--hp-color-white) !important;
	box-shadow: var(--hp-shadow-card) !important;
	transition: var(--hp-transition-card) !important;
}

body.directorist-content-active .directorist-listing-single:hover {
	transform: translateY(-2px);
	box-shadow: var(--hp-shadow-card-hover) !important;
}

body.directorist-content-active .directorist-listing-single__thumb,
body.directorist-content-active .directorist-thumnail-card,
body.directorist-content-active .directorist-thumnail-card figure {
	height: clamp(11rem, 24vw, 15rem) !important;
	min-height: 0 !important;
	margin: 0;
	background: var(--hp-color-primary-100) !important;
}

/*
 * Owner fix (2026-08-18) superseded (2026-08-21): the original owner fix
 * here made `contain` unconditional to protect a real disclosed example
 * (Kelsey's Happy Tails, a square logo with the business name baked in)
 * -- correct at the time, since Directorist's own archive-card template
 * exposed no per-item logo-vs-photo signal to switch on, exactly as that
 * fix's own comment disclosed as its real limitation. That signal now
 * exists (the same real-aspect-ratio heuristic in
 * assets/js/directory-media-fixes.js already proven on the single-listing
 * hero) -- confirmed live the unconditional version was letterboxing
 * genuine business photography (e.g. "All Blown Up"'s real 2048x1493
 * landscape photo, squashed into a fixed-height box with wasted margins).
 * Default now matches the hero (cover for real photography);
 * assets/css/directory-media.css adds the matching contain-for-genuine-
 * logos override, driven by that same detection.
 */
body.directorist-content-active .directorist-thumnail-card img {
	width: 100% !important;
	height: 100% !important;
	object-fit: cover !important;
}

/* Wave 6 launch stock: one truthful symbolic system for listings without a
 * genuine image. Nothing here represents a real shopfront, person or product. */
body.directorist-content-active .hp-directory-card-visual,
body.directorist-content-active .hp-directory-card-visual figure {
	height: 100% !important;
	min-height: 100% !important;
	margin: 0;
}

body.directorist-content-active .hp-directory-card-visual > a {
	display: block;
	height: 100%;
	text-decoration: none;
}

.hp-directory-visual {
	--hp-directory-visual-accent: #6d28d9;
	--hp-directory-visual-soft: #ede9fe;
	position: relative;
	display: flex;
	width: 100%;
	height: 100%;
	min-height: 13.75rem;
	align-items: flex-end;
	gap: clamp(.75rem, 3vw, 1.1rem);
	overflow: hidden;
	padding: clamp(1rem, 4vw, 1.5rem);
	background: linear-gradient(145deg, #fff 0%, var(--hp-directory-visual-soft) 72%, #fff 160%);
	color: var(--hp-color-ink);
	isolation: isolate;
}

.hp-directory-visual::before,
.hp-directory-visual::after {
	position: absolute;
	z-index: -1;
	border: 1px solid color-mix(in srgb, var(--hp-directory-visual-accent) 22%, transparent);
	border-radius: 999px;
	content: '';
}
.hp-directory-visual::before { inset: -38% 46% 26% -18%; transform: rotate(24deg); }
.hp-directory-visual::after { width: 8rem; height: 8rem; right: -2rem; bottom: -3rem; }

.hp-directory-visual__orb {
	position: absolute;
	top: -2.5rem;
	right: -1.5rem;
	width: 10rem;
	height: 10rem;
	border-radius: 50%;
	background: radial-gradient(circle at 35% 35%, #fff 0 7%, var(--hp-directory-visual-accent) 8% 100%);
	opacity: .16;
}

.hp-directory-visual__icon {
	display: grid;
	width: clamp(3.25rem, 8vw, 4.25rem);
	height: clamp(3.25rem, 8vw, 4.25rem);
	flex: 0 0 auto;
	place-items: center;
	border: 1px solid color-mix(in srgb, var(--hp-directory-visual-accent) 24%, white);
	border-radius: 1.25rem;
	background: rgba(255,255,255,.86);
	box-shadow: 0 14px 34px rgba(35, 20, 68, .12);
	color: var(--hp-directory-visual-accent);
}
.hp-directory-visual__icon svg { width: 55%; height: 55%; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.hp-directory-visual__copy { display: grid; min-width: 0; gap: .14rem; text-align: left; }
.hp-directory-visual__kicker { color: var(--hp-directory-visual-accent); font-size: .68rem; font-weight: 850; letter-spacing: .1em; text-transform: uppercase; }
.hp-directory-visual__label { color: var(--hp-color-ink); font-family: var(--hp-font-heading); font-size: clamp(1rem, 2.4vw, 1.35rem); line-height: 1.15; }
.hp-directory-visual__note { color: var(--hp-color-body); font-size: .72rem; font-weight: 650; }

.hp-directory-visual--food-drink { --hp-directory-visual-accent:#a43b14; --hp-directory-visual-soft:#fff1e8; }
.hp-directory-visual--retail { --hp-directory-visual-accent:#9b2c74; --hp-directory-visual-soft:#fce7f3; }
.hp-directory-visual--trades { --hp-directory-visual-accent:#9a5808; --hp-directory-visual-soft:#fff6d8; }
.hp-directory-visual--automotive { --hp-directory-visual-accent:#2457a6; --hp-directory-visual-soft:#e7f0ff; }
.hp-directory-visual--beauty { --hp-directory-visual-accent:#a42d82; --hp-directory-visual-soft:#fae8ff; }
.hp-directory-visual--technology { --hp-directory-visual-accent:#1d4ed8; --hp-directory-visual-soft:#e0f2fe; }
.hp-directory-visual--pets { --hp-directory-visual-accent:#8b4b16; --hp-directory-visual-soft:#fff0dc; }
.hp-directory-visual--fitness { --hp-directory-visual-accent:#047857; --hp-directory-visual-soft:#dcfce7; }
.hp-directory-visual--health { --hp-directory-visual-accent:#b4234d; --hp-directory-visual-soft:#ffe4ec; }
.hp-directory-visual--professional { --hp-directory-visual-accent:#4f46a5; --hp-directory-visual-soft:#ecebff; }
.hp-directory-visual--childcare { --hp-directory-visual-accent:#0f766e; --hp-directory-visual-soft:#dff8f2; }
.hp-directory-visual--hospitality { --hp-directory-visual-accent:#7c3aed; --hp-directory-visual-soft:#f0e8ff; }
.hp-directory-visual--leisure { --hp-directory-visual-accent:#c2410c; --hp-directory-visual-soft:#ffedd5; }
.hp-directory-visual--cleaning { --hp-directory-visual-accent:#0369a1; --hp-directory-visual-soft:#e0f7ff; }
.hp-directory-visual--garden { --hp-directory-visual-accent:#3f7b16; --hp-directory-visual-soft:#eaf8d8; }
.hp-directory-visual--local-services { --hp-directory-visual-accent:#6d28d9; --hp-directory-visual-soft:#ede9fe; }

.hp-directory-card-state {
	display: flex;
	flex-wrap: wrap;
	gap: .35rem .45rem;
	margin: .55rem 0 .35rem;
}
.hp-directory-card-state span,
.hp-directory-card-state a {
	display: inline-flex;
	min-height: 1.75rem;
	align-items: center;
	padding: .15rem .55rem;
	border-radius: var(--hp-radius-pill);
	background: var(--hp-color-primary-100);
	color: var(--hp-color-primary-700);
	font-size: .72rem;
	font-weight: 750;
	line-height: 1.2;
}
.hp-directory-card-state a { min-height: 2.75rem; text-decoration: underline; text-underline-offset: 2px; }
/* L01.1 (2026-09-12): white on the gold accent measured 2.98:1 on the real
   archive card. The gold is the badge's identity, so the label takes a deep
   ink against it instead (about 8:1) rather than the gold being muddied. */
.hp-directory-card-state--boost span { background: var(--hp-accent-gold); color: #2e2205; }

/*
 * Owner correction (2026-08-20): "a tiny 'Boosted' badge is NOT sufficient
 * commercial value... the owner needs to be able to sell this product
 * confidently... a user's eye should naturally notice the Boosted listing
 * without it looking cheap." A restrained, genuinely premium treatment on
 * the whole card -- not just the badge -- using `:has()` so no template
 * markup changes: the same real `.hp-directory-card-state--boost` badge
 * already only renders for a genuinely-entitled listing
 * (hp_listing_is_boosted(), see inc/directory-visuals.php), so this can
 * never mis-fire on a non-boosted card. This rule is visual emphasis only
 * and never reorders the archive itself; the actual fair-rotation
 * placement of Boosted listings into prominent slots is a separate,
 * deliberately conservative mechanism (plugin's boost.php,
 * hp_directory_apply_boost_exposure()) that reorders the ID list
 * Directorist's own query already produced, added after this comment was
 * first written -- it never touches Directorist's native `_featured`
 * meta/ordering, keeping that a distinct, untouched product boundary.
 */
/* Confirmed live via computed styles that a bare `.directorist-listing-
   card:has(...)` selector tied with Directorist's own native rule and lost
   on document order -- this file's own established convention elsewhere
   (see the object-fit:contain rule above) for winning against Directorist's
   native CSS is a `body.directorist-content-active` prefix; matched here
   for the same reason rather than guessing at a different fix. */
/*
 * Owner priority (2026-08-22): "the distinction is not strong enough...
 * make boosted status immediately noticeable... keep it tasteful." The
 * single drop-shadow above read as barely-there at 16% opacity with no
 * actual glow radius. Stacked three shadows for a genuine glow rather than
 * a bigger flat shadow: a short defined lift, a crisp 1px ring restating
 * the border colour, and a wide soft ambient bloom -- the same restrained-
 * premium direction, just legible at a glance instead of only on close
 * inspection. Border gradient thickened 1px->2px to match.
 */
body.directorist-content-active .directorist-listing-card:has( .hp-directory-card-state--boost ) {
	position: relative;
	border: 2px solid transparent !important;
	background:
		linear-gradient( var(--hp-color-white), var(--hp-color-white) ) padding-box,
		linear-gradient( 135deg, var(--hp-color-primary-400), var(--hp-color-primary-700) ) border-box !important;
	box-shadow:
		0 8px 20px rgba( 124, 58, 237, .28 ),
		0 0 0 1px rgba( 139, 92, 246, .22 ),
		0 0 34px rgba( 139, 92, 246, .30 ) !important;
	transition: box-shadow .25s ease, transform .25s ease;
}

body.directorist-content-active .directorist-listing-card:has( .hp-directory-card-state--boost ):hover,
body.directorist-content-active .directorist-listing-card:has( .hp-directory-card-state--boost ):focus-within {
	box-shadow:
		0 16px 38px rgba( 124, 58, 237, .38 ),
		0 0 0 1px rgba( 139, 92, 246, .28 ),
		0 0 46px rgba( 139, 92, 246, .42 ) !important;
	transform: translateY( -2px );
}

/*
 * Owner priority (2026-08-20): "the Boost badge should not be weaker than
 * native labels like Popular." Confirmed live that Directorist's own free
 * "Popular" badge sits prominently on the thumbnail (its admin-configured
 * default corner slot), while this badge rendered far down the card near
 * the "View profile" link -- measured live on the same card: Popular
 * top:116px, Boosted top:425px. Directorist exposes no hook inside the
 * thumbnail's own absolute corner slots (confirmed by reading
 * templates/archive/loop-grid.php and loop-list.php directly), so this
 * repositions the EXISTING, already-correctly-gated badge with CSS instead
 * of a deeper vendor customisation: pulled out of normal flow and overlaid
 * on the card's opposite corner (top-left) -- the card already has
 * `position:relative` scoped to boosted cards only (the rule above), so
 * this can never appear on a non-boosted card. Scoped to the archive-card
 * context only (`.directorist-listing-card` ancestor) -- the single-
 * listing page's own boost badge (`--boost-single`, after the title) is a
 * different, already-prominent placement and is untouched by this rule.
 */
.directorist-listing-card .hp-directory-card-state--boost {
	position: absolute;
	top: var(--hp-space-3);
	left: var(--hp-space-3);
	z-index: 3;
	margin: 0;
}

/*
 * Real regression found during a fresh Boost re-audit (2026-08-20): on the
 * business's own single-listing page, this badge's text rendered near-black
 * instead of white -- confirmed via computed-style/cascade inspection that
 * legacy-directorist.css's blanket text-readability rule
 * (`body.single-at_biz_dir .directorist-single-wrapper span`, specificity
 * 0-2-2) was beating this badge's own `color:white` (0-1-1). Same fix
 * equally darkened the neighbouring "Popular" badge on this page, so this
 * is scoped to the single-listing boost badge specifically, not a change to
 * that shared readability rule.
 */
/* L01.1 (2026-09-12): white on the gold accent measures 2.98:1, in BOTH
   themes. The archive card's badge was corrected to a deep ink against the
   same gold; this is the profile's own variant of that badge and had kept
   white here, so it was left behind. Gold stays the boost accent -- only the
   label changes, as on the card. */
body.single-at_biz_dir .hp-directory-card-state--boost-single span {
	color: #2e2205 !important;
}

/* Weight/spacing only -- deliberately not background/box-shadow here.
 * This rule used to also redeclare a purple gradient background, which
 * silently beat the real gold badge treatment above (same selector
 * specificity, declared later) with no comment explaining a colour
 * change -- found during the Wave 6 boosted-visibility audit: the badge
 * was rendering purple everywhere while the newer boosted-hero glow
 * (below) was gold and claimed to match it. Gold is the one genuinely
 * intentional boost accent (see the 2026-08-20 owner-correction comment
 * above and the hero-glow comment below); removed the conflicting colour
 * declarations rather than picking a third colour. */
.hp-directory-card-state--boost span {
	font-weight: 800;
	letter-spacing: .01em;
}

.hp-directory-card-state--boost span::before {
	content: "";
	display: inline-block;
	width: .8em;
	height: .8em;
	margin-inline-end: .3em;
	background: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13 2 3 14h7l-1 8 11-14h-7l1-6z'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13 2 3 14h7l-1 8 11-14h-7l1-6z'/%3E%3C/svg%3E") center / contain no-repeat;
	vertical-align: -.05em;
}

.hp-directory-single-visual {
	width: min(100%, 75rem);
	margin: 0 auto clamp(1rem, 4vw, 2rem);
	border-radius: var(--hp-radius-xl);
	overflow: hidden;
	box-shadow: var(--hp-shadow-card);
}
.hp-directory-single-visual .hp-directory-visual { min-height: clamp(18rem, 46vw, 34rem); padding: clamp(1.5rem, 7vw, 4rem); }
.hp-directory-single-visual .hp-directory-visual__icon { width: clamp(5rem, 12vw, 8rem); height: clamp(5rem, 12vw, 8rem); border-radius: 2rem; }
.hp-directory-single-visual .hp-directory-visual__label { font-size: clamp(1.6rem, 5vw, 3.4rem); }
.hp-directory-single-visual .hp-directory-visual__kicker,
.hp-directory-single-visual .hp-directory-visual__note { font-size: clamp(.75rem, 1.5vw, 1rem); }

@media (min-width: 768px) {
	body.directorist-content-active .directorist-archive-grid-view [class*="directorist-col-"] {
		display: flex;
	}
	body.directorist-content-active .directorist-archive-grid-view .directorist-listing-single,
	body.directorist-content-active .directorist-archive-grid-view .directorist-single-listing {
		height: 100% !important;
		min-height: 0;
		width: 100%;
	}
}

@media (max-width: 767px) {
	body.directorist-content-active .hp-directory-card-visual .hp-directory-visual {
		padding-bottom: 3.25rem;
	}
}

@media (prefers-reduced-motion: reduce) {
	.hp-directory-visual__orb { transform: none; }
}

body.directorist-content-active .directorist-listing-single__content {
	display: flex;
	min-height: 0;
	flex-direction: column;
	padding: clamp(1rem, 3vw, 1.25rem) !important;
}

/* Public launch product decision: reviews/ratings are not offered. The PHP
 * option filter prevents these elements being rendered; this narrow fallback
 * also covers legacy add-on/widget fragments that do not honour that option.
 * No review/comment data is deleted or changed. */
body.directorist-content-active .directorist-rating-meta,
body.directorist-content-active .directorist-review-content,
body.directorist-content-active .directorist-review-container,
body.directorist-content-active .directorist-review-single,
body.directorist-content-active .directorist-single-listing-section--review,
body.directorist-content-active .directorist-search-field-review,
body.directorist-content-active .directorist-review-count,
body.directorist-content-active .directorist-ratings-count {
	display: none !important;
}

/* Legitimate Overture contacts use Directorist's own `_phone` and `_website`
 * fields. Keep real values readable, wrapping long URLs instead of forcing
 * card overflow; Directorist already omits each list item when its field is
 * absent. */
body.directorist-content-active .directorist-listing-single__info__list,
body.single-at_biz_dir .directorist-single-info {
	min-width: 0;
}
body.directorist-content-active .directorist-listing-card-phone a,
body.directorist-content-active .directorist-listing-card-website a,
body.single-at_biz_dir a[href^="tel:"],
body.single-at_biz_dir a[href^="http"] {
	overflow-wrap: anywhere;
	word-break: break-word;
}

body.directorist-content-active .directorist-listing-single__info {
	min-height: 0 !important;
	max-height: none !important;
	padding: 0 !important;
}

body.directorist-content-active .directorist-listing-title,
body.directorist-content-active .directorist-listing-title a {
	display: block;
	min-height: 0 !important;
	max-height: none !important;
	margin: 0 !important;
	color: var(--hp-color-ink) !important;
	font-size: clamp(1.05rem, 2vw, 1.25rem) !important;
	font-weight: 800 !important;
	line-height: 1.3 !important;
	text-decoration: none !important;
}

body.directorist-content-active .directorist-listing-title a {
	min-height: 44px !important;
}

body.directorist-content-active .directorist-listing-title a::after {
	content: 'View profile';
	display: block;
	margin-top: var(--hp-space-2);
	color: var(--hp-color-primary-700);
	font-size: var(--hp-text-sm);
	font-weight: 700;
}

body.directorist-content-active .directorist-listing-single__meta {
	margin-top: auto !important;
	padding: var(--hp-space-4) 0 0 !important;
	border: 0 !important;
}

body.directorist-content-active .directorist-listing-category a {
	display: inline-flex;
	min-height: 44px;
	align-items: center;
	padding: .35rem .75rem !important;
	border-radius: var(--hp-radius-pill) !important;
	background: var(--hp-color-primary-100) !important;
	color: var(--hp-color-primary-700) !important;
	font-weight: 700 !important;
}

body.directorist-content-active .directorist-mark-as-favorite__btn {
	min-width: 44px !important;
	min-height: 44px !important;
	border: 1px solid var(--hp-color-border) !important;
	background: var(--hp-color-white) !important;
	color: var(--hp-color-primary-600) !important;
}

body.directorist-content-active .directorist-mark-as-favorite__btn .directorist-favorite-icon,
body.directorist-content-active .directorist-mark-as-favorite__btn .directorist-favorite-icon::before,
body.directorist-content-active .directorist-mark-as-favorite__btn .directorist-favorite-icon::after {
	color: var(--hp-color-primary-600) !important;
}

body.directorist-content-active .directorist-mark-as-favorite__btn .directorist-favorite-icon::before {
	background-color: var(--hp-color-primary-600) !important;
}

body.directorist-content-active .directorist-badge {
	border-radius: var(--hp-radius-pill) !important;
	font-weight: 800 !important;
	letter-spacing: .03em;
}

body.directorist-content-active .directorist-pagination {
	display: flex;
	flex-wrap: wrap;
	gap: var(--hp-space-2);
	justify-content: center;
	margin-top: clamp(2rem, 5vw, 4rem);
}

body.directorist-content-active .directorist-pagination .page-numbers {
	margin: 0 !important;
	border: 1px solid var(--hp-color-border) !important;
	border-radius: var(--hp-radius-md) !important;
	background: var(--hp-color-white) !important;
	color: var(--hp-color-ink) !important;
}

body.directorist-content-active .directorist-pagination .current {
	border-color: var(--hp-color-primary-500) !important;
	background: var(--hp-color-primary-500) !important;
	color: var(--hp-color-white) !important;
}

@media (max-width: 767px) {
	body.directorist-content-active .directorist-archive-contents { padding-inline: var(--hp-space-3); }
	body.directorist-content-active .directorist-listings-header { align-items: stretch; gap: var(--hp-space-3); }
	body.directorist-content-active .directorist-listings-header__left,
	body.directorist-content-active .directorist-listings-header__right { display: flex; width: 100%; gap: var(--hp-space-2); }
	body.directorist-content-active .directorist-listings-header__right > * { flex: 1; }
	body.directorist-content-active .directorist-listing-single__thumb,
	body.directorist-content-active .directorist-thumnail-card,
	body.directorist-content-active .directorist-thumnail-card figure { height: 12rem !important; }
}

/*
 * Milestone 40 accessibility fixes. Every rule below corrects a real,
 * axe-core-confirmed WCAG failure in Directorist's own default styling --
 * fixed here, in the theme's own stylesheet, never by editing a plugin file.
 */

/* The "back to listings" link keeps Directorist's own .directorist-btn-light
 * class (so it's exempt from the purple-background override above), but
 * Directorist's own real rendered background for that class is full-strength
 * brand purple, not light -- leaving its own near-black default text at a
 * failing ~1.4:1 contrast ratio. */
body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-action.directorist-btn-light,
body.single-at_biz_dir .directorist-single-listing-header .directorist-single-listing-action.directorist-btn-light .directorist-single-listing-action__text {
	color: var(--hp-color-white) !important;
}

/* Directorist's own star-rating summary text (~2.9:1 on white) fails AA. */
.directorist-rating-overall {
	color: var(--hp-color-body) !important;
}

/* Directorist's own image-carousel pagination dots render at 7x7px (a real
 * white dot at 0.6/1.0 opacity for inactive/active), well under the WCAG 2.2
 * AA 24x24px minimum target size. Grow the real element to 24x24px -- the
 * one axe-core actually measures -- and recreate the original 7px dot exactly
 * via a centred pseudo-element, so the visible design is unchanged. */
.directorist-swiper__pagination .swiper-pagination-bullet {
	width: 24px !important;
	height: 24px !important;
	display: inline-flex !important;
	align-items: center;
	justify-content: center;
	background: transparent !important;
	margin: 0 2px !important;
}
.directorist-swiper__pagination .swiper-pagination-bullet::after {
	content: '';
	display: block;
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.6);
}
.directorist-swiper__pagination .swiper-pagination-bullet-active::after {
	background: rgb(255, 255, 255);
}

/* Our own secondary button variant defaults to brand-purple text, correct on
 * a light background but unreadable (~2.6:1) on this panel's own dark-purple
 * background. */
.hp-profile-discovery .hp-c-btn--secondary {
	color: var(--hp-color-white);
	border-color: var(--hp-color-white);
}
.hp-profile-discovery .hp-c-btn--secondary:hover {
	background: rgba(255, 255, 255, 0.12);
}

/*
 * Wave 3 (2026-08-08, discovery-page consolidation): Directorist's own
 * default "Popular" badge ships hot pink/red (#f51957 via an inline CSS
 * custom property on the badge element itself), which reads as an alert
 * colour next to the rest of the purple-led card language -- the one
 * genuine brand-consistency gap on an otherwise already-token-aligned
 * archive card (radius/shadow/category-link colour already matched ours).
 * Overriding the rendered background/border directly (not the custom
 * property) beats the inline value regardless of what it resolves to,
 * since Directorist's own stylesheet sets the property without
 * !important. Card titles also default to the system font stack rather
 * than the brand heading face every other card system on the platform
 * uses (homepage business cards, Local Updates, What's On, HertsJobs).
 */
body.directorist-content-active .directorist-badge {
	background: var(--hp-color-primary-500) !important;
	border-color: var(--hp-color-primary-500) !important;
}
body.directorist-content-active .directorist-listing-title,
body.directorist-content-active .directorist-listing-title a {
	font-family: var(--hp-font-heading);
}

/* Wave 6: live Google photos retain a visible source/author credit. The
 * provider data itself is resolved at display time and never stored locally. */
body.directorist-content-active .hp-google-photo-credit {
	display: block;
	margin: 0 0 8px;
	color: var(--hp-color-body);
	font-size: 11px;
	line-height: 1.4;
}
body.directorist-content-active .hp-google-photo-credit a {
	color: var(--hp-color-primary-700);
	text-decoration: underline;
	text-underline-offset: 2px;
}
.directorist-single-wrapper .hp-google-photo-credit {
	margin-top: 6px;
}

/*
 * Business Detail Page upgrade, Part 2 (2026-08-21): the remaining sections
 * -- info cards, highlights, the map's own purple restyle, spacing/
 * hierarchy, boosted-hero treatment, and cleaning up the parts of this
 * page that still read as generic Directorist rather than a HertsPartners
 * storefront. All additive CSS on top of Directorist's own existing markup
 * (and, for Opening Hours/Highlights, the two new cards
 * directory-single-page.php renders through the exact same
 * .directorist-card shell) -- no vendor template edits.
 */

/* The Location card now inherits the canonical .hp-local-map component from
   heartbeat.css. Directorist still owns the real map and coordinates; this
   file deliberately carries no second tile/control/marker styling system. */

/* --- New cards (Opening Hours, Highlights) match Directorist's own
   .directorist-card look exactly (same shell, see hp_directory_single_card()),
   these rules only style what's genuinely new inside them. */
.hp-directory-hours__table { width: 100%; border-collapse: collapse; }
.hp-directory-hours__table th,
.hp-directory-hours__table td { padding: .4rem 0; text-align: left; font-weight: 400; border-bottom: 1px solid var(--hp-color-border); }
.hp-directory-hours__table tr:last-child th,
.hp-directory-hours__table tr:last-child td { border-bottom: none; }
.hp-directory-hours__table th { color: var(--hp-color-body); font-weight: 600; padding-right: var(--hp-space-4); }
.hp-directory-hours__always-open { margin: 0; font-weight: 700; color: var(--hp-color-primary-600); }

.hp-directory-highlights { display: grid; grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); gap: .6rem .9rem; margin: 0; padding: 0; list-style: none; }
.hp-directory-highlights li { display: flex; align-items: center; gap: .5rem; font-weight: 600; font-size: var(--hp-text-sm); }
.hp-directory-highlights svg { flex: none; width: 1.15rem; height: 1.15rem; color: var(--hp-color-primary-600); }
.hp-directory-highlights__fallback { margin: 0; color: var(--hp-color-body); }
.hp-directory-highlights__fallback a { color: var(--hp-color-primary-600); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }

/* --- Spacing/hierarchy: the content cards below the hero read as one flat
   list by default (Directorist's own default is a tight, near-zero gap
   between .directorist-card sections). A little real air between cards and
   a touch more between the hero and the first card gives the page an
   actual rhythm instead of everything running together. */
body.single-at_biz_dir .directorist-single-wrapper > .directorist-card { margin-bottom: var(--hp-space-5); }
body.single-at_biz_dir .directorist-single-wrapper > .directorist-card:last-child { margin-bottom: 0; }
body.single-at_biz_dir .directorist-card__header__title {
	font-size: 1.05rem;
	letter-spacing: -.01em;
}
body.single-at_biz_dir .directorist-card__header-icon {
	color: var(--hp-color-primary-600);
}

/* --- Boosted hero: the badge already exists; a Boosted business's whole
   hero card should also feel noticeably more premium, not just carry an
   extra pill. Reuses the same gold accent token the badge itself already
   uses (--hp-accent-gold), so this reads as "the same boosted treatment,
   more of it" rather than a second, different premium colour.
   Strengthened 2026-08-22 alongside the archive-card glow above, for the
   same "immediately noticeable, still tasteful" reason -- carries the
   promoted feeling through from Directory into the storefront itself
   rather than it fading once you open the profile. */
body.single-at_biz_dir .directorist-single-listing-header:has( .hp-directory-card-state--boost-single ) {
	border-color: rgba(212, 168, 44, .55);
	background: linear-gradient(145deg, var(--hp-color-white), #fdf6e3) !important;
	box-shadow: 0 24px 64px rgba(151, 112, 12, .24), 0 0 0 1px rgba(212, 168, 44, .30), 0 0 44px rgba(212, 168, 44, .22);
}

/* --- Cleaning up what still reads as generic Directorist rather than a
   HertsPartners storefront:
   1. The default Swiper pagination dots/nav arrows use the vendor's own
      plain grey styling with no relation to this site's own visual system.
   2. Directorist's own default star-rating widget renders even where this
      site doesn't use ratings as a real, populated feature (Rating is
      switched off in this site's own Directory Builder header config) --
      hiding the review-count/rating remnants that can still leak through
      shared component classes on the single page specifically. */
body.single-at_biz_dir .swiper-pagination-bullet {
	background: var(--hp-color-primary-300, #c4b5fd);
	opacity: .55;
}
body.single-at_biz_dir .swiper-pagination-bullet-active {
	background: var(--hp-color-primary-600);
	opacity: 1;
}
body.single-at_biz_dir .swiper-button-next,
body.single-at_biz_dir .swiper-button-prev {
	color: var(--hp-color-primary-600);
}
body.single-at_biz_dir .swiper-button-next::after,
body.single-at_biz_dir .swiper-button-prev::after {
	font-size: 1.1rem;
}

/*
 * Final Wave 6 storefront correction (2026-08-21). Directorist remains the
 * data/gallery/form owner; these late, scoped rules turn its existing output
 * into the approved business-first hierarchy without a second image or map
 * system.
 */
body.single-at_biz_dir .directorist-single-listing-header.hp-storefront-enhanced {
	margin-bottom: clamp(1rem, 2.5vw, 1.5rem);
	padding: 0 !important;
	border: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
}

body.single-at_biz_dir .hp-storefront-summary {
	display: flex;
	min-width: 0;
	flex-direction: column;
	align-items: flex-start;
	justify-content: center;
	gap: clamp(.75rem, 2vw, 1.1rem);
	padding: clamp(.25rem, 1.5vw, 1rem);
}

body.single-at_biz_dir .hp-storefront-summary > :where(h1, .directorist-listing-title) {
	margin: 0 !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top {
	margin: 0 0 .25rem;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-btn,
body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-action {
	border: 1px solid var(--hp-color-primary-200) !important;
	background: var(--hp-color-primary-100) !important;
	color: var(--hp-color-primary-700) !important;
	box-shadow: none !important;
}

/* Final pre-launch polish: Back and Share are one utility pair. Directorist's
 * Share control used its light variant and its masked icon could disappear
 * against the pale background. Keep both controls on the same branded purple
 * surface, including hover/focus, and force the vendor mask to use currentColor.
 *
 * Real bug found live (2026-08-22): the original selector used a direct-child
 * combinator (`.directorist-single-listing-top > .directorist-social-share`),
 * assuming Share sits immediately inside that container the same way Go Back
 * does. Confirmed via computed-style inspection that Share actually nests two
 * levels deeper (.directorist-single-listing-top > .directorist-single-listing-
 * quick-action > .directorist-listing-single__quick-actions > .directorist-
 * social-share), so the direct-child selector silently matched nothing and
 * Share kept Directorist's own pale default. Descendant combinator (no `>`)
 * fixes it without needing to hardcode the intermediate wrapper classes. */
body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-social-share {
	border-color: var(--hp-color-primary-500) !important;
	background: var(--hp-color-primary-500) !important;
	color: var(--hp-color-white) !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-social-share > .directorist-icon-mask::after {
	background-color: currentColor !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-btn:hover,
body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-btn:focus-visible,
body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-action:hover,
body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-action:focus-visible {
	border-color: var(--hp-color-primary-400) !important;
	background: var(--hp-color-white) !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-social-share:hover,
body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-social-share:focus-visible {
	border-color: var(--hp-color-primary-600) !important;
	background: var(--hp-color-primary-600) !important;
	color: var(--hp-color-white) !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-return-back.directorist-btn {
	width: max-content !important;
	min-height: 48px !important;
	flex: 0 0 auto !important;
	padding-inline: 1.05rem 1.4rem !important;
	border-color: var(--hp-color-primary-500) !important;
	background: var(--hp-color-primary-500) !important;
	color: var(--hp-color-white) !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-return-back.directorist-btn:hover,
body.single-at_biz_dir .hp-storefront-summary .directorist-single-listing-top .directorist-return-back.directorist-btn:focus-visible {
	border-color: var(--hp-color-primary-600) !important;
	background: var(--hp-color-primary-600) !important;
	color: var(--hp-color-white) !important;
}

body.single-at_biz_dir .hp-storefront-summary :where(
	.directorist-listing-details,
	.directorist-listing-single-quickinfo,
	.directorist-listing-single__info
) {
	width: fit-content !important;
	max-width: 100%;
	margin: 0 !important;
	padding: 0 !important;
	border: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-listing-single__info {
	display: inline-flex !important;
	flex-wrap: wrap;
	gap: .5rem;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-listing-category,
body.single-at_biz_dir .hp-storefront-summary .directorist-listing-category a {
	display: inline-flex;
	width: fit-content;
	align-items: center;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-listing-category {
	min-height: 40px;
	gap: .45rem;
	padding: .45rem .8rem;
	border: 1px solid var(--hp-color-primary-200);
	border-radius: var(--hp-radius-pill);
	background: var(--hp-color-primary-100);
}

body.single-at_biz_dir .hp-storefront-summary .directorist-listing-category a {
	min-height: 0;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--hp-color-primary-700) !important;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-info-item-badges,
body.single-at_biz_dir .hp-storefront-summary .directorist-badge {
	display: inline-flex;
	width: fit-content;
	align-items: center;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-badge {
	min-height: 40px;
	padding: .45rem .8rem !important;
	border-radius: var(--hp-radius-pill) !important;
	color: var(--hp-color-white) !important;
}

body.single-at_biz_dir .hp-storefront-statuses {
	display: flex;
	flex-wrap: wrap;
	gap: .5rem;
}

body.single-at_biz_dir .hp-storefront-statuses .hp-directory-card-state {
	margin: 0;
}

body.single-at_biz_dir .hp-directory-card-state--unclaimed-single span {
	min-height: 2.25rem;
	padding-inline: .8rem;
	border: 1px solid var(--hp-color-primary-200);
	background: var(--hp-color-white);
}

body.single-at_biz_dir .hp-storefront-summary .directorist-listing-actions {
	display: flex;
	flex-wrap: wrap;
	gap: .65rem;
	margin: .2rem 0 0;
}

body.single-at_biz_dir .hp-storefront-summary .directorist-listing-actions .directorist-btn.directorist-btn-default {
	border: 1px solid var(--hp-color-primary-200) !important;
	background: var(--hp-color-white) !important;
	color: var(--hp-color-primary-700) !important;
	box-shadow: 0 8px 22px rgba(68, 35, 125, .08);
}

body.single-at_biz_dir .hp-storefront-enhanced > .directorist-single-listing-slider-wrap {
	height: auto !important;
	min-height: 0 !important;
	margin: 0 !important;
}

body.single-at_biz_dir .hp-storefront-enhanced .directorist-single-listing-slider:not(.directorist-single-listing-slider-thumb),
body.single-at_biz_dir .hp-storefront-enhanced .directorist-single-listing-slider:not(.directorist-single-listing-slider-thumb) > .swiper-wrapper,
body.single-at_biz_dir .hp-storefront-enhanced .directorist-single-listing-slider:not(.directorist-single-listing-slider-thumb) > .swiper-wrapper > .swiper-slide {
	width: 100% !important;
	height: auto !important;
	max-height: none !important;
	aspect-ratio: 3 / 2;
	min-height: 0 !important;
}

body.single-at_biz_dir .hp-storefront-enhanced .directorist-single-listing-slider:not(.directorist-single-listing-slider-thumb),
body.single-at_biz_dir .hp-storefront-enhanced .hp-directory-single-visual {
	overflow: hidden;
	border: 1px solid rgba(124, 58, 237, .14);
	border-radius: var(--hp-radius-xl);
	background: var(--hp-color-primary-100);
	box-shadow: 0 18px 48px rgba(68, 35, 125, .13);
}

body.single-at_biz_dir .hp-storefront-enhanced .directorist-single-listing-slider:not(.directorist-single-listing-slider-thumb) > .swiper-wrapper > .swiper-slide > img {
	display: block;
	width: 100% !important;
	height: 100% !important;
	max-height: none !important;
	object-fit: cover;
	object-position: 50% 50%;
	border-radius: 0;
}

body.single-at_biz_dir .hp-storefront-enhanced .hp-directory-single-visual {
	width: 100%;
	margin: 0;
	aspect-ratio: 3 / 2;
}

body.single-at_biz_dir .hp-storefront-enhanced .hp-directory-single-visual .hp-directory-visual {
	height: 100%;
	min-height: 0;
	padding: clamp(1.25rem, 5vw, 3rem);
}

body.single-at_biz_dir .directorist-single-wrapper.hp-storefront-layout-enhanced > .directorist-card {
	margin: 0 !important;
	border-color: rgba(124, 58, 237, .13) !important;
	border-radius: var(--hp-radius-lg) !important;
	box-shadow: 0 10px 34px rgba(55, 31, 86, .07) !important;
}

body.single-at_biz_dir .directorist-single-wrapper.hp-storefront-layout-enhanced > .hp-storefront-section--empty {
	display: none !important;
}

body.single-at_biz_dir .directorist-single-wrapper.hp-storefront-layout-enhanced > .hp-storefront-section--contact {
	align-self: start;
}

body.single-at_biz_dir .hp-storefront-section--contact .directorist-details-info-wrap,
body.single-at_biz_dir .hp-storefront-section--contact .directorist-single-info-socials {
	min-height: 0 !important;
}

body.single-at_biz_dir .hp-storefront-section--contact .directorist-single-info-socials {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: .75rem 1rem;
	margin: 0;
	padding: 0;
}

body.single-at_biz_dir .hp-storefront-section--contact .directorist-social-links {
	display: flex;
	flex-wrap: wrap;
	gap: .5rem;
}

body.single-at_biz_dir .hp-storefront-section--contact .directorist-social-links a {
	display: inline-flex;
	width: 44px;
	height: 44px;
	align-items: center;
	justify-content: center;
	border: 1px solid var(--hp-color-primary-200);
	border-radius: var(--hp-radius-pill);
	background: var(--hp-color-primary-100);
	color: var(--hp-color-primary-700) !important;
}

body.single-at_biz_dir .hp-storefront-layout-enhanced .directorist-card__header {
	padding: .9rem 1.15rem !important;
	border-bottom-color: rgba(124, 58, 237, .11) !important;
	background: linear-gradient(135deg, var(--hp-color-white), var(--hp-color-primary-100)) !important;
}

body.single-at_biz_dir .hp-storefront-layout-enhanced .directorist-card__body {
	padding: 1rem 1.15rem !important;
	font-size: .96rem;
	line-height: 1.65;
}

body.single-at_biz_dir .hp-directory-about__fallback {
	margin: 0;
	color: var(--hp-color-body);
}

body.single-at_biz_dir.hp-directory-profile--unclaimed .hp-storefront-section--contact-owner {
	display: none !important;
}

body.single-at_biz_dir .hp-storefront-section--contact-owner {
	grid-column: 1 / -1;
}

body.single-at_biz_dir .hp-storefront-section--contact-owner > .directorist-card__header {
	display: none;
}

body.single-at_biz_dir .hp-storefront-contact-disclosure > summary {
	display: flex;
	min-height: 48px;
	align-items: center;
	justify-content: space-between;
	padding: 1rem 1.15rem;
	color: var(--hp-color-primary-700);
	font-weight: 800;
	cursor: pointer;
}

body.single-at_biz_dir .hp-storefront-contact-disclosure > summary::after {
	content: '+';
	font-size: 1.35rem;
	line-height: 1;
}

body.single-at_biz_dir .hp-storefront-contact-disclosure[open] > summary::after {
	content: '\2212';
}

@media (min-width: 768px) {
	body.single-at_biz_dir .directorist-single-wrapper.hp-storefront-layout-enhanced {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: clamp(1rem, 2.25vw, 1.5rem);
	}

	body.single-at_biz_dir .directorist-single-wrapper.hp-storefront-layout-enhanced > .directorist-single-listing-header {
		grid-column: 1 / -1;
	}
}

@media (min-width: 1000px) {
	body.single-at_biz_dir .directorist-single-listing-header.hp-storefront-enhanced {
		grid-template-columns: minmax(0, .95fr) minmax(0, 1.05fr);
		gap: clamp(1.5rem, 4vw, 3.5rem);
		align-items: center;
	}

	body.single-at_biz_dir .directorist-single-listing-header.hp-storefront-enhanced > .directorist-single-listing-slider-wrap {
		position: static;
		align-self: center;
	}
}

@media (max-width: 767px) {
	body.single-at_biz_dir .hp-storefront-summary {
		padding: 0;
	}

	body.single-at_biz_dir .directorist-single-wrapper.hp-storefront-layout-enhanced > .directorist-card {
		margin-top: var(--hp-space-4) !important;
	}

	body.single-at_biz_dir .hp-storefront-enhanced .hp-directory-single-visual .hp-directory-visual {
		padding: 1.25rem;
	}
}

/* =========================================================
   DARK-MODE SURFACES ON DIRECTORIST'S OWN MARKUP
   L01.1 (2026-09-12)
   -------------------------------------------------------
   Found by rendering every published route in both themes at 390 and 1280
   and measuring each text run against the backdrop actually painted behind
   it. Directorist paints these surfaces white regardless of theme while the
   site recolours their inherited text for dark mode, so the pairs came
   apart: listing titles, contact rows and category chips all ended up light
   text on a white card.

   Each rule repaints the SURFACE and states its foreground with it, rather
   than pushing the text back towards black. Selectors carry `html`/`body`
   because Directorist's own stylesheet is enqueued AFTER the theme's, so a
   plain class selector ties on specificity and loses on order -- confirmed
   against the real matched-rule list, not assumed.
   ========================================================= */

/* Archive/listing cards and their inner surfaces. */
html.hp-experience-dark body .directorist-listing-single,
html.hp-experience-dark body .directorist-listing-single__content,
html.hp-experience-dark body .directorist-listing-single__info,
html.hp-experience-dark body .directorist-listing-single__meta,
html.hp-experience-dark body .directorist-listing-single__thumb {
	background: var( --hp-color-surface, #21162c );
	border-color: var( --hp-color-border, #44334f );
	color: var( --hp-color-ink, #eee6f7 );
}

html.hp-experience-dark body .directorist-listing-single a,
html.hp-experience-dark body .directorist-listing-single__info a {
	color: var( --hp-color-ink, #eee6f7 );
}

html.hp-experience-dark body .directorist-listing-single a:hover {
	color: var( --hp-color-link, #cc9cff );
}

html.hp-experience-dark body .directorist-listing-category,
html.hp-experience-dark body .directorist-listing-category a {
	background: #2e2140;
	color: var( --hp-color-ink, #eee6f7 );
}

/* Our own archive-card labels, which sit on those Directorist cards. */
html.hp-experience-dark body .hp-directory-contact__label,
html.hp-experience-dark body .hp-directory-visual__label {
	color: var( --hp-color-text-muted, #c3b6d0 );
}

/* Save/favourite control: a white disc on a dark card. */
/* The light rule for this control is `background: … !important`, so the dark
   value has to be stated the same way to pair with its foreground. */
html.hp-experience-dark body .directorist-mark-as-favorite__btn {
	background: #2a1f37 !important;
	border-color: #5a4270;
	color: var( --hp-color-ink, #eee6f7 ) !important;
}

html.hp-experience-dark body .directorist-mark-as-favorite__btn svg,
html.hp-experience-dark body .directorist-mark-as-favorite__btn i,
html.hp-experience-dark body .directorist-mark-as-favorite__btn .directorist-favorite-icon {
	color: var( --hp-color-ink, #eee6f7 ) !important;
}

/* Archive pagination: white chips, and the current page was unreadable. */
/* The light values for these chips are `!important`, so the dark pair must
   be stated the same way rather than left to lose silently. */
html.hp-experience-dark body .directorist-pagination .page-numbers {
	background: #241a30 !important;
	border-color: #4a3760;
	color: var( --hp-color-ink, #eee6f7 ) !important;
}

html.hp-experience-dark body .directorist-pagination .page-numbers.current,
html.hp-experience-dark body .directorist-pagination .page-numbers:hover {
	background: var( --hp-color-primary-500, #7c3aed ) !important;
	border-color: var( --hp-color-primary-500, #7c3aed );
	color: #fff !important;
}

html.hp-experience-dark body .directorist-pagination .page-numbers.dots {
	background: transparent !important;
	border-color: transparent;
	color: var( --hp-color-text-muted, #c3b6d0 ) !important;
}

/* The card-state chips ("Claim this business", category pills) are a pale
   lilac that never darkened, while the link inside them correctly took the
   dark-mode link colour -- pale on pale, 1.92:1. Only visible where real
   unclaimed listings exist, which is why the smaller Local dataset never
   showed it. */
/* The boost variants are excluded: gold is the one genuinely intentional
   boost accent in both themes, and repainting it here put a deep ink on a
   dark purple plate (measured 1.04:1 on the business profile). */
html.hp-experience-dark body .hp-directory-card-state:not([class*="boost"]) span,
html.hp-experience-dark body .hp-directory-card-state:not([class*="boost"]) a {
	background: #2e2140;
	color: #e2cfff;
}

/* Compact filter disclosure: brand purple is too dark on the dark canvas. */
html.hp-experience-dark body .hp-compact-filters__toggle,
html.hp-experience-dark body .hp-directory-archive summary,
html.hp-experience-dark body .hp-help__eyebrow {
	color: #d6b4ff;
}

/* Directorist's own "Popular"/"Boosted" badges measured 4.07:1 and lower
   against their own fills; the fills are darkened rather than the label
   lightened, because the label is already pure white. */
body .directorist-badge.directorist-badge-popular {
	background: #c4114a;
}

body .directorist-badge.directorist-badge-featured,
body .hp-directory-badge--boosted {
	background: #7a5c12;
}

/* The real listing editor is also used inside the business gateway surface. */
html.hp-experience-dark .hp-context-page--add-your-business #directorist-add-listing-form :is(.directorist-content-module, .directorist-form-element, .select2-selection) {
	background: var(--hp-color-surface) !important;
	border-color: var(--hp-color-border) !important;
	color: var(--hp-color-ink) !important;
}
html.hp-experience-dark .hp-context-page--add-your-business #directorist-add-listing-form :is(.directorist-form-label, .directorist-content-module__title h2, .directorist-form-group > p, .select2-selection__rendered) {
	color: var(--hp-color-ink) !important;
}
html.hp-experience-dark .hp-context-page--add-your-business #directorist-add-listing-form .multistep-wizard__nav__btn {
	color: var(--hp-color-ink);
}
html.hp-experience-dark .hp-context-page--add-your-business #directorist-add-listing-form .multistep-wizard__nav__btn.active {
	background: var(--hp-color-surface);
	color: var(--hp-color-link);
}
html.hp-experience-dark .hp-context-page--add-your-business #directorist-add-listing-form .quicktags-toolbar input {
	color: #333 !important;
	background: #f6f7f7 !important;
}

/* Keep the code-only toolbar out of the visual editor. */
.hp-context-page--add-your-business .tmce-active .quicktags-toolbar {
	display: none !important;
}
html.hp-experience-dark .hp-context-page--add-your-business .wp-switch-editor {
	background: #f6f7f7 !important;
	color: #333 !important;
}
