/*
 * host.yt Design System 2.0 — component layer
 * ---------------------------------------------------------------------------
 * Tokens live in <head> (#hostyt-tokens, hostyt/functions.php). This file only
 * consumes them. Never hardcode a colour here.
 *
 * Namespace: .hy-*   Modifiers: .hy-block--modifier   State: [data-state], :is()
 * Every component works in both themes because it only reads semantic tokens.
 */

/* ============================================================ LAYOUT ===== */

.hy-container {
	width: 100%;
	max-width: var(--hy-container);
	margin-inline: auto;
	padding-inline: var(--hy-container-pad);
}
@media (max-width: 1024px) { .hy-container { padding-inline: var(--hy-space-6); } }
@media (max-width: 640px)  { .hy-container { padding-inline: var(--hy-space-5); } }

.hy-section { padding-block: clamp(var(--hy-space-16), 8vw, var(--hy-space-24)); }
.hy-section--tight { padding-block: var(--hy-space-12); }
.hy-section--alt { background: var(--hy-bg-secondary); }
.hy-section--contrast {
	background: var(--hy-surface-1);
	border-block: 1px solid var(--hy-border-subtle);
}

.hy-grid { display: grid; gap: var(--hy-gutter); }
.hy-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.hy-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.hy-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.hy-grid--auto { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
@media (max-width: 1024px) {
	.hy-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.hy-grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
	.hy-grid--2, .hy-grid--3, .hy-grid--4 { grid-template-columns: minmax(0, 1fr); }
}

/* ==================================================== SECTION HEADER ===== */

.hy-eyebrow {
	display: inline-flex;
	align-items: center;
	gap: var(--hy-space-2);
	font: var(--hy-text-caption);
	letter-spacing: var(--hy-tracking-eyebrow);
	text-transform: uppercase;
	color: var(--hy-brand-500);
}
.hy-eyebrow::before {
	content: "";
	width: 6px; height: 6px;
	border-radius: 50%;
	background: currentColor;
	flex: none;
}
.hy-eyebrow--plain::before { display: none; }
.hy-eyebrow--muted { color: var(--hy-text-muted); }

.hy-section-header { max-width: 42rem; margin-bottom: var(--hy-space-12); }
.hy-section-header--center { margin-inline: auto; text-align: center; }
.hy-section-header__title {
	font: var(--hy-text-h2);
	letter-spacing: var(--hy-tracking-tight);
	color: var(--hy-text-primary);
	margin: var(--hy-space-3) 0 0;
}
.hy-section-header__lede {
	font: var(--hy-text-body-lg);
	color: var(--hy-text-secondary);
	margin: var(--hy-space-4) 0 0;
	text-wrap: pretty;
}

/* Restrained brand emphasis inside a headline. One phrase, never half of it. */
.hy-accent { color: var(--hy-brand-500); }

/* ============================================================ BUTTON ===== */

.hy-btn {
	--_bg: transparent;
	--_fg: var(--hy-text-primary);
	--_bd: transparent;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--hy-space-2);
	min-height: var(--hy-control-h);
	padding: 0 var(--hy-space-5);
	border: 1px solid var(--_bd);
	border-radius: var(--hy-radius-sm);
	background: var(--_bg);
	color: var(--_fg);
	font: var(--hy-text-body-sm);
	font-weight: 600;
	text-decoration: none;
	cursor: pointer;
	white-space: nowrap;
	transition:
		background var(--hy-dur-fast) var(--hy-ease),
		border-color var(--hy-dur-fast) var(--hy-ease),
		color var(--hy-dur-fast) var(--hy-ease),
		transform var(--hy-dur-fast) var(--hy-ease);
}
.hy-btn:active { transform: translateY(1px); }

.hy-btn--primary   { --_bg: var(--hy-brand-500); --_fg: var(--hy-brand-contrast); --_bd: var(--hy-brand-500); }
.hy-btn--primary:hover { --_bg: var(--hy-brand-600); --_bd: var(--hy-brand-600); }

.hy-btn--secondary { --_bg: var(--hy-surface-1); --_fg: var(--hy-text-primary); --_bd: var(--hy-border-default); }
.hy-btn--secondary:hover { --_bg: var(--hy-surface-2); --_bd: var(--hy-border-strong); }

.hy-btn--tertiary  { --_bg: var(--hy-surface-2); --_fg: var(--hy-text-primary); }
.hy-btn--tertiary:hover { --_bg: var(--hy-surface-3); }

.hy-btn--ghost     { --_fg: var(--hy-text-secondary); padding-inline: var(--hy-space-3); }
.hy-btn--ghost:hover { --_fg: var(--hy-text-primary); --_bg: var(--hy-surface-2); }

.hy-btn--danger    { --_bg: var(--hy-danger); --_fg: #fff; --_bd: var(--hy-danger); }
.hy-btn--danger:hover { filter: brightness(.92); }

.hy-btn--sm { min-height: var(--hy-control-h-sm); padding-inline: var(--hy-space-4); }
.hy-btn--lg { min-height: 52px; padding-inline: var(--hy-space-6); font-size: 1rem; }
.hy-btn--block { width: 100%; }

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

/* The label is hidden with transparent text, so the spinner cannot rely on
   currentColor — it reads the variant's own foreground variable instead. */
.hy-btn[data-loading] { pointer-events: none; color: transparent; position: relative; }
.hy-btn[data-loading]::after {
	content: "";
	position: absolute;
	width: 16px; height: 16px;
	border: 2px solid var(--_fg);
	border-top-color: transparent;
	border-radius: 50%;
	animation: hy-spin .6s linear infinite;
}
@keyframes hy-spin { to { transform: rotate(360deg); } }

/* Arrow affordance used across the mockups. */
.hy-btn__arrow { transition: transform var(--hy-dur) var(--hy-ease); }
.hy-btn:hover .hy-btn__arrow { transform: translateX(2px); }

.hy-icon-btn {
	display: inline-grid;
	place-items: center;
	width: var(--hy-control-h-sm);
	height: var(--hy-control-h-sm);
	border: 1px solid var(--hy-border-default);
	border-radius: var(--hy-radius-sm);
	background: var(--hy-surface-1);
	color: var(--hy-text-secondary);
	cursor: pointer;
	transition: color var(--hy-dur-fast) var(--hy-ease), border-color var(--hy-dur-fast) var(--hy-ease);
}
.hy-icon-btn:hover { color: var(--hy-text-primary); border-color: var(--hy-border-strong); }

/* ============================================================== CARD ===== */

.hy-card {
	background: var(--hy-surface-1);
	border: 1px solid var(--hy-border-subtle);
	border-radius: var(--hy-radius-lg);
	padding: var(--hy-space-6);
	box-shadow: var(--hy-shadow-sm);
	transition: border-color var(--hy-dur) var(--hy-ease), box-shadow var(--hy-dur) var(--hy-ease);
}
.hy-card--interactive:hover {
	border-color: var(--hy-border-strong);
	box-shadow: var(--hy-shadow-md);
}
.hy-card--flat { box-shadow: none; }
.hy-card--inset { background: var(--hy-surface-2); border-color: transparent; }
.hy-card__title { font: var(--hy-text-h4); color: var(--hy-text-primary); margin: 0 0 var(--hy-space-2); }
.hy-card__text  { font: var(--hy-text-body-sm); color: var(--hy-text-secondary); margin: 0; }

.hy-feature-card__icon {
	display: inline-grid;
	place-items: center;
	width: 40px; height: 40px;
	margin-bottom: var(--hy-space-4);
	border-radius: var(--hy-radius-sm);
	background: var(--hy-brand-tint);
	color: var(--hy-brand-500);
}
.hy-feature-card__icon svg { width: 20px; height: 20px; stroke-width: 1.75; }

/* ============================================================ METRIC ===== */

.hy-metric {
	padding: var(--hy-space-4) var(--hy-space-5);
	border: 1px solid var(--hy-border-subtle);
	border-radius: var(--hy-radius-md);
	background: var(--hy-surface-2);
}
.hy-metric__value {
	display: block;
	font-size: clamp(1.5rem, 1.2rem + 1vw, 1.875rem);
	font-weight: 700;
	letter-spacing: var(--hy-tracking-tight);
	color: var(--hy-text-primary);
	font-variant-numeric: tabular-nums;
}
.hy-metric__label { display: block; font: var(--hy-text-body-sm); color: var(--hy-text-muted); margin-top: 2px; }

/* ============================================================ STATUS ===== */
/* One status language sitewide. Dot + label. No oversized bright pills. */

.hy-status {
	display: inline-flex;
	align-items: center;
	gap: var(--hy-space-2);
	font: var(--hy-text-body-sm);
	font-weight: 500;
	color: var(--hy-text-secondary);
}
.hy-status__dot {
	width: 7px; height: 7px;
	border-radius: 50%;
	background: var(--hy-text-muted);
	flex: none;
}
.hy-status[data-status="live"] .hy-status__dot,
.hy-status[data-status="operational"] .hy-status__dot,
.hy-status[data-status="active"] .hy-status__dot { background: var(--hy-success); }
.hy-status[data-status="syncing"] .hy-status__dot { background: var(--hy-info); }
.hy-status[data-status="maintenance"] .hy-status__dot,
.hy-status[data-status="degraded"] .hy-status__dot { background: var(--hy-warning); }
.hy-status[data-status="outage"] .hy-status__dot { background: var(--hy-danger); }

/* Extremely subtle — a heartbeat, not a strobe. Disabled under reduced-motion
   by the global token stylesheet. The ring tint follows the dot's status, so a
   degraded service does not pulse green. */
.hy-status--pulse .hy-status__dot {
	--_pulse: var(--hy-success-tint);
	animation: hy-pulse 2.4s var(--hy-ease) infinite;
}
.hy-status--pulse[data-status="syncing"] .hy-status__dot { --_pulse: rgba(138, 149, 157, .18); }
.hy-status--pulse[data-status="maintenance"] .hy-status__dot,
.hy-status--pulse[data-status="degraded"] .hy-status__dot { --_pulse: var(--hy-warning-tint); }
.hy-status--pulse[data-status="outage"] .hy-status__dot { --_pulse: var(--hy-danger-tint); }
@keyframes hy-pulse {
	0%, 100% { box-shadow: 0 0 0 0 var(--_pulse); }
	50%      { box-shadow: 0 0 0 4px transparent; }
}

.hy-status--tinted {
	padding: 3px var(--hy-space-3);
	border-radius: var(--hy-radius-pill);
	background: var(--hy-surface-2);
	font: var(--hy-text-caption);
	text-transform: uppercase;
	letter-spacing: var(--hy-tracking-eyebrow);
}
.hy-status--tinted[data-status="live"],
.hy-status--tinted[data-status="operational"],
.hy-status--tinted[data-status="active"] { background: var(--hy-success-tint); color: var(--hy-success); }
.hy-status--tinted[data-status="degraded"],
.hy-status--tinted[data-status="maintenance"] { background: var(--hy-warning-tint); color: var(--hy-warning); }
.hy-status--tinted[data-status="outage"] { background: var(--hy-danger-tint); color: var(--hy-danger); }

/* ============================================================= BADGE ===== */

.hy-badge {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 2px var(--hy-space-2);
	border: 1px solid var(--hy-border-default);
	border-radius: var(--hy-radius-xs);
	background: var(--hy-surface-2);
	font: var(--hy-text-caption);
	color: var(--hy-text-secondary);
}
.hy-badge--brand   { background: var(--hy-brand-tint);   border-color: transparent; color: var(--hy-brand-500); }
.hy-badge--success { background: var(--hy-success-tint); border-color: transparent; color: var(--hy-success); }
.hy-badge--warning { background: var(--hy-warning-tint); border-color: transparent; color: var(--hy-warning); }

/* ==================================================== INFRA / STATUS PANEL */

.hy-panel {
	background: var(--hy-surface-1);
	border: 1px solid var(--hy-border-subtle);
	border-radius: var(--hy-radius-xl);
	overflow: hidden;
	box-shadow: var(--hy-shadow-md);
}
.hy-panel__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--hy-space-4);
	padding: var(--hy-space-5) var(--hy-space-6);
	border-bottom: 1px solid var(--hy-border-subtle);
}
.hy-panel__title { font: var(--hy-text-h4); color: var(--hy-text-primary); margin: 0; }
.hy-panel__body { padding: var(--hy-space-6); }
.hy-panel__foot {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--hy-space-4);
	padding: var(--hy-space-4) var(--hy-space-6);
	border-top: 1px solid var(--hy-border-subtle);
	font: var(--hy-text-body-sm);
	color: var(--hy-text-muted);
}

.hy-panel__metrics {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: var(--hy-space-3);
	margin-bottom: var(--hy-space-5);
}
@media (max-width: 480px) { .hy-panel__metrics { grid-template-columns: minmax(0, 1fr); } }

.hy-service-row {
	display: flex;
	align-items: center;
	gap: var(--hy-space-4);
	padding: var(--hy-space-3) 0;
	border-top: 1px solid var(--hy-border-subtle);
}
.hy-service-row:first-child { border-top: 0; }
.hy-service-row__icon {
	display: grid; place-items: center;
	width: 32px; height: 32px;
	border-radius: var(--hy-radius-xs);
	background: var(--hy-surface-2);
	color: var(--hy-text-secondary);
	flex: none;
}
.hy-service-row__icon svg { width: 16px; height: 16px; stroke-width: 1.75; }
.hy-service-row__body { min-width: 0; flex: 1; }
.hy-service-row__name { display: block; font-weight: 600; font-size: .9375rem; color: var(--hy-text-primary); }
.hy-service-row__meta { display: block; font: var(--hy-text-body-sm); color: var(--hy-text-muted); }

/* ======================================================= TRUST STRIP ===== */

.hy-trust {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
	gap: var(--hy-space-2);
	border: 1px solid var(--hy-border-subtle);
	border-radius: var(--hy-radius-lg);
	background: var(--hy-surface-1);
	overflow: hidden;
}
.hy-trust__item {
	display: flex;
	align-items: center;
	gap: var(--hy-space-3);
	padding: var(--hy-space-5) var(--hy-space-6);
	border-left: 1px solid var(--hy-border-subtle);
}
.hy-trust__item:first-child { border-left: 0; }
@media (max-width: 640px) {
	.hy-trust__item { border-left: 0; border-top: 1px solid var(--hy-border-subtle); }
	.hy-trust__item:first-child { border-top: 0; }
}
.hy-trust__icon { color: var(--hy-brand-500); flex: none; }
.hy-trust__icon svg { width: 20px; height: 20px; stroke-width: 1.75; }
.hy-trust__value { display: block; font-weight: 600; font-size: .9375rem; color: var(--hy-text-primary); }
.hy-trust__label { display: block; font: var(--hy-text-body-sm); color: var(--hy-text-muted); }

/* ============================================================ PRICING ==== */

.hy-price-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
	gap: var(--hy-gutter);
	align-items: start;
}

.hy-price {
	display: flex;
	flex-direction: column;
	gap: var(--hy-space-4);
	padding: var(--hy-space-6);
	background: var(--hy-surface-1);
	border: 1px solid var(--hy-border-subtle);
	border-radius: var(--hy-radius-lg);
	box-shadow: var(--hy-shadow-sm);
	position: relative;
	transition: border-color var(--hy-dur) var(--hy-ease), box-shadow var(--hy-dur) var(--hy-ease);
}
.hy-price:hover { border-color: var(--hy-border-strong); }

/* Recommended: a green border and a whisper of tint. Not a glowing slab. */
.hy-price--recommended {
	border-color: var(--hy-brand-500);
	background:
		linear-gradient(var(--hy-brand-tint), var(--hy-brand-tint)),
		var(--hy-surface-1);
}
.hy-price__flag {
	position: absolute;
	top: 0; left: var(--hy-space-6);
	transform: translateY(-50%);
	padding: 3px var(--hy-space-3);
	border-radius: var(--hy-radius-pill);
	background: var(--hy-brand-500);
	color: var(--hy-brand-contrast);
	font: var(--hy-text-caption);
	letter-spacing: var(--hy-tracking-eyebrow);
	text-transform: uppercase;
	white-space: nowrap;
}

.hy-price__name { font: var(--hy-text-h4); color: var(--hy-text-primary); margin: 0; }
.hy-price__desc { font: var(--hy-text-body-sm); color: var(--hy-text-muted); margin: 0; }

.hy-price__amount {
	display: flex;
	align-items: baseline;
	gap: 6px;
	font-variant-numeric: tabular-nums;
}
.hy-price__figure {
	font-size: clamp(1.75rem, 1.4rem + 1.2vw, 2.25rem);
	font-weight: 700;
	letter-spacing: var(--hy-tracking-tight);
	color: var(--hy-text-primary);
}
.hy-price__period { font: var(--hy-text-body-sm); color: var(--hy-text-muted); }

/* Renewal price is never hidden behind a tooltip. It sits under the price. */
.hy-price__renewal {
	font: var(--hy-text-body-sm);
	color: var(--hy-text-muted);
	margin: 0;
}
.hy-price__renewal strong { color: var(--hy-text-secondary); font-weight: 600; }

.hy-price__features { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--hy-space-3); }
.hy-price__features li {
	display: flex;
	align-items: flex-start;
	gap: var(--hy-space-2);
	font: var(--hy-text-body-sm);
	color: var(--hy-text-secondary);
}
.hy-price__features li::before {
	content: "";
	flex: none;
	width: 16px; height: 16px;
	margin-top: 2px;
	background: currentColor;
	color: var(--hy-brand-500);
	-webkit-mask: var(--hy-check) center / 16px 16px no-repeat;
	        mask: var(--hy-check) center / 16px 16px no-repeat;
}
:root {
	--hy-check: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>');
}
.hy-price__cta { margin-top: auto; }

/* Billing-interval switch */
.hy-toggle-group {
	display: inline-flex;
	padding: 3px;
	gap: 3px;
	border: 1px solid var(--hy-border-default);
	border-radius: var(--hy-radius-sm);
	background: var(--hy-surface-2);
}
.hy-toggle-group button {
	min-height: var(--hy-control-h-sm);
	padding: 0 var(--hy-space-4);
	border: 0;
	border-radius: var(--hy-radius-xs);
	background: transparent;
	color: var(--hy-text-secondary);
	font: var(--hy-text-body-sm);
	font-weight: 600;
	cursor: pointer;
	transition: background var(--hy-dur-fast) var(--hy-ease), color var(--hy-dur-fast) var(--hy-ease);
}
.hy-toggle-group button[aria-pressed="true"] {
	background: var(--hy-surface-1);
	color: var(--hy-text-primary);
	box-shadow: var(--hy-shadow-sm);
}

/* ============================================================== TABLE ==== */

.hy-table-wrap { overflow-x: auto; border: 1px solid var(--hy-border-subtle); border-radius: var(--hy-radius-lg); }
.hy-table {
	width: 100%;
	min-width: 640px;
	border-collapse: collapse;
	font: var(--hy-text-body-sm);
	background: var(--hy-surface-1);
}
.hy-table th,
.hy-table td { padding: var(--hy-space-3) var(--hy-space-5); text-align: left; }
.hy-table thead th {
	position: sticky; top: 0;
	background: var(--hy-surface-2);
	color: var(--hy-text-muted);
	font: var(--hy-text-caption);
	text-transform: uppercase;
	letter-spacing: var(--hy-tracking-eyebrow);
	border-bottom: 1px solid var(--hy-border-default);
}
.hy-table tbody tr + tr td { border-top: 1px solid var(--hy-border-subtle); }
.hy-table td { color: var(--hy-text-secondary); }
.hy-table th[scope="row"] { color: var(--hy-text-primary); font-weight: 600; }
.hy-table tbody tr:hover td { background: var(--hy-surface-2); }
.hy-table [data-yes] { color: var(--hy-brand-500); }
.hy-table [data-no]  { color: var(--hy-text-muted); }

/* ============================================================= FORMS ===== */

.hy-field { display: grid; gap: 6px; }
.hy-label { font: var(--hy-text-body-sm); font-weight: 500; color: var(--hy-text-secondary); }
.hy-input,
.hy-select,
.hy-textarea {
	width: 100%;
	min-height: var(--hy-control-h);
	padding: 0 var(--hy-space-4);
	border: 1px solid var(--hy-border-default);
	border-radius: var(--hy-radius-sm);
	background: var(--hy-surface-1);
	color: var(--hy-text-primary);
	font: var(--hy-text-body);
	transition: border-color var(--hy-dur-fast) var(--hy-ease), box-shadow var(--hy-dur-fast) var(--hy-ease);
}
.hy-textarea { min-height: 120px; padding: var(--hy-space-3) var(--hy-space-4); }
.hy-input::placeholder, .hy-textarea::placeholder { color: var(--hy-text-muted); }
.hy-input:hover, .hy-select:hover { border-color: var(--hy-border-strong); }
.hy-input:focus, .hy-select:focus, .hy-textarea:focus {
	outline: none;
	border-color: var(--hy-brand-500);
	box-shadow: 0 0 0 3px var(--hy-brand-tint);
}
.hy-field[data-invalid] .hy-input { border-color: var(--hy-danger); }
.hy-field__error { font: var(--hy-text-body-sm); color: var(--hy-danger); }
.hy-field__hint  { font: var(--hy-text-body-sm); color: var(--hy-text-muted); }

/* Domain search — the hero action on the domains page. */
.hy-search {
	display: flex;
	gap: var(--hy-space-2);
	padding: var(--hy-space-2);
	border: 1px solid var(--hy-border-default);
	border-radius: var(--hy-radius-md);
	background: var(--hy-surface-1);
	box-shadow: var(--hy-shadow-sm);
}
.hy-search:focus-within { border-color: var(--hy-brand-500); box-shadow: 0 0 0 3px var(--hy-brand-tint); }
.hy-search .hy-input {
	border: 0;
	background: transparent;
	box-shadow: none;
	min-height: var(--hy-control-h);
}
.hy-search .hy-input:focus { box-shadow: none; }
@media (max-width: 560px) {
	.hy-search { flex-direction: column; }
	.hy-search .hy-btn { width: 100%; }
}

.hy-switch {
	appearance: none;
	width: 40px; height: 24px;
	border-radius: var(--hy-radius-pill);
	background: var(--hy-border-strong);
	position: relative;
	cursor: pointer;
	transition: background var(--hy-dur) var(--hy-ease);
	flex: none;
}
.hy-switch::after {
	content: "";
	position: absolute;
	inset: 3px auto 3px 3px;
	width: 18px;
	border-radius: 50%;
	background: var(--hy-surface-1);
	transition: transform var(--hy-dur) var(--hy-ease);
}
.hy-switch:checked { background: var(--hy-brand-500); }
.hy-switch:checked::after { transform: translateX(16px); }
/* appearance:none removes the native ring in Chrome and Safari. */
.hy-switch:focus-visible {
	outline: var(--hy-focus-width) solid var(--hy-focus-ring);
	outline-offset: var(--hy-focus-offset);
}

/* ========================================================= ACCORDION ===== */

.hy-faq { border-top: 1px solid var(--hy-border-subtle); }
.hy-faq__item { border-bottom: 1px solid var(--hy-border-subtle); }
.hy-faq__q {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--hy-space-4);
	width: 100%;
	padding: var(--hy-space-5) 0;
	border: 0;
	background: none;
	color: var(--hy-text-primary);
	font: var(--hy-text-body-lg);
	font-weight: 600;
	text-align: left;
	cursor: pointer;
	list-style: none;
}
.hy-faq__q::-webkit-details-marker { display: none; }
.hy-faq__q::after {
	content: "";
	flex: none;
	width: 16px; height: 16px;
	background: currentColor;
	color: var(--hy-text-muted);
	-webkit-mask: var(--hy-chevron) center / contain no-repeat;
	        mask: var(--hy-chevron) center / contain no-repeat;
	transition: transform var(--hy-dur) var(--hy-ease);
}
:root {
	--hy-chevron: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>');
}
.hy-faq__item[open] .hy-faq__q::after { transform: rotate(180deg); }
.hy-faq__a {
	padding: 0 0 var(--hy-space-5);
	max-width: 60ch;
	font: var(--hy-text-body);
	color: var(--hy-text-secondary);
}

/* =============================================================== CTA ===== */

.hy-cta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--hy-space-6);
	padding: clamp(var(--hy-space-8), 5vw, var(--hy-space-16));
	border: 1px solid var(--hy-border-subtle);
	border-radius: var(--hy-radius-xl);
	background: var(--hy-surface-1);
}
.hy-cta__title { font: var(--hy-text-h3); color: var(--hy-text-primary); margin: 0; }
.hy-cta__text  { font: var(--hy-text-body); color: var(--hy-text-secondary); margin: var(--hy-space-2) 0 0; max-width: 48ch; }
.hy-cta__actions { display: flex; flex-wrap: wrap; gap: var(--hy-space-3); }

/* ============================================================== HERO ===== */

.hy-hero {
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
	gap: clamp(var(--hy-space-8), 5vw, var(--hy-space-16));
	align-items: center;
	padding-block: clamp(var(--hy-space-16), 9vw, var(--hy-space-32));
}
@media (max-width: 1024px) {
	.hy-hero { grid-template-columns: minmax(0, 1fr); }
}
.hy-hero__title {
	font: var(--hy-text-display);
	letter-spacing: var(--hy-tracking-tight);
	color: var(--hy-text-primary);
	margin: var(--hy-space-5) 0 0;
	text-wrap: balance;
}
.hy-hero__lede {
	font: var(--hy-text-body-lg);
	color: var(--hy-text-secondary);
	margin: var(--hy-space-5) 0 0;
	max-width: 52ch;
	text-wrap: pretty;
}
.hy-hero__actions { display: flex; flex-wrap: wrap; gap: var(--hy-space-3); margin-top: var(--hy-space-8); }
.hy-hero__metrics {
	display: flex;
	flex-wrap: wrap;
	gap: var(--hy-space-8);
	margin-top: var(--hy-space-10);
	padding-top: var(--hy-space-8);
	border-top: 1px solid var(--hy-border-subtle);
}

/* ============================================================ UTILITY ==== */

.hy-stack   { display: grid; gap: var(--hy-space-4); }
.hy-stack-2 { display: grid; gap: var(--hy-space-2); }
.hy-row     { display: flex; align-items: center; gap: var(--hy-space-3); flex-wrap: wrap; }
.hy-muted   { color: var(--hy-text-muted); }
.hy-mono    { font-family: var(--hy-font-mono); font-variant-numeric: tabular-nums; }

.hy-visually-hidden {
	position: absolute;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}
.hy-skip-link {
	position: absolute;
	left: var(--hy-space-4);
	top: -100px;
	z-index: 999;
	padding: var(--hy-space-3) var(--hy-space-4);
	background: var(--hy-surface-1);
	border: 1px solid var(--hy-border-strong);
	border-radius: var(--hy-radius-sm);
	color: var(--hy-text-primary);
	transition: top var(--hy-dur) var(--hy-ease);
}
.hy-skip-link:focus { top: var(--hy-space-4); }

/* Tap targets stay finger-sized on touch devices. The switch keeps its visual
   size and grows its hit area instead, so the control does not turn chunky. */
@media (pointer: coarse) {
	.hy-btn, .hy-icon-btn, .hy-toggle-group button { min-height: 44px; }
	.hy-icon-btn { width: 44px; }
	.hy-switch { position: relative; }
	.hy-switch::before {
		content: "";
		position: absolute;
		inset: 50% auto auto 50%;
		translate: -50% -50%;
		width: 44px;
		height: 44px;
	}
}

/* ------------------------------------------------ theme reset overrides --- */

/*
 * Hello Elementor's reset.css hardcodes #CC3366 as the link colour and the
 * button border. Anywhere our own components do not set a colour — WordPress
 * pagination, plugin markup, bare content links — that pink leaked through.
 * Element-level selectors match the reset's specificity and win on order,
 * so any .hy-* component still overrides both.
 */
a {
	color: var(--hy-brand-500);
	text-underline-offset: 3px;
}
a:hover { color: var(--hy-brand-600); }

[type="button"], [type="submit"], button {
	border-color: var(--hy-border-default);
	color: inherit;
}
/*
 * The reset also paints #CC3366 as the *background* on hover AND focus, which
 * is why clicking a bare button (the theme toggle, a menu trigger) left a pink
 * block behind until the element lost focus. Neutralise all three properties;
 * any .hy-* component still outranks this on class specificity.
 */
[type="button"]:hover, [type="submit"]:hover, button:hover,
[type="button"]:focus, [type="submit"]:focus, button:focus {
	background-color: transparent;
	border-color: var(--hy-border-strong);
	color: inherit;
}

/* ------------------------------------------------------ cookie consent --- */

/*
 * CookieAdmin renders its banner with colours in inline style attributes,
 * driven by the plugin's own settings screen. Those cannot be overridden from
 * a stylesheet without !important — and they store ONE palette, so a white
 * card and a blue button follow you into dark mode. The !important below is
 * confined to exactly those inline-set properties; everything structural is
 * plain CSS. Styling lives here, not in the plugin, so an update cannot wipe it.
 */

.cookieadmin_law_container .cookieadmin_consent_inside {
	max-width: 460px;
	padding: var(--hy-space-6);
	background-color: var(--hy-surface-1) !important;
	border: 1px solid var(--hy-border-default) !important;
	border-radius: var(--hy-radius-lg);
	box-shadow: 0 20px 48px rgb(0 0 0 / .28);
	color: var(--hy-text-secondary);
}

.cookieadmin_law_container #cookieadmin_notice_title {
	margin: 0 0 var(--hy-space-2);
	font: var(--hy-text-h4);
	color: var(--hy-text-primary) !important;
}

.cookieadmin_law_container #cookieadmin_notice,
.cookieadmin_law_container .cookieadmin_notice_con {
	font-size: .875rem;
	line-height: 1.55;
	color: var(--hy-text-secondary) !important;
}
.cookieadmin_law_container #cookieadmin_notice strong,
.cookieadmin_law_container #cookieadmin_notice b {
	color: var(--hy-text-primary) !important;
}

.cookieadmin_law_container .cookieadmin_consent_btns {
	display: flex;
	flex-wrap: wrap;
	gap: var(--hy-space-2);
	margin-top: var(--hy-space-5);
}

/* Shared button shape — matches .hy-btn without inheriting its class. */
.cookieadmin_law_container .cookieadmin_btn,
.cookieadmin_cookie_modal .cookieadmin_btn {
	flex: 1 1 auto;
	min-height: var(--hy-control-h-sm);
	padding: var(--hy-space-2) var(--hy-space-4);
	font-size: .875rem;
	font-weight: 600;
	border-radius: var(--hy-radius-sm) !important;
	border: 1px solid var(--hy-border-default) !important;
	background-color: var(--hy-surface-2) !important;
	color: var(--hy-text-primary) !important;
	cursor: pointer;
	transition: background-color var(--hy-dur-fast) var(--hy-ease), border-color var(--hy-dur-fast) var(--hy-ease);
}
.cookieadmin_law_container .cookieadmin_btn:hover,
.cookieadmin_cookie_modal .cookieadmin_btn:hover {
	border-color: var(--hy-border-strong) !important;
	background-color: var(--hy-surface-3) !important;
}
.cookieadmin_law_container .cookieadmin_btn:focus-visible,
.cookieadmin_cookie_modal .cookieadmin_btn:focus-visible {
	outline: 2px solid var(--hy-brand-500);
	outline-offset: 2px;
}

/* Accept is the one primary action. */
.cookieadmin_law_container .cookieadmin_accept_btn,
.cookieadmin_cookie_modal .cookieadmin_accept_btn {
	background-color: var(--hy-brand-500) !important;
	border-color: var(--hy-brand-500) !important;
	color: var(--hy-brand-contrast) !important;
}
.cookieadmin_law_container .cookieadmin_accept_btn:hover,
.cookieadmin_cookie_modal .cookieadmin_accept_btn:hover {
	background-color: var(--hy-brand-600) !important;
	border-color: var(--hy-brand-600) !important;
}

.cookieadmin-poweredby {
	margin-top: var(--hy-space-3);
	font-size: .6875rem;
	opacity: .55;
}
.cookieadmin-poweredby a { color: var(--hy-text-muted); }


/* --- preferences modal --- */

/*
 * The modal is three stacked regions — head, scrolling body, footer — and the
 * plugin colours each from inline style attributes. Left alone, the head and
 * footer stay white while the body follows the theme, which is what made the
 * dialog look broken in dark mode.
 */
.cookieadmin_cookie_modal {
	/*
	 * The plugin pins the dialog with asymmetric left/right offsets (measured
	 * live: left 352px, right 528px on a 1600px viewport), so constraining its
	 * width leaves it hanging off-centre. Anchor the centre instead and let the
	 * width follow the viewport.
	 */
	left: 50% !important;
	right: auto !important;
	transform: translateX(-50%);
	width: min(720px, calc(100vw - 2 * var(--hy-space-6)));
	max-height: calc(100vh - 2 * var(--hy-space-10));
	/* NEVER force `display` here: the plugin shows and hides this dialog with
	 * an inline display:none / display:flex, so an !important display would
	 * pin it open permanently. Only the direction is ours to set. */
	flex-direction: column;
	background-color: var(--hy-surface-1) !important;
	border: 1px solid var(--hy-border-default) !important;
	border-radius: var(--hy-radius-lg);
	box-shadow: 0 24px 64px rgb(0 0 0 / .35);
	overflow: hidden;
}
/* Only the category list scrolls; head and footer stay put. */
.cookieadmin_cookie_modal .cookieadmin_details_wrapper {
	flex: 1 1 auto;
	overflow-y: auto;
}
.cookieadmin_cookie_modal .cookieadmin_mod_head,
.cookieadmin_cookie_modal .cookieadmin_modal_footer { flex: 0 0 auto; }

.cookieadmin_cookie_modal .cookieadmin_mod_head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--hy-space-4);
	padding: var(--hy-space-5) var(--hy-space-6);
	background: var(--hy-surface-1);
	border-bottom: 1px solid var(--hy-border-subtle);
}
.cookieadmin_cookie_modal .cookieadmin_preference_title {
	font: var(--hy-text-h4);
	color: var(--hy-text-primary) !important;
}
.cookieadmin_cookie_modal .cookieadmin_close_pref {
	flex: 0 0 auto;
	padding: var(--hy-space-1) var(--hy-space-2);
	font-size: 1rem;
	line-height: 1;
	background: none !important;
	border: 0 !important;
	border-radius: var(--hy-radius-xs) !important;
	color: var(--hy-text-muted) !important;
	cursor: pointer;
}
.cookieadmin_cookie_modal .cookieadmin_close_pref:hover {
	background: var(--hy-surface-2) !important;
	color: var(--hy-text-primary) !important;
}

.cookieadmin_cookie_modal .cookieadmin_details_wrapper {
	padding: var(--hy-space-5) var(--hy-space-6);
	background: var(--hy-surface-1);
	color: var(--hy-text-secondary) !important;
}
.cookieadmin_cookie_modal .cookieadmin_preference_details,
.cookieadmin_cookie_modal #cookieadmin_preference {
	background: none !important;
	border: 0 !important;
	font-size: .875rem;
	line-height: 1.6;
	color: var(--hy-text-secondary) !important;
}
.cookieadmin_cookie_modal #cookieadmin_preference b {
	color: var(--hy-text-primary) !important;
}

/* One row per cookie category. */
.cookieadmin_cookie_modal .cookieadmin_types {
	padding: var(--hy-space-4) 0;
	border-top: 1px solid var(--hy-border-subtle);
	background: none !important;
}
.cookieadmin_cookie_modal .cookieadmin_header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--hy-space-4);
	background: none !important;
	border: 0 !important;
}
.cookieadmin_cookie_modal .stitle {
	font-size: .9375rem;
	font-weight: 600;
	color: var(--hy-text-primary) !important;
	cursor: pointer;
}
.cookieadmin_cookie_modal .cookieadmin_desc {
	margin-top: var(--hy-space-2);
	font-size: .8125rem;
	line-height: 1.55;
	color: var(--hy-text-secondary) !important;
}
/*
 * The expander is a literal "►" character the plugin swaps for "▼", so the
 * glyph has to stay — replacing it with an icon would break the open/closed
 * state. Shrink it, mute it and give it a fixed box so it stops sitting like
 * a full-size black triangle next to the heading.
 */
.cookieadmin_cookie_modal .cookieadmin_show_pref_cookies {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 16px;
	margin-inline-end: var(--hy-space-2);
	font-size: .5rem;
	line-height: 1;
	color: var(--hy-text-muted) !important;
	cursor: pointer;
	transition: color var(--hy-dur-fast) var(--hy-ease);
}
.cookieadmin_cookie_modal .cookieadmin_show_pref_cookies:hover {
	color: var(--hy-text-primary) !important;
}
/* Keep the arrow, title and badge on one baseline. */
.cookieadmin_cookie_modal .cookieadmin_header > span {
	display: inline-flex;
	align-items: center;
	gap: var(--hy-space-2);
	min-width: 0;
}
.cookieadmin_cookie_modal .cookieadmin_remark {
	font-size: .6875rem;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--hy-text-muted) !important;
}
/* "Always active" is a state, so it reads as a badge rather than a button. */
.cookieadmin_cookie_modal .cookieadmin_remark.cookieadmin_act {
	padding: 2px var(--hy-space-2);
	border-radius: var(--hy-radius-pill);
	background: var(--hy-brand-tint);
	color: var(--hy-brand-500) !important;
	text-transform: none;
	letter-spacing: 0;
	font-size: .75rem;
	font-weight: 600;
}
.cookieadmin_cookie_modal .cookieadmin-modal-cookies-list,
.cookieadmin_cookie_modal .cookieadmin-nocookie-cat {
	font-size: .8125rem;
	color: var(--hy-text-muted) !important;
}

/* Category switches. */
.cookieadmin_cookie_modal .cookieadmin_slider {
	background-color: var(--hy-surface-3) !important;
	border: 1px solid var(--hy-border-default) !important;
}
.cookieadmin_cookie_modal .cookieadmin_toggle input:checked + .cookieadmin_slider {
	background-color: var(--hy-brand-500) !important;
	border-color: var(--hy-brand-500) !important;
}
.cookieadmin_cookie_modal .cookieadmin_toggle input:focus-visible + .cookieadmin_slider {
	outline: 2px solid var(--hy-brand-500);
	outline-offset: 2px;
}

.cookieadmin_cookie_modal .cookieadmin_modal_footer {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--hy-space-2);
	padding: var(--hy-space-4) var(--hy-space-6);
	background: var(--hy-surface-1) !important;
	border-top: 1px solid var(--hy-border-subtle);
}
.cookieadmin_cookie_modal .cookieadmin_modal_footer .cookieadmin_btn { flex: 0 0 auto; }
/* Save and Accept are both affirmative; only Accept carries the brand fill. */
.cookieadmin_cookie_modal .cookieadmin_save_btn {
	background-color: var(--hy-surface-2) !important;
	border-color: var(--hy-border-default) !important;
	color: var(--hy-text-primary) !important;
}
.cookieadmin_cookie_modal .cookieadmin_modal_footer_links { margin-inline-start: auto; }
.cookieadmin_cookie_modal .cookieadmin-poweredby svg { opacity: .5; }

/* Floating "re-open consent" button.
 *
 * The plugin's glyph is an <img> of a white cookie on a blue disc, with the
 * colours baked into the file. Filters cannot rescue it: greyscale leaves a
 * pale disc that disappears on a light button. So the image is hidden and the
 * icon is drawn as a mask instead — one shape, painted with currentColor, so
 * it follows the theme like every other icon on the site.
 */
.cookieadmin_re_consent {
	display: grid !important;
	place-items: center;
	width: 44px;
	height: 44px;
	padding: 0 !important;
	color: var(--hy-text-secondary);
	background: var(--hy-surface-1) !important;
	border: 1px solid var(--hy-border-default) !important;
	border-radius: var(--hy-radius-pill) !important;
	box-shadow: 0 8px 24px rgb(0 0 0 / .22);
	cursor: pointer;
	transition: color var(--hy-dur-fast) var(--hy-ease), border-color var(--hy-dur-fast) var(--hy-ease), background var(--hy-dur-fast) var(--hy-ease);
}
.cookieadmin_re_consent:hover {
	color: var(--hy-brand-500);
	background: var(--hy-surface-2) !important;
	border-color: var(--hy-brand-500) !important;
}
.cookieadmin_re_consent:focus-visible {
	outline: 2px solid var(--hy-brand-500);
	outline-offset: 2px;
}
.cookieadmin_re_consent .cookieadmin_reconsent_img { display: none !important; }
.cookieadmin_re_consent::before {
	content: "";
	width: 22px;
	height: 22px;
	background: currentColor;
	-webkit-mask: var(--hy-icon-cookie) center / contain no-repeat;
	mask: var(--hy-icon-cookie) center / contain no-repeat;
}
