/**
 * Soumm component layer.
 *
 * One class per component, no element selectors, no nesting beyond one level
 * of descendant — so nothing here can silently override base.css or layout.css.
 */

/* ====================================================================== */
/*  Eyebrow                                                               */
/* ====================================================================== */
.s-eyebrow {
	font-size: var(--soumm-fs-eyebrow);
	font-weight: 400;
	letter-spacing: var(--soumm-ls-eyebrow);
	text-transform: uppercase;
	color: var(--soumm-brass);
	margin: 0;
}

.s-eyebrow--muted {
	color: var(--soumm-muted);
}

/* ====================================================================== */
/*  Buttons                                                               */
/* ====================================================================== */
.s-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	background: var(--soumm-ink);
	color: var(--soumm-on-ink);
	font-size: var(--soumm-fs-btn);
	font-weight: var(--soumm-fw-btn);
	letter-spacing: var(--soumm-ls-nav);
	text-transform: uppercase;
	padding: 18px 34px;
	border: 1px solid var(--soumm-ink);
	border-radius: var(--soumm-radius-pill);
	transition: background var(--soumm-dur) var(--soumm-ease),
		border-color var(--soumm-dur) var(--soumm-ease),
		color var(--soumm-dur) var(--soumm-ease);
	cursor: pointer;
	text-align: center;
}

.s-btn:hover {
	background: var(--soumm-brass);
	border-color: var(--soumm-brass);
	color: var(--soumm-on-ink);
}

.s-btn:disabled,
.s-btn[aria-disabled="true"] {
	opacity: 0.45;
	pointer-events: none;
}

.s-btn--ghost {
	background: transparent;
	color: var(--soumm-ink);
	border-color: var(--soumm-ink);
}

.s-btn--ghost:hover {
	background: var(--soumm-ink);
	color: var(--soumm-on-ink);
	border-color: var(--soumm-ink);
}

.s-btn--on-ink {
	background: var(--soumm-on-ink);
	color: var(--soumm-ink);
	border-color: var(--soumm-on-ink);
}

.s-btn--on-ink:hover {
	background: var(--soumm-brass);
	border-color: var(--soumm-brass);
	color: var(--soumm-on-ink);
}

.s-btn--block {
	width: 100%;
}

/* Text link with a trailing arrow, used all through the design. */
.s-arrow {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	font-size: var(--soumm-fs-eyebrow);
	letter-spacing: var(--soumm-ls-nav);
	text-transform: uppercase;
	color: var(--soumm-muted);
}

.s-arrow:hover {
	color: var(--soumm-ink);
}

.s-arrow svg {
	flex: none;
	transition: transform var(--soumm-dur) var(--soumm-ease);
}

.s-arrow:hover svg {
	transform: translateX(4px);
}

/* ====================================================================== */
/*  Text blocks                                                           */
/* ====================================================================== */
.s-lede {
	font-size: var(--soumm-fs-body);
	line-height: var(--soumm-lh-body);
	color: var(--soumm-ink);
	max-width: var(--soumm-measure);
}

.s-body {
	font-size: var(--soumm-fs-body);
	line-height: var(--soumm-lh-body);
	max-width: var(--soumm-measure);
}

.s-body p + p {
	margin-top: 14px;
}

.s-small {
	font-size: var(--soumm-fs-small);
	line-height: 1.85;
}

.s-meta {
	font-size: var(--soumm-fs-meta);
	color: var(--soumm-muted);
	letter-spacing: 0.02em;
}

.s-quote {
	font-size: var(--soumm-fs-h3);
	line-height: 1.5;
	font-weight: 400;
	color: var(--soumm-ink);
	max-width: 22em;
}

/* ====================================================================== */
/*  Rules                                                                 */
/* ====================================================================== */
.s-rule {
	height: 1px;
	background: var(--soumm-line);
	border: 0;
}

/* ====================================================================== */
/*  Image slot — renders photography direction until a photo is assigned   */
/* ====================================================================== */
.s-img {
	position: relative;
	overflow: hidden;
	background: var(--soumm-surface-alt);
}

.s-img img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.s-img--4x5 {
	aspect-ratio: 4 / 5;
}

.s-img--16x9 {
	aspect-ratio: 16 / 9;
}

.s-img--1x1 {
	aspect-ratio: 1 / 1;
}

.s-img__placeholder {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: flex-end;
	gap: 10px;
	padding: clamp(16px, 2vw, 26px);
	background: var(--soumm-surface-alt);
	border: 1px solid var(--soumm-line);
}

.s-img__placeholder::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image:
		linear-gradient(var(--soumm-line) 1px, transparent 1px),
		linear-gradient(90deg, var(--soumm-line) 1px, transparent 1px);
	background-size: 44px 44px;
	opacity: 0.5;
	pointer-events: none;
}

.s-img__tag {
	position: relative;
	font-size: 10px;
	letter-spacing: var(--soumm-ls-eyebrow);
	text-transform: uppercase;
	color: var(--soumm-brass);
}

.s-img__note {
	position: relative;
	font-size: var(--soumm-fs-meta);
	line-height: 1.6;
	color: var(--soumm-muted);
	max-width: 30em;
}

/* ====================================================================== */
/*  Cards                                                                 */
/* ====================================================================== */
.s-card {
	display: flex;
	flex-direction: column;
	gap: 16px;
	min-width: 0;
}

.s-card__title {
	font-size: var(--soumm-fs-h4);
	line-height: 1.25;
	font-weight: var(--soumm-fw-head);
	color: var(--soumm-ink);
	transition: color var(--soumm-dur) var(--soumm-ease);
}

.s-card__body {
	font-size: var(--soumm-fs-small);
	line-height: 1.8;
	color: var(--soumm-ink);
}

.s-card__kind {
	font-size: 10px;
	letter-spacing: var(--soumm-ls-eyebrow);
	text-transform: uppercase;
	color: var(--soumm-brass);
}

.s-card--panel {
	background: var(--soumm-page);
	border: 1px solid var(--soumm-line);
	padding: clamp(24px, 3vw, 40px);
	gap: 14px;
}

.s-card--alt {
	background: var(--soumm-surface-alt);
	border: 1px solid var(--soumm-line);
	padding: clamp(24px, 3vw, 40px);
	gap: 14px;
}

.s-card__link {
	display: block;
	color: inherit;
}

.s-card__link:hover .s-card__title {
	color: var(--soumm-brass);
}

/* ====================================================================== */
/*  Accordion — product panels, FAQs, policies                            */
/* ====================================================================== */
.s-acc {
	border-top: 1px solid var(--soumm-line);
}

.s-acc__item {
	border-bottom: 1px solid var(--soumm-line);
}

.s-acc__trigger {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	width: 100%;
	padding: 24px 0;
	text-align: left;
	font-size: var(--soumm-fs-body);
	line-height: 1.5;
	color: var(--soumm-ink);
	transition: color var(--soumm-dur) var(--soumm-ease);
}

.s-acc__trigger:hover {
	color: var(--soumm-brass);
}

.s-acc__sign {
	flex: none;
	width: 14px;
	height: 14px;
	position: relative;
}

.s-acc__sign::before,
.s-acc__sign::after {
	content: "";
	position: absolute;
	background: currentColor;
	transition: transform var(--soumm-dur) var(--soumm-ease),
		opacity var(--soumm-dur) var(--soumm-ease);
}

.s-acc__sign::before {
	top: 6px;
	left: 0;
	right: 0;
	height: 1px;
}

.s-acc__sign::after {
	top: 0;
	left: 6px;
	width: 1px;
	height: 14px;
}

.s-acc__trigger[aria-expanded="true"] .s-acc__sign::after {
	transform: scaleY(0);
	opacity: 0;
}

.s-acc__panel {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows var(--soumm-dur) var(--soumm-ease);
}

.s-acc__panel[data-open="true"] {
	grid-template-rows: 1fr;
}

.s-acc__inner {
	overflow: hidden;
}

.s-acc__content {
	padding-bottom: 26px;
	font-size: var(--soumm-fs-small);
	line-height: 1.85;
	color: var(--soumm-ink);
	max-width: var(--soumm-measure);
}

/* ====================================================================== */
/*  Forms                                                                 */
/* ====================================================================== */
.s-field {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.s-label {
	font-size: 11px;
	letter-spacing: var(--soumm-ls-nav);
	text-transform: uppercase;
	color: var(--soumm-muted);
}

.s-input,
.s-select,
.s-textarea {
	width: 100%;
	background: var(--soumm-page);
	border: 1px solid var(--soumm-line);
	border-radius: 0;
	padding: 15px 18px;
	font-size: var(--soumm-fs-small);
	color: var(--soumm-ink);
	transition: border-color var(--soumm-dur) var(--soumm-ease);
}

.s-input::placeholder,
.s-textarea::placeholder {
	color: var(--soumm-muted);
}

.s-input:focus,
.s-select:focus,
.s-textarea:focus {
	border-color: var(--soumm-ink);
	outline-offset: 2px;
}

.s-textarea {
	min-height: 150px;
	resize: vertical;
	line-height: 1.75;
}

.s-select {
	appearance: none;
	background-repeat: no-repeat;
	background-position: right 18px center;
	background-size: 12px 8px;
	padding-right: 46px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' fill='none' stroke='%238B847A' stroke-width='1'%3E%3Cpath d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
}

/* Selectable card: size choice, contact topics, payment methods. */
.s-choice {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}

.s-choice__option {
	position: relative;
	display: inline-flex;
	align-items: center;
	gap: 10px;
	border: 1px solid var(--soumm-line);
	background: var(--soumm-page);
	padding: 14px 22px;
	font-size: var(--soumm-fs-small);
	color: var(--soumm-ink);
	cursor: pointer;
	transition: border-color var(--soumm-dur) var(--soumm-ease),
		background var(--soumm-dur) var(--soumm-ease);
}

.s-choice__option:hover {
	border-color: var(--soumm-muted);
}

.s-choice__option[aria-pressed="true"],
.s-choice__option[data-selected="true"] {
	border-color: var(--soumm-ink);
	background: var(--soumm-surface-alt);
}

.s-choice__option input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

/* Quantity stepper. */
.s-qty {
	display: inline-flex;
	align-items: center;
	border: 1px solid var(--soumm-line);
}

.s-qty button {
	width: 46px;
	height: 46px;
	display: grid;
	place-items: center;
	font-size: 16px;
	color: var(--soumm-ink);
	transition: background var(--soumm-dur) var(--soumm-ease);
}

.s-qty button:hover {
	background: var(--soumm-surface-alt);
}

.s-qty input {
	width: 46px;
	height: 46px;
	border: 0;
	text-align: center;
	background: transparent;
	font-size: var(--soumm-fs-small);
	font-variant-numeric: tabular-nums;
	-moz-appearance: textfield;
	appearance: textfield;
}

.s-qty input::-webkit-outer-spin-button,
.s-qty input::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

/* ====================================================================== */
/*  Reveal                                                                */
/* ====================================================================== */
/*
 * Removed. `.js .s-reveal` set opacity:0 and waited for an `.is-visible`
 * class that nothing in the theme ever added -- layout.js reveals the
 * `[data-reveal]` ATTRIBUTE, which is a different mechanism. layout.js also
 * puts `js` on <html>, so the rule armed itself on every load and left the
 * content permanently invisible: cart, checkout and my-account all render
 * through page.php, and their entire body sat at opacity 0. The comment here
 * used to claim it animated "from a visible resting state" -- only the hiding
 * half was ever built, so the effect was exactly inverted.
 *
 * Use `data-reveal` for reveals. It works.
 */

/* ====================================================================== */
/*  Tags                                                                  */
/* ====================================================================== */
.s-tag {
	display: inline-block;
	font-size: 10px;
	letter-spacing: var(--soumm-ls-eyebrow);
	text-transform: uppercase;
	color: var(--soumm-muted);
	border: 1px solid var(--soumm-line);
	border-radius: var(--soumm-radius-pill);
	padding: 6px 14px;
}

.s-tag--brass {
	color: var(--soumm-brass);
	border-color: var(--soumm-brass);
}

/* ====================================================================== */
/*  Assurance list — the three lines under the buy box                    */
/* ====================================================================== */
.s-assure {
	display: flex;
	flex-direction: column;
	gap: 10px;
	font-size: var(--soumm-fs-meta);
	color: var(--soumm-muted);
}

.s-assure li {
	display: flex;
	align-items: baseline;
	gap: 10px;
}

.s-assure li::before {
	content: "";
	flex: none;
	width: 4px;
	height: 4px;
	border-radius: 50%;
	background: var(--soumm-brass);
	transform: translateY(-2px);
}

/* ====================================================================== */
/*  Breadcrumb                                                            */
/* ====================================================================== */
.s-crumb {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px;
	font-size: 11px;
	letter-spacing: var(--soumm-ls-nav);
	text-transform: uppercase;
	color: var(--soumm-muted);
}

.s-crumb a:hover {
	color: var(--soumm-ink);
}

/* ====================================================================== */
/*  Pagination                                                            */
/* ====================================================================== */
.s-pager {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 8px;
	margin-top: var(--soumm-col-gap);
}

.s-pager .page-numbers {
	display: grid;
	place-items: center;
	min-width: 42px;
	height: 42px;
	padding: 0 12px;
	border: 1px solid var(--soumm-line);
	border-radius: var(--soumm-radius-pill);
	font-size: var(--soumm-fs-meta);
	font-variant-numeric: tabular-nums;
	color: var(--soumm-muted);
	transition: border-color var(--soumm-dur) var(--soumm-ease),
		color var(--soumm-dur) var(--soumm-ease);
}

.s-pager .page-numbers:hover {
	border-color: var(--soumm-ink);
	color: var(--soumm-ink);
}

.s-pager .page-numbers.current {
	background: var(--soumm-ink);
	border-color: var(--soumm-ink);
	color: var(--soumm-on-ink);
}
