/* ==========================================================================
   TYPOGRAPHY — Readex Pro, self-hosted
   --------------------------------------------------------------------------
   Before this project the store had NO Arabic font at all: every family the
   theme configured was Latin-only (Lato, Open Sans, Arial), so on an entirely
   Arabic storefront none of them applied and every visitor saw whatever face
   their device happened to ship — different on iPhone, Android and Windows.

   Readex Pro was chosen from a specimen of five set in the shop's own product
   names at real card size. It is a contemporary face drawn for Arabic and
   Latin together rather than a Latin design with Arabic bolted on, which is
   why the two scripts hold the same weight and colour on a line mixing a name
   with a price.

   ONE FILE PER SCRIPT, NOT ONE PER WEIGHT. Readex Pro is a VARIABLE font:
   Google serves byte-identical files for 400 and 600 (verified by md5), so
   shipping both would have doubled the payload for nothing. Declared with a
   weight RANGE, the single file covers every weight used. 53 KB total.

   Self-hosted, not linked from Google: a CDN link makes the storefront's
   appearance depend on a third party being reachable and discloses every
   visitor's IP to it. The theme's own Google Fonts request is removed in
   class-drop-google-fonts.php.

   Paths are RELATIVE. This stylesheet lives under plugins/ on staging and
   mu-plugins/ on production; a relative URL resolves in both.
   ========================================================================== */

@font-face {
	font-family: 'Readex Pro';
	font-style: normal;
	font-weight: 100 700;          /* variable axis; only 400 and 600 are used */
	font-display: swap;
	src: url('../fonts/readexpro-400-arabic.woff2') format('woff2');
	/* Arabic subset */
	unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}

@font-face {
	font-family: 'Readex Pro';
	font-style: normal;
	font-weight: 100 700;
	font-display: swap;
	src: url('../fonts/readexpro-400-latin.woff2') format('woff2');
	/* Latin subset */
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


/* Woodmart drives its typography from these variables, so overriding them
   reaches the whole theme — headings, body, header elements — without chasing
   individual selectors. Two weights only: a third is usually someone avoiding
   a hierarchy decision. */
:root,
body {
	--wd-text-font:        'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif;
	--wd-title-font:       'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif;
	--wd-header-el-font:   'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif;
	--wd-alternative-font: 'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif;
	--wd-entities-font:    'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif;
}

body,
input, button, select, textarea,
.wd-entities-title,
h1, h2, h3, h4, h5, h6 {
	font-family: 'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif;
}

/* Prices sit in a grid and must align on the decimal. Cheapest typographic
   win on the whole site. Arabic is NEVER letter-spaced — it breaks the joins
   between letters — so no tracking is introduced anywhere here. */
.price, .wrap-price, .amount, .woocommerce-Price-amount {
	font-variant-numeric: tabular-nums;
	font-feature-settings: 'tnum' 1;
}

/**
 * Storefront visual direction — myroork.com
 *
 * Implements the palette + component system approved in
 * docs/design/proposal.html (gulf-water teal anchor, warm sand ground, a
 * single brass CTA colour, coral reserved for sale badges). CSS only: no
 * markup/template changes. Scoped to override Woodmart cleanly, RTL-first
 * (this store is dir="rtl" — logical properties throughout).
 *
 * See docs/design/proposal.html for the rationale and the full palette.
 */

:root {
	/* Ground + ink — warm sand, never the current pale blue-grey */
	--myr-sand:    #F5F1E8;
	--myr-sand-2:  #EFE9DC;
	--myr-surface: #FFFDF9;
	--myr-ink:     #0A2226;
	--myr-ink-2:   #3B5359;
	/* Darkened from the proposal's #6E858A (3.46:1 on sand — fails AA for
	 * text) to #586A6E, which clears 4.5:1 on both sand and surface. See the
	 * contrast measurements in the delivery report. */
	--myr-ink-3:   #586A6E;
	--myr-line:    #DCD3C2;

	/* Gulf water — the anchor */
	--myr-deep:    #0F3B42;
	--myr-deep-2:  #14515A;
	--myr-aqua:    #2E8B8B;

	/* Brass — the single CTA colour. --myr-brass is the proposal's swatch
	 * value, kept for decorative (non-text) accents such as the heading
	 * underline. Measured contrast of white text on #C07C2C is only 3.41:1 —
	 * below AA for normal-size button labels — so actual button fills use
	 * the darker --myr-brass-btn (5.0:1 with white) instead. */
	--myr-brass:      #C07C2C;
	--myr-brass-btn:  #9A6323;
	--myr-brass-ink:  #8A5514;

	/* Semantic — deliberately separate from the CTA colour */
	--myr-coral: #C4442E;
	--myr-good:  #2F7D5B;

	--myr-shadow-1: 0 1px 2px rgba(10, 34, 38, .06), 0 2px 8px rgba(10, 34, 38, .05);
	--myr-shadow-2: 0 2px 4px rgba(10, 34, 38, .07), 0 12px 28px -8px rgba(10, 34, 38, .18);

	--myr-r-s: 6px;
	--myr-r-m: 12px;
}

/* ── Ground ───────────────────────────────────────────────────────────── */
/* Woodmart's own root variables are set inline in <head> with normal
 * specificity; !important guarantees this stylesheet wins regardless of
 * enqueue order relative to that inline block. */
:root {
	--wd-primary-color: var(--myr-deep) !important;
	--btn-default-bgcolor: var(--myr-surface) !important;
	--btn-default-bgcolor-hover: var(--myr-sand-2) !important;
	--btn-default-color: var(--myr-deep) !important;
	--btn-default-color-hover: var(--myr-deep) !important;
	--btn-accented-bgcolor: var(--myr-brass-btn) !important;
	--btn-accented-bgcolor-hover: var(--myr-brass-ink) !important;
	--btn-accented-color: #fff !important;
	--btn-accented-color-hover: #fff !important;
}

body {
	background-color: var(--myr-sand);
	color: var(--myr-ink);
}

/* The pale blue-grey ground lives on this wrapper (Woodmart's page-background
 * option), not on <body> — override it directly. */
body .wd-page-wrapper.website-wrapper,
body .wd-page-content.main-page-wrapper {
	background-color: var(--myr-sand) !important;
}

/* ── Focus visibility (a11y) ──────────────────────────────────────────── */
/* Woodmart already ships a site-wide :focus-visible rule (style-rtl.min.css)
 * driven by these custom properties, applied with !important. Retinting the
 * variables — rather than writing a competing selector — reaches every
 * focusable element the theme already covers, and actually wins the
 * cascade against its own !important declaration. */
:root {
	--wd-otl-color: var(--myr-aqua) !important;
	--wd-otl-color-scheme: var(--myr-aqua) !important;
	--wd-otl-width: 3px !important;
	--wd-otl-style: solid !important;
}

/* ── Buttons: brass CTA everywhere Woodmart marks "accented" ─────────── */
.button,
.add_to_cart_button,
.single_add_to_cart_button,
a.added_to_cart,
input[type="submit"],
.wd-add-btn a,
.checkout-button,
.wc-proceed-to-checkout a.checkout-button,
.woocommerce-form-login button,
.woocommerce-form-register button {
	background-color: var(--myr-brass-btn) !important;
	border-color: var(--myr-brass-btn) !important;
	color: #fff !important;
	box-shadow: 0 1px 0 rgba(0, 0, 0, .12), inset 0 1px 0 rgba(255, 255, 255, .18);
	transition: background-color .15s ease, transform .12s ease;
}

.button:hover,
.add_to_cart_button:hover,
.single_add_to_cart_button:hover,
input[type="submit"]:hover,
.wd-add-btn a:hover,
.checkout-button:hover {
	background-color: var(--myr-brass-ink) !important;
	border-color: var(--myr-brass-ink) !important;
}

.button:active,
.add_to_cart_button:active,
.single_add_to_cart_button:active,
.wd-add-btn a:active {
	transform: translateY(1px);
}

/* Disabled state (e.g. "Update cart" before the quantity changes) must read
 * as unavailable, not as a muted brass — otherwise it looks like a second,
 * confusing call to action. */
.button:disabled,
.button.disabled,
.button[disabled] {
	background-color: var(--myr-sand-2) !important;
	border-color: var(--myr-line) !important;
	color: var(--myr-ink-3) !important;
	box-shadow: none;
	cursor: not-allowed;
}

/* Secondary / ghost buttons (e.g. "reset variations", quantity +/-) stay
 * on the deep-teal ink so brass is reserved for the one primary action. */
.reset_variations,
.wd-scroll-up,
.quantity .plus,
.quantity .minus {
	color: var(--myr-deep-2);
}

/* ── Product cards: real elevation, RTL-safe hover lift ─────────────── */
.wd-product-wrapper {
	background-color: var(--myr-surface);
	border-radius: var(--myr-r-m);
	box-shadow: var(--myr-shadow-1);
	overflow: hidden;
	transition: transform .18s ease, box-shadow .18s ease;
}

.wd-product-wrapper:hover,
.wd-product:hover .wd-product-wrapper {
	transform: translateY(-3px);
	box-shadow: var(--myr-shadow-2);
}

.wd-product-thumb {
	border-radius: var(--myr-r-m) var(--myr-r-m) 0 0;
	overflow: hidden;
	background: linear-gradient(135deg, var(--myr-sand-2), var(--myr-surface));
}

.product-element-bottom {
	padding-inline: 4px;
}

/* ── Sale badges: coral, not red-on-green ────────────────────────────── */
body .product-labels .product-label.onsale,
body span.onsale {
	background-color: var(--myr-coral);
	color: #fff;
	border-radius: var(--myr-r-s);
	box-shadow: var(--myr-shadow-1);
}

/* ── Prices: tabular numerals, sale price prominent, muted strike ──── */
.price,
.woocommerce-Price-amount {
	font-variant-numeric: tabular-nums;
}

.price {
	color: var(--myr-ink);
	font-weight: 700;
}

.price del {
	color: var(--myr-ink-3);
	font-weight: 400;
	opacity: 1;
	/* logical margin: space goes on the "start" side, correct in RTL */
	margin-inline-start: .5em;
}

.price ins {
	color: var(--myr-ink);
	font-weight: 700;
	text-decoration: none;
}

/* ── Section headings: stronger hierarchy than the current small type ── */
.woodmart-title-container.title,
.wd-el-title.title {
	color: var(--myr-deep);
	font-weight: 700;
	position: relative;
	padding-bottom: .3em;
}

.woodmart-title-container.title::after {
	content: "";
	position: absolute;
	inset-block-end: 0;
	inset-inline-start: 0;
	width: 48px;
	height: 3px;
	border-radius: 2px;
	background: var(--myr-brass);
}

.wd-entities-title {
	color: var(--myr-ink);
}

.wd-entities-title a {
	color: inherit;
}

/* ── Cart table: align quantities/prices, keep RTL column order intact ── */
.woocommerce-cart-form .product-price,
.woocommerce-cart-form .product-subtotal,
.woocommerce-cart-form .product-quantity {
	font-variant-numeric: tabular-nums;
}

.cart-collaterals .cart_totals .amount {
	font-variant-numeric: tabular-nums;
	color: var(--myr-ink);
}

/* ── Reduced motion ───────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
	.wd-product-wrapper,
	.button,
	.add_to_cart_button,
	.single_add_to_cart_button {
		transition: none !important;
	}

	.wd-product-wrapper:hover,
	.wd-product:hover .wd-product-wrapper {
		transform: none;
	}
}

/* ==========================================================================
   PRODUCT CARD — uniform geometry
   --------------------------------------------------------------------------
   Observed on staging with real photography: cards in the same row ended at
   different heights, so the "add to cart" buttons sat on a ragged line and the
   grid read as broken. Two independent causes, both fixed here:

     1. Titles run 1-3 lines. Nothing reserved space for the longest, so every
        card below the title shifted by a different amount.
     2. Product photographs have wildly different aspect ratios — square packs,
        long rods, wide lure sets. The image box took each image's own shape.

   The fix is a fixed-ratio image box plus a two-line title reservation, with
   the CTA pushed to the bottom of whatever space remains. Cards in a row then
   share one height and one baseline for every element.

   `contain`, not `cover`: fishing tackle is long and thin, and `cover` would
   crop the ends off rods and jigs — the part that identifies the product.
   ========================================================================== */

/* Stretch each grid cell so its card can fill the row's height. */
.wd-products .wd-product,
.wd-products-element .wd-product,
ul.products > li.product {
	display: flex;
}

.wd-product > .wd-product-wrapper,
.wd-product > .product-wrapper {
	display: flex;
	flex-direction: column;
	width: 100%;
}

.wd-product .wd-product-card-bg {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
}

/* One shape for every photograph, whatever its native ratio. */
.wd-product .wd-product-thumb,
.wd-product .product-element-top {
	aspect-ratio: 1 / 1;
	overflow: hidden;
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--myr-surface);
}

.wd-product .wd-product-thumb img,
.wd-product .product-element-top img {
	width: 100%;
	height: 100%;
	object-fit: contain;
	object-position: center;
}

/* The lower half becomes the flexible part, so the CTA can be pinned. */
.wd-product .product-element-bottom {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
}

/* Reserve two lines for the title and clamp to them. Arabic product names run
   long; without this the tallest name in a row set the height for that card
   alone. */
.wd-product .wd-entities-title {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: calc(2 * 1.4em);
	line-height: 1.4;
}

/* Whatever space is left, the button takes the bottom of it. */
.wd-product .wd-add-btn,
.wd-product .wd-add-btn-replace {
	margin-top: auto;
}

/* --------------------------------------------------------------------------
   Top bar — the stock Woodmart blue (#3b5bdb) was left untouched by the first
   pass and fought everything below it: a saturated cool blue directly above a
   warm sand ground, with brass CTAs. Re-grounded in the palette's own deep
   teal so the eye travels down the page instead of stopping at the band.
   -------------------------------------------------------------------------- */
.whb-top-bar .whb-color-dark,
.whb-top-bar-inner,
.whb-top-bar {
	background-color: var(--myr-deep) !important;
}

/* ==========================================================================
   HOMEPAGE DENSITY
   --------------------------------------------------------------------------
   The homepage is 24 stacked sections and runs past 16,000px on a phone —
   roughly sixteen screens of scrolling. Twelve of those sections are
   subcategory carousels that duplicate category pages which already exist.

   Nothing is removed here. The goal is to make the same content short enough
   to scan, so that deciding what to remove becomes optional rather than
   urgent.
   ========================================================================== */

/* --- 1. Masonry off ------------------------------------------------------
   Five homepage grids use Woodmart's masonry, which is isotope: it sets
   `position:absolute` plus left/top on every item and an explicit pixel
   height on the container, all inline. CSS alone loses to that, so the
   positioning is neutralised as well as the layout replaced.

   This is not only cosmetic. On a phone, isotope's RTL coordinates push the
   start-side column PARTLY OFF SCREEN — those cards are clipped by the
   viewport edge and cannot be read or tapped. Masonry also deliberately
   staggers card heights, which reads as the ragged grid we just finished
   straightening everywhere else.

   `position: static` does the real work: left/top are ignored on a static
   element, so isotope's coordinates stop applying without having to
   out-specify each one.

   `padding: 0` matters as much. Woodmart's `wd-col` carries horizontal
   padding that its own flex layout compensates for. Left in place inside a
   grid track it shrinks each card to roughly 130px on a 390px screen, with
   titles truncated to two words and the button label collapsed to an
   ellipsis. Spacing comes from `gap` instead. */
.wd-products.grid-masonry {
	display: grid !important;
	grid-template-columns: repeat(var(--wd-col-lg, 4), minmax(0, 1fr));
	gap: var(--wd-gap-lg, 30px);
	height: auto !important;
}

.wd-products.grid-masonry > .wd-product {
	position: static !important;
	transform: none !important;
	inset: auto !important;
	width: auto !important;
	max-width: none !important;
	margin: 0 !important;
	padding: 0 !important;
}

@media (max-width: 1024px) {
	.wd-products.grid-masonry { grid-template-columns: repeat(var(--wd-col-md, 3), minmax(0, 1fr)); }
}
@media (max-width: 768.98px) {
	.wd-products.grid-masonry {
		grid-template-columns: repeat(var(--wd-col-sm, 2), minmax(0, 1fr));
		gap: var(--wd-gap-sm, 10px);
	}
}

/* --- 2. Mobile carousels show 2.1 cards ---------------------------------
   At exactly two cards a rail is indistinguishable from a short two-column
   grid, so nobody swipes and the rest of the row is never seen. Cutting the
   third card at about a tenth of the viewport makes the overflow visible
   without shrinking the two real cards below comfortable tapping size.

   Woodmart already drives carousel item width from --wd-col-sm, so this is a
   single variable rather than a layout rewrite. */
@media (max-width: 768.98px) {
	.wd-carousel-wrap:has(.wd-product),
	.wd-carousel:has(.wd-product) {
		--wd-col-sm: 2.1;
	}
}

/* --- 3. A single product must not span a four-column row -----------------
   Three sections contain exactly one product but keep the multi-column
   layout, leaving roughly 70-75% of the row empty. Constrain the track
   instead of stretching the card. */
.wd-products:has(> .wd-product:only-child) {
	grid-template-columns: minmax(0, 300px) !important;
}

/* --- 4. Vertical rhythm --------------------------------------------------
   Section padding was tuned for a page with a handful of sections, not
   twenty-four. Tightened, and tightened further on phones where the cost of
   whitespace is paid in scrolling. */
.wd-products-element,
.wd-products-element + .wd-products-element { margin-bottom: 24px; }

@media (max-width: 768.98px) {
	.vc_row .wpb_column > .vc_column-inner { padding-top: 6px; padding-bottom: 6px; }
	.wd-products-element { margin-bottom: 14px; }
}

/* ==========================================================================
   MOBILE: 2.15 CARDS PER VIEW, AND SMALLER TITLES
   ========================================================================== */

/* --- 1. The peek actually applying this time -----------------------------
   Woodmart prints the column count as an INLINE style on each carousel:
       style="--wd-col-lg:3;--wd-col-md:3;--wd-col-sm:2"
   An inline custom property beats any stylesheet rule regardless of
   specificity, so the earlier override was silently ignored and the rails
   still showed exactly 2. `!important` is the only thing that wins here — it
   is load-bearing, not decoration, so do not "tidy" it away.

   Item width comes from the theme's own formula,
       flex: 0 0 calc(100% / var(--wd-col))
   which accepts a fraction, so 2.15 yields 46.5% and the third card is cut at
   roughly a seventh of the viewport: enough to read as "there is more here"
   without stealing width from the two real cards. */
@media (max-width: 768.98px) {
	.wd-carousel:has(.wd-product),
	.wd-carousel-wrap:has(.wd-product),
	.wd-products-element .wd-carousel {
		--wd-col-sm: 2.15 !important;
		--wd-col:    2.15 !important;
	}
}

/* --- 2. Arrows must not sit on the product ------------------------------
   The prev/next buttons are large filled circles overlapping the first and
   last card, covering part of the photograph. With a visible peek the swipe
   is already discoverable, so on touch widths they step back to a quiet
   overlay rather than competing with the product. */
@media (max-width: 768.98px) {
	.wd-carousel-arrows .wd-btn-arrow,
	.wd-btn-arrow {
		width: 30px;
		height: 30px;
		background: rgba(15, 59, 66, .55);
		color: #fff;
		box-shadow: none;
		opacity: .75;
	}
	.wd-btn-arrow:hover { background: var(--myr-deep); opacity: 1; }
}

/* --- 3. Product titles are too large for a two-up grid -------------------
   At 390px each card is about 175px wide. The title was inheriting a size
   tuned for a four-column desktop grid, so long Arabic names ate the card and
   pushed the price and button down. Reduced and tightened; the two-line clamp
   set earlier still caps the worst case. */
.wd-product .wd-entities-title {
	font-size: 13.5px;
	line-height: 1.35;
	min-height: calc(2 * 1.35em);
	font-weight: 500;
}

@media (max-width: 768.98px) {
	.wd-product .wd-entities-title {
		font-size: 12.5px;
		line-height: 1.3;
		min-height: calc(2 * 1.3em);
	}
	/* Keep the price prominent — it is the thing being scanned. */
	.wd-product .wrap-price,
	.wd-product .price { font-size: 13px; }
}

/* ==========================================================================
   MOBILE: RECLAIM THE WASTED WIDTH, DROP THE ARROWS
   --------------------------------------------------------------------------
   On a 390px screen the rails were spending roughly 60px — about 15% of the
   viewport — on container padding, inter-card gutters and two arrow buttons
   that sat on top of the products. All of it came from defaults designed for a
   1440px grid.
   ========================================================================== */
@media (max-width: 768.98px) {

	/* Arrows go. With a visible 2.15 peek the swipe is self-evident, and on a
	   touch screen nobody taps a 30px circle to page a carousel — they swipe.
	   They were also overlapping the first and last card's photograph. */
	.wd-carousel-arrows,
	.wd-btn-arrow,
	.wd-nav-arrows {
		display: none !important;
	}

	/* Gutters: 30px between cards is a desktop measure. 8px is enough to
	   separate two cards that already have borders and shadows. */
	.wd-carousel,
	.wd-carousel-wrap,
	.wd-products,
	.wd-products.grid-masonry {
		--wd-gap-sm: 8px !important;
		--wd-gap:    8px !important;
	}
	.wd-products.grid-masonry { gap: 8px !important; }

	/* Side padding: the theme reserves room for arrows that no longer exist. */
	.wd-carousel-container,
	.wd-products-element,
	.container,
	.wd-rs-inner-cont {
		padding-inline-start: 10px !important;
		padding-inline-end: 10px !important;
	}

	/* Card internals were also padded for a wide card. */
	.wd-product .product-element-bottom { padding-inline: 8px; }

	/* The CTA must never truncate. Smaller label, no ellipsis, and it may wrap
	   to a second line rather than losing words — a button reading
	   "إضافة إلى الـ…" tells a shopper nothing. */
	.wd-product .wd-add-btn > a,
	.wd-product .button {
		font-size: 12px;
		padding-inline: 6px;
		white-space: normal;
		text-overflow: clip;
		overflow: visible;
		line-height: 1.3;
		min-height: 34px;
		display: flex;
		align-items: center;
		justify-content: center;
	}
}

/* --- The CTA label must never be clipped --------------------------------
   The theme clips it in two places at once: `.wd-add-btn-replace > a` sets
   `overflow: hidden`, and the hover variants add `white-space: nowrap`. With a
   2.15-card rail the card is ~135px and the label lost its last word, leaving
   "أضف للس…" — a button that names no action. Both the wrapper and the anchor
   have to be released, which is why this is `!important` on three properties
   rather than one tidy rule. */
@media (max-width: 768.98px) {
	.wd-product .wd-add-btn,
	.wd-product .wd-add-btn-replace,
	.wd-product .wd-add-btn > a,
	.wd-product .wd-add-btn-replace > a,
	.wd-product .wd-add-btn-replace > a span {
		overflow: visible !important;
		white-space: normal !important;
		text-overflow: clip !important;
		max-width: none !important;
	}

	/* Squeeze the last of the dead margin. The theme reserved room for arrows
	   that are now hidden. */
	.wd-carousel-container,
	.wd-products-element,
	.container,
	.wd-rs-inner-cont {
		padding-inline-start: 6px !important;
		padding-inline-end: 6px !important;
	}
}

/* ==========================================================================
   MOBILE, FINAL PASS: 2.2 CARDS, MINIMAL CHROME, EVERY SECTION A RAIL
   ========================================================================== */
@media (max-width: 768.98px) {

	/* 2.2 rather than 2.15 — a slightly larger sliver of the third card, which
	   reads more clearly as "scrollable" at a glance. Still !important: the
	   column count is printed inline on the element by the theme. */
	.wd-carousel:has(.wd-product),
	.wd-carousel-wrap:has(.wd-product),
	.wd-products-element .wd-carousel {
		--wd-col-sm: 2.2 !important;
		--wd-col:    2.2 !important;
	}

	/* Page edge: 4px. The card's own border and shadow already separate it
	   from the page, so anything more is spent for nothing on a 390px screen. */
	.wd-carousel-container,
	.wd-products-element,
	.container,
	.wd-rs-inner-cont,
	.vc_row .wpb_column > .vc_column-inner {
		padding-inline-start: 4px !important;
		padding-inline-end: 4px !important;
	}

	/* Between cards: 6px. */
	.wd-carousel,
	.wd-carousel-wrap,
	.wd-products,
	.wd-products.grid-masonry {
		--wd-gap-sm: 6px !important;
		--wd-gap:    6px !important;
	}
	.wd-products.grid-masonry { gap: 6px !important; }

	/* Inside the card: the theme pads for a 300px desktop card. */
	.wd-product .product-element-bottom { padding: 6px 7px 8px !important; }
	.wd-product .wd-entities-title      { margin-bottom: 3px; }
	.wd-product .wrap-price             { margin-bottom: 5px; }

	/* --- Every section becomes a swipeable rail -------------------------
	   The static grids (العروض, باكجات, قسم الرحلات, قسم الشاطئ, متفرقات) were
	   the only sections still stacking rows vertically, which is what made the
	   homepage run past 16,000px. As rails they match the twelve carousels and
	   each section costs one row instead of three.

	   Done in CSS rather than by switching the shortcode to layout="carousel",
	   because that is a content edit to the page and would need rebuilding in
	   WPBakery for each of the five. This achieves the same result and is
	   reversible by deleting a rule. */
	.wd-products.grid-masonry {
		display: grid !important;
		grid-auto-flow: column !important;
		grid-template-columns: none !important;
		grid-auto-columns: calc((100% - 6px) / 2.2) !important;
		overflow-x: auto;
		overscroll-behavior-x: contain;
		scroll-snap-type: x proximity;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		padding-bottom: 2px;
	}
	.wd-products.grid-masonry::-webkit-scrollbar { display: none; }
	.wd-products.grid-masonry > .wd-product { scroll-snap-align: start; }
}

/* --- "Show more" link, appended to each section ------------------------- */
/* The WPBakery column this sits in does NOT inherit the page's RTL direction,
   so logical alignment resolved to the left edge and the link lost its first
   letter behind the 4px page padding. Direction is therefore stated explicitly
   rather than inherited — `text-align` on a block, not flex logical keywords,
   because that is unambiguous regardless of the parent's direction. */
.myr-more {
	direction: rtl;
	display: block;
	text-align: right;
	margin-block: 4px 20px;
	padding-inline: 12px;
}
.myr-more a {
	font-size: 13px;
	font-weight: 600;
	color: var(--myr-deep);
	border-bottom: 2px solid var(--myr-brass);
	padding-bottom: 2px;
	text-decoration: none;
}
.myr-more a:hover { color: var(--myr-btn); }

/* --- Product name: smaller, quieter, more elegant -----------------------
   The title was competing with the price for attention when it should be
   introducing it. Three changes, none of them just "make it smaller":

     weight 400, not 500 — Arabic at small sizes gains nothing from semibold
       and loses the openness of its counters;
     a slightly muted ink rather than full black, so the price (which stays
       full-strength and bold) becomes the strongest thing in the card;
     more line-height, not less — tight leading is what makes dense Arabic
       feel cramped, and two short lines with air read as considered.

   No letter-spacing anywhere: it severs the joins between Arabic letters. */
.wd-product .wd-entities-title {
	font-size: 12.5px;
	font-weight: 400;
	line-height: 1.55;
	min-height: calc(2 * 1.55em);
	color: var(--myr-ink-2);
}

.wd-product .wd-entities-title a { color: inherit; }

@media (max-width: 768.98px) {
	.wd-product .wd-entities-title {
		font-size: 11.5px;
		line-height: 1.5;
		min-height: calc(2 * 1.5em);
	}
	/* The price now carries the card. */
	.wd-product .wrap-price,
	.wd-product .price {
		font-size: 13px;
		font-weight: 700;
		color: var(--myr-ink);
	}
}

/* Section headings need a little more room than the cards do. The 4px page
   padding is right for a rail that should bleed to the edge, but it leaves a
   title sitting hard against the screen. */
@media (max-width: 768.98px) {
	.wd-title-wrapp,
	.woodmart-title-container,
	.title-wrapper {
		padding-inline: 12px !important;
	}
}

/* ==========================================================================
   TYPOGRAPHY, ACTUALLY APPLIED
   --------------------------------------------------------------------------
   Measured with getComputedStyle on the live page rather than judged by eye:

       body family      'Readex Pro'          <- applied
       --wd-title-font  Arial            <- NOT applied
       title family     Arial            <- product names were never 'Readex Pro'

   Woodmart prints its font variables in an INLINE <style> in the head, which
   comes after this stylesheet, so a plain declaration loses on source order no
   matter how specific it is. `!important` is required, and the product title
   is also set directly because the theme applies --wd-title-font to it through
   a more specific selector.

   The lesson recorded: a screenshot showed "different looking" letterforms and
   I read that as success. Body text had changed; the titles had not. Computed
   style is the evidence, not the render.
   ========================================================================== */
:root,
html body {
	--wd-title-font:       'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif !important;
	--wd-text-font:        'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif !important;
	--wd-header-el-font:   'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif !important;
	--wd-alternative-font: 'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif !important;
	--wd-entities-font:    'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif !important;
	--wd-widget-title-font:'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif !important;
}

body,
h1, h2, h3, h4, h5, h6,
.wd-entities-title,
.wd-product .wd-entities-title,
.wd-product .wd-entities-title a,
.price, .amount, .button, input, select, textarea {
	font-family: 'Readex Pro', system-ui, 'Segoe UI', Tahoma, sans-serif !important;
}

/* Size likewise needed !important: the theme sets the card title as a
   percentage of a larger base (14px x 90% = the 12.6px measured), through a
   selector that outranked the earlier rule. */
.wd-product .wd-entities-title {
	font-size: 11.5px !important;
	font-weight: 400 !important;
	line-height: 1.55 !important;
}

@media (max-width: 768.98px) {
	.wd-product .wd-entities-title {
		/* 10.5px. Readex Pro carries a larger apparent size than Tajawal at
		   the same value, so this reads close to the previous setting while
		   giving the card back a line of room. It is near the floor for
		   Arabic — below about 10px the letter joins begin to fill in on
		   lower-density screens — so it is a deliberate stop. */
		font-size: 11.5px !important;
		line-height: 1.5 !important;
	}
}

/* ==========================================================================
   PALETTE — "DEEP WATER SPORT"
   --------------------------------------------------------------------------
   Replaces the sand-and-brass scheme, which the owner found cosy rather than
   elegant. The brief: sport, depth, gradients, easy on the eye, reason to stay.

   The logic: the shop sells equipment for going out on the Gulf, so the page
   goes DOWN through water — near-white at the surface where the products are,
   deepening to near-black teal in the bars and footer. Depth is the organising
   idea, not decoration, which is why gradients run vertically and shadows get
   softer and wider as elements sit "higher".

   Warmth is now carried by ONE thing: the action colour. A cool page with a
   single warm CTA is what makes the button unmissable — the opposite of the
   old scheme, where a warm ground and warm buttons competed.

   EVERY VALUE BELOW WAS MEASURED, and two obvious choices were rejected:

     - A bright-to-dark orange gradient (#FF7A18 -> ...) is unreadable. For
       white text the worst case is the gradient's LIGHTEST stop, and #FF7A18
       gives 2.61:1. The CTA gradient therefore lives entirely in the darker
       half: 5.18:1 at its lightest point.
     - Vivid aqua as link text fails at 2.31:1 on this ground. It survives as a
       decorative accent on dark surfaces only; text links use a deeper tone at
       4.92:1.
   ========================================================================== */
:root {
	/* surfaces, coolest at the top */
	--myr-bg:        #F2F6F7;   /* page ground — cool, not sand */
	--myr-bg-2:      #E7EFF1;
	--myr-surface:   #FFFFFF;   /* cards: product photos need true white */

	/* text */
	--myr-ink:       #0A1A21;   /* 16.32:1 on ground */
	--myr-ink-2:     #33505A;   /*  7.92:1 */
	--myr-ink-3:     #4E6772;   /*  5.50:1 — was 4.42 and failed AA */
	--myr-line:      #DCE6E9;

	/* the descent into water */
	--myr-deep-1:    #052C36;   /* white 14.79:1 */
	--myr-deep-2:    #0A4A57;   /* white  9.86:1 */
	--myr-deep-3:    #0E6E76;   /* white  5.98:1 */

	/* action — azure. The owner found the orange too hot.
	   Azure is the unusual case of a genuinely BRIGHT colour that still clears
	   AA with white text at its light end (5.17:1), so the button can be vivid
	   instead of muted down to be legible — which is exactly what a call to
	   action wants. Emerald #047857 -> #065F46 is the calmer alternative and is
	   a two-line change here. */
	--myr-cta-1:     #2563EB;   /* white 5.17:1 */
	--myr-cta-2:     #1E40AF;   /* white 8.72:1 */
	--myr-cta-hover: #1B3BA8;

	/* accents */
	--myr-link:      #0E7490;   /* 4.92:1 — text-safe */
	--myr-glow:      #00D4E6;   /* decorative, on dark surfaces only */
	--myr-sale:      #E11D48;   /* white 4.70:1 */

	/* depth: shadows widen and soften as elements rise */
	--myr-sh-1: 0 1px 2px rgba(5,44,54,.06), 0 1px 3px rgba(5,44,54,.05);
	--myr-sh-2: 0 2px 6px rgba(5,44,54,.08), 0 8px 20px rgba(5,44,54,.07);
	--myr-sh-3: 0 6px 14px rgba(5,44,54,.12), 0 18px 40px rgba(5,44,54,.10);

	/* legacy aliases so earlier rules keep resolving */
	--myr-sand:    var(--myr-bg);
	--myr-sand-2:  var(--myr-bg-2);
	--myr-deep:    var(--myr-deep-1);
	--myr-deep-2:  var(--myr-deep-2);
	--myr-aqua:    var(--myr-link);
	--myr-brass:   var(--myr-cta-1);
	--myr-btn:       var(--myr-cta-1);
	--myr-btn-ink:   var(--myr-cta-2);
	/* `--myr-brass-btn` and `--myr-brass-ink` are still referenced by earlier
	   rules whose selectors are MORE specific than anything written later — the
	   cart's checkout button was painted brass by
	   `.wc-proceed-to-checkout a.checkout-button` at (0,2,1), which no later
	   rule at (0,2,0) could beat even with !important. Repointing the token
	   fixes every one of those rules at once instead of chasing them selector
	   by selector. */
	--myr-brass-btn: var(--myr-cta-1);
	--myr-brass-ink: var(--myr-cta-2);
	--myr-coral:   var(--myr-sale);
}

/* --- ground ------------------------------------------------------------- */
body,
.wd-page-content,
.main-page-wrapper {
	background: var(--myr-bg) !important;
}

/* --- bars and footer: the deep end, with a real vertical gradient ------- */
.whb-top-bar,
.whb-top-bar-inner,
.whb-top-bar .whb-color-dark {
	background-image: linear-gradient(180deg, var(--myr-deep-1) 0%, var(--myr-deep-2) 100%) !important;
	background-color: var(--myr-deep-1) !important;
}

.wd-footer,
footer.footer-container {
	background-image: linear-gradient(180deg, var(--myr-deep-2) 0%, var(--myr-deep-1) 100%) !important;
	background-color: var(--myr-deep-1) !important;
}

/* --- CTA: gradient + depth, and it presses when tapped ------------------ */
.wd-product .wd-add-btn > a,
.wd-product .button,
.single_add_to_cart_button,
.checkout-button,
button.button,
.wd-buy-now-btn > a {
	background-image: linear-gradient(180deg, var(--myr-cta-1) 0%, var(--myr-cta-2) 100%) !important;
	background-color: var(--myr-cta-1) !important;
	border: 0 !important;
	color: #fff !important;
	box-shadow: var(--myr-sh-1), inset 0 1px 0 rgba(255,255,255,.16) !important;
	transition: transform .12s ease, box-shadow .2s ease, filter .2s ease;
}

.wd-product .wd-add-btn > a:hover,
.wd-product .button:hover,
.single_add_to_cart_button:hover,
.checkout-button:hover,
button.button:hover {
	filter: saturate(1.08) brightness(1.04);
	box-shadow: var(--myr-sh-2), inset 0 1px 0 rgba(255,255,255,.2) !important;
}

.wd-product .wd-add-btn > a:active,
.wd-product .button:active,
button.button:active {
	transform: translateY(1px);
	box-shadow: var(--myr-sh-1) !important;
}

/* --- cards lift, so the eye reads them as objects ----------------------- */
.wd-product .wd-product-wrapper,
.wd-product .product-wrapper {
	background: var(--myr-surface);
	border-radius: 12px;
	box-shadow: var(--myr-sh-1);
	transition: transform .18s ease, box-shadow .18s ease;
}

@media (hover: hover) {
	.wd-product:hover .wd-product-wrapper,
	.wd-product:hover .product-wrapper {
		transform: translateY(-3px);
		box-shadow: var(--myr-sh-3);
	}
}

/* --- sale badge --------------------------------------------------------- */
.wd-product .product-labels .onsale,
.wd-product .labels-rectangular .onsale,
.onsale {
	background-image: linear-gradient(180deg, #F43F5E 0%, var(--myr-sale) 100%) !important;
	color: #fff !important;
	border: 0 !important;
	box-shadow: var(--myr-sh-1);
}

/* --- section headings: a thin gradient rule instead of a flat bar ------- */
.wd-title-wrapp .liner-continer:after,
.woodmart-title-container .title:after {
	background-image: linear-gradient(90deg, var(--myr-cta-1), var(--myr-glow)) !important;
}

/* --- links and focus ---------------------------------------------------- */
a { color: var(--myr-link); }

:root {
	--wd-otl-color: var(--myr-link);
	--wd-otl-width: 3px;
	--wd-otl-style: solid;
}

/* ==========================================================================
   PRODUCT PAGE — depth, and variations you can actually tap
   --------------------------------------------------------------------------
   Variations are rendered by a separate plugin (woovr), not the theme, as a
   bare vertical list of radio buttons with the dot on the far side of the row.
   On a phone that means a ~14px target, a long travel between label and
   control, and no visual feedback that a size has been chosen — on the one
   screen where the buying decision happens.

   They become chips: the whole row is the target, selection is shown by fill
   and outline rather than a dot, and the native radio stays in the DOM and
   focusable so keyboard and screen-reader behaviour is unchanged. `:has()` is
   used to style from the checked input, so nothing depends on the plugin's own
   class names, which a plugin update could rename.
   ========================================================================== */

.woovr-variations {
	display: flex !important;
	flex-wrap: wrap;
	gap: 8px;
	margin: 4px 0 14px;
}

.woovr-variation {
	display: flex !important;
	align-items: center;
	gap: 6px;
	margin: 0 !important;
	padding: 9px 14px;
	min-height: 42px;                    /* comfortable tap target */
	border: 1px solid var(--myr-line);
	border-radius: 10px;
	background: var(--myr-surface);
	box-shadow: var(--myr-sh-1);
	cursor: pointer;
	transition: border-color .15s ease, box-shadow .15s ease, transform .12s ease;
}

.woovr-variation:hover { border-color: var(--myr-cta-1); }
.woovr-variation:active { transform: translateY(1px); }

/* Selection state read from the input itself, not a plugin class. */
.woovr-variation:has(input:checked) {
	border-color: var(--myr-cta-1);
	box-shadow: inset 0 0 0 1px var(--myr-cta-1), var(--myr-sh-2);
	background: linear-gradient(180deg, rgba(37,99,235,.07), rgba(37,99,235,.03));
}

/* The radio is hidden visually but NOT removed — it still receives focus and
   is still announced. Removing it would break keyboard use entirely. */
.woovr-variation .woovr-variation-selector input[type="radio"] {
	position: absolute;
	opacity: 0;
	width: 1px; height: 1px;
	margin: 0;
}

.woovr-variation:has(input:focus-visible) {
	outline: 3px solid var(--myr-link);
	outline-offset: 2px;
}

.woovr-variation .woovr-variation-name {
	font-size: 13px;
	font-weight: 500;
	color: var(--myr-ink);
}

.woovr-variation:has(input:checked) .woovr-variation-name { color: var(--myr-cta-2); }

/* --- gallery and summary get the same elevation language ---------------- */
.single-product-page .woocommerce-product-gallery,
.single-product-page .wd-product-gallery {
	border-radius: 14px;
	overflow: hidden;
	box-shadow: var(--myr-sh-2);
	background: var(--myr-surface);
}

.single-product-page .summary-inner,
.single-product-page .product-summary-shadow .summary-inner {
	background: var(--myr-surface);
	border-radius: 14px;
	box-shadow: var(--myr-sh-2);
}

/* The price is the number being decided on — give it the weight. */
.single-product-page .summary .price,
.single-product-page .summary .price .amount {
	font-size: 22px !important;
	font-weight: 700 !important;
	color: var(--myr-ink) !important;
}

/* Full-width primary action on a phone: the most important control on the
   most important page should not share a row with a quantity stepper. */
@media (max-width: 768.98px) {
	.single-product-page .cart .single_add_to_cart_button {
		flex: 1 1 100%;
		width: 100%;
		min-height: 48px;
		font-size: 15px;
		order: 2;
		margin-top: 10px;
	}
	.single-product-page .cart .quantity { order: 1; }
	.single-product-page .cart { flex-wrap: wrap; }
}

/* --- Button states, made honest ----------------------------------------
   The product-page CTA was rendering dark grey text (#4E6772) on a
   full-strength azure gradient. Measured, not guessed:

       classes  single_add_to_cart_button button alt disabled
                wc-variation-selection-needed
       color    rgb(78,103,114)

   It is genuinely disabled — WooCommerce blocks add-to-cart until a variation
   is chosen — but a saturated blue button with grey text does not look
   disabled, it looks broken, and a shopper reads it as a fault rather than as
   an instruction.

   So the two states are separated properly: enabled is unambiguously white on
   azure, disabled drops the gradient entirely and goes neutral, which reads as
   "not yet" instead of "not working". */

.wd-product .wd-add-btn > a,
.wd-product .button,
.single_add_to_cart_button,
.checkout-button,
button.button,
.wd-buy-now-btn > a,
.single_add_to_cart_button *,
.checkout-button * {
	color: #fff !important;
}

.single_add_to_cart_button.disabled,
.single_add_to_cart_button:disabled,
.button.disabled,
.button:disabled,
button.button:disabled,
.wd-product .button.disabled {
	background-image: none !important;
	background-color: var(--myr-bg-2) !important;
	color: var(--myr-ink-3) !important;
	box-shadow: inset 0 0 0 1px var(--myr-line) !important;
	cursor: not-allowed;
	filter: none !important;
	transform: none !important;
}

.single_add_to_cart_button.disabled *,
.button.disabled * {
	color: var(--myr-ink-3) !important;
}

/* ==========================================================================
   CHECKOUT — floating labels, and a form that reads like a form
   --------------------------------------------------------------------------
   The label starts INSIDE the field, looking exactly like a placeholder, and
   floats up to a small caption once the field has content or focus. The <label>
   element is real and associated throughout — it is only positioned, never
   replaced by a placeholder attribute, so a shopper can still check what they
   typed and a screen reader still announces the field.

   `:has()` drives it. An older way to do this needs the label AFTER the input
   in the DOM, which WooCommerce does not do; `:has()` removes that constraint
   entirely and needs no markup change.
   ========================================================================== */

.woocommerce-checkout .woocommerce-billing-fields__field-wrapper,
.woocommerce-checkout .woocommerce-shipping-fields__field-wrapper,
.woocommerce-checkout .woocommerce-additional-fields__field-wrapper {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}

.woocommerce-checkout .form-row {
	position: relative;
	margin: 0 !important;
	padding: 0 !important;
	float: none !important;
	width: 100%;
}

.woocommerce-checkout .form-row.form-row-first,
.woocommerce-checkout .form-row.form-row-last {
	width: calc(50% - 6px);
}

@media (max-width: 480px) {
	/* Two columns of address boxes is too dense to scan on a small phone. */
	.woocommerce-checkout .form-row.form-row-first,
	.woocommerce-checkout .form-row.form-row-last { width: 100%; }
}

/* --- the box ------------------------------------------------------------ */
.woocommerce-checkout .form-row input.input-text,
.woocommerce-checkout .form-row textarea,
.woocommerce-checkout .form-row .select2-selection,
.woocommerce-checkout .form-row select {
	width: 100%;
	min-height: 56px;                 /* room for the floated caption */
	padding: 22px 14px 6px !important;
	border: 1px solid var(--myr-line) !important;
	border-radius: 12px !important;
	background: var(--myr-surface) !important;
	color: var(--myr-ink);
	font-size: 15px;
	box-shadow: var(--myr-sh-1);
	transition: border-color .15s ease, box-shadow .15s ease;
}

.woocommerce-checkout .form-row textarea { min-height: 96px; padding-top: 26px !important; }

.woocommerce-checkout .form-row input.input-text:focus,
.woocommerce-checkout .form-row textarea:focus,
.woocommerce-checkout .form-row select:focus {
	border-color: var(--myr-cta-1) !important;
	box-shadow: 0 0 0 3px rgba(37,99,235,.15) !important;
	outline: none;
}

/* --- the label, inside then floating ------------------------------------ */
.woocommerce-checkout .form-row > label {
	position: absolute;
	top: 18px;
	inset-inline-start: 15px;
	margin: 0;
	padding: 0;
	font-size: 15px;
	font-weight: 400;
	color: var(--myr-ink-3);
	pointer-events: none;             /* clicks must reach the input */
	transform-origin: inset-inline-start top;
	transition: top .14s ease, font-size .14s ease, color .14s ease;
	max-width: calc(100% - 30px);
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

/* Filled or focused -> shrink and rise. */
.woocommerce-checkout .form-row:has(input:focus) > label,
.woocommerce-checkout .form-row:has(textarea:focus) > label,
.woocommerce-checkout .form-row:has(input:not(:placeholder-shown)) > label,
.woocommerce-checkout .form-row:has(textarea:not(:placeholder-shown)) > label {
	top: 7px;
	font-size: 11px;
	color: var(--myr-ink-2);
}

/* A <select> always holds a value, so its label is permanently floated —
   there is no empty state to sit inside. */
.woocommerce-checkout .form-row:has(select) > label,
.woocommerce-checkout .form-row:has(.select2) > label {
	top: 7px;
	font-size: 11px;
	color: var(--myr-ink-2);
}

.woocommerce-checkout .form-row:has(input:focus) > label { color: var(--myr-cta-1); }

/* The required asterisk should not shout louder than the field name. */
.woocommerce-checkout .form-row .required {
	color: var(--myr-sale);
	text-decoration: none;
	border: 0;
	font-size: .9em;
}

/* --- section headings and the order panel ------------------------------- */
.woocommerce-checkout h3,
.woocommerce-checkout .wd-checkout-title {
	font-size: 18px;
	margin: 22px 0 14px;
	color: var(--myr-ink);
}

.woocommerce-checkout #order_review,
.woocommerce-checkout .woocommerce-checkout-review-order {
	background: var(--myr-surface);
	border: 1px solid var(--myr-line);
	border-radius: 14px;
	box-shadow: var(--myr-sh-2);
	padding: 16px;
}

/* Validation belongs next to the field, not stacked at the top of the page. */
.woocommerce-checkout .woocommerce-invalid input.input-text,
.woocommerce-checkout .woocommerce-invalid select {
	border-color: var(--myr-sale) !important;
	box-shadow: 0 0 0 3px rgba(225,29,72,.12) !important;
}

/* ==========================================================================
   LEFTOVERS FROM THE OLD SCHEME — found by a full-store sweep
   --------------------------------------------------------------------------
   Four elements were still wearing the sand/brass palette or no palette at all.
   Each was located by sampling the rendered pixel colour, not by guessing which
   selectors might have been missed.
   ========================================================================== */

/* 1. The password-visibility toggle on My Account was a solid brass swatch
      (sampled rgb(154,99,35) = the old #9A6323) sitting immediately beside a
      correct azure sign-in button. */
.show-password-input,
.wd-show-pass,
.woocommerce-form-login .show-password-input,
button.show-password-input {
	background: transparent !important;
	color: var(--myr-ink-3) !important;
	box-shadow: none !important;
	border: 0 !important;
}
.show-password-input:hover,
.wd-show-pass:hover { color: var(--myr-cta-1) !important; }
.show-password-input.display-password,
.wd-show-pass.wd-active { color: var(--myr-cta-1) !important; }

/* 2. "LOAD MORE PRODUCTS" on category archives was a default browser button —
      grey outline, black bold ENGLISH uppercase on an otherwise Arabic page.
      The label itself is translated in class-shop-copy.php; this is the shape. */
.wd-products-load-more,
.wd-load-more-btn,
a.load-more-button,
.woocommerce-pagination .load-more {
	display: inline-flex !important;
	align-items: center;
	justify-content: center;
	min-height: 46px;
	padding: 12px 28px !important;
	border: 0 !important;
	border-radius: 12px !important;
	background-image: linear-gradient(180deg, var(--myr-cta-1) 0%, var(--myr-cta-2) 100%) !important;
	color: #fff !important;
	font-size: 14px;
	font-weight: 600;
	text-transform: none !important;
	box-shadow: var(--myr-sh-1);
}

/* 3. The "عرض السلة" link inside the add-to-cart success notice carried a
      brass highlight. The green notice itself is WooCommerce's semantic
      success colour and is deliberately left alone — only the brass goes.

      SCOPED TO NOTICES. The first version of this rule also listed a bare
      `.wc-forward`, which is on the main "التقدم لإتمام الطلب" button too — so
      it stripped the gradient off the single most important button in the cart
      and left it a flat colour. Every selector here is now anchored to a
      notice. */
.woocommerce-message a.button,
.woocommerce-message .button,
.woocommerce-message .wc-forward,
.woocommerce-info a.button,
.woocommerce-info .wc-forward {
	background-image: none !important;
	background-color: rgba(255,255,255,.18) !important;
	color: #fff !important;
	border: 1px solid rgba(255,255,255,.45) !important;
	border-radius: 8px !important;
	box-shadow: none !important;
	font-weight: 600;
}

/* 4. The sale ribbon sampled rgb(243,62,93) — stock Woodmart pink-red,
      matching neither the old scheme nor the new. Sale stays its own colour on
      purpose (it must not be confused with an action), but it should be OUR
      red. The earlier `.onsale` rule missed the theme's own label classes. */
.wd-product-label.onsale,
.product-label.onsale,
.wd-product-labels .onsale,
.labels-rounded .onsale,
.labels-rectangular .onsale,
span.onsale {
	background-image: linear-gradient(180deg, #F43F5E 0%, var(--myr-sale) 100%) !important;
	background-color: var(--myr-sale) !important;
	color: #fff !important;
	border: 0 !important;
}

/* --- Floating label must paint ABOVE the control ------------------------
   The two address dropdowns rendered with their value and no caption at all,
   so المحافظة and المنطقة were indistinguishable — worse than the labels-above
   layout this replaced.

   The label was positioned correctly; it was painting UNDERNEATH. The theme
   gives the select (and select2's wrapper) a position of its own, and a
   positioned element later in the DOM paints over an earlier positioned
   sibling when neither sets a z-index. An explicit z-index settles it.

   The label is pointer-events:none already, so sitting on top of the control
   cannot block the tap that opens it. */
.woocommerce-checkout .form-row > label {
	z-index: 2;
}

.woocommerce-checkout .form-row select,
.woocommerce-checkout .form-row .select2-container {
	z-index: 1;
	position: relative;
}

/* Give the select's own text room under the floated caption. */
.woocommerce-checkout .form-row select {
	padding-top: 24px !important;
	padding-bottom: 6px !important;
	height: auto !important;
	line-height: 1.3 !important;
}

/* Two required markers render on some fields — "المنطقة * *" — because the
   theme adds one and WooCommerce adds another. Pre-existing, visible in the
   owner's own screenshot of the live site. Keep the first, hide the rest. */
.woocommerce-checkout .form-row > label .required ~ .required,
.woocommerce-checkout .form-row > label abbr.required + abbr.required {
	display: none;
}

/* --- Woodmart's own button variables ------------------------------------
   The cart's "التقدم لإتمام الطلب" button measured rgb(154,99,35) — the old
   brass — long after the palette changed, because it is painted from
   `--btn-accented-bgcolor`, a Woodmart theme variable an earlier pass had set
   to #9A6323. The new palette redefined the --myr-* tokens and never touched
   this one, so the most important button in the cart quietly kept the old
   scheme.

   Repointed at the action colour so every accented control the theme paints —
   cart, checkout, forms, widgets — follows the palette instead of needing to
   be found one selector at a time. */
:root,
html body {
	--btn-accented-bgcolor:       var(--myr-cta-1) !important;
	--btn-accented-bgcolor-hover: var(--myr-cta-hover) !important;
	--btn-accented-color:         #fff !important;
	--btn-accented-color-hover:   #fff !important;
	--btn-accented-brd-radius:    10px !important;
}

/* And give it the same gradient and depth as every other primary action. */
.checkout-button,
a.checkout-button,
.wc-proceed-to-checkout .checkout-button {
	background-image: linear-gradient(180deg, var(--myr-cta-1) 0%, var(--myr-cta-2) 100%) !important;
	background-color: var(--myr-cta-1) !important;
	color: #fff !important;
	border: 0 !important;
	border-radius: 12px !important;
	min-height: 48px;
	font-weight: 600;
	box-shadow: var(--myr-sh-1), inset 0 1px 0 rgba(255,255,255,.16) !important;
}

/* ==========================================================================
   COUPON — quiet until it has something to do
   --------------------------------------------------------------------------
   The cart stacked two azure buttons: "استخدام القسيمة" and, just below,
   "التقدم لإتمام الطلب". Both looked equally like the thing to press, and the
   coupon is the one almost nobody wants — so the most prominent pair of buttons
   on the page competed for a tap that should have gone one way.

   So the coupon button starts as a quiet outline and only becomes a real,
   filled action once the field actually contains a code. Nothing to apply, no
   reason to shout.

   No JavaScript: WooCommerce already gives the input a placeholder
   ("رمز القسيمة"), so `:placeholder-shown` distinguishes empty from filled, and
   `:has()` lets the button react to its sibling's state.

   The quiet state is still a proper button — 7.9:1 text contrast, full-size
   target, visible border. Quiet is not disabled, and it must not read as
   broken the way the product page's disabled CTA did.
   ========================================================================== */

.coupon button[name="apply_coupon"],
.checkout_coupon button[type="submit"],
.wd-coupon-form button[name="apply_coupon"] {
	background-image: none !important;
	background-color: transparent !important;
	color: var(--myr-ink-2) !important;
	border: 1px solid var(--myr-line) !important;
	box-shadow: none !important;
	font-weight: 500 !important;
	transition: background-color .15s ease, color .15s ease,
	            border-color .15s ease, box-shadow .15s ease;
}

.coupon button[name="apply_coupon"]:hover,
.wd-coupon-form button[name="apply_coupon"]:hover {
	border-color: var(--myr-cta-1) !important;
	color: var(--myr-cta-1) !important;
}

/* A code has been typed — now it is worth pressing. */
.coupon:has(#coupon_code:not(:placeholder-shown)) button[name="apply_coupon"],
.wd-coupon-form:has(#coupon_code:not(:placeholder-shown)) button[name="apply_coupon"],
.checkout_coupon:has(input[name="coupon_code"]:not(:placeholder-shown)) button[type="submit"] {
	background-image: linear-gradient(180deg, var(--myr-cta-1) 0%, var(--myr-cta-2) 100%) !important;
	background-color: var(--myr-cta-1) !important;
	color: #fff !important;
	border-color: transparent !important;
	font-weight: 600 !important;
	box-shadow: var(--myr-sh-1), inset 0 1px 0 rgba(255,255,255,.16) !important;
}

/* Keep the two cart buttons visually separate in weight, not just colour. */
.cart-actions button[name="update_cart"] {
	font-weight: 500 !important;
}

/* ==========================================================================
   QUANTITY STEPPER
   --------------------------------------------------------------------------
   Was a hard-edged pill split by two full-height dividers into three boxes —
   it read as three separate controls rather than one. Rebuilt as a single soft
   capsule: no internal rules, round tap targets, and the two buttons carrying
   different weight because they are not equally consequential.

   Plus is the action, so it takes the action colour. Minus is quieter, and
   greys out entirely when there is nothing to subtract — that tells someone
   WHY the tap does nothing, instead of leaving a live-looking control that
   silently ignores them.

   Direction: the DOM is minus -> input -> plus, which in RTL puts minus on the
   right. `row-reverse` restores the requested arrangement — minus left, plus
   right — without touching the markup or the theme's own click handlers.
   ========================================================================== */

.quantity {
	display: inline-flex !important;
	flex-direction: row-reverse;
	align-items: center;
	gap: 2px;
	padding: 3px;
	border: 1px solid var(--myr-line) !important;
	border-radius: 999px !important;
	background: var(--myr-surface) !important;
	box-shadow: none !important;
	overflow: visible;
}

.quantity input.qty,
.quantity input.input-text.qty {
	width: 46px !important;
	min-height: 0 !important;
	height: auto !important;
	padding: 0 !important;
	border: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
	text-align: center;
	font-size: 15px;
	font-weight: 700;
	color: var(--myr-ink) !important;
	-moz-appearance: textfield;
	appearance: textfield;
}

/* The native spinners duplicate the buttons and break the capsule. */
.quantity input.qty::-webkit-outer-spin-button,
.quantity input.qty::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

.quantity .plus,
.quantity .minus,
.quantity input.plus,
.quantity input.minus {
	width: 36px;
	height: 36px;
	min-height: 0 !important;
	padding: 0 !important;
	border: 0 !important;
	border-radius: 50% !important;
	background: transparent !important;
	box-shadow: none !important;
	font-size: 19px;
	font-weight: 400;
	line-height: 1;
	cursor: pointer;
	transition: background-color .15s ease, color .15s ease;
}

/* Both controls carry the action colour when they are usable. An earlier pass
   made minus a quieter ink on the theory that it is the lesser action — but
   that reads as a THIRD state alongside enabled and greyed, and the difference
   between "quieter" and "disabled" is not legible at 19px. Two states only:
   usable (azure) or nothing to do (grey). */
.quantity .plus,
.quantity .minus  { color: var(--myr-cta-1) !important; }

.quantity .plus:hover,
.quantity .minus:hover { background: rgba(37,99,235,.10) !important; }

/* Nothing left to subtract. Not `disabled` — a disabled input is skipped by
   keyboard navigation, so it vanishes for anyone tabbing through the cart.
   This stays focusable and announces itself via aria-disabled. */
.quantity .minus.myr-qty-off {
	color: var(--myr-line) !important;
	pointer-events: none;
}

.quantity :is(.plus, .minus):focus-visible {
	outline: 3px solid var(--myr-link);
	outline-offset: 2px;
}

/* On the product page the stepper sits beside a full-width CTA; give it air. */
.single-product-page .quantity { padding: 4px; }
.single-product-page .quantity .plus,
.single-product-page .quantity .minus { width: 40px; height: 40px; }

/* The theme caps form controls with `--wd-form-height: 30px`, which squeezed
   the capsule to 29px tall and the buttons with it — well under a comfortable
   touch target. Raised on the stepper only, so other form controls keep the
   theme's sizing. */
.quantity {
	--wd-form-height: 44px;
	min-height: 44px;
}

.quantity input.qty,
.quantity .plus,
.quantity .minus {
	height: 38px !important;
	line-height: 38px !important;
}

.single-product-page .quantity {
	--wd-form-height: 48px;
	min-height: 48px;
}
.single-product-page .quantity input.qty,
.single-product-page .quantity .plus,
.single-product-page .quantity .minus {
	height: 42px !important;
	line-height: 42px !important;
}

/* ==========================================================================
   MOBILE CORRECTIONS — overflow, density, 2.3 cards
   ========================================================================== */
@media (max-width: 768.98px) {

	/* --- 1. THE PAGE APPEARED SHIFTED RIGHT ----------------------------
	   Measured: the rail was 387px wide starting at x=9, so its right edge
	   landed at 396 against a 375px viewport — the first card sat 21px
	   off-screen. Woodmart lays its product grids out with NEGATIVE side
	   margins to create gutters, and the grid override inherited them.

	   The document itself never scrolled sideways (scrollWidth == clientWidth),
	   which is exactly why this was easy to miss: nothing looked broken, the
	   content was simply clipped. */
	/* Scoped to PRODUCT rails. `.wd-carousel-wrap` is also the gallery's slide
	   track, which is deliberately wider than its container — constraining it
	   would break the slider. */
	.wd-products,
	.wd-products.grid-masonry,
	.wd-products-element .wd-carousel-wrap {
		margin-inline: 0 !important;
		max-width: 100% !important;
		box-sizing: border-box;
	}

	/* --- 2. 2.3 cards per view ---------------------------------------- */
	.wd-carousel:has(.wd-product),
	.wd-carousel-wrap:has(.wd-product),
	.wd-products-element .wd-carousel {
		--wd-col-sm: 2.3 !important;
		--wd-col:    2.3 !important;
	}

	.wd-products.grid-masonry {
		grid-auto-columns: calc((100% - 12px) / 2.3) !important;
	}

	/* --- 3. Product name smaller still --------------------------------
	   Readex Pro has a large x-height, so it holds up better at this size than
	   the previous face would have. This is the floor: below about 9.5px the
	   letter joins begin to fill in on lower-density screens, and the name
	   stops being scannable — which defeats the point of showing it. */
	.wd-product .wd-entities-title {
		font-size: 10px !important;
		line-height: 1.45 !important;
		min-height: calc(2 * 1.45em) !important;
	}

	/* --- 4. The dead space around the category icon strip --------------
	   The row was carrying desktop-scale padding above and below, so on a phone
	   roughly a fifth of the first screen was empty ground either side of six
	   icons — before a single product is visible. */
	.vc_row,
	.vc_row .wpb_column > .vc_column-inner {
		padding-top: 0 !important;
		padding-bottom: 0 !important;
	}

	.vc_icon_element,
	.wpb_wrapper > .vc_icon_element {
		margin-bottom: 0 !important;
	}

	.vc_icon_element .vc_icon_element-inner {
		padding-block: 2px !important;
	}

	/* Section titles were also spaced for a page with far fewer sections. */
	.wd-title-wrapp,
	.woodmart-title-container,
	.title-wrapper {
		margin-block: 6px 8px !important;
	}
}

/* --- The real source of the rightward shift ----------------------------
   Measured up the ancestor chain rather than guessed:

       .wpb-content-wrapper   W=367  (the true content width)
       .vc_row.wpb_row        W=397  margin-inline: -15px / -15px
       ...rail               W=381  right edge at 393 vs a 375px viewport

   WPBakery gives every row NEGATIVE side margins so its columns' padding can
   form gutters. That convention assumes the row sits inside a container with
   matching padding to absorb it. Inside this theme's mobile wrapper there is
   nothing to absorb it, so every row is 30px wider than its parent and the
   content is pushed off the right edge — which reads as "the whole page is
   shifted right".

   The document never scrolled sideways, so nothing looked broken; the content
   was simply clipped. That is why it survived a full-store sweep that
   explicitly checked for horizontal overflow.

   Neutralised on phones only; the desktop grid still needs the gutters. */
@media (max-width: 768.98px) {
	.vc_row.wpb_row,
	.vc_row-fluid {
		margin-inline: 0 !important;
	}
}

/* --- Rails must start flush against the start edge ----------------------
   Measured on a 390px render: the first (rightmost) card ended at x=357,
   leaving a 33px band of empty ground on the start side while the peek card
   bled off the opposite edge. Asymmetric insets are what make a page look
   pushed to one side rather than simply narrow.

   The inset came from the element wrapper's own padding, which a rail does not
   want: a scroll container should begin hard against its edge so the cut card
   at the far end is the only thing signalling more content. */
@media (max-width: 768.98px) {
	.wd-products-element,
	.wd-carousel-container {
		padding-inline: 0 !important;
	}

	.wd-products.grid-masonry {
		padding-inline: 0 !important;
		scroll-padding-inline: 0 !important;
	}
}

/* Titles smaller again at the owner's request. 9px is below what I would
   choose for Arabic — the letter joins begin to close up on lower-density
   screens — but Readex Pro's large x-height carries it further than most, and
   the owner is looking at real devices. One value to change if it reads too
   small in use. */
@media (max-width: 768.98px) {
	.wd-product .wd-entities-title {
		font-size: 9px !important;
		line-height: 1.5 !important;
		min-height: calc(2 * 1.5em) !important;
	}
}

/* --- The category icon strip: no dead space -----------------------------
   Owner asked for this tight — roughly a pixel. The row was carrying
   desktop-scale padding on the column inner, the icon element's own margin AND
   the wrapper, so three separate sources stacked above and below six icons at
   the very top of the page, where vertical space is most expensive. */
@media (max-width: 768.98px) {
	.vc_row,
	.vc_row .wpb_column,
	.vc_row .wpb_column > .vc_column-inner,
	.vc_row .wpb_wrapper {
		padding-block: 1px !important;
		margin-block: 0 !important;
	}

	.vc_icon_element,
	.wpb_wrapper > .vc_icon_element,
	.vc_icon_element .vc_icon_element-inner {
		margin-block: 0 !important;
		padding-block: 0 !important;
	}

	.vc_icon_element .vc_icon_element-inner .vc_icon_element-icon {
		line-height: 1 !important;
	}
}

/* --- The visible text is the ANCHOR, not the heading ---------------------
   Every previous size rule targeted `.wd-entities-title` — the <h3>. The theme
   sets its own font-size on the <a> INSIDE it, and that is the text a shopper
   actually sees, so the heading dutifully became 9px while the words stayed
   put.

   Caught by measuring the rendered box: computed size on the h3 read 9px, but
   the element was 63px tall when two lines at 9px/1.5 should be 27px. The
   number said one thing and the geometry said another; the geometry was right.

   Both are set now. */
.wd-product .wd-entities-title,
.wd-product .wd-entities-title a,
.wd-product h3.wd-entities-title a {
	font-size: 12px !important;
	line-height: 1.5 !important;
	font-weight: 400 !important;
}

@media (max-width: 768.98px) {
	/* 10.5px — settled after seeing all three on a real device.
	   The theme's 12.6px was too heavy for a 2.3-card rail; 9px was legible in
	   isolation but the Arabic letter joins begin to close at that size on
	   lower-density screens, and a product name that cannot be skimmed is not
	   doing its job. Readex Pro's large x-height means 10.5px here reads closer
	   to 12px in a narrower face. */
	.wd-product .wd-entities-title,
	.wd-product .wd-entities-title a,
	.wd-product h3.wd-entities-title a {
		font-size: 13.5px !important;
		line-height: 1.5 !important;
	}

	.wd-product .wd-entities-title {
		min-height: calc(2 * 1.5em) !important;
		max-height: calc(2 * 1.5em);
		overflow: hidden;
	}
}

/* ==========================================================================
   THE PEEK RULE MUST NOT TOUCH THE PRODUCT GALLERY
   --------------------------------------------------------------------------
   The 2.3-card override was written as a bare `.wd-carousel`. Woodmart also
   builds the single-product image gallery as a `.wd-carousel`, so the gallery
   inherited it and rendered 2.3 PHOTOGRAPHS side by side — measured:
   --wd-col 2.3, slide width 162px of a 373px track. It reads as the same
   picture repeated, which is what the owner reported, but they are adjacent
   slides of one product.

   Scoped to carousels that actually contain product CARDS, and the gallery is
   pinned back to a single slide explicitly. Two rules rather than one because
   the first states the intent and the second guarantees it regardless of what
   else ever matches.
   ========================================================================== */
@media (max-width: 768.98px) {

	/* Only rails of product cards get the peek. */
	.wd-carousel:has(.wd-product),
	.wd-carousel-wrap:has(.wd-product),
	.wd-products-element .wd-carousel {
		--wd-col-sm: 2.3 !important;
		--wd-col:    2.3 !important;
	}

	/* NOTHING is forced on the gallery.
	   Pinning it to one column was itself a mistake: the gallery contains TWO
	   carousels — the main images AND the thumbnail strip — and the override hit
	   both, so every thumbnail rendered at full width and the page showed the
	   same photograph twice at full size. Measured: two carousels, both
	   --wd-col 1, both with 373px items.
	   Woodmart already prints correct per-carousel values inline. The right fix
	   is to stop interfering, not to interfere more precisely. */

	/* The gallery keeps its arrows: with one slide showing there is no peek to
	   signal more images, so removing them would hide the rest of the photos. */
	.woocommerce-product-gallery .wd-btn-arrow,
	.woocommerce-product-gallery .wd-carousel-arrows,
	.wd-product-gallery .wd-btn-arrow,
	.wd-product-gallery .wd-carousel-arrows {
		display: flex !important;
	}
}
