/*
Theme Name: Astra Child (Native)
Template: astra
Description: Native Gutenberg/PHP header, footer, and homepage template - no Elementor Theme Builder dependency.
Version: 1.0.0
Author: abestever
Text Domain: astra-child
*/

/* Native header (replaces the Elementor Pro Theme Builder Header #3345) -
   header.php now calls Astra's own astra_header(), which already produces
   a working logo/nav-menu/mobile-toggle (confirmed Astra's own nav walker
   generates the same arrow-icon/dropdown markup Elementor's nav-menu
   widget was using, and Astra's own theme JS - already loaded regardless
   of Elementor - already drives the interactions). This block re-applies
   the visual settings the Elementor Header used to carry in its own
   _elementor_data (background #FFF8DC, position:fixed + z-index:999 via
   the "header-wrap" css_classes setting) directly, since none of that
   exists anymore for astra_header()'s plain output to inherit. */
.astra-child-header {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	z-index: 999;
	background-color: #FFF8DC;
}

.astra-child-header .ast-container {
	max-width: var(--site-max-width);
}

/* Astra's own ".site-primary-header-wrap" carries a fixed 20px left
   padding around the logo/nav/search row - nudged to 27px/19px here to
   land the logo and search icon at the exact same 410px/1504px points
   the content boxes below already target (single-post-layout's own
   27px/19px padding, matched to the Elementor header's logo/search
   position back when this width-alignment work was first done). */
.astra-child-header .site-primary-header-wrap {
	padding-left: 27px;
	padding-right: 19px;
}

/* Slide-search input box - the search-submit button (with its icon) sits
   over the input's own right edge, and the input's default 9.75px right
   padding wasn't enough to clear it, so typed text ran under the icon.
   Widened to give the ~19px-wide icon clearance plus a comfortable gap. */
.ast-search-menu-icon.slide-search input.search-field {
	padding-right: 40px;
}

/* Mobile/tablet header row (<=921px, Astra's own mobile-menu breakpoint -
   above it a second, separate "desktop" row with the full nav menu is
   shown instead and this one is display:none, so this never touches
   desktop) - swaps the search icon and hamburger menu toggle so search
   sits to the left of the hamburger instead of the reverse. Both are
   direct children of the same flex row (.ast-grid-right-section), so a
   plain order swap is enough; :not(.ast-header-search) targets the
   toggle's own wrapper without needing to name its specific class. */
@media (max-width: 921px) {
	.site-header-primary-section-right.ast-grid-right-section > .ast-header-search {
		order: 1;
	}

	.site-header-primary-section-right.ast-grid-right-section > .ast-builder-layout-element:not(.ast-header-search) {
		order: 2;
	}

	/* The order swap above added no spacing of its own (they sat flush
	   against each other, 0px apart) - standard gap between the two. */
	.site-header-primary-section-right.ast-grid-right-section {
		gap: 16px;
	}

	/* Astra's own markup gives these two elements different internal
	   alignment by default (search: align-items:normal, hamburger:
	   align-items:center) - forced consistent here so both icons center
	   themselves the same way relative to their own box. */
	.astra-search-icon,
	.menu-toggle {
		align-items: center;
	}

	/* Hamburger lines were noticeably thinner than the search icon's own
	   visual weight at Astra's default 20px - sized up to match better.
	   !important needed to beat Astra's own more specific default rule
	   for .ast-mobile-svg. */
	.menu-toggle svg {
		width: 26px !important;
		height: 26px !important;
	}
}

/* Logo - a bit smaller than its native 185x78px per request (same resize
   previously applied to the Elementor header's own logo widget). */
.astra-child-header .custom-logo {
	width: 150px !important;
	height: auto !important;
}

/* Astra's own nav walker adds the same redundant arrow-icon markup to
   every leaf item inside a dropdown that the Elementor version had (see
   the .elementor-nav-menu--dropdown rule below, kept for reference/in
   case any old cached markup still uses it) - hidden the same way, keyed
   off Astra's own ".sub-menu" class this time since that's what
   astra_header()'s native markup actually uses. */
.main-header-menu .sub-menu .icon-arrow {
	display: none;
}

:root {
	/* Matches the Elementor Header's own boxed container width (1140px,
	   confirmed identical on production - an Elementor Kit setting, not
	   something this stylesheet controls) so this stylesheet's homepage/
	   archive/blog sections line up with the header above them instead of
	   drifting to Astra's separate 1200px theme container width. The
	   Elementor Footer uses a third, wider width (1220px) of its own -
	   pre-existing on production too, left as-is since nothing here
	   controls it either. */
	--site-max-width: 1140px;
	--site-accent: #b08967;
	--site-accent-hover: #a67f5e;
	/* Elementor Footer's own boxed width (1220px by its widget settings,
	   pre-existing on production too) - narrowed via the override below to
	   this same 1140px so it lines up with the header and this stylesheet's
	   own sections instead of running wider than everything else. */
	/* Header/footer are the original Elementor Header #3345 / Footer #564
	   (kept live, not replaced - see header.php/footer.php removal), which
	   ships its own fixed-header body padding via the site's existing
	   Custom CSS (post 16: body{padding-top:97.66px}, matching the header's
	   original 78px-tall logo). Shrinking that logo to 150x63px below
	   (a ~15px shorter header) made post 16's own padding-top too tall for
	   the header's new real height, opening a gap between the header and
	   whatever sits right below it (the sticky category subnav, most
	   visibly, since it stuck at the OLD taller offset while the header
	   itself had already gotten shorter above it). Overriding both the
	   body padding-top and this stylesheet's own --header-height here
	   (rather than editing post 16 itself, which is the site's own
	   pre-existing content, not this theme's) keeps the fix self-contained
	   to the actual cause - the logo resize - and easy to revert together
	   with it.
	   90px desktop / 87.67px mobile - re-measured directly against the
	   native astra_header() header (see header.php) after the header
	   rebuild, since Astra's own internal spacing around the logo/nav
	   differs slightly from the old Elementor header's, even with the
	   same 150x63 logo size. */
	--header-height: 90px;
}

body {
	padding-top: var(--header-height) !important;
}

@media (max-width: 767px) {
	:root {
		--header-height: 87.67px;
	}
}

/* The site's existing Elementor Header (#3345, kept live - see above) adds
   an ast-icon/icon-arrow SVG to EVERY nav menu item's markup, including
   leaf items inside a dropdown (e.g. "Bird Food"/"Bird Accessories" under
   "Bird") that have no further children of their own - present in the raw
   markup on production too, just visually redundant there since it's a
   generic toggle icon meant only for items that actually open a further
   submenu. This site's menu is only ever two levels deep, so every icon
   inside a dropdown's own <ul> is always on a leaf item - safe to hide
   unconditionally at that level, no need to special-case anything. Top-
   level items (Bird/Cat/Dog/Horse's own arrow, one level up) are untouched.
   Keying off Elementor/Astra's real markup class (not something added by
   this stylesheet) so it stays correct if the menu is edited later. */
.elementor-nav-menu--dropdown .icon-arrow {
	display: none;
}

a:focus {
	outline: none;
}

a,
button {
	touch-action: manipulation;
}

/* Sticky category sub-nav at the top of Blog/category/search listing pages. */
.home-category-subnav {
	position: sticky;
	top: var(--header-height);
	z-index: 500;
	background: #fff;
	border-bottom: 1px solid #e5e5e5;
	margin-bottom: 24px;
}

.home-category-subnav ul {
	max-width: var(--site-max-width);
	margin: 0 auto;
	padding: 0 20px;
	list-style: none;
	display: flex;
	flex-wrap: nowrap;
	justify-content: center;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	gap: 24px;
}

@media (max-width: 767px) {
	.home-category-subnav ul {
		/* Centering a horizontally-scrollable row clips its own start on
		   most browsers once the items are wider than the viewport (the
		   scroll container's "center" math doesn't leave room to scroll
		   back to the true first item) - left-aligned instead here, same
		   as before, so every category stays reachable by scrolling. */
		justify-content: flex-start;
		gap: 16px;
	}

	.home-category-subnav a {
		padding-top: 12px;
		padding-bottom: 12px;
	}
}

.home-category-subnav a {
	display: inline-block;
	padding: 14px 0;
	color: #111218;
	text-decoration: none;
	font-size: 14px;
	font-weight: 600;
	white-space: nowrap;
	border-bottom: 2px solid transparent;
}

.home-category-subnav a:hover,
.home-category-subnav a.is-active {
	color: var(--site-accent);
	border-bottom-color: var(--site-accent);
}

.home-hero-row {
	max-width: var(--site-max-width);
	margin: 0 auto;
	padding: 30px 20px;
	display: grid;
	grid-template-columns: 30fr 70fr;
	gap: 30px;
	align-items: start;
}

@media (max-width: 767px) {
	.home-hero-row {
		grid-template-columns: 1fr;
	}
}

.home-hero-row__col {
	min-width: 0;
}

.home-hero-row__new-updated h2 {
	font-size: 28px;
	font-weight: 700;
	color: #22242F;
	margin: 0 0 12px;
	padding-bottom: 8px;
	border-bottom: 2px solid var(--site-accent);
}

.home-hero-row__list {
	list-style: none;
	margin: 0 0 16px;
	padding: 0;
}

.home-hero-row__list li {
	margin: 0 0 12px;
}

.home-hero-row__list a {
	color: #111218;
	text-decoration: none;
	font-weight: 600;
}

.home-hero-row__list a:hover {
	color: var(--site-accent);
	text-decoration: underline;
}

.home-hero-row__see-everything {
	display: inline-block;
	border: 1px solid var(--site-accent);
	color: var(--site-accent);
	padding: 10px 24px;
	text-decoration: none;
	font-size: 15px;
}

.home-hero-row__see-everything:hover {
	background: var(--site-accent);
	color: #fff;
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
}

.home-slideshow {
	position: relative;
}

.home-slideshow__slide {
	display: none;
}

.home-slideshow__slide.is-active {
	display: block;
}

.home-slideshow__thumb {
	display: block;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	background: #f2f2f2;
}

.home-slideshow__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.home-slideshow__body {
	padding: 16px 0;
}

.home-slideshow__badge {
	display: inline-block;
	background: #eee;
	color: #555;
	font-size: 13px;
	padding: 4px 10px;
	margin-bottom: 10px;
}

.home-slideshow__title {
	font-size: 28px;
	font-weight: 700;
	color: #22242F;
	margin: 0 0 10px;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.home-slideshow__excerpt {
	font-size: 15px;
	color: #555;
	margin: 0 0 16px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.home-category-section {
	max-width: var(--site-max-width);
	margin: 0 auto;
	padding: 30px 20px;
}

/* Category/tag archive pages (and the Blog page, ID 575, which reuses this
   same section markup) already get 20px left/right padding one level up,
   on .ast-container itself (see the ".archive .site-content > .ast-container"
   rule further down, and the ".page:not(.home)..." rule which also matches
   the Blog page since it's a plain page under the hood) - .home-category-
   section's own 20px on top of that doubled it to 40px total. Zeroed here,
   archive/blog pages only (the homepage's own .home-category-section
   instances, which sit inside a .ast-container with no padding of its own,
   still need their full 20px). The Blog page doesn't get a body class of
   ".blog" (it's a custom page-blog.php template, not the site's Reading-
   settings "posts page"), so it's targeted by its page ID instead. */
.archive .home-category-section,
.page-id-575 .home-category-section {
	padding-left: 0;
	padding-right: 0;
}

.home-category-section__header {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	margin-bottom: 16px;
	border-top: 3px solid var(--site-accent);
	padding-top: 16px;
}

.home-category-section__header--no-divider {
	border-top: none;
	padding-top: 0;
}

.home-category-section__header h2 {
	font-size: 32px;
	font-weight: 700;
	color: #22242F;
	margin: 0;
}

.home-category-section__header a {
	font-size: 14px;
	color: var(--site-accent);
	white-space: nowrap;
}

@media (max-width: 767px) {
	.home-category-section__header {
		flex-direction: column;
		align-items: flex-start;
		gap: 8px;
	}

	.home-category-section__header h2 {
		font-size: 24px;
	}

	.home-category-section__header a {
		width: 100%;
	}
}

.home-listing-subtitle {
	font-size: 15px;
	font-weight: 600;
	color: #666;
	margin: 0 0 8px;
}

.home-listing-description {
	font-size: 15px;
	color: #45485F;
	margin: 0 0 20px;
	max-width: 800px;
}

.home-post-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 17px;
}

.home-post-grid--listing {
	grid-template-columns: repeat(4, 1fr);
}

@media (max-width: 1200px) {
	.home-post-grid--listing {
		grid-template-columns: repeat(3, 1fr);
	}
}

@media (max-width: 921px) {
	.home-post-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 544px) {
	.home-post-grid {
		grid-template-columns: 1fr;
	}
}

.home-post-card {
	background-color: #f6f6f6;
	box-shadow: 0 1px 25px rgba(0, 0, 0, 0.05);
	display: flex;
	flex-direction: column;
	min-width: 0;
	transition: box-shadow 0.25s ease;
}

@media (hover: hover) and (pointer: fine) {
	.home-post-card:hover {
		box-shadow: 0 6px 24px rgba(0, 0, 0, 0.12);
	}
}

.home-post-card__thumb {
	position: relative;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	background: #f2f2f2;
}

.home-post-card__thumb img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.home-post-card__body {
	padding: 20px;
	display: flex;
	flex-direction: column;
	flex: 1;
}

.home-post-card__title {
	font-size: 20px;
	font-weight: 700;
	margin: 0 0 10px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.home-post-card__title a {
	color: #111218;
	text-decoration: none;
}

.home-post-card__excerpt {
	font-size: 14px;
	color: #45485F;
	margin: 0 0 16px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.home-post-card__readmore {
	margin-top: auto;
	align-self: flex-start;
	color: var(--site-accent);
	background-color: transparent;
	border: none;
	padding: 0;
	font-size: 15px;
	font-weight: 600;
	text-decoration: none;
	transition: color 0.2s ease;
}

.home-post-card__readmore:hover {
	color: var(--site-accent-hover);
	text-decoration: underline;
}

.home-latest-post-row {
	max-width: var(--site-max-width);
	margin: 0 auto;
	padding: 30px 20px;
}

.home-latest-post-row__main {
	min-width: 0;
}

.home-latest-post {
	display: grid;
	grid-template-columns: 260px 1fr;
	gap: 20px;
	margin-bottom: 24px;
	padding-bottom: 24px;
	border-bottom: 1px solid #e5e5e5;
}

.home-latest-post__body {
	min-width: 0;
}

.home-latest-post:last-child {
	margin-bottom: 0;
	padding-bottom: 0;
	border-bottom: none;
}

@media (max-width: 544px) {
	.home-latest-post {
		grid-template-columns: 1fr;
	}
}

.home-latest-post__thumb {
	display: block;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	background: #f2f2f2;
}

.home-latest-post__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

@media (max-width: 799px) {
	#secondary {
		display: none;
	}
}

/* The Elementor Footer (#564, kept live) lays out each of its rows (above/
   primary/below) in its own .elementor-container, independently boxed at
   1220px by that widget's own settings - wider than the header (1140px)
   and this stylesheet's own sections above it. Narrowing every one of
   those rows to the same 1140px here (rather than editing the Footer
   template itself) keeps the fix in one place, reversible, and automatic
   for any row Elementor adds later - percentage-width columns (LINKS/ALL
   CATEGORIES/FOLLOW US ON are each a plain 25%) redistribute themselves
   inside whatever width their row container ends up with, so narrowing
   the container is enough on its own to pull them back in from the wider
   1220px spacing to line up under the narrower header/content above. */
.elementor-location-footer .elementor-container {
	max-width: var(--site-max-width) !important;
}

/* Native footer.php rebuild (replaces the Elementor Pro Theme Builder
   Footer #564) - these values (background color, section padding, column
   padding, heading typography) used to come from Elementor's own
   per-element dynamic CSS, generated automatically whenever Elementor's
   rendering engine processed post 564's _elementor_data. Since footer.php
   is now plain PHP and never calls into that engine, that CSS never gets
   generated - hardcoded here instead, values read directly from the old
   _elementor_data JSON so they match exactly. */
.astra-child-footer-main {
	background-color: #FFF8DC;
	padding: 50px 20px;
}

/* At tablet/mobile the accumulated left/right padding here plus the
   nested per-column and widget-wrap padding below (20px + 10px + 10px
   desktop, more at mobile) added up to ~50-65px before any actual text -
   far more than the ~20px inset the header/main-content area uses at the
   same widths. Tightened here and in the two nested rules below,
   unified across both ranges instead of mobile being even wider than
   tablet as it was before. */
@media (max-width: 1024px) {
	.astra-child-footer-main {
		padding-left: 10px;
		padding-right: 10px;
	}
}

/* As a flex item (this inner section's parent .elementor-widget-wrap is
   flex/flex-wrap) with no explicit width, this section's flex-basis:auto
   shrunk it to its own children's shrink-to-fit size (~610px) instead of
   the full 1140px row width the top 4-column section renders at - the
   top section only reaches 1140px because its fixed-pixel columns force
   it there, a mechanism this section's plain 50/50 percentage columns
   don't have. That squeezed the copyright text (wrapping "Webtricker
   LLC" onto its own line) and pulled the right-aligned Privacy Policy/
   Terms & Condition links in from the true right edge. */
.astra-child-footer-bottom {
	width: 100%;
	padding-top: 40px;
}

/* On mobile the 4 columns above (Amazon Disclaimer/LINKS/Categories/Follow
   Us) already stack vertically with their own natural flow, so the same
   40px gap before the Copyright/Privacy row (copied from Elementor's
   desktop-only setting for this section) reads as an oversized jump -
   tightened here for narrow viewports only. */
@media (max-width: 767px) {
	.astra-child-footer-bottom {
		padding-top: 16px;
	}
}

.elementor-element-23d5f72,
.elementor-element-96a6948,
.elementor-element-cb2304d,
.elementor-element-d5cc9a7 {
	padding: 10px;
}

@media (max-width: 1024px) {
	.elementor-element-23d5f72,
	.elementor-element-96a6948,
	.elementor-element-cb2304d,
	.elementor-element-d5cc9a7 {
		padding: 5px;
	}
}

/* 18px at every width, not just tablet-and-below - at the parent theme's
   default 22px, "LATEST POSTS" wrapped to 2 lines inside these narrow
   footer columns; 18px is short enough to always fit on one line. */
.elementor-location-footer h4.elementor-heading-title {
	font-weight: bold;
	text-transform: uppercase;
	margin-bottom: 20px;
	font-size: 18px;
}

/* "Main Categories" heading sits directly under the LINKS nav-menu with
   no gap - unlike the other 3 headings in this row, which each start
   their own column/widget-wrap and get natural spacing from that, this
   one is a second heading stacked inside the same column right after
   the menu above it. */
.footer-nav-menu + .elementor-widget-heading .elementor-heading-title {
	margin-top: 20px;
}

/* LINKS/Categories menu items - the menu itself has 0 configured gap
   between items (Elementor's own "menu_space_between" setting was 0);
   what actually separates stacked items is padding inside each link,
   which (like everything else here) stopped being generated once
   Elementor's rendering engine was replaced by this static markup. */
.elementor-location-footer .elementor-nav-menu .elementor-item {
	display: inline-block;
	padding: 5px 0;
	font-size: 15px;
}

@media (max-width: 1024px) {
	.elementor-location-footer .elementor-nav-menu .elementor-item {
		font-size: 14px;
		padding: 5px 0;
	}
}

/* Amazon Disclaimer body text and the "Main Categories" list - matched to
   the same 15px/14px sizing as the LINKS/Categories items above, so every
   piece of footer body text reads at one consistent size (only the
   copyright/Privacy Policy row, further below, is deliberately smaller).
   Scoped to the disclaimer column specifically (.elementor-element-
   23d5f72), not the more general ".astra-child-footer-main" - that
   section wraps the ENTIRE footer including the bottom copyright row
   (it isn't closed until after both rows), so a selector scoped to it
   was also matching - and outranking, on specificity - the copyright
   text's own more-specific-looking but lower-specificity selector. */
.elementor-element-23d5f72 .elementor-widget-text-editor > .elementor-widget-container > p,
.footer-recent-links a {
	font-size: 15px;
}

@media (max-width: 1024px) {
	.elementor-element-23d5f72 .elementor-widget-text-editor > .elementor-widget-container > p,
	.footer-recent-links a {
		font-size: 14px;
	}
}

/* "Read Full Disclaimer" CTA - sits on its own line below the disclosure
   paragraph, not inline with it. */
.footer-disclaimer-cta {
	margin-top: 10px;
	font-weight: bold;
}

/* Copyright text - deliberately smaller than the rest of the footer
   (13px desktop/mobile, 12px tablet - one step down from the 15px/14px
   used everywhere else above). Its column also gets a 20px bottom margin
   on mobile only, separating it from the Privacy Policy/Terms row once
   the two bottom-row columns stack on top of each other instead of
   sitting side by side. */
.astra-child-footer-copyright p {
	font-size: 13px;
}

/* Hidden by default (desktop/tablet keep the single-line "... Abestever |
   Powered by: ..." text) - only shown at <=767px, see the mobile media
   query further below. */
.footer-copyright-break {
	display: none;
}

@media (max-width: 1024px) {
	.astra-child-footer-copyright p {
		font-size: 12px;
	}
}

@media (max-width: 767px) {
	.astra-child-footer-copyright p {
		font-size: 13px;
	}

	.astra-child-footer-copyright {
		margin-bottom: 20px;
	}

	/* On mobile the "|" separator is replaced with its own line - "Copyright
	   (c) 2026 Abestever" / "Powered by: Webtricker LLC" instead of one long
	   line joined by a pipe, which was wrapping mid-sentence at narrow
	   widths. Desktop/tablet keep the single-line "|" version unchanged. */
	.footer-copyright-sep {
		display: none;
	}

	.footer-copyright-break {
		display: block;
	}
}

/* ==========================================================================
   Elementor base grid (footer) - as long as the Elementor plugin remained
   installed, even with the Header/Footer Theme Builder templates drafted,
   its own frontend.min.css loaded site-wide and quietly provided the base
   .elementor-container/.elementor-column/.elementor-widget-wrap flex-grid
   rules footer.php's markup (reused verbatim from the old Elementor Footer
   template) depends on. Uninstalling the plugin removed that base layer,
   collapsing all 4 footer columns into one full-width vertical stack.
   Reconstructed here (copied straight from Elementor's own frontend.min.css
   and widget-icon-list.min.css, still live on production at the time this
   was written) and scoped to .elementor-location-footer only, so footer.php
   keeps rendering identically without any Elementor plugin installed at
   all - the width:100% mobile override matches Elementor's own real
   behavior (verified directly against production at a 767px viewport),
   not a guess.
   ========================================================================== */
.elementor-location-footer .elementor-section {
	position: relative;
}

.elementor-location-footer .elementor-section.elementor-section-boxed > .elementor-container {
	max-width: 1140px;
}

.elementor-location-footer .elementor-container {
	display: flex;
	flex-wrap: wrap;
	margin-left: auto;
	margin-right: auto;
	position: relative;
}

.elementor-location-footer .elementor-column {
	position: relative;
	min-height: 1px;
	display: flex;
}

.elementor-location-footer .elementor-column > .elementor-widget-wrap {
	position: relative;
	width: 100%;
	display: flex;
	flex-wrap: wrap;
	align-content: flex-start;
}

/* Each widget inside a footer column (heading, nav-menu, text-editor,
   social-icons...) is a flex item in the flex-wrap row above with no
   explicit width, so it shrink-wraps to its own content instead of
   spanning the full column - usually invisible because most widgets are
   wide enough alone to force a wrap onto their own row anyway. It broke
   visibly for the "Main Categories" heading + its short Cat/Dog/Bird/
   Horse list at mobile widths: heading (~168px) + list (~40px, sized to
   its widest single-word item) together fit inside the ~230px column,
   so they sat side by side on one row instead of stacking. This is the
   same root cause already fixed individually for .astra-child-footer-
   bottom and .elementor-element-8cfe9ef elsewhere in this file - fixed
   generally here instead of patching each new instance as it's found. */
.elementor-location-footer .elementor-column > .elementor-widget-wrap > .elementor-element {
	width: 100%;
}

.elementor-location-footer .elementor-column.elementor-col-25 { width: 25%; }
.elementor-location-footer .elementor-column.elementor-col-50 { width: 50%; }
.elementor-location-footer .elementor-column.elementor-col-100 { width: 100%; }

@media (max-width: 767px) {
	.elementor-location-footer .elementor-column.elementor-col-25,
	.elementor-location-footer .elementor-column.elementor-col-50,
	.elementor-location-footer .elementor-column.elementor-col-100 {
		width: 100%;
	}
}

/* Matches Elementor's own generated per-column padding for this footer
   template (post-564.css) - 10px all around desktop, 15px at mobile. */
.elementor-location-footer .elementor-widget-wrap.elementor-element-populated {
	padding: 10px;
}

@media (max-width: 1024px) {
	.elementor-location-footer .elementor-widget-wrap.elementor-element-populated {
		padding: 5px;
	}
}

/* Bottom row (copyright / Privacy Policy) columns had no column padding of
   their own on the original Elementor template - confirmed by direct
   measurement against production (0px, not the 10px/15px default above). */
.elementor-location-footer .astra-child-footer-bottom .elementor-widget-wrap.elementor-element-populated {
	padding: 0;
}

/* Elementor's own visually-hidden utility class - used by the social icons'
   "Facebook"/"Instagram"/etc. screen-reader-only labels. Without this the
   labels render as plain visible text next to (now broken, icon-less)
   circles instead of being hidden from sighted users. */
.elementor-location-footer .elementor-screen-only {
	position: absolute;
	top: -10000em;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	border: 0;
}

/* Elementor's own icon-list base layout (Privacy Policy / Terms & Condition
   row) - list-style/margin reset plus the inline-flex row layout that
   .elementor-inline-items triggers. Without this the two links rendered as
   a bulleted vertical list instead of one row with the middot separator. */
.elementor-location-footer .elementor-icon-list-items {
	list-style-type: none;
	margin: 0;
	padding: 0;
}

.elementor-location-footer .elementor-icon-list-items.elementor-inline-items {
	display: flex;
	flex-wrap: wrap;
}

.elementor-location-footer .elementor-icon-list-item {
	margin: 0;
	padding: 0;
	display: flex;
	align-items: center;
}

/* Privacy Policy / Terms & Condition row - same deliberately-smaller
   sizing as the copyright text next to it (13px desktop/mobile, 12px
   tablet); right-aligned desktop, left-aligned mobile (both classes were
   already present on the element from the original markup, just needed
   the CSS behind them). */
.elementor-element-8cfe9ef .elementor-icon-list-text {
	font-size: 13px;
}

/* text-align:right above never actually moved anything - the icon-list is
   display:flex (see .elementor-icon-list-items.elementor-inline-items
   below), and text-align has no effect on flex children. Two things were
   needed instead: the widget wrapper itself was shrink-wrapped to its own
   content width (another flex item with no explicit width, same pattern
   as the .astra-child-footer-bottom bug fixed earlier) rather than
   spanning the column's full width, leaving no room to align into; and
   the flex row itself needed justify-content:flex-end, since its default
   (flex-start) packs items to the left regardless of the ancestor's
   text-align. */
.elementor-element-8cfe9ef {
	width: 100%;
}

.elementor-element-8cfe9ef.elementor-align-right .elementor-icon-list-items.elementor-inline-items {
	justify-content: flex-end;
}

@media (max-width: 1024px) {
	.elementor-element-8cfe9ef .elementor-icon-list-text {
		font-size: 12px;
	}
}

@media (max-width: 767px) {
	.elementor-element-8cfe9ef .elementor-icon-list-text {
		font-size: 13px;
	}

	.elementor-element-8cfe9ef.elementor-mobile-align-left {
		text-align: left;
	}

	/* Same reasoning as the desktop justify-content:flex-end fix above -
	   without this, the unconditional flex-end from that rule would win
	   here too (text-align has no effect either way), pushing the links
	   to the right on mobile instead of the left this class intends. */
	.elementor-element-8cfe9ef.elementor-mobile-align-left .elementor-icon-list-items.elementor-inline-items {
		justify-content: flex-start;
	}
}

/* The footer's primary row (Logo/description, LINKS, ALL CATEGORIES,
   FOLLOW US ON) is 4 Elementor columns forced to a fixed 25% width each -
   fine for the Logo/description column (element -23d5f72), which genuinely
   needs the space for its wrapped paragraph text, but LINKS/ALL CATEGORIES/
   FOLLOW US ON (-96a6948/-cb2304d/-d5cc9a7 - these element IDs are stable,
   generated once by Elementor for this specific template and unchanged
   unless someone edits it in the Elementor editor) only need as much width
   as their own short link list/icon row actually takes, leaving a large
   empty strip on the right of each column's own reserved 25% share (most
   visible after the last column's few social icons). Switching just those
   3 columns from fixed 25% to shrink-to-content, combined with the row's
   own justify-content:space-between, keeps the Logo column pinned to the
   left at its original width (unlike an earlier version of this rule that
   shrank ALL 4 columns including Logo - that let its paragraph text stop
   wrapping and overflow hugely, since flex items default to min-width:auto
   in a nowrap row) while LINKS/ALL CATEGORIES/FOLLOW US ON pack together
   and the group's own right edge lines up with the row's right edge. */
.elementor-location-footer .elementor-container:has(> .elementor-column.elementor-col-25) {
	justify-content: space-between;
}

/* A true shrink-to-content width (flex-basis:auto) fought with the site's
   own existing Custom CSS (post 16: ".footer-nav-menu ... li{width:100%}",
   there to stack LINKS into one link per line inside a *fixed*-width
   column) - with no fixed width left to be 100% of, the browser's auto-
   width calc went circular and, combined with Logo's own flex-shrink
   pulling it down to make room, squeezed the Logo column to ~100px and
   its paragraph down to single words per line. Fixed pixel widths (each
   comfortably wider than its own content - "DISCLAIMER"/"ALL CATEGORIES"/
   the 4 social icons) sidestep that circularity entirely and leave Logo's
   own column untouched at its original 25%. */
.elementor-location-footer .elementor-element-96a6948,
.elementor-location-footer .elementor-element-cb2304d,
.elementor-location-footer .elementor-element-d5cc9a7 {
	width: 230px !important;
	min-width: 0 !important;
	max-width: none !important;
	flex-grow: 0 !important;
	flex-shrink: 0 !important;
	flex-basis: 230px !important;
}

/* Between 768-1024px the row's real available width (measured ~713-940px
   across that range) is narrower than 237px (Logo/Disclaimer's own 25%)
   + 3*230px needs (927px+) - the 4th column (Follow Us) was overflowing
   onto its own row. A percentage width here scales with the actual
   available space instead of guessing a single fixed px value for the
   whole range, keeping all 4 columns on one row like at both 1024px+ and
   (via the fixed-px stacking below) under 767px. */
@media (min-width: 768px) and (max-width: 1024px) {
	.elementor-location-footer .elementor-element-96a6948,
	.elementor-location-footer .elementor-element-cb2304d,
	.elementor-location-footer .elementor-element-d5cc9a7 {
		width: 20% !important;
		flex-basis: 20% !important;
	}
}

/* Footer bottom row's Privacy Policy / Terms & Condition links (Elementor
   icon-list widget 8cfe9ef) - a middle-dot separator between them, same
   idea as the widget's own existing space_between gap either side of it.
   margin-left balances margin-right - without it the dot had no space on
   its left and sat glued directly onto "Privacy Policy". */
.elementor-element-8cfe9ef .elementor-icon-list-item + .elementor-icon-list-item::before {
	content: "\00B7";
	margin-left: 14px;
	margin-right: 14px;
	color: inherit;
	font-size: 28px;
	font-weight: 700;
	line-height: 1;
	vertical-align: middle;
}

/* LINKS column's nav-menu (footer-nav-menu) - the site's own pre-existing
   Custom CSS (post 16) forces each item to width:100% inside this flex
   row, i.e. one link per line; the actual item-to-item separation comes
   from the padding on .elementor-item above (8px/6px, matching Elementor's
   own "padding_vertical_menu_item" setting), not a gap here - a gap here
   on top of that padding would double up the spacing. */
.footer-nav-menu .elementor-nav-menu {
	display: flex;
	flex-wrap: wrap;
	list-style: none;
	margin: 0;
	padding: 0;
}

/* Categories column's nav-menu never got the same list-style reset as
   footer-nav-menu above, so it was still using the browser's default
   <ul> bullet + ~40px left indent, pushing it out of alignment with the
   "CATEGORIES" heading above it. */
.elementor-element-cb2304d .elementor-nav-menu {
	list-style: none;
	margin: 0;
	padding: 0;
}

/* "Main Categories" list under the footer's LINKS column
   (astra_child_footer_main_categories() - see footer.php) - same
   list-reset/link-color/spacing as the nav-menu items directly above it,
   so the two blocks read as one continuous list rather than visibly
   different components stacked together. */
.footer-recent-links {
	list-style: none;
	margin: 0;
	padding: 0;
}

.footer-recent-links li {
	margin: 0 0 8px;
}

.footer-recent-links a {
	display: inline-block;
	color: var(--site-accent);
	text-decoration: none;
}
/* font-size handled above (scoped with the disclaimer text, both matched
   to the same 15px/14px used across the rest of the footer); hover state
   handled by the unified ".elementor-location-footer a:not(.elementor-
   icon):hover" rule (color + 5px/2px transform nudge) instead of its own
   separate rule here, so Main Categories links get the exact same hover
   behavior as every other footer link. Resting color is --site-accent,
   not --site-accent-hover (a prior bug here) - using the hover color as
   the resting color meant hovering these links never actually changed
   color, just shifted position, unlike LINKS/Categories which visibly
   transition from --site-accent to --site-accent-hover. display:
   inline-block is also required - the hover rule's translateX(5px) does
   not reliably render on a plain inline element (this <a> had no display
   override, unlike .elementor-item which is already inline-block), so
   the color/underline hover worked but the shift silently never did. */

/* Footer: rendered entirely by Astra core's own footer-builder (astra_footer()
   in footer.php) using its native styling - no custom footer CSS needed. */
.site-footer {
	background-color: #f7f7f7;
	border-top: 1px solid #e5e5e5;
}

.site-below-footer-wrap .ast-builder-grid-row {
	border-top: 1px solid #e5e5e5;
	padding-top: 24px;
}

/* The footer is the kept-live Elementor Footer template (#564), rendered
   via .elementor-location-footer, not Astra's own #colophon builder markup
   - #colophon doesn't exist on the page at all, so a prior "#colophon a"/
   "#colophon a:hover" rule here silently matched nothing and every footer
   link (Amazon Disclaimer body links, LINKS/CATEGORIES nav items, Powered
   by, Privacy Policy/Terms & Condition) had no hover state. Scoped to the
   real wrapper instead, and excludes the social icons (.elementor-icon),
   which get their own hover treatment below since they're colored circular
   buttons, not text links. */
.elementor-location-footer a:not(.elementor-icon) {
	transition: transform 0.15s ease, color 0.15s ease;
}

/* Horizontal-only 5px nudge - translateX, not translate(x,y), so there is
   zero vertical movement (no top/bottom shift at all). transform (not
   margin/padding) keeps this purely visual and layout-neutral, so it
   can't push surrounding footer content around either. */
.elementor-location-footer a:not(.elementor-icon):hover {
	color: var(--site-accent-hover);
	text-decoration: underline;
	transform: translateX(5px);
}

/* Follow Us icons row - Elementor's own social-icons widget CSS lays this
   out via a "elementor-grid-N" column-count modifier class that the old
   markup carried (dropped in the native footer.php rebuild, since it's an
   Elementor-internal convention, not something meaningful outside its own
   widget CSS) - without it, the icons defaulted to stacking vertically
   instead of in a row. Set explicitly instead of depending on Elementor's
   own grid class/CSS, so it stays correct once Elementor is uninstalled. */
.elementor-social-icons-wrapper {
	display: flex !important;
	flex-direction: row !important;
	flex-wrap: wrap !important;
	justify-content: flex-start !important;
	gap: 14px !important;
	word-spacing: normal !important;
}

/* At tablet width the Follow Us column is narrow enough (~130-160px
   content width) that 4 icons at the 14px gap above wrapped onto 2 rows
   (3 + 1) - tightening the gap here is enough to keep all 4 on one row
   without needing to shrink the icons themselves further. */
@media (max-width: 1024px) {
	.elementor-social-icons-wrapper {
		gap: 8px !important;
	}
}

/* Elementor's own CSS (active because of the elementor-grid-0 class,
   needed to avoid the vertical single-column grid bug found earlier) sets
   each icon's wrapper span to display:inline-block with margin-bottom
   from a CSS variable, and controls horizontal gap via word-spacing on
   the parent - an old pre-flexbox spacing technique. Forcing !important
   here since that mechanism kept winning over a plain (non-!important)
   flex/gap rule on the parent. */
.elementor-social-icons-wrapper .elementor-grid-item {
	display: flex !important;
	margin-bottom: 0 !important;
}

/* Elementor's own default icon size (25px + padding, ~50px circles total)
   was too large, especially on mobile where 4 icons at that size wrap onto
   2 rows - sets Elementor's own --icon-size/--icon-padding custom
   properties (its width/height CSS already reads these) to a smaller
   value instead of overriding the whole rule.

   display/width/height/border-radius/color below are Elementor's own base
   circle-button CSS for this class (widget-social-icons.min.css), copied
   here since that stylesheet no longer loads at all now that Elementor is
   uninstalled - without it these were plain unstyled inline icons, not
   colored circles. */
.elementor-location-footer .elementor-icon.elementor-social-icon {
	--icon-size: 18px;
	--icon-padding: 0.4em;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: calc(var(--icon-size) + (2 * var(--icon-padding)));
	height: calc(var(--icon-size) + (2 * var(--icon-padding)));
	border-radius: 50%;
	color: #fff;
}

/* Per-network brand colors - Elementor's own defaults (widget-social-icons.min.css),
   copied here for the same reason as the base circle CSS above. Not folded
   into the base rule above (as a fallback background-color) since that
   selector's extra ".elementor-icon" class would out-specificity these
   single-class overrides and always win instead. */
.elementor-location-footer .elementor-social-icon-facebook { background-color: #3b5998; }
.elementor-location-footer .elementor-social-icon-instagram { background-color: #262626; }
.elementor-location-footer .elementor-social-icon-youtube { background-color: #cd201f; }
.elementor-location-footer .elementor-social-icon-pinterest { background-color: #bd081c; }

/* This has to come AFTER the unconditional 18px rule above (same
   selector) to actually win on mobile - it was previously declared
   earlier in the file, which meant the later unconditional rule always
   overrode it regardless of viewport width, leaving icons stuck at the
   desktop 18px/32px-circle size on mobile instead of shrinking. */
@media (max-width: 1024px) {
	.elementor-location-footer .elementor-icon.elementor-social-icon {
		--icon-size: 13px;
	}
}

.elementor-location-footer .elementor-icon {
	transition: opacity 0.2s ease, transform 0.2s ease;
}

.elementor-location-footer .elementor-icon:hover {
	opacity: 0.85;
	transform: translateY(-2px);
}

@media (max-width: 544px) {
	.ast-footer-row-mobile-stack .ast-builder-grid-row-container-inner {
		grid-template-columns: repeat(2, 1fr) !important;
		text-align: left !important;
	}

	.ast-footer-row-mobile-stack .ast-builder-footer-grid-column {
		text-align: left !important;
	}
}

/* Astra's own dynamic CSS caps .archive/.search/.blog body contexts at
   blog-max-width (1000px, set in the Customizer) via the same
   ".site-content > .ast-container" selector at the same 922px breakpoint -
   this repeats that selector list so ours wins on source order (both are
   plain class selectors of equal specificity) regardless of whether
   Astra's inline <style> block happens to be output before or after this
   stylesheet in <head>. */
.single-post .site-content > .ast-container,
.page .site-content > .ast-container,
.archive .site-content > .ast-container,
.search .site-content > .ast-container,
.blog .site-content > .ast-container {
	max-width: var(--site-max-width);
}

.page:not(.home):not(.astra-child-plain-page) .site-content > .ast-container,
.archive .site-content > .ast-container,
.search .site-content > .ast-container,
.blog .site-content > .ast-container {
	padding-left: 20px;
	padding-right: 20px;
}

/* Single posts get no side padding here (unlike page/archive/search/blog
   above) - #primary is a flex child of .ast-container and sizes against
   its content box, so any side padding here quietly eats into the 1140px
   .single-post-layout expects to fill (810 + 30 + 300), pushing the
   sticky ad column past the visible edge. .single-post-layout's own
   children (the 810px article, the 300px ad) provide their own spacing/
   margins instead.

   !important is required here: Astra's own Customizer-driven CSS (freshly
   generated inline in <head> on every request, not from a stylesheet
   file) includes ".ast-separate-container #content .ast-container
   {padding-left:0.54em;padding-right:0.54em;}" - present specifically on
   single-post pages via the "ast-separate-container" body class. That
   selector has an ID (#content), which beats any number of stacked
   classes regardless of source order, so a plain (non-!important)
   override here can never win against it - confirmed by inspecting
   Astra's own generated <style> block directly, not guessed. */
.single-post .site-content > .ast-container,
.astra-child-plain-page .site-content > .ast-container {
	padding-left: 0 !important;
	padding-right: 0 !important;
}

/* Astra's own single-post/page article element (.ast-article-single)
   carries a separate responsive left/right padding of its own (86.71px at
   this viewport, computed from a percentage-based Customizer setting, not
   a fixed value) - zeroing it here too so .single-post-layout's own 810px
   article column actually starts flush at the container's left edge
   instead of being pushed in by an extra ~87px on each side. */
.single-post .ast-article-single,
.astra-child-plain-page .ast-article-single {
	padding-left: 0 !important;
	padding-right: 0 !important;
}

.page .entry-title {
	font-size: 42px;
	font-weight: 700;
	color: var(--site-accent);
}

/* Bottom breathing room below a plain page's content (About, Privacy
   Policy, Terms & Condition, Disclaimer, etc.) - the last paragraph
   otherwise runs right up against the footer with no gap at all. */
.page.page-template-default .entry-content {
	padding-bottom: 60px;
}

/* Astra wraps a single post's content in several nested divs on the way
   down to .entry-content, at least two of which (the article itself, and
   an inner ".ast-post-format-*" wrapper one level above entry-content) are
   each narrower than #primary's own 1100-1140px - Astra's "single-width"
   Customizer setting, expressed as a percentage rather than a fixed value,
   so each successive wrapper compounds slightly narrower than the last
   (measured: #primary 1100px -> article 1100px -> .ast-post-format-*
   927px -> .entry-content 927px). Fine for plain article prose, but it
   was clipping .single-post-layout's own 810+30+300=1140 row and pushing
   the sticky ad column out past the visible edge. Single posts' entire
   content is that layout row now (see the_content filter in functions.php),
   so every one of those wrappers just needs to match the full 1140px
   they're already sitting inside rather than independently narrowing it
   further - width:100% (not a second independent max-width) is what
   actually stops each one from re-imposing its own percentage-based
   narrowing on top of the next. */
.single-post #primary,
.single-post .ast-article-single,
.single-post .site-main,
.single-post [class*="ast-post-format-"],
.single-post .entry-content,
.astra-child-plain-page #primary,
.astra-child-plain-page .ast-article-single,
.astra-child-plain-page .site-main,
.astra-child-plain-page [class*="ast-post-format-"],
.astra-child-plain-page .entry-content {
	max-width: var(--site-max-width);
	width: 100%;
}

/* Product image + "See price on amazon" button, produced by the Step 1
   Elementor-to-Gutenberg content migration (wp:group.product-cta wrapping
   the image + buttons block pulled from each product's own 2-column
   image/button section) - fixed 500x500 image on the left, button filling
   the remaining width on the right, vertically centered against it.
   The Gutenberg Group block (product-cta's own outer div) nests its real
   children one level deeper inside .wp-block-group__inner-container - the
   flex row has to be applied there too, or the image/button (children of
   that inner div, not of .product-cta itself) never actually see it and
   just stack as normal block content instead of sitting side by side. */
.product-cta,
.product-cta > .wp-block-group__inner-container {
	display: flex;
	align-items: center;
	gap: 24px;
	margin: 24px 0;
}

.product-cta .wp-block-image {
	flex: 0 0 500px;
	margin: 0;
}

.product-cta .wp-block-image img {
	width: 500px;
	height: 500px;
	object-fit: cover;
	display: block;
}

.product-cta .wp-block-buttons {
	flex: 1 1 auto;
	margin: 0;
}

.product-cta .wp-block-button {
	width: 100%;
}

.product-cta .wp-block-button__link {
	display: block;
	width: 100%;
	text-align: center;
	box-sizing: border-box;
	padding: 16px 12px !important;
	background-color: var(--site-accent) !important;
	border-color: var(--site-accent) !important;
	font-size: 14px;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.product-cta .wp-block-button__link:hover {
	filter: brightness(1.1);
}

@media (max-width: 700px) {
	.product-cta,
	.product-cta > .wp-block-group__inner-container {
		flex-wrap: wrap;
	}

	.product-cta .wp-block-image {
		flex-basis: 100%;
	}

	.product-cta .wp-block-image img {
		width: 100%;
		height: auto;
		aspect-ratio: 1 / 1;
	}

	.product-cta .wp-block-buttons {
		flex-basis: 100%;
	}
}

/* Single-post 2-column layout (810px article + 254px sticky ad, 30px gap,
   27px/19px left/right padding on the row itself - see the_content filter
   in functions.php that wraps entry-content in this markup).
   810 + 30 + 254 + 27 + 19 = 1140, matching --site-max-width, but the
   27px/19px padding means the VISIBLE content (white box left edge, ad
   box right edge) sits inset from the raw container edge - deliberately,
   to match the kept-live Elementor header's own logo (410px, 27px inset
   from its container) and search icon (1504px, 19px inset), confirmed by
   direct measurement at 1920px viewport rather than assumed. The ad
   column was narrowed (was a flush 300px) rather than the 810px article,
   since article reading width was the more deliberate of the two
   original choices. */
.single-post-layout {
	display: flex;
	align-items: flex-start;
	gap: 30px;
}

/* Scoped to the same desktop breakpoint as the 810/30/254 column split
   below (max-width:799px reverts to a stacked, full-width mobile layout
   where this row's own left/right padding wouldn't have any header
   logo/search-icon position to match against). */
@media (min-width: 800px) {
	.single-post-layout {
		box-sizing: border-box;
		padding-left: 27px;
		padding-right: 19px;
	}
}

.single-post-layout__main {
	flex: 0 0 810px;
	min-width: 0;
	box-sizing: border-box;
	background-color: #fff;
	padding: 24px 30px;
}

/* Astra renders the post title/meta (.entry-header) as a sibling of
   .entry-content, above where the_content filter in functions.php wraps
   things into .single-post-layout - so it sat outside that wrapper's own
   810px/padding entirely, full-width with no side padding of its own
   (title text touching the left edge). Matching its left/right padding to
   .single-post-layout__main here keeps the title aligned with the content
   below it - kept transparent (not the same white card background as
   .single-post-layout__main) per request, so only the image/text content
   below sits on white, not the title area itself. */
.single-post .entry-header,
.astra-child-plain-page .entry-header {
	max-width: 810px;
	box-sizing: border-box;
	padding: 24px 30px 0;
}

/* margin (not padding) shifts the title's own box to start/end at the
   same 410px/1504px points as .single-post-layout below it (see that
   rule's own comment) - .entry-header is the_content filter's wrapper's
   sibling, not its child, so it doesn't inherit that padding automatically
   and needs the same 27px/19px inset applied independently. Desktop-only,
   same reasoning as .single-post-layout's own padding above. */
@media (min-width: 800px) {
	.single-post .entry-header,
	.astra-child-plain-page .entry-header {
		margin-left: 27px;
		margin-right: 19px;
	}
}

/* Amazon disclosure directly under the title/meta (astra_single_header_bottom
   hook in functions.php, posts only - not plain pages) - .single-post-
   disclosure is actually a CHILD of .entry-header (not a sibling, despite
   what it looks like from the template code), so it already sits inside
   entry-header's own 27px margin + 30px padding without needing any of
   its own - adding margin here on top of that double-counted the offset
   and pushed it 57px too far right (confirmed by inspecting the actual
   parent element directly, not assumed from the template structure). No
   padding/margin of its own at all; the negative margin below is the only
   adjustment needed, purely to cancel out .amazon-disclosure's own inline
   padding+border (see functions.php) so its TEXT lines up with the title
   above it instead of sitting a further 20px to the right of it. */
.single-post-disclosure {
	max-width: 810px;
	box-sizing: border-box;
}

.single-post-disclosure .amazon-disclosure {
	margin: 16px -16px 0 -20px;
}

/* Astra's comments_template() call is also a sibling of .entry-content
   (like .entry-header above), rendered after the article closes - same
   full-width/no-padding issue, fixed the same way: constrained to the
   810px left column with matching side padding and a white background so
   it reads as a continuation of the article card instead of a full-width
   strip below it. Plain pages rarely have comments enabled, but this
   covers it if one ever does. */
.single-post .comments-area,
.astra-child-plain-page .comments-area {
	max-width: 810px;
	box-sizing: border-box;
	background-color: #fff;
	padding: 24px 30px;
}

/* Astra's post-navigation (Previous/Next Post) is the same kind of
   entry-content sibling as .entry-header/.comments-area above - same fix. */
.single-post .post-navigation {
	max-width: 810px;
	box-sizing: border-box;
	background-color: #fff;
	padding: 24px 30px;
}

/* "Related Products" - appended to the end of a single post's own content
   (see the_content filter in functions.php), so it's already inside
   .single-post-layout__main's 810px/white/30px-padding box and needs no
   width/background of its own - just its internal 2-column grid. */
.related-products {
	margin-top: 30px;
	padding-top: 30px;
	border-top: 1px solid #e5e5e5;
}

.related-products__title {
	font-size: 26px;
	font-weight: 700;
	margin: 0 0 20px;
}

.related-products__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 20px;
}

@media (max-width: 500px) {
	.related-products__grid {
		grid-template-columns: 1fr;
	}
}

.related-products__thumb {
	display: block;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	background: #f2f2f2;
}

.related-products__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.related-products__card-title {
	font-size: 17px;
	font-weight: 700;
	margin: 12px 0 6px;
}

.related-products__card-title a {
	color: #111218;
	text-decoration: none;
}

.related-products__card-title a:hover {
	color: var(--site-accent);
}

.related-products__card-cat {
	display: inline-block;
	font-size: 14px;
	color: var(--site-accent);
	text-decoration: none;
}

.related-products__card-cat:hover {
	text-decoration: underline;
}

/* Astra's own single-post article styling ("ast-blog-single-style-1")
   gives .ast-article-single a white background across its own full width
   (1140px - both the 810px content column AND the 300px ad column, plus
   the 30px gap between them) - background-color:transparent here leaves
   that to .single-post-layout__main and .entry-header alone, each
   independently already scoped to just the 810px left column. */
/* Astra's own matching rule is scoped to ".ast-separate-container
   .ast-article-single:not(.ast-related-post)" - .ast-separate-container
   is a class on <body> itself (a "container layout" setting), same as
   .single-post, not a separate ancestor wrapping it - "body.single-post
   .ast-article-single" (compound class on body, no space) is what
   actually matches; ".single-post .ast-separate-container ..." (space
   between them) was requiring .ast-separate-container to be a descendant
   of some other .single-post element, which never exists, so that
   earlier version of this rule silently matched nothing at all. */
body.single-post .ast-article-single:not(.ast-related-post) {
	background-color: transparent !important;
}

/* Astra's own default top spacing above a single post's title - #primary's
   52px margin-top (page-level breathing room) plus .ast-article-single's
   own separate 69.42px padding-top (originally the inside-the-white-card
   padding for its now-transparent background above) - stacked with this
   stylesheet's own 24px .entry-header padding-top, that added up to
   145px of empty space above the title. Both were sized for a page
   without .single-post-layout's own 810px card immediately below doing
   the actual framing now; reduced together here rather than removed
   outright, so there's still some clearance below the fixed header. */
.single-post #primary {
	margin-top: 20px !important;
}

/* #primary itself carries a left/right padding (confirmed via direct
   devtools inspection - shows as "padding: 0 20px" against this exact
   selector, source not fully traceable to one specific Astra rule, but
   real and active regardless) on top of everything else already zeroed
   on .ast-container/.ast-article-single - this is what was squeezing
   #primary's own content area to ~1100px against .single-post-layout's
   fixed 1140px requirement (810 + 30 + 300), overflowing it ~20px past
   the right edge relative to the header/footer above and below. */
.single-post #primary,
.astra-child-plain-page #primary {
	padding-left: 0 !important;
	padding-right: 0 !important;
}

.single-post .ast-article-single {
	padding-top: 0 !important;
}

.single-post-layout__ad {
	flex: 0 0 254px;
	position: sticky;
	/* var(--header-height), not a hardcoded 97.66px - this was still the
	   pre-logo-resize header height (see --header-height's own 82.66px
	   fix); no +20px extra offset per request, sits flush against the
	   header's real bottom edge like everything else does now. */
	top: var(--header-height);
}

@media (max-width: 799px) {
	.single-post-layout {
		flex-direction: column;
	}

	.single-post-layout__main,
	.single-post-layout__ad {
		flex-basis: auto;
		width: 100%;
	}

	.single-post-layout__ad {
		position: static;
	}
}

/* Sticky rotating text ad, 254x500 (matches the ad column's own width) -
   placeholder slides (see functions.php) standing in for a real ad
   creative until one exists; swap the slide text or this whole block for
   an actual asset whenever one is supplied. */
.ad-loop-slider {
	position: relative;
	width: 254px;
	height: 500px;
	background: var(--site-accent);
	overflow: hidden;
}

.ad-loop-slider__slide {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 40px;
	opacity: 0;
	transition: opacity 0.6s ease;
}

.ad-loop-slider__slide.is-active {
	opacity: 1;
}

.ad-loop-slider__slide p {
	margin: 0;
	color: #fff;
	font-size: 22px;
	font-weight: 700;
	text-align: center;
	line-height: 1.4;
}

/* Smooth fade-in/out slideshow replacing runs of 2+ full-size images
   stacked back to back in an article's own content (see
   about-slideshow.php - a one-off script run against the About page's own
   content, not a site-wide conversion; other posts didn't have this
   pattern). Fixed aspect-ratio + object-fit:cover keeps the box a
   reasonable height regardless of how tall the original photos are
   (several ran to 1000px+ tall stacked one after another). */
.content-slideshow {
	position: relative;
	aspect-ratio: 16 / 10;
	overflow: hidden;
	background: #f2f2f2;
	margin: 24px 0;
}

.content-slideshow__slide {
	position: absolute;
	inset: 0;
	opacity: 0;
	transition: opacity 0.8s ease;
}

.content-slideshow__slide.is-active {
	opacity: 1;
}

.content-slideshow__slide img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.entry-content .wp-block-button__link {
	background-color: var(--site-accent) !important;
	color: #fff !important;
	border-color: var(--site-accent) !important;
	border-radius: 4px !important;
}

.entry-content .wp-block-button__link:hover {
	filter: brightness(1.1);
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
	transition: filter 0.2s ease, box-shadow 0.2s ease;
}

.entry-content .wp-block-heading {
	margin-top: 30px;
}

/* Standard spacing below every image in the article body (the hero/first
   image included) and its wrapping figure - core Gutenberg image blocks
   carry no bottom margin of their own by default, so an image sitting
   directly above a paragraph (or another image, as in the product-cta
   pairs) had no visible gap between them at all. */
.entry-content .wp-block-image,
.entry-content figure {
	margin-top: 24px;
	margin-bottom: 24px;
}

#ast-scroll-top {
	background-color: var(--site-accent) !important;
}

.entry-content a {
	color: var(--site-accent);
}

.entry-content a:hover {
	color: var(--site-accent-hover);
}

.navigation.pagination {
	margin-top: 30px;
}

.navigation.pagination .nav-links {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.navigation.pagination .page-numbers {
	display: inline-block;
	padding: 8px 14px;
	border: 1px solid #e0e0e0;
	color: #111218;
	text-decoration: none;
	font-size: 14px;
}

.navigation.pagination .page-numbers.current {
	background-color: var(--site-accent);
	color: #fff;
	border-color: var(--site-accent);
}

.navigation.pagination .page-numbers:hover {
	border-color: var(--site-accent);
}

.site-browse-categories {
	margin-bottom: 24px;
}

.site-browse-categories h3 {
	margin: 0 0 0.5em;
}

.site-browse-categories ul {
	list-style: disc;
	padding-left: 1.5em;
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	gap: 0 1.5em;
}

.site-browse-categories li {
	margin: 0.2em 0;
}

.site-browse-categories a {
	text-decoration: underline;
}

ins.adsbygoogle[data-ad-status="unfilled"] {
	display: none !important;
}
