/**
 * Toypedia360 Core styles.
 *
 * Loaded after the theme stylesheets (see Assets::stylesheet_dependencies), so
 * rules here win on equal specificity. Several !important declarations remain
 * from when these rules lived in the child theme, which was enqueued before the
 * parent theme's main bundle. They are now mostly redundant but are kept so the
 * cascade stays identical to what was tested.
 *
 * Design tokens in use: Poppins, ink #111111, accent teal #00A99D,
 * surface #F5F5F5, support green #00B050 / blue #1E90FF / red #FF3B30,
 * card radius 16px, button radius 10px, teal-tinted shadows.
 */

/* ==========================================================================
   Product cards: uniform 1:1 thumbnails, contained and centred
   Overrides themes/shoptimizer/src/css/components/product-card.css
   ========================================================================== */
ul.products li.product .woocommerce-image__wrapper {
	aspect-ratio: 1 / 1;
	overflow: hidden;
}

/* The <a> wrapping the image needs an explicit height. Without it the img's
   height:100% resolves to 'auto' and follows the image's own aspect ratio,
   because its direct parent (the <a>) has no definite height - the wrapper
   does. That is what made non-square images sit off-centre and overflow. */
ul.products li.product .woocommerce-image__wrapper > a {
	display: block;
	width: 100%;
	height: 100%;
	position: relative;
}

ul.products li.product .woocommerce-image__wrapper img {
	position: absolute !important;
	top: 0 !important;
	left: 0 !important;
	width: 100% !important;
	height: 100% !important;
	max-width: 100% !important;
	max-height: 100% !important;
	aspect-ratio: auto !important;
	object-fit: contain !important;
	object-position: center !important;
	margin: 0 !important;
}

/* Hover shadow follows the card's corner radius. */
ul.products li.product:not(.product-category)::before {
	border-radius: 10px;
}

/* Add to cart button: 10px corners instead of the theme's 4px. */
ul.products li.product .add_to_cart_button {
	border-radius: 10px !important;
}

/* Home page "Shop Now" image feature button: 10px instead of 2px. */
.image-feature figcaption span {
	border-radius: 10px !important;
}

/* ==========================================================================
   Single product: delivery estimate
   Muted secondary information. #72767c and 13px match patterns already used
   on this site (struck-through prices, the returns line in the trust badges).
   ========================================================================== */
.toypedia360-delivery-estimate {
	display: flex;
	align-items: center;
	gap: 6px;
	margin: 6px 0 12px;
	padding: 0;
	font-size: 13px;
	line-height: 1.4;
	color: #72767c;
}

.toypedia360-delivery-estimate__icon {
	flex-shrink: 0;
	color: #72767c;
}

/* ==========================================================================
   [trust_badges] - reassurance row on the product page
   Three bordered cards, each an outline icon beside a two-line label.
   ========================================================================== */
.tp-trust-badges {
	width: 100%;
	margin: 0;
	font-family: Poppins, Arial, sans-serif;
}

.tp-trust-badges__heading {
	margin: 0 0 12px;
	color: #111111;
	font-size: 15px;
	font-weight: 700;
	line-height: 1.3;
}

.tp-trust-badges__items {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 12px;
}

.tp-trust-badges__item {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 14px;
	padding: 16px 14px;
	box-sizing: border-box;
	background: #FFFFFF;
	border: 1px solid #E6E6E6;
	border-radius: 10px;
}

.tp-trust-badges__icon {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	color: #111111;
}

.tp-trust-badges__text {
	display: flex;
	flex-direction: column;
	gap: 4px;
	min-width: 0;
}

.tp-trust-badges__title {
	color: #111111;
	font-size: 14px;
	font-weight: 700;
	line-height: 1.35;
}

.tp-trust-badges__note {
	color: #8A8F94;
	font-size: 12px;
	font-weight: 400;
	line-height: 1.4;
}


/* ==========================================================================
   WooCommerce notices, recoloured to the brand palette
   The theme ships generic #3bb54a / #3d9cd2 / #e2401c. Semantic mapping:
     green #00B050 = success or discount confirmation
     blue  #1E90FF = informational
     red   #FF3B30 = error
   ========================================================================== */
.woocommerce-message {
	background-color: #00B050 !important;
}

.woocommerce-info,
.woocommerce-noreviews,
p.no-comments {
	background-color: #1E90FF !important;
}

.woocommerce-error {
	background-color: #FF3B30 !important;
}

/* Empty cart message reads as plain text, not as a blue notice panel. */
.woocommerce-cart .cart-empty.woocommerce-info {
	background: transparent !important;
	color: #111111 !important;
	border: 0 !important;
	box-shadow: none !important;
}

/* ==========================================================================
   Checkout: coupon form
   The form is moved below the order summary by checkout-coupon.js. Its default
   50/50 float layout is designed for a wide container; in this narrow column it
   squeezed the input to about 70px and clipped the text. Laid out with flex
   instead, with radii matching the brand button system.
   ========================================================================== */
.coupon-wrapper {
	margin: 16px 0 20px;
}

/* Toggle line: plain text rather than the full colour notice block used for
   generic .woocommerce-info messages elsewhere. */
.coupon-wrapper .woocommerce-info {
	background: transparent !important;
	color: #555555 !important;
	padding: 0 !important;
	margin: 0 0 8px !important;
	border-radius: 0 !important;
	box-shadow: none !important;
	border: none !important;
	font-size: 13px;
	font-weight: 400;
	line-height: 1.4;
}

.coupon-wrapper .woocommerce-info a.showcoupon {
	color: #1E90FF !important;
	font-weight: 600;
	text-decoration: underline;
}

/* Closed by default. Deliberately without !important so the inline style that
   jQuery's slideToggle writes can still open and close it. */
.woocommerce-checkout form.checkout_coupon {
	display: none;
}

/* Open state: jQuery writes an inline display:block, and this restores the
   flex layout. When closed, the inline display:none wins. */
form.checkout_coupon[style*="display: block"],
form.checkout_coupon[style*="display:block"] {
	display: flex !important;
}

.checkout_coupon.woocommerce-form-coupon {
	/* The theme sets .checkout_coupon { width: 53% }; two classes beat it. */
	width: 100%;
	margin-top: 0;
	padding: 12px;
	background: #F5F5F5;
	border: none !important;
	border-radius: 12px;
	align-items: flex-start;
	gap: 8px;
}

.checkout_coupon.woocommerce-form-coupon .form-row {
	float: none !important;
	margin: 0 !important;
}

.checkout_coupon.woocommerce-form-coupon .form-row-first {
	flex: 1 1 auto;
	width: auto !important;
	min-width: 100px;
}

.checkout_coupon.woocommerce-form-coupon .form-row-last {
	flex: 0 0 auto;
	width: auto !important;
}

.checkout_coupon.woocommerce-form-coupon .clear {
	display: none;
}

.checkout_coupon.woocommerce-form-coupon #coupon_code {
	width: 100%;
	box-sizing: border-box;
	border-radius: 8px;
	font-family: Poppins, sans-serif;
	font-size: 14px;
	padding: 8px 12px !important;
	height: auto !important;
	line-height: 1.4 !important;
}

.checkout_coupon.woocommerce-form-coupon button[name=apply_coupon] {
	width: auto;
	white-space: nowrap;
	border-radius: 8px !important;
	font-family: Poppins, sans-serif;
	font-weight: 600;
	font-size: 14px;
	padding: 8px 12px !important;
	/* The theme sets line-height: 40px, which pushes the label downwards. */
	line-height: 1 !important;
}

@media (max-width: 480px) {
	.checkout_coupon.woocommerce-form-coupon {
		flex-direction: column;
		align-items: stretch;
	}

	.checkout_coupon.woocommerce-form-coupon .form-row-first,
	.checkout_coupon.woocommerce-form-coupon .form-row-last {
		flex: 1 1 auto;
		width: 100% !important;
	}

	.checkout_coupon.woocommerce-form-coupon button[name=apply_coupon] {
		width: 100%;
	}
}

/* Coupon notice messages — inline pill style, not the full colour banner.
   Covers: error on bad/expired code, success on valid apply,
   and the remove-coupon confirmation. All three share the same pill shape;
   only the colour token changes. */
.coupon-wrapper .woocommerce-error,
.coupon-wrapper .woocommerce-error li,
.checkout_coupon .woocommerce-error,
.checkout_coupon .coupon-error-notice,
.woocommerce-checkout-review-order .woocommerce-coupon-message {
	display: block !important;
	background: #fff0f0 !important;
	background-color: #fff0f0 !important;
	color: #c0392b !important;
	border: 1px solid #f5c6c6 !important;
	border-radius: 8px !important;
	padding: 8px 12px !important;
	margin: 8px 0 0 !important;
	font-size: 13px !important;
	font-weight: 500 !important;
	line-height: 1.4 !important;
	box-shadow: none !important;
	list-style: none !important;
	width: 100%;
	box-sizing: border-box;
}

/* Success — coupon applied */
.coupon-wrapper .woocommerce-message,
.checkout_coupon .woocommerce-message,
.woocommerce-checkout-review-order .woocommerce-coupon-message.woocommerce-message {
	background: #f0fdf4 !important;
	background-color: #f0fdf4 !important;
	color: #166534 !important;
	border: 1px solid #bbf7d0 !important;
	border-radius: 8px !important;
	padding: 8px 12px !important;
	margin: 8px 0 0 !important;
	font-size: 13px !important;
	font-weight: 500 !important;
	line-height: 1.4 !important;
	box-shadow: none !important;
}

/* ==========================================================================
   Custom checkboxes
   Checkout: billing to a different address, create an account.
   The shipping checkbox no longer exists as a control -- shipping is the
   primary form now -- so its id was replaced rather than kept alongside.
   Account login: remember me.
   ========================================================================== */
input#rememberme,
input#createaccount,
input#bill-to-different-address-checkbox,
input#terms {
	-webkit-appearance: none;
	appearance: none;
	width: 18px;
	height: 18px;
	min-width: 18px;
	margin: 0 8px 0 0;
	padding: 0;
	border: 2px solid #C9CDD2;
	border-radius: 5px;
	background: #FFFFFF;
	position: relative;
	top: 3px;
	cursor: pointer;
	transition: background-color .2s ease, border-color .2s ease, box-shadow .2s ease;
}

input#rememberme:hover,
input#createaccount:hover,
input#bill-to-different-address-checkbox:hover,
input#terms:hover {
	border-color: #00A99D;
}

input#rememberme:checked,
input#createaccount:checked,
input#bill-to-different-address-checkbox:checked,
input#terms:checked {
	background: #00A99D;
	border-color: #00A99D;
}

input#rememberme:checked::after,
input#createaccount:checked::after,
input#bill-to-different-address-checkbox:checked::after,
input#terms:checked::after {
	content: "";
	position: absolute;
	left: 4px;
	top: 0;
	width: 5px;
	height: 9px;
	border: solid #FFFFFF;
	border-width: 0 2px 2px 0;
	transform: rotate(45deg);
}

input#rememberme:focus-visible,
input#createaccount:focus-visible,
input#bill-to-different-address-checkbox:focus-visible,
input#terms:focus-visible {
	outline: none;
	box-shadow: 0 0 0 3px rgba(0, 169, 157, .22);
}

/* ==========================================================================
   Cart
   ========================================================================== */
.tp-shipping-note td {
	font-size: 13px;
	color: #6E6E6E;
	text-align: left !important;
	padding-top: 10px;
	padding-bottom: 10px;
}

/* ==========================================================================
   Navigation and footer
   ========================================================================== */

/* Current menu item carries the same underline as the hover state, which the
   theme draws with transform: scale(1, 1). */
.menu-primary-menu-container > ul > li.current-menu-item > a span:before,
.menu-primary-menu-container > ul > li.current_page_item > a span:before,
.menu-primary-menu-container > ul > li.current-menu-ancestor > a span:before {
	transform: scale(1, 1);
	transform-origin: left center;
}

.site-footer .widget .widget-title {
	font-weight: 500;
}

/* ==========================================================================
   Accent words inside Elementor headings and paragraphs
   Elementor v4 stores text through its html-v3 prop, whose sanitiser only
   allows a <span> carrying an `id`; class and style attributes are stripped.
   Colour is therefore targeted by id prefix rather than by class.
   ========================================================================== */
[id^="tp-accent"] {
	color: #00A99D;
}

[id^="tp-red"] {
	color: #FF3B30;
}

[id^="tp-green"] {
	color: #00B050;
}

[id^="tp-blue"] {
	color: #1E90FF;
}

/* ==========================================================================
   Contact page: icons inside the form fields
   Elementor v4 has no "icon inside input" control, and its Style Schema
   `background` prop does not accept inline SVG. The icons are therefore set as
   background images here, targeted by the field id set on each
   e-form-input / e-form-textarea widget.
   Border, radius, padding and focus states stay in Elementor (global class
   "form-field") so they remain editable without touching CSS.
   ========================================================================== */
#contact-name,
#contact-email,
#contact-phone,
#contact-order,
#contact-message {
	background-repeat: no-repeat;
	background-position: 14px center;
	background-size: 18px 18px;
}

#contact-message {
	background-position: 14px 15px;
}

#contact-name {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA0A6' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E");
}

#contact-email {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA0A6' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='4' width='20' height='16' rx='2'/%3E%3Cpath d='m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7'/%3E%3C/svg%3E");
}

#contact-phone {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA0A6' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E");
}

#contact-order {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA0A6' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.59 13.41 13.42 20.6a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z'/%3E%3Cline x1='7' y1='7' x2='7.01' y2='7'/%3E%3C/svg%3E");
}

#contact-message {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA0A6' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5z'/%3E%3C/svg%3E");
}

/* Placeholder colour has no equivalent prop in the v4 Style Schema. */
#contact-name::placeholder,
#contact-email::placeholder,
#contact-phone::placeholder,
#contact-order::placeholder,
#contact-message::placeholder {
	color: #9AA0A6;
	opacity: 1;
}

/* ==========================================================================
   [brand_index] - the /brands/ page
   Letter headings with a hairline rule, then a three column logo grid.
   ========================================================================== */
.tp-brands {
	font-family: Poppins, Arial, sans-serif;
}

/* A-Z jump navigation */
.tp-brands__index {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 6px;
	margin: 0 0 48px;
}

.tp-brands__jump {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 36px;
	height: 36px;
	padding: 0 8px;
	box-sizing: border-box;
	border-radius: 999px;
	background: #F5F5F5;
	color: #111111;
	font-size: 14px;
	font-weight: 600;
	line-height: 1;
	text-decoration: none;
	transition: background-color .2s ease, color .2s ease;
}

.tp-brands__jump:hover,
.tp-brands__jump:focus-visible {
	background: #00A99D;
	color: #FFFFFF;
	text-decoration: none;
}

/* Letters with no brands stay in place so the row does not reflow, but are
   dimmed and are not links. */
.tp-brands__jump--off {
	background: transparent;
	color: #111111;
	opacity: .3;
	pointer-events: none;
}

.tp-brands__group {
	margin: 0 0 56px;
	/* The site header is sticky; leave room when jumping to an anchor. */
	scroll-margin-top: 140px;
}

.tp-brands__group:last-child {
	margin-bottom: 0;
}

.tp-brands__letter {
	margin: 0;
	padding: 0 0 14px;
	border-bottom: 1px solid #E6E6E6;
	color: #111111;
	font-size: 28px;
	font-weight: 700;
	line-height: 1.2;
	text-align: center;
}

.tp-brands__grid {
	list-style: none;
	margin: 36px 0 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 28px 24px;
}

.tp-brands__item {
	margin: 0;
	list-style: none;
}

.tp-brands__card {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 16px;
	padding: 24px 16px;
	border-radius: 16px;
	text-decoration: none;
	transition: background-color .2s ease, box-shadow .2s ease;
}

.tp-brands__card:hover,
.tp-brands__card:focus-visible {
	background: #F5F5F5;
	box-shadow: 0 6px 18px rgba(0, 169, 157, .1);
	text-decoration: none;
}

.tp-brands__logo {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 86px;
}

.tp-brands__logo img {
	max-width: 100%;
	max-height: 86px;
	width: auto;
	height: auto;
	object-fit: contain;
}

/* Fallback when a brand has no logo yet. */
.tp-brands__wordmark {
	color: #111111;
	font-size: 22px;
	font-weight: 700;
	line-height: 1.25;
	text-align: center;
}

.tp-brands__name {
	color: #111111;
	font-size: 15px;
	font-weight: 500;
	line-height: 1.4;
	text-align: center;
	transition: color .2s ease;
}

.tp-brands__card:hover .tp-brands__name,
.tp-brands__card:focus-visible .tp-brands__name {
	color: #00A99D;
}

.tp-brands__empty {
	color: #4D4B4B;
	font-size: 15px;
	text-align: center;
}

@media (max-width: 768px) {
	.tp-brands__grid {
		grid-template-columns: repeat(2, 1fr);
		gap: 20px 16px;
	}

	.tp-brands__group {
		margin-bottom: 44px;
	}

	.tp-brands__letter {
		font-size: 24px;
	}

	.tp-brands__logo {
		height: 68px;
	}

	.tp-brands__logo img {
		max-height: 68px;
	}
}

@media (max-width: 480px) {
	.tp-brands__index {
		gap: 4px;
		margin-bottom: 32px;
	}

	.tp-brands__jump {
		min-width: 30px;
		height: 30px;
		font-size: 13px;
	}

	.tp-brands__card {
		padding: 16px 8px;
		gap: 12px;
	}

	.tp-brands__wordmark {
		font-size: 18px;
	}

	.tp-brands__name {
		font-size: 14px;
	}
}

/* ==========================================================================
   [brand_slider] - the "Brands" section on the home page
   CSS scroll-snap rather than a carousel library: mobile swiping is native and
   the arrows are only an extra layer for pointer devices.
   ========================================================================== */
.tp-bslider {
	position: relative;
	max-width: 100%;
	font-family: Poppins, Arial, sans-serif;
}

.tp-bslider__viewport {
	overflow-x: auto;
	overflow-y: hidden;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
	-ms-overflow-style: none;
}

.tp-bslider__viewport::-webkit-scrollbar {
	display: none;
}

.tp-bslider__track {
	display: flex;
	gap: 16px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.tp-bslider__item {
	flex: 0 0 auto;
	/* Six cards visible on desktop, derived from the 16px gap. */
	width: calc((100% - (5 * 16px)) / 6);
	min-width: 132px;
	margin: 0;
	list-style: none;
	scroll-snap-align: start;
}

.tp-bslider__card {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 10px;
	height: 100%;
	padding: 18px 12px;
	box-sizing: border-box;
	background: #FFFFFF;
	border: 1px solid #EEEEEE;
	border-radius: 16px;
	text-decoration: none;
	transition: border-color .2s ease, box-shadow .2s ease;
}

.tp-bslider__card:hover,
.tp-bslider__card:focus-visible {
	border-color: #00A99D;
	box-shadow: 0 6px 18px rgba(0, 169, 157, .12);
	text-decoration: none;
}

.tp-bslider__logo {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 64px;
}

.tp-bslider__logo img {
	max-width: 100%;
	max-height: 64px;
	width: auto;
	height: auto;
	object-fit: contain;
}

/* Fallback when a brand has no logo yet. */
.tp-bslider__wordmark {
	color: #111111;
	font-size: 17px;
	font-weight: 700;
	line-height: 1.25;
	text-align: center;
}

.tp-bslider__name {
	color: #111111;
	font-size: 14px;
	font-weight: 600;
	line-height: 1.35;
	text-align: center;
	transition: color .2s ease;
}

.tp-bslider__card:hover .tp-bslider__name,
.tp-bslider__card:focus-visible .tp-bslider__name {
	color: #00A99D;
}

.tp-bslider__count {
	color: #6E6E6E;
	font-size: 12px;
	font-weight: 400;
	line-height: 1.4;
	text-align: center;
}

/* Arrow buttons. Kept inside the viewport bounds so they cannot create
   horizontal overflow on the page. */
.tp-bslider__nav {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	z-index: 2;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	padding: 0;
	border: 1px solid #EEEEEE;
	border-radius: 999px;
	background: #FFFFFF;
	color: #111111;
	cursor: pointer;
	box-shadow: 0 4px 14px rgba(0, 169, 157, .14);
	transition: background-color .2s ease, color .2s ease, opacity .2s ease;
}

.tp-bslider__nav:hover:not(:disabled),
.tp-bslider__nav:focus-visible:not(:disabled) {
	background: #00A99D;
	border-color: #00A99D;
	color: #FFFFFF;
}

.tp-bslider__nav:disabled {
	opacity: .35;
	cursor: default;
}

.tp-bslider__nav[hidden] {
	display: none;
}

.tp-bslider__nav--prev {
	left: 6px;
}

.tp-bslider__nav--next {
	right: 6px;
}

@media (max-width: 1024px) {
	.tp-bslider__item {
		width: calc((100% - (3 * 16px)) / 4);
	}
}

@media (max-width: 768px) {
	.tp-bslider__item {
		width: calc((100% - (2 * 14px)) / 3);
	}

	.tp-bslider__track {
		gap: 14px;
	}

	.tp-bslider__logo {
		height: 54px;
	}

	.tp-bslider__logo img {
		max-height: 54px;
	}
}

@media (max-width: 480px) {
	.tp-bslider__item {
		width: calc((100% - 12px) / 2);
		min-width: 0;
	}

	.tp-bslider__track {
		gap: 12px;
	}

	.tp-bslider__card {
		padding: 14px 10px;
		gap: 8px;
	}

	/* On narrow screens the arrows would cover the cards; rely on swiping. */
	.tp-bslider__nav {
		display: none;
	}
}

/* ==========================================================================
   Account details form: display name
   The field is removed in PHP (see the Display_Name class) and its value is
   always derived from the first and last name. These rules are only a safety
   net: if a future WooCommerce markup change makes the PHP removal miss, the
   field stays out of sight rather than appearing as an input whose value is
   silently ignored.
   ========================================================================== */
.woocommerce-EditAccountForm p:has(> label[for="account_display_name"]) {
	display: none;
}

/* Fallback for browsers without :has() support. */
.woocommerce-EditAccountForm label[for="account_display_name"],
.woocommerce-EditAccountForm #account_display_name,
.woocommerce-EditAccountForm #account_display_name_description {
	display: none;
}

/* ==========================================================================
   Policy pages (Privacy Policy, Terms of Use, Shipping/Returns/Refund)
   Built with Elementor v4 atomic widgets. Bullet lists live inside an
   e-paragraph whose tag is `span`, because a <ul> inside a <p> makes the
   HTML parser close the paragraph early and the list would lose the
   widget's classes. The span therefore needs list styling of its own.
   ========================================================================== */
#policy-content ul {
	margin: 0;
	padding-left: 22px;
	list-style: disc outside;
}

#policy-content li {
	margin: 0 0 6px;
	padding: 0;
	list-style: inherit;
}

#policy-content li:last-child {
	margin-bottom: 0;
}

/* Long policy text reads better with a slightly looser measure. */
#policy-content p,
#policy-content li {
	line-height: 1.65;
}

#policy-content h2 {
	scroll-margin-top: 140px;
}

/* Links inside policy copy inherit the body colour from the theme, which makes
   them indistinguishable from plain text. Give them the accent colour and an
   underline so an email address or cross-reference reads as clickable. */
#policy-content a {
	color: #00A99D;
	text-decoration: underline;
	text-underline-offset: 2px;
}

#policy-content a:hover,
#policy-content a:focus-visible {
	color: #111111;
}

/* Long email addresses must not push the page wider on small screens. */
#policy-content a[href^="mailto:"] {
	word-break: break-word;
}

/* ==========================================================================
   Shipment tracking panel on the order detail page and in order history
   ========================================================================== */
.tp-tracking {
	margin: 32px 0 0;
}

.tp-tracking__title {
	margin: 0 0 12px;
	font-size: 20px;
}

.tp-tracking__table th {
	width: 40%;
	text-align: left;
}

.tp-tracking__table a {
	color: #00A99D;
	text-decoration: underline;
	text-underline-offset: 2px;
	word-break: break-word;
}

.tp-tracking__note {
	margin: 10px 0 0;
	font-size: 13px;
	color: #6E6E6E;
}

/* Order history column */
.tp-tracking__courier {
	font-weight: 500;
}

.tp-tracking__awb a {
	color: #00A99D;
	font-size: 13px;
	word-break: break-word;
}

/* ==========================================================================
   Sidebar filter widgets: capped height and a search box
   The lists are capped rather than left to run the full length of the
   sidebar, which on a phone pushed the products themselves off screen.
   ========================================================================== */
.tp-filter-search {
	margin: 0 0 10px;
}

/* Compound selector so the theme's own input[type=search] rules, which set a
   left padding for an icon it never draws, do not win. */
input[type="search"].tp-filter-search__input,
.tp-filter-search__input {
	width: 100%;
	box-sizing: border-box;
	padding: 8px 12px 8px 34px;
	text-align: left;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA0A6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: 11px center;
	background-size: 15px 15px;
	border: 1px solid #E0E0E0;
	border-radius: 8px;
	background-color: #FFFFFF;
	font-family: inherit;
	font-size: 13px;
	line-height: 1.4;
	color: #111111;
}

.tp-filter-search__input:focus {
	outline: none;
	border-color: #00A99D;
	box-shadow: 0 0 0 3px rgba(0, 169, 157, .18);
}

.tp-filter-search__status {
	margin: 8px 0 0;
	font-size: 12px;
	color: #6E6E6E;
}

/* Scrollable list. max-height is in em so it follows the font size. */
.widget .tp-filter-list {
	max-height: 17em;
	overflow-y: auto;
	overscroll-behavior: contain;
	/* The theme draws the bullet with a box-shadow that bleeds ~2px to the left
	   of each item. A scroll container clips anything outside its padding box,
	   which sliced those bullets in half - hence the left padding. */
	padding-left: 4px;
	padding-right: 4px;
	scrollbar-width: thin;
	scrollbar-color: #C9CDD2 transparent;
}

.widget .tp-filter-list::-webkit-scrollbar {
	width: 6px;
}

.widget .tp-filter-list::-webkit-scrollbar-thumb {
	background: #C9CDD2;
	border-radius: 3px;
}

.widget .tp-filter-list li[hidden] {
	display: none;
}

@media (max-width: 768px) {
	.widget .tp-filter-list {
		max-height: 13em;
	}
}

/* Safari and Chrome add their own clear button; it overlaps the padding we
   reserve, so it is hidden and clearing is done by selecting the text. */
.tp-filter-search__input::-webkit-search-decoration,
.tp-filter-search__input::-webkit-search-results-button {
	-webkit-appearance: none;
}

/* ==========================================================================
   Checkout refinements
   ========================================================================== */

/* Single payment method: WooCommerce still prints the radio and its label even
   when there is nothing to choose between. :only-child means this reverts on its
   own the day a second gateway is switched on - no PHP, nothing to remember. */
.woocommerce-checkout #payment ul.payment_methods li:only-child > label[for^="payment_method"],
.woocommerce-checkout #payment ul.payment_methods li:only-child > input[name="payment_method"] {
	display: none;
}

.woocommerce-checkout #payment ul.payment_methods li:only-child {
	padding-top: 0;
}

/* The terms checkbox sat 3px below the centre of its first text line: the shared
   checkbox rule uses a fixed top offset that suits a different line height. */
.woocommerce-terms-and-conditions-wrapper label {
	line-height: 1.5;
}

/* The theme positions this one absolutely and sets its own offset, so the
   selector has to be specific enough to win without resorting to !important. */
.woocommerce-checkout .woocommerce-terms-and-conditions-wrapper label input#terms[type="checkbox"] {
	top: 1px;
}

/* Checkout progress bar. Green marks the ground already covered and the dark
   circle marks where the customer is now -- the look the client approved, only
   now driven by real state instead of the theme's hard-coded classes. */
.woocommerce-checkout ul.checkout-bar li.visited:before,
.woocommerce-cart ul.checkout-bar li.visited:before {
	background-color: #00b050;
}

.woocommerce-checkout ul.checkout-bar li.active:before,
.woocommerce-cart ul.checkout-bar li.active:before {
	background-color: #444;
}


/* ==========================================================================
   Buy now / Add to cart
   Buy now is the primary action: it takes the filled blue Add to cart used to
   have, and Add to cart steps back to an outline. Both need !important because
   the theme paints `.button.alt` that way. Shape and height stay matched to
   whichever button sits next to them - the card uses 10px corners, the product
   page 4px.
   ========================================================================== */
.tp-buy-now {
	/* Same blue the theme gives its primary button. Hover is that blue darkened;
	   change both together if the brand colour ever moves. */
	background-color: #1E90FF !important;
	color: #FFFFFF !important;
	border: 1px solid #1E90FF !important;
	font-weight: 600;
	text-align: center;
	text-decoration: none;
	transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

.tp-buy-now:hover,
.tp-buy-now:focus-visible {
	background-color: #1A7FE0 !important;
	border-color: #1A7FE0 !important;
	color: #FFFFFF !important;
	text-decoration: none;
}

/* Only on the product page, where the two sit side by side. Product cards have
   no Buy now next to them, so their Add to cart stays the filled primary. */
.woocommerce div.product form.cart .single_add_to_cart_button {
	background-color: transparent !important;
	color: #111111 !important;
	border: 1px solid #111111 !important;
	transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

.woocommerce div.product form.cart .single_add_to_cart_button:hover,
.woocommerce div.product form.cart .single_add_to_cart_button:focus-visible {
	background-color: #111111 !important;
	border-color: #111111 !important;
	color: #FFFFFF !important;
}

/* --- Product page -------------------------------------------------------- */

/* The add-to-cart row is a plain block, so quantity, Add to cart and Buy now
   line up only by luck: at ~420px the third button dropped onto its own row.
   Laying the row out with flex keeps them together and lets Add to cart give up
   the width. Targeted at the row itself, not form.cart, because on a variable
   product that form also holds the variations table. */
.woocommerce div.product form.cart:not(.variations_form),
.woocommerce div.product .woocommerce-variation-add-to-cart {
	display: flex;
	align-items: stretch;
	flex-wrap: wrap;
	gap: 10px;
}

/* The theme clearfixes this row with ::before/::after. Once the row became a
   flex container those pseudo-elements turned into flex items, so the 10px gap
   also landed before the quantity box and after Buy now, indenting the whole
   row from the column edges. */
.woocommerce div.product form.cart:not(.variations_form)::before,
.woocommerce div.product form.cart:not(.variations_form)::after,
.woocommerce div.product .woocommerce-variation-add-to-cart::before,
.woocommerce div.product .woocommerce-variation-add-to-cart::after {
	display: none;
}

/* The theme's + and - controls are absolutely positioned 33px to the right of
   the quantity box. Laying the row out with flex removed the space they used to
   sit in, and Add to cart covered them. */
.woocommerce div.product form.cart:not(.variations_form) .quantity,
.woocommerce div.product .woocommerce-variation-add-to-cart .quantity {
	flex: 0 0 auto;
	margin: 0 34px 0 0;
}

.woocommerce div.product form.cart:not(.variations_form) .single_add_to_cart_button,
.woocommerce div.product .woocommerce-variation-add-to-cart .single_add_to_cart_button {
	flex: 1 1 150px;
	margin: 0;
}

.tp-buy-now--single {
	flex: 0 0 auto;
	margin: 0;
	padding: 0 20px;
	height: 52px;
	line-height: 50px;
	font-size: 15px;
	border-radius: 4px !important;
	white-space: nowrap;
}

@media (max-width: 480px) {
	.tp-buy-now--single {
		flex: 1 1 100%;
	}
}

/* --- Product card -------------------------------------------------------- */

/* The theme pins card buttons to the bottom of the card with
   `position: absolute; bottom: 0`, and reserves room for exactly one of them.
   Buy now inherited that rule through its `button` class and landed on the same
   coordinates as Add to cart, so Add to cart moves up by one button and the card
   is given room for both.

   Both overrides are scoped with :has() so they only apply to cards that
   actually render Buy now. With `toypedia360_buy_now_in_loop` off the card keeps
   the theme's own padding instead of reserving space for a button that is not
   there, and turning the filter back on restores this layout by itself. */
.woocommerce ul.products li.product:not(.product-category):has(.tp-buy-now--loop),
.woocommerce-page ul.products li.product:not(.product-category):has(.tp-buy-now--loop) {
	padding-bottom: 92px;
}

ul.products li.product:has(.tp-buy-now--loop) .button:not(.tp-buy-now),
ul.products li.product:has(.tp-buy-now--loop) .added_to_cart {
	bottom: 46px;
}

ul.products li.product .tp-buy-now--loop {
	position: absolute;
	bottom: 0;
	left: 15px;
	right: 15px;
	width: calc(100% - 30px);
	height: 40px;
	line-height: 38px;
	margin: 0;
	padding: 0;
	font-size: 13px;
	border-radius: 10px !important;
}

/* Buy now waits for a variation, the same way Add to cart does. */
.tp-buy-now--single:disabled,
.tp-buy-now--single.disabled {
	opacity: .4;
	cursor: not-allowed;
	pointer-events: none;
}

/* --- Order history: purchased products ----------------------------------- */

/* The stock order history table states only an item count, so each order row is
   followed by a full-width row listing what was actually in it. */
.tp-order-products > .tp-order-products__cell {
	padding: 0 0 20px;
	border-top: 0;
}

.tp-order-products__list {
	margin: 0;
	padding: 0;
	list-style: none;
}

.tp-order-products__item {
	display: flex;
	align-items: flex-start;
	gap: 14px;
	padding: 12px 0;
	border-top: 1px solid #ededed;
}

.tp-order-products__item:first-child {
	border-top: 0;
}

.tp-order-products__thumb {
	flex: 0 0 48px;
}

.tp-order-products__thumb a {
	display: block;
}

/* WooCommerce emits the thumbnail at its registered size; the card here is a
   fixed square regardless of the source aspect ratio. */
.tp-order-products__thumb img {
	display: block;
	width: 48px;
	height: 48px;
	margin: 0;
	object-fit: cover;
	border: 1px solid #ededed;
	border-radius: 6px;
}

/* Basis 0 rather than auto: with an auto basis a long product name makes the
   flex line overflow and the text wraps below the thumbnail on narrow screens.
   A zero basis lets the column shrink instead. */
.tp-order-products__detail {
	flex: 1 1 0;
	min-width: 0;
}

.tp-order-products__name {
	display: block;
	font-weight: 600;
	line-height: 1.35;
	color: inherit;
	text-decoration: none;
}

.tp-order-products__name:hover,
.tp-order-products__name:focus-visible {
	color: #00A99D;
}

/* Variation attributes, rendered by wc_display_item_meta(). */
.tp-order-products__detail .wc-item-meta {
	margin: 4px 0 0;
	padding: 0;
	list-style: none;
	font-size: 13px;
	line-height: 1.4;
	color: #767676;
}

.tp-order-products__detail .wc-item-meta li {
	margin: 0;
}

.tp-order-products__detail .wc-item-meta strong,
.tp-order-products__detail .wc-item-meta p {
	display: inline;
	margin: 0;
	font-weight: 400;
	font-size: inherit;
}

.tp-order-products__qty {
	display: block;
	margin-top: 4px;
	font-size: 13px;
	color: #767676;
}

.tp-order-products__price {
	flex: 0 0 auto;
	text-align: right;
	white-space: nowrap;
}

.tp-order-products__unit {
	display: block;
	font-size: 12px;
	color: #767676;
}

.tp-order-products__total {
	display: block;
	font-weight: 600;
}

/* `shop_table_responsive` turns every cell into a right-aligned block and
   prefixes it with its `data-title`. This cell spans the whole table and has no
   title, so both behaviours have to be undone. */
@media screen and (max-width: 768px) {
	.tp-order-products,
	.woocommerce table.shop_table_responsive tr.tp-order-products,
	.woocommerce table.shop_table_responsive tr td.tp-order-products__cell {
		display: block;
		width: 100%;
		text-align: left;
	}

	.woocommerce table.shop_table_responsive tr td.tp-order-products__cell::before {
		content: none;
	}

	.tp-order-products__item {
		flex-wrap: wrap;
	}

	/* Price drops below the name, aligned with it rather than with the image. */
	.tp-order-products__price {
		flex: 1 0 100%;
		margin-left: 62px;
		text-align: left;
	}

	.tp-order-products__unit {
		display: inline;
		margin-right: 6px;
	}

	.tp-order-products__total {
		display: inline;
	}
}

/* --- Header cart count ---------------------------------------------------- */

/* The badge lives inside .icon-wrapper, which Shoptimizer already positions
   absolutely, so it anchors to the cart icon without giving any other element a
   new positioning context. The wrapper's overflow is visible, so the badge may
   sit slightly outside it. */
.header-cart .icon-wrapper .tp-cart-count {
	position: absolute;
	top: -4px;
	right: -7px;
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 18px;
	height: 18px;
	padding: 0 5px;
	border-radius: 9px;
	background-color: #00A99D;
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	line-height: 1;
	white-space: nowrap;
	/* Clicks belong to the cart link underneath. */
	pointer-events: none;
}

/* An empty cart still renders the element so cart fragments have a target to
   replace; it is only hidden from view. */
.header-cart .icon-wrapper .tp-cart-count--empty {
	display: none;
}

/* --- Checkout: shipping address first -------------------------------------- */

/* The billing address is collapsed until "Billing to a different address?"
   is ticked. A plain [hidden] attribute is not enough on its own here: the
   wrapper carries WooCommerce classes that set a display value, which would
   win on specificity. */
.woocommerce-billing-fields .billing_address[hidden] {
	display: none;
}

/* Heading of the primary form. It is no longer a checkbox label, so the
   theme's checkbox spacing no longer applies to it. */
#ship-to-different-address > span {
	font-weight: inherit;
}

/* --- Checkout: delivery row ------------------------------------------------ */

/* The shipping form is the primary one now, so its heading no longer needs
   the separating rule the theme puts above an optional section. */
#ship-to-different-address {
	padding-top: 0;
	border-top: 0;
}

/* The theme draws a radio marker on the shipping method label with a
   pseudo-element. WooCommerce itself renders a hidden input when only one
   method is available, so the marker offers a choice that does not exist.
   Scoped with :only-child, so real markers return if a second method is
   ever offered. */
#shipping_method li:only-child label::before {
	display: none;
}

/* --- Order totals table ---------------------------------------------------- */

/* Tighter rows than the theme's defaults, which were sized for a wider column. */
.woocommerce-checkout-review-order-table tfoot th,
.woocommerce-checkout-review-order-table tfoot td {
	padding: 11px 16px;
	font-size: 14px;
	line-height: 1.4;
}

.woocommerce-checkout-review-order-table tfoot .order-total th,
.woocommerce-checkout-review-order-table tfoot .order-total td {
	padding: 14px 16px;
	font-size: 17px;
	font-weight: 700;
	border-top: 2px solid #1a1a2e !important;
}

/* The theme stacks the delivery label and its cell as two full width blocks,
   which left the price out of line with every other row. Restored to a normal
   two column row now that the free shipping note has a row of its own. */
/* The theme leaves this cell with no bottom padding, a leftover from stacking
   it above its value. That made its content box 32px tall against the value
   cell's 21px, so the centred label sat 6px lower. Measured, not guessed --
   and !important because the theme declares it that way. */
.woocommerce-checkout-review-order-table tfoot .woocommerce-shipping-totals th {
	display: table-cell;
	width: 50%;
	padding: 11px 16px !important;
	text-align: left;
}

.woocommerce-checkout-review-order-table tfoot .woocommerce-shipping-totals td {
	display: table-cell;
	width: 50%;
	text-align: right;
}

/* Browsers centre a <th> but baseline-align a <td>, and this row's cell holds a
   list rather than plain text -- so the amount sat 6px above its label while
   every other row lined up. Both cells are centred instead. */
.woocommerce-checkout-review-order-table tfoot .woocommerce-shipping-totals th,
.woocommerce-checkout-review-order-table tfoot .woocommerce-shipping-totals td {
	vertical-align: middle;
}

/* Stacked, these two cells each needed a border on the side that now faces the
   other, which drew a line down the middle of the row that no other row has.
   Matched to the Subtotal row: the label carries the left edge, the value the
   right, and nothing between them. */
.woocommerce-checkout-review-order-table tfoot .woocommerce-shipping-totals th {
	/* The theme declares this side !important; the matching rule on the value
	   cell won without it, so only this one needs the flag. */
	border-right: 0 !important;
}

.woocommerce-checkout-review-order-table tfoot .woocommerce-shipping-totals td {
	border-left: 0;
	/* Only this cell carried a bottom border, which drew a rule across half the
	   width between the delivery line and the note that belongs to it. */
	border-bottom: 0;
}

/* With the note gone from this cell the price no longer needs to float. */
.woocommerce-shipping-totals #shipping_method {
	margin: 0;
	padding: 0;
}

.woocommerce-shipping-totals #shipping_method li {
	margin: 0;
	padding: 0;
}

/* The list, its item and the label each carry their own type sizing, which
   left the amount sitting 6px above the row label. Everything inherits the
   cell's instead, so the two line up the way Subtotal and Total do. */
.woocommerce-shipping-totals #shipping_method,
.woocommerce-shipping-totals #shipping_method li,
.woocommerce-shipping-totals #shipping_method label,
.woocommerce-shipping-totals #shipping_method .woocommerce-Price-amount {
	font-size: inherit;
	line-height: inherit;
}

.woocommerce-shipping-totals #shipping_method .woocommerce-Price-amount {
	float: none;
	display: inline;
}

/* --- Free shipping nudge --------------------------------------------------- */

/* Its own row spanning both columns, directly under the delivery line. */
/* Spans both columns, so it has to carry the card's left edge itself: the row
   above draws that edge on its label cell, which this row does not have. */
.tp-free-shipping-row > td {
	padding: 0 16px 12px;
	text-align: left;
	border-top: 0;
	border-left: 1px solid #E2E2E2;
}

.tp-free-shipping-note {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 8px 12px;
}

/* The totals cells are right aligned, which the note inherited. Declared here
   rather than on the cell, where the theme's own alignment wins. */
.tp-free-shipping-note__text {
	flex: 1 1 200px;
	margin: 0;
	font-size: 13px;
	line-height: 1.4;
	color: #767676;
	font-weight: 400;
	text-align: left;
}

.woocommerce .tp-free-shipping-note__button,
.woocommerce-page .tp-free-shipping-note__button {
	flex: 0 0 auto;
	display: inline-block;
	margin: 0;
	padding: 0 12px;
	height: 30px;
	line-height: 28px;
	font-size: 12px;
	font-weight: 600;
	border: 1px solid #d5d5d5;
	border-radius: 6px;
	background-color: transparent;
	color: inherit;
	white-space: nowrap;
}

.woocommerce .tp-free-shipping-note__button:hover,
.woocommerce .tp-free-shipping-note__button:focus-visible {
	background-color: #00A99D;
	border-color: #00A99D;
	color: #fff;
}

/* --- Checkout: label-less fields ------------------------------------------- */

/* Labels are moved out of sight rather than removed, so the field keeps its
   accessible name. Stated again here because the theme styles .form-row
   labels with enough specificity to win otherwise. */
.woocommerce-checkout form .form-row label.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	border: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
}

/* --- Checkout: payment heading --------------------------------------------- */

.tp-payment-heading {
	margin: 28px 0 12px;
}

/* --- Checkout: four steps -------------------------------------------------- */

/* The theme sizes the bar for three steps. */
.tp-checkout-steps ul.checkout-bar li {
	width: 25%;
}

/* The leading segment is half a step wide. */
.tp-checkout-steps ul.checkout-bar:before {
	width: 12.5%;
}

/* The theme only numbers three circles. */
.tp-checkout-steps ul.checkout-bar li:nth-child(4):before {
	content: "4";
}

/* The theme only draws a connector for `active` and `next`, and the customizer
   paints the active one green -- which, with real step state, puts the green
   line ahead of the customer instead of behind them. The connector is drawn
   for completed steps instead, and the one leaving the current step is put
   back to grey. */
.tp-checkout-steps ul.checkout-bar li.visited:after {
	position: absolute;
	z-index: 0;
	top: -22px;
	left: 50%;
	width: 100%;
	height: 2px;
	background-color: #00b050;
	content: "";
}

.tp-checkout-steps ul.checkout-bar li.active:after {
	background-color: #ccc;
}

/* One step on screen at a time. Both columns are siblings of the checkout
   form, so a single class on the form is enough -- nothing is moved, and
   with JavaScript off neither class is ever set and both stay visible. */
form.checkout.tp-step-shipping .tp-step-nav--back,
form.checkout.tp-step-payment #customer_details,
form.checkout.tp-step-payment .tp-step-nav--forward {
	display: none;
}

/* The payment step is moved out of sight rather than hidden. Stripe's Payment
   Element is an iframe, and one mounted inside a `display: none` container
   measures zero and never recovers -- verified here: even a full order review
   refresh left it collapsed. Off screen it keeps real dimensions and mounts at
   the width it will actually be shown at. Kept out of the tab order and away
   from screen readers with `inert`, which the step script sets. */
form.checkout.tp-step-shipping #order_review_heading,
form.checkout.tp-step-shipping #order_review {
	position: absolute;
	left: -9999px;
	top: 0;
	width: 640px;
}

/* With one column on screen the two column grid has nothing to align to. */
form.checkout.tp-step-shipping,
form.checkout.tp-step-payment {
	display: block;
}

form.checkout.tp-step-shipping #customer_details,
form.checkout.tp-step-shipping .tp-step-nav--forward,
form.checkout.tp-step-payment #order_review,
form.checkout.tp-step-payment #order_review_heading,
form.checkout.tp-step-payment .tp-step-nav--back {
	width: 100%;
	max-width: 640px;
	float: none;
	margin-left: auto;
	margin-right: auto;
}

/* --- Step navigation ------------------------------------------------------- */

.tp-step-nav {
	margin: 8px 0 0;
}

.tp-step-nav--back {
	margin: 0 0 16px;
}

/* Matches Place order on step 3. The theme styles that button by id, so none
   of its shape reaches this one: measured differences were the radius (4 vs
   6px), the font size (15 vs 17px) and the height (47.5 vs 52px). */
.woocommerce-checkout .tp-step-continue {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 52px;
	padding: 0 17px;
	border-radius: 6px;
	font-size: 17px;
	line-height: 52px;
}

/* A quiet link rather than a second call to action competing with Place order. */
.woocommerce-checkout .tp-step-back {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 0;
	border: 0;
	background: none;
	color: inherit;
	font-size: 14px;
	font-weight: 600;
	cursor: pointer;
}

.woocommerce-checkout .tp-step-back::before {
	content: "\2190";
}

.woocommerce-checkout .tp-step-back:hover,
.woocommerce-checkout .tp-step-back:focus-visible {
	color: #00A99D;
}

/* The acceptance line runs to two lines at this width, so the box needs to sit
   against the first one rather than centred on the block. */
.woocommerce-checkout .woocommerce-terms-and-conditions-wrapper .form-row label.checkbox {
	display: flex;
	align-items: flex-start;
	gap: 0;
}

/* --- Checkout: payment methods card ---------------------------------------- */

/* Two gateways now, so the :only-child rules above stop applying by
   themselves and the radios come back. The list is presented as one bordered
   card with a hairline between choices, matching the reference design. */
.tp-payment-intro {
	margin: 0 0 14px;
	font-size: 14px;
	color: #767676;
}

.woocommerce-checkout #payment ul.payment_methods {
	margin: 0;
	padding: 0;
	border: 1px solid #E3E5E8;
	border-radius: 10px;
	background: #FFFFFF;
	overflow: hidden;
	list-style: none;
}

.woocommerce-checkout #payment ul.payment_methods > li {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0;
	padding: 18px 20px;
	border-top: 1px solid #E3E5E8;
	list-style: none;
	background: none;
}

.woocommerce-checkout #payment ul.payment_methods > li:first-child {
	border-top: 0;
}

/* Radio and title sit together on the left, gateway icons on the right. */
/* Stripe's stylesheet gives its own label a left padding that the other
   gateways do not have, which left the two titles 21px out of line. Only the
   padding needs !important -- everything else in this rule already applies. */
.woocommerce-checkout #payment ul.payment_methods > li > label {
	flex: 1 1 auto;
	display: flex;
	align-items: center;
	gap: 12px;
	margin: 0;
	padding-left: 0 !important;
	padding-right: 0;
	padding-top: 0;
	padding-bottom: 0;
	font-size: 15px;
	font-weight: 600;
	line-height: 1.35;
	cursor: pointer;
}

.woocommerce-checkout #payment ul.payment_methods > li > input[type="radio"] {
	-webkit-appearance: none;
	appearance: none;
	flex: 0 0 20px;
	width: 20px;
	height: 20px;
	margin: 0;
	border: 2px solid #C9CDD2;
	border-radius: 50%;
	background: #FFFFFF;
	position: relative;
	cursor: pointer;
	transition: border-color .2s ease;
}

.woocommerce-checkout #payment ul.payment_methods > li > input[type="radio"]:hover {
	border-color: #00A99D;
}

.woocommerce-checkout #payment ul.payment_methods > li > input[type="radio"]:checked {
	border-color: #00A99D;
}

.woocommerce-checkout #payment ul.payment_methods > li > input[type="radio"]:checked::after {
	content: "";
	position: absolute;
	top: 3px;
	left: 3px;
	width: 10px;
	height: 10px;
	border-radius: 50%;
	background: #00A99D;
}

.woocommerce-checkout #payment ul.payment_methods > li > input[type="radio"]:focus-visible {
	outline: none;
	box-shadow: 0 0 0 3px rgba(0, 169, 157, .22);
}

/* Gateway icons, where a gateway supplies them. */
.woocommerce-checkout #payment ul.payment_methods > li > label img {
	max-height: 24px;
	width: auto;
	margin: 0 0 0 4px;
	float: none;
	display: inline-block;
	vertical-align: middle;
}

/* The gateway's own panel drops below the row it belongs to. */
.woocommerce-checkout #payment ul.payment_methods > li > .payment_box {
	flex: 1 0 100%;
	margin: 14px 0 0;
	padding: 14px 16px;
	border-radius: 8px;
	background: #F7F8F9;
	font-size: 14px;
	line-height: 1.55;
}

.woocommerce-checkout #payment ul.payment_methods > li > .payment_box::before {
	display: none;
}

/* Bank transfer instructions are entered as plain text with blank lines. */
.woocommerce-checkout #payment ul.payment_methods > li.payment_method_bacs .payment_box p {
	margin: 0 0 10px;
}

.woocommerce-checkout #payment ul.payment_methods > li.payment_method_bacs .payment_box p:last-child {
	margin-bottom: 0;
}

/* --- Checkout: no flicker before the step script runs ----------------------- */

/* The step script only runs once the document has been parsed, so for a
   moment both columns are on screen and then one disappears. The form is
   held behind a spinner until the script has chosen a step.

   Gated on a class an inline script adds to <html>: with JavaScript off the
   class never appears, nothing is ever hidden, and the checkout still works
   as one long form. `visibility` rather than `display` so the payment iframe
   keeps real dimensions while it waits. */
html.tp-checkout-js form.checkout:not(.tp-step-shipping):not(.tp-step-payment) {
	position: relative;
	min-height: 260px;
}

html.tp-checkout-js form.checkout:not(.tp-step-shipping):not(.tp-step-payment) > * {
	visibility: hidden;
}

html.tp-checkout-js form.checkout:not(.tp-step-shipping):not(.tp-step-payment)::after {
	content: "";
	position: absolute;
	top: 80px;
	left: 50%;
	margin-left: -17px;
	width: 34px;
	height: 34px;
	box-sizing: border-box;
	border: 3px solid #E6E6E6;
	border-top-color: #00A99D;
	border-radius: 50%;
	animation: tp-checkout-spin .7s linear infinite;
}

@keyframes tp-checkout-spin {
	to {
		transform: rotate(360deg);
	}
}

@media (prefers-reduced-motion: reduce) {
	html.tp-checkout-js form.checkout:not(.tp-step-shipping):not(.tp-step-payment)::after {
		animation: none;
	}
}

/* The coupon form is printed above the checkout form and only moved under the
   order summary once its script runs, so it sat outside the spinner and was
   visible in the wrong place for a moment. Keyed on the marker that script
   sets after the move, so the two are never out of step. `visibility` keeps
   its space reserved, which means the shift happens behind the spinner. */
html.tp-checkout-js .coupon-wrapper:not([data-tp-moved]) {
	visibility: hidden;
}

/* The guest login prompt and its form are printed before the checkout form, so
   the centring applied to the step columns never reached them and they ran the
   full width of the page while everything below sat in a 640px column. */
.woocommerce-checkout .woocommerce-form-login-toggle,
.woocommerce-checkout form.woocommerce-form-login {
	width: 100%;
	max-width: 640px;
	margin-left: auto;
	margin-right: auto;
	box-sizing: border-box;
}

/* The notice carries its own bottom margin; the form should sit under it
   rather than against it. */
.woocommerce-checkout form.woocommerce-form-login {
	margin-top: 16px;
}

/* --- Pay for order page ----------------------------------------------------- */

/* This page renders a form of its own -- `#order_review`, with no `checkout`
   class -- so none of the column rules used elsewhere reach it and it ran the
   full content width while every other checkout screen sits in a 640px
   column. */
body.woocommerce-order-pay form#order_review {
	/* It reuses the `order_review` id of the checkout's right hand column, so
	   it inherits that column's float -- and a floated box ignores auto side
	   margins, which is why it sat hard against the right edge. */
	float: none;
	width: 100%;
	max-width: 640px;
	margin-left: auto;
	margin-right: auto;
	box-sizing: border-box;
}

/* The login prompt shown before payment gets the same column, and needs its
   side margins reset because the theme sets a fixed pair. */
body.woocommerce-order-pay form.woocommerce-form-login,
body.woocommerce-order-pay .woocommerce-notices-wrapper {
	width: 100%;
	max-width: 640px;
	margin-left: auto;
	margin-right: auto;
	box-sizing: border-box;
}

/* ------------------------------------------------------------------ */
/* EasyParcel tracking timeline                                        */
/* ------------------------------------------------------------------ */

.tp-tracking {
	margin-top: 2rem;
	margin-bottom: 2rem;
}

.tp-tracking__heading {
	font-size: 1.1rem;
	font-weight: 600;
	margin-bottom: .75rem;
}

.tp-tracking__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: .5rem 1rem;
	margin-bottom: 1.25rem;
	font-size: .875rem;
	color: #666;
}

.tp-tracking__courier {
	font-weight: 600;
	color: #333;
}

.tp-tracking__ext-link {
	margin-left: auto;
}

.tp-tracking__empty {
	font-size: .875rem;
	color: #999;
	padding: 1rem;
	border: 1px dashed #ddd;
	border-radius: 4px;
}

.tp-tracking__timeline {
	list-style: none;
	margin: 0;
	padding: 0;
}

.tp-tracking__item {
	display: flex;
	gap: .75rem;
	padding-bottom: 1.25rem;
	position: relative;
}

.tp-tracking__item:last-child {
	padding-bottom: 0;
}

/* Vertical connector line */
.tp-tracking__item::before {
	content: '';
	position: absolute;
	left: 10px;
	top: 24px;
	bottom: 0;
	width: 2px;
	background: #e5e5e5;
}

.tp-tracking__item:last-child::before {
	display: none;
}

/* Dot */
.tp-tracking__dot {
	min-width: 22px;
	width: 22px;
	height: 22px;
	border-radius: 50%;
	background: #ddd;
	border: 3px solid #fff;
	box-shadow: 0 0 0 2px #ddd;
	margin-top: 1px;
	margin-left: -1px;
}

.tp-tracking__dot--active {
	background: #007cba;
	box-shadow: 0 0 0 2px #007cba;
}

.tp-tracking__dot--transit {
	background: #ffa500;
	box-shadow: 0 0 0 2px #ffa500;
}

.tp-tracking__dot--delivered {
	background: #46b450;
	box-shadow: 0 0 0 2px #46b450;
}

.tp-tracking__dot--returned {
	background: #dc3232;
	box-shadow: 0 0 0 2px #dc3232;
}

/* Content */
.tp-tracking__body {
	padding-top: 2px;
}

.tp-tracking__status {
	font-size: .9375rem;
	font-weight: 500;
	margin: 0 0 .1rem;
}

.tp-tracking__item--latest .tp-tracking__status {
	font-weight: 600;
}

.tp-tracking__detail {
	font-size: .8125rem;
	color: #777;
	margin: 0;
}

/* My Account → Orders: status label links to tracking history */
.woocommerce-orders-table__cell-order-status > a {
	font-weight: 600;
	color: #000;
	text-decoration: underline;
	text-underline-offset: 2px;
}

.woocommerce-orders-table__cell-order-status > a:hover,
.woocommerce-orders-table__cell-order-status > a:focus {
	color: #e91e8c;
	text-decoration: underline;
}

@media (max-width: 767px) {
	#content {
		overflow-x: hidden;
	}
}

/* Mobile header: My Account icon next to cart */
@media (max-width: 992px) {
	.main-header .secondary-navigation {
		display: block;
		position: absolute;
		right: 56px;
		top: 0;
		bottom: 0;
		z-index: 3;
		padding: 0;
		float: none;
		margin: 0;
		display: flex;
		align-items: center;
	}
	.main-header .secondary-navigation > div,
	.main-header .secondary-navigation ul {
		margin: 0;
		padding: 0;
		list-style: none;
	}
	/* Only My Account icon; hide Cart and Checkout items */
	.main-header .secondary-navigation ul li:nth-child(n+2) {
		display: none !important;
	}
	.main-header .secondary-navigation ul li {
		list-style: none;
		border: 0 !important;
		padding: 0 !important;
		margin: 0;
	}
	.main-header .secondary-navigation ul li a {
		display: flex;
		align-items: center;
		padding: 0 !important;
		font-size: 0;
		color: transparent;
		line-height: 0;
	}
	.main-header .secondary-navigation .icon-wrapper {
		display: flex;
		align-items: center;
	}
	.main-header .secondary-navigation .icon-wrapper svg {
		width: 26px;
		height: 26px;
		stroke: #111;
	}
}

/* Stripe card authorization notice on checkout */
.tp-stripe-card-notice {
    font-size: 13px;
    color: #6d6d6d;
    margin-top: 10px;
    line-height: 1.5;
}

/* ==========================================================================
   [delivery_estimate] - delivery window notice in the checkout order table
   ========================================================================== */
tr.tp-delivery-estimate th {
	padding-top: 10px;
	padding-bottom: 14px;
	font-weight: normal;
	border-bottom: 2px solid #1a1a2e !important;
}

tr.tp-delivery-estimate p {
	display: flex;
	align-items: center;
	gap: 6px;
	margin: 0;
	padding: 8px 10px;
	font-size: 13px;
	line-height: 1.4;
	color: #555d6b;
	background: #f4f6fa;
	border-radius: 6px;
}

.tp-delivery-icon {
	flex-shrink: 0;
	color: #555d6b;
}

/* ==========================================================================
   [price_filter_inputs] - manual min/max number fields in the price filter widget
   .price_slider_amount is a flex row (Shoptimizer theme); wrap it so our
   inputs row sits on its own line above the Filter button + price label.
   ========================================================================== */
.widget_price_filter .price_slider_amount {
	flex-wrap: wrap;
	align-items: center;
	gap: 0;
}

.tp-price-inputs {
	display: flex;
	align-items: center;
	gap: 6px;
	flex: 0 0 100%;
	width: 100%;
	margin-bottom: 10px;
}

.tp-price-input {
	flex: 1 1 0;
	min-width: 0;
	padding: 2px 6px;
	border: 1px solid #d0d0d0;
	border-radius: 4px;
	font-size: 12px;
	line-height: 1.4;
	height: 28px;
	color: #444;
	text-align: center;
	background: #fff;
	box-sizing: border-box;
	-moz-appearance: textfield;
}

.tp-price-input::-webkit-outer-spin-button,
.tp-price-input::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

.tp-price-input:focus {
	outline: none;
	border-color: #888;
	box-shadow: 0 0 0 2px rgba(0, 0, 0, .06);
}

.tp-price-sep {
	color: #aaa;
	font-size: 13px;
	flex-shrink: 0;
	line-height: 1;
}
