@charset "UTF-8";
/* BE.LOVA WP theme overrides */
:root {
  --rc-font: "Montserrat", sans-serif;
}
body.rosa-clara-wp {
  margin: 0;
}
.site-logo img,
.site-logo svg {
  max-width: 160px;
  height: auto;
}
.woocommerce .products-grid .product,
.products-grid .product {
  list-style: none;
}
.woocommerce-page .products-grid ul.products {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.rc-admin-notice a { text-decoration: underline; }

/* Search overlay — visible state */
.search-wrapper.show { display: block; }
body.search-open { overflow: hidden; }

/* Favourites badge in header */
.header-icons .favourites { position: relative; }
.header-icons .favourites[data-count]::after {
  content: attr(data-count);
  position: absolute;
  top: -8px;
  right: -10px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 999px;
  background: #000;
  color: #fff;
  font-size: 10px;
  line-height: 16px;
  text-align: center;
}
.header-icons .favourites[data-count="0"]::after,
.header-icons .favourites:not([data-count])::after { display: none; }

/* Product grid helpers */
.products-grid-container { display: flex; flex-wrap: wrap; gap: 8px; }
.products-grid-container .product,
.products-grid-container item { width: calc((100% - 8px) / 2); }
@media (min-width: 1024px) {
  .products-grid-container .product,
  .products-grid-container item { width: calc((100% - 24px) / 4); }
}
item { display: block; }
.not-products-found { width: 100%; text-align: center; padding: 40px 20px; color: #777; }

/* Appointment form */
.rc-appointment-form { max-width: 560px; margin: 0 auto; }
.rc-appointment-form label { display: block; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; margin-bottom: 20px; }
.rc-appointment-form .input_rc,
.rc-appointment-form .rc_textarea {
  width: 100%;
  box-sizing: border-box;
  margin-top: 8px;
  padding: 10px 0;
  border: none;
  border-bottom: 1px solid #ccc;
  font: 400 15px var(--rc-font);
  background: transparent;
  outline: none;
}
.rc-appointment-form .rc_textarea { border: 1px solid #ccc; padding: 10px; }
.rc-form-success { color: #1a7f37; }
.rc-form-error { color: #c0392b; }

/* Page hero */
.page-hero { padding: 80px 5% 40px; }
.page-hero .title { font-weight: 250; letter-spacing: -.01em; text-transform: uppercase; margin: 0; }
.page-hero .subtitle { color: #555; }

/* Load-more button (production keeps it display:none by default; reveal it) */
.products-grid .load-more-products button {
	display: inline-block;
}

/* PDP: plain location input (production uses Google autocomplete) */
#nameplace input {
	width: 100%;
	border: none;
	outline: none;
	background: transparent;
	font-family: var(--rc-font);
	font-size: 14px;
	padding: 8px 0;
	box-sizing: border-box;
}

/* PDP: related products grid padding */
.related-products .products-grid-container {
	padding: 0 3vw;
}

/* Language switcher */
.lang-switcher { position: relative; }
.lang-current {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	background: none;
	border: none;
	cursor: pointer;
	font: 400 11px var(--rc-font);
	text-transform: uppercase;
	letter-spacing: .08em;
	color: var(--grey, #73737a);
	padding: 4px 6px;
}

/*
 * The header has two variants: .transparent sits over the homepage hero and
 * colours its nav items white, .default is used on every other page and
 * colours them grey. The switcher has to follow the same rule instead of
 * sitting at one fixed colour, otherwise "EN" turns grey on the hero while
 * EVENTS / STORES / ABOUT stay white.
 */
.site-header.transparent .lang-current { color: var(--white, #fff); }

/*
 * With the mobile menu open the panel behind the icons turns white, so the
 * switcher has to follow the nav items back to grey — production does the same
 * with `.navbar-items.opened .site-header-products .category`.
 */
.site-header.transparent .navbar-items.opened .lang-current { color: var(--grey, #73737a); }

/* ------------------------------------------------------------------
   Mobile header (max-width: 1023px)

   Three things in the production stylesheet are desktop-only or mobile-only
   in a way that breaks the bar below 1024px:

   1. .header-icons is laid out ONLY from 1024px up
      (`@media only screen and (width>=1024px)`), so on phones .search and
      .favourites had no size at all and collapsed to zero width.
   2. .site-header-pages is itself the mobile search button there (22x22 with
      the magnifier as a background), and the switcher rendered inside it
      overflowed ~33px past the viewport edge.
   3. .site-header{,.transparent} .site-logo a is pinned to 160px, which the
      bar cannot afford next to four other controls.

   Layout below 1024px:  [menu]   BE.LOVA   [lang] [search] [favourites]
   ------------------------------------------------------------------ */
@media (max-width: 1023px) {
	/*
	 * Production turns .site-header-pages ITSELF into a 22x22 search button on
	 * mobile:
	 *   .site-header.transparent .site-header-pages {
	 *     background: url(../../img/search-btn-white.svg) no-repeat;
	 *     width:22px; height:22px; margin-right:20px }
	 * That is where the stray magnifier overlapping the language switcher came
	 * from. Here the element is a plain container for the switcher plus the
	 * icon row, and the search icon lives in its own .search element, so the
	 * background, the fixed box and the pointer cursor have to go.
	 */
	.site-header .navbar-items:not(.opened) .site-header-pages {
		display: flex;
		align-items: center;
		justify-content: flex-end;
		width: auto;
		height: auto;
		flex: 0 0 auto;
		background-image: none;
		cursor: default;
		/*
		 * Production also keeps margin-right:20px here (.default:15px) to space
		 * the desktop "Make an appointment" button, which is hidden on mobile.
		 * Both that margin AND any padding on this element are added on top of
		 * the column's share of the free space (its flex-basis is 0), which made
		 * the right column wider than the left and pushed the centred logo off
		 * centre. Zero both here and put the 10px inset on .header-icons below.
		 */
		margin-right: 0;
		padding-right: 0;
	}

	/*
	 * Equal side columns put the logo in the optical centre of the bar; with
	 * plain space-between it drifts left because the icon group is far wider
	 * than the hamburger. Note these columns are NOT automatically equal: a
	 * flex item refuses to shrink below its min-content, which is why the
	 * breakpoints below trim the gaps and the logo.
	 */
	.site-header .navbar-items:not(.opened) .mobile-navbar,
	.site-header .navbar-items:not(.opened) .site-header-pages { flex: 1 1 0; }
	.site-header .navbar-items:not(.opened) .site-logo { flex: 0 0 auto; }

	.site-header .site-header-pages .header-icons {
		display: flex;
		flex-direction: row;
		align-items: center;
		gap: 9px;
		margin-left: 9px;
		/* The bar's 10px right inset, kept off .site-header-pages so that the
		   flex columns stay the same width and the logo is truly centred. */
		padding-right: 10px;
	}

	/* The 22px box IS the icon: the artwork is a 22px background, so padding
	   would only push the magnifier and the heart into each other. */
	.site-header .site-header-pages .header-icons .search,
	.site-header .site-header-pages .header-icons .favourites {
		display: block;
		width: 22px;
		height: 22px;
		padding: 0;
		background-repeat: no-repeat;
		background-position: center;
		background-size: 22px 22px;
	}

	/* Icons follow the same light/dark split as the rest of the header. */
	.site-header.default .site-header-pages .header-icons .search { background-image: url(../../img/search-btn-black.svg); }
	.site-header.default .site-header-pages .header-icons .favourites { background-image: url(../../img/heart.svg); }
	.site-header.transparent .site-header-pages .header-icons .search { background-image: url(../../img/search-btn-white.svg); }
	.site-header.transparent .site-header-pages .header-icons .favourites { background-image: url(../../img/heart-white.svg); }

	/* Compact switcher so five controls still fit on a 360px phone. */
	.site-header .lang-current {
		padding: 6px 2px;
		gap: 4px;
		letter-spacing: .04em;
	}
	.site-header .lang-current .chev { width: 10px; height: 10px; }

	/*
	 * A 160px logo plus five controls does not fit on small phones. Production
	 * pins the width on the anchor —
	 *   .site-header.default .site-logo a { width:160px }   (and .transparent)
	 * — so shrinking it means restating that (0,3,0) selector with a smaller
	 * value in the narrow breakpoints below. Do NOT use width:auto here: the
	 * image is sized with max-height and width:auto, so against a shrink-to-fit
	 * container it resolves to zero and the wordmark disappears.
	 */
	.site-header .site-logo img { max-height: 30px; width: auto; }
}

@media (max-width: 499px) {
	/*
	 * A flex item's automatic minimum size is its min-content width, and the
	 * right-hand group is wider than half the free space on phones. The column
	 * therefore refused to shrink to the same width as the hamburger column and
	 * the "centred" logo sat 5px left of centre. Tightening the gaps keeps the
	 * group's min-content inside its half, so both flex:1 columns measure the
	 * same and the logo is genuinely centred.
	 */
	.site-header .site-header-pages .header-icons { gap: 6px; margin-left: 6px; }
}

@media (max-width: 429px) {
	/*
	 * At 381-429px the right-hand group needs 121px but only gets (width-160)/2.
	 * Ten pixels off the logo (a 150px anchor instead of 160px) buys exactly the
	 * space needed, which is invisible — unlike dropping the "EN" label or
	 * leaving the wordmark a few px off centre.
	 */
	.site-header.default .site-logo a,
	.site-header.transparent .site-logo a { width: 150px; }
	.site-header .site-logo img { max-height: 28px; }
}

@media (max-width: 380px) {
	/* Drop the "EN" label: the flag plus the chevron still reads as a language
	   switcher, and at 360px the wordmark matters more than the label. */
	.site-header .lang-current .code { display: none; }
}

@media (max-width: 340px) {
	/* 320px phones: the wordmark has to give way so the columns stay equal. */
	.site-header.default .site-logo a,
	.site-header.transparent .site-logo a { width: 113px; }
	.site-header .site-logo img { max-height: 21px; }
}
.lang-current .flag,
.lang-menu .flag { display: inline-flex; line-height: 0; }
.lang-current .flag svg,
.lang-menu .flag svg { width: 18px; height: 13px; border-radius: 1px; }
.lang-current .code { font-weight: 600; }
.lang-current .chev { width: 12px; height: 12px; }
.lang-menu {
	position: absolute;
	top: 100%;
	right: 0;
	margin: 4px 0 0;
	padding: 8px 0;
	list-style: none;
	background: #fff;
	border: 1px solid #eee;
	border-radius: 4px;
	box-shadow: 0 4px 12px rgba(0, 0, 0, .08);
	min-width: 150px;
	display: none;
	z-index: 100;
}
.lang-switcher.open .lang-menu { display: block; }
.lang-menu li a {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 6px 14px;
	font: 400 12px var(--rc-font);
	color: var(--grey, #73737a);
	text-decoration: none;
	white-space: nowrap;
}
.lang-menu li a .code { font-weight: 600; min-width: 20px; }
.lang-menu li a .name { color: var(--grey, #73737a); }
.lang-menu li a:hover,
.lang-menu li a.active { background: #f5f5f5; color: var(--black, #000); }

/* Content clears the absolutely-positioned header (56px tall).
   Pages that already ship a .page-hero (with its own 56px top margin) or a
   full-bleed hero on the homepage are excluded. */
.full-page:not(.has-hero):not(:has(.page-hero)) { padding-top: 56px; }
body.page-product-details .full-page { padding-top: 0; }

/* ------------------------------------------------------------------
   #deCLARAtions carousel
   theme.js upgrades .realbrides-slider into a slick-compatible carousel
   (.slick-list / .slick-track / .slick-slide / .slick-dots + arrows).
   The slick core styles already ship with the production stylesheet, so
   only the pieces production overrides for this block live here.
   ------------------------------------------------------------------ */

/* Fallback (before JS runs or if it never does): horizontal scroll strip
   instead of a 8000px-tall column of images. */
.realbrides-slider:not(.slick-initialized) {
	display: flex;
	gap: var(--slide-gap, 6px);
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
}
.realbrides-slider:not(.slick-initialized)::-webkit-scrollbar { display: none; }
.realbrides-slider:not(.slick-initialized) > * { flex: 0 0 25%; }
.realbrides-slider:not(.slick-initialized) img { width: 100%; }

.realbrides-slider.slick-initialized { position: relative; margin: 0; }
.realbrides-slider .slick-list { overflow: hidden; }
.realbrides-slider .slick-track {
	display: flex;
	transition: transform .35s ease;
	will-change: transform;
}
.realbrides-slider .slick-slide {
	float: none;
	display: block;
	height: auto;
	flex: 0 0 auto;
}
.realbrides-slider .slick-slide > a,
.realbrides-slider .slick-slide > .slide-media { display: block; }
.realbrides-slider .slick-slide img { min-width: 100%; max-width: 100%; }

/* Arrows — the slick core styles paint them white, which is invisible on
   the white block background, so restate them for this carousel. */
.realbrides-slider .slick-prev,
.realbrides-slider .slick-next {
	z-index: 5;
	width: 38px;
	height: 38px;
	border-radius: 50%;
	background: rgba(255, 255, 255, .92);
	box-shadow: 0 2px 10px rgba(0, 0, 0, .18);
	display: flex;
	align-items: center;
	justify-content: center;
	transition: opacity .2s ease, background-color .2s ease;
}
.realbrides-slider .slick-prev { left: 14px; }
.realbrides-slider .slick-next { right: 24px; }
.realbrides-slider .slick-prev:before,
.realbrides-slider .slick-next:before {
	color: var(--black, #151515);
	opacity: 1;
	font-size: 16px;
	line-height: 1;
}
.realbrides-slider .slick-prev:hover,
.realbrides-slider .slick-next:hover { background: #fff; }
.realbrides-slider .slick-prev.slick-disabled,
.realbrides-slider .slick-next.slick-disabled { opacity: .35; cursor: default; }

@media (max-width: 480px) {
	.realbrides-slider .slick-prev,
	.realbrides-slider .slick-next { width: 32px; height: 32px; }
	.realbrides-slider .slick-prev { left: 8px; }
	.realbrides-slider .slick-next { right: 16px; }
}
