/*
 * CSS Exception VBS-001
 * Scope: markup generated by the catalogue query shortcodes only.
 * Divi owns the surrounding Tabs/sections/templates. Native Divi has no
 * configurable card-grid owner for this non-WooCommerce dynamic query.
 */
.vbs-featured-products,
.vbs-related-products {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
	gap: 28px;
}

.vbs-collection-products {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	column-gap: 30px;
	row-gap: 54px;
}

.vbs-collection-toolbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	border-bottom: 1px solid #e6e6e6;
	margin: 0 0 21px;
	padding: 0 0 22px;
}

.vbs-collection-toolbar select {
	min-width: 148px;
	padding: 9px 34px 9px 12px;
	border: 1px solid #e6e6e6;
	background: #fff;
	color: #555;
	font: 13px 'Open Sans', sans-serif;
}

.vbs-collection-toolbar__label {
	margin-right: 16px;
	color: #333;
	font: 13px 'Open Sans', sans-serif;
	text-transform: uppercase;
}

.vbs-collection-view { display: flex; gap: 8px; }
.vbs-collection-view a { display: grid; width: 34px; height: 34px; place-items: center; color: #555; border: 1px solid #e6e6e6; text-decoration: none; }
.vbs-collection-view a.is-active { color: #fff; background: #dd1a78; border-color: #dd1a78; }
.vbs-collection-products--list { grid-template-columns: 1fr; }
.vbs-collection-products--list .vbs-collection-product { display: grid; grid-template-columns: 180px 1fr; align-items: center; text-align: left; }
.vbs-collection-products--list .vbs-collection-product__image { height: 180px; }
.vbs-collection-products--list .vbs-collection-product__title { margin: 0; text-align: left; }

.vbs-collection-product {
	min-width: 0;
	text-align: center;
}

.vbs-collection-product__image {
	display: block;
	height: 444px;
}

.vbs-collection-product__image img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.vbs-collection-product h2.vbs-collection-product__title {
	margin: 14px 0 0;
	font-family: 'Open Sans', sans-serif !important;
	font-size: 14px !important;
	font-weight: 700 !important;
	line-height: 19px !important;
	text-align: center;
	text-transform: uppercase;
}

.vbs-collection-product__title a {
	color: #111;
}

.vbs-collection-pagination {
	margin-top: 54px;
	text-align: center;
}

.vbs-collection-pagination .page-numbers {
	display: inline-flex;
	gap: 10px;
	justify-content: center;
	list-style: none;
	margin: 0;
	padding: 29px 0 0;
}

.vbs-featured-product,
.vbs-related-product {
	min-width: 0;
	text-align: center;
}

.vbs-featured-product__image,
.vbs-related-product__image {
	display: block;
}

.vbs-featured-product__image img,
.vbs-related-product__image img {
	display: block;
	width: 100%;
	height: 260px;
	object-fit: contain;
}

.vbs-featured-product__title,
.vbs-related-product__title {
	margin: 16px 0 0;
	font-size: 14px;
	line-height: 1.45;
}

/* VBS-010: Home's three curated product placements are dynamic Product records
 * inside a native Divi Tabs module. The source uses a fixed three-card desktop
 * shelf, while the generic catalogue grid is deliberately responsive elsewhere.
 * Keep the query/data editable; scope this visual bridge to that one module. */
.et_pb_tabs:has(.vbs-featured-products) {
	border: 0;
	margin-top: 26px;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls {
	background: transparent;
	border-bottom: 0;
	box-shadow: none;
	text-align: center;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls::after {
	border: 0;
	background: transparent;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls li {
	float: none;
	display: inline-block;
	width: auto;
	border: 2px solid #818183;
	background: transparent;
	color: #818183;
	font-family: Montserrat, sans-serif;
	font-size: 13px;
	font-weight: 400;
	line-height: 19px;
	margin: 0 4.5px;
	padding: 10px 21px;
	text-transform: uppercase;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls li.et_pb_tab_active {
	background: #bab7b7;
	color: #c62076;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls li a,
.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls li.et_pb_tab_active a {
	color: inherit;
	padding: 0;
	white-space: nowrap;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls li:nth-child(1) { width: 183px; }
.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls li:nth-child(2) { width: 172px; }
.et_pb_tabs:has(.vbs-featured-products) .et_pb_tabs_controls li:nth-child(3) { width: 121px; border: 2px solid #818183; }

/* Native Heading settings own the values; this named scope removes Divi's
 * default module gap/padding and makes the source's transform explicit. */
.vbs-home-introduction .et_pb_column { row-gap: 0; }
.vbs-home-introduction .et_pb_heading:first-of-type h2 {
	padding-bottom: 15px;
	letter-spacing: 2px;
	text-transform: uppercase;
}
.vbs-home-introduction .et_pb_heading:nth-of-type(2) h3 {
	padding-bottom: 0;
	color: #aaa;
	font-size: 13px;
	font-weight: 400;
	letter-spacing: 6px;
	line-height: 13px;
	text-transform: uppercase;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_all_tabs {
	border: 0;
	padding: 15px 0 0;
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tab {
	padding: 0;
}

.et_pb_tabs:has(.vbs-featured-products) .vbs-featured-products {
	/* VBS-034: Four fixed slots keep the existing curated cards intact while
	 * letting the client add a fourth Product Placement without a new row. */
	grid-template-columns: repeat(4, 262px);
	justify-content: center;
	gap: 28px;
	margin-left: 0;
}

.et_pb_tabs:has(.vbs-featured-products) .vbs-featured-product__image img {
	width: 262px;
	height: 311px;
}

.et_pb_tabs:has(.vbs-featured-products) .vbs-featured-product__title {
	min-height: 0;
	margin: 32px 0 0;
	padding: 0 0 48px;
	border-bottom: 1px solid #e6e6e6;
	font-family: Montserrat, sans-serif;
	font-size: 13px;
	font-weight: 700;
	line-height: normal;
	text-transform: uppercase;
}

.et_pb_tabs:has(.vbs-featured-products) .vbs-featured-product__title a {
	color: #000;
}

/* VBS-014: Divi's Home-only dynamic feature cache is intentionally guarded
 * (VBS-013) because it can remove native Text output. After a cache purge,
 * Divi 5.10.1 omits the companion Menu/Tabs feature CSS on that route. These
 * are the two missing behavioural rules, restricted to the active global
 * header and the Home product tabs; the Builder still owns all content. */
@media (min-width: 981px) {
	/* VBS-020: Divi's omitted Home feature CSS also drops the shared header's
	 * auto margins. Restore its source-measured 1170px desktop content rail. */
	.et_pb_row_1_tb_header,
	.et_pb_row_2_tb_header {
		margin-left: auto !important;
		margin-right: auto !important;
	}
	.et_pb_row_2_tb_header {
		position: relative;
		top: -4px;
		margin-bottom: -4px !important;
	}

	/* VBS-018: The legacy global footer's brand strip is not present on the
	 * source editorial pages; Home supplies its own page-owned shelf. Keep the
	 * shared information/copyright owner, at the source-measured 572px total. */
	.et_pb_section_0_tb_footer { display: none; }
	.et_pb_section_1_tb_footer { min-height: 493px !important; }
	/* VBS-028: Shopify's shared footer uses three 270px content columns with
	 * 30px gaps, beginning 65px into its grey region. Preserve the native
	 * footer modules and copy; this only restores their measured desktop rail. */
	.et_pb_section_1_tb_footer {
		padding-top: 67px !important;
	}
	.et_pb_row_2_tb_footer {
		column-gap: 30px !important;
	}
	.et_pb_row_2_tb_footer > .et_pb_column {
		flex: 0 0 270px !important;
		width: 270px !important;
	}

	.et_pb_menu_0_tb_header .et_mobile_nav_menu { display: none; }
	.et_pb_menu_0_tb_header .et_pb_menu__menu { display: flex; }
	.et_pb_menu_0_tb_header .et-menu {
		display: flex;
		flex-wrap: wrap;
		align-items: stretch;
		margin: 0 !important;
		padding: 0;
	}
	.et_pb_menu_0_tb_header .et-menu > li {
		display: flex;
		align-items: stretch;
		margin: 0 !important;
		padding: 0 14px !important;
	}
	.et_pb_menu_0_tb_header .et-menu > li:first-child { padding-left: 0 !important; }
	.et_pb_menu_0_tb_header .et-menu > li > a {
		display: flex;
		align-items: center;
		height: 59px;
		padding: 0 !important;
		color: #818183 !important;
		font-family: 'VBS Source Montserrat', Montserrat, sans-serif !important;
		font-weight: 400;
		line-height: 19px !important;
		text-transform: uppercase;
		white-space: nowrap;
	}
	.et_pb_menu_0_tb_header .et-menu > li.menu-item-has-children > a::after {
		content: '⌄';
		display: inline-block;
		position: static !important;
		top: auto !important;
		right: auto !important;
		transform: none !important;
		margin-left: 6px;
		font-size: 13px;
		font-weight: 400;
		line-height: 1;
	}
	.et_pb_menu_0_tb_header .et-menu > li.current-menu-item > a { color: #c62076 !important; }
	.et_pb_menu_0_tb_header .et_pb_menu__menu { transform: translateY(5px); }
	.et_pb_menu_0_tb_header .et-menu li { position: relative; }
	.et_pb_menu_0_tb_header .et-menu li > ul.sub-menu {
		display: block;
		position: absolute;
		z-index: 9999;
		left: -13px;
		top: calc(100% - 6px);
		width: 217px;
		padding: 10px 0;
		background: #f2f2f2;
		box-shadow: 0 6px 14px rgba(0, 0, 0, .24);
		visibility: hidden;
		opacity: 0;
		pointer-events: none;
	}
	.et_pb_menu_0_tb_header .et-menu li > ul.sub-menu > li {
		display: block;
		margin: 0;
		padding: 0;
	}
	.et_pb_menu_0_tb_header .et-menu li > ul.sub-menu > li > a {
		display: block;
		padding: 6px 18px 6px 31px;
		color: #888 !important;
		font-family: Arial, sans-serif;
		font-size: 13px;
		font-weight: 400;
		line-height: 19px;
		letter-spacing: 0;
		text-transform: none;
		white-space: nowrap;
	}
	.et_pb_menu_0_tb_header .et-menu li > ul.sub-menu > li > a::before {
		content: '•';
		display: inline-block;
		width: 11px;
		margin-left: -11px;
		color: #aaa;
	}
	.et_pb_menu_0_tb_header .et-menu li > ul.sub-menu > li > a:hover { color: #c62076 !important; }
	.et_pb_menu_0_tb_header .et-menu li:hover > ul.sub-menu,
	.et_pb_menu_0_tb_header .et-menu li.et-hover > ul.sub-menu {
		visibility: visible;
		opacity: 1;
		pointer-events: auto;
	}
	.et_pb_menu_0_tb_header .et-menu li ul.sub-menu li ul.sub-menu {
		left: 240px;
		top: -20px;
	}
}

/* VBS-031 fallback is generated once so it can share the editable WordPress
 * menu; it must never participate in desktop header layout. */
.vbs-mobile-menu-fallback { display: none; }

@media (max-width: 980px) {
	.et_pb_menu_0_tb_header .et_pb_menu__menu { display: none; }
	.et_pb_menu_0_tb_header .et_mobile_nav_menu { display: flex; }
	.et_pb_menu_0_tb_header .et_mobile_nav_menu,
	.et_pb_menu_0_tb_header .mobile_menu_bar {
		width: 32px;
		height: 45px;
	}
	.et_pb_menu_0_tb_header .mobile_menu_bar {
		display: block;
		line-height: 45px;
	}
	.et_pb_menu_0_tb_header .et_mobile_menu { display: none; }
	.et_pb_menu_0_tb_header .mobile_nav.opened .et_mobile_menu { display: block; }

	/* VBS-031: the Home dynamic-assets guard can leave Divi 5's mobile Menu
	 * trigger without its generated mobile list. This fallback clones the same
	 * WordPress menu at runtime; desktop navigation remains native. */
	.et_pb_menu_0_tb_header { position: relative; }
	.et_pb_menu_0_tb_header .vbs-mobile-menu-fallback {
		display: none;
		position: absolute;
		z-index: 9999;
		top: 100%;
		left: 0;
		right: 0;
		max-height: 70vh;
		overflow-y: auto;
		margin: 0;
		padding: 8px 20px 18px;
		list-style: none;
		background: #fff;
		border-top: 1px solid #e5e5e5;
		box-shadow: 0 8px 14px rgba(0,0,0,.12);
	}
	.et_pb_menu_0_tb_header.vbs-mobile-menu-open .vbs-mobile-menu-fallback { display: block; }
	.et_pb_menu_0_tb_header .vbs-mobile-menu-fallback li { margin: 0; padding: 0; list-style: none; }
	.et_pb_menu_0_tb_header .vbs-mobile-menu-fallback a {
		display: block;
		padding: 12px 0;
		color: #333;
		font-family: Montserrat, sans-serif;
		font-size: 13px;
		font-weight: 700;
		line-height: 18px;
		text-decoration: none;
		text-transform: uppercase;
	}
	.et_pb_menu_0_tb_header .vbs-mobile-menu-fallback ul {
		display: none;
		margin: 0 0 0 14px;
		padding: 0 0 4px 14px;
		border-left: 1px solid #e5e5e5;
	}
	.et_pb_menu_0_tb_header .vbs-mobile-menu-fallback li.vbs-mobile-submenu-open > ul { display: block; }
	.et_pb_menu_0_tb_header .vbs-mobile-menu-fallback .vbs-mobile-submenu-toggle {
		float: right;
		width: 38px;
		height: 42px;
		margin: 0;
		padding: 0;
		border: 0;
		background: transparent;
		color: #c62076;
		font-size: 20px;
		line-height: 42px;
	}
}

.et_pb_tabs:has(.vbs-featured-products) .et_pb_tab { display: none; }
.et_pb_tabs:has(.vbs-featured-products) .et_pb_tab.et_pb_active_content { display: block; }

/* VBS-015/VBS-033: The Home-only dynamic-assets guard intentionally omits
 * Divi's Slider feature sheets. These are the relevant native base/control
 * rules, scoped to the one guarded Home Slider; its native JS remains Divi's. */
.et_pb_slider_1 {
	position: relative;
	overflow: hidden;
}
.et_pb_slider_1 > .et_pb_slides > .et_pb_slide {
	display: none;
	float: left;
	position: relative;
	width: 100%;
	margin-right: -100%;
	padding: 0 6%;
	background-position: 50%;
	background-size: cover;
	background-repeat: no-repeat;
	text-align: center;
	list-style: none !important;
}
.et_pb_slider_1 > .et_pb_slides > .et_pb_slide:first-child { display: list-item; }
.et_pb_slider_1 .et-pb-controllers {
	position: absolute;
	bottom: 20px;
	left: 0;
	z-index: 10;
	width: 100%;
	text-align: center;
}
.et_pb_slider_1 .et-pb-controllers a {
	display: inline-block;
	width: 7px;
	height: 7px;
	margin-right: 10px;
	padding: 0;
	border-radius: 7px;
	background-color: rgba(255, 255, 255, .5);
	text-indent: -9999px;
	opacity: .5;
}
.et_pb_slider_1 .et-pb-controllers a:last-child { margin-right: 0; }
.et_pb_slider_1 .et-pb-controllers .et-pb-active-control { background-color: #fff; opacity: 1; }
.et_pb_slider_1 .et-pb-arrow-next,
.et_pb_slider_1 .et-pb-arrow-prev {
	position: absolute;
	top: 50%;
	z-index: 100;
	margin-top: -24px;
	color: #fff;
	font-size: 48px;
	opacity: 0;
	transition: all .2s ease-in-out;
}
.et_pb_slider_1 .et-pb-arrow-prev { left: -22px; }
.et_pb_slider_1 .et-pb-arrow-next { right: -22px; }
.et_pb_slider_1 .et-pb-arrow-next span,
.et_pb_slider_1 .et-pb-arrow-prev span { display: none; }
.et_pb_slider_1:hover .et-pb-arrow-prev { left: 22px; opacity: 1; }
.et_pb_slider_1:hover .et-pb-arrow-next { right: 22px; opacity: 1; }
@media (max-width: 767px) {
	.et_pb_slider_1 .et-pb-controllers { bottom: 5%; height: 14px; }
	.et_pb_slider_1:hover .et-pb-arrow-prev { left: 0; opacity: 1; }
	.et_pb_slider_1:hover .et-pb-arrow-next { right: 0; opacity: 1; }
}

/* VBS-035: Shopify's Our Brands image is a desktop fixed, bottom-anchored
 * background. Divi true-parallax renders the same editable background inside
 * a translated 717px layer, which noticeably reduces its visible travel. */
@media (min-width: 981px) {
	body.home .et-l--post .et_pb_section_parallax .et-pb-parallax-background {
		transform: none !important;
		background-attachment: fixed !important;
		background-position: 50% 100% !important;
	}
}

/* VBS-016: The omitted Group Carousel feature rules leave its editable slides
 * vertically stacked. Restore the source's six-up desktop shelf without
 * changing its native groups, images, links, or carousel settings. */
@media (min-width: 981px) {
	.et_pb_group_carousel_1 .et_pb_group_carousel_container { overflow: hidden; }
	.et_pb_group_carousel_1 .et_pb_group_carousel_track {
		display: flex;
		align-items: center;
		height: 70px;
	}
	.et_pb_group_carousel_1 .et_pb_group_carousel_slide {
		box-sizing: border-box;
		flex: 0 0 calc(100% / 6);
		display: flex;
		align-items: center;
		justify-content: center;
		height: 70px;
	}
	.et_pb_group_carousel_1 .et_pb_group_carousel_slide img {
		max-width: 180px;
		max-height: 70px;
		width: auto;
		height: auto;
	}
	.et_pb_group_carousel_1 .et_pb_group_carousel_arrow { display: none; }

	/* VBS-017: The source owns its brand shelf on Home, not in the shared
	 * footer. Keep the editable global footer for every other route, while the
	 * Home carousel supplies this page's sole brand treatment. */
	.home .et_pb_section_0_tb_footer { display: none; }
	.home .et_pb_section_11 {
		padding-top: 101px !important;
		padding-bottom: 110px !important;
	}
	.home .et_pb_section_1_tb_footer { min-height: 452px !important; }
	.home .et_pb_section_2_tb_footer { min-height: 108px; }
}

/* VBS-011: source's editable Home introduction divider is a narrow native
 * Text module because the installed hand-seeded Divider/Icon module does not
 * render this small outline star reliably. */
.vbs-home-intro-divider {
	margin-top: 27px;
	margin-bottom: 0;
	color: #f725a8;
	font-family: Arial, sans-serif;
	font-size: 20px;
	line-height: 20px;
	letter-spacing: 0;
}

.vbs-home-intro-divider p {
	margin: 0;
}

/* VBS-022: Home's editable divider Text block is retained in storage but its
 * output is suppressed by the route-scoped Divi cache guard (VBS-013). Mirror
 * that exact source treatment in the owning editable intro section without
 * adding flow height: two grey rules and a magenta outline star. */
.vbs-home-introduction .et_pb_column { position: relative; }
.vbs-home-introduction .et_pb_column::after {
	content: '☆';
	position: absolute;
	top: 83px;
	left: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 90px;
	height: 20px;
	transform: translateX(-50%);
	background:
		linear-gradient(#c7c7c7, #c7c7c7) left center / 32px 1px no-repeat,
		linear-gradient(#c7c7c7, #c7c7c7) right center / 32px 1px no-repeat;
	color: #f725a8;
	font-family: Arial, sans-serif;
	font-size: 20px;
	line-height: 20px;
}

/* VBS-023: The source repeats the star-and-rules motif before Home's
 * page-owned brand shelf. It is not the hidden global-footer strip. */
.home .et_pb_section_11 {
	position: relative;
}
.home .et_pb_section_11::before {
	content: '☆';
	position: absolute;
	top: 39px;
	left: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 90px;
	height: 20px;
	transform: translateX(-50%);
	background:
		linear-gradient(#c7c7c7, #c7c7c7) left center / 32px 1px no-repeat,
		linear-gradient(#c7c7c7, #c7c7c7) right center / 32px 1px no-repeat;
	color: #f725a8;
	font-family: Arial, sans-serif;
	font-size: 20px;
	line-height: 20px;
}

/* VBS-009: native Divi columns/headings own the editable card structure.
 * Divi 5.9 did not print their stored Heading typography on this block type,
 * and the source also needs a parent-card hover to drive child title/subtitle
 * states. This source-measured, card-scoped bridge supplies only those output
 * details and the pseudo-element overlay/border/lines. */
.vbs-promo-tile {
	position: relative;
	overflow: hidden;
	cursor: pointer;
}

.vbs-promo-tile::before,
.vbs-promo-tile::after {
	position: absolute;
	pointer-events: none;
	content: '';
	z-index: 0;
}

.vbs-promo-tile::before {
	inset: 0;
	background: rgba(0, 0, 0, .20);
}

.vbs-promo-tile::after {
	inset: 10px;
	border: 1px solid rgba(255, 255, 255, .85);
	opacity: 0;
	transform: scale(.98);
	transition: opacity .35s ease, transform .35s ease;
}

.vbs-promo-tile > * { position: relative; z-index: 1; }
.vbs-promo-tile .vbs-promo-card-link {
	position: absolute !important;
	inset: 0;
	display: block;
	z-index: 3;
	color: transparent;
	font-size: 0;
}
.vbs-promo-tile .vbs-promo-card-link:focus-visible {
	outline: 2px solid #fff;
	outline-offset: -12px;
}
.vbs-promo-tile .vbs-promo-title,
.vbs-promo-tile .vbs-promo-subtitle { transition: transform .35s ease, background-color .35s ease; }
.vbs-promo-tile .vbs-promo-title h2 {
	margin: 0;
	padding: 15px 0;
	color: #fff;
	font-family: 'Roboto Slab', Georgia, serif;
	font-size: 20px;
	font-weight: 400;
	line-height: 34px;
}
.vbs-promo-tile .vbs-promo-subtitle h3 {
	margin: 0;
	padding: 5px 0;
	color: #fff;
	font-family: Montserrat, Arial, sans-serif;
	font-size: 14px;
	font-weight: 700;
	line-height: 19px;
	letter-spacing: 1px;
	text-transform: uppercase;
}
.vbs-promo-tile .vbs-promo-subtitle h3::before,
.vbs-promo-tile .vbs-promo-subtitle h3::after {
	display: inline-block;
	width: 20px;
	height: 1px;
	margin: 0 12px 4px;
	background: #fff;
	content: '';
}
.vbs-promo-tile:hover .vbs-promo-title { background: #c62076; transform: translateY(-10px); }
.vbs-promo-tile:hover .vbs-promo-subtitle { transform: translateY(15px); }
.vbs-promo-tile:hover::after { opacity: 1; transform: scale(1); }

/* VBS-010: Account and Login/Register remain editable native Link modules in
 * the shared Header Builder, but are hidden until a real customer-account
 * workflow exists. Remove this class in either module's Advanced -> CSS Class
 * field to restore it. */
.vbs-inactive-account-control { display: none !important; }

/* VBS-003: The active legacy product-template Text module emits no H2 rule
 * under Divi 5.9 for either documented legacy heading attribute form. Scope
 * the measured source presentation to its stable Theme Builder module class. */
body.single-vbs_product .et-l--body .et_pb_text_1_tb_body h2 {
	font-family: Montserrat, sans-serif;
	font-size: 29px;
	font-weight: 700;
	line-height: 29px;
	text-transform: uppercase;
}

/* VBS-008: Divi 5.9 does not emit the stored uppercase title control on these routes.
 * Keep this narrow source-backed fallback until a frontend version proves otherwise. */
body.page-id-413 .et_pb_section h1,
body.page-id-420 .et_pb_section h1,
body.page-id-423 .et_pb_section h1 {
	text-transform: uppercase;
}

/* Collection titles are editor-owned taxonomy names. The source applies
 * uppercase as presentation, so preserve that behavior instead of requiring
 * staff to type taxonomic names in all caps. */
body.tax-vbs_collection .et-l--body h1 {
	text-transform: uppercase;
}

body.single-vbs_product .et-l--body h1 {
	text-transform: uppercase;
}

/* VBS-006: Contact Form 7 is the functional replacement for Shopify's
 * contact form. The desktop source uses a 585px form with three 175px fields
 * on one row, a 585x214 message field, and 34px controls. This changes only
 * the Contact page at desktop; normal CF7 and phone presentation stay native. */
@media (min-width: 768px) {
	/* VBS-030: Rosactive Home Care source cards sit on the shared 1170px rail
	 * with fixed 332px cards and 30px gaps. Divi's responsive row introduced a
	 * 5.5% gap, visibly spreading the three editable Image modules apart. */
	body.page-id-431 .et_pb_row_1 {
		width: 1170px !important;
		max-width: 1170px !important;
		column-gap: 30px !important;
		justify-content: flex-start;
	}
	body.page-id-431 .et_pb_row_1 > .et_pb_column {
		flex: 0 0 332px !important;
		width: 332px !important;
	}

	/* VBS-027: The guarded Home Tabs retain correct control geometry but paint
	 * their three active product cards 13px ahead of Shopify. Move only the
	 * visible cards; do not change panel flow, which would disturb the already
	 * matched promo CTA and page-owned brand shelf. */
	body.home .et_pb_tabs:has(.vbs-featured-products) .vbs-featured-product {
		position: relative;
		top: 13px;
	}

	/* VBS-026: Shopify's archive cards retain each product asset's intrinsic
	 * aspect ratio. The previous fixed 444px frame cropped the tall first IM
	 * product and compressed the collection's row rhythm. Preserve the compact
	 * phone frame, but let the desktop grid use its local Media Library assets'
	 * natural height. */
	.vbs-collection-products:not(.vbs-collection-products--list) .vbs-collection-product__image {
		height: auto;
	}
	.vbs-collection-products:not(.vbs-collection-products--list) .vbs-collection-product__image img {
		height: auto;
	}

	/* VBS-024: The source Home promo has a View Collection link. The native
	 * local promo image already owns the editable destination; its pseudo-label
	 * extends that same real anchor into the source-measured CTA. */
	body.home .et_pb_section_10 .et_pb_image a {
		position: relative;
		overflow: visible;
	}
	body.home .et_pb_section_10 .et_pb_image {
		position: relative;
		top: 36px;
	}
	body.home .et_pb_section_10 h3 {
		position: relative;
		top: 85px;
	}
	body.home .et_pb_section_10 h2 {
		position: relative;
		top: 58px;
	}
	body.home .et_pb_section_10 .et_pb_image a::after {
		content: 'VIEW COLLECTION';
		position: absolute;
		left: 351px;
		top: 206px;
		display: flex;
		align-items: center;
		justify-content: center;
		box-sizing: border-box;
		width: 176px;
		height: 40px;
		border: 2px solid #c62076;
		background: #fff;
		color: #818183;
		font-family: Montserrat, sans-serif;
		font-size: 13px;
		font-weight: 700;
		line-height: 13px;
		text-transform: uppercase;
		white-space: nowrap;
	}

	/* VBS-019: Preserve the source Contact page's measured form-to-footer
	 * rhythm. CF7 remains the editable functional owner; this affects only its
	 * visual placement in the page-owned native section. */
	body.page-id-412 .et_pb_section_1 {
		padding-bottom: 354px !important;
	}

	body.page-id-412 .wpcf7-form {
		width: 585px;
		transform: translateY(-54px);
	}

	body.page-id-412 .wpcf7-form > p:nth-of-type(-n + 3) {
		float: left;
		width: 175px;
		margin: 0 30px 20px 0;
		padding: 20px 0 0;
		vertical-align: top;
	}

	body.page-id-412 .wpcf7-form > p:nth-of-type(3) {
		margin-right: 0;
	}

	body.page-id-412 .wpcf7-form > p:nth-of-type(-n + 3) .wpcf7-form-control {
		box-sizing: border-box;
		width: 175px;
		height: 34px;
		padding: 6px 12px;
		font-family: sans-serif;
		font-size: 13px;
		line-height: 19px;
	}

	body.page-id-412 .wpcf7-form > p:nth-of-type(4) {
		clear: both;
		margin: 0;
		padding: 0;
	}

	body.page-id-412 .wpcf7-form > p:nth-of-type(4) .wpcf7-form-control {
		box-sizing: border-box;
		width: 585px;
		height: 214px;
		padding: 6px 12px;
		font-family: sans-serif;
		font-size: 14px;
		line-height: 20px;
	}

	body.page-id-412 .wpcf7-form > p.vbs-contact-actions {
		margin: 7px 0 0;
		padding: 0;
	}

	body.page-id-412 .wpcf7-form > p.vbs-contact-actions .wpcf7-form-control,
	body.page-id-412 .wpcf7-form > p.vbs-contact-actions .vbs-contact-reset {
		height: 34px;
		margin: 0 0 0 5px;
		padding: 7px 10px;
		font-family: Montserrat, sans-serif;
		font-size: 11px;
		line-height: 16px;
	}

	body.page-id-412 .wpcf7-form > p.vbs-contact-actions .wpcf7-form-control,
	body.page-id-412 .wpcf7-form > p.vbs-contact-actions .vbs-contact-reset {
		background: #fff;
		color: #333;
		border: 2px solid #e5e5e5;
		font-weight: 700;
		-webkit-appearance: none;
		appearance: none;
	}

	body.page-id-412 .wpcf7-form > p.vbs-contact-actions .vbs-contact-reset {
		width: 62px;
		margin-left: 0;
	}

	body.page-id-412 .wpcf7-form > p.vbs-contact-actions .wpcf7-submit {
		width: 56px;
		margin-left: 8px;
	}

	/* VBS-021: The source single-product template exposes a 20-item dynamic
	 * related shelf, showing four 270x320 cards at once, followed by the same
	 * editable brand shelf used on product routes. Keep all Product/collection
	 * data in WordPress; this is only the measured desktop presentation. */
	body.single-vbs_product .et_pb_section_2_tb_body { min-height: 699px; }
	/* VBS-029: Source Product pages use a 750px main product scope, then a
	 * 736px related shelf. Divi's native body had 72px of excess blank space
	 * after the product and placed the related heading at its default 48px
	 * inset. Restore the measured desktop sequence without changing the native
	 * Product/related-product data owners. */
	body.single-vbs_product .et_pb_section_1_tb_body {
		padding-bottom: 208px !important;
	}
	body.single-vbs_product .et_pb_section_2_tb_body {
		min-height: 736px;
		padding-top: 144px !important;
	}
	body.single-vbs_product .et_pb_text_1_tb_body h2 {
		box-sizing: border-box;
		width: 1140px;
		margin-left: 15px;
		padding-bottom: 50px;
		color: #808080;
		letter-spacing: 2px;
	}
	body.single-vbs_product .et_pb_post_title_1_tb_body .entry-title {
		padding-bottom: 20px;
	}
	body.single-vbs_product .vbs-related-products {
		display: flex;
		flex-wrap: nowrap;
		overflow: hidden;
		gap: 20px;
		position: relative;
		left: 15px;
		top: -25px;
	}
	body.single-vbs_product .et-l--body .et_pb_section_2_tb_body .et_pb_row_2_tb_body {
		width: 1140px !important;
		max-width: 1140px !important;
	}
	body.single-vbs_product .vbs-related-product {
		flex: 0 0 270px;
	}
	body.single-vbs_product .vbs-related-product__image img {
		width: 270px;
		height: 320px;
	}
	body.single-vbs_product .et_pb_section_0_tb_footer {
		display: block;
		height: 348px;
	}
	body.single-vbs_product .et_pb_section_0_tb_footer .et_pb_row_0_tb_footer {
		padding-top: 18px;
	}
	body.single-vbs_product .et_pb_section_0_tb_footer .et_pb_row_1_tb_footer {
		padding-top: 84px;
	}
	body.single-vbs_product .et_pb_section_0_tb_footer .et_pb_image,
	body.single-vbs_product .et_pb_section_0_tb_footer .et_pb_image .et_pb_image_wrap,
	body.single-vbs_product .et_pb_section_0_tb_footer .et_pb_image img {
		width: 180px;
		height: 70px;
	}
	body.single-vbs_product .et_pb_section_0_tb_footer .et_pb_image img {
		object-fit: contain;
	}

	/* VBS-025: Collection archives retain the shared, editable brand shelf in
	 * the source between pagination and Information. Editorial pages do not use
	 * it, so restore the otherwise hidden global section only on this taxonomy. */
	body.tax-vbs_collection .et_pb_section_0_tb_footer {
		display: block;
		height: 430px;
	}
	body.tax-vbs_collection .et_pb_section_0_tb_footer .et_pb_row {
		padding-top: 119px;
	}
	body.tax-vbs_collection .et_pb_section_0_tb_footer .et_pb_row_1_tb_footer {
		padding-top: 66px;
	}
	body.tax-vbs_collection .et_pb_section_0_tb_footer .et_pb_image,
	body.tax-vbs_collection .et_pb_section_0_tb_footer .et_pb_image .et_pb_image_wrap,
	body.tax-vbs_collection .et_pb_section_0_tb_footer .et_pb_image img {
		width: 180px;
		height: 70px;
	}
	body.tax-vbs_collection .et_pb_section_0_tb_footer .et_pb_image img {
		object-fit: contain;
	}
}

@media (max-width: 767px) {
	/* VBS-005: retain each editable logo link while compacting the source-like
	 * mobile Brand Strip; no carousel dependency or hidden brand content. */
	.vbs-compact-brand-strip .et_pb_row {
		display: grid !important;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 10px 16px;
	}

	.vbs-compact-brand-strip .et_pb_column {
		float: none !important;
		margin: 0 !important;
		width: auto !important;
	}

	.vbs-compact-brand-strip .et_pb_text_inner p {
		margin: 0;
	}
}

@media (max-width: 479px) {
	/* VBS-012: the Home Tab shelf deliberately uses fixed desktop cards.
	 * Override that one desktop parity rule on phone so the editable dynamic
	 * product records remain usable without introducing horizontal scrolling. */
	.et_pb_tabs:has(.vbs-featured-products) .vbs-featured-products {
		grid-template-columns: 1fr;
		justify-content: stretch;
		gap: 18px;
		margin-left: 0;
	}

	.et_pb_tabs:has(.vbs-featured-products) .vbs-featured-product__image img {
		width: 100%;
		height: 180px;
	}

	.et_pb_tabs:has(.vbs-featured-products) .vbs-featured-product__title {
		margin-top: 12px;
		padding-bottom: 24px;
	}

	.vbs-featured-products,
	.vbs-related-products {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 18px;
	}

	.vbs-collection-products {
		grid-template-columns: 1fr;
		gap: 18px;
	}

	.vbs-collection-toolbar { margin-bottom: 22px; }
	.vbs-collection-toolbar__label { display: none; }

	.vbs-featured-product__image img,
	.vbs-related-product__image img {
		height: 180px;
	}

	.vbs-collection-product__image {
		height: 220px;
	}
}

/* VBS-010: The active source footer has heading rules, pink information
 * chevrons, and icon-led contact groups. Divi 5.9's native Divider schema is
 * present but does not emit a line for a hand-authored verified block in this
 * installed build. Keep the content itself in the named native footer Text
 * modules, and scope the presentation bridge to those two modules only. */
.et-l--footer .et_pb_text_0_tb_footer h3,
.et-l--footer .et_pb_text_1_tb_footer h3 {
	margin: 0 0 16px;
	padding-bottom: 18px;
	border-bottom: 1px solid #666;
	font-family: Montserrat, sans-serif;
	font-size: 14px;
	font-weight: 700;
	line-height: normal;
	text-transform: uppercase;
}

.et-l--footer .et_pb_text_0_tb_footer p {
	display: flex;
	gap: 8px;
	align-items: baseline;
	margin: 0 0 9px;
}

.et-l--footer .et_pb_text_0_tb_footer p::before {
	content: "›";
	color: #c62076;
	font-size: 17px;
	font-weight: 700;
	line-height: 1;
}

.et-l--footer .et_pb_text_1_tb_footer p {
	display: flex;
	gap: 9px;
	align-items: flex-start;
	margin: 0 0 14px;
}

.et-l--footer .et_pb_text_1_tb_footer p::before {
	display: inline-flex;
	flex: 0 0 24px;
	width: 24px;
	height: 24px;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	border: 1px solid #9b9999;
	color: #eee;
	font-size: 13px;
	line-height: 1;
}

.et-l--footer .et_pb_text_1_tb_footer p:nth-of-type(1)::before { content: "⌖"; }
.et-l--footer .et_pb_text_1_tb_footer p:nth-of-type(2)::before { content: "☎"; }
.et-l--footer .et_pb_text_1_tb_footer p:nth-of-type(3)::before { content: "✉"; }
.et-l--footer .et_pb_text_1_tb_footer p:nth-of-type(4)::before { content: "◷"; }

/* VBS-032: Source contact details are 12px/19px and start 33px below their
 * heading. Divi's native text wrapper compressed that gap and added 13px
 * bottom padding per paragraph, altering both hierarchy and wrapping. */
@media (min-width: 981px) {
	.et-l--footer .et_pb_text_2_tb_footer h3 {
		padding: 2px 0 18px 5px !important;
		line-height: normal !important;
	}
	.et-l--footer .et_pb_text_2_tb_footer p {
		padding: 0 !important;
		font-size: 12px !important;
		line-height: 19px !important;
	}
	.et-l--footer .et_pb_text_2_tb_footer p:first-of-type {
		margin-top: 33px !important;
	}
}

.et-l--footer .et_pb_social_media_follow_network_0_tb_footer a.icon {
	display: inline-flex;
	width: 24px;
	height: 24px;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	border: 1px solid #5e5c5c;
	color: #555;
	font-size: 14px;
	line-height: 1;
}

@media (max-width: 767px) {
	.et-l--footer .et_pb_text_0_tb_footer h3,
	.et-l--footer .et_pb_text_1_tb_footer h3 {
		margin-top: 28px;
	}
}
