/* =============================================================================
 * ETUMAX ENTERPRISE — design system.
 *
 * The same visual system as etumaxpower.com, adapted for a trade audience. The
 * tokens, the typefaces, the tapered rule, the button weights and the card
 * geometry are the retail theme's; what changes is density and what the page is
 * for. Retail sells one sachet to one person and can afford air. This site sells
 * by the case to a buyer comparing landed cost across suppliers, so the same
 * components are packed tighter and every screen carries a number.
 *
 * Rules inherited from the retail brand and kept binding here:
 *   * One accent per screen. Gold marks the single action that matters; every
 *     other control is the quiet outline.
 *   * Never letterspace the display face. Eyebrows are the body face.
 *   * Packshots sit on white. The ground is a token, not a value.
 *
 * Section map
 *   1.  Local tokens and language faces
 *   2.  Typographic primitives
 *   3.  The tapered rule
 *   4.  Section rhythm — bands
 *   5.  Buttons and links
 *   6.  Header
 *   7.  Mobile drawer
 *   8.  Language control
 *   9.  Hero
 *   10. Calculator
 *   11. Tier ladder
 *   12. Product cards and shop
 *   13. Single product
 *   14. Steps, facts, feature grids
 *   15. Cart, checkout, account, forms
 *   16. Footer
 *
 *   parts/header.html and parts/footer.html carry NO prose comments, and must
 *   not gain any. Block template parts are served verbatim, so a comment there
 *   reaches every visitor on every page — and any sentence in it mentioning a
 *   tag name also breaks tests that grep the markup for that tag.
 *
 *   Neither part may declare `tagName` on its outer group: the template-part
 *   block already wraps the header and footer areas in <header> and <footer>,
 *   and declaring it again produced nested landmarks.
 *   17. RTL
 *   18. Japanese
 *   19. Motion, focus, skip link
 *   20. Translation status
 * ========================================================================== */

/* -----------------------------------------------------------------------------
 * 1. Local tokens and language faces
 * -------------------------------------------------------------------------- */

:root {
	--etx-hairline: color-mix(in srgb, var(--wp--preset--color--stone) 30%, transparent);
	--etx-hairline-dark: color-mix(in srgb, var(--wp--preset--color--gold-pale) 18%, transparent);
	--etx-gold-wash: color-mix(in srgb, var(--wp--preset--color--gold) 8%, transparent);
	--etx-ink-wash: color-mix(in srgb, var(--wp--preset--color--ink) 4%, transparent);

	--etx-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
	--etx-dur: 220ms;

	/* Packshots are shot on plain white. The ground is a token so a future
	   photographic change is one edit, not a search across the stylesheet. */
	--etx-shot-ground: var(--wp--preset--color--white);

	/* Trade UI needs a tabular figure everywhere a price, a quantity or a
	   percentage appears, or the columns of the tier ladder will not line up. */
	--etx-numeric: "tnum" 1, "lnum" 1;
}

/* The dirham glyph font is first in every stack, exactly as retail does it: it
   carries U+20C3 and falls through to the text face for everything else. */
:root {
	--wp--preset--font-family--body:
		"ETUMAX Dirham", Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
	--wp--preset--font-family--display:
		"ETUMAX Dirham", "Playfair Display", ui-serif, Georgia, "Times New Roman", serif;
	--wp--preset--font-family--arabic:
		"ETUMAX Dirham", "IBM Plex Sans Arabic", ui-sans-serif, system-ui, sans-serif;
	--wp--preset--font-family--japanese:
		"ETUMAX Dirham", Inter, "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Yu Gothic", YuGothic, "Noto Sans JP", Meiryo, ui-sans-serif, system-ui, sans-serif;
	--wp--preset--font-family--japanese-display:
		"ETUMAX Dirham", "Playfair Display", "Hiragino Mincho ProN", "Yu Mincho", YuMincho, "Noto Serif JP", ui-serif, Georgia, serif;
}

:root[lang^="ar"] body,
[dir="rtl"] body {
	font-family: var(--wp--preset--font-family--arabic);
}

:root[lang^="ja"] body {
	font-family: var(--wp--preset--font-family--japanese);
}

:root[lang^="ja"] h1,
:root[lang^="ja"] h2,
:root[lang^="ja"] h3,
:root[lang^="ja"] .etx-display {
	font-family: var(--wp--preset--font-family--japanese-display);
}

*,
*::before,
*::after {
	box-sizing: border-box;
}

/* Nothing may push the page sideways. On a trade site the widest things are
   tables and the tier ladder, and both are told to scroll inside themselves
   further down rather than being allowed to stretch the document. */
html,
body {
	max-width: 100%;
	overflow-x: hidden;
}

body {
	font-variant-numeric: tabular-nums lining-nums;
}

/* -----------------------------------------------------------------------------
 * 2. Typographic primitives
 * -------------------------------------------------------------------------- */

.etx-eyebrow {
	font-family: var(--wp--preset--font-family--body);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--gold-deep);
	margin: 0 0 0.75rem;
	display: block;
}

.etx-band--dark .etx-eyebrow,
.etx-band--black .etx-eyebrow,
.etx-on-dark .etx-eyebrow {
	color: var(--wp--preset--color--gold);
}

.etx-lead {
	font-size: var(--wp--preset--font-size--large);
	line-height: 1.55;
	color: var(--wp--preset--color--stone);
	max-width: 62ch;
	margin: 0 0 1.5rem;
}

.etx-on-dark .etx-lead,
.etx-band--dark .etx-lead,
.etx-band--black .etx-lead {
	color: color-mix(in srgb, var(--wp--preset--color--bone) 78%, transparent);
}

.etx-display {
	font-family: var(--wp--preset--font-family--display);
	font-weight: 500;
	line-height: 1.08;
	letter-spacing: -0.015em;
}

/* Every figure that is a price, a percentage or a count. Tabular so columns
   align, and never the display face — Playfair's figures are old-style and a
   tier ladder set in them is unreadable as data. */
.etx-num {
	font-family: var(--wp--preset--font-family--body);
	font-feature-settings: var(--etx-numeric);
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-sectionhead {
	max-width: 68ch;
	margin: 0 0 2.5rem;
}

.etx-sectionhead--center {
	margin-inline: auto;
	text-align: center;
}

.etx-sectionhead--center .etx-lead {
	margin-inline: auto;
}

.etx-sectionhead h2 {
	margin: 0 0 0.75rem;
}

/* -----------------------------------------------------------------------------
 * 3. The tapered rule
 *
 * Lifted from the logo lockup, where a tapered rule sits under the wordmark. It
 * is the one ornament the brand owns; used to open a band, never as a divider
 * between paragraphs.
 * -------------------------------------------------------------------------- */

.etx-rule {
	border: 0;
	height: 2px;
	width: 96px;
	margin: 0 0 1.5rem;
	background: linear-gradient(
		to right,
		var(--wp--preset--color--gold) 0%,
		var(--wp--preset--color--gold) 55%,
		transparent 100%
	);
}

.etx-rule--center {
	margin-inline: auto;
	background: linear-gradient(
		to right,
		transparent 0%,
		var(--wp--preset--color--gold) 30%,
		var(--wp--preset--color--gold) 70%,
		transparent 100%
	);
}

/* -----------------------------------------------------------------------------
 * 4. Section rhythm — bands
 * -------------------------------------------------------------------------- */

.etx-band {
	padding-block: var(--wp--preset--spacing--70);
}

.etx-band--tight {
	padding-block: var(--wp--preset--spacing--50);
}

.etx-band--bone {
	background: var(--wp--preset--color--bone);
}

.etx-band--mist {
	background: var(--wp--preset--color--mist);
}

.etx-band--dark {
	background: var(--wp--preset--color--near-black);
	color: var(--wp--preset--color--bone);
}

.etx-band--black {
	background: var(--wp--preset--color--black);
	color: var(--wp--preset--color--bone);
}

.etx-on-dark :is(h1, h2, h3, h4, h5),
.etx-band--dark :is(h1, h2, h3, h4, h5),
.etx-band--black :is(h1, h2, h3, h4, h5) {
	color: var(--wp--preset--color--bone);
}

.etx-band--dark a:not(.wp-element-button):not(.etx-card__link),
.etx-band--black a:not(.wp-element-button):not(.etx-card__link) {
	color: var(--wp--preset--color--gold-pale);
}

/* -----------------------------------------------------------------------------
 * 5. Buttons and links
 *
 * Two weights and only two, as retail. Gold is the single action a screen is
 * asking for; outline is everything else.
 * -------------------------------------------------------------------------- */

.wp-element-button,
.wp-block-button__link,
.etx-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	font-family: var(--wp--preset--font-family--body);
	font-size: 0.9375rem;
	font-weight: 600;
	letter-spacing: 0.01em;
	line-height: 1.2;
	padding: 0.9rem 1.6rem;
	border-radius: 2px;
	border: 1px solid transparent;
	text-decoration: none;
	cursor: pointer;
	transition: background-color var(--etx-dur) var(--etx-ease),
		color var(--etx-dur) var(--etx-ease),
		border-color var(--etx-dur) var(--etx-ease);
	/* A trade CTA is often two words in English and six in Japanese. */
	min-height: 44px;
	text-align: center;
}

.etx-btn--gold,
.is-style-etx-gold .wp-block-button__link {
	background: var(--wp--preset--color--gold);
	color: var(--wp--preset--color--ink);
	border-color: var(--wp--preset--color--gold);
}

.etx-btn--gold:hover,
.is-style-etx-gold .wp-block-button__link:hover {
	background: var(--wp--preset--color--gold-pale);
	border-color: var(--wp--preset--color--gold-pale);
	color: var(--wp--preset--color--ink);
}

.etx-btn--outline,
.is-style-etx-outline .wp-block-button__link {
	background: transparent;
	color: var(--wp--preset--color--ink);
	border-color: color-mix(in srgb, var(--wp--preset--color--ink) 35%, transparent);
}

.etx-btn--outline:hover,
.is-style-etx-outline .wp-block-button__link:hover {
	border-color: var(--wp--preset--color--ink);
	background: var(--etx-ink-wash);
}

.etx-on-dark .etx-btn--outline,
.etx-band--dark .etx-btn--outline,
.etx-band--black .etx-btn--outline {
	color: var(--wp--preset--color--bone);
	border-color: color-mix(in srgb, var(--wp--preset--color--bone) 40%, transparent);
}

.etx-on-dark .etx-btn--outline:hover,
.etx-band--dark .etx-btn--outline:hover,
.etx-band--black .etx-btn--outline:hover {
	border-color: var(--wp--preset--color--bone);
	background: color-mix(in srgb, var(--wp--preset--color--bone) 10%, transparent);
}

.etx-btn--block {
	width: 100%;
}

.etx-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	margin-top: 1.75rem;
}

.etx-textlink {
	color: var(--wp--preset--color--gold-deep);
	font-weight: 600;
	text-decoration: none;
	border-bottom: 1px solid currentColor;
	padding-bottom: 1px;
}

.etx-textlink:hover {
	color: var(--wp--preset--color--ink);
}

/* -----------------------------------------------------------------------------
 * 6. Header
 *
 * Black bar, gold rule beneath, three zones on one row: logo, navigation,
 * utilities. Same construction as retail so the two sites read as one brand;
 * the nav labels and the utility cluster are what differ.
 * -------------------------------------------------------------------------- */

.etx-header {
	position: relative;
	border-bottom: 1px solid var(--etx-hairline-dark);
}

.etx-header::after {
	content: "";
	position: absolute;
	inset-inline: 0;
	bottom: -1px;
	height: 2px;
	background: linear-gradient(
		to right,
		transparent 0%,
		var(--wp--preset--color--gold) 22%,
		var(--wp--preset--color--gold) 78%,
		transparent 100%
	);
}

.etx-header__bar {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--40);
}

.etx-header .wp-block-site-logo img {
	display: block;
	height: auto;
	max-height: 42px;
	width: auto;
}

.etx-header .wp-block-navigation {
	margin-inline-start: auto;
	font-size: 0.9375rem;
}

.etx-header .wp-block-navigation .wp-block-navigation-item__content {
	position: relative;
	color: var(--wp--preset--color--bone);
	text-decoration: none;
	font-weight: 500;
	padding-block: 0.35rem;
}

.etx-header .wp-block-navigation .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	inset-inline: 0;
	bottom: 0;
	height: 1px;
	background: var(--wp--preset--color--gold);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform var(--etx-dur) var(--etx-ease);
}

[dir="rtl"] .etx-header .wp-block-navigation .wp-block-navigation-item__content::after {
	transform-origin: right;
}

.etx-header .wp-block-navigation .wp-block-navigation-item__content:hover::after,
.etx-header .wp-block-navigation .current-menu-item > .wp-block-navigation-item__content::after {
	transform: scaleX(1);
}

/* Utilities: language, account, basket. */
.etx-utils {
	display: flex;
	align-items: center;
	gap: 0.25rem;
	margin: 0;
}

.etx-utils__item {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.4rem;
	min-width: 44px;
	min-height: 44px;
	padding: 0 0.6rem;
	color: var(--wp--preset--color--bone);
	text-decoration: none;
	font-size: 0.8125rem;
	font-weight: 600;
	border-radius: 2px;
	background: none;
	border: 0;
	cursor: pointer;
	list-style: none;
}

.etx-utils__item:hover {
	background: color-mix(in srgb, var(--wp--preset--color--bone) 12%, transparent);
	color: var(--wp--preset--color--bone);
}

.etx-utils__item svg {
	width: 20px;
	height: 20px;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.6;
	flex: none;
}

.etx-utils__count {
	display: inline-grid;
	place-items: center;
	min-width: 18px;
	height: 18px;
	padding: 0 5px;
	border-radius: 9px;
	background: var(--wp--preset--color--gold);
	color: var(--wp--preset--color--ink);
	font-size: 0.6875rem;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

.etx-utils__count[data-count="0"] {
	display: none;
}

/* The label beside each icon is desktop-only; on a phone the drawer names them. */
.etx-utils__label {
	display: none;
}

@media (min-width: 1100px) {
	.etx-utils__label {
		display: inline;
	}
}

/* -----------------------------------------------------------------------------
 * 7. Mobile drawer
 *
 * The core navigation block's own overlay is switched off (overlayMenu "never"):
 * it holds links and nothing else, so the language control, the account rows and
 * the basket have nowhere to go in it. This drawer carries all of them.
 *
 * Built on <details>, like retail's, so it opens with no JavaScript at all.
 * -------------------------------------------------------------------------- */

.etx-drawer {
	display: none;
}

.etx-drawer > summary {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 44px;
	min-height: 44px;
	cursor: pointer;
	color: var(--wp--preset--color--bone);
	list-style: none;
}

.etx-drawer > summary::-webkit-details-marker {
	display: none;
}

.etx-drawer__panel {
	position: fixed;
	inset: 0;
	z-index: 90;
	background: var(--wp--preset--color--black);
	color: var(--wp--preset--color--bone);
	padding: 1.25rem;
	overflow-y: auto;
	overscroll-behavior: contain;
}

.etx-drawer__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding-bottom: 1rem;
	border-bottom: 1px solid var(--etx-hairline-dark);
	margin-bottom: 1rem;
}

.etx-drawer__close {
	min-width: 44px;
	min-height: 44px;
	background: none;
	border: 0;
	color: inherit;
	font-size: 1.5rem;
	cursor: pointer;
	line-height: 1;
}

.etx-drawer__group {
	padding-block: 0.75rem;
	border-bottom: 1px solid var(--etx-hairline-dark);
}

.etx-drawer__group:last-child {
	border-bottom: 0;
}

.etx-drawer__title {
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--gold);
	margin: 0 0 0.5rem;
}

.etx-drawer__list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.etx-drawer__list a {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	min-height: 48px;
	color: var(--wp--preset--color--bone);
	text-decoration: none;
	font-size: 1.0625rem;
	font-weight: 500;
	border-bottom: 0;
}

.etx-drawer__list a:hover {
	color: var(--wp--preset--color--gold-pale);
}

@media (max-width: 1023px) {
	.etx-drawer {
		display: block;
		margin-inline-start: auto;
	}
	.etx-header .wp-block-navigation {
		display: none;
	}
	/* The basket stays on the bar; everything else moves into the drawer, so a
	   phone still shows the one number a buyer is tracking. */
	.etx-utils__item:not(.etx-utils__item--cart) {
		display: none;
	}
	.etx-utils {
		margin-inline-start: auto;
	}
}

@media (min-width: 1024px) {
	.etx-drawer {
		display: none !important;
	}
}

/* -----------------------------------------------------------------------------
 * 8. Language control
 *
 * A disclosure, not a menu: no script, keyboard-operable for free, and it works
 * before JavaScript loads or if it never does. Changing language must never
 * depend on script.
 * -------------------------------------------------------------------------- */

.etx-lang {
	position: relative;
}

.etx-lang > summary {
	list-style: none;
}

.etx-lang > summary::-webkit-details-marker {
	display: none;
}

.etx-lang__current {
	font-weight: 700;
	letter-spacing: 0.06em;
}

.etx-lang__panel {
	position: absolute;
	inset-inline-end: 0;
	top: calc(100% + 6px);
	z-index: 80;
	min-width: 220px;
	padding: 0.5rem;
	background: var(--wp--preset--color--near-black);
	border: 1px solid var(--etx-hairline-dark);
	border-radius: 2px;
	box-shadow: 0 18px 40px rgba(0, 0, 0, 0.45);
}

.etx-lang__title {
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--gold);
	margin: 0.25rem 0.5rem 0.5rem;
}

.etx-lang__list,
.etx-langrow__list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.etx-lang__list a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	min-height: 44px;
	padding: 0 0.75rem;
	color: var(--wp--preset--color--bone);
	text-decoration: none;
	border-radius: 2px;
	border-bottom: 0;
}

.etx-lang__list a:hover {
	background: color-mix(in srgb, var(--wp--preset--color--bone) 10%, transparent);
}

.etx-lang__item.is-current a {
	color: var(--wp--preset--color--gold);
}

.etx-lang__code {
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	opacity: 0.7;
}

/* Footer row — the same set, flat, always in the document for a crawler and for
   anyone who reads to the end before deciding. */
.etx-langrow {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 0.5rem 1rem;
}

.etx-langrow__label {
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--gold);
	margin: 0;
}

.etx-langrow__list {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem 1.25rem;
}

.etx-langrow__item a {
	display: inline-flex;
	align-items: baseline;
	gap: 0.4rem;
	color: color-mix(in srgb, var(--wp--preset--color--bone) 80%, transparent);
	text-decoration: none;
	font-size: 0.875rem;
	border-bottom: 0;
}

.etx-langrow__item a:hover {
	color: var(--wp--preset--color--bone);
}

.etx-langrow__item.is-current a {
	color: var(--wp--preset--color--gold);
	font-weight: 600;
}

/* -----------------------------------------------------------------------------
 * 9. Hero
 *
 * Two columns on desktop: the proposition on one side, the live calculator on
 * the other. The calculator is in the hero deliberately — the first question a
 * wholesale buyer has is "what does it cost me at my volume", and this answers
 * it above the fold rather than sending them to a form.
 * -------------------------------------------------------------------------- */

.etx-hero {
	position: relative;
	background: var(--wp--preset--color--black);
	color: var(--wp--preset--color--bone);
	padding-block: var(--wp--preset--spacing--70);
	overflow: hidden;
}

/* A single soft gold wash, off-centre. No photograph: there is no approved
   trade photography yet, and a stock warehouse image would be a claim about
   facilities this business has not made. */
.etx-hero::before {
	content: "";
	position: absolute;
	inset-block-start: -30%;
	inset-inline-end: -10%;
	width: 70%;
	aspect-ratio: 1;
	background: radial-gradient(circle, var(--etx-gold-wash) 0%, transparent 68%);
	pointer-events: none;
}

.etx-hero__grid {
	position: relative;
	display: grid;
	gap: var(--wp--preset--spacing--50);
	align-items: start;
}

@media (min-width: 900px) {
	.etx-hero__grid {
		grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
		gap: var(--wp--preset--spacing--60);
	}
}

.etx-hero h1 {
	font-size: var(--wp--preset--font-size--display);
	margin: 0 0 1rem;
	color: var(--wp--preset--color--bone);
}

.etx-hero__claim {
	color: var(--wp--preset--color--gold);
}

.etx-hero__lead {
	font-size: var(--wp--preset--font-size--large);
	line-height: 1.55;
	color: color-mix(in srgb, var(--wp--preset--color--bone) 80%, transparent);
	max-width: 52ch;
	margin: 0 0 1.5rem;
}

/* The three figures under the hero copy. Facts only: the ceiling, the MOQ and
   the tier count — each one verifiable against the engine. */
.etx-hero__facts {
	display: flex;
	flex-wrap: wrap;
	gap: 1.75rem 2.5rem;
	margin: 1.75rem 0 0;
	padding: 1.5rem 0 0;
	border-top: 1px solid var(--etx-hairline-dark);
	list-style: none;
}

.etx-hero__fact strong {
	display: block;
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--xx-large);
	font-weight: 500;
	line-height: 1;
	color: var(--wp--preset--color--gold);
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-hero__fact span {
	display: block;
	margin-top: 0.35rem;
	font-size: 0.8125rem;
	letter-spacing: 0.04em;
	color: color-mix(in srgb, var(--wp--preset--color--bone) 65%, transparent);
}

/* -----------------------------------------------------------------------------
 * 10. Calculator
 *
 * The markup comes from the plugin ([etumax_calculator]); this only dresses it.
 * The arithmetic is the Node engine's and is never reimplemented here or in the
 * stylesheet's assumptions — no CSS rule may depend on a particular number.
 * -------------------------------------------------------------------------- */

.etx-calc,
.ews-calc-mount {
	background: var(--wp--preset--color--bone);
	color: var(--wp--preset--color--ink);
	border: 1px solid var(--etx-hairline);
	border-radius: 3px;
	padding: 1.5rem;
	box-shadow: 0 24px 60px rgba(0, 0, 0, 0.35);
}

.etx-band--bone .etx-calc,
.etx-band--bone .ews-calc-mount,
.etx-band--mist .etx-calc,
.etx-band--mist .ews-calc-mount {
	background: var(--wp--preset--color--white);
	box-shadow: none;
}

.etx-calc__head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1rem;
	margin-bottom: 1rem;
	padding-bottom: 0.85rem;
	border-bottom: 1px solid var(--etx-hairline);
}

.etx-calc__title {
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--x-large);
	font-weight: 500;
	margin: 0;
}

/* Any figure the calculator prints. */
.ews-calc-mount :is(input, select, output, td, th) {
	font-variant-numeric: tabular-nums lining-nums;
}

.ews-calc-mount input[type="number"],
.ews-calc-mount select,
.etx-field {
	width: 100%;
	min-height: 48px;
	padding: 0.65rem 0.85rem;
	font: inherit;
	font-variant-numeric: tabular-nums lining-nums;
	color: var(--wp--preset--color--ink);
	background: var(--wp--preset--color--white);
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--stone) 45%, transparent);
	border-radius: 2px;
}

.ews-calc-mount input[type="number"]:focus-visible,
.etx-field:focus-visible {
	outline: 2px solid var(--wp--preset--color--gold-deep);
	outline-offset: 1px;
}

/* -----------------------------------------------------------------------------
 * 11. Tier ladder
 *
 * Nineteen rows. On a phone this is the widest thing on the site, so it scrolls
 * inside its own container rather than widening the document.
 * -------------------------------------------------------------------------- */

.etx-tablewrap,
.ews-ladder-wrap {
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	border: 1px solid var(--etx-hairline);
	border-radius: 3px;
	background: var(--wp--preset--color--white);
}

.etx-ladder,
.ews-ladder {
	width: 100%;
	min-width: 640px;
	border-collapse: collapse;
	font-size: 0.9375rem;
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-ladder th,
.etx-ladder td,
.ews-ladder th,
.ews-ladder td {
	padding: 0.7rem 0.9rem;
	text-align: start;
	border-bottom: 1px solid var(--etx-hairline);
	white-space: nowrap;
}

.etx-ladder thead th,
.ews-ladder thead th {
	position: sticky;
	top: 0;
	z-index: 1;
	background: var(--wp--preset--color--near-black);
	color: var(--wp--preset--color--bone);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	white-space: nowrap;
}

.etx-ladder tbody tr:nth-child(even),
.ews-ladder tbody tr:nth-child(even) {
	background: color-mix(in srgb, var(--wp--preset--color--mist) 45%, transparent);
}

.etx-ladder tbody tr:hover,
.ews-ladder tbody tr:hover {
	background: var(--etx-gold-wash);
}

/* The five highlighted tiers. The badge is the label the engine supplies; the
   ring is what makes it findable while scrolling nineteen rows. */
.etx-ladder tr.is-highlight,
.ews-ladder tr.is-highlight {
	background: var(--etx-gold-wash);
	box-shadow: inset 3px 0 0 var(--wp--preset--color--gold);
}

[dir="rtl"] .etx-ladder tr.is-highlight,
[dir="rtl"] .ews-ladder tr.is-highlight {
	box-shadow: inset -3px 0 0 var(--wp--preset--color--gold);
}

.etx-pill,
.ews-pill {
	display: inline-block;
	padding: 0.15rem 0.5rem;
	border-radius: 2px;
	background: var(--wp--preset--color--gold);
	color: var(--wp--preset--color--ink);
	font-size: 0.625rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	white-space: nowrap;
}

.etx-code,
.ews-code {
	font-weight: 700;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--gold-deep);
}

.etx-pct,
.ews-pct {
	font-weight: 700;
	color: var(--wp--preset--color--saving);
}

/* The container-tier caveat. It is a compliance line, not a footnote: the C
   tiers are priced by unit count and are NOT verified container capacities. */
.etx-caveat {
	margin-top: 1rem;
	padding: 0.9rem 1.1rem;
	background: var(--wp--preset--color--mist);
	border-inline-start: 3px solid var(--wp--preset--color--stone);
	font-size: 0.875rem;
	line-height: 1.55;
	color: var(--wp--preset--color--ink);
}

/* -----------------------------------------------------------------------------
 * 12. Product cards and shop
 *
 * Same card geometry as retail — white packshot ground, hairline frame, name in
 * the body face, tapered rule on hover — with the trade block added underneath:
 * retail reference struck through, wholesale price, tier, and a quantity control
 * that starts at the MOQ rather than 1.
 * -------------------------------------------------------------------------- */

.woocommerce ul.products,
.etx-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr));
	gap: var(--wp--preset--spacing--40);
	margin: 0;
	padding: 0;
	list-style: none;
}

/* WooCommerce's own float grid has to be overridden or the cards stack in a
   column with clearfix gaps. system.css loads after woocommerce-general. */
.woocommerce ul.products::before,
.woocommerce ul.products::after {
	content: none;
}

.woocommerce ul.products li.product {
	width: auto !important;
	float: none !important;
	margin: 0 !important;
	clear: none !important;
}

.woocommerce ul.products li.product,
.etx-card {
	display: flex;
	flex-direction: column;
	background: var(--wp--preset--color--white);
	border: 1px solid var(--etx-hairline);
	border-radius: 3px;
	overflow: hidden;
	transition: border-color var(--etx-dur) var(--etx-ease),
		transform var(--etx-dur) var(--etx-ease);
}

.woocommerce ul.products li.product:hover,
.etx-card:hover {
	border-color: color-mix(in srgb, var(--wp--preset--color--gold) 60%, transparent);
	transform: translateY(-2px);
}

.woocommerce ul.products li.product a img,
.etx-card__media img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 1;
	object-fit: contain;
	background: var(--etx-shot-ground);
	padding: 1rem;
	margin: 0;
}

.woocommerce ul.products li.product .woocommerce-loop-product__title,
.etx-card__title {
	font-family: var(--wp--preset--font-family--body) !important;
	font-size: 1rem !important;
	font-weight: 600;
	line-height: 1.35;
	padding: 0.9rem 1rem 0.4rem !important;
	margin: 0;
	color: var(--wp--preset--color--ink);
}

.woocommerce ul.products li.product .price,
.etx-card__price {
	padding: 0 1rem;
	margin: 0 0 0.5rem;
	font-size: 1rem !important;
	color: var(--wp--preset--color--ink) !important;
	font-variant-numeric: tabular-nums lining-nums;
}

/* The trade block. Rendered by the plugin's card hook. */
.etx-trade {
	margin-top: auto;
	padding: 0.85rem 1rem 1rem;
	border-top: 1px solid var(--etx-hairline);
	background: color-mix(in srgb, var(--wp--preset--color--mist) 40%, transparent);
	display: grid;
	gap: 0.5rem;
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-trade__row {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.75rem;
	font-size: 0.8125rem;
	color: var(--wp--preset--color--stone);
}

.etx-trade__retail {
	text-decoration: line-through;
	color: var(--wp--preset--color--stone);
}

.etx-trade__price {
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--x-large);
	font-weight: 600;
	line-height: 1;
	color: var(--wp--preset--color--ink);
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-trade__unit {
	font-family: var(--wp--preset--font-family--body);
	font-size: 0.75rem;
	font-weight: 500;
	color: var(--wp--preset--color--stone);
}

.etx-trade__save {
	display: inline-block;
	padding: 0.1rem 0.4rem;
	border-radius: 2px;
	background: var(--wp--preset--color--saving-pale);
	color: var(--wp--preset--color--saving);
	font-size: 0.75rem;
	font-weight: 700;
}

.etx-trade__tier {
	font-size: 0.75rem;
	color: var(--wp--preset--color--gold-deep);
	font-weight: 600;
}

/* Quantity + add, side by side, both 48px so they line up on a phone. */
.etx-trade__buy {
	display: flex;
	gap: 0.5rem;
	margin-top: 0.25rem;
}

.etx-trade__buy .quantity,
.etx-trade__buy input[type="number"] {
	flex: 0 0 92px;
	margin: 0;
}

.etx-trade__buy input[type="number"] {
	width: 92px;
	min-height: 48px;
	padding: 0.5rem;
	text-align: center;
	font: inherit;
	font-variant-numeric: tabular-nums;
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--stone) 45%, transparent);
	border-radius: 2px;
	background: var(--wp--preset--color--white);
}

.etx-trade__buy .button,
.etx-trade__buy .etx-btn {
	flex: 1 1 auto;
	min-height: 48px;
	padding-inline: 0.9rem;
	font-size: 0.875rem;
}

.woocommerce ul.products li.product .button {
	background: var(--wp--preset--color--gold);
	color: var(--wp--preset--color--ink);
	border-radius: 2px;
	font-weight: 600;
}

.woocommerce ul.products li.product .button:hover {
	background: var(--wp--preset--color--gold-pale);
	color: var(--wp--preset--color--ink);
}

/* The shop header strip: result count on one side, ordering on the other. */
.etx-shopbar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding-bottom: 1rem;
	margin-bottom: var(--wp--preset--spacing--40);
	border-bottom: 1px solid var(--etx-hairline);
}

.woocommerce .woocommerce-result-count {
	margin: 0;
	color: var(--wp--preset--color--stone);
	font-size: 0.875rem;
}

.woocommerce .woocommerce-ordering select {
	min-height: 44px;
	padding: 0.4rem 0.6rem;
	font: inherit;
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--stone) 45%, transparent);
	border-radius: 2px;
	background: var(--wp--preset--color--white);
}

/* -----------------------------------------------------------------------------
 * 13. Single product
 * -------------------------------------------------------------------------- */

.woocommerce div.product {
	display: grid;
	gap: var(--wp--preset--spacing--50);
}

@media (min-width: 900px) {
	.woocommerce div.product {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
		align-items: start;
	}
	.woocommerce div.product .woocommerce-tabs,
	.woocommerce div.product .related,
	.woocommerce div.product .etx-fullspan {
		grid-column: 1 / -1;
	}
}

.woocommerce div.product div.images {
	margin: 0;
	background: var(--etx-shot-ground);
	border: 1px solid var(--etx-hairline);
	border-radius: 3px;
	padding: 1.25rem;
}

.woocommerce div.product div.images img {
	border-radius: 2px;
}

.woocommerce div.product .product_title {
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--xxx-large);
	font-weight: 500;
	line-height: 1.1;
	margin: 0 0 0.5rem;
}

.woocommerce div.product .woocommerce-product-details__short-description {
	color: var(--wp--preset--color--stone);
	line-height: 1.6;
}

/* The buy box — the one dense panel on the page. */
.etx-buybox,
.ews-buybox {
	background: var(--wp--preset--color--white);
	border: 1px solid var(--etx-hairline);
	border-radius: 3px;
	padding: 1.25rem;
	margin-block: 1.25rem;
	display: grid;
	gap: 0.85rem;
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-buybox__price,
.ews-bb-price {
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--display);
	font-weight: 600;
	line-height: 1;
	margin: 0;
	color: var(--wp--preset--color--ink);
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-buybox__label,
.ews-bb-label {
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--wp--preset--color--stone);
	margin: 0;
}

.etx-buybox__sub,
.ews-bb-sub {
	font-size: 0.875rem;
	color: var(--wp--preset--color--stone);
	margin: 0;
}

/* Tier progression: where this quantity sits and what the next tier costs. */
.etx-progress {
	display: grid;
	gap: 0.4rem;
	padding: 0.85rem;
	border-radius: 2px;
	background: var(--wp--preset--color--mist);
}

.etx-progress__bar {
	height: 6px;
	border-radius: 3px;
	background: color-mix(in srgb, var(--wp--preset--color--stone) 25%, transparent);
	overflow: hidden;
}

.etx-progress__fill {
	display: block;
	height: 100%;
	background: var(--wp--preset--color--gold);
}

.etx-progress__note {
	font-size: 0.8125rem;
	color: var(--wp--preset--color--ink);
	margin: 0;
}

/* Mixed-cart explanation. Appears on the product page and in the cart, because
   it is the single most misunderstood thing about this pricing model. */
.etx-mixed {
	padding: 0.9rem 1.1rem;
	border-inline-start: 3px solid var(--wp--preset--color--gold);
	background: var(--etx-gold-wash);
	font-size: 0.875rem;
	line-height: 1.55;
}

.etx-spec {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9375rem;
}

.etx-spec th,
.etx-spec td {
	padding: 0.6rem 0;
	border-bottom: 1px solid var(--etx-hairline);
	text-align: start;
	vertical-align: top;
}

.etx-spec th {
	font-weight: 600;
	color: var(--wp--preset--color--stone);
	width: 40%;
}

/* -----------------------------------------------------------------------------
 * 14. Steps, facts, feature grids
 * -------------------------------------------------------------------------- */

.etx-steps {
	display: grid;
	gap: var(--wp--preset--spacing--40);
	counter-reset: etx-step;
	list-style: none;
	margin: 0;
	padding: 0;
}

@media (min-width: 760px) {
	.etx-steps--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
	.etx-steps--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.etx-step {
	counter-increment: etx-step;
	padding-top: 2.75rem;
	position: relative;
}

.etx-step::before {
	content: counter(etx-step, decimal-leading-zero);
	position: absolute;
	top: 0;
	inset-inline-start: 0;
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--xx-large);
	font-weight: 500;
	line-height: 1;
	color: var(--wp--preset--color--gold);
	font-variant-numeric: lining-nums;
}

.etx-step h3 {
	font-family: var(--wp--preset--font-family--body);
	font-size: 1.0625rem;
	font-weight: 600;
	margin: 0 0 0.4rem;
}

.etx-step p {
	margin: 0;
	font-size: 0.9375rem;
	line-height: 1.6;
	color: var(--wp--preset--color--stone);
}

.etx-band--dark .etx-step p,
.etx-band--black .etx-step p {
	color: color-mix(in srgb, var(--wp--preset--color--bone) 72%, transparent);
}

.etx-features {
	display: grid;
	gap: var(--wp--preset--spacing--40);
	list-style: none;
	margin: 0;
	padding: 0;
}

@media (min-width: 760px) {
	.etx-features {
		grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
	}
}

.etx-feature {
	padding: 1.25rem;
	background: var(--wp--preset--color--white);
	border: 1px solid var(--etx-hairline);
	border-radius: 3px;
}

.etx-band--dark .etx-feature,
.etx-band--black .etx-feature {
	background: color-mix(in srgb, var(--wp--preset--color--bone) 6%, transparent);
	border-color: var(--etx-hairline-dark);
}

.etx-feature h3 {
	font-family: var(--wp--preset--font-family--body);
	font-size: 1rem;
	font-weight: 600;
	margin: 0 0 0.4rem;
}

.etx-feature p {
	margin: 0;
	font-size: 0.9375rem;
	line-height: 1.6;
	color: var(--wp--preset--color--stone);
}

.etx-band--dark .etx-feature p,
.etx-band--black .etx-feature p {
	color: color-mix(in srgb, var(--wp--preset--color--bone) 72%, transparent);
}

/* A row of large figures. Facts the engine or the catalogue can prove. */
.etx-figures {
	display: grid;
	gap: var(--wp--preset--spacing--40);
	list-style: none;
	margin: 0;
	padding: 0;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr));
	text-align: center;
}

.etx-figure strong {
	display: block;
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--xxx-large);
	font-weight: 500;
	line-height: 1;
	color: var(--wp--preset--color--gold-deep);
	font-variant-numeric: tabular-nums lining-nums;
}

.etx-band--dark .etx-figure strong,
.etx-band--black .etx-figure strong {
	color: var(--wp--preset--color--gold);
}

.etx-figure span {
	display: block;
	margin-top: 0.4rem;
	font-size: 0.875rem;
	color: var(--wp--preset--color--stone);
}

.etx-band--dark .etx-figure span,
.etx-band--black .etx-figure span {
	color: color-mix(in srgb, var(--wp--preset--color--bone) 70%, transparent);
}

/* The closing call-to-action band. */
.etx-cta {
	display: grid;
	gap: 1.25rem;
	align-items: center;
}

@media (min-width: 860px) {
	.etx-cta {
		grid-template-columns: minmax(0, 1fr) auto;
		gap: var(--wp--preset--spacing--50);
	}
	.etx-cta .etx-actions {
		margin-top: 0;
	}
}

/* -----------------------------------------------------------------------------
 * 15. Cart, checkout, account, forms
 *
 * WooCommerce's own stylesheets stay enqueued — they carry the cart, checkout,
 * account and notice styling this pass does not rebuild. These rules sit on top
 * and only correct what clashes with the brand.
 * -------------------------------------------------------------------------- */

.wp-block-woocommerce-cart,
.wp-block-woocommerce-checkout,
.woocommerce-account,
.woocommerce-cart,
.woocommerce-checkout {
	font-variant-numeric: tabular-nums lining-nums;
}

.wc-block-components-button,
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce #respond input#submit {
	background: var(--wp--preset--color--gold) !important;
	color: var(--wp--preset--color--ink) !important;
	border-radius: 2px !important;
	font-weight: 600;
	min-height: 48px;
}

.wc-block-components-button:hover,
.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover,
.woocommerce #respond input#submit:hover {
	background: var(--wp--preset--color--gold-pale) !important;
	color: var(--wp--preset--color--ink) !important;
}

/* The checkout's own place-order button is the single gold action on that page,
   so every other button there drops to the outline weight. */
.wc-block-components-checkout-place-order-button {
	background: var(--wp--preset--color--gold) !important;
}

.woocommerce table.shop_table,
.wc-block-cart-items {
	border: 1px solid var(--etx-hairline);
	border-radius: 3px;
	border-collapse: collapse;
}

.woocommerce table.shop_table th,
.woocommerce table.shop_table td {
	border-color: var(--etx-hairline);
	padding: 0.85rem;
}

/* Every text input on the site, including the block checkout's. */
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.woocommerce form .form-row select,
.wc-block-components-text-input input,
.wc-block-components-textarea,
input[type="text"],
input[type="email"],
input[type="tel"],
input[type="search"],
input[type="password"],
input[type="number"],
textarea,
select {
	min-height: 48px;
	padding: 0.6rem 0.8rem;
	font: inherit;
	color: var(--wp--preset--color--ink);
	background: var(--wp--preset--color--white);
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--stone) 45%, transparent);
	border-radius: 2px;
	max-width: 100%;
}

textarea {
	min-height: 120px;
}

.woocommerce-info,
.woocommerce-message,
.wc-block-components-notice-banner {
	border-top-color: var(--wp--preset--color--gold) !important;
	border-radius: 2px;
}

/* Empty-cart and account panels sit on the page ground, not in a white void. */
.woocommerce-account .woocommerce-MyAccount-navigation ul {
	list-style: none;
	margin: 0 0 1.5rem;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
}

.woocommerce-account .woocommerce-MyAccount-navigation a {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	padding: 0 0.9rem;
	border: 1px solid var(--etx-hairline);
	border-radius: 2px;
	text-decoration: none;
	color: var(--wp--preset--color--ink);
	font-size: 0.9375rem;
}

.woocommerce-account .woocommerce-MyAccount-navigation .is-active a {
	border-color: var(--wp--preset--color--gold);
	background: var(--etx-gold-wash);
}

/* -----------------------------------------------------------------------------
 * 16. Footer
 * -------------------------------------------------------------------------- */

.etx-footer {
	background: var(--wp--preset--color--ink);
	color: var(--wp--preset--color--bone);
}

.etx-footer__grid {
	display: grid;
	gap: var(--wp--preset--spacing--50);
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr));
}

/* The brand column is wider than a link column; a grid with a minimum track
   width wraps, where wp:columns would not. */
.etx-footer__brand {
	grid-column: span 2;
	min-width: min(100%, 260px);
}

.etx-footer .wp-block-site-logo img {
	max-height: 48px;
	width: auto;
	height: auto;
}

.etx-footer h2 {
	font-family: var(--wp--preset--font-family--body);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--gold);
	margin: 0 0 0.85rem;
}

.etx-footer-list {
	list-style: none;
	margin: 0;
	padding: 0;
	line-height: 2;
}

.etx-footer a {
	color: color-mix(in srgb, var(--wp--preset--color--bone) 82%, transparent);
	text-decoration: none;
}

.etx-footer a:hover {
	color: var(--wp--preset--color--gold-pale);
	text-decoration: underline;
}

.etx-footer__blurb,
.etx-footer__terms {
	color: color-mix(in srgb, var(--wp--preset--color--bone) 68%, transparent);
	font-size: 0.875rem;
	line-height: 1.6;
	margin: 0.85rem 0 0;
	max-width: 46ch;
}

.etx-footer__colophon {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	gap: 0.75rem 1.5rem;
	margin-top: var(--wp--preset--spacing--40);
	padding-top: 1.25rem;
	border-top: 1px solid var(--etx-hairline-dark);
}

.etx-footer__colophon p {
	margin: 0;
	font-size: 0.8125rem;
	color: color-mix(in srgb, var(--wp--preset--color--bone) 58%, transparent);
}

.etx-footer__languages {
	margin-top: var(--wp--preset--spacing--40);
	padding-top: 1.25rem;
	border-top: 1px solid var(--etx-hairline-dark);
}

/* -----------------------------------------------------------------------------
 * 17. RTL
 *
 * Almost everything above is already direction-neutral: the layout uses logical
 * properties (inset-inline, margin-inline, padding-inline, text-align: start),
 * so the Arabic tree mirrors without a rule. What follows is the short list of
 * things that genuinely cannot be expressed logically.
 * -------------------------------------------------------------------------- */

[dir="rtl"] .etx-rule {
	background: linear-gradient(
		to left,
		var(--wp--preset--color--gold) 0%,
		var(--wp--preset--color--gold) 55%,
		transparent 100%
	);
}

/* The step numerals are Latin digits in a Latin sequence; they stay LTR inside
   an RTL page or "01" renders as "10". */
[dir="rtl"] .etx-step::before {
	direction: ltr;
	unicode-bidi: isolate;
}

/* Prices, percentages and quantities are Western digits with a Latin symbol.
   Isolating them stops the bidi algorithm reordering "€48.30" or "25%". */
[dir="rtl"] :is(.etx-num, .etx-trade__price, .etx-buybox__price, .ews-bb-price,
	.etx-trade__retail, .etx-pct, .ews-pct, .etx-hero__fact strong, .etx-figure strong) {
	unicode-bidi: isolate;
}

/* The tier ladder is a data table. Its numeric cells stay LTR so a range like
   "12–47" is not displayed as "47–12". */
[dir="rtl"] :is(.etx-ladder, .ews-ladder) :is(td, th) {
	unicode-bidi: plaintext;
}

[dir="rtl"] :is(.etx-ladder, .ews-ladder) td.is-numeric,
[dir="rtl"] :is(.etx-ladder, .ews-ladder) td[data-numeric] {
	direction: ltr;
	unicode-bidi: isolate;
	text-align: end;
}

/* The mixed-cart note and the caveat both use an inline-start border, which is
   already logical; the gold wash gradient in the hero is not. */
[dir="rtl"] .etx-hero::before {
	inset-inline-end: auto;
	inset-inline-start: -10%;
}

/* Scrollable tables must start at the correct edge in RTL. */
[dir="rtl"] .etx-tablewrap,
[dir="rtl"] .ews-ladder-wrap {
	direction: rtl;
}

/* -----------------------------------------------------------------------------
 * 18. Japanese
 *
 * Japanese has no inter-word spaces, so a long noun phrase in a narrow card or
 * a button will overflow rather than wrap unless told otherwise. `line-break:
 * strict` keeps small kana and prolonged sound marks off the start of a line.
 * -------------------------------------------------------------------------- */

:root[lang^="ja"] body {
	line-break: strict;
	overflow-wrap: anywhere;
	word-break: normal;
}

:root[lang^="ja"] :is(h1, h2, h3, .etx-hero h1) {
	/* Japanese display type needs a little more leading than Latin at the same
	   size, and no negative tracking — the glyphs are already on a fixed em. */
	line-height: 1.35;
	letter-spacing: 0;
}

:root[lang^="ja"] :is(.wp-element-button, .etx-btn, .wp-block-button__link) {
	/* A CTA that is two words in English is often a single unbroken run in
	   Japanese. Let it wrap inside the button rather than escape it. */
	white-space: normal;
	overflow-wrap: anywhere;
	line-height: 1.4;
	padding-block: 0.75rem;
}

:root[lang^="ja"] :is(.etx-card__title, .woocommerce-loop-product__title) {
	overflow-wrap: anywhere;
}

/* The ladder's header cells are set nowrap for Latin; Japanese labels are
   longer and must be allowed to wrap or the header row clips. */
:root[lang^="ja"] :is(.etx-ladder, .ews-ladder) thead th {
	white-space: normal;
	min-width: 5.5em;
}

:root[lang^="ja"] .etx-eyebrow,
:root[lang^="ja"] .etx-footer h2,
:root[lang^="ja"] .etx-drawer__title,
:root[lang^="ja"] .etx-lang__title {
	/* Wide tracking on kana is illegible; the uppercase transform does nothing
	   for Japanese and the letterspacing actively hurts. */
	letter-spacing: 0.02em;
	text-transform: none;
}

/* -----------------------------------------------------------------------------
 * 19. Motion, focus, skip link
 * -------------------------------------------------------------------------- */

:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
	outline: 2px solid var(--wp--preset--color--gold);
	outline-offset: 2px;
	border-radius: 2px;
}

.etx-band--dark :focus-visible,
.etx-band--black :focus-visible,
.etx-header :focus-visible,
.etx-footer :focus-visible {
	outline-color: var(--wp--preset--color--gold-pale);
}

.etx-skip {
	position: absolute;
	inset-inline-start: -9999px;
	top: 0;
	z-index: 200;
	padding: 0.75rem 1.25rem;
	background: var(--wp--preset--color--gold);
	color: var(--wp--preset--color--ink);
	font-weight: 600;
	text-decoration: none;
}

.etx-skip:focus {
	inset-inline-start: 0;
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.001ms !important;
		scroll-behavior: auto !important;
	}
	.etx-card:hover,
	.woocommerce ul.products li.product:hover {
		transform: none;
	}
}

/* Images below the fold are lazy-loaded by WordPress; reserving the box stops
   the card grid reflowing as they arrive. */
img {
	max-width: 100%;
	height: auto;
}

/* -----------------------------------------------------------------------------
 * 20. Translation status
 *
 * A locale whose copy has not been through a qualified human translator is
 * marked, in the page, for anyone reviewing it. This is deliberately visible
 * rather than a code comment: the whole point is that nobody mistakes machine
 * or agent-produced copy for approved final text.
 * -------------------------------------------------------------------------- */

.etx-tstatus {
	display: block;
	padding: 0.75rem 1rem;
	background: var(--wp--preset--color--mist);
	border-inline-start: 3px solid var(--wp--preset--color--warning);
	color: var(--wp--preset--color--ink);
	font-size: 0.8125rem;
	line-height: 1.5;
}

.etx-tstatus strong {
	font-weight: 700;
}

/* Utility. */
.etx-visually-hidden {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

.etx-center { text-align: center; }
.etx-mt-0   { margin-top: 0; }
