/* =========================================================================
   Peptide Test — custom CSS layer (fine-tuning over theme.json)
   Matches the live Dawn-based storefront. Mobile-first.
   ========================================================================= */

:root {
	--pt-border: #e8e8e8;
	--pt-navy: #242833;
	--pt-ink: #121212;
}

body {
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}

/* ---- Links: square, no underline by default (Dawn-like) ---- */
a {
	text-decoration: none;
}

/* =========================================================================
   HEADER
   ========================================================================= */
.pt-announcement__text {
	margin: 0;
	font-weight: 600;
}
.pt-announcement__text a {
	color: #fff;
}
.pt-announcement__text a::after {
	content: " \2192"; /* live shows a trailing right-arrow after the message */
}

/* Sticky header on scroll (matches live). The sticky element must be the
   template-part WRAPPER, not .pt-header — WordPress wraps the header in an
   outer <header class="wp-block-template-part"> whose parent is the full page,
   so it pins across the whole scroll. (footer.wp-block-template-part is the
   footer, so the `header.` qualifier keeps this header-only.) */
header.wp-block-template-part {
	position: sticky;
	top: 0;
	z-index: 100;
	background-color: #fff;
}

/* The header bar anchors the full-width search drop-down panel. */
.pt-header__bar {
	position: relative;
}

/* Desktop layout: logo (left) | nav | actions (right) — mirrors Dawn header--middle-left. */
.pt-header__inner {
	display: flex;
	align-items: center;
	justify-content: flex-start;
	gap: 24px;
}
.pt-logo {
	margin: 0;
	flex: 0 0 auto;
}
.pt-logo img {
	display: block;
}
.pt-nav {
	flex: 1 1 auto;
}

/* Navigation links */
.pt-nav .wp-block-navigation-item__content {
	color: var(--pt-ink);
	font-weight: 600;
}
.pt-nav .wp-block-navigation-item__content:hover {
	text-decoration: underline;
	text-underline-offset: 4px;
}
.pt-nav .wp-block-navigation__submenu-container {
	border: 1px solid var(--pt-border);
	box-shadow: 0 6px 24px rgba(0, 0, 0, 0.08);
	min-width: 240px;
}

/* Header utility actions (language + search + account + cart). */
.pt-header__actions {
	display: flex;
	align-items: center;
	gap: 18px;
	flex: 0 0 auto;
	white-space: nowrap;
}
.pt-icon {
	display: inline-flex;
	color: var(--pt-ink);
	line-height: 0;
	cursor: pointer;
}
.pt-icon:hover {
	opacity: 0.65;
}
/* Cart count badge — populated by the cart-count script (functions.php). Shows
   the live item count on the header cart icon, updating on add-to-cart. */
.pt-icon--cart {
	position: relative;
}
.pt-cart__count {
	position: absolute;
	top: -7px;
	right: -9px;
	min-width: 17px;
	height: 17px;
	padding: 0 4px;
	display: flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	border-radius: 999px;
	background: var(--pt-ink);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	line-height: 1;
}

/* Header language selector — "English ⌄" disclosure (desktop only). */
.pt-hlang {
	position: relative;
	display: inline-flex;
	align-items: center;
	align-self: stretch; /* fill the actions row so the button centres against the icons */
}
.pt-hlang__btn {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	background: none;
	border: 0;
	padding: 0;
	margin: 0;
	font: inherit;
	font-size: 0.9rem;
	color: var(--pt-ink);
	cursor: pointer;
}
.pt-hlang__list {
	position: absolute;
	top: 100%;
	right: 0;
	margin: 10px 0 0;
	padding: 6px 0;
	list-style: none;
	min-width: 150px;
	background: #fff;
	border: 1px solid var(--pt-border);
	box-shadow: 0 6px 24px rgba(0, 0, 0, 0.08);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-4px);
	transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s ease;
	z-index: 50;
}
.pt-hlang:hover .pt-hlang__list,
.pt-hlang:focus-within .pt-hlang__list {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}
.pt-hlang__list li {
	margin: 0;
}
.pt-hlang__list a {
	display: block;
	padding: 8px 16px;
	font-size: 0.9rem;
	color: var(--pt-ink);
	white-space: nowrap;
}
.pt-hlang__list a:hover,
.pt-hlang__list .current-lang a {
	background: #f4f4f4;
}

/* Header search — magnifier icon that opens a full-width search bar (Dawn-style). */
.pt-search {
	position: static;
	display: inline-flex;
}
.pt-search > summary {
	list-style: none;
	cursor: pointer;
	display: inline-flex;
	color: var(--pt-ink);
	line-height: 0;
}
.pt-search > summary::-webkit-details-marker {
	display: none;
}
.pt-search > summary::marker {
	content: "";
}
.pt-search[open] > summary {
	opacity: 0.65;
}
/* The opened search drops a full-width bar below the header bar. */
.pt-search__panel {
	position: absolute;
	left: 0;
	right: 0;
	top: 100%;
	z-index: 60;
	background: #fff;
	border-bottom: 1px solid var(--pt-border);
	box-shadow: 0 12px 24px rgba(0, 0, 0, 0.06);
	padding: 22px 0 28px;
}
.pt-search__bar {
	display: flex;
	flex-wrap: nowrap;
	align-items: center;
	gap: 12px;
	box-sizing: border-box; /* keep padding inside the width so the bar never exceeds the viewport */
	width: 100%;
	max-width: 930px; /* centred ~850px field like the live search, not full width */
	margin: 0 auto;
	padding: 0 20px;
}
.pt-search__bar .dgwt-wcas-search-wrapp {
	flex: 1 1 0%; /* size from leftover space only, so it never pushes the close button off-screen */
	width: auto !important;
	min-width: 0;
	max-width: none !important;
	margin: 0;
}
/* The form + field fill the (flex-sized) wrapper. */
.pt-search__bar .dgwt-wcas-search-form,
.pt-search__bar .dgwt-wcas-sf-wrapp {
	width: 100% !important;
	max-width: none !important;
}
.pt-search__close {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: 0;
	padding: 4px;
	cursor: pointer;
	color: var(--pt-ink);
	line-height: 0;
}
.pt-search__close:hover {
	opacity: 0.65;
}

/* FiboSearch input — large, square, bordered like the live search field.
   FiboSearch's "solaris" style sets a rounded grey pill with !important, so we
   override the box appearance with !important to match the Dawn search field. */
.pt-search__bar .dgwt-wcas-search-input[type="search"] {
	width: 100% !important;
	height: 54px !important;
	border: 1px solid var(--pt-ink) !important;
	border-radius: 0 !important;
	font-size: 1rem !important;
	padding: 0 52px 0 18px !important; /* placeholder left, magnifier on the right (like live) */
	background: #fff !important;
	box-shadow: none !important;
	color: var(--pt-ink) !important;
}
/* Move the magnifier/submit to the right edge of the field and vertically
   centre it on the 54px input (the FiboSearch wrapper is taller than the field,
   so we anchor the button to the field height itself). */
.pt-search__bar .dgwt-wcas-search-submit {
	left: auto !important;
	right: 0 !important;
	top: 0 !important;
	bottom: auto !important;
	height: 54px !important;
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
}
.pt-search__bar .dgwt-wcas-search-submit,
.pt-search__bar .dgwt-wcas-ico-magnifier {
	color: var(--pt-ink);
}
/* Neutralise FiboSearch's grey rounded form/wrapper chrome. */
.pt-search__bar .dgwt-wcas-search-form,
.pt-search__bar .dgwt-wcas-sf-wrapp {
	border-radius: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
}
/* The theme's default paragraph margins + wrapper padding inflate FiboSearch's
   field wrapper (it wraps the input in <p> tags), which dropped the close ✕ out
   of line. Collapse them so the wrapper is just the input height and the ✕
   centres against the field. */
.pt-search__bar .dgwt-wcas-sf-wrapp {
	padding: 0 !important;
}
.pt-search__bar .dgwt-wcas-search-form p {
	margin: 0 !important;
}
/* FiboSearch tucks its hidden inputs in a <p> with a stray <br> that renders an
   extra ~18px line, making the field wrapper taller than the input and throwing
   the magnifier + close button off-centre. The hidden inputs still submit when
   the paragraph is hidden, so collapse it to keep the wrapper = field height. */
.pt-search__bar .dgwt-wcas-sf-wrapp > p:has(input[type="hidden"]) {
	display: none !important;
}

/* Suggestions dropdown — clean rows with a thumbnail + title (live "Products"). */
.dgwt-wcas-suggestions-wrapp {
	border: 1px solid var(--pt-border);
	border-radius: 0;
	box-shadow: 0 12px 30px rgba(0, 0, 0, 0.10);
}
.dgwt-wcas-suggestion {
	padding: 12px 16px;
}
.dgwt-wcas-suggestion .dgwt-wcas-st-title {
	font-size: 0.95rem;
	color: var(--pt-ink);
}
.dgwt-wcas-suggestion-product .dgwt-wcas-si img {
	width: 44px;
	height: 44px;
	object-fit: contain;
}
.dgwt-wcas-suggestion.dgwt-wcas-suggestion-more {
	font-weight: 700;
	color: var(--pt-ink);
	border-top: 1px solid var(--pt-border);
}

/* ---- Header responsive: hamburger left / logo centered / icons right ---- */
@media (max-width: 989px) {
	/* Mobile header: hamburger left / logo centered / icons right (matches live).
	   WP's flex-layout CSS wins over display:grid here, so use flex: give the two
	   side groups equal flex-grow and the logo auto width — that centers the logo. */
	.pt-header__inner {
		gap: 12px;
	}
	.pt-nav {
		order: 1;
		flex: 1 1 0;
		min-width: 0;
	}
	.pt-logo {
		order: 2;
		flex: 0 0 auto;
	}
	.pt-header__actions {
		order: 3;
		flex: 1 1 0;
		min-width: 0;
		justify-content: flex-end;
	}
	/* Language selector is desktop-only in the live header. */
	.pt-hlang {
		display: none;
	}
	/* Collapse the nav to a hamburger below 990px (Dawn's desktop breakpoint),
	   overriding the navigation block's default 600px collapse point. */
	.pt-nav .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}
	.pt-nav .wp-block-navigation__responsive-container:not(.is-menu-open) {
		display: none;
	}
}
@media (max-width: 749px) {
	/* Account icon is hidden on small screens in the live header (small-hide). */
	.pt-icon--account {
		display: none;
	}
}

/* =========================================================================
   HERO
   ========================================================================= */
.pt-hero {
	align-items: center;
}
.pt-hero .wp-block-cover__background {
	background-color: var(--pt-navy);
	opacity: 0.55;
}
.pt-hero__inner {
	width: 100%;
}
.pt-hero__title {
	/* Match the live Shopify hero H1 (Assistant 700). Live computed: 57.5px
	   desktop / 28.75px mobile, weight 700, line-height 1.1, letter-spacing
	   0.66px (fixed). Assistant is already self-hosted as a variable font
	   (200-800), so 700 renders without loading anything new. */
	font-size: clamp(28.75px, 4.8vw, 57.5px);
	font-weight: 700;
	line-height: 1.1;
	letter-spacing: 0.66px;
	margin: 0 0 28.75px; /* QA #2: live hero h1 has 28.75px bottom margin */
}
.pt-hero__sub {
	max-width: 620px;
	margin: 0 auto 28.75px !important; /* QA #3: live margin 0 0 28.75px; keep centered, override inline margin-top */
	opacity: 0.9; /* QA #3 */
	font-size: clamp(17.25px, 2vw, 23px) !important; /* live hero subtitle 23px desktop / 17.25px mobile; overrides inline clamp */
	line-height: 1.4 !important; /* live lh 1.4; overrides inline 1.6 */
	letter-spacing: 0.69px !important; /* QA #3: live ls 0.69 (was -0.1) */
}

/* =========================================================================
   WELCOME
   ========================================================================= */
.pt-welcome__title {
	font-size: clamp(33px, 3.5vw, 44px); /* live: 44px desktop / 33px mobile */
	line-height: 1.3;
	letter-spacing: 0.66px;
}
.pt-welcome p {
	font-size: 17.25px !important; /* QA #5: live body 17.25px (1.5rem @ 11.5px root) */
	letter-spacing: 0.69px; /* QA #5 */
	color: rgba(18, 18, 18, 0.75); /* QA #5: #121212bf */
	line-height: 1.7;
}

/* =========================================================================
   FEATURE BLOCKS
   ========================================================================= */
.pt-feature__title {
	font-size: clamp(33px, 3.5vw, 44px); /* live: 44px desktop / 33px mobile */
	line-height: 1.3 !important; /* live 1.3; overrides the inline line-height on the heading */
	letter-spacing: 0.66px;
	margin: 0;
}
.pt-feature__img img {
	width: 100%;
	height: auto;
	display: block;
}
.pt-feature__sub {
	font-weight: 700;
	color: var(--pt-ink);
}

/* =========================================================================
   COLLECTION / PRODUCT CARDS (collage)
   ========================================================================= */
.pt-card {
	display: flex;
	flex-direction: column;
}
.pt-card__img {
	margin: 0;
	overflow: hidden;
	background: var(--pt-light-gray, #f3f3f3);
}
.pt-card__img img {
	width: 100%;
	display: block;
	transition: transform 0.4s ease;
}
.pt-card:hover .pt-card__img img {
	transform: scale(1.03);
}
.pt-card__title {
	font-size: 1.15rem;
	font-weight: 400;
	margin: 14px 0 0;
}
.pt-card__title a {
	color: var(--pt-ink);
}
.pt-card__title a:hover {
	text-decoration: underline;
	text-underline-offset: 4px;
}
.pt-card__price {
	margin: 2px 0 0;
}

/* =========================================================================
   FOOTER
   ========================================================================= */
/* Trim the oversized footer's vertical spacing. !important overrides the inline
   padding + spacer heights set in parts/footer.html. */
.pt-footer {
	padding-top: 36px !important;
	padding-bottom: 24px !important;
}
.pt-footer .wp-block-spacer {
	height: 16px !important;
}
.pt-footer__nav .wp-block-navigation-item__content {
	color: var(--pt-ink);
	font-weight: 400;
}
.pt-footer__nav .wp-block-navigation-item__content:hover {
	text-decoration: underline;
	text-underline-offset: 3px;
}
.pt-footer__lang {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 8px;
}
.pt-footer__lang-label {
	font-size: 0.85rem;
	color: var(--pt-ink);
}
.pt-lang--box {
	border: 1px solid var(--pt-border);
	padding: 10px 14px;
	font-size: 0.9rem;
}
/* Polylang footer switcher — Dawn-style "English ⌄" disclosure dropdown.
   The list opens ABOVE the button (footer sits at the page bottom) on
   hover/focus, mirroring the header language selector. */
.pt-flang {
	position: relative;
	display: inline-block;
}
.pt-flang__btn {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	background: #fff;
	border: 1px solid rgba(18, 18, 18, 0.35);
	padding: 12px 16px;
	font: inherit;
	font-size: 0.9rem;
	color: var(--pt-ink);
	cursor: pointer;
}
.pt-flang__btn:hover {
	border-color: var(--pt-ink);
}
.pt-flang__list {
	position: absolute;
	bottom: 100%;
	left: 0;
	margin: 0 0 10px;
	padding: 6px 0;
	list-style: none;
	min-width: 150px;
	background: #fff;
	border: 1px solid var(--pt-border);
	box-shadow: 0 6px 24px rgba(0, 0, 0, 0.08);
	opacity: 0;
	visibility: hidden;
	transform: translateY(4px);
	transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s ease;
	z-index: 50;
}
.pt-flang:hover .pt-flang__list,
.pt-flang:focus-within .pt-flang__list {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}
.pt-flang__list li {
	margin: 0;
}
.pt-flang__list a {
	display: block;
	padding: 8px 16px;
	font-size: 0.9rem;
	color: var(--pt-ink);
	white-space: nowrap;
	text-decoration: none;
}
.pt-flang__list a:hover,
.pt-flang__list .current-lang a {
	background: #f4f4f4;
}
.pt-footer__bottom {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 16px;
	border-top: 1px solid var(--pt-border);
	padding-top: 24px;
}
.pt-copyright {
	margin: 0;
	font-size: 0.8rem;
	color: rgba(18, 18, 18, 0.7);
}
.pt-payicons {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}
.pt-payicon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 24px;
	border: 1px solid var(--pt-border);
	border-radius: 4px;
	background: #fff;
	font-size: 8px;
	font-weight: 700;
	letter-spacing: 0.02em;
	color: #555;
}
.pt-payicon[data-brand="visa"] { color: #1a1f71; }
.pt-payicon[data-brand="mastercard"] { color: #eb001b; }
.pt-payicon[data-brand="amex"] { color: #1f72cd; }
.pt-payicon[data-brand="discover"] { color: #e8730e; }

/* =========================================================================
   SECONDARY PAGES (About, Contact, Policies)
   ========================================================================= */
.screen-reader-text {
	position: absolute !important;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden; clip: rect(0, 0, 0, 0);
	white-space: nowrap; border: 0;
}

/* ---- About ---- */
.pt-about__title {
	font-size: clamp(1.9rem, 3.2vw, 2.6rem);
	font-weight: 400;
	margin: 0;
}
.pt-about p {
	line-height: 1.7;
}
/* Live's About button is sentence case (theme buttons elsewhere are caps) */
.pt-about .wp-block-button__link {
	text-transform: none;
	letter-spacing: 0.02em;
}
.pt-about__img {
	margin: 0;
}
.pt-about__img img {
	width: 100%;
	height: auto;
	display: block;
}

/* ---- Contact ---- */
.pt-contact__title {
	font-size: clamp(2.2rem, 5vw, 3.4rem);
	font-weight: 400;
	margin: 0;
}
/* Contact block: heading, intro, address + form all share one left edge and
   width (matches live). The constrained group centres any child narrower than
   its 1100px content size, which pushed the intro (760) + form (830) inward;
   letting them fill the full 1100 keeps them flush-left with the heading. */
.pt-contact__intro {
	max-width: 1100px;
}
.pt-contact__addr {
	line-height: 1.7;
}
.pt-contact-form {
	margin-top: 44px;
	max-width: 1100px;
}
.pt-form-row {
	display: flex;
	gap: 16px;
}
.pt-form-row .pt-field {
	flex: 1 1 0;
}
.pt-field {
	display: block;
	margin-bottom: 16px;
}
.pt-contact-form input,
.pt-contact-form textarea {
	width: 100%;
	padding: 15px 16px;
	border: 1px solid rgba(18, 18, 18, 0.25);
	border-radius: 0;
	background: #fff;
	color: var(--pt-ink);
	font-family: inherit;
	font-size: 1rem;
	line-height: 1.4;
	box-sizing: border-box;
}
.pt-contact-form textarea {
	min-height: 130px;
	resize: vertical;
}
.pt-contact-form input::placeholder,
.pt-contact-form textarea::placeholder {
	color: rgba(18, 18, 18, 0.6);
}
.pt-contact-form input:focus,
.pt-contact-form textarea:focus {
	outline: none;
	border-color: var(--pt-ink);
}
.pt-contact-form__submit {
	margin-top: 8px;
	display: inline-block;
	background: var(--pt-ink);
	color: #fff;
	border: 0;
	border-radius: 0;
	padding: 15px 38px;
	font-family: inherit;
	font-size: 1rem;
	font-weight: 400;
	cursor: pointer;
	transition: background 0.2s ease;
}
.pt-contact-form__submit:hover {
	background: var(--pt-navy);
}
/* ---- Contact Form 7 integration (keeps the hand-built look) ---- */
.pt-contact-form .wpcf7-form-control-wrap {
	display: block;
}
/* submit is an <input type=submit>; exclude it from the field input styling */
.pt-contact-form input[type="submit"] {
	width: auto;
	border: 0;
	margin-top: 8px;
	background: var(--pt-ink);
	color: #fff;
	border-radius: 0;
	padding: 15px 38px;
	font-size: 1rem;
	font-weight: 400;
	cursor: pointer;
	transition: background 0.2s ease;
}
.pt-contact-form input[type="submit"]:hover {
	background: var(--pt-navy);
}
/* honeypot — visually removed, still in the DOM for bots */
.pt-honeypot {
	position: absolute !important;
	left: -9999px !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
}
/* CF7 validation + response messages */
.pt-contact-form .wpcf7-not-valid-tip {
	color: #b3261e;
	font-size: 0.82rem;
	margin-top: 4px;
}
.pt-contact-form input.wpcf7-not-valid,
.pt-contact-form textarea.wpcf7-not-valid {
	border-color: #b3261e;
}
.wpcf7 .wpcf7-response-output {
	margin: 18px 0 0;
	padding: 12px 16px;
	border: 1px solid var(--pt-border);
	font-size: 0.92rem;
}
.wpcf7 form.sent .wpcf7-response-output {
	border-color: #1b6e3d;
	color: #1b6e3d;
}

/* ---- Policy pages ---- */
.pt-policy__title {
	font-size: clamp(2rem, 4vw, 2.75rem);
	font-weight: 400;
	margin: 0;
}
.pt-policy__h2 {
	font-size: 1.4rem;
	font-weight: 400;
	margin-top: 34px;
	margin-bottom: 8px;
}
.pt-policy__h {
	font-size: 1.12rem;
	font-weight: 400;
	margin-top: 26px;
	margin-bottom: 6px;
}
.pt-policy p,
.pt-policy li {
	color: rgba(18, 18, 18, 0.78);
	line-height: 1.75;
}
.pt-policy ul {
	padding-left: 1.4em;
	margin: 8px 0;
}
.pt-policy li {
	margin: 5px 0;
}
.pt-policy strong {
	color: var(--pt-ink);
}
.pt-policy a {
	color: var(--pt-ink);
	text-decoration: underline;
	word-break: break-word;
}

/* ---- Education ---- */
.pt-edu__title {
	font-size: clamp(1.9rem, 3.4vw, 2.6rem);
	font-weight: 400;
	margin: 0;
}
.pt-edu__eyebrow {
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: rgba(18, 18, 18, 0.55);
	margin: 0 0 6px;
}
.pt-edu__lead {
	font-size: clamp(1.9rem, 3.4vw, 2.6rem);
	font-weight: 400;
	margin: 0;
}
.pt-edu__sub {
	font-size: 1.2rem;
	font-weight: 400;
	color: rgba(18, 18, 18, 0.6);
	margin: 10px 0 20px;
}
.pt-edu__h {
	font-size: 1.5rem;
	font-weight: 400;
	margin-top: 34px;
	margin-bottom: 10px;
}
.pt-edu__article p {
	line-height: 1.75;
	margin-bottom: 18px;
}

/* SEM gallery */
.pt-sem__heading {
	font-size: 1.3rem;
	font-weight: 400;
	margin-bottom: 32px;
}
.pt-sem__row {
	flex-wrap: wrap;
}
.pt-sem__cell {
	flex-basis: calc(50% - 20px) !important;
}
.pt-sem__img {
	margin: 0 0 10px;
}
.pt-sem__img img {
	width: 100%;
	height: auto;
	display: block;
}
.pt-sem__cap {
	margin: 0 0 4px;
}
.pt-sem__cap strong {
	color: var(--pt-ink);
}

/* Video + text resource rows */
.pt-video {
	position: relative;
	width: 100%;
	aspect-ratio: 16 / 9;
	background: #000;
	overflow: hidden;
}
.pt-video iframe {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	border: 0;
	display: block;
}
.pt-vt__title {
	font-size: clamp(1.6rem, 2.4vw, 2rem);
	font-weight: 400;
	margin: 0;
}

/* ---- Blog / News listing ---- */
.pt-blog__title {
	font-size: clamp(33px, 3.5vw, 44px); /* live "News" listing title = 44px */
	font-weight: 400;
	letter-spacing: 0.66px;
	margin: 0 0 48px;
}
.pt-blog__grid {
	gap: 40px 32px;
}
.pt-blog__thumb img {
	width: 100%;
	height: auto;
	display: block;
}
.pt-blog__card-title {
	font-size: 1.3rem;
	font-weight: 400;
}
.pt-blog__card-title a {
	color: var(--pt-ink);
}

/* ---- Group Testing Central ---- */
.pt-gtc__title {
	font-size: clamp(2.2rem, 4.5vw, 3.1rem);
	font-weight: 400;
	margin: 0 0 28px;
}
.pt-gtc__intro p {
	line-height: 1.7;
}
.pt-gtc__list {
	width: fit-content;
	max-width: 100%;
	margin: 12px auto;
	padding-left: 1.3em;
	text-align: left;
	color: rgba(18, 18, 18, 0.78);
	line-height: 1.7;
}
.pt-gtc__guide {
	font-size: 1.5rem;
	font-weight: 700;
}
.pt-step__eyebrow {
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: rgba(18, 18, 18, 0.55);
	margin: 0 0 6px;
}
.pt-step__title {
	font-size: clamp(1.6rem, 2.6vw, 2.1rem);
	font-weight: 400;
	margin: 0 0 16px;
}
.pt-step p {
	line-height: 1.7;
	margin-bottom: 14px;
}
.pt-step__img {
	margin: 0;
}
.pt-step__img img {
	width: 100%;
	height: auto;
	display: block;
}

/* ---- Form pages (Jotform embeds) ---- */
.pt-form-page__title {
	font-size: clamp(2rem, 4vw, 2.75rem);
	font-weight: 400;
	margin: 0 0 24px;
}
.pt-jotform {
	width: 100%;
}
.pt-jotform iframe {
	width: 100% !important;
	min-width: 100% !important;
	max-width: 100% !important;
	border: 0;
}

/* ---- Attestation & Disclaimer ---- */
.pt-attest__title {
	font-size: clamp(2.6rem, 5.5vw, 4rem);
	font-weight: 400;
	margin: 0 0 32px;
}
.pt-attest__list {
	padding-left: 1.3em;
}
.pt-attest__list li {
	color: rgba(18, 18, 18, 0.78);
	line-height: 1.7;
	margin: 10px 0;
	font-size: 1.05rem;
}

/* =========================================================================
   COLLECTION / CATEGORY ARCHIVES
   ========================================================================= */
.pt-collbanner {
	align-items: center;
}
.pt-collbanner .wp-block-cover__background {
	background-color: var(--pt-navy);
	opacity: 0.5;
}
.pt-collbanner__inner {
	width: 100%;
}
.pt-collbanner__title {
	font-size: clamp(55px, 4.75vw, 68px); /* live: 68px desktop / 55px mobile */
	font-weight: 400 !important; /* live banner is REGULAR weight, not bold; overrides the inline font-weight:700 */
	line-height: 1.3 !important; /* live 1.3; overrides the inline line-height:1.05 */
	margin: 0;
	letter-spacing: 0.66px;
	text-align: center; /* live centres the collection banner title */
}

/* Filter sidebar (lab supplies) — mirrors live's "Filter: / Product type" rail */
.pt-coll-filter__label,
.pt-coll-filter p.pt-coll-filter__label {
	font-size: 0.95rem;
	color: rgba(18, 18, 18, 0.75) !important;
	margin: 0 0 14px;
}
.pt-coll-filter__heading,
.pt-coll-filter h4.pt-coll-filter__heading {
	font-size: 1rem;
	font-weight: 400;
	border-top: 1px solid var(--pt-border, #e8e8e8);
	padding-top: 16px;
	margin: 0 0 4px;
}
/* Live's rail is borderless — strip the block's box chrome */
.pt-coll-filter .wp-block-woocommerce-product-filter-checkbox-list,
.pt-coll-filter .wc-block-product-filter-checkbox-list__list,
.pt-coll-filter .wp-block-woocommerce-product-filter-attribute {
	border: 0 !important;
	padding-left: 0;
	padding-right: 0;
	background: transparent;
}
.pt-coll-filter .wc-block-product-filter-checkbox-list__label,
.pt-coll-filter .wc-block-product-filter-checkbox-list__item {
	font-size: 0.9rem;
}
/* Hide the mobile "Filter products" overlay trigger on desktop widths, and the
   drawer chrome (header/footer + apply button) that leaks into the inline view —
   desktop filters apply instantly on click, live-style. */
@media (min-width: 782px) {
	.pt-coll-filter .wc-block-product-filters__open-overlay,
	.pt-coll-filter .wc-block-product-filters__overlay-header,
	.pt-coll-filter .wc-block-product-filters__overlay-footer {
		display: none !important;
	}
	.pt-coll-filter .wc-block-product-filters__overlay-dialog {
		box-shadow: none;
		border: 0;
	}
}
@media (max-width: 781px) {
	/* columns stack on mobile; keep the rail compact above the grid */
	.pt-coll-filter {
		flex-basis: auto !important;
	}
}

/* Intro (order testing) */
.pt-coll-intro__title {
	font-size: clamp(1.7rem, 2.8vw, 2.2rem);
	font-weight: 400;
	margin: 0;
}
.pt-coll-intro p {
	line-height: 1.7;
}
.pt-coll-intro__video {
	margin: 0;
}
.pt-coll-intro__video video {
	width: 100%;
	display: block;
	border-radius: 0;
	background: #000;
}
.pt-coll-intro__img {
	margin: 0;
}
.pt-coll-intro__img img {
	width: 100%;
	height: auto;
	display: block;
}

/* Results count + sorting bar */
.pt-coll-bar {
	border-bottom: 1px solid var(--pt-border);
	padding-bottom: 16px;
	margin-bottom: 32px;
	font-size: 0.9rem;
	color: rgba(18, 18, 18, 0.7);
}
.pt-coll-bar .wc-block-product-sorting select,
.pt-coll-bar select {
	border: 1px solid var(--pt-border);
	border-radius: 0;
	padding: 8px 28px 8px 12px;
	font-family: inherit;
	font-size: 0.9rem;
	background-color: #fff;
}

/* Product grid + cards — mirrored to live Dawn (8px gap, 400-weight titles) */
.pt-products .wp-block-post-template,
.pt-products ul {
	gap: 8px !important;
	margin: 0;
	padding: 0;
	list-style: none;
}
.pt-products li.product,
.pt-products .wp-block-post {
	margin: 0;
}
.pt-products .wc-block-components-product-image,
.pt-products .wp-block-woocommerce-product-image {
	margin: 0;
}
.pt-products .wp-block-woocommerce-product-image img,
.pt-products li.product img {
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	border-radius: 0 !important;
	display: block;
}
.pt-products .wp-block-post-title {
	font-size: 1.24rem !important; /* live 19.8px; beat the block's has-medium-font-size preset (carries !important) */
	font-weight: 400;
	line-height: 1.3;
	letter-spacing: 0.66px;
	margin: 10px 0 2px;
	text-align: left;
}
.pt-products .wp-block-post-title,
.pt-products .wp-block-post-title a {
	color: var(--pt-ink);
	font-weight: 400;
}
.pt-products .wp-block-post-title a:hover {
	text-decoration: underline;
	text-underline-offset: 3px;
}
.pt-products .wc-block-components-product-price,
.pt-products .wp-block-woocommerce-product-price {
	color: var(--pt-ink);
	font-size: 1.15rem !important; /* live 18.4px; beat the block's has-small-font-size preset (carries !important) */
	letter-spacing: 1.15px;
	text-align: left;
	margin: 0 0 24px;
}
/* Sale badge — live shows a dark pill "Sale" at the image's bottom-left
   (same look as the Sold out badge), not a square top-right chip. */
.pt-products .wc-block-components-product-sale-badge {
	position: absolute;
	left: 0.6rem;
	right: auto;
	bottom: 0.6rem;
	top: auto;
	border-radius: 999px;
	background: #121212;
	color: #fff;
	font-size: 0.72rem;
	line-height: 1.4;
	padding: 0.25rem 0.7rem;
	letter-spacing: 0.04em;
	text-transform: none;
	border: 0;
	margin: 0;
}
/* Sale cards: struck-through regular price sits on its own line above the
   "From" sale price, mirroring live. */
.pt-products .wp-block-woocommerce-product-price del {
	display: block;
	color: rgba(18, 18, 18, 0.6);
	font-size: 1rem;
}

/* =========================================================================
   SINGLE PRODUCT
   ========================================================================= */
.pt-single__cols {
	gap: 56px;
}
/* "Shipping calculated at checkout." caption (mirrors live) */
.pt-single__shipnote {
	font-size: 0.85rem;
	color: rgba(18, 18, 18, 0.65);
	margin: 4px 0 0;
}
.pt-single__shipnote a {
	text-decoration: underline;
	text-underline-offset: 2px;
	color: inherit;
}
.pt-single__gallery img {
	border-radius: 0 !important;
}
.pt-single__gallery .wc-block-components-product-image-gallery__image img {
	width: 100%;
	display: block;
}
/* Gallery thumbnails as a single horizontal strip (matches live's row) rather
   than the default 4-per-row wrapping grid. */
.pt-single__gallery .flex-control-thumbs {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	gap: 8px;
	margin: 20px 0 0; /* QA #11: padding between main image and gallery thumbnails */
	padding: 0;
}
.pt-single__gallery .flex-control-thumbs li {
	width: auto;
	float: none;
	margin: 0;
	flex: 0 0 90px;
}
.pt-single__gallery .flex-control-thumbs img {
	width: 90px;
	height: auto;
}
/* Sticky image column on desktop (matches live: the image pins while the long
   order form scrolls, releasing at the end of the form). align-items:flex-start
   lets the gallery be its own (short) height so it can pin; top:160px clears our
   149px sticky header. Columns stack below 990px, where this doesn't apply, so
   the mobile stacked layout is unaffected. */
@media (min-width: 990px) {
	.pt-single__cols {
		align-items: flex-start;
	}
	.pt-single__gallery {
		position: sticky;
		top: 160px;
		align-self: flex-start;
	}
}
.pt-single__title {
	font-size: clamp(2rem, 3.6vw, 2.75rem);
	font-weight: 400;
	line-height: 1.3 !important; /* live 1.3; overrides the inline lineHeight:1.1 on the block */
	letter-spacing: 0.66px;
	margin: 0 0 12px;
}
.pt-single__price,
.pt-single__price .woocommerce-Price-amount,
.pt-single .wp-block-woocommerce-product-price {
	font-size: 1.35rem !important; /* !important so the "From" prefix matches the amount (beats the block's x-large preset) */
	font-weight: 400;
	letter-spacing: 1.5px; /* live price ls ~1.5px */
	color: var(--pt-ink);
}
.pt-single__price {
	margin: 0 0 20px;
}
.pt-single__excerpt {
	color: rgba(18, 18, 18, 0.78);
	line-height: 1.7;
	margin-bottom: 24px;
}

/* Add-to-cart form: square inputs, dark full-width button (Dawn) */
.pt-single__atc .variations,
.pt-single__atc table {
	border: 0;
	margin-bottom: 16px;
}
.pt-single__atc .variations td,
.pt-single__atc .variations th {
	padding: 6px 0;
	border: 0;
	background: none;
}
.pt-single__atc label,
.pt-single__atc .variations th {
	font-weight: 400;
	font-size: 0.95rem;
	color: var(--pt-ink);
}
.pt-single__atc select,
.pt-single .quantity input[type="number"] {
	border: 1px solid rgba(18, 18, 18, 0.25);
	border-radius: 0;
	padding: 12px 14px;
	font-family: inherit;
	font-size: 1rem;
	background: #fff;
	color: var(--pt-ink);
}
.pt-single__atc select {
	width: 100%;
}
.pt-single .quantity {
	margin-right: 0;
	margin-bottom: 12px;
}
.pt-single .quantity input[type="number"] {
	width: 84px;
	text-align: center;
}
.pt-single__atc .single_add_to_cart_button,
.pt-single__atc .wp-block-button__link,
.pt-single__atc button[type="submit"] {
	display: block;
	width: 100%;
	background: var(--pt-ink);
	color: #fff;
	border: 0;
	border-radius: 0;
	padding: 16px 32px;
	font-family: inherit;
	font-weight: 500;
	font-size: 17.25px; /* live "Add to cart" 17.25px */
	letter-spacing: 1.15px; /* live ls 1.15 */
	text-transform: none; /* live buttons are title case, not uppercase */
	cursor: pointer;
	transition: background 0.2s ease;
}
.pt-single__atc .single_add_to_cart_button:hover {
	background: var(--pt-navy);
}
/* Hide the "In stock / N in stock" availability line on product pages (live
   shows none). Only the in-stock variant is hidden, so genuine "Out of stock"
   messaging is preserved. */
.pt-single .stock.in-stock,
.woocommerce div.product p.stock.in-stock {
	display: none !important;
}

/* Group-test custom fields (Tepo replacement) on the product page */
.pt-gt-fields {
	margin: 8px 0 20px;
}
.pt-gt-field {
	margin: 0 0 14px;
}
.pt-gt-field label {
	display: block;
	font-weight: 400;
	font-size: 0.9rem;
	margin-bottom: 6px;
	color: var(--pt-ink);
}
.pt-gt-field input[type="text"],
.pt-gt-field textarea {
	width: 100%;
	padding: 12px 14px;
	border: 1px solid rgba(18, 18, 18, 0.25);
	border-radius: 0;
	background: #fff;
	color: var(--pt-ink);
	font-family: inherit;
	font-size: 1rem;
	box-sizing: border-box;
}
.pt-gt-field input:focus,
.pt-gt-field textarea:focus {
	outline: none;
	border-color: var(--pt-ink);
}
.pt-gt-field .required {
	color: #b00020;
	border: 0;
	text-decoration: none;
}

/* Description / details */
.pt-single__details {
	margin-top: 56px;
}
.pt-single__details h2,
.pt-single__details .wc-tab-title {
	font-size: 1.5rem;
	font-weight: 700;
}
.pt-single__details p,
.pt-single__details li {
	line-height: 1.75;
	color: rgba(18, 18, 18, 0.85);
}

/* Related products ("You may also like") */
.wp-block-woocommerce-related-products,
.related.products {
	margin-top: 64px;
}
.wp-block-woocommerce-related-products h2,
.related.products > h2 {
	font-size: 1.6rem;
	font-weight: 400;
	margin-bottom: 28px;
}
.wp-block-woocommerce-related-products img,
.related.products img {
	border-radius: 0 !important;
	aspect-ratio: 1 / 1;
	object-fit: cover;
}
.wp-block-woocommerce-related-products .wp-block-post-title {
	font-size: 1.05rem;
	font-weight: 400;
	text-align: left;
}
.wp-block-woocommerce-related-products .wp-block-post-title a {
	color: var(--pt-ink);
}
.wp-block-woocommerce-related-products .wc-block-components-product-price,
.wp-block-woocommerce-related-products .wp-block-woocommerce-product-price {
	text-align: left;
	color: var(--pt-ink);
}
/* No add-to-cart button on related cards (match live "You may also like") */
.wp-block-woocommerce-related-products .wp-block-button,
.wp-block-woocommerce-related-products .wc-block-components-product-button,
.wp-block-woocommerce-related-products .wp-block-woocommerce-product-button {
	display: none !important;
}

/* =========================================================================
   WOOCOMMERCE — CART / CHECKOUT / MY ACCOUNT (visual polish only)
   No flow/field/order-logic changes — styling to match Dawn (square, Assistant).
   ========================================================================= */

/* Square off Woo cards, panels, inputs & buttons (Dawn is squared) */
.woocommerce .cart_totals,
.woocommerce-account form.woocommerce-form-login,
.woocommerce-account form.woocommerce-form-register,
.woocommerce table.shop_table,
.wc-block-components-panel,
.wc-block-components-text-input input,
.wc-block-components-select__container,
.wc-block-checkout__form input,
.wc-block-components-button,
.wc-block-cart__submit-button {
	border-radius: 0 !important;
}

/* Headings on these pages */
.woocommerce-account h1,
.woocommerce-cart h1,
.woocommerce-checkout h1 {
	font-size: clamp(1.9rem, 3.4vw, 2.6rem);
	font-weight: 400;
}
.woocommerce h2,
.woocommerce-account .woocommerce h2 {
	font-weight: 400;
}

/* Classic Woo inputs (login, account details, addresses) */
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.woocommerce form .form-row select,
.woocommerce .woocommerce-Input,
.woocommerce input[type="text"],
.woocommerce input[type="email"],
.woocommerce input[type="password"],
.woocommerce input[type="tel"] {
	border: 1px solid rgba(18, 18, 18, 0.25);
	border-radius: 0;
	padding: 13px 14px;
	font-family: inherit;
	font-size: 1rem;
	box-sizing: border-box;
}
.woocommerce form .form-row input.input-text:focus,
.woocommerce form .form-row textarea:focus {
	outline: none;
	border-color: var(--pt-ink);
}

/* Classic Woo buttons -> dark square (matches theme) */
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce .button.alt,
.woocommerce-MyAccount-content .button {
	background: var(--pt-ink);
	color: #fff;
	border: 0;
	border-radius: 0;
	padding: 15px 34px;
	font-weight: 500;
	font-size: 17.25px; /* live buttons 17.25px */
	letter-spacing: 1.15px; /* live ls 1.15 */
	text-transform: none; /* live buttons are title case, not uppercase */
	transition: background 0.2s ease;
}
.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover,
.woocommerce .button.alt:hover {
	background: var(--pt-navy);
	color: #fff;
}

/* My Account page title -> 44px to match the site's other page titles */
.woocommerce-account .wp-block-post-title {
	font-size: clamp(33px, 3.5vw, 44px);
	font-weight: 400;
	letter-spacing: 0.66px;
}
/* Order-received (thank you) page: title -> 44px; gated "Confirm email and view
   order" button -> title case, matching the site's other buttons. */
.woocommerce-order-received .wp-block-post-title {
	font-size: clamp(33px, 3.5vw, 44px);
	font-weight: 400;
	letter-spacing: 0.66px;
}
.woocommerce-order-received input.button {
	font-size: 17.25px !important;
	font-weight: 500 !important;
	letter-spacing: 1.15px !important;
	text-transform: none !important;
}
/* Login / register: constrain width + square card */
.woocommerce-account .woocommerce form.woocommerce-form-login,
.woocommerce-account .woocommerce form.woocommerce-form-register {
	border: 1px solid var(--pt-border);
	padding: 32px;
	max-width: 560px;
}

/* My Account navigation (logged-in) */
.woocommerce-MyAccount-navigation ul {
	list-style: none;
	margin: 0 0 8px;
	padding: 0;
	border-top: 1px solid var(--pt-border);
}
.woocommerce-MyAccount-navigation li {
	margin: 0;
	border-bottom: 1px solid var(--pt-border);
}
.woocommerce-MyAccount-navigation li a {
	display: block;
	padding: 13px 4px;
	color: var(--pt-ink);
	font-weight: 600;
}
.woocommerce-MyAccount-navigation li.is-active a,
.woocommerce-MyAccount-navigation li a:hover {
	text-decoration: none;
	opacity: 0.65;
}
.woocommerce-MyAccount-navigation li.is-active a {
	opacity: 1;
	box-shadow: inset 3px 0 0 var(--pt-ink);
	padding-left: 14px;
}

/* Tables (orders, addresses, cart) */
.woocommerce table.shop_table th,
.woocommerce table.shop_table td {
	border-color: var(--pt-border);
}

/* Cart/checkout block buttons stay dark+square (inherit theme button color) */
.wc-block-cart__submit-button,
.wc-block-components-checkout-place-order-button {
	border-radius: 0 !important;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

/* Attestation checkbox: make the embedded policy links clearly clickable */
.pt-policy-link,
.wc-block-components-checkbox__label .pt-policy-link {
	color: var(--pt-navy);
	font-weight: 700;
	text-decoration: underline;
	text-underline-offset: 2px;
	text-decoration-thickness: 1px;
}
.pt-policy-link:hover,
.wc-block-components-checkbox__label .pt-policy-link:hover {
	color: var(--pt-ink);
	text-decoration: underline;
}

/* =========================================================================
   RESPONSIVE
   ========================================================================= */
@media (max-width: 990px) {
	.pt-header__left {
		gap: 12px;
	}
	.pt-hero {
		min-height: 480px !important;
	}
}

/* About: keep 2-col down to Dawn's 750px breakpoint, then stack image-first. */
@media (max-width: 749px) {
	.pt-about__cols {
		flex-direction: column-reverse !important;
	}
	.pt-about__cols > .wp-block-column {
		flex-basis: 100% !important;
		width: 100% !important;
	}
	.pt-about__img img {
		aspect-ratio: 16 / 10 !important;
	}
}

@media (max-width: 781px) {
	.pt-hero {
		min-height: 420px !important;
	}
	.pt-form-row {
		flex-direction: column;
		gap: 0;
	}
	.pt-sem__cell {
		flex-basis: 100% !important;
	}
	.pt-footer__bottom {
		justify-content: center;
		text-align: center;
	}
}

/* =========================================================================
   FiboSearch (header) + Product Filters (collection toolbar)
   ========================================================================= */
.pt-header__icons {
	display: flex;
	align-items: center;
	gap: 18px;
}
.pt-header__actions {
	gap: 18px;
}
.pt-header__actions .dgwt-wcas-search-wrapp {
	width: 230px;
	max-width: 34vw;
}
.pt-header__actions .dgwt-wcas-search-input {
	border-radius: 0;
	border: 1px solid rgba(18, 18, 18, 0.25);
}

/* Collection toolbar "Filter products" trigger -> dark square button */
.pt-coll-bar__tools {
	display: flex;
	align-items: center;
	gap: 14px;
	flex-wrap: nowrap;
}
.pt-coll-bar__tools .wp-block-woocommerce-product-filters button,
.pt-coll-bar__tools .wc-block-product-filters__open-overlay-button,
.wp-block-woocommerce-product-filters .wc-block-product-filters__open-overlay-button {
	background: var(--pt-ink);
	color: #fff;
	border: 0;
	border-radius: 0;
	padding: 10px 18px;
	font-size: 0.85rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	cursor: pointer;
}

/* =========================================================================
   404 — Page not found
   ========================================================================= */
.pt-404 {
	text-align: center;
}
.pt-404__code {
	margin: 0 0 10px;
	font-size: 0.85rem;
	color: rgba(18, 18, 18, 0.55);
}
.pt-404__title {
	font-size: clamp(2.4rem, 5vw, 3.6rem);
	font-weight: 400;
	margin: 0;
}
.pt-404__msg {
	max-width: 520px;
	margin-left: auto;
	margin-right: auto;
	color: rgba(18, 18, 18, 0.7);
}
.pt-404__search {
	margin-top: 30px;
}
.pt-404__search .dgwt-wcas-search-wrapp {
	width: 100%;
	max-width: 460px;
	margin: 0 auto;
}
/* Square, white field to match the brand (FiboSearch defaults to a grey pill). */
.pt-404__search .dgwt-wcas-search-input[type="search"] {
	height: 52px !important;
	border: 1px solid var(--pt-ink) !important;
	border-radius: 0 !important;
	background: #fff !important;
	box-shadow: none !important;
}
.pt-404__search .dgwt-wcas-search-form,
.pt-404__search .dgwt-wcas-sf-wrapp {
	border-radius: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
}

/* ── Product reviews (CusRev) — match the live Judge.me widget ─────────────── */
/* The migrated reviews carry full "city, state, country" location strings, so
   CusRev builds its flag <img> as /img/flags/<location>.svg and 404s (it only
   ships country-code flags). The live Judge.me widget shows no location at all,
   so hide the whole location line — fixes the broken image AND matches live. */
.ivole-review-country-icon,
.ivole-review-country-text {
	display: none !important;
}

/* ── Group-test order fields (Qikify replacement) — match the live form ────── */
/* Stack the WooCommerce variation selector (e.g. "Number of Vials"): Woo's
   default renders the label in a table cell on the LEFT and the dropdown on the
   RIGHT. The live Shopify form (and our custom fields) put the label ABOVE a
   full-width control, so flatten the table to blocks. */
.woocommerce div.product form.cart table.variations,
.woocommerce div.product form.cart table.variations tbody,
.woocommerce div.product form.cart table.variations tr {
	display: block;
	width: 100%;
	border: 0;
	margin: 0;
}
.woocommerce div.product form.cart table.variations {
	margin: 0 0 1.25rem;
}
.woocommerce div.product form.cart table.variations th.label,
.woocommerce div.product form.cart table.variations td.value {
	display: block;
	width: 100%;
	padding: 0;
	text-align: left;
	border: 0;
}
.woocommerce div.product form.cart table.variations th.label {
	margin: 0 0 .4rem;
	font-weight: 400;
	line-height: 1.3;
}
.woocommerce div.product form.cart table.variations td.value select {
	width: 100%;
	min-height: 48px;
	padding: .55rem .75rem;
	border: 1px solid #ccc;
	border-radius: 0;
	background-color: #fff;
	box-sizing: border-box;
}
/* A default variation is preselected (matches the live "1 Vial" default), so the
   "Clear" link is redundant and not on the live form — hide it. Keep the
   selected-variation price (it updates as the vial count changes) but tighten
   its spacing so it sits cleanly under the dropdown. */
.woocommerce div.product form.cart .reset_variations {
	display: none !important; /* WC toggles this via an inline style — needs !important */
}
.woocommerce div.product form.cart .woocommerce-variation.single_variation {
	margin: .25rem 0 1rem;
}
.woocommerce div.product form.cart .single_variation_wrap {
	margin-top: .25rem;
}

/* Custom text/textarea fields — label above a full-width square input. */
.pt-gt-fields {
	margin: 0 0 1rem;
}
.pt-gt-field {
	margin: 0 0 1.25rem;
}
.pt-gt-field label {
	display: block;
	margin: 0 0 .4rem;
	font-weight: 400;
	line-height: 1.3;
}
.pt-gt-field .required {
	color: #c1121f;
	border: 0;
	text-decoration: none;
}
.pt-gt-field input[type="text"],
.pt-gt-field textarea {
	width: 100%;
	padding: .6rem .75rem;
	border: 1px solid #ccc;
	border-radius: 0;
	background: #fff;
	box-sizing: border-box;
}
.pt-gt-field .pt-gt-limit {
	display: block;
	margin-top: .25rem;
	text-align: right;
	font-size: .8em;
	color: #767676;
}
.pt-gt-field .pt-gt-desc {
	display: block;
	margin-top: .4rem;
	font-style: italic;
	font-size: .92em;
	line-height: 1.4;
	color: #767676;
}
.pt-gt-required-note {
	margin: 0 0 1.1rem;
	font-style: italic;
	color: #333;
}

/* Group Testing Central (page 1033) — Dawn underlines inline body links, but our
   theme leaves content links undecorated. Underline this page's inline content
   links (not the block buttons) to match the live page. */
body.page-id-1033 .entry-content a:not(.wp-block-button__link):not(.wp-element-button) {
	text-decoration: underline;
	color: rgba(18, 18, 18, 0.85);
}
/* Live left-aligns the GTC title + intro copy; only the "Group Testing Guide"
   heading and its PDF link stay centred. */
body.page-id-1033 .pt-gtc__title,
body.page-id-1033 .pt-gtc__intro > p {
	text-align: left;
}
body.page-id-1033 .pt-gtc__guide,
body.page-id-1033 .pt-gtc__guide + p {
	text-align: center;
}
/* Live's GTC buttons are outline style in sentence case (not solid caps). */
body.page-id-1033 .wp-block-button__link {
	background: transparent;
	color: var(--pt-ink);
	border: 1px solid var(--pt-ink);
	text-transform: none;
	letter-spacing: 0.02em;
	font-weight: 400;
	padding: 12px 26px;
}
body.page-id-1033 .wp-block-button__link:hover {
	background: var(--pt-ink);
	color: #fff;
}

/* ── Cart page — safe visual polish toward the live Dawn cart (no block/flow
   changes). Enlarge the line-item thumbnail and style the Continue-shopping
   link. ─────────────────────────────────────────────────────────────────── */
.wp-block-woocommerce-cart td.wc-block-cart-item__image,
.wp-block-woocommerce-cart .wc-block-cart-item__image {
	width: 110px;
}
.wp-block-woocommerce-cart .wc-block-cart-item__image img {
	width: 110px;
	height: auto;
}
.pt-continue-shopping {
	margin-bottom: 0;
}
.pt-continue-shopping a {
	text-decoration: underline;
	color: var(--pt-ink, #121212);
}

/* ── Homepage hero CTA — match live's blue rounded button ──────────────────── */
/* Live uses #334FB4, 4px radius, ~18px; our block rendered it square navy at
   15px. Override to match. */
.pt-hero__cta .wp-block-button__link {
	background-color: #334fb4 !important;
	border-radius: 4px !important;
	font-size: 1.15rem !important;
	padding: 0.75rem 1.5rem !important; /* QA #4: match live button padding */
}

/* ── Single product: "You may also like" cards match live (no buttons) ─────── */
/* Live's related cards are image+title+price only. Hide the product-collection
   card buttons — scoped to single-product + the product-template, so the main
   Add-to-Cart form button (.single_add_to_cart_button) is never affected. */
body.single-product .wp-block-woocommerce-product-button,
body.single-product .wp-block-woocommerce-product-template .wp-block-button {
	display: none !important;
}

/* ── "Sold out" badge on out-of-stock collection cards (match live) ────────── */
/* Block product-collection cards get an `outofstock` class on the <li>; live
   shows a dark pill on the image. CSS-only, only renders on OOS cards. */
.wc-block-product.outofstock .wc-block-components-product-image {
	position: relative;
	display: block;
}
.wc-block-product.outofstock .wc-block-components-product-image::after {
	content: "Sold out";
	position: absolute;
	left: 0.6rem;
	bottom: 0.6rem;
	z-index: 3;
	background: #121212;
	color: #fff;
	font-size: 0.72rem;
	line-height: 1.4;
	padding: 0.25rem 0.7rem;
	border-radius: 999px;
	pointer-events: none;
}

/* ── Header nav — match live's lighter links ──────────────────────────────── */
/* Live top-nav links measure 16.1px / weight 400. Per manager preference we run
   2px above live (18px) for a slightly more prominent header. */
.pt-nav .wp-block-navigation-item__content {
	font-size: 1.125rem;
	font-weight: 400;
}

/* =========================================================================
   EMPTY CART — match live Shopify (minimal, centered, generous whitespace).
   The structure (heading text, button, login prompt, no icon, no product
   recommendations) lives in the Cart page's empty-cart BLOCK content, not the
   theme — the block cart has no PHP empty-cart template to override. This is
   the styling only, pulled from live's computed values.
   ========================================================================= */
.wp-block-woocommerce-empty-cart-block {
	padding: 40px 0 56px;
	text-align: center;
}
/* Heading "Your cart is empty" — live: Assistant 44px / 400 / lh 1.3 / ls 0.66 */
.pt-emptycart__title {
	font-size: clamp(33px, 3.5vw, 44px) !important;
	font-weight: 400 !important;
	line-height: 1.3 !important;
	letter-spacing: 0.66px !important;
	color: var(--pt-ink) !important;
	margin: 0 0 30px !important;
}
/* "Continue shopping" — live: solid #121212, white, square, 17.25px/400, ls 1.15, ~54px tall */
.pt-emptycart__buttons { margin: 0; }
.pt-emptycart__btn .wp-block-button__link {
	background-color: var(--pt-ink) !important;
	color: #fff !important;
	border: 0 !important;
	border-radius: 0 !important;
	padding: 15px 34.5px !important;
	font-size: 17.25px !important;
	font-weight: 400 !important;
	letter-spacing: 1.15px !important;
	line-height: 1.5 !important;
	text-transform: none !important;
}
.pt-emptycart__btn .wp-block-button__link:hover { background-color: #2a2a2a !important; }
/* "Have an account?" — live: 26.4px / 400 / lh 1.3, generous gap above */
.pt-emptycart__account {
	font-size: 26.4px !important;
	font-weight: 400 !important;
	line-height: 1.3 !important;
	letter-spacing: 0.66px !important;
	color: var(--pt-ink) !important;
	margin: 63px 0 8px !important;
}
/* "Log in to check out faster." — live ~16px; Log in underlined */
.pt-emptycart__login {
	font-size: 16px !important;
	color: var(--pt-ink) !important;
	margin: 0 !important;
}
.pt-emptycart__login a {
	color: var(--pt-ink);
	text-decoration: underline;
	text-underline-offset: 3px;
}
/* Hide the page title + top "Continue shopping" link on the EMPTY cart only
   (pt-cart-empty is added server-side via body_class when the cart is empty).
   On the FILLED cart both show, matching live. */
.pt-cart-empty .wp-block-post-title,
.pt-cart-empty .pt-continue-shopping {
	display: none !important;
}
/* Filled cart: "Your cart" title + top "Continue shopping" link — matched to live */
.woocommerce-cart .wp-block-post-title {
	font-size: clamp(33px, 3.5vw, 44px); /* live 44px */
	font-weight: 400;
	letter-spacing: 0.66px;
}
.pt-continue-shopping a {
	font-size: 18.4px; /* live 18.4px */
	color: rgba(18, 18, 18, 0.85);
	text-decoration: underline;
	text-underline-offset: 3px;
}
/* Proceed-to-checkout button: match live's "Check out" (17.25px, title case) */
.wp-block-woocommerce-proceed-to-checkout-block .wc-block-cart__submit-button,
.wc-block-cart__submit-button {
	font-size: 17.25px !important;
	font-weight: 500 !important;
	letter-spacing: 1.15px !important;
	text-transform: none !important;
}

/* Checkout "Place Order" button — align with the site's other primary buttons
   (17.25px / 500 / ls 1.15 / title case — was WooCommerce's default uppercase).
   Visual only. */
.wc-block-components-checkout-place-order-button {
	font-size: 17.25px !important;
	font-weight: 500 !important;
	letter-spacing: 1.15px !important;
	text-transform: none !important;
}

/* =========================================================================
   QA #5-8: body copy / H4 / secondary buttons — match live (root 11.5px, so
   1.5rem = 17.25px, 0.06rem = 0.69px, 0.1rem = 1.15px). #6 (H2 33px) already
   matches. Body color = #121212bf (75% ink).
   ========================================================================= */
/* #5 Body text */
.pt-feature p,
.entry-content p,
.wp-block-post-content p {
	font-size: 17.25px;
	letter-spacing: 0.69px;
	color: rgba(18, 18, 18, 0.75);
}
/* #8 H4 */
.pt-feature__sub,
.entry-content h4,
.wp-block-post-content h4 {
	font-size: 17.25px;
}
/* #7 Secondary / outline buttons */
body.page-id-1033 .wp-block-button__link,
.is-style-outline .wp-block-button__link {
	font-size: 17.25px;
	letter-spacing: 1.15px;
	line-height: 20px;
}

/* QA #9: remove the 48px bottom padding on the welcome block (above microscope) */
.pt-welcome {
	padding-bottom: 0 !important;
}
/* QA #10: on mobile the "Specialized Expertise" (alt) row shows its image
   before the text. Force the columns to stack vertically and order the image
   column (last child) first. */
@media (max-width: 781px) {
	.pt-feature--alt .pt-feature__cols {
		display: flex;
		flex-direction: column;
	}
	.pt-feature--alt .pt-feature__cols > .wp-block-column:first-child { order: 2; }
	.pt-feature--alt .pt-feature__cols > .wp-block-column:last-child { order: 1; }
}
/* QA #12: remove the small block-gap before the JotForm embed. NOTE: most of the
   visible gap is INSIDE the JotForm iframe (its own top padding) and cannot be
   changed from our CSS — it must be reduced in the JotForm form builder. */
.pt-jotform {
	margin-top: 0 !important;
}
/* QA #13: cart line-item custom-field (order meta) text was too small */
.wp-block-woocommerce-cart .wc-block-components-product-details,
.wp-block-woocommerce-cart .wc-block-components-product-details li,
.wp-block-woocommerce-cart .wc-block-components-product-metadata {
	font-size: 14px !important;
	line-height: 1.5 !important;
}

/* QA #15: "Very Important Info About Group Payments" — match live: centered,
   heading 44px, paragraphs 18.4px (1.6rem@11.5) / 75% ink / lh 1.7. */
.pt-gpay__title {
	font-size: clamp(33px, 3.5vw, 44px) !important;
	letter-spacing: 0.66px;
	text-align: center;
}
.pt-gpay {
	font-size: 18.4px !important;
	letter-spacing: 0.69px !important;
	color: rgba(18, 18, 18, 0.75) !important;
	line-height: 1.7 !important;
	text-align: center !important;
}

/* QA #16: crop the Education SEM images to their content (removes the trailing
   white space). Works whether or not the source file is already cropped. */
.pt-edu img[src*="sem-"] {
	aspect-ratio: 1192 / 993;
	object-fit: cover;
	object-position: top;
}
