/**
 * Site-wide email verification banner.
 *
 * Rendered by templates/parts/verify-email-banner.php for logged-in users
 * whose email address is not yet verified and who haven't dismissed it for
 * the current login session.
 */

/**
 * Sticky-layout contract: reserve the banner's height for the sticky stack even
 * before custom-scripts.js measures and publishes the exact value. Without this,
 * a stale, slow, or not-yet-run script leaves --vh-banner-height unset, so the
 * dashboard sidebar + sticky widget bar (and the site header) anchor at top: 0
 * and get clipped behind the banner when scrolling. The JS value refines this
 * once it runs and wins via the inline style it sets on <html>; on mobile the
 * dashboard shell is display:none, so this single-line 57px default (56px inner
 * min-height + 1px border) is always accurate wherever it is actually consumed.
 */
:root:has(.vh-verify-banner),
:root:has(.vh-docs-banner),
:root:has(.vh-2fa-banner) {
	--vh-banner-height: 57px;
}

.vh-verify-banner {
	position: sticky;
	top: 0;
	z-index: 1100;
	/* Opaque: the tint is layered over a solid surface so page content scrolling
	   under the sticky banner never bleeds through (mirrors the docs banner). */
	background: linear-gradient(rgba(var(--vh-primary-rgb), 0.06), rgba(var(--vh-primary-rgb), 0.06)), var(--vh-surface-alt);
	border-bottom: 1px solid rgba(var(--vh-primary-rgb), 0.22);
	box-shadow: inset 0 3px 0 0 var(--vh-primary);
	color: var(--vh-text-heading);
	font-family: var(--vh-font-body);
}

.vh-verify-banner__inner {
	max-width: 1280px;
	margin: 0 auto;
	min-height: 56px;
	padding: 0.5rem clamp(1rem, 3vw, 2rem);
	display: flex;
	align-items: center;
	gap: 0.85rem;
}

.vh-verify-banner__icon {
	display: inline-flex;
	align-items: center;
	flex-shrink: 0;
	color: var(--vh-primary);
	line-height: 1;
}

.vh-verify-banner .vh-verify-banner__message {
	margin: 0;
	font-size: 0.9rem;
	line-height: 1;
	flex: 1 1 auto;
	color: var(--vh-slate-700);
}

.vh-verify-banner__message strong {
	color: var(--vh-text-heading);
	font-weight: 600;
	margin-right: 0.25rem;
}

/* TaskHive's frontend.js loops every <button> on page load and injects a
 * tinted box-shadow when the computed value is `none`. Set a transparent
 * placeholder so the check returns false and the inline style is skipped. */
.vh-verify-banner__resend,
.vh-verify-banner__resend:hover,
.vh-verify-banner__resend:focus,
.vh-verify-banner__resend:focus-visible,
.vh-verify-banner__resend:active,
.vh-verify-banner__dismiss,
.vh-verify-banner__dismiss:hover,
.vh-verify-banner__dismiss:focus,
.vh-verify-banner__dismiss:focus-visible,
.vh-verify-banner__dismiss:active {
	box-shadow: 0 0 0 0 transparent;
}

.vh-verify-banner__resend {
	appearance: none;
	background: var(--vh-primary);
	color: #fff;
	border: 1px solid var(--vh-primary);
	padding: 0.45rem 0.95rem;
	font-family: var(--vh-font-heading);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	border-radius: var(--vh-radius-full);
	cursor: pointer;
	line-height: 1;
	flex-shrink: 0;
	transition: background var(--vh-transition-fast), border-color var(--vh-transition-fast);
}

.vh-verify-banner__resend:hover,
.vh-verify-banner__resend:focus-visible {
	background: var(--vh-primary-hover);
	border-color: var(--vh-primary-hover);
}

.vh-verify-banner__resend:focus-visible {
	outline: 2px solid var(--vh-primary);
	outline-offset: 0;
}

.vh-verify-banner__resend[disabled] {
	opacity: 0.55;
	cursor: not-allowed;
}

.vh-verify-banner__status {
	font-size: 0.82rem;
	color: var(--vh-slate-600);
	line-height: 1;
	flex-shrink: 0;
}

.vh-verify-banner__status:empty {
	display: none;
}

.vh-verify-banner__status[data-state="success"] {
	color: var(--vh-success-dark);
}

.vh-verify-banner__status[data-state="error"] {
	color: var(--vh-primary);
}

.vh-verify-banner__dismiss {
	appearance: none;
	background: transparent;
	border: 1px solid transparent;
	color: rgba(var(--vh-primary-rgb), 0.7);
	width: 32px;
	height: 32px;
	padding: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--vh-radius-full);
	cursor: pointer;
	flex-shrink: 0;
	transition: background var(--vh-transition-fast), color var(--vh-transition-fast), border-color var(--vh-transition-fast);
}

.vh-verify-banner__dismiss:hover,
.vh-verify-banner__dismiss:focus-visible {
	background: rgba(var(--vh-primary-rgb), 0.12);
	color: var(--vh-primary);
	border-color: rgba(var(--vh-primary-rgb), 0.25);
}

.vh-verify-banner__dismiss:focus-visible {
	outline: 2px solid var(--vh-primary);
	outline-offset: 0;
}

@media (max-width: 640px) {
	.vh-verify-banner__inner {
		padding: 0.55rem 1rem;
		gap: 0.6rem;
		flex-wrap: wrap;
	}

	.vh-verify-banner__icon {
		display: none;
	}

	.vh-verify-banner .vh-verify-banner__message {
		order: 1;
		/* flex-basis 0 + min-width 0 lets the text wrap *inside* the
		   message element instead of the whole element wrapping to its
		   own row, which is what was pushing the dismiss × below the
		   text and bloating the banner's height. */
		flex: 1 1 0;
		min-width: 0;
		font-size: 0.85rem;
		line-height: 1.3;
	}

	.vh-verify-banner__dismiss {
		order: 2;
	}

	.vh-verify-banner__resend {
		order: 3;
		flex: 1 1 100%;
	}

	.vh-verify-banner__status {
		order: 4;
		flex: 1 1 100%;
		line-height: 1.3;
	}
}

/**
 * Site-wide "submit verification documents" banner.
 *
 * Rendered by templates/parts/verify-docs-banner.php for logged-in vetlancers who
 * have verified their email but not yet submitted veteran-verification documents.
 * Amber sibling of .vh-verify-banner; never shown at the same time as it.
 */

.vh-docs-banner {
	position: sticky;
	top: 0;
	z-index: 1100;
	/* Opaque amber: the tint is layered over a solid surface so page content
	   scrolling under the sticky banner never bleeds through. */
	background: linear-gradient(rgba(var(--vh-warning-rgb), 0.10), rgba(var(--vh-warning-rgb), 0.10)), var(--vh-surface-alt);
	border-bottom: 1px solid rgba(var(--vh-warning-rgb), 0.30);
	box-shadow: inset 0 3px 0 0 var(--vh-warning);
	color: var(--vh-text-heading);
	font-family: var(--vh-font-body);
}

.vh-docs-banner__inner {
	max-width: 1280px;
	margin: 0 auto;
	min-height: 56px;
	padding: 0.5rem clamp(1rem, 3vw, 2rem);
	display: flex;
	align-items: center;
	gap: 0.85rem;
}

.vh-docs-banner__icon {
	display: inline-flex;
	align-items: center;
	flex-shrink: 0;
	color: var(--vh-warning);
	line-height: 1;
}

.vh-docs-banner .vh-docs-banner__message {
	margin: 0;
	font-size: 0.9rem;
	line-height: 1;
	flex: 1 1 auto;
	color: var(--vh-slate-700);
}

.vh-docs-banner__message strong {
	color: var(--vh-text-heading);
	font-weight: 600;
	margin-right: 0.25rem;
}

/* TaskHive's frontend.js loops every <button> on page load and injects a
 * tinted box-shadow when the computed value is `none`. Set a transparent
 * placeholder so the check returns false and the inline style is skipped. */
.vh-docs-banner__cta,
.vh-docs-banner__cta:hover,
.vh-docs-banner__cta:focus,
.vh-docs-banner__cta:focus-visible,
.vh-docs-banner__cta:active,
.vh-docs-banner__dismiss,
.vh-docs-banner__dismiss:hover,
.vh-docs-banner__dismiss:focus,
.vh-docs-banner__dismiss:focus-visible,
.vh-docs-banner__dismiss:active {
	box-shadow: 0 0 0 0 transparent;
}

.vh-docs-banner__cta {
	appearance: none;
	background: var(--vh-warning);
	color: var(--vh-text-heading);
	border: 1px solid var(--vh-warning);
	padding: 0.45rem 0.95rem;
	font-family: var(--vh-font-heading);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	text-decoration: none;
	border-radius: var(--vh-radius-full);
	cursor: pointer;
	line-height: 1;
	flex-shrink: 0;
	transition: background var(--vh-transition-fast), border-color var(--vh-transition-fast);
}

.vh-docs-banner__cta:hover,
.vh-docs-banner__cta:focus-visible {
	background: var(--vh-warning-light);
	border-color: var(--vh-warning-light);
}

.vh-docs-banner__cta:focus-visible {
	outline: 2px solid var(--vh-warning);
	outline-offset: 0;
}

.vh-docs-banner__dismiss {
	appearance: none;
	background: transparent;
	border: 1px solid transparent;
	color: rgba(var(--vh-warning-rgb), 0.85);
	width: 32px;
	height: 32px;
	padding: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--vh-radius-full);
	cursor: pointer;
	flex-shrink: 0;
	transition: background var(--vh-transition-fast), color var(--vh-transition-fast), border-color var(--vh-transition-fast);
}

.vh-docs-banner__dismiss:hover,
.vh-docs-banner__dismiss:focus-visible {
	background: rgba(var(--vh-warning-rgb), 0.18);
	color: var(--vh-text-heading);
	border-color: rgba(var(--vh-warning-rgb), 0.35);
}

.vh-docs-banner__dismiss:focus-visible {
	outline: 2px solid var(--vh-warning);
	outline-offset: 0;
}

@media (max-width: 640px) {
	.vh-docs-banner__inner {
		padding: 0.55rem 1rem;
		gap: 0.6rem;
		flex-wrap: wrap;
	}

	.vh-docs-banner__icon {
		display: none;
	}

	.vh-docs-banner .vh-docs-banner__message {
		order: 1;
		flex: 1 1 0;
		min-width: 0;
		font-size: 0.85rem;
		line-height: 1.3;
	}

	.vh-docs-banner__dismiss {
		order: 2;
	}

	.vh-docs-banner__cta {
		order: 3;
		flex: 1 1 100%;
		text-align: center;
	}
}

/**
 * Site-wide two-factor setup banner.
 *
 * Rendered by templates/parts/two-factor-banner.php for administrators who have
 * not configured 2FA before the requirement date. Mirrors the documents banner.
 */

.vh-2fa-banner {
	position: sticky;
	top: 0;
	z-index: 1100;
	background: linear-gradient(rgba(var(--vh-warning-rgb), 0.10), rgba(var(--vh-warning-rgb), 0.10)), var(--vh-surface-alt);
	border-bottom: 1px solid rgba(var(--vh-warning-rgb), 0.30);
	box-shadow: inset 0 3px 0 0 var(--vh-warning);
	color: var(--vh-text-heading);
	font-family: var(--vh-font-body);
}

.vh-2fa-banner__inner {
	max-width: 1280px;
	margin: 0 auto;
	min-height: 56px;
	padding: 0.5rem clamp(1rem, 3vw, 2rem);
	display: flex;
	align-items: center;
	gap: 0.85rem;
}

.vh-2fa-banner__icon {
	display: inline-flex;
	align-items: center;
	flex-shrink: 0;
	color: var(--vh-warning);
	line-height: 1;
}

.vh-2fa-banner .vh-2fa-banner__message {
	margin: 0;
	font-size: 0.9rem;
	line-height: 1;
	flex: 1 1 auto;
	color: var(--vh-slate-700);
}

.vh-2fa-banner__message strong {
	color: var(--vh-text-heading);
	font-weight: 600;
	margin-right: 0.25rem;
}

.vh-2fa-banner__cta,
.vh-2fa-banner__cta:hover,
.vh-2fa-banner__cta:focus,
.vh-2fa-banner__cta:focus-visible,
.vh-2fa-banner__cta:active,
.vh-2fa-banner__dismiss,
.vh-2fa-banner__dismiss:hover,
.vh-2fa-banner__dismiss:focus,
.vh-2fa-banner__dismiss:focus-visible,
.vh-2fa-banner__dismiss:active {
	box-shadow: 0 0 0 0 transparent;
}

.vh-2fa-banner__cta {
	appearance: none;
	background: var(--vh-warning);
	color: var(--vh-text-heading);
	border: 1px solid var(--vh-warning);
	padding: 0.45rem 0.95rem;
	font-family: var(--vh-font-heading);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	text-decoration: none;
	border-radius: var(--vh-radius-full);
	cursor: pointer;
	line-height: 1;
	flex-shrink: 0;
	transition: background var(--vh-transition-fast), border-color var(--vh-transition-fast);
}

.vh-2fa-banner__cta:hover,
.vh-2fa-banner__cta:focus-visible {
	background: var(--vh-warning-light);
	border-color: var(--vh-warning-light);
}

.vh-2fa-banner__cta:focus-visible {
	outline: 2px solid var(--vh-warning);
	outline-offset: 0;
}

.vh-2fa-banner__dismiss {
	appearance: none;
	background: transparent;
	border: 1px solid transparent;
	color: rgba(var(--vh-warning-rgb), 0.85);
	width: 32px;
	height: 32px;
	padding: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--vh-radius-full);
	cursor: pointer;
	flex-shrink: 0;
	transition: background var(--vh-transition-fast), color var(--vh-transition-fast), border-color var(--vh-transition-fast);
}

.vh-2fa-banner__dismiss:hover,
.vh-2fa-banner__dismiss:focus-visible {
	background: rgba(var(--vh-warning-rgb), 0.18);
	color: var(--vh-text-heading);
	border-color: rgba(var(--vh-warning-rgb), 0.35);
}

.vh-2fa-banner__dismiss:focus-visible {
	outline: 2px solid var(--vh-warning);
	outline-offset: 0;
}

@media (max-width: 640px) {
	.vh-2fa-banner__inner {
		padding: 0.55rem 1rem;
		gap: 0.6rem;
		flex-wrap: wrap;
	}

	.vh-2fa-banner__icon {
		display: none;
	}

	.vh-2fa-banner .vh-2fa-banner__message {
		order: 1;
		flex: 1 1 0;
		min-width: 0;
		font-size: 0.85rem;
		line-height: 1.3;
	}

	.vh-2fa-banner__dismiss {
		order: 2;
	}

	.vh-2fa-banner__cta {
		order: 3;
		flex: 1 1 100%;
		text-align: center;
	}
}
