/* Havenlytics Components */

/* ======================
   Buttons
   Size / loading / groups — paint ruled by Interactive controls block below.
======================= */

/* Button Sizes */
.hvnly-btn-sm,
.hvnly-btn--sm {
  padding: 0.5rem 1rem;
  font-size: var(--hvnly-font-size-sm, 0.875rem);
}

.hvnly-btn-lg,
.hvnly-btn--lg {
  padding: 1rem 2rem;
  font-size: var(--hvnly-font-size-lg, 1.25rem);
}

.hvnly-btn-xl,
.hvnly-btn--xl {
  padding: 1.25rem 2.5rem;
  font-size: var(--hvnly-font-size-xl, 1.5rem);
}

/* Button States */
.hvnly-btn-loading,
.hvnly-btn--loading {
  color: transparent;
  pointer-events: none;
}

.hvnly-btn-loading::after {
  content: '';
  position: absolute;
  width: 1rem;
  height: 1rem;
  top: 50%;
  left: 50%;
  margin-left: -0.5rem;
  margin-top: -0.5rem;
  border: 2px solid transparent;
  border-top-color: currentColor;
  border-radius: 50%;
  animation: hvnly-spin 1s linear infinite;
}

@keyframes hvnly-spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

/* Button Group */
.hvnly-btn-group {
  display: inline-flex;
  gap: 0;
}

.hvnly-btn-group .hvnly-btn {
  border-radius: 0;
}

.hvnly-btn-group .hvnly-btn:first-child {
  border-top-left-radius: var(--hvnly-button-radius, 4px);
  border-bottom-left-radius: var(--hvnly-button-radius, 4px);
}

.hvnly-btn-group .hvnly-btn:last-child {
  border-top-right-radius: var(--hvnly-button-radius, 4px);
  border-bottom-right-radius: var(--hvnly-button-radius, 4px);
}

.hvnly-btn-group .hvnly-btn:not(:first-child) {
  margin-left: -1px;
}

/* ======================
   Cards
======================= */
.hvnly-card {
  background: var(--hvnly-card-bg);
  border-radius: var(--hvnly-card-radius, 8px);
  box-shadow: var(--hvnly-card-shadow);
  border: var(--hvnly-card-border);
  padding: var(--hvnly-card-padding, 1.5rem);
  transition: all var(--hvnly-transition-time, 0.3s ease);
}

.hvnly-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}

.hvnly-card-header {
  margin-bottom: 1rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--hvnly-border-color);
}

.hvnly-card-title {
  font-size: var(--hvnly-font-size-title, 1.5rem);
  font-weight: var(--hvnly-font-weight-semibold, 600);
  color: var(--hvnly-text-primary);
  margin: 0;
}

.hvnly-card-body {
  margin-bottom: 1rem;
}

.hvnly-card-footer {
  padding-top: 1rem;
  border-top: 1px solid var(--hvnly-border-color);
}

/* ======================
   Forms
======================= */
.hvnly-form-group {
  margin-bottom: 1rem;
}

.hvnly-form-label {
  display: block;
  margin-bottom: 0.5rem;
  font-weight: var(--hvnly-font-weight-medium, 500);
  color: var(--hvnly-text-primary);
}

/* Form controls.
   Sprint 31H: `.hvnly-input / .hvnly-select / .hvnly-textarea` (brief-requested
   short names) are added as aliases of the legacy `.hvnly-form-*` classes —
   one token-driven rule, both names work. `font-family: inherit` keeps the
   theme's typography (per the "respect theme typography" requirement) while
   spacing/border/background/focus stay Havenlytics-consistent across themes. */
.hvnly-form-input,
.hvnly-form-select,
.hvnly-form-textarea,
.hvnly-input,
.hvnly-select,
.hvnly-textarea {
  width: 100%;
  padding: 0.75rem 1rem;
  font-family: inherit;
  font-size: var(--hvnly-font-size-sm, 0.9rem);
  line-height: 1.5;
  border: 1px solid var(--hvnly-input-border);
  border-radius: var(--hvnly-input-radius, 4px);
  background: var(--hvnly-color-bg-white);
  color: var(--hvnly-text-primary);
  transition: border-color var(--hvnly-transition-time, 0.2s ease), box-shadow var(--hvnly-transition-time, 0.2s ease);
}

.hvnly-form-input:hover:not(:disabled),
.hvnly-form-select:hover:not(:disabled),
.hvnly-form-textarea:hover:not(:disabled),
.hvnly-input:hover:not(:disabled),
.hvnly-select:hover:not(:disabled),
.hvnly-textarea:hover:not(:disabled) {
  border-color: var(--hvnly-color-gray-500, #6c757d);
}

.hvnly-form-input:focus,
.hvnly-form-select:focus,
.hvnly-form-textarea:focus,
.hvnly-input:focus,
.hvnly-select:focus,
.hvnly-textarea:focus {
  outline: none;
  border-color: var(--hvnly-input-focus);
  box-shadow: 0 0 0 3px rgba(var(--hvnly-primary-rgb), 0.15);
}

/* Error state (add the class, or the control gets it via aria-invalid). */
.hvnly-input--error,
.hvnly-select--error,
.hvnly-textarea--error,
.hvnly-input[aria-invalid="true"],
.hvnly-select[aria-invalid="true"],
.hvnly-textarea[aria-invalid="true"] {
  border-color: var(--hvnly-brand-error);
}

.hvnly-input--error:focus,
.hvnly-select--error:focus,
.hvnly-textarea--error:focus,
.hvnly-input[aria-invalid="true"]:focus,
.hvnly-select[aria-invalid="true"]:focus,
.hvnly-textarea[aria-invalid="true"]:focus {
  box-shadow: 0 0 0 3px rgba(var(--hvnly-brand-error-rgb, 255, 77, 79), 0.15);
}

.hvnly-form-input:disabled,
.hvnly-form-select:disabled,
.hvnly-form-textarea:disabled,
.hvnly-input:disabled,
.hvnly-select:disabled,
.hvnly-textarea:disabled {
  background: var(--hvnly-color-bg-light);
  opacity: 0.7;
  cursor: not-allowed;
}

.hvnly-form-textarea,
.hvnly-textarea {
  resize: vertical;
  min-height: 100px;
}

/* Field-level error message. */
.hvnly-field-error {
  display: block;
  margin-top: 0.35rem;
  font-size: var(--hvnly-font-size-xs, 0.75rem);
  color: var(--hvnly-brand-error);
}

/* ============================================================
   Frontend Checkbox Design System (public frontend only)
   One visual component for Archive/Search filters, taxonomy
   dropdowns, Auth consent, Inquiry consent, and .hvnly-checkbox.
   Both .checked (JS) and :checked drive the same surface.
   Admin / SPA / toggle switches remain separate.
============================================================ */
:root {
  --hvnly-cb-size: 20px;
  --hvnly-cb-radius: 4px;
  --hvnly-cb-border-width: 2px;
  --hvnly-cb-border-color: var(--hvnly-border-color, #e4e4ed);
  --hvnly-cb-bg: var(--hvnly-color-bg-white, #ffffff);
  --hvnly-cb-checked-bg: var(--hvnly-brand-primary, var(--hvnly-primary-color));
  --hvnly-cb-checked-border: var(--hvnly-cb-checked-bg);
  --hvnly-cb-hover-bg: rgba(var(--hvnly-primary-rgb, 108, 96, 254), 0.06);
  --hvnly-cb-hover-border: var(--hvnly-brand-primary, var(--hvnly-primary-color));
  --hvnly-cb-disabled-opacity: 0.5;
  --hvnly-cb-transition: 180ms ease;
  --hvnly-cb-focus-ring: 0 0 0 3px rgba(var(--hvnly-primary-rgb, 108, 96, 254), 0.22);
  --hvnly-cb-mark-size: 12px;
  --hvnly-cb-mark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.2 8.2L6.5 11.5L12.8 4.5' stroke='%23ffffff' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

/* Shared unchecked box surface (pseudo + sibling span + native input) */
.hvnly-cb-box,
.hvnly-property-filter-checkbox::before,
.hvnly-property-custom-mlt-checkbox,
input.hvnly-checkbox,
input.hvnly-form-check-input,
.hvnly-auth__checkbox input[type="checkbox"],
.hvnly-block-inquiry__consent-label input[type="checkbox"] {
  box-sizing: border-box;
  width: var(--hvnly-cb-size);
  height: var(--hvnly-cb-size);
  min-width: var(--hvnly-cb-size);
  min-height: var(--hvnly-cb-size);
  flex-shrink: 0;
  margin: 0;
  border: var(--hvnly-cb-border-width) solid var(--hvnly-cb-border-color);
  border-radius: var(--hvnly-cb-radius);
  background-color: var(--hvnly-cb-bg);
  background-image: none;
  background-repeat: no-repeat;
  background-position: center;
  background-size: var(--hvnly-cb-mark-size) var(--hvnly-cb-mark-size);
  transition:
    background-color var(--hvnly-cb-transition),
    border-color var(--hvnly-cb-transition),
    box-shadow var(--hvnly-cb-transition),
    background-image var(--hvnly-cb-transition);
}

.hvnly-property-filter-checkbox::before {
  content: "";
  display: block;
}

/* Native inputs — strip browser chrome */
input.hvnly-checkbox,
input.hvnly-form-check-input,
.hvnly-auth__checkbox input[type="checkbox"],
.hvnly-block-inquiry__consent-label input[type="checkbox"] {
  -webkit-appearance: none;
  appearance: none;
  display: inline-block;
  vertical-align: top;
  cursor: pointer;
  color: transparent;
}

/* Checked — .checked (JS) and :checked share one look */
.hvnly-property-filter-checkbox.checked::before,
.hvnly-property-filter-checkbox:has(> input:checked)::before,
.hvnly-property-dropdown-checkbox input[type="checkbox"]:checked + .hvnly-property-custom-mlt-checkbox,
.hvnly-property-dropdown-checkbox.checked .hvnly-property-custom-mlt-checkbox,
input.hvnly-checkbox:checked,
input.hvnly-form-check-input:checked,
.hvnly-auth__checkbox input[type="checkbox"]:checked,
.hvnly-block-inquiry__consent-label input[type="checkbox"]:checked {
  background-color: var(--hvnly-cb-checked-bg);
  border-color: var(--hvnly-cb-checked-border);
  background-image: var(--hvnly-cb-mark);
}

/* Hover (unchecked only) */
.hvnly-property-filter-checkbox:hover:not(.checked):not(:has(> input:checked)):not(:has(> input:disabled))::before,
.hvnly-property-dropdown-checkbox:hover:not(:has(input:checked)):not(:has(input:disabled)) .hvnly-property-custom-mlt-checkbox,
input.hvnly-checkbox:hover:not(:checked):not(:disabled),
input.hvnly-form-check-input:hover:not(:checked):not(:disabled),
.hvnly-auth__checkbox:hover input[type="checkbox"]:not(:checked):not(:disabled),
.hvnly-block-inquiry__consent-label:hover input[type="checkbox"]:not(:checked):not(:disabled) {
  border-color: var(--hvnly-cb-hover-border);
  background-color: var(--hvnly-cb-hover-bg);
}

/* Focus-visible ring on the visible box */
.hvnly-property-filter-checkbox:has(> input:focus-visible)::before,
.hvnly-property-dropdown-checkbox input[type="checkbox"]:focus-visible + .hvnly-property-custom-mlt-checkbox,
input.hvnly-checkbox:focus-visible,
input.hvnly-form-check-input:focus-visible,
.hvnly-auth__checkbox input[type="checkbox"]:focus-visible,
.hvnly-block-inquiry__consent-label input[type="checkbox"]:focus-visible {
  outline: none;
  box-shadow: var(--hvnly-cb-focus-ring);
}

input.hvnly-checkbox:focus:not(:focus-visible),
input.hvnly-form-check-input:focus:not(:focus-visible),
.hvnly-auth__checkbox input[type="checkbox"]:focus:not(:focus-visible),
.hvnly-block-inquiry__consent-label input[type="checkbox"]:focus:not(:focus-visible) {
  outline: none;
  box-shadow: none;
}

/* Disabled */
.hvnly-property-filter-checkbox:has(> input:disabled),
.hvnly-property-dropdown-checkbox:has(input:disabled),
input.hvnly-checkbox:disabled,
input.hvnly-form-check-input:disabled,
.hvnly-auth__checkbox input[type="checkbox"]:disabled,
.hvnly-block-inquiry__consent-label input[type="checkbox"]:disabled {
  opacity: var(--hvnly-cb-disabled-opacity);
  cursor: not-allowed;
}

/* Sidebar filter shell — hit target over the shared ::before box */
.hvnly-property-filter-checkbox {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  position: relative;
  width: auto;
  cursor: pointer;
}

.hvnly-property-filter-checkbox > input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  width: var(--hvnly-cb-size);
  height: var(--hvnly-cb-size);
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  margin: 0;
  z-index: 1;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
}

.hvnly-property-filter-checkbox > span {
  display: block;
  flex: 1;
  line-height: 1.4;
}

/* Dropdown — visually hide native input over the shared box (keyboard + click) */
.hvnly-property-dropdown-checkbox input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  width: var(--hvnly-cb-size);
  height: var(--hvnly-cb-size);
  left: 1rem;
  top: 50%;
  transform: translateY(-50%);
  margin: 0;
  z-index: 2;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
}

.hvnly-property-custom-mlt-checkbox {
  display: block;
  position: relative;
}

/* Utility wrappers */
.hvnly-form-check {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 0.5rem;
}

/* Radio remains native accent (not part of checkbox system) */
.hvnly-radio {
  width: 1.05rem;
  height: 1.05rem;
  margin: 0;
  flex-shrink: 0;
  accent-color: var(--hvnly-brand-primary);
  cursor: pointer;
}

.hvnly-radio:focus-visible {
  outline: 2px solid var(--hvnly-brand-primary);
  outline-offset: 2px;
}

.hvnly-radio:disabled {
  cursor: not-allowed;
  opacity: 0.6;
}

/* ======================
   Utilities
======================= */
.hvnly-text-center { text-align: center; }
.hvnly-text-left { text-align: left; }
.hvnly-text-right { text-align: right; }

.hvnly-d-block { display: block; }
.hvnly-d-inline { display: inline; }
.hvnly-d-inline-block { display: inline-block; }
.hvnly-d-flex { display: flex; }
.hvnly-d-inline-flex { display: inline-flex; }
.hvnly-d-grid { display: grid; }
.hvnly-d-none { display: none; }

.hvnly-w-full { width: 100%; }
.hvnly-h-full { height: 100%; }

.hvnly-m-0 { margin: 0; }
.hvnly-m-1 { margin: 0.25rem; }
.hvnly-m-2 { margin: 0.5rem; }
.hvnly-m-3 { margin: 0.75rem; }
.hvnly-m-4 { margin: 1rem; }
.hvnly-m-5 { margin: 1.5rem; }

.hvnly-p-0 { padding: 0; }
.hvnly-p-1 { padding: 0.25rem; }
.hvnly-p-2 { padding: 0.5rem; }
.hvnly-p-3 { padding: 0.75rem; }
.hvnly-p-4 { padding: 1rem; }
.hvnly-p-5 { padding: 1.5rem; }







/* Responsive Display */
@media (max-width: 767px) {
  .sm\:hvnly-d-none { display: none; }
  .sm\:hvnly-d-block { display: block; }
}

@media (min-width: 768px) and (max-width: 991px) {
  .md\:hvnly-d-none { display: none; }
  .md\:hvnly-d-block { display: block; }
}

@media (min-width: 992px) {
  .lg\:hvnly-d-none { display: none; }
  .lg\:hvnly-d-block { display: block; }
}

/* ======================
   Interactive controls (migrated from UI layer → Core tokens)
   Public classes unchanged: .hvnly-ui-control, .hvnly-btn, .hvnly-action-toggle
   Paint consumes Core design tokens (--hvnly-button-*, --hvnly-brand-*, …).
======================= */

/* ======================================================================
 * 1) .hvnly-ui-control — generic interactive chrome
 * ====================================================================== */
button.hvnly-ui-control,
a.hvnly-ui-control,
input.hvnly-ui-control[type="button"],
input.hvnly-ui-control[type="submit"],
input.hvnly-ui-control[type="reset"] {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	box-sizing: border-box;
	margin: 0;
	font-family: inherit;
	font-style: normal;
	letter-spacing: normal;
	text-transform: none;
	text-shadow: none;
	text-decoration: none;
	vertical-align: middle;
	cursor: pointer;
	background-image: none;
	outline: none;
	-webkit-tap-highlight-color: transparent;
	/* Soft-surface defaults (surfaces override via --hvnly-ui-* bridges). */
	background-color: var(--hvnly-ui-bg, var(--hvnly-color-bg-white, #fff));
	color: var(--hvnly-ui-fg, var(--hvnly-text-primary, #1a1a2e));
	border-style: solid;
	border-width: var(--hvnly-ui-border-width, 1px);
	border-color: var(--hvnly-ui-border, var(--hvnly-border-color, #e0e0e0));
	border-radius: var(--hvnly-button-radius, var(--hvnly-border-radius-xs, 4px));
	box-shadow: var(--hvnly-ui-shadow, none);
	transition:
		background-color var(--hvnly-transition-time, 0.2s ease),
		color var(--hvnly-transition-time, 0.2s ease),
		border-color var(--hvnly-transition-time, 0.2s ease),
		box-shadow var(--hvnly-transition-time, 0.2s ease),
		opacity var(--hvnly-transition-time, 0.2s ease),
		transform var(--hvnly-transition-time, 0.2s ease);
	transform: none;
}

/* Attr *[class*="hvnly-"] bumps specificity past theme `button:hover` (0,2,1). */
button.hvnly-ui-control[class*="hvnly-"]:is(:hover, :focus, :active, :focus-visible),
a.hvnly-ui-control[class*="hvnly-"]:is(:hover, :focus, :active, :focus-visible),
input.hvnly-ui-control[type="button"][class*="hvnly-"]:is(:hover, :focus, :active, :focus-visible),
input.hvnly-ui-control[type="submit"][class*="hvnly-"]:is(:hover, :focus, :active, :focus-visible),
input.hvnly-ui-control[type="reset"][class*="hvnly-"]:is(:hover, :focus, :active, :focus-visible) {
	background-image: none;
	background-color: var(
		--hvnly-ui-bg-hover,
		var(--hvnly-ui-bg, var(--hvnly-color-bg-light, #f5f5f5))
	);
	color: var(--hvnly-ui-fg-hover, var(--hvnly-ui-fg, var(--hvnly-brand-primary)));
	border-color: var(
		--hvnly-ui-border-hover,
		var(--hvnly-ui-border, var(--hvnly-brand-primary))
	);
	box-shadow: var(--hvnly-ui-shadow-hover, var(--hvnly-ui-shadow, none));
	text-decoration: none;
	text-shadow: none;
	outline: none;
	transform: none;
}

button.hvnly-ui-control:focus-visible,
a.hvnly-ui-control:focus-visible,
input.hvnly-ui-control[type="button"]:focus-visible,
input.hvnly-ui-control[type="submit"]:focus-visible,
input.hvnly-ui-control[type="reset"]:focus-visible {
	outline: 2px solid var(--hvnly-brand-secondary, var(--hvnly-secondary-color));
	outline-offset: 2px;
	box-shadow: 0 0 0 3px var(--hvnly-focus-ring);
}

/* Selected / pressed / current / active page.
   Exclude `.hvnly-property-view-btn`: JS toggles `.active` only and leaves
   SSR `aria-pressed` stale — keyed paint here kept the wrong view lit. */
button.hvnly-ui-control.active,
button.hvnly-ui-control.is-active,
button.hvnly-ui-control[aria-pressed="true"]:not(.hvnly-property-view-btn),
button.hvnly-ui-control[aria-current="page"],
a.hvnly-ui-control.active,
a.hvnly-ui-control.is-active,
a.hvnly-ui-control[aria-current="page"] {
	background-color: var(
		--hvnly-ui-bg-active,
		var(--hvnly-button-bg, var(--hvnly-brand-primary))
	);
	color: var(
		--hvnly-ui-fg-active,
		var(--hvnly-button-color, #fff)
	);
	border-color: var(
		--hvnly-ui-border-active,
		var(--hvnly-button-bg, var(--hvnly-brand-primary))
	);
}

button.hvnly-ui-control.active:is(:hover, :focus, :active),
button.hvnly-ui-control.is-active:is(:hover, :focus, :active),
button.hvnly-ui-control[aria-pressed="true"]:not(.hvnly-property-view-btn):is(:hover, :focus, :active),
button.hvnly-ui-control[aria-current="page"]:is(:hover, :focus, :active),
a.hvnly-ui-control.active:is(:hover, :focus, :active),
a.hvnly-ui-control.is-active:is(:hover, :focus, :active) {
	background-color: var(
		--hvnly-ui-bg-active-hover,
		var(--hvnly-ui-bg-active, var(--hvnly-button-bg-hover))
	);
	color: var(--hvnly-ui-fg-active, var(--hvnly-button-color, #fff));
	border-color: var(
		--hvnly-ui-border-active-hover,
		var(--hvnly-ui-border-active, var(--hvnly-button-bg-hover))
	);
	background-image: none;
	transform: none;
}

button.hvnly-ui-control:disabled,
button.hvnly-ui-control[aria-disabled="true"],
button.hvnly-ui-control[data-hvnly-busy="1"],
input.hvnly-ui-control:disabled {
	opacity: 0.6;
	cursor: not-allowed;
	pointer-events: none;
	transform: none;
	background-color: var(
		--hvnly-ui-bg-disabled,
		var(--hvnly-color-bg-light)
	);
	color: var(
		--hvnly-ui-fg-disabled,
		var(--hvnly-text-secondary)
	);
	border-color: var(
		--hvnly-ui-border-disabled,
		var(--hvnly-border-color)
	);
}

/* Icon / SVG kids — kill theme `button i` / `button svg` leakage */
button.hvnly-ui-control :is(i, svg, .hvnly-icon),
a.hvnly-ui-control :is(i, svg, .hvnly-icon) {
	display: inline-block;
	margin: 0;
	padding: 0;
	float: none;
	position: static;
	max-width: none;
	max-height: none;
	border: 0;
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: inherit;
	line-height: 1;
	vertical-align: middle;
	transform: none;
	pointer-events: none;
}

button.hvnly-ui-control:is(:hover, :focus, :active) :is(i, svg, .hvnly-icon),
a.hvnly-ui-control:is(:hover, :focus, :active) :is(i, svg, .hvnly-icon) {
	background: transparent;
	color: inherit;
	transform: none;
}

/* ----------------------------------------------------------------------
 * Surface paint bridges — existing BEM → --hvnly-ui-* (layout unchanged)
 * -------------------------------------------------------------------- */
.hvnly-property-view-btn,
.hvnly-property--archive__view-btn,
.hvnly-block-saved__view-btn {
	--hvnly-ui-bg: var(--hvnly-card-bg, var(--hvnly-color-bg-white, #fff));
	--hvnly-ui-fg: var(--hvnly-text-secondary);
	--hvnly-ui-border: var(--hvnly-border-color);
	--hvnly-ui-bg-hover: var(--hvnly-secondary-color, var(--hvnly-brand-secondary));
	--hvnly-ui-fg-hover: var(--hvnly-button-color, var(--hvnly-color-white, #fff));
	--hvnly-ui-border-hover: var(--hvnly-secondary-color, var(--hvnly-brand-secondary));
	--hvnly-ui-bg-active: var(--hvnly-primary-color, var(--hvnly-brand-primary));
	--hvnly-ui-fg-active: var(--hvnly-button-color, var(--hvnly-color-white, #fff));
	--hvnly-ui-border-active: var(--hvnly-primary-color, var(--hvnly-brand-primary));
	--hvnly-ui-bg-active-hover: var(--hvnly-primary-color, var(--hvnly-brand-primary));
	--hvnly-ui-border-active-hover: var(--hvnly-primary-color, var(--hvnly-brand-primary));
	--hvnly-ui-border-width: 1px;
}

.hvnly-property-pagination-item,
.hvnly-property--archive__pagination-item,
.hvnly-block-saved__page {
	--hvnly-ui-bg: var(--hvnly-color-bg-white, #fff);
	--hvnly-ui-fg: var(--hvnly-text-secondary);
	--hvnly-ui-border: var(--hvnly-border-color);
	--hvnly-ui-bg-hover: rgba(var(--hvnly-primary-rgb, 0, 115, 170), 0.08);
	--hvnly-ui-fg-hover: var(--hvnly-brand-primary);
	--hvnly-ui-border-hover: rgba(var(--hvnly-primary-rgb, 0, 115, 170), 0.45);
	--hvnly-ui-bg-active: var(--hvnly-brand-primary);
	--hvnly-ui-fg-active: var(--hvnly-color-white, #fff);
	--hvnly-ui-border-active: var(--hvnly-brand-primary);
	--hvnly-ui-shadow-hover: none;
	--hvnly-ui-border-width: 1px;
}

.hvnly-property-load-more-btn,
.hvnly-property--archive__search-btn,
.hvnly-ajax-retry-btn,
.hvnly-retry-map-btn {
	--hvnly-ui-bg: var(--hvnly-button-bg, var(--hvnly-brand-primary));
	--hvnly-ui-fg: var(--hvnly-button-color, #fff);
	--hvnly-ui-border: var(--hvnly-button-bg, var(--hvnly-brand-primary));
	--hvnly-ui-bg-hover: var(--hvnly-button-bg-hover, var(--hvnly-brand-secondary));
	--hvnly-ui-fg-hover: var(--hvnly-button-color, #fff);
	--hvnly-ui-border-hover: var(--hvnly-button-bg-hover, var(--hvnly-brand-secondary));
	--hvnly-ui-border-width: 1px;
}

.hvnly-property-reset-filters-btn {
	--hvnly-ui-bg: transparent;
	--hvnly-ui-fg: var(--hvnly-brand-primary);
	--hvnly-ui-border: transparent;
	--hvnly-ui-bg-hover: transparent;
	--hvnly-ui-fg-hover: var(--hvnly-brand-secondary);
	--hvnly-ui-border-hover: transparent;
	--hvnly-ui-border-width: 0;
}

.hvnly-property-filter-toggle {
	--hvnly-ui-bg: var(--hvnly-color-bg-white, #fff);
	--hvnly-ui-fg: var(--hvnly-text-primary);
	--hvnly-ui-border: var(--hvnly-border-color);
	--hvnly-ui-bg-hover: var(--hvnly-color-bg-light, #f5f5f5);
	--hvnly-ui-fg-hover: var(--hvnly-brand-primary);
	--hvnly-ui-border-hover: var(--hvnly-brand-primary);
	--hvnly-ui-bg-active: var(--hvnly-brand-primary);
	--hvnly-ui-fg-active: var(--hvnly-color-white, #fff);
	--hvnly-ui-border-active: var(--hvnly-brand-primary);
	--hvnly-ui-border-width: 1px;
}

.hvnly-property-carousel-nav-btn,
.hvnly-block-map__btn,
.hvnly-block-carousel__arrow,
.hvnly-map-fullscreen-btn,
.hvnly-property-single__gallery-btn,
.hvnly-property-single__carousel-btn,
.hvnly-property-single__carousel-dot,
.hvnly-agent-widget__nav-btn,
.hvnly-agent-listings-nav-btn,
.hvnly-auth__toggle,
.hvnly-auth__tab,
.hvnly-agent-single__status-tab {
	--hvnly-ui-bg: var(--hvnly-color-bg-white, #fff);
	--hvnly-ui-fg: var(--hvnly-text-primary);
	--hvnly-ui-border: var(--hvnly-border-color);
	--hvnly-ui-bg-hover: var(--hvnly-color-bg-light, #f5f5f5);
	--hvnly-ui-fg-hover: var(--hvnly-brand-primary);
	--hvnly-ui-border-hover: var(--hvnly-brand-primary);
	--hvnly-ui-border-width: 1px;
}

.hvnly-auth__toggle {
	--hvnly-ui-bg: transparent;
	--hvnly-ui-fg: var(--hvnly-text-secondary);
	--hvnly-ui-border: transparent;
	--hvnly-ui-bg-hover: transparent;
	--hvnly-ui-fg-hover: var(--hvnly-brand-primary);
	--hvnly-ui-border-hover: transparent;
	--hvnly-ui-border-width: 0;
}

.hvnly-auth__linkbtn {
	--hvnly-ui-bg: transparent;
	--hvnly-ui-fg: var(--hvnly-brand-primary);
	--hvnly-ui-border: transparent;
	--hvnly-ui-bg-hover: transparent;
	--hvnly-ui-fg-hover: var(--hvnly-brand-secondary);
	--hvnly-ui-border-hover: transparent;
	--hvnly-ui-border-width: 0;
}

.hvnly-map-fullscreen-btn {
	--hvnly-ui-bg-hover: var(--hvnly-brand-primary);
	--hvnly-ui-fg-hover: var(--hvnly-color-white, #fff);
	--hvnly-ui-border-hover: var(--hvnly-brand-primary);
}

/* Fancybox / media chrome — keep layout file in charge; only seal theme fill */
.hvnly-property-single__fancybox-close,
.hvnly-property-single__fancybox-fullscreen,
.hvnly-property-single__fancybox-nav {
	--hvnly-ui-bg: transparent;
	--hvnly-ui-fg: inherit;
	--hvnly-ui-border: transparent;
	--hvnly-ui-bg-hover: transparent;
	--hvnly-ui-fg-hover: inherit;
	--hvnly-ui-border-hover: transparent;
	--hvnly-ui-border-width: 0;
}

/* Print / unlabeled single action chrome (Save uses action-toggle) */
.hvnly-property-single__print-btn,
.hvnly-property-single__action-btn:not(.hvnly-action-toggle) {
	--hvnly-ui-bg: transparent;
	--hvnly-ui-fg: var(--hvnly-text-primary);
	--hvnly-ui-border: var(--hvnly-border-color);
	--hvnly-ui-bg-hover: var(--hvnly-color-bg-light, #f5f5f5);
	--hvnly-ui-fg-hover: var(--hvnly-brand-primary);
	--hvnly-ui-border-hover: var(--hvnly-brand-primary);
	--hvnly-ui-border-width: 1px;
}

/* ======================================================================
 * 2) .hvnly-btn — labeled CTA primitive
 *    Legacy `.hvnly-btn-primary` (without `.hvnly-btn`) stays supported.
 * ====================================================================== */
a.hvnly-btn,
button.hvnly-btn,
input.hvnly-btn[type="button"],
input.hvnly-btn[type="submit"],
a.hvnly-btn-primary,
button.hvnly-btn-primary,
a.hvnly-btn--primary,
button.hvnly-btn--primary {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	margin: 0;
	padding: var(--hvnly-button-padding, 0.75rem 1.5rem);
	font-family: inherit;
	font-size: var(--hvnly-font-size-label, 0.8rem);
	font-weight: var(--hvnly-font-weight-regular, 400);
	font-style: normal;
	line-height: 1;
	letter-spacing: normal;
	text-align: center;
	text-decoration: none;
	text-transform: none;
	text-shadow: none;
	white-space: nowrap;
	user-select: none;
	vertical-align: middle;
	cursor: pointer;
	position: relative;
	overflow: hidden;
	border-style: solid;
	border-width: 1px;
	border-radius: var(--hvnly-button-radius, var(--hvnly-border-radius-xs, 4px));
	background-image: none;
	outline: none;
	-webkit-tap-highlight-color: transparent;
	transition:
		background-color var(--hvnly-transition-time, 0.2s ease),
		color var(--hvnly-transition-time, 0.2s ease),
		border-color var(--hvnly-transition-time, 0.2s ease),
		box-shadow var(--hvnly-transition-time, 0.2s ease),
		opacity var(--hvnly-transition-time, 0.2s ease),
		transform var(--hvnly-transition-time, 0.2s ease);
	transform: none;
}

/* Default / primary paint (token SOT) */
a.hvnly-btn:not([class*="hvnly-btn--"]):not([class*="hvnly-btn-outline"]):not([class*="hvnly-btn-ghost"]):not([class*="hvnly-btn-secondary"]):not([class*="hvnly-btn-success"]):not([class*="hvnly-btn-alert"]):not([class*="hvnly-btn-warning"]),
button.hvnly-btn:not([class*="hvnly-btn--"]):not([class*="hvnly-btn-outline"]):not([class*="hvnly-btn-ghost"]):not([class*="hvnly-btn-secondary"]):not([class*="hvnly-btn-success"]):not([class*="hvnly-btn-alert"]):not([class*="hvnly-btn-warning"]),
a.hvnly-btn-primary,
button.hvnly-btn-primary,
a.hvnly-btn--primary,
button.hvnly-btn--primary,
a.hvnly-btn.hvnly-btn-primary,
button.hvnly-btn.hvnly-btn-primary,
a.hvnly-btn.hvnly-btn--primary,
button.hvnly-btn.hvnly-btn--primary {
	background-color: var(--hvnly-button-bg, var(--hvnly-brand-primary, var(--hvnly-primary-color)));
	color: var(--hvnly-button-color, var(--hvnly-color-white, #fff));
	border-color: var(--hvnly-button-bg, var(--hvnly-brand-primary, var(--hvnly-primary-color)));
}

a.hvnly-btn-primary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn-primary:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn--primary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn--primary:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn-primary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn-primary:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn--primary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn--primary:is(:hover, :focus, :active):not(:disabled) {
	background-color: var(--hvnly-button-bg-hover, var(--hvnly-brand-secondary, var(--hvnly-secondary-color)));
	color: var(--hvnly-button-color, var(--hvnly-color-white, #fff));
	border-color: var(--hvnly-button-bg-hover, var(--hvnly-brand-secondary, var(--hvnly-secondary-color)));
	background-image: none;
	text-decoration: none;
	text-shadow: none;
	transform: none;
}

/* Secondary */
a.hvnly-btn-secondary,
button.hvnly-btn-secondary,
a.hvnly-btn--secondary,
button.hvnly-btn--secondary,
a.hvnly-btn.hvnly-btn-secondary,
button.hvnly-btn.hvnly-btn-secondary,
a.hvnly-btn.hvnly-btn--secondary,
button.hvnly-btn.hvnly-btn--secondary {
	background-color: var(--hvnly-brand-secondary);
	color: var(--hvnly-color-white, #fff);
	border-color: var(--hvnly-brand-secondary);
}

a.hvnly-btn-secondary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn-secondary:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn--secondary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn--secondary:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn-secondary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn-secondary:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn--secondary:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn--secondary:is(:hover, :focus, :active):not(:disabled) {
	background-color: var(--hvnly-brand-secondary, var(--hvnly-secondary-color));
	color: var(--hvnly-color-white, #fff);
	border-color: var(--hvnly-brand-secondary, var(--hvnly-secondary-color));
	background-image: none;
	text-decoration: none;
	transform: none;
}

/* Outline */
a.hvnly-btn-outline,
button.hvnly-btn-outline,
a.hvnly-btn--outline,
button.hvnly-btn--outline,
a.hvnly-btn.hvnly-btn-outline,
button.hvnly-btn.hvnly-btn-outline,
a.hvnly-btn.hvnly-btn--outline,
button.hvnly-btn.hvnly-btn--outline {
	background-color: transparent;
	color: var(--hvnly-brand-primary);
	border-color: var(--hvnly-brand-primary);
}

a.hvnly-btn-outline:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn-outline:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn--outline:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn--outline:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn-outline:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn-outline:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn--outline:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn--outline:is(:hover, :focus, :active):not(:disabled) {
	background-color: var(--hvnly-brand-primary);
	color: var(--hvnly-color-white, #fff);
	border-color: var(--hvnly-brand-primary);
	background-image: none;
	text-decoration: none;
	transform: none;
}

/* Ghost */
a.hvnly-btn-ghost,
button.hvnly-btn-ghost,
a.hvnly-btn--ghost,
button.hvnly-btn--ghost,
a.hvnly-btn.hvnly-btn-ghost,
button.hvnly-btn.hvnly-btn-ghost,
a.hvnly-btn.hvnly-btn--ghost,
button.hvnly-btn.hvnly-btn--ghost {
	background-color: transparent;
	color: var(--hvnly-brand-primary);
	border-color: transparent;
}

a.hvnly-btn-ghost:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn-ghost:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn--ghost:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn--ghost:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn-ghost:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn-ghost:is(:hover, :focus, :active):not(:disabled),
a.hvnly-btn.hvnly-btn--ghost:is(:hover, :focus, :active):not(:disabled),
button.hvnly-btn.hvnly-btn--ghost:is(:hover, :focus, :active):not(:disabled) {
	background-color: var(--hvnly-brand-primary);
	color: var(--hvnly-color-white, #fff);
	border-color: var(--hvnly-brand-primary);
	background-image: none;
	text-decoration: none;
	transform: none;
}

/* Success / danger / warning */
a.hvnly-btn-success,
button.hvnly-btn-success,
a.hvnly-btn--success,
button.hvnly-btn--success {
	background-color: var(--hvnly-brand-success);
	color: var(--hvnly-color-white, #fff);
	border-color: var(--hvnly-brand-success);
}

a.hvnly-btn-alert,
button.hvnly-btn-alert,
a.hvnly-btn--danger,
button.hvnly-btn--danger,
a.hvnly-btn--alert,
button.hvnly-btn--alert {
	background-color: var(--hvnly-brand-error);
	color: var(--hvnly-color-white, #fff);
	border-color: var(--hvnly-brand-error);
}

a.hvnly-btn-warning,
button.hvnly-btn-warning,
a.hvnly-btn--warning,
button.hvnly-btn--warning {
	background-color: var(--hvnly-brand-warning);
	color: var(--hvnly-color-white, #fff);
	border-color: var(--hvnly-brand-warning);
}

a.hvnly-btn:focus-visible,
button.hvnly-btn:focus-visible,
a.hvnly-btn-primary:focus-visible,
button.hvnly-btn-primary:focus-visible,
a.hvnly-btn--primary:focus-visible,
button.hvnly-btn--primary:focus-visible {
	outline: 2px solid var(--hvnly-brand-secondary, var(--hvnly-secondary-color));
	outline-offset: 2px;
	box-shadow: 0 0 0 3px var(--hvnly-focus-ring);
}

a.hvnly-btn:focus:not(:focus-visible),
button.hvnly-btn:focus:not(:focus-visible) {
	outline: none;
}

/* Visited anchors must never become browser purple */
a.hvnly-btn:visited,
a.hvnly-btn-primary:visited,
a.hvnly-btn--primary:visited,
a.hvnly-btn-secondary:visited,
a.hvnly-btn--secondary:visited,
a.hvnly-btn-outline:visited,
a.hvnly-btn--outline:visited,
a.hvnly-btn-ghost:visited,
a.hvnly-btn--ghost:visited,
a.hvnly-button:visited {
	color: var(--hvnly-button-color, var(--hvnly-color-white, #fff));
}

a.hvnly-btn-outline:visited,
a.hvnly-btn--outline:visited,
a.hvnly-btn-ghost:visited,
a.hvnly-btn--ghost:visited {
	color: var(--hvnly-brand-primary, var(--hvnly-primary-color));
}

a.hvnly-btn:disabled,
button.hvnly-btn:disabled,
button.hvnly-btn[aria-disabled="true"] {
	opacity: 0.6;
	cursor: not-allowed;
	transform: none;
	pointer-events: none;
}

/* Sizes — must beat `button.hvnly-btn` (0,1,1) from components.css leftovers */
button.hvnly-btn.hvnly-btn--sm,
a.hvnly-btn.hvnly-btn--sm,
button.hvnly-btn.hvnly-btn-sm,
a.hvnly-btn.hvnly-btn-sm {
	padding: 0.5rem 1rem;
	font-size: var(--hvnly-font-size-sm, 0.875rem);
}

button.hvnly-btn.hvnly-btn--lg,
a.hvnly-btn.hvnly-btn--lg,
button.hvnly-btn.hvnly-btn-lg,
a.hvnly-btn.hvnly-btn-lg {
	padding: 1rem 2rem;
	font-size: var(--hvnly-font-size-lg, 1.25rem);
}

button.hvnly-btn.hvnly-btn--xl,
a.hvnly-btn.hvnly-btn--xl,
button.hvnly-btn.hvnly-btn-xl,
a.hvnly-btn.hvnly-btn-xl {
	padding: 1.25rem 2.5rem;
	font-size: var(--hvnly-font-size-xl, 1.5rem);
}

a.hvnly-btn :is(i, svg, .hvnly-icon),
button.hvnly-btn :is(i, svg, .hvnly-icon) {
	float: none;
	position: static;
	background: transparent;
	color: inherit;
	line-height: 1;
	transform: none;
	pointer-events: none;
}

/* Legacy `.hvnly-button` → btn contract */
a.hvnly-button,
button.hvnly-button {
	-webkit-appearance: none;
	appearance: none;
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	text-decoration: none;
	cursor: pointer;
	background-color: var(--hvnly-button-bg, var(--hvnly-brand-primary, var(--hvnly-primary-color)));
	color: var(--hvnly-button-color, var(--hvnly-color-white, #fff));
	border: 1px solid var(--hvnly-button-bg, var(--hvnly-brand-primary, var(--hvnly-primary-color)));
	border-radius: var(--hvnly-button-radius, var(--hvnly-border-radius-xs, 4px));
	padding: var(--hvnly-button-padding, 0.75rem 1.5rem);
	transform: none;
}

a.hvnly-button:is(:hover, :focus, :active),
button.hvnly-button:is(:hover, :focus, :active) {
	background-color: var(--hvnly-button-bg-hover, var(--hvnly-brand-secondary, var(--hvnly-secondary-color)));
	color: var(--hvnly-button-color, var(--hvnly-color-white, #fff));
	border-color: var(--hvnly-button-bg-hover, var(--hvnly-brand-secondary, var(--hvnly-secondary-color)));
	background-image: none;
	text-decoration: none;
	transform: none;
}

/* ======================================================================
 * 3) .hvnly-action-toggle — Favorite / Compare primitive (base chrome)
 *    Specialty favorited/compared/labeled/footer follows below.
 * ====================================================================== */
button.hvnly-action-toggle,
a.hvnly-action-toggle {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	margin: 0;
	padding: 0;
	border-style: solid;
	border-width: 0;
	border-color: transparent;
	border-radius: 50%;
	width: 2rem;
	height: 2rem;
	min-width: 2rem;
	min-height: 2rem;
	max-width: 2rem;
	max-height: 2rem;
	background-color: rgba(255, 255, 255, 0.9);
	background-image: none;
	color: var(--hvnly-text-primary, #1a1a2e);
	font-family: inherit;
	font-size: var(--hvnly-font-size-xs, 0.75rem);
	font-weight: inherit;
	font-style: normal;
	line-height: 1;
	letter-spacing: normal;
	text-align: center;
	text-transform: none;
	text-decoration: none;
	text-shadow: none;
	box-shadow: none;
	outline: none;
	cursor: pointer;
	overflow: visible;
	vertical-align: middle;
	-webkit-tap-highlight-color: transparent;
	transition:
		background-color var(--hvnly-transition-time, 0.2s ease),
		color var(--hvnly-transition-time, 0.2s ease),
		border-color var(--hvnly-transition-time, 0.2s ease),
		box-shadow var(--hvnly-transition-time, 0.2s ease),
		opacity var(--hvnly-transition-time, 0.2s ease),
		transform var(--hvnly-transition-time, 0.2s ease);
	transform: none;
}

button.hvnly-action-toggle :is(i, svg, .hvnly-action-toggle__icon, .hvnly-compare-toggle__icon),
a.hvnly-action-toggle :is(i, svg, .hvnly-action-toggle__icon, .hvnly-compare-toggle__icon) {
	display: block;
	margin: 0;
	padding: 0;
	float: none;
	position: static;
	width: auto;
	height: auto;
	max-width: none;
	max-height: none;
	border: 0;
	background: transparent;
	background-image: none;
	box-shadow: none;
	color: inherit;
	font-size: inherit;
	line-height: 1;
	vertical-align: middle;
	transform: none;
	pointer-events: none;
}

/* Beat Hello Elementor `button:hover` (0,2,1) → (0,3,1)+ */
button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active, :focus-visible),
button.hvnly-action-toggle.hvnly-property--grid-list--compare:is(:hover, :focus, :active, :focus-visible),
button.hvnly-action-toggle.hvnly-compare-toggle:is(:hover, :focus, :active, :focus-visible),
a.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active, :focus-visible),
a.hvnly-action-toggle.hvnly-property--grid-list--compare:is(:hover, :focus, :active, :focus-visible) {
	background-color: #fff;
	background-image: none;
	border-color: transparent;
	color: var(--hvnly-brand-primary, #0073aa);
	text-decoration: none;
	text-shadow: none;
	box-shadow: none;
	outline: none;
	transform: scale(1.08);
}

button.hvnly-action-toggle:focus-visible,
a.hvnly-action-toggle:focus-visible {
	outline: 2px solid var(--hvnly-brand-primary, #0073aa);
	outline-offset: 2px;
	box-shadow: none;
}

button.hvnly-action-toggle[data-hvnly-busy="1"],
button.hvnly-action-toggle:disabled,
button.hvnly-action-toggle[aria-disabled="true"] {
	opacity: 0.65;
	cursor: default;
	pointer-events: none;
	transform: none;
}

/* ======================================================================
 * Reduced motion
 * ====================================================================== */
@media (prefers-reduced-motion: reduce) {
	button.hvnly-ui-control,
	a.hvnly-ui-control,
	a.hvnly-btn,
	button.hvnly-btn,
	button.hvnly-action-toggle,
	a.hvnly-action-toggle,
	button.hvnly-ui-control:is(:hover, :focus, :active),
	a.hvnly-btn:is(:hover, :focus, :active),
	button.hvnly-action-toggle:is(:hover, :focus, :active) {
		transition: none;
		transform: none;
	}
}

/* Action-toggle specialty (was hvnly-action-toggle.css) */
/* ----------------------------------------------------------------------
 * Favorite saved state (tokens)
 * -------------------------------------------------------------------- */
button.hvnly-action-toggle.hvnly-property--grid-list--favorite.is-favorited,
button.hvnly-action-toggle.hvnly-property--grid-list--favorite[aria-pressed="true"] {
	color: var(--hvnly-brand-error, #ff4d4f);
}

button.hvnly-action-toggle.hvnly-property--grid-list--favorite.is-favorited :is(i, svg),
button.hvnly-action-toggle.hvnly-property--grid-list--favorite[aria-pressed="true"] :is(i, svg) {
	color: var(--hvnly-brand-error, #ff4d4f);
}

button.hvnly-action-toggle.hvnly-property--grid-list--favorite.is-favorited:is(:hover, :focus, :active),
button.hvnly-action-toggle.hvnly-property--grid-list--favorite[aria-pressed="true"]:is(:hover, :focus, :active) {
	background-color: #fff;
	background-image: none;
	color: var(--hvnly-brand-error, #ff4d4f);
}

/* Compare pressed */
button.hvnly-action-toggle.hvnly-compare-toggle[aria-pressed="true"],
button.hvnly-action-toggle.hvnly-property--grid-list--compare[aria-pressed="true"],
button.hvnly-action-toggle.hvnly-compare-toggle.is-compared,
button.hvnly-action-toggle.hvnly-property--grid-list--compare.is-compared {
	color: var(--hvnly-color-bg-white, #fff);
	background-color: var(--hvnly-brand-primary, #6C60FE);
	background-image: none;
}

/* ----------------------------------------------------------------------
 * Root-scoped reinforces (map popups / archives / shortcodes / Elementor)
 * -------------------------------------------------------------------- */
.hvnly-content-wrapper button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active),
.hvnly-content-wrapper button.hvnly-action-toggle.hvnly-property--grid-list--compare:is(:hover, :focus, :active),
.hvnly-content-wrapper button.hvnly-action-toggle.hvnly-compare-toggle:is(:hover, :focus, :active),
.hvnly-property-display-shortcode button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active),
.hvnly-property-display-shortcode button.hvnly-action-toggle.hvnly-property--grid-list--compare:is(:hover, :focus, :active),
.hvnly-property-display-shortcode button.hvnly-action-toggle.hvnly-compare-toggle:is(:hover, :focus, :active),
.hvnly-block-map__popup-host button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active),
.hvnly-block-map__popup-host button.hvnly-action-toggle.hvnly-property--grid-list--compare:is(:hover, :focus, :active),
.hvnly-block-map__popup-host button.hvnly-action-toggle.hvnly-compare-toggle:is(:hover, :focus, :active),
body.hvnly-plugin-active button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active),
body.hvnly-plugin-active button.hvnly-action-toggle.hvnly-property--grid-list--compare:is(:hover, :focus, :active),
body.hvnly-plugin-active button.hvnly-action-toggle.hvnly-compare-toggle:is(:hover, :focus, :active),
body.hvnly-property-archive button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active),
body.hvnly-property-archive button.hvnly-action-toggle.hvnly-property--grid-list--compare:is(:hover, :focus, :active),
body.hvnly-property-single button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active) {
	background-color: #fff;
	background-image: none;
	color: var(--hvnly-brand-primary, #0073aa);
	border-color: transparent;
	text-decoration: none;
	transform: scale(1.08);
}

/* Footers that intentionally brand-tint the control */
.hvnly-property-field-footer button.hvnly-action-toggle.hvnly-property--grid-list--favorite,
.hvnly-property--grid-list--footer button.hvnly-action-toggle.hvnly-property--grid-list--favorite {
	background-color: var(--hvnly-brand-primary, #0073aa);
	color: var(--hvnly-color-white, #fff);
}

.hvnly-property-field-footer button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active),
.hvnly-property--grid-list--footer button.hvnly-action-toggle.hvnly-property--grid-list--favorite:is(:hover, :focus, :active) {
	background-color: var(--hvnly-brand-secondary, var(--hvnly-brand-primary, #0073aa));
	color: var(--hvnly-color-white, #fff);
	transform: scale(1.08);
}

/* ----------------------------------------------------------------------
 * Labeled variant (single property “Save”)
 * -------------------------------------------------------------------- */
button.hvnly-action-toggle.hvnly-action-toggle--labeled {
	width: auto;
	max-width: none;
	height: auto;
	min-width: 0;
	min-height: 0;
	max-height: none;
	border-radius: var(--hvnly-button-radius, var(--hvnly-border-radius-xs, 4px));
	padding: 0.5rem 0.75rem;
	gap: 0.4rem;
	background-color: transparent;
	background-image: none;
	transform: none;
}

button.hvnly-action-toggle.hvnly-action-toggle--labeled:is(:hover, :focus, :active, :focus-visible) {
	background-color: transparent;
	background-image: none;
	transform: none;
	color: inherit;
}

button.hvnly-action-toggle.hvnly-action-toggle--labeled.is-favorited:is(:hover, :focus, :active),
button.hvnly-action-toggle.hvnly-action-toggle--labeled[aria-pressed="true"]:is(:hover, :focus, :active) {
	background-color: transparent;
	background-image: none;
	color: var(--hvnly-brand-error, #ff4d4f);
}

@media (prefers-reduced-motion: reduce) {
	button.hvnly-action-toggle:is(:hover, :focus, :active),
	a.hvnly-action-toggle:is(:hover, :focus, :active) {
		transform: none;
	}
}

