/* ============================================================================
   HEADER IS OFF-LIMITS (v2.8.1)
   This plugin must never style or move the site header. The header
   (.wnhead / any <header>) is owned entirely by its own standalone code.
   Effects are scoped to content; this block is the final backstop.
   ============================================================================ */
html.wns-fx .wnhead,
html.wns-fx .wnhead * {
	/* Neutralise any plugin-added link underline that could reach a header link,
	   without affecting the header's own ::before/::after (e.g. the burger icon). */
}
html.wns-fx .wnhead a::after,
html.wns-fx header nav a::after {
	background: none !important;
	content: normal;
}

/* Wedding Numbers Suite — front-end effects
   Lightweight, GPU-friendly (transform/opacity only), honors reduced motion. */

/* ---------- Scroll reveal (base + directional variants) ---------- */
html.wns-fx .wns-reveal {
	opacity: 0;
	transition: opacity .6s ease, transform .6s cubic-bezier(.22, .61, .36, 1);
	will-change: opacity, transform;
}
html.wns-fx .wns-reveal.wns-up    { transform: translateY(22px); }
html.wns-fx .wns-reveal.wns-left  { transform: translateX(-26px); }
html.wns-fx .wns-reveal.wns-right { transform: translateX(26px); }
html.wns-fx .wns-reveal.wns-zoom  { transform: scale(.94); }
html.wns-fx .wns-reveal.wns-fade  { transform: none; }
html.wns-fx .wns-reveal.wns-in {
	opacity: 1;
	transform: none;
}
/* Fail-safe: no element may stay hidden forever. If the observer never
   fires (any JS error on the page), CSS auto-reveals after 5 seconds. */
html.wns-fx .wns-reveal {
	animation: wnsAutoReveal .5s ease 5s forwards;
}
html.wns-fx .wns-reveal.wns-in {
	animation: none;
}
@keyframes wnsAutoReveal {
	to { opacity: 1; transform: none; }
}
html.wns-fx .wns-reveal.wns-d1 { transition-delay: .08s; }
html.wns-fx .wns-reveal.wns-d2 { transition-delay: .16s; }
html.wns-fx .wns-reveal.wns-d3 { transition-delay: .24s; }

/* ---------- Page fade-in ---------- */
html.wns-fx.wns-page-fade body > *:not(.wnhead):not(#wnhead-spacer):not(#wpadminbar):not(header) {
	animation: wnsPageFade .45s ease both;
}
@keyframes wnsPageFade { from { opacity: 0; } to { opacity: 1; } }

/* ---------- Scroll progress bar ---------- */
.wns-progress {
	position: fixed;
	top: 0; left: 0; right: 0;
	height: 3px;
	background: transparent;
	z-index: 9995;
	pointer-events: none;
}
.wns-progress > span {
	display: block;
	height: 100%;
	width: 0;
	background: var(--wns-accent, #b76e79);
	transition: width .1s linear;
}

/* ---------- Button hover (Elementor + WooCommerce + Fluent Forms) ---------- */
html.wns-fx.wns-hover-buttons .elementor-button,
html.wns-fx.wns-hover-buttons .woocommerce a.button,
html.wns-fx.wns-hover-buttons .woocommerce button.button,
html.wns-fx.wns-hover-buttons .fluentform .ff-btn {
	transition: transform .22s ease, box-shadow .22s ease;
}
html.wns-fx.wns-hover-buttons .elementor-button:hover,
html.wns-fx.wns-hover-buttons .woocommerce a.button:hover,
html.wns-fx.wns-hover-buttons .woocommerce button.button:hover,
html.wns-fx.wns-hover-buttons .fluentform .ff-btn:hover {
	transform: translateY(-2px);
	box-shadow: 0 10px 22px -8px rgba(0, 0, 0, .28);
}

/* ---------- Product card hover ---------- */
html.wns-fx.wns-hover-products ul.products li.product {
	transition: transform .28s ease, box-shadow .28s ease;
}
html.wns-fx.wns-hover-products ul.products li.product:hover {
	transform: translateY(-5px);
	box-shadow: 0 16px 34px -14px rgba(0, 0, 0, .25);
}
html.wns-fx.wns-hover-products ul.products li.product img {
	transition: transform .5s ease;
}
html.wns-fx.wns-hover-products ul.products li.product:hover img {
	transform: scale(1.045);
}

/* ---------- Content image zoom on hover (opt-in) ---------- */
html.wns-fx.wns-img-zoom .entry-content img,
html.wns-fx.wns-img-zoom .elementor-widget-image img {
	transition: transform .5s ease;
}
html.wns-fx.wns-img-zoom .entry-content img:hover,
html.wns-fx.wns-img-zoom .elementor-widget-image img:hover {
	transform: scale(1.03);
}

/* ---------- Add-to-cart pulse ---------- */
html.wns-fx .wns-cart-pulse { animation: wnsPulse .5s ease; }
@keyframes wnsPulse {
	0%   { transform: scale(1); }
	40%  { transform: scale(1.12); }
	100% { transform: scale(1); }
}

/* ---------- Back to top ---------- */
.wns-back-to-top {
	position: fixed;
	right: 22px;
	bottom: 22px;
	width: 44px;
	height: 44px;
	border: 0;
	border-radius: 50%;
	background: var(--wns-accent, #b76e79);
	color: #fff;
	font-size: 19px;
	line-height: 1;
	cursor: pointer;
	opacity: 0;
	visibility: hidden;
	transform: translateY(10px);
	transition: opacity .3s ease, transform .3s ease, visibility .3s;
	box-shadow: 0 8px 20px -8px rgba(0, 0, 0, .35);
	z-index: 9990;
}
.wns-back-to-top.wns-show { opacity: 1; visibility: visible; transform: none; }
.wns-back-to-top:hover { filter: brightness(1.08); }

/* ---------- Accessibility: disable motion on request ---------- */
@media (prefers-reduced-motion: reduce) {
	html.wns-fx .wns-reveal,
	html.wns-fx.wns-page-fade body,
	html.wns-fx .wns-cart-pulse,
	.wns-progress > span,
	.wns-back-to-top {
		animation: none !important;
		transition: none !important;
		opacity: 1 !important;
		transform: none !important;
	}
}

/* ---------- Floating share bar ---------- */
.wns-share {
	position: fixed;
	left: 14px;
	top: 50%;
	transform: translateY(-50%);
	display: flex;
	flex-direction: column;
	gap: 8px;
	z-index: 9985;
}
.wns-share-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	border-radius: 50%;
	border: 0;
	cursor: pointer;
	background: #fff;
	color: var(--wns-accent, #b76e79);
	box-shadow: 0 4px 14px -4px rgba(0, 0, 0, .25);
	transition: transform .2s ease, background .2s ease, color .2s ease;
	text-decoration: none;
	position: relative;
}
.wns-share-btn svg { width: 20px; height: 20px; }
.wns-share-btn:hover {
	background: var(--wns-accent, #b76e79);
	color: #fff;
	transform: translateY(-2px) scale(1.05);
}
.wns-share-copy .wns-copied {
	position: absolute;
	left: calc(100% + 8px);
	top: 50%;
	transform: translateY(-50%);
	background: #222;
	color: #fff;
	font-size: 11px;
	line-height: 1;
	padding: 5px 8px;
	border-radius: 4px;
	white-space: nowrap;
	opacity: 0;
	pointer-events: none;
	transition: opacity .25s ease;
}
.wns-share-copy.wns-did-copy .wns-copied { opacity: 1; }

/* Mobile: horizontal bar pinned to the bottom */
@media (max-width: 782px) {
	.wns-share {
		left: 50%;
		top: auto;
		bottom: 14px;
		transform: translateX(-50%);
		flex-direction: row;
	}
	.wns-share-btn { width: 40px; height: 40px; }
	.wns-share-copy .wns-copied {
		left: 50%;
		top: auto;
		bottom: calc(100% + 8px);
		transform: translateX(-50%);
	}
	/* Keep back-to-top clear of the share bar on mobile */
	.wns-back-to-top { bottom: 68px; }
}

@media (prefers-reduced-motion: reduce) {
	.wns-share-btn { transition: none !important; }
}

/* ---------- Heading underline accent (animates in with reveal) ---------- */
html.wns-fx.wns-h-underline .entry-content h2,
html.wns-fx.wns-h-underline .elementor-widget-heading h2.elementor-heading-title {
	position: relative;
}
html.wns-fx.wns-h-underline .entry-content h2::after,
html.wns-fx.wns-h-underline .elementor-widget-heading h2.elementor-heading-title::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: -6px;
	height: 3px;
	width: 46px;
	background: var(--wns-accent, #b76e79);
	border-radius: 3px;
	transform: scaleX(0);
	transform-origin: left;
	transition: transform .5s ease .1s;
}
html.wns-fx.wns-h-underline .wns-in .elementor-heading-title::after,
html.wns-fx.wns-h-underline .entry-content h2:hover::after,
html.wns-fx.wns-h-underline .wns-reveal.wns-in h2::after {
	transform: scaleX(1);
}

/* ---------- Nav link underline slide ---------- */
html.wns-fx.wns-nav-underline .elementor-nav-menu a,
html.wns-fx.wns-nav-underline .elementor-widget-nav-menu a {
	position: relative;
}
html.wns-fx.wns-nav-underline .elementor-nav-menu a::after,
html.wns-fx.wns-nav-underline .elementor-widget-nav-menu a::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: -3px;
	height: 2px;
	width: 100%;
	background: var(--wns-accent, #b76e79);
	transform: scaleX(0);
	transform-origin: right;
	transition: transform .3s ease;
}
html.wns-fx.wns-nav-underline .elementor-nav-menu a:hover::after,
html.wns-fx.wns-nav-underline .elementor-widget-nav-menu a:hover::after {
	transform: scaleX(1);
	transform-origin: left;
}

/* ---------- Button sheen sweep (opt-in) ---------- */
html.wns-fx.wns-btn-sheen .elementor-button,
html.wns-fx.wns-btn-sheen .woocommerce a.button,
html.wns-fx.wns-btn-sheen .woocommerce button.button {
	position: relative;
	overflow: hidden;
}
html.wns-fx.wns-btn-sheen .elementor-button::before,
html.wns-fx.wns-btn-sheen .woocommerce a.button::before,
html.wns-fx.wns-btn-sheen .woocommerce button.button::before {
	content: "";
	position: absolute;
	top: 0;
	left: -120%;
	width: 60%;
	height: 100%;
	background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .45), transparent);
	transform: skewX(-20deg);
	transition: left .6s ease;
}
html.wns-fx.wns-btn-sheen .elementor-button:hover::before,
html.wns-fx.wns-btn-sheen .woocommerce a.button:hover::before,
html.wns-fx.wns-btn-sheen .woocommerce button.button:hover::before {
	left: 130%;
}

/* ---------- Image clip reveal (opt-in) ---------- */
html.wns-fx .wns-clip {
	clip-path: inset(0 100% 0 0);
	transition: clip-path .8s cubic-bezier(.22, .61, .36, 1);
}
html.wns-fx .wns-clip.wns-clip-in {
	clip-path: inset(0 0 0 0);
}

/* ---------- Share FAB (single floating button that expands) ---------- */
.wns-share.wns-share-fab {
	flex-direction: column-reverse;
	align-items: center;
	gap: 10px;
}
.wns-share-fab .wns-share-toggle {
	background: var(--wns-accent, #b76e79);
	color: #fff;
	z-index: 2;
}
.wns-share-fab .wns-share-toggle svg { transition: transform .3s ease; }
.wns-share-fab.wns-open .wns-share-toggle svg { transform: rotate(90deg); }
.wns-share-fab .wns-fab-items {
	display: flex;
	flex-direction: column;
	gap: 8px;
	align-items: center;
	max-height: 0;
	overflow: hidden;
	opacity: 0;
	transform: translateY(8px) scale(.9);
	transition: max-height .3s ease, opacity .3s ease, transform .3s ease;
}
.wns-share-fab.wns-open .wns-fab-items {
	max-height: 320px;
	opacity: 1;
	transform: none;
}
@media (max-width: 782px) {
	.wns-share.wns-share-fab { flex-direction: row-reverse; }
	.wns-share-fab .wns-fab-items { flex-direction: row; transform: translateX(8px) scale(.9); }
	.wns-share-fab.wns-open .wns-fab-items { max-height: none; }
}

/* ---------- Responsive safety net (non-breaking; does not affect sticky) ---------- */
html.wns-fx.wns-responsive-safe img,
html.wns-fx.wns-responsive-safe video,
html.wns-fx.wns-responsive-safe iframe,
html.wns-fx.wns-responsive-safe embed,
html.wns-fx.wns-responsive-safe object {
	max-width: 100%;
}
/* height:auto only inside content — NEVER on the header logo, whose size
   is controlled by the header's own CSS. */
html.wns-fx.wns-responsive-safe main img,
html.wns-fx.wns-responsive-safe article img,
html.wns-fx.wns-responsive-safe .elementor img,
html.wns-fx.wns-responsive-safe .entry-content img {
	height: auto;
}
html.wns-fx.wns-responsive-safe table {
	max-width: 100%;
}
/* Long words / URLs shouldn't force horizontal scroll on small screens */
@media (max-width: 782px) {
	html.wns-fx.wns-responsive-safe .entry-content {
		overflow-wrap: break-word;
		word-wrap: break-word;
	}
}
