/*
Theme Name: Rummen Child
Theme URI: http://www.wpbingosite.com/rummen
Author: wpbingo
Description: This is a child theme for Rummen
Version: 1.1.0
Author URI: http://wpbingosite.com
Template: rummen
Text Domain: rummen-child
*/
/*************** ADD YOUR CUSTOM CSS HERE  ***************/

/*************** DESIGN TOKENS  ***************/
/* Brand palette, verified across all 24 Figma screen exports.
   #0c1d32 and #bd9855 are also the Rummen parent palette — the design was
   built on it deliberately, so they are brand values, not demo leftovers.
   See docs/design-tokens.md. */
:root {
	--acw-dark:        #0c1d32;  /* headings, primary text */
	--acw-brand:       #345073;  /* buttons, filter links */
	--acw-brand-hover: #5d7ea5;
	--acw-gold:        #bd9855;  /* accents, sale badge, load more */
	--acw-wine:        #ad2c43;  /* prices, HOT badge */
	--acw-surface:     #f8f5f1;  /* filter panel backgrounds */
}




/*************** HEADER — STICKY BAR  ***************/
/* The bar the theme swaps in past 200px of scroll (rummen/js/functions.js:445).
   Trimmed from the theme's own 25px to 5px, which is what makes it 64px tall:
   5 + 54 + 5, where 54px is the tallest column (.header-right, driven by the
   27px account glyph against the global line-height:2). */
.bwp-header .header-sticky {
	padding: 5px 0 !important;
}

.bwp-header.header-v6.sticky .wpbingoLogo img {
	height: 50px !important;
}

/* White sticky bar everywhere except the homepage.
 *
 * The static header on inner pages is already white — the Customizer sets
 * `#bwp-header.header-v6 { background:#fff !important }`. But that rule matches the
 * <header> element, and .header-sticky is an opaque CHILD with its own background, so it
 * kept the theme's `.bwp-header.header-v6 .header-sticky { background:#000 }`
 * (template.css:2242, ungated). The result was a black bar holding content that had all
 * been recoloured dark for the white header — black nav text, an un-inverted black logo
 * and black icon glyphs, all invisible. Only the current item read, and only because it
 * gets a white pill behind it.
 *
 * Colouring the bar is the whole fix: every element inside is already correct for white,
 * including the black underline indicator and the gold cart badge. The theme's existing
 * `box-shadow: 1px 1px 10px rgba(0,0,0,.08)` (template.css:2077) was invisible on black
 * and now reads as the bottom edge.
 *
 * (0,4,1) beats template.css:2242's (0,3,0), and this sheet loads at priority 1001 —
 * after template.css — so no !important is needed. The homepage keeps its black bar. */
body:not(.home) .bwp-header.header-v6 .header-sticky {
	background: #fff;
}

/* Vertically centre the nav links.
 *
 * The row already centres its three columns — template.css:1570 gives
 * .header-center__inner { display:flex; align-items:center }. The trouble is that the
 * nav COLUMN is taller than the nav TEXT: .header-center is a bare block, so it picks
 * up a 26px Libre Baskerville strut (13px root font-size × the global line-height:2,
 * bootstrap.css:277 + template.css:14105), while the links inside are only 15px
 * (line-height:100%, from the Customizer's header-menu block).
 *
 * align-items:center then faithfully centres the 26px column, and the 15px of text sits
 * wherever the strut's baseline drops it — flush to the top in a real browser. Measured:
 * 21.3px above the caps against 32.0px below, in a 64px bar.
 *
 * Zeroing the line-height collapses the column to its own 15px of content, so there is
 * no slack left to sit at the top of and the existing align-items:center centres the
 * text itself. Measured after: 26.6 / 26.5.
 *
 * Safe to inherit: the eight wrapper divs down to the <ul> hold no text nodes, and
 * li.level-0 re-declares line-height:24px (template.css:16506) before the mega-menu
 * panels see this — verified unchanged at 24px, still absolute, still 391px tall. */
.bwp-header.sticky .header-sticky .header-center {
	line-height: 0;
}

/* Pin the nav font. Inter reaches these links only because the parent theme happens to
   declare it (template.css:16531) — a theme update that touches that one line would
   silently change the nav. The Customizer block sets every other property of this text
   (15px/500/2.25px tracking/uppercase) but not the family. */
.bwp-header .bwp-navigation ul > li.level-0 > a {
	font-family: Inter, sans-serif;
}

/* Keep the homepage nav white. The Customizer's "other pages" rule is
   `.bwp-navigation ul>li.level-0>a { color:#000!important }` with no body:not(.home),
   so it matches here too — white currently wins by a single extra class. This guard is
   (0,5,3) against its (0,2,3), so it cannot be lost to a future selector tweak. */
body.home .bwp-header.header-v6 .bwp-navigation ul > li.level-0 > a {
	color: #fff !important;
}




/*************** HEADER — MEGA MENU PANEL SPACING  ***************/
/* The OUR PRODUCERS panel is two stacked inner sections — the producer grid, then the
   VIEW ALL row — and the theme pads EVERY .content-megamenu section 40px top / 60px
   bottom (template.css:16677). Between the two that compounds into 60 + 40, plus the
   grid's own 30px icon-list margin: 130px of dead space above VIEW ALL, against ~50px
   in the design.

   The intended padding IS set on both sections in Elementor, and Elementor does emit it
   — but as `.elementor-47878 .elementor-element.elementor-element-XXX`, which is (0,3,0)
   against the theme selector's (0,6,2), so the theme wins. Re-stating it here with the
   theme's own chain plus the two Elementor classes puts us at (0,8,2).

   Scoped to the .bwp-navigation chain deliberately: the mobile menu is a JS clone
   appended to .bwp-canvas-navigation, outside that chain, so it keeps the theme's
   stacked-panel padding. */
.bwp-navigation ul > li.level-0.mega-menu.mega-menu-fullwidth-width > .sub-menu
	.elementor-47878 .elementor-element.elementor-element-00f3b79 {
	padding-bottom: 0;
}

.bwp-navigation ul > li.level-0.mega-menu.mega-menu-fullwidth-width > .sub-menu
	.elementor-47878 .elementor-element.elementor-element-fb9749b {
	padding-top: 20px;
	padding-bottom: 50px;
}




/*************** /PRODUCT/<PRODUCT-NAME> ADD TO CART BUTTON  ***************/
.single-product .bwp-single-info .single_add_to_cart_button.button {
  background: var(--acw-brand);
}
.single-product .bwp-single-info .single_add_to_cart_button.button:hover:not(.disabled) {
  background: var(--acw-brand-hover);
}




/*************** /PRODUCT/<PRODUCT-NAME> RELATED PRODUCTS - VIEW MORE BUTTON  ***************/
.related-more-wrap {
	text-align: center;
	margin-top: 20px;
}

.related-more-wrap .related-more-btn,
.woocommerce button.related-more-btn {
	background: var(--acw-brand);
}

.woocommerce button.related-more-btn:hover {
	background: var(--acw-brand-hover);
}




/*************** /PRODUCT/<PRODUCT-NAME> RECENTLY VIEWED PRODUCTS - VIEW MORE BUTTON  ***************/
.recent-view-more-wrap {
	text-align: center;
	margin-top: 20px;
}

.recent-view-more-wrap .recent-view-more-btn,
.woocommerce button.recent-view-more-btn {
	background: var(--acw-brand);
}

.woocommerce button.recent-view-more-btn:hover {
	background: var(--acw-brand-hover);
}




/*************** /SHOP SIDE MENU GENERAL ***************/
.acw-shop-menu-accordion {
 background-color: var(--acw-surface);
}

.acw-shop-menu-accordion h3 {
	margin-top: 0;
	padding: 10px 15px 10px 20px;
}




/*************** /SHOP SIDE MENU CHIP-TYPE MENU ***************/
.acw-attributes-chips {
	padding: 10px 20px 20px 20px;
}

.acw-attributes-chips .wc-block-product-filter-chips__items {
	gap: 8px
}

.acw-attributes-chips .wc-block-product-filter-chips__text {
	font-size: 12px;
}




/*************** /SHOP SIDE MENU GROUP ***************/
.acw-shop-menu-group {
	background-color: var(--acw-surface);
}



/*************** /SHOP SIDE MENU LIST-TYPE MENU ***************/
.acw-attributes-list {
	padding: 10px 20px 20px 20px;
}

.acw-attributes-list ul.acw-attributes-list-options-container {
	line-height: 18px;
	padding: 0 !important;
}

.acw-attributes-list ul.acw-attributes-list-options-container li {
    display: flex;
    justify-content: space-between;
		padding-bottom: 0 !important;
}




/*************** /SHOP SIDE MENU PRICE TIER ***************/
.acw-shop-price-tier {
	padding: 20px;
}
.acw-shop-price-tier .wc-block-product-filter-price-slider__content { grid-template-columns: auto auto 1fr; grid-template-areas: "price-slider price-slider price-slider price-slider" ". left-input right-input ."; column-gap: 4px; }
.acw-shop-price-tier .wc-block-product-filter-price-slider__left::before { content: "Range: "; }
.acw-shop-price-tier .wc-block-product-filter-price-slider__right::before { content: " - "; }




/*************** /SHOP PRODUCT GRID — PRICE  ***************/
/* Figma shows grid prices in wine red. The parent theme already uses
   #ad2c43 for the LIST view (template.css) but leaves the GRID price
   uninherited, so only the grid needs bringing into line. Selector depth
   matches the parent's own to avoid !important. */
   `.main-archive-product` exists only on the shop archive, so the ACW Sale Products grid
   on /special-offers/ is listed alongside it rather than given a duplicate block — both
   contexts render the same card and must price it the same way. */
.main-archive-product .products-list.grid .product-wapper .products-content .price,
.main-archive-product .products-list.grid .product-wapper .products-content .price .amount,
.acw-sale-products .products-list.grid .product-wapper .products-content .price,
.acw-sale-products .products-list.grid .product-wapper .products-content .price .amount {
	color: var(--acw-wine);
}

.main-archive-product .products-list.grid .product-wapper .products-content .price del,
.main-archive-product .products-list.grid .product-wapper .products-content .price del .amount,
.acw-sale-products .products-list.grid .product-wapper .products-content .price del,
.acw-sale-products .products-list.grid .product-wapper .products-content .price del .amount {
	color: rgba(12, 29, 50, .5);
}




/*************** /SHOP LOAD MORE BUTTON  ***************/
/* Figma: gold fill, white uppercase label, centred under the grid. */
.shop-loadmore .loadmore .woocommerce-load-more,
.woocommerce .shop-loadmore .loadmore .woocommerce-load-more {
	background: var(--acw-gold);
	color: #fff;
	text-transform: uppercase;
}

.shop-loadmore .loadmore .woocommerce-load-more:hover,
.woocommerce .shop-loadmore .loadmore .woocommerce-load-more:hover {
	background: var(--acw-dark);
	color: #fff;
}




/*************** HOME — MOST POPULAR PRODUCTS SLIDER  ***************/
/* Circular prev/next arrows sitting outside the product row, revealed on hover.
   Mirrors the theme's own .woo-slider-2 hover pattern (template.css) rather than
   introducing new behaviour — only the shape and colours differ, per the design. */
.acw-slider .content-product-list {
	position: relative;
}

.acw-slider .content-product-list .slick-arrow {
	width: 56px;
	height: 56px;
	line-height: 56px;
	border-radius: 50%;
	text-align: center;
	top: 50%;
	transform: translateY(-50%);
	background: #e4e4e4;
	color: #fff;
	border: 0;
	z-index: 2;
	transition: opacity .3s ease, background .3s ease;
}

.acw-slider .content-product-list .slick-arrow.fa-angle-left {
	left: -70px;
	right: auto;
}

.acw-slider .content-product-list .slick-arrow.fa-angle-right {
	right: -70px;
	left: auto;
}

/* Both arrows rest grey and go gold on hover. The Figma export shows the next
   arrow in gold — that is its hover state being demonstrated, not a second
   resting colour. */
.acw-slider .content-product-list .slick-arrow:hover {
	background: var(--acw-gold);
	color: #fff;
}

/* Hover reveal — opt-out via the widget's "Arrows only on hover" switch, which
   simply omits the .acw-arrows-on-hover class. */
.acw-slider.acw-arrows-on-hover .content-product-list .slick-arrow {
	opacity: 0;
	visibility: hidden;
}

.acw-slider.acw-arrows-on-hover .content-product-list:hover .slick-arrow {
	opacity: 1;
	visibility: visible;
}

/* Arrows sit outside the row on desktop; pull them inside where there is no room. */
@media (max-width: 1199px) {
	.acw-slider .content-product-list .slick-arrow.fa-angle-left  { left: -10px; }
	.acw-slider .content-product-list .slick-arrow.fa-angle-right { right: -10px; }
}

@media (max-width: 767px) {
	.acw-slider .content-product-list .slick-arrow {
		width: 40px;
		height: 40px;
		line-height: 40px;
	}
	/* Touch devices have no hover, so never hide the arrows there. */
	.acw-slider.acw-arrows-on-hover .content-product-list .slick-arrow {
		opacity: 1;
		visibility: visible;
	}
}




/*************** HOME — PROMO TILES (About Us / Our Wines / Shop / Special Offers)  ***************/
/* Four Elementor columns carrying a background image. The tile class and the
   stretched link are injected in inc/promo-tiles.php. */

.acw-promo-tile {
	position: relative;
	overflow: hidden;      /* clips the hover zoom */
	isolation: isolate;    /* contains the -1 layer; position:relative alone would not */
}

/* Elementor paints the tile image on the inner .elementor-widget-wrap — which is also
   the element holding the headings (padding 200px 75px). Scaling it would scale the
   text too, so the image is suppressed there and repainted on a ::before of the column
   that can be transformed on its own. --acw-tile-bg is set per column in
   inc/promo-tiles.php from that column's own Elementor background setting. */
.acw-promo-tile > .elementor-widget-wrap {
	background-image: none !important;
}

.acw-promo-tile::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image: var(--acw-tile-bg);
	background-position: center center;
	background-size: cover;
	background-repeat: no-repeat;
	transition: transform .6s ease;
	z-index: -1;           /* behind the text, which stays in normal flow and unscaled */
}

.acw-promo-tile:hover::before {
	transform: scale(1.3);
}

/* The headings are deliberately NOT positioned. The stretched link lives inside the
   title heading widget, so giving any ancestor position:relative would collapse the
   link to that element instead of covering the whole tile. The -1 layer above means
   normal-flow text paints on top without needing to be positioned at all. */

/* Stretched link — the whole tile is clickable, but the accessible name still comes
   from the heading text inside the anchor. */
.acw-promo-tile .acw-tile-link {
	position: absolute;
	inset: 0;
	z-index: 2;
}

.acw-promo-tile .acw-tile-link .screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
}

.acw-promo-tile .elementor-heading-title {
	color: #fff;
}

/* Desktop: full-bleed 2x2. The sections are boxed to 1320px by Elementor; break them
   out to the full viewport. */
.elementor-element-94115f7 > .elementor-container,
.elementor-element-cbb92ed > .elementor-container {
	max-width: 100%;
	width: 100%;
}

.elementor-element-94115f7,
.elementor-element-cbb92ed {
	padding-left: 0;
	padding-right: 0;
}

.acw-promo-tile {
	/* No display:flex here. Making the column a row flex container turns
	   .elementor-widget-wrap into a flex item, which then sizes to max-content
	   instead of filling the column — that was the source of the white gap on the
	   right at mobile. Elementor already positions the headings via the wrapper's
	   own padding, so no flex is needed. */
	min-height: 420px;
}

@media (max-width: 1199px) {
	.acw-promo-tile { min-height: 340px; }
}

/* Mobile: stacked full-width banners, per the design. Elementor already stacks the
   columns below 767px; this sets a banner-shaped height and disables the zoom, since
   touch has no hover and an armed transform only costs repaints. */
@media (max-width: 767px) {
	/* Assert full width on both the tile and its inner wrapper so nothing can
	   narrow them and reintroduce the gap at the right edge. */
	.acw-promo-tile,
	.acw-promo-tile > .elementor-widget-wrap {
		width: 100%;
		max-width: 100%;
	}

	.acw-promo-tile {
		min-height: 220px;
	}

	/* Elementor gives the wrapper padding: 200px 75px, which on a 440px screen is
	   150px of horizontal padding and 400px vertical against a 220px tile. Match
	   Elementor's own selector depth rather than reaching for !important. */
	.elementor-46847 .elementor-element.elementor-element-816479e > .elementor-element-populated,
	.elementor-46847 .elementor-element.elementor-element-423f1bd > .elementor-element-populated,
	.elementor-46847 .elementor-element.elementor-element-e6e6a63 > .elementor-element-populated,
	.elementor-46847 .elementor-element.elementor-element-883dba6 > .elementor-element-populated {
		padding: 90px 24px;
	}

	.acw-promo-tile:hover::before {
		transform: none;
	}

	/* --- 20px gutter around every tile ---------------------------------------- */

	/* Both sections use Elementor's "stretched" setting, whose JS writes an inline
	   width and margin-left computed from the body width. When the body is narrower
	   than the viewport that leaves the tiles flush left and short on the right —
	   the uneven margin. Full-bleed is not wanted at this breakpoint anyway, so the
	   stretch is neutralised here. These fight inline styles, so !important is the
	   only thing that outranks them. */
	.elementor-46847 .elementor-element-94115f7.elementor-section-stretched,
	.elementor-46847 .elementor-element-cbb92ed.elementor-section-stretched {
		width: auto !important;
		max-width: 100% !important;
		margin-left: 0 !important;
		margin-right: 0 !important;
		left: auto !important;
	}

	/* Side gutters. */
	.elementor-46847 .elementor-element-94115f7 > .elementor-container,
	.elementor-46847 .elementor-element-cbb92ed > .elementor-container {
		padding-left: 20px;
		padding-right: 20px;
	}

	/* Gap below each tile — this also separates the second tile from the section
	   that follows, so the two sections read as one evenly spaced group. */
	.acw-promo-tile {
		margin-bottom: 20px;
	}

	/* Opening gap above the first tile. */
	.elementor-46847 .elementor-element-94115f7 > .elementor-container {
		padding-top: 20px;
	}

	#bwp-main {
		overflow-x: hidden;  /* prevent the zoom from creating a horizontal scrollbar on mobile */
	}
}


@media (min-width: 992px) {
	.bwp-navigation {
		vertical-align: middle;
	}
}

/*************** HOME — COLLECTION SHOWCASE (Our Red / White Wines)  ***************/
/* Promo pane on the left, product carousel on the right. Arrow styling is shared with
   the popular-products slider via the .acw-slider selectors above. */

.acw-collection-showcase {
	display: flex;
	align-items: stretch;
	gap: 24px;
}

/* --- promo pane --- */
.acw-collection-pane {
	position: relative;
	overflow: hidden;
	isolation: isolate;
	flex: 0 0 40%;
	max-width: 40%;
	min-height: 420px;
	display: flex;
	align-items: flex-end;
	padding: 32px;
	background: var(--acw-surface);
}

/* Image on its own layer so it can be zoomed without moving the text, and so the
   text needs no positioning that would break the stretched link. */
.acw-collection-pane::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image: var(--acw-pane-bg);
	background-position: center center;
	background-size: cover;
	background-repeat: no-repeat;
	transition: transform .6s ease;
	z-index: -1;
}

.acw-collection-pane:hover::before {
	transform: scale(1.08);
}

.acw-collection-pane__sub {
	display: block;
	color: var(--acw-gold);
	text-transform: uppercase;
	letter-spacing: 3px;
	font-size: 11px;
	margin-bottom: 8px;
}

.acw-collection-pane__title {
	margin: 0;
	color: #fff;
	text-transform: uppercase;
	letter-spacing: 2px;
}

.acw-collection-pane__link {
	position: absolute;
	inset: 0;
	z-index: 2;
}

.acw-collection-pane__link .screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
}

/* --- product side --- */
.acw-collection-products {
	flex: 1 1 auto;
	min-width: 0;   /* lets the flex item shrink so slick can measure it correctly */
}

@media (max-width: 991px) {
	.acw-collection-pane { min-height: 340px; }
}

/* Stacked on mobile, per the design: pane full width above, slider below with the
   arrows always visible since touch has no hover. */
@media (max-width: 767px) {
	.acw-collection-showcase {
		display: block;
	}

	.acw-collection-pane {
		flex: none;
		max-width: 100%;
		width: 100%;
		min-height: 260px;
		margin-bottom: 24px;
		padding: 24px;
	}

	.acw-collection-pane:hover::before {
		transform: none;
	}

	.acw-collection-showcase .content-product-list .slick-arrow {
		opacity: 1;
		visibility: visible;
	}
}




/*************** ACW SLIDERS — GREY PRODUCT IMAGE FIELD  ***************/
/* The design puts every product card on a light grey field. Nothing in the theme
   produces that: the only #f5f5f5 rules on .products-thumb in template.css are for
   the .active loading skeleton. Whether a card looks grey today depends purely on
   what is baked into each photo — most are pure #ffffff, a few are #f6f6f6.

   The photos are OPAQUE squares, so a background alone stays hidden behind them.
   multiply maps white onto the backdrop (#ffffff x #f5f5f5 = #f5f5f5) while the
   bottle keeps its own tones — the standard treatment for white-cutout product
   shots. Blending is scoped to the <img> so badges, the stock label and the hover
   buttons are untouched.

   Note: a photo that is not pure white darkens slightly, so an off-white backdrop
   can leave a faint square. Re-exporting that photo on white is the real fix.

   Applied at every breakpoint: the cause is the source images, not the viewport, so
   scoping this to mobile would leave desktop cards inconsistent with each other. */
.acw-slider .products-list .product-wapper .products-thumb {
	background: #f5f5f5;
}

.acw-slider .products-list .product-wapper .products-thumb img {
	mix-blend-mode: multiply;
}




/*************** FORMS — GRAVITY FORMS BASE  ***************/
/* Gravity Forms' own CSS is disabled (see gform_disable_css in functions.php), so every
   form is styled here. This block covers what GF's stylesheets used to provide. */

.gform_wrapper .gform_fields {
	display: block;
	margin: 0;
	padding: 0;
	list-style: none;
}

.gform_wrapper .gfield {
	margin: 0 0 16px;
}

/* GF prints "(Required)" after every required label. The design does not show it, and the
   fields already carry aria-required for assistive tech. */
.gform_wrapper .gfield_required {
	display: none;
}

.gform_wrapper .gfield.hidden_label > .gfield_label,
.gform_wrapper .gfield.hidden_label > legend.gfield_label {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
}

/* Choice fields render as <fieldset>, which carries browser default chrome. */
.gform_wrapper fieldset.gfield {
	border: 0;
	margin: 0 0 16px;
	padding: 0;
	min-width: 0;
}

.gform_wrapper .gchoice {
	display: inline-flex;
	align-items: center;
	gap: 8px;
}

.gform_wrapper .gchoice input[type="checkbox"] {
	accent-color: var(--acw-brand);
	width: 16px;
	height: 16px;
	margin: 0;
	flex: none;
}

.gform_wrapper .gform_validation_errors,
.gform_wrapper .gfield_validation_message {
	color: var(--acw-wine);
	font-size: 13px;
	margin-top: 6px;
}

.gform_wrapper .gform_confirmation_message {
	color: var(--acw-dark);
	text-align: center;
	padding: 18px 0;
}

/* GF's anti-spam honeypot must stay hidden now that its CSS is gone. */
.gform_wrapper .gform_validation_container,
.gform_wrapper .gfield--type-honeypot {
	display: none !important;
}




/*************** HOME — NEWSLETTER  ***************/
/* Design: one grey bar holding the email input with a text-only SUBSCRIBE at its right,
   and the consent checkbox centred beneath.

   GF renders the submit button in .gform_footer, a SIBLING of the field list rather than
   a child, so it cannot sit beside the input in normal flow. The form is made a
   positioning context and the footer is pinned over the right of the bar. */

.acw-newsletter .gform_wrapper form {
	position: relative;
	max-width: 860px;
	margin: 0 auto;
}

.acw-newsletter .gform_wrapper .gfield--type-email {
	background: #f5f5f5;
	margin: 0;
}

.acw-newsletter .gform_wrapper .gfield--type-email input {
	background: transparent;
	border: 0;
	box-shadow: none;
	outline: 0;
	width: 100%;
	height: 40px;
	line-height: 40px;
	padding: 0 150px 0 24px;   /* room on the right for SUBSCRIBE */
	color: var(--acw-dark);
	font-size: 14px;
}

.acw-newsletter .gform_wrapper .gfield--type-email input::placeholder {
	color: rgba(12, 29, 50, .45);
	text-transform: uppercase;
	letter-spacing: 1.5px;
	font-size: 12px;
}

.acw-newsletter .gform_wrapper .gform_footer {
	position: absolute;
	top: 0;
	right: 0;
	margin: 0;
	padding: 0;
	width: auto;
	height: 40px;
}

.acw-newsletter .gform_wrapper .gform_footer input[type="submit"] {
	background: transparent;
	border: 0;
	height: 40px;
	padding: 0 24px;
	color: var(--acw-dark);
	text-transform: uppercase;
	letter-spacing: 2px;
	font-size: 11px;
	cursor: pointer;
	transition: color .3s ease;
}

.acw-newsletter .gform_wrapper .gform_footer input[type="submit"]:hover {
	color: var(--acw-gold);
}

/* Consent row, centred under the bar. */
.acw-newsletter .gform_wrapper .gfield--type-checkbox {
	margin: 20px 0 0;
	text-align: center;
}

/* Colours sampled from the reference: the sentence is a slate grey-blue and
   "Privacy Policy" picks up the brand blue, matching the checkbox fill. The phrase is
   wrapped in .acw-policy in the form's choice text — it is styled, not linked, since the
   Privacy Policy page is still a draft. */
.acw-newsletter .gform_wrapper .gchoice label {
	font-size: 13px;
	color: #3d4a5b;
	margin: 0;
}

.acw-newsletter .gform_wrapper .gchoice label .acw-policy {
	color: var(--acw-brand);
}

@media (max-width: 767px) {
	.acw-newsletter .gform_wrapper .gfield--type-email input {
		padding: 0 118px 0 16px;
		font-size: 13px;
	}

	.acw-newsletter .gform_wrapper .gform_footer input[type="submit"] {
		padding: 0 16px;
		letter-spacing: 1px;
	}

	.acw-newsletter .gform_wrapper .gchoice label {
		font-size: 13px;
	}
}




/*************** HOME — INFO COLUMNS (Free Shipping / Get It Today / Express Delivery)  ***************/
/* Section 60cb360f, three icon-box widgets. Elementor sets the title (16px uppercase,
   12px bottom margin) but every widget has `description_typography_typography: custom`
   with NO font-size, so the description falls back to the theme's body type — 16px at
   line-height 2, which reads far heavier than the design.

   Styled here rather than in _elementor_data: an Elementor editor save has already
   silently reverted a direct data write on this page once, and CSS is version-controlled.
   Elementor emits no rule for the description, so a section-scoped selector is enough. */

.elementor-element-60cb360f .elementor-icon-box-description {
	font-size: 13px;
	line-height: 1.6;
	color: rgba(12, 29, 50, .7);
	margin: 0;
}

/* Keep the three columns evenly spaced and top-aligned regardless of title wrapping. */
.elementor-element-60cb360f .elementor-icon-box-wrapper {
	align-items: flex-start;
}

@media (max-width: 767px) {
	.elementor-element-60cb360f .elementor-icon-box-description {
		font-size: 12px;
	}
}




/*************** HOME — RESPONSIVE (mobile type scale)  ***************/
/* Several homepage sections carry no responsive typography at all in Elementor, so they
   render desktop sizes on a 426px screen — the hero title is set to 64px with no mobile
   value, which is why it wrapped badly. Others drop to 15px, smaller than the body text
   beneath them.

   Sizes below are measured from figma-guide/Home - Attard & Co Wines (Mobile).png, which
   is exported at 426px — the same width as the target viewport — so cap heights convert
   directly to font sizes. Tile titles are the exception and are noted inline.

   Selector depth matches Elementor's own generated rules; the child stylesheet loads
   after post-46847.css, so these win on source order without !important, and nothing is
   written to _elementor_data where an open editor could revert it. */

@media (max-width: 767px) {

	/* Hero — measured: subline cap 10px (~14px), title cap 23px over two lines (~32px). */
	.elementor-46847 .elementor-element.elementor-element-43f63a6 .elementor-heading-title {
		font-size: 14px;
	}

	.elementor-46847 .elementor-element.elementor-element-44eece3 .elementor-heading-title {
		font-size: 32px;
		line-height: 1.25;
	}

	/* Section titles — measured cap 16px (~22px). Elementor has these at 15px on mobile,
	   which reads smaller than the paragraph text below them. */
	.elementor-46847 .elementor-element.elementor-element-481d70c6 .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-2246a7d .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-509d475e .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-acwcsredt .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-acwcswhtt .elementor-heading-title {
		font-size: 22px;
		line-height: 1.3;
	}

	/* Promo tile titles — 32px with no mobile value, inside a 220px-tall tile. Not
	   measurable from the reference (white text over photography defeats detection), so
	   22px is chosen to sit with the section titles rather than measured. */
	.elementor-46847 .elementor-element.elementor-element-2548f6d .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-2b7a681 .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-04cb75f .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-c43f176 .elementor-heading-title {
		font-size: 22px;
		line-height: 1.3;
	}

	.elementor-46847 .elementor-element.elementor-element-784c175 .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-a9ce494 .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-043ae0e .elementor-heading-title,
	.elementor-46847 .elementor-element.elementor-element-7a772a1 .elementor-heading-title {
		font-size: 10px;
	}

	/* Info columns — title down from 16px; descriptions already set to 12px above. */
	.elementor-46847 .elementor-element.elementor-element-5dd3d6e1 .elementor-icon-box-title,
	.elementor-46847 .elementor-element.elementor-element-73d692b4 .elementor-icon-box-title,
	.elementor-46847 .elementor-element.elementor-element-2fed4ba7 .elementor-icon-box-title {
		font-size: 14px;
	}

	/* Nothing on the page should be able to force a horizontal scrollbar. */
	.elementor-46847 .elementor-section {
		overflow-x: hidden;
	}
}




/*************** FOOTER — IMAGE GRID  ***************/
/* The grid container 6bce5d2 has no settings and no generated CSS at all — no columns,
   no gap — so this is additive rather than an override. Measured from the desktop
   reference: 114px squares (which is exactly the height already stored on each image)
   with a 15px gap, three across.

   The images' stored `width` was 114 PERCENT while `height` was 114 PIXELS — a unit
   slip that made every thumbnail 14% wider than its cell and crowded the row. That is
   corrected in the widget data rather than patched here, so the Elementor UI shows the
   right value too. */
.elementor-46987 .elementor-element.elementor-element-6bce5d2 {
	/* Tracks are sized to the image, not 1fr. With 1fr the columns stretch to fill the
	   container while the images stay a fixed 114px, and the leftover track width reads
	   as extra gap — measured 41px against the 15px intended. */
	--e-con-grid-template-columns: repeat(3, 114px);
	gap: 15px;
	justify-content: start;
}




/*************** FOOTER — MOBILE  ***************/
/* Footer template is bwp_footer post 46987 (wine-pour-footer), set via
   rummen_settings[footer_style]. Its root is an Elementor V4 atomic container, which
   drives layout through CUSTOM PROPERTIES (--margin-top, --padding-*,
   --e-con-grid-template-columns) rather than the CSS properties directly — setting
   `margin-top` or `grid-template-columns` here would do nothing.

   Elementor already stacks the grid to one column below 767px, so that is deliberately
   not touched. What it does NOT adapt is everything below. */

@media (max-width: 767px) {

	.elementor-46987 .elementor-element.elementor-element-8682358 {
		/* 150px top margin is set for desktop with no mobile override. */
		--margin-top: 40px;

		/* Side padding is 0 on desktop because the grid columns provide the gutters;
		   once stacked, the content would sit flush against the screen edge. */
		--padding-top: 40px;
		--padding-left: 20px;
		--padding-right: 20px;

		/* The decorative bottle is positioned by the container's custom_css, which
		   Elementor emits inside the mobile query too — at -200px/-150px and 45% it
		   sits almost entirely off-screen on a phone. */
		background-position: center top;
		background-size: 170%;
	}

	/* Fluid tracks here, paired with fluid images below: three fixed 114px squares
	   plus gaps come to 372px, which only just fits a 426px viewport once the 20px
	   side padding applies. */
	.elementor-46987 .elementor-element.elementor-element-6bce5d2 {
		--e-con-grid-template-columns: repeat(3, 1fr);
		gap: 10px;
	}

	/* Thumbnails go fluid here: three 114px squares plus gaps do not fit inside a
	   426px viewport once the 20px side padding applies, and the reference shows
	   smaller squares on mobile. */
	.elementor-46987 .elementor-element.elementor-element-6bce5d2 img {
		width: 100%;
		height: auto;
		display: block;
		aspect-ratio: 1;
		object-fit: cover;
	}

	/* Copyright and the Terms / Privacy line are centred in the design. */
	.elementor-46987 .elementor-element.elementor-element-07288f5 {
		text-align: center;
	}
}




/*************** ABOUT US — MILESTONES TIMELINE  ***************/
/* The tabs widget (post 9095, element 8a76378, class .tab-milestones) holds the company
   history. The theme already supplies the chrome — cream band, white card,
   `padding:100px !important`, the 32px Libre Baskerville tab strip and the 1px gold
   marker beside the active year (template.css:17142-17178) — and measuring the design
   confirmed its 100px card padding is already correct (reference: 95px left, 97px top).
   What the theme does not do is lay the panel out as image + text, so that is all this
   block adds.

   The flex row is an INNER .acw-milestone wrapper, not .elementor-tab-content itself.
   Elementor's tab JS shows and hides panels with jQuery show()/hide(), which writes
   `display:block` / `display:none` as an INLINE style — that beats any stylesheet rule,
   so flexing the panel directly silently does nothing, and forcing it with !important
   would also override the `display:none` on the hidden panels and reveal all four at
   once. Flexing a child sidesteps the conflict entirely and needs no !important. */
.tab-milestones .acw-milestone {
	display: flex;
	gap: 50px;                 /* measured: 50px between image and text */
	align-items: flex-start;
}

.tab-milestones .acw-milestone__media {
	flex: 0 0 249px;           /* measured: 249 x 156 */
	width: 249px;
	height: 156px;
	object-fit: cover;
}

.tab-milestones .acw-milestone__body {
	flex: 1 1 auto;
}

/* 22px derives from the reference's 15.5px cap height at Libre Baskerville's ~0.72 cap
   ratio. The demo markup carried an inline `font-size:15px` on every <h2>, which would
   have won against this — the rebuilt tab_content has no inline styles for that reason.
   `letter-spacing:1px` already comes from template.css:17170. */
.tab-milestones .elementor-tab-content h2 {
	font-size: 22px;
	margin: 0 0 18px;
	color: var(--acw-dark);
	text-transform: uppercase;
}

/* The panel inherits Libre Baskerville from the widget, so the body copy came out as a
   13px serif. The design sets it in the page's body face — measured 10.3px cap height
   against Lato's ~0.72 ratio gives ~14px, on a 22px leading. 14 + 22 puts one clear line
   between paragraphs, matching the reference's 36px baseline-to-baseline gap. */
.tab-milestones .elementor-tab-content p {
	font-family: Lato, sans-serif;
	font-size: 14px;
	line-height: 22px;
	margin: 0 0 14px;
}

.tab-milestones .elementor-tab-content p:last-child {
	margin-bottom: 0;
}

/* Below 767px Elementor hides the tab strip entirely and switches to accordion titles
   inside the content wrapper, so the panel needs to stack. */
@media (max-width: 767px) {
	.tab-milestones .acw-milestone {
		flex-direction: column;
		gap: 25px;
	}

	.tab-milestones .acw-milestone__media {
		flex-basis: auto;
		width: 100%;
		height: auto;
		aspect-ratio: 249 / 156;
	}
}




/*************** SPECIAL OFFERS — SALE GRID  ***************/
/* The ACW Sale Products widget drives the theme's own archive loop, so the cards and the
   <ul class="products products-list row grid"> wrapper are identical to /shop/ and need no
   styling here. Only the two things the archive does not provide do: the Load More button
   and the empty state. */

.acw-sale-products .products-list.grid {
	margin-bottom: 0;
}

/* Load More. Same treatment as the shop's button (see the /SHOP LOAD MORE block above),
   but its own class — the theme binds `.woocommerce-load-more` inside
   `nav.woocommerce-pagination` to the shop ARCHIVE filter query, so reusing those classes
   would hand our clicks to the wrong query. */
.acw-sale-loadmore {
	text-align: center;
	margin-top: 40px;
}

.acw-sale-loadmore__btn {
	background: var(--acw-gold);
	color: #fff;
	text-transform: uppercase;
	border: 0;
	padding: 14px 42px;
	letter-spacing: 1px;
	cursor: pointer;
	transition: background .3s ease;
}

.acw-sale-loadmore__btn:hover {
	background: var(--acw-dark);
	color: #fff;
}

.acw-sale-loadmore__btn.loading {
	opacity: .6;
	pointer-events: none;
}

/* Empty state. With no product in the catalogue currently discounted this is the page's
   normal condition, not an edge case, so it is styled to look intentional rather than
   like a grid that failed to load. */
.acw-sale-empty {
	text-align: center;
	padding: 60px 20px 80px;
}

.acw-sale-empty__title {
	font-size: 22px;
	letter-spacing: 1px;
	text-transform: uppercase;
	color: var(--acw-dark);
	margin: 0 0 14px;
}

.acw-sale-empty__text {
	font-family: Lato, sans-serif;
	font-size: 14px;
	line-height: 22px;
	max-width: 520px;
	margin: 0 auto 28px;
}

.acw-sale-empty__btn {
	display: inline-block;
	background: var(--acw-gold);
	color: #fff;
	text-transform: uppercase;
	padding: 14px 42px;
	letter-spacing: 1px;
	transition: background .3s ease;
}

.acw-sale-empty__btn:hover,
.acw-sale-empty__btn:focus {
	background: var(--acw-dark);
	color: #fff;
}

@media (max-width: 767px) {
	.acw-sale-empty {
		padding: 40px 15px 50px;
	}

	.acw-sale-empty__title {
		font-size: 18px;
	}
}




/*************** CONTACT — FORM  ***************/
/* Gravity Forms' own CSS is off site-wide (gform_disable_css, functions.php:331) and the
   FORMS — GRAVITY FORMS BASE block above styles no text inputs or textareas — only the
   homepage newsletter does, scoped to .acw-newsletter. So the contact form was falling
   through to browser defaults. Everything the design needs is set here.

   Scoped to .elementor-15115 so it cannot reach the newsletter form that also renders on
   this page inside #newsletterpopup. */

/* GF emits gfield--width-third / --width-full from each field's layoutGridColumnSpan, but
   with its stylesheet disabled those classes carry no widths. Supply the 12-column grid
   they assume: Name / Email / Phone span 4 each, everything else spans 12. */
.elementor-15115 .gform_wrapper .gform_fields {
	display: grid;
	grid-template-columns: repeat(12, 1fr);
	column-gap: 12px;          /* measured 11.8 */
}

.elementor-15115 .gform_wrapper .gfield--width-third { grid-column: span 4; }
.elementor-15115 .gform_wrapper .gfield--width-half  { grid-column: span 6; }
.elementor-15115 .gform_wrapper .gfield--width-full  { grid-column: span 12; }

/* Labels and field text are the serif in the reference. This used to come from a
   `font-family: "libre baskerville"` rule in the widget's own custom_css, which is gone
   now that the dead Contact Form 7 rule beside it was removed — so it is declared here
   rather than left to inherit. */
.elementor-15115 .gform_wrapper .gfield_label {
	display: block;
	font-family: "Libre Baskerville", serif;
	font-size: 13px;
	font-weight: 400;
	color: var(--acw-dark);
	margin: 0 0 4px;           /* measured label ink -> input top 12.8 */
}

.elementor-15115 .gform_wrapper input[type="text"],
.elementor-15115 .gform_wrapper input[type="email"],
.elementor-15115 .gform_wrapper input[type="tel"],
.elementor-15115 .gform_wrapper textarea {
	width: 100%;
	border: 1px solid #dadada;   /* measured from the reference */
	border-radius: 0;
	background: #fff;
	color: var(--acw-dark);
	font-family: "Libre Baskerville", serif;
	font-size: 14px;
	padding: 0 14px;
	height: 37px;                /* measured */
}

.elementor-15115 .gform_wrapper textarea {
	height: 223px;               /* measured */
	padding: 12px 14px;
	resize: vertical;
}

.elementor-15115 .gform_wrapper input::placeholder,
.elementor-15115 .gform_wrapper textarea::placeholder {
	color: rgba(12, 29, 50, .45);
	opacity: 1;
}

.elementor-15115 .gform_wrapper input:focus,
.elementor-15115 .gform_wrapper textarea:focus {
	border-color: var(--acw-brand);
	outline: none;
}

/* The base block hides .gfield_required everywhere (the other forms' designs don't show
   it). This page's design does — as a red mark inside the field, not beside the label —
   so it is re-shown here and positioned over the control.
   Note: on the textarea the reference draws it inline after the placeholder text, which
   CSS cannot reach; here it sits top-right of the box instead. */
.elementor-15115 .gform_wrapper .gfield {
	position: relative;
}

.elementor-15115 .gform_wrapper .gfield_required {
	display: inline;
	position: absolute;
	top: 32px;
	right: 14px;
	color: var(--acw-wine);
	font-size: 13px;
	line-height: 1;
	pointer-events: none;
}

/* GF renders the marker as the words "(Required)" nested inside the outer span. The
   design uses a single red asterisk, so the wording is swapped for the glyph — the outer
   span keeps its role for assistive tech via the field's aria-required. */
.elementor-15115 .gform_wrapper .gfield_required .gfield_required_text {
	display: none;
}

.elementor-15115 .gform_wrapper .gfield_label > .gfield_required::after {
	content: "\2731";
}

.elementor-15115 .gform_wrapper .gfield--type-textarea .gfield_required {
	top: 34px;
}

/* Consent rows. .gchoice is already flex with an 8px gap in the base block.
   The negative top pulls the first row up to the measured 24.6px below the textarea —
   the base .gfield margin plus the 28px line box was putting it at 32. The 13px bottom
   keeps the measured 41px row pitch. */
.elementor-15115 .gform_wrapper .gfield--type-checkbox {
	margin-top: -7px;
	margin-bottom: 18px;       /* gives the measured 41.3px row pitch */
}

/* 14px squares, per the reference. The shared base block sets 16px and the homepage
   newsletter depends on that, so this override stays inside the contact scope. */
.elementor-15115 .gform_wrapper .gchoice input[type="checkbox"] {
	width: 14px;
	height: 14px;
}

.elementor-15115 .gform_wrapper .gchoice label {
	font-family: Lato, sans-serif;
	font-size: 14px;
	color: var(--acw-dark);
	margin: 0;
	cursor: pointer;
}

.elementor-15115 .gform_wrapper .gchoice label .acw-policy {
	color: var(--acw-brand);
}

.elementor-15115 .gform_wrapper .gform_footer {
	/* Negative because the 18px checkbox margin above already overshoots: the design puts
	   the button 23.6px under the last checkbox and the stack was landing at 41. */
	margin: -3px 0 0;
	padding: 0;
}

.elementor-15115 .gform_wrapper .gform_button {
	background: var(--acw-brand);
	color: #fff;
	border: 0;
	border-radius: 0;
	font-family: Lato, sans-serif;
	font-size: 12px;
	letter-spacing: 1px;
	text-transform: uppercase;
	width: 147px;                /* measured 147 x 41 */
	height: 41px;
	cursor: pointer;
	transition: background .3s ease;
}

.elementor-15115 .gform_wrapper .gform_button:hover {
	background: var(--acw-dark);
}

@media (max-width: 767px) {
	/* One field per row; the grid spans all collapse. */
	.elementor-15115 .gform_wrapper .gfield--width-third,
	.elementor-15115 .gform_wrapper .gfield--width-half,
	.elementor-15115 .gform_wrapper .gfield--width-full {
		grid-column: span 12;
	}

	.elementor-15115 .gform_wrapper textarea {
		height: 180px;
	}

	.elementor-15115 .gform_wrapper .gform_button {
		width: 100%;
	}

	/* ADDRESS / PHONE / EMAIL sat flush to the screen edge: their column has
	   `padding: 0 15px 0 0` (no left) and Elementor emits
	   `@media(max-width:1024px){ …-1e49e07 { padding: 0 } }`. That generated rule is
	   (0,3,0) because it carries `.elementor-element` as well as the id class, so the
	   override has to match the same depth. */
	.elementor-15115 .elementor-element.elementor-element-1e49e07 {
		padding-left: 15px;
		padding-right: 15px;
	}
}
