/*
Theme Name: SWP Florist
Theme URI: https://scintillawpthemes.com/product/swp-florist/
Author: scintillawpthemes
Author URI: https://scintillawpthemes.com/
Description: SWP Florist is a soft, glass-panelled WordPress block theme for flower studios, florists, plant shops, wedding and event stylists, garden centres and gift boutiques. Built for the Site Editor and fully compatible with WooCommerce, it ships with ready-made shop, cart, checkout, account and single-product templates plus bouquet cards, an occasion ticker, subscription plans, a testimonials carousel and a journal loop made only from core WordPress blocks. Orchid and rose tones, Cormorant Garamond headings and self-hosted Jost body type give the layout a calm, editorial feel, while fluid typography, generous spacing and accessible colour contrast keep it readable on every screen. Global Styles, block patterns, block styles, template editing and translation-ready strings make the whole site editable without touching code.
Requires at least: 6.5
Tested up to: 7.0
Requires PHP: 7.4
Version: 1.0
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: swp-florist
Domain Path: /languages
Tags: blog, e-commerce, portfolio, one-column, two-columns, three-columns, block-patterns, block-styles, custom-colors, custom-logo, custom-menu, editor-style, featured-images, full-site-editing, grid-layout, sticky-post, template-editing, threaded-comments, translation-ready, wide-blocks
*/

/* Colours, type, spacing and block defaults live in theme.json.
   This file carries only what theme.json cannot express: the fixed backdrop,
   glass panels, positioning, pseudo-elements, motion and WooCommerce styling. */

/* ==========================================================================
   1. TOKENS + BASE
   ========================================================================== */

:root {
	--swp-pad-x: var(--wp--preset--spacing--gutter, clamp(24px, calc((100vw - 1320px) / 2), 300px));
	--swp-line: rgba(124, 87, 168, 0.16);
	--swp-line-strong: rgba(124, 87, 168, 0.35);
	--swp-glass: rgba(255, 255, 255, 0.74);
	--swp-glass-line: rgba(255, 255, 255, 0.9);
	--swp-shadow-soft: 0 24px 60px -28px rgba(83, 54, 120, 0.35);
	--swp-shadow-tile: 0 14px 34px -18px rgba(83, 54, 120, 0.28);
	--swp-r-sm: 12px;
	--swp-r-md: 20px;
	--swp-r-lg: 32px;
}

html {
	scroll-behavior: smooth;
	background-color: #f4e9f2;
}

body {
	overflow-x: hidden;
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
	background-color: #f4e9f2;
	background-image:
		radial-gradient(34% 20% at 30% 40%, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0) 70%),
		radial-gradient(28% 16% at 70% 58%, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0) 70%),
		radial-gradient(58% 44% at 12% 8%, #ffe3d2 0%, rgba(255, 227, 210, 0) 70%),
		radial-gradient(52% 40% at 88% 6%, #d9c6f2 0%, rgba(217, 198, 242, 0) 70%),
		radial-gradient(70% 55% at 78% 84%, #bfd9ee 0%, rgba(191, 217, 238, 0) 72%),
		radial-gradient(60% 46% at 14% 88%, #f7c9dd 0%, rgba(247, 201, 221, 0) 72%),
		linear-gradient(180deg, #f9e7ea 0%, #ebddf3 46%, #d9dff0 100%);
	background-attachment: fixed;
	background-repeat: no-repeat;
	background-size: cover;
}

h1,
h2,
h3,
h4,
h5,
h6 {
	overflow-wrap: break-word;
	word-break: normal;
}

img {
	max-width: 100%;
	height: auto;
}

:where(.wp-site-blocks) > * {
	margin-block-start: 0;
	margin-block-end: 0;
}

/* Visible keyboard focus everywhere. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
	outline: 2px solid var(--wp--preset--color--orchid-deep);
	outline-offset: 3px;
}

.screen-reader-text {
	border: 0;
	clip-path: inset(50%);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute !important;
	width: 1px;
	word-wrap: normal !important;
}

.screen-reader-text:focus {
	background-color: #fff;
	border-radius: 999px;
	box-shadow: var(--swp-shadow-tile);
	clip-path: none;
	color: var(--wp--preset--color--orchid-deep);
	display: block;
	font-size: 0.9rem;
	height: auto;
	left: 20px;
	line-height: normal;
	padding: 14px 24px;
	text-decoration: none;
	top: 20px;
	width: auto;
	z-index: 100000;
}

/* ==========================================================================
   2. SHARED SECTION FURNITURE
   ========================================================================== */

/* Full-bleed frosted panel. */
.swp-panel,
.wp-block-group.is-style-glass-panel {
	background: var(--swp-glass);
	-webkit-backdrop-filter: blur(18px);
	backdrop-filter: blur(18px);
	border-top: 1px solid var(--swp-glass-line);
	border-bottom: 1px solid var(--swp-glass-line);
}

/* Eyebrow: small caps label with a rule before it. */
.swp-eyebrow,
p.is-style-eyebrow {
	align-items: center;
	color: var(--wp--preset--color--orchid-deep);
	display: flex;
	font-size: var(--wp--preset--font-size--eyebrow);
	font-weight: 600;
	gap: 10px;
	letter-spacing: 0.24em;
	line-height: 1.4;
	margin: 0 0 16px;
	text-transform: uppercase;
}

.swp-eyebrow::before,
p.is-style-eyebrow::before {
	background: var(--wp--preset--color--orchid);
	content: "";
	flex: none;
	height: 1px;
	width: 26px;
}

.has-text-align-center .swp-eyebrow,
.swp-eyebrow.has-text-align-center,
p.is-style-eyebrow.has-text-align-center {
	justify-content: center;
}

.swp-eyebrow.has-text-align-center::after,
p.is-style-eyebrow.has-text-align-center::after {
	background: var(--wp--preset--color--orchid);
	content: "";
	flex: none;
	height: 1px;
	width: 26px;
}

.swp-eyebrow.is-light,
.swp-eyebrow.is-light::before,
.swp-eyebrow.is-light::after {
	color: #fff;
}

.swp-eyebrow.is-light::before,
.swp-eyebrow.is-light::after {
	background: var(--wp--preset--color--rose);
}

.swp-lead,
p.is-style-lead {
	font-size: var(--wp--preset--font-size--lead);
	max-width: 56ch;
}

.has-text-align-center .swp-lead,
.swp-lead.has-text-align-center {
	margin-left: auto;
	margin-right: auto;
}

/* Italic accent used inside headings. */
.swp-italic {
	color: var(--wp--preset--color--orchid-deep);
	font-style: italic;
	font-weight: 500;
}

.swp-italic-light {
	color: var(--wp--preset--color--petal);
	font-style: italic;
	font-weight: 500;
}

/* Split section heading: copy left, action right. */
.swp-section-head {
	align-items: flex-end;
	justify-content: space-between;
}

.swp-section-head > .wp-block-group:first-child {
	max-width: 640px;
}

/* Soft white card used by bouquets, quotes, tiles, steps. */
.swp-card,
.wp-block-group.is-style-card {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
}

/* Button variants. */
.wp-block-button__link {
	align-items: center;
	display: inline-flex;
	gap: 10px;
	transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease, color 0.25s ease;
}

.wp-block-button__link:hover {
	box-shadow: 0 20px 36px -12px rgba(124, 87, 168, 0.6);
	transform: translateY(-2px);
}

.wp-block-button.is-style-outline > .wp-block-button__link,
.wp-block-button.is-style-outline > .wp-block-button__link:not(.has-text-color) {
	background: rgba(255, 255, 255, 0.55);
	border-color: var(--swp-line-strong);
	box-shadow: none;
	color: var(--wp--preset--color--orchid-deep);
}

.wp-block-button.is-style-outline > .wp-block-button__link:hover {
	background: #fff;
	box-shadow: var(--swp-shadow-tile);
	color: var(--wp--preset--color--orchid-deep);
}

.swp-btn-small .wp-block-button__link {
	font-size: 12.8px;
	padding: 11px 22px;
}

.swp-btn-light .wp-block-button__link {
	background: #fff;
	background-image: none;
	box-shadow: var(--swp-shadow-tile);
	color: var(--wp--preset--color--orchid-deep);
}

.swp-btn-light .wp-block-button__link:hover {
	background: var(--wp--preset--color--petal);
	color: var(--wp--preset--color--plum);
}

/* Inline icon images sit on the text baseline, never stretch. */
.swp-icon img,
.swp-icon-sm img,
.swp-icon-lg img {
	display: block;
	height: auto;
}

.swp-icon {
	flex: none;
	width: 20px;
}

.swp-icon-sm {
	flex: none;
	width: 16px;
}

.swp-icon-lg {
	flex: none;
	width: 32px;
}

/* Check list used in the studio and subscription sections. */
.swp-check-list li,
.wp-block-list.is-style-checks li {
	list-style: none;
	padding-left: 34px;
	position: relative;
}

.swp-check-list,
.wp-block-list.is-style-checks {
	display: grid;
	gap: 16px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.swp-check-list li::before,
.wp-block-list.is-style-checks li::before {
	background-color: var(--wp--preset--color--orchid-deep);
	content: "";
	height: 20px;
	left: 0;
	-webkit-mask: url("assets/images/icons/check.svg") no-repeat center / contain;
	mask: url("assets/images/icons/check.svg") no-repeat center / contain;
	position: absolute;
	top: 3px;
	width: 20px;
}

.swp-check-list strong,
.wp-block-list.is-style-checks strong {
	color: var(--wp--preset--color--plum);
	font-weight: 500;
}

/* Petal separator. */
.wp-block-separator.is-style-petal {
	background: none;
	border: 0;
	height: 14px;
	-webkit-mask: url("assets/images/icons/flower.svg") no-repeat center / contain;
	mask: url("assets/images/icons/flower.svg") no-repeat center / contain;
	background-color: var(--wp--preset--color--rose-deep);
	width: 14px;
	margin-left: auto;
	margin-right: auto;
}

/* ==========================================================================
   3. HEADER
   ========================================================================== */

.swp-header {
	position: sticky;
	top: 0;
	z-index: 60;
}

.swp-nav {
	background: rgba(255, 255, 255, 0.55);
	border-bottom: 1px solid rgba(255, 255, 255, 0.75);
	-webkit-backdrop-filter: blur(16px);
	backdrop-filter: blur(16px);
	transition: background 0.35s ease, box-shadow 0.35s ease;
}

/* Frosted-to-solid nav on scroll, without any JavaScript. */
@supports (animation-timeline: scroll()) {
	.swp-nav {
		animation: swp-nav-scrolled linear both;
		animation-timeline: scroll();
		animation-range: 0 140px;
	}
}

@keyframes swp-nav-scrolled {
	to {
		background: rgba(255, 255, 255, 0.88);
		box-shadow: 0 16px 40px -22px rgba(83, 54, 120, 0.4);
	}
}

.swp-logo {
	align-items: center;
	display: flex;
	gap: 12px;
}

.swp-logo-mark,
.swp-logo-mark a {
	display: block;
	line-height: 0;
}

.swp-logo-mark img,
.wp-block-site-logo img {
	height: auto;
	max-width: 100%;
}

.swp-nav .swp-logo-mark img {
	width: clamp(118px, 12vw, 150px);
}

/* The supplied footer mark is white line art. Recolour it so it stays legible
   on the light frosted footer panel. */
.swp-footer-logo img {
	width: clamp(140px, 14vw, 170px);
}

.swp-logo .wp-block-site-title,
.swp-logo .wp-block-site-title a {
	line-height: 1;
	text-decoration: none;
}

.swp-logo .wp-block-site-title em {
	color: var(--wp--preset--color--orchid-deep);
	font-style: italic;
	font-weight: 500;
}

.swp-nav-phone {
	align-items: center;
	color: var(--wp--preset--color--plum);
	display: flex;
	font-size: 14px;
	font-weight: 500;
	gap: 8px;
}

.swp-nav-phone a {
	color: inherit;
}

/* Core navigation tuned to the reference underline behaviour. */
.swp-nav .wp-block-navigation .wp-block-navigation-item__content {
	padding: 4px 0;
	position: relative;
}

.swp-nav .wp-block-navigation .wp-block-navigation-item__content::after {
	background: var(--wp--preset--color--orchid);
	border-radius: 2px;
	bottom: 0;
	content: "";
	height: 2px;
	left: 0;
	position: absolute;
	transition: width 0.3s ease;
	width: 0;
}

.swp-nav .wp-block-navigation .wp-block-navigation-item__content:hover::after,
.swp-nav .wp-block-navigation .current-menu-item > .wp-block-navigation-item__content::after {
	width: 100%;
}

.swp-nav .wp-block-navigation__responsive-container.is-menu-open {
	background: rgba(255, 255, 255, 0.97);
	padding: 32px 24px;
}

.swp-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content::after {
	display: none;
}

.swp-nav .wp-block-navigation__responsive-container-open,
.swp-nav .wp-block-navigation__responsive-container-close {
	color: var(--wp--preset--color--plum);
}

/* backdrop-filter creates a containing block for fixed children, which would
   trap the mobile overlay inside the bar. Drop the blur while it is open. */
.swp-nav:has(.wp-block-navigation__responsive-container.is-menu-open) {
	-webkit-backdrop-filter: none;
	backdrop-filter: none;
}

/* Core switches the navigation overlay on at 600px. This theme has a phone
   number and two shop controls in the bar, so the overlay takes over at
   1200px instead. */
@media (max-width: 1199px) {
	.swp-nav .wp-block-navigation__responsive-container:not(.is-menu-open) {
		background-color: inherit;
		display: none;
	}

	.swp-nav .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}

	.swp-nav .wp-block-navigation__responsive-container.is-menu-open {
		display: flex;
		flex-direction: column;
		background-color: rgba(255, 255, 255, 0.97);
		padding: 32px 24px;
	}

	.swp-nav .wp-block-navigation__responsive-container-close {
		display: block;
	}

	/* Below the overlay breakpoint the menu is a single burger, so it moves to
	   the end of the bar: logo · account · cart · phone + CTA · menu. */
	.swp-header .swp-nav > .wp-block-navigation {
		flex: 0 0 auto;
		justify-content: flex-end;
		margin-inline: 0;
		order: 5;
	}

	.swp-header .swp-nav > .wp-block-woocommerce-customer-account {
		margin-inline-start: auto;
		order: 2;
	}

	.swp-header .swp-nav > .wp-block-woocommerce-mini-cart {
		order: 3;
	}

	.swp-header .swp-nav > .swp-nav-cta {
		order: 4;
	}

	/* With no shop blocks in the bar, the CTA group takes the free space. */
	.swp-header .swp-nav:not(:has(.wp-block-woocommerce-customer-account)) > .swp-nav-cta {
		margin-inline-start: auto;
	}
}

@media (min-width: 1200px) {
	.swp-nav .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: none;
	}
}

/* The phone number and order button are dropped on phones, where the bar only
   has room for the logo, the shop controls and the menu toggle. */
@media (max-width: 781px) {
	.swp-header .swp-nav > .swp-nav-cta {
		display: none;
	}

	.swp-header .swp-nav > .wp-block-woocommerce-customer-account {
		margin-inline-start: auto;
	}
}

/* ==========================================================================
   4. HERO
   ========================================================================== */

.swp-hero {
	overflow: hidden;
	position: relative;
}

.swp-hero::before {
	background: radial-gradient(circle, rgba(233, 175, 199, 0.35), rgba(233, 175, 199, 0) 70%);
	content: "";
	height: 460px;
	pointer-events: none;
	position: absolute;
	right: -140px;
	top: -140px;
	width: 460px;
}

.swp-hero > * {
	position: relative;
}

.swp-hero-stats {
	border-top: 1px solid var(--swp-line);
	padding-top: 28px;
}

.swp-hero-stats > .wp-block-group {
	flex: 1;
	padding-right: 24px;
}

.swp-hero-stats > .wp-block-group + .wp-block-group {
	border-left: 1px solid var(--swp-line);
	padding-left: 24px;
}

.swp-stat-n {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 30px;
	font-weight: 700;
	line-height: 1;
	margin: 0;
}

.swp-stat-n em {
	color: var(--wp--preset--color--orchid-deep);
	font-style: normal;
}

.swp-stat-t {
	font-size: 12.5px;
	letter-spacing: 0.04em;
	margin: 6px 0 0;
}

/* Arch photo with dashed ring and floating chips. */
.swp-hero-visual {
	justify-content: center;
	position: relative;
}

.swp-arch-wrap {
	margin-inline: auto;
	max-width: 400px;
	position: relative;
	width: 100%;
}

.swp-arch-wrap::after {
	border: 1px dashed rgba(124, 87, 168, 0.4);
	border-radius: 250px 250px 34px 34px;
	content: "";
	inset: -14px;
	pointer-events: none;
	position: absolute;
}

.swp-arch,
.wp-block-image.is-style-arch {
	background: linear-gradient(180deg, #e6d6f2, #f4d7e4);
	border: 1px solid rgba(255, 255, 255, 0.85);
	border-radius: 240px 240px 26px 26px;
	box-shadow: 0 34px 70px -30px rgba(83, 54, 120, 0.5);
	margin: 0;
	overflow: hidden;
}

.swp-arch img,
.wp-block-image.is-style-arch img {
	aspect-ratio: 4 / 5.1;
	display: block;
	object-fit: cover;
	transform: scale(1.02);
	transition: transform 6s ease;
	width: 100%;
}

.swp-hero-visual:hover .swp-arch img {
	transform: scale(1.08);
}

.swp-chip {
	background: rgba(255, 255, 255, 0.92);
	border: 1px solid #fff;
	border-radius: 999px;
	box-shadow: var(--swp-shadow-tile);
	color: var(--wp--preset--color--plum);
	font-size: 12.5px;
	font-weight: 500;
	padding: 10px 18px;
	position: absolute;
	z-index: 3;
}

.swp-chip p {
	margin: 0;
}

.swp-chip-a {
	animation: swp-bob 5s ease-in-out infinite;
	left: -26px;
	top: 64px;
}

.swp-chip-b {
	animation: swp-bob 6s ease-in-out 1.2s infinite;
	bottom: 96px;
	left: -10px;
}

@keyframes swp-bob {
	0%,
	100% {
		transform: translateY(0);
	}

	50% {
		transform: translateY(-10px);
	}
}

.swp-stamp {
	align-items: center;
	background: rgba(255, 255, 255, 0.9);
	border: 1px solid #fff;
	border-radius: 50%;
	bottom: 52px;
	box-shadow: var(--swp-shadow-tile);
	display: flex;
	height: 118px;
	justify-content: center;
	position: absolute;
	right: -8px;
	width: 118px;
	z-index: 3;
}

.swp-stamp-ring {
	inset: 0;
	margin: 0;
	position: absolute;
}

.swp-stamp-ring img {
	animation: swp-spin 16s linear infinite;
	width: 100%;
}

.swp-stamp-core {
	margin: 0;
	position: relative;
	width: 34px;
}

@keyframes swp-spin {
	to {
		transform: rotate(360deg);
	}
}

/* ==========================================================================
   5. OCCASION TICKER
   ========================================================================== */

.swp-ticker {
	overflow: hidden;
}

.swp-ticker-track {
	animation: swp-slide 30s linear infinite;
	display: flex;
	flex-wrap: nowrap;
	width: max-content;
}

.swp-ticker-set {
	align-items: center;
	display: flex;
	flex-wrap: nowrap;
	gap: 44px;
	padding-right: 44px;
}

.swp-ticker-set p {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 18.5px;
	font-style: italic;
	margin: 0;
	white-space: nowrap;
}

.swp-ticker-set .swp-ticker-sep {
	flex: none;
	margin: 0;
	width: 14px;
}

@keyframes swp-slide {
	to {
		transform: translateX(-50%);
	}
}

.swp-ticker:hover .swp-ticker-track {
	animation-play-state: paused;
}

/* ==========================================================================
   6. BOUQUET / PRODUCT CARDS
   ========================================================================== */

.swp-bq-grid {
	display: grid;
	gap: 26px;
	grid-template-columns: repeat(3, 1fr);
}

.swp-bq {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	position: relative;
	transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.swp-bq:hover {
	box-shadow: 0 26px 50px -22px rgba(83, 54, 120, 0.42);
	transform: translateY(-6px);
}

.swp-bq-media {
	background: linear-gradient(160deg, var(--wp--preset--color--lavender), var(--wp--preset--color--blush));
	overflow: hidden;
	position: relative;
}

.swp-bq-media figure,
.swp-bq-media .wp-block-image {
	margin: 0;
}

.swp-bq-media img {
	aspect-ratio: 1 / 1.02;
	display: block;
	object-fit: cover;
	transition: transform 0.8s ease;
	width: 100%;
}

.swp-bq:hover .swp-bq-media img {
	transform: scale(1.06);
}

.swp-bq-badge {
	background: rgba(255, 255, 255, 0.92);
	border-radius: 999px;
	color: var(--wp--preset--color--orchid-deep);
	font-size: 10.9px;
	font-weight: 600;
	left: 14px;
	letter-spacing: 0.12em;
	margin: 0;
	padding: 6px 14px;
	position: absolute;
	text-transform: uppercase;
	top: 14px;
	z-index: 2;
}

.swp-bq-body {
	display: flex;
	flex: 1;
	flex-direction: column;
	padding: 22px 24px 24px;
}

.swp-bq-body h3 {
	margin: 0 0 4px;
}

.swp-bq-stems {
	font-size: 13.2px;
	margin: 0 0 14px;
}

.swp-bq-foot {
	align-items: center;
	display: flex;
	justify-content: space-between;
	margin-top: auto;
}

.swp-bq-price {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 24px;
	font-weight: 700;
	line-height: 1.2;
	margin: 0;
}

.swp-bq-price small {
	color: var(--wp--preset--color--ink);
	font-family: var(--wp--preset--font-family--jost);
	font-size: 11.5px;
	font-weight: 400;
}

/* Circular "add" control: the label stays in the accessibility tree. */
.swp-bq-add .wp-block-button__link {
	background: #fff;
	background-image: none;
	border: 1px solid var(--swp-line-strong);
	border-radius: 50%;
	box-shadow: none;
	font-size: 0;
	height: 42px;
	padding: 0;
	position: relative;
	transition: 0.25s ease;
	width: 42px;
}

.swp-bq-add .wp-block-button__link::before {
	background-color: var(--wp--preset--color--orchid-deep);
	content: "";
	height: 16px;
	inset: 0;
	margin: auto;
	-webkit-mask: url("assets/images/icons/plus.svg") no-repeat center / contain;
	mask: url("assets/images/icons/plus.svg") no-repeat center / contain;
	position: absolute;
	transition: background-color 0.25s ease;
	width: 16px;
}

.swp-bq-add .wp-block-button__link:hover {
	background: var(--wp--preset--color--orchid);
	border-color: var(--wp--preset--color--orchid);
	transform: rotate(90deg);
}

.swp-bq-add .wp-block-button__link:hover::before {
	background-color: #fff;
}

/* ==========================================================================
   7. SUBSCRIPTION PANEL
   ========================================================================== */

.swp-sub-panel {
	border-bottom: 1px solid rgba(255, 255, 255, 0.4);
	border-top: 1px solid rgba(255, 255, 255, 0.4);
	overflow: hidden;
	position: relative;
}

.swp-sub-panel::before,
.swp-sub-panel::after {
	border-radius: 50%;
	content: "";
	pointer-events: none;
	position: absolute;
}

.swp-sub-panel::before {
	background: radial-gradient(circle, rgba(233, 175, 199, 0.4), transparent 70%);
	height: 380px;
	right: -120px;
	top: -140px;
	width: 380px;
}

.swp-sub-panel::after {
	background: radial-gradient(circle, rgba(255, 255, 255, 0.16), transparent 70%);
	bottom: -120px;
	height: 300px;
	left: -90px;
	width: 300px;
}

.swp-sub-panel > * {
	position: relative;
}

.swp-sub-note {
	align-items: center;
	color: rgba(255, 255, 255, 0.7);
	display: flex;
	font-size: 12.8px;
	gap: 10px;
	margin-top: 22px;
}

.swp-plan {
	align-items: center;
	background: rgba(255, 255, 255, 0.1);
	border: 1px solid rgba(255, 255, 255, 0.28);
	border-radius: var(--swp-r-sm);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	display: flex;
	gap: 18px;
	justify-content: space-between;
	padding: 18px 24px;
	transition: background 0.3s ease, transform 0.3s ease;
}

.swp-plan:hover {
	background: rgba(255, 255, 255, 0.18);
	transform: translateX(6px);
}

.swp-plan .swp-plan-name {
	color: #fff;
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 20px;
	font-weight: 600;
	line-height: 1.2;
	margin: 0;
}

.swp-plan .swp-plan-sub {
	color: rgba(255, 255, 255, 0.75);
	font-size: 12.8px;
	margin: 2px 0 0;
}

.swp-plan .swp-plan-price {
	color: var(--wp--preset--color--petal);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 24px;
	font-weight: 700;
	margin: 0;
	white-space: nowrap;
}

.swp-plan .swp-plan-price small {
	color: rgba(255, 255, 255, 0.7);
	font-family: var(--wp--preset--font-family--jost);
	font-size: 11.2px;
	font-weight: 400;
}

/* ==========================================================================
   8. TESTIMONIALS
   ========================================================================== */

.swp-quote {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
	display: flex;
	flex-direction: column;
	gap: 18px;
	padding: 30px 28px;
}

.swp-stars {
	display: flex;
	gap: 4px;
}

.swp-stars .wp-block-image {
	margin: 0;
	width: 15px;
}

.swp-quote-text {
	font-size: 14.8px;
	margin: 0;
}

.swp-quote-who {
	align-items: center;
	display: flex;
	gap: 14px;
	margin-top: auto;
}

.swp-avatar {
	border: 2px solid #fff;
	border-radius: 50%;
	box-shadow: 0 6px 14px -6px rgba(83, 54, 120, 0.4);
	flex: none;
	margin: 0;
	overflow: hidden;
	width: 46px;
}

.swp-avatar img {
	border-radius: 50%;
	display: block;
	width: 100%;
}

.swp-quote-name {
	color: var(--wp--preset--color--plum);
	font-size: 14.5px;
	font-weight: 500;
	margin: 0;
}

.swp-quote-role {
	font-size: 12px;
	margin: 0;
}

/* ---- carousel ---------------------------------------------------------- */

/* Room below the track for the pagination bullets, and to the sides so the
   card shadows are not clipped by the slider's own overflow:hidden. */
.swp-reviews-slider.swiper {
	margin-inline: -14px;
	padding: 6px 14px 52px;
	position: relative;
}

.swp-reviews-slider .swiper-wrapper {
	align-items: stretch;
	box-sizing: border-box;
}

.swp-reviews-slider .swiper-slide {
	box-sizing: border-box;
	display: flex;
	height: auto;
}

.swp-reviews-slider .swiper-slide > .swp-quote {
	flex: 1;
}

/* Before Swiper boots, show the first cards side by side rather than stacked. */
.swp-reviews-slider:not(.swiper-initialized) .swiper-wrapper {
	display: flex;
	gap: 24px;
}

.swp-reviews-slider:not(.swiper-initialized) .swiper-slide {
	flex: 0 0 100%;
}

@media (min-width: 600px) {
	.swp-reviews-slider:not(.swiper-initialized) .swiper-slide {
		flex: 0 0 calc(50% - 12px);
	}
}

@media (min-width: 1080px) {
	.swp-reviews-slider:not(.swiper-initialized) .swiper-slide {
		flex: 0 0 calc(33.333% - 16px);
	}
}

/* Bullets */
.swp-reviews-slider .swp-swiper-pagination.swiper-pagination-bullets {
	bottom: 14px;
	line-height: 0;
}

.swp-reviews-slider .swiper-pagination-bullet {
	background: var(--wp--preset--color--orchid-deep);
	height: 8px;
	opacity: 0.28;
	transition: opacity 0.25s ease, width 0.25s ease;
	width: 8px;
}

.swp-reviews-slider .swiper-pagination-bullet-active {
	border-radius: 999px;
	opacity: 1;
	width: 26px;
}

/* ==========================================================================
   9. BLOG · ARCHIVE · SINGLE
   ========================================================================== */

.swp-post-card {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
	display: flex;
	flex-direction: column;
	height: 100%;
	overflow: hidden;
	transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.swp-post-card:hover {
	box-shadow: 0 26px 50px -22px rgba(83, 54, 120, 0.42);
	transform: translateY(-6px);
}

.swp-post-card .wp-block-post-featured-image {
	margin: 0;
	overflow: hidden;
}

.swp-post-card .wp-block-post-featured-image img {
	aspect-ratio: 4 / 3;
	object-fit: cover;
	transition: transform 0.8s ease;
	width: 100%;
}

.swp-post-card:hover .wp-block-post-featured-image img {
	transform: scale(1.06);
}

.swp-post-card .wp-block-post-title {
	font-size: 21px;
}

.swp-post-meta {
	color: var(--wp--preset--color--ink);
	font-size: 12.5px;
}

.swp-post-meta .wp-block-post-terms a {
	color: var(--wp--preset--color--orchid-deep);
}

.swp-entry-content > * {
	margin-block-start: 26px;
}

.swp-entry-content > :first-child {
	margin-block-start: 0;
}

.wp-block-post-navigation-link a {
	color: var(--wp--preset--color--orchid-deep);
	font-weight: 500;
}

.wp-block-query-pagination {
	font-size: 14.5px;
}

.wp-block-query-pagination .page-numbers {
	align-items: center;
	border: 1px solid var(--swp-line);
	border-radius: 999px;
	display: inline-flex;
	height: 40px;
	justify-content: center;
	min-width: 40px;
	padding: 0 12px;
	transition: 0.25s ease;
}

.wp-block-query-pagination .page-numbers:hover,
.wp-block-query-pagination .page-numbers.current {
	background: var(--wp--preset--color--orchid);
	border-color: var(--wp--preset--color--orchid);
	color: #fff;
}

/* Comments and forms. */
.wp-block-post-comments-form input[type="text"],
.wp-block-post-comments-form input[type="email"],
.wp-block-post-comments-form input[type="url"],
.wp-block-post-comments-form textarea,
.wp-block-search__input,
.swp-field input,
.swp-field select,
.swp-field textarea {
	background: #fff;
	border: 1px solid rgba(124, 87, 168, 0.25);
	border-radius: var(--swp-r-sm);
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--jost);
	font-size: 15px;
	padding: 15px 18px;
	transition: border-color 0.25s ease, box-shadow 0.25s ease;
	width: 100%;
}

.wp-block-post-comments-form input:focus,
.wp-block-post-comments-form textarea:focus,
.wp-block-search__input:focus {
	border-color: var(--wp--preset--color--orchid);
	box-shadow: 0 0 0 4px rgba(155, 114, 201, 0.15);
	outline: none;
}

.wp-block-search__button {
	border-radius: 999px;
	padding: 15px 26px;
}

.wp-block-comment-author-name a {
	color: var(--wp--preset--color--plum);
	font-weight: 500;
}

/* ==========================================================================
   10. FOOTER
   ========================================================================== */

.swp-footer .swp-foot-h {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 18px;
	font-weight: 700;
	margin: 0 0 18px;
}

.swp-foot-links ul,
.swp-foot-links {
	list-style: none;
	margin: 0;
	padding: 0;
}

.swp-foot-links li {
	margin-bottom: 10px;
}

.swp-foot-links a {
	color: var(--wp--preset--color--ink);
	font-size: 14.5px;
	transition: color 0.2s ease;
}

.swp-foot-links a:hover {
	color: var(--wp--preset--color--orchid-deep);
}

.swp-foot-contact {
	display: grid;
	gap: 14px;
}

.swp-foot-contact .wp-block-group {
	align-items: flex-start;
}

.swp-foot-contact p {
	font-size: 14.5px;
	margin: 0;
}

.swp-socials {
	display: flex;
	gap: 10px;
}

.swp-socials .wp-block-social-links {
	gap: 10px;
}

.swp-socials .wp-block-social-link,
.swp-social-btn {
	align-items: center;
	background: #fff;
	border: 1px solid var(--swp-line-strong);
	border-radius: 50%;
	display: flex;
	height: 38px;
	justify-content: center;
	transition: 0.25s ease;
	width: 38px;
}

.swp-social-btn img {
	width: 15px;
}

.swp-social-btn:hover {
	background: var(--wp--preset--color--orchid);
	border-color: var(--wp--preset--color--orchid);
	transform: translateY(-3px);
}

.swp-social-btn:hover img {
	filter: brightness(0) invert(1);
}

.swp-foot-bar {
	border-top: 1px solid var(--swp-line);
	font-size: 12.8px;
}

.swp-foot-bar p {
	margin: 0;
}

/* ==========================================================================
   11. WOOCOMMERCE
   ========================================================================== */

.woocommerce-message,
.woocommerce-info,
.woocommerce-error,
.wc-block-components-notice-banner {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-left: 3px solid var(--wp--preset--color--orchid);
	border-radius: var(--swp-r-sm);
	box-shadow: var(--swp-shadow-tile);
	color: var(--wp--preset--color--plum);
	font-size: 14.5px;
	padding: 18px 22px;
}

.woocommerce-error {
	border-left-color: var(--wp--preset--color--rose-deep);
}

.woocommerce .button,
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.wc-block-components-button:not(.is-link),
.wp-block-woocommerce-cart .wc-block-cart__submit-button,
.wc-block-components-checkout-place-order-button {
	background-image: linear-gradient(120deg, #9b72c9 0%, #7c57a8 100%) !important;
	background-color: transparent;
	border: 1px solid transparent;
	border-radius: 999px;
	box-shadow: 0 14px 28px -12px rgba(124, 87, 168, 0.55);
	color: #fff !important;
	font-family: var(--wp--preset--font-family--jost);
	font-size: 13.8px;
	font-weight: 500;
	letter-spacing: 0.06em;
	padding: 15px 30px;
	transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.woocommerce .button:hover,
.woocommerce a.button:hover,
.woocommerce button.button:hover,
.wc-block-components-button:not(.is-link):hover {
	box-shadow: 0 20px 36px -12px rgba(124, 87, 168, 0.6);
	transform: translateY(-2px);
}

.woocommerce .button.alt,
.woocommerce button.button.alt {
	background-color: transparent;
}

/* --- product grid (product collection + legacy loop) --- */
.wc-block-product-template,
.woocommerce ul.products {
	gap: 26px;
}

.wc-block-product-template__responsive-wrapper .wc-block-product,
li.wc-block-product,
.woocommerce ul.products li.product {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	padding: 0 0 24px;
	position: relative;
	text-align: left;
	transition: transform 0.3s ease, box-shadow 0.3s ease;
}

li.wc-block-product:hover,
.woocommerce ul.products li.product:hover {
	box-shadow: 0 26px 50px -22px rgba(83, 54, 120, 0.42);
	transform: translateY(-6px);
}

li.wc-block-product .wc-block-components-product-image,
.woocommerce ul.products li.product a img {
	background: linear-gradient(160deg, var(--wp--preset--color--lavender), var(--wp--preset--color--blush));
	border-radius: 0;
	margin: 0 0 20px;
	overflow: hidden;
}

li.wc-block-product .wc-block-components-product-image img,
.woocommerce ul.products li.product a img {
	aspect-ratio: 1 / 1.02;
	display: block;
	object-fit: cover;
	transition: transform 0.8s ease;
	width: 100%;
}

li.wc-block-product:hover .wc-block-components-product-image img,
.woocommerce ul.products li.product:hover a img {
	transform: scale(1.06);
}

li.wc-block-product > *:not(.wc-block-components-product-image),
.woocommerce ul.products li.product > *:not(a:first-of-type):not(.woocommerce-LoopProduct-link) {
	padding-left: 24px;
	padding-right: 24px;
}

li.wc-block-product .wp-block-post-title,
.woocommerce ul.products li.product .woocommerce-loop-product__title {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 22px;
	font-weight: 600;
	line-height: 1.2;
	margin: 0 0 6px;
	text-align: left;
}

li.wc-block-product .wp-block-post-title a,
.woocommerce ul.products li.product .woocommerce-loop-product__title a {
	color: inherit;
}

li.wc-block-product .wc-block-components-product-price,
.woocommerce ul.products li.product .price {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 24px;
	font-weight: 700;
	margin: 0 0 16px;
	text-align: left;
}

li.wc-block-product .wc-block-components-product-price del,
.woocommerce ul.products li.product .price del {
	color: var(--wp--preset--color--ink);
	font-size: 17px;
	opacity: 0.7;
}

li.wc-block-product .wc-block-components-product-price ins,
.woocommerce ul.products li.product .price ins {
	text-decoration: none;
}

li.wc-block-product .wc-block-components-product-rating,
.woocommerce ul.products li.product .star-rating {
	margin-bottom: 10px;
}

li.wc-block-product .wp-block-button,
li.wc-block-product .wc-block-components-product-button {
	margin-top: auto;
	text-align: left;
}

li.wc-block-product .wp-block-button__link,
.woocommerce ul.products li.product a.button {
	display: inline-flex;
	margin: 0;
	width: auto;
}

/* Sale / stock badges. */
.wc-block-components-product-sale-badge,
.woocommerce span.onsale {
	background: rgba(255, 255, 255, 0.92);
	border-radius: 999px;
	color: var(--wp--preset--color--orchid-deep);
	font-family: var(--wp--preset--font-family--jost);
	font-size: 10.9px;
	font-weight: 600;
	left: 14px;
	letter-spacing: 0.12em;
	line-height: 1;
	margin: 0;
	min-height: 0;
	min-width: 0;
	padding: 8px 14px;
	position: absolute;
	right: auto;
	text-transform: uppercase;
	top: 14px;
	z-index: 3;
}

/* Bouquet-grid variant on the front page keeps the circular add control. */
.swp-bouquets li.wc-block-product .wc-block-components-product-button .wp-block-button__link {
	font-size: 0;
	height: 42px;
	padding: 0;
	position: relative;
	width: 42px;
	background-image: none !important;
	background-color: #fff;
	border: 1px solid var(--swp-line-strong);
	border-radius: 50%;
	box-shadow: none;
	color: transparent !important;
}

.swp-bouquets li.wc-block-product .wc-block-components-product-button .wp-block-button__link::before {
	background-color: var(--wp--preset--color--orchid-deep);
	content: "";
	height: 16px;
	inset: 0;
	margin: auto;
	-webkit-mask: url("assets/images/icons/plus.svg") no-repeat center / contain;
	mask: url("assets/images/icons/plus.svg") no-repeat center / contain;
	position: absolute;
	width: 16px;
}

.swp-bouquets li.wc-block-product .wc-block-components-product-button .wp-block-button__link:hover {
	background-color: var(--wp--preset--color--orchid);
	border-color: var(--wp--preset--color--orchid);
	transform: rotate(90deg);
}

.swp-bouquets li.wc-block-product .wc-block-components-product-button .wp-block-button__link:hover::before {
	background-color: #fff;
}

.swp-bouquets li.wc-block-product .wc-block-components-product-price {
	margin-bottom: 0;
}

.swp-bouquets li.wc-block-product .swp-bq-foot,
.swp-bouquets li.wc-block-product .wc-block-components-product-button {
	margin-top: auto;
}

/* --- single product --- */
.swp-shop .woocommerce-product-gallery,
.wp-block-woocommerce-product-image-gallery {
	border-radius: var(--swp-r-md);
	overflow: hidden;
}

.swp-shop .woocommerce-product-gallery img,
.wp-block-woocommerce-product-image-gallery img {
	border-radius: var(--swp-r-md);
}

.wp-block-woocommerce-product-image-gallery .flex-control-thumbs li img {
	border-radius: var(--swp-r-sm);
}

.wp-block-woocommerce-product-price .woocommerce-Price-amount,
.swp-shop .summary .price {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-weight: 700;
}

.wp-block-woocommerce-add-to-cart-form .quantity input.qty,
.woocommerce .quantity input.qty {
	background: #fff;
	border: 1px solid rgba(124, 87, 168, 0.25);
	border-radius: 999px;
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--jost);
	height: 52px;
	padding: 0 14px;
	text-align: center;
}

/* Block cart, mini cart and checkout share one stepper. The pill lives on the
   wrapper so the minus, value and plus sit inside a single control. */
.wc-block-components-quantity-selector {
	background: #fff;
	border: 1px solid rgba(124, 87, 168, 0.25);
	border-radius: 999px;
	box-shadow: none;
	display: flex;
	align-items: center;
	height: 40px;
	margin: 0;
	max-width: 116px;
	min-width: 108px;
	overflow: hidden;
	width: auto;
}

.wc-block-components-quantity-selector::after {
	display: none;
}

.wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input {
	background: transparent;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	color: var(--wp--preset--color--plum);
	flex: 1 1 auto;
	font-family: var(--wp--preset--font-family--jost);
	font-size: 14.5px;
	height: 100%;
	line-height: 1;
	margin: 0;
	min-width: 0;
	padding: 0;
	text-align: center;
	width: auto;
}

.wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input:focus {
	box-shadow: none;
	outline: none;
}

.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button {
	background: transparent;
	border: 0;
	border-radius: 0;
	color: var(--wp--preset--color--orchid-deep);
	cursor: pointer;
	filter: none;
	flex: none;
	font-size: 18px;
	height: 100%;
	line-height: 1;
	margin: 0;
	min-width: 0;
	opacity: 1;
	padding: 0;
	transition: background 0.2s ease, color 0.2s ease;
	width: 32px;
}

.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button:hover:not(:disabled) {
	background: var(--wp--preset--color--lavender);
	color: var(--wp--preset--color--plum);
}

.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button:disabled {
	color: var(--wp--preset--color--ink);
	cursor: default;
	opacity: 0.4;
}

/* The mini cart drawer is narrow, so keep the stepper compact there. */
.wc-block-mini-cart__drawer .wc-block-components-quantity-selector {
	height: 36px;
	max-width: 104px;
	min-width: 96px;
}

.wc-block-mini-cart__drawer .wc-block-components-quantity-selector .wc-block-components-quantity-selector__button {
	width: 30px;
}

.wc-block-cart-item__remove-link,
.wc-block-mini-cart__drawer .wc-block-cart-item__remove-link {
	color: var(--wp--preset--color--ink);
	font-size: 12.5px;
}

.wc-block-cart-item__remove-link:hover {
	color: var(--wp--preset--color--orchid-deep);
}

.woocommerce div.product form.cart {
	align-items: center;
	display: flex;
	flex-wrap: wrap;
	gap: 14px;
}

.woocommerce div.product .woocommerce-tabs ul.tabs {
	border-bottom: 1px solid var(--swp-line);
	margin: 0 0 24px;
	padding: 0;
}

.woocommerce div.product .woocommerce-tabs ul.tabs::before {
	border-bottom: 0;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li {
	background: transparent;
	border: 0;
	border-radius: 0;
	margin: 0 26px 0 0;
	padding: 0 0 12px;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li::before,
.woocommerce div.product .woocommerce-tabs ul.tabs li::after {
	display: none;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li a {
	color: var(--wp--preset--color--ink);
	font-family: var(--wp--preset--font-family--jost);
	font-size: 13.8px;
	font-weight: 500;
	letter-spacing: 0.06em;
	padding: 0;
	text-transform: uppercase;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li.active a {
	color: var(--wp--preset--color--orchid-deep);
}

.woocommerce div.product .woocommerce-tabs ul.tabs li.active {
	border-bottom: 2px solid var(--wp--preset--color--orchid);
}

.wp-block-woocommerce-product-details.is-style-minimal .wc-tabs-wrapper,
.wp-block-woocommerce-product-details .wc-tab {
	font-size: 15.5px;
}

/* Ratings. */
.woocommerce .star-rating span::before,
.wc-block-components-product-rating__stars span::before,
.wc-block-review-list-item__rating > div::before {
	color: #e3b23c;
}

/* --- cart, checkout, account panels --- */
.swp-shop .wp-block-woocommerce-cart,
.swp-shop .wp-block-woocommerce-checkout,
.swp-shop .woocommerce-account .woocommerce,
.swp-shop .woocommerce-order,
.wc-block-order-confirmation-totals,
.wc-block-order-confirmation-summary {
	font-size: 15.5px;
}

.wc-block-cart-items__row,
.woocommerce table.shop_table {
	border-color: var(--swp-line);
}

.wc-block-components-sidebar .wc-block-components-totals-wrapper,
.wc-block-cart__sidebar .wp-block-woocommerce-cart-order-summary-block,
.wc-block-checkout__sidebar .wc-block-components-totals-wrapper {
	background: #fff;
	border-radius: var(--swp-r-md);
}

.wc-block-cart__sidebar .wp-block-woocommerce-cart-order-summary-block,
.wc-block-checkout__sidebar .wc-block-components-order-summary {
	border: 1px solid rgba(255, 255, 255, 0.9);
	box-shadow: var(--swp-shadow-tile);
	padding: 26px 24px;
}

.wc-block-components-title,
.wc-block-components-checkout-step__title,
.woocommerce-account h2,
.woocommerce-account h3 {
	color: var(--wp--preset--color--plum) !important;
	font-family: var(--wp--preset--font-family--cormorant-garamond) !important;
	font-weight: 600 !important;
}

.wc-block-components-text-input input,
.wc-block-components-textarea,
.wc-block-components-select__container,
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.woocommerce form .form-row select,
.select2-container--default .select2-selection--single {
	background: #fff;
	border: 1px solid rgba(124, 87, 168, 0.25) !important;
	border-radius: var(--swp-r-sm) !important;
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--jost);
	font-size: 15px;
	min-height: 52px;
	padding: 14px 18px;
}

.wc-block-components-text-input.is-active label,
.wc-block-components-text-input input:focus,
.woocommerce form .form-row input.input-text:focus {
	border-color: var(--wp--preset--color--orchid) !important;
	box-shadow: 0 0 0 4px rgba(155, 114, 201, 0.15);
	outline: none;
}

.woocommerce-account nav.woocommerce-MyAccount-navigation ul {
	display: grid;
	gap: 6px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.woocommerce-account nav.woocommerce-MyAccount-navigation li {
	list-style: none;
	margin: 0;
	padding: 0;
}

.woocommerce-account nav.woocommerce-MyAccount-navigation li::marker {
	content: "";
}

.woocommerce-account .woocommerce-MyAccount-navigation li a {
	border: 1px solid transparent;
	border-radius: 999px;
	color: var(--wp--preset--color--plum);
	display: block;
	font-size: 14.5px;
	padding: 12px 20px;
	text-decoration: none;
	transition: 0.25s ease;
}

.woocommerce-account .woocommerce-MyAccount-navigation li a:hover,
.woocommerce-account .woocommerce-MyAccount-navigation li.is-active a {
	background: #fff;
	border-color: rgba(255, 255, 255, 0.9);
	box-shadow: var(--swp-shadow-tile);
	color: var(--wp--preset--color--orchid-deep);
}

.woocommerce-account .woocommerce-MyAccount-content {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
	padding: clamp(24px, 3vw, 38px);
}

.woocommerce table.shop_table,
.wc-block-order-confirmation-totals table {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
	overflow: hidden;
}

.woocommerce table.shop_table th {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--jost);
	font-weight: 500;
}

.wc-block-components-product-name,
.woocommerce table.shop_table td.product-name a {
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--cormorant-garamond);
	font-size: 19px;
	font-weight: 600;
}

.wc-block-breadcrumbs,
.woocommerce-breadcrumb {
	color: var(--wp--preset--color--ink);
	font-size: 12.8px;
	letter-spacing: 0.04em;
}

.wc-block-breadcrumbs a,
.woocommerce-breadcrumb a {
	color: var(--wp--preset--color--orchid-deep);
}

.woocommerce-ordering select,
.wc-block-catalog-sorting select {
	background: #fff;
	border: 1px solid rgba(124, 87, 168, 0.25);
	border-radius: 999px;
	color: var(--wp--preset--color--plum);
	font-family: var(--wp--preset--font-family--jost);
	font-size: 13.5px;
	padding: 11px 18px;
}

.woocommerce-result-count,
.wc-block-product-results-count {
	color: var(--wp--preset--color--ink);
	font-size: 13.5px;
	margin: 0;
}

.woocommerce nav.woocommerce-pagination ul {
	border: 0;
	display: flex;
	gap: 8px;
}

.woocommerce nav.woocommerce-pagination ul li {
	border: 0;
}

.woocommerce nav.woocommerce-pagination ul li a,
.woocommerce nav.woocommerce-pagination ul li span {
	background: #fff;
	border: 1px solid var(--swp-line);
	border-radius: 999px;
	color: var(--wp--preset--color--plum);
	min-width: 40px;
	padding: 10px 14px;
}

.woocommerce nav.woocommerce-pagination ul li a:hover,
.woocommerce nav.woocommerce-pagination ul li span.current {
	background: var(--wp--preset--color--orchid);
	border-color: var(--wp--preset--color--orchid);
	color: #fff;
}

/* Mini cart button in the header. */
.swp-cart-link {
	align-items: center;
	background: #fff;
	border: 1px solid var(--swp-line-strong);
	border-radius: 999px;
	color: var(--wp--preset--color--orchid-deep);
	display: inline-flex;
	font-size: 13px;
	font-weight: 500;
	gap: 8px;
	padding: 10px 18px;
	transition: 0.25s ease;
}

.swp-cart-link:hover {
	background: var(--wp--preset--color--orchid);
	color: #fff;
}

/* ==========================================================================
   12. RESPONSIVE
   ========================================================================== */

@media (max-width: 1080px) {
	.swp-bq-grid {
		grid-template-columns: repeat(2, 1fr);
	}

	.swp-hero-visual {
		order: -1;
	}
}

@media (max-width: 781px) {
	.swp-bq-grid {
		grid-template-columns: 1fr;
	}

	.swp-hero-stats {
		align-items: flex-start;
		flex-direction: column;
		gap: 18px;
	}

	.swp-hero-stats > .wp-block-group {
		width: 100%;
	}

	.swp-hero-stats > .wp-block-group + .wp-block-group {
		border-left: 0;
		padding-left: 0;
	}

	.swp-chip-a,
	.swp-chip-b {
		left: 4px;
	}

	.swp-stamp {
		height: 96px;
		right: 4px;
		width: 96px;
	}

	.swp-section-head {
		align-items: flex-start;
	}

	.swp-plan {
		align-items: flex-start;
		flex-direction: column;
		gap: 10px;
	}

}

@media (max-width: 600px) {
	.swp-arch-wrap::after {
		inset: -8px;
	}
}

/* ==========================================================================
   13. MOTION PREFERENCES
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}

	*,
	*::before,
	*::after {
		animation-duration: 0.001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.001ms !important;
	}

	.swp-ticker-track {
		transform: none;
	}
}

/* ==========================================================================
   14. PATTERN DETAILS
   ========================================================================== */

/* Arrow suffix on the primary call-to-action buttons. */
.swp-btn-arrow .wp-block-button__link::after {
	background-color: currentColor;
	content: "";
	display: inline-block;
	flex: none;
	height: 15px;
	-webkit-mask: url("assets/images/icons/arrow-right.svg") no-repeat center / contain;
	mask: url("assets/images/icons/arrow-right.svg") no-repeat center / contain;
	transition: transform 0.25s ease;
	width: 15px;
}

.swp-btn-arrow .wp-block-button__link:hover::after {
	transform: translateX(4px);
}

/* Subscription plan rows are whole-row links. */
.swp-plan-name a {
	color: #fff;
}

.swp-plan-name a:hover {
	color: var(--wp--preset--color--petal);
}

/* Post terms reused as an eyebrow label. */
.swp-eyebrow-terms {
	color: var(--wp--preset--color--orchid-deep);
	font-weight: 600;
	letter-spacing: 0.24em;
	text-transform: uppercase;
}

.swp-eyebrow-terms a {
	color: inherit;
}

/* Section banners shared by blog, page and shop templates. */
.swp-page-banner .wp-block-post-title,
.swp-page-banner .wp-block-query-title {
	margin-left: auto;
	margin-right: auto;
	max-width: 20ch;
}

.swp-404-mark {
	opacity: 0.9;
}

/* Ticker rows stay vertically centred even when the gap collapses. */
.swp-ticker-track,
.swp-ticker-set {
	align-items: center;
}

/* Social icons: bordered circles that fill on hover. */
.swp-socials.wp-block-social-links .wp-block-social-link {
	border: 1px solid var(--swp-line-strong);
	border-radius: 50%;
	transition: transform 0.25s ease, background-color 0.25s ease, border-color 0.25s ease;
}

.swp-socials.wp-block-social-links .wp-block-social-link:hover {
	background-color: var(--wp--preset--color--orchid) !important;
	border-color: var(--wp--preset--color--orchid);
	transform: translateY(-3px);
}

.swp-socials.wp-block-social-links .wp-block-social-link:hover .wp-block-social-link-anchor {
	color: #fff !important;
	fill: #fff !important;
}

/* Product page promise list. */
.swp-product-promise .swp-check-list li {
	font-size: 14.5px;
}

/* WooCommerce product collection grids follow the bouquet gutter. */
.wp-block-woocommerce-product-collection .wc-block-product-template {
	gap: 26px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.swp-shop-archive .wc-block-product-template,
.swp-related .wc-block-product-template,
.swp-bouquets .wc-block-product-template {
	gap: 26px;
}

/* Card grids fall back gracefully where grid layout is unavailable. */
.swp-post-card .wp-block-post-title a {
	color: var(--wp--preset--color--plum);
}

.swp-post-card .wp-block-post-title a:hover {
	color: var(--wp--preset--color--orchid-deep);
}

/* Featured image frame on single posts and pages. */
.swp-frame.wp-block-post-featured-image {
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-soft);
	overflow: hidden;
}

.swp-frame.wp-block-post-featured-image img {
	aspect-ratio: 16 / 9;
	object-fit: cover;
	width: 100%;
}

/* Entry content rhythm. */
.swp-entry-content h2,
.swp-entry-content h3,
.swp-entry-content h4 {
	margin-block-start: 40px;
}

.swp-entry-content ul,
.swp-entry-content ol {
	padding-left: 22px;
}

.swp-entry-content li {
	margin-bottom: 8px;
}

/* ==========================================================================
   15. WOOCOMMERCE PRODUCT GRID SIZING
   ========================================================================== */

/* WooCommerce sizes its responsive grid from a 1.25em gap. Widening the gap
   without restating the tracks makes a three-column grid wrap to two, so the
   tracks are declared explicitly here. */
.wc-block-product-template__responsive {
	gap: 26px;
}

.wc-block-product-template__responsive.columns-2,
.wc-block-product-template__responsive.columns-3,
.wc-block-product-template__responsive.columns-4,
.wc-block-product-template__responsive.columns-5,
.wc-block-product-template__responsive.columns-6 {
	grid-template-columns: minmax(0, 1fr);
}

@media (min-width: 601px) {
	.wc-block-product-template__responsive.columns-2,
	.wc-block-product-template__responsive.columns-3,
	.wc-block-product-template__responsive.columns-4,
	.wc-block-product-template__responsive.columns-5,
	.wc-block-product-template__responsive.columns-6 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 1081px) {
	.wc-block-product-template__responsive.columns-3 {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.wc-block-product-template__responsive.columns-4 {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}

	.wc-block-product-template__responsive.columns-5 {
		grid-template-columns: repeat(5, minmax(0, 1fr));
	}

	.wc-block-product-template__responsive.columns-6 {
		grid-template-columns: repeat(6, minmax(0, 1fr));
	}
}

/* Card internals align left like the bouquet cards. */
li.wc-block-product .wc-block-components-product-button,
li.wc-block-product .wc-block-components-product-price,
li.wc-block-product .wc-block-components-product-rating {
	text-align: left;
}

li.wc-block-product .wp-block-button.wc-block-components-product-button {
	align-items: flex-start;
	justify-content: flex-start;
	margin-top: auto;
	padding-top: 4px;
}

.swp-bouquets li.wc-block-product .wp-block-button.wc-block-components-product-button {
	padding-top: 0;
}

li.wc-block-product .wc-block-components-product-image {
	display: block;
	position: relative;
}

li.wc-block-product .wc-block-components-product-image a {
	display: block;
}

/* Loading/added states keep the pill shape. */
.wc-block-components-product-button .wp-block-button__link.loading,
.wc-block-components-product-button .wp-block-button__link.added {
	opacity: 0.85;
}

.wc-block-components-product-button .added_to_cart {
	color: var(--wp--preset--color--orchid-deep);
	display: inline-block;
	font-size: 12.8px;
	margin-top: 10px;
	text-decoration: underline;
}

/* Front-page bouquet grid: price and circular add control share a row. */
.swp-bouquets li.wc-block-product .swp-bq-foot {
	padding-left: 24px;
	padding-right: 24px;
}

.swp-bouquets li.wc-block-product .swp-bq-foot > * {
	margin: 0;
	padding: 0;
}

/* ==========================================================================
   16. WOOCOMMERCE HEADER BLOCKS + ACCOUNT
   ========================================================================== */

/* The nav bar is a plain left-aligned flex row. Auto margins on the menu push
   the logo hard left and pack everything after it into one right-hand cluster,
   which is where WooCommerce injects the account and mini-cart blocks. */
.swp-nav.wp-block-group {
	gap: 14px;
	justify-content: flex-start;
}

.swp-nav > .wp-block-navigation {
	margin-inline: auto;
}

.swp-nav > .wp-block-woocommerce-customer-account,
.swp-nav > .wp-block-woocommerce-mini-cart {
	flex: none;
	margin: 0;
}

.swp-nav > .swp-nav-cta {
	flex: none;
}

.swp-nav .wp-block-woocommerce-customer-account a,
.swp-nav .wc-block-mini-cart__button {
	align-items: center;
	background: #fff;
	border: 1px solid var(--swp-line-strong);
	border-radius: 999px;
	color: var(--wp--preset--color--orchid-deep);
	display: inline-flex;
	gap: 6px;
	height: 40px;
	justify-content: center;
	min-width: 40px;
	padding: 0 12px;
	transition: 0.25s ease;
}

.swp-nav .wp-block-woocommerce-customer-account a:hover,
.swp-nav .wc-block-mini-cart__button:hover {
	background: var(--wp--preset--color--orchid);
	border-color: var(--wp--preset--color--orchid);
	color: #fff;
}

.swp-nav .wc-block-customer-account__account-icon,
.swp-nav .wc-block-mini-cart__quantity-badge svg {
	height: 18px;
	width: 18px;
}

.swp-nav .wc-block-mini-cart__badge {
	background: var(--wp--preset--color--orchid);
	color: #fff;
}

/* Account: login card and dashboard split. */
.woocommerce-account .woocommerce {
	max-width: 100%;
}

.woocommerce-account form.login,
.woocommerce-account form.register,
.woocommerce-account form.lost_reset_password {
	background: #fff;
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: var(--swp-r-md);
	box-shadow: var(--swp-shadow-tile);
	padding: clamp(24px, 3vw, 34px);
}

.woocommerce-account #customer_login > .col-1:only-child,
.woocommerce-account .u-columns > .col-1:only-child {
	float: none;
	margin: 0 auto;
	max-width: 560px;
	width: 100%;
}

.woocommerce-account #customer_login.col2-set {
	display: grid;
	gap: 32px;
	grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}

.woocommerce-account #customer_login .col-1,
.woocommerce-account #customer_login .col-2 {
	float: none;
	width: 100%;
}

/* WooCommerce floats the account sidebar and content at 30%/68%. Those rules
   are more specific than a plain class, so the split is rebuilt here as a flex
   row with matching specificity. Login, register and password screens have no
   sidebar and fall through to the full-width branch below. */
body.woocommerce-account .woocommerce {
	align-items: flex-start;
	display: flex;
	flex-wrap: wrap;
	gap: 34px;
}

body.woocommerce-account .woocommerce > nav.woocommerce-MyAccount-navigation {
	flex: 0 0 260px;
	float: none;
	max-width: 100%;
	width: 260px;
}

body.woocommerce-account .woocommerce > .woocommerce-MyAccount-content {
	flex: 1 1 320px;
	float: none;
	min-width: 0;
	width: auto;
}

/* Everything else in the wrapper spans the full row. */
body.woocommerce-account .woocommerce > .woocommerce-notices-wrapper,
body.woocommerce-account .woocommerce > h2,
body.woocommerce-account .woocommerce > p,
body.woocommerce-account .woocommerce > form,
body.woocommerce-account .woocommerce > .u-columns,
body.woocommerce-account .woocommerce > #customer_login {
	flex: 1 1 100%;
	min-width: 0;
}

@media (max-width: 781px) {
	body.woocommerce-account .woocommerce > nav.woocommerce-MyAccount-navigation {
		flex: 1 1 100%;
		width: 100%;
	}
}

.woocommerce form .form-row label {
	color: var(--wp--preset--color--plum);
	font-size: 13px;
	font-weight: 500;
	letter-spacing: 0.04em;
}

.woocommerce form .form-row .required {
	color: var(--wp--preset--color--rose-deep);
}

/* Logged-out account screens sit in a centred column. */
body.woocommerce-account .woocommerce:not(:has(nav.woocommerce-MyAccount-navigation)) {
	gap: 18px;
	margin-left: auto;
	margin-right: auto;
	max-width: 560px;
}

.woocommerce-account .woocommerce h2 {
	font-size: 24px;
	margin-bottom: 18px;
}

.woocommerce-account form.login .woocommerce-form-login__submit {
	margin-right: 14px;
}

/* ==========================================================================
   17. RESPONSIVE GRID FALLBACKS
   ========================================================================== */

/* Core grid layouts with a fixed column count do not collapse on their own.
   Step them down so every card grid stays inside the viewport. */
@media (max-width: 1080px) {
	.swp-panel .wp-block-group.is-layout-grid,
	.swp-panel .wp-block-post-template.is-layout-grid,
	.swp-sub-panel .wp-block-group.is-layout-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 781px) {
	.swp-panel .wp-block-group.is-layout-grid,
	.swp-panel .wp-block-post-template.is-layout-grid,
	.swp-sub-panel .wp-block-group.is-layout-grid {
		grid-template-columns: minmax(0, 1fr);
	}
}

/* Flex rows that hold a constrained text block need to be allowed to shrink. */
.swp-quote-who > .wp-block-group,
.swp-plan > .wp-block-group,
.swp-logo > .wp-block-group,
.swp-nav-phone > *,
.swp-foot-contact .wp-block-group > * {
	min-width: 0;
}

.swp-quote-name,
.swp-quote-role,
.swp-plan-name,
.swp-plan-sub {
	overflow-wrap: anywhere;
}
