/* VIME Listings — estrutura. Cores e medidas vêm de variáveis definidas pelos controles do widget. */

.vime-listing {
	position: relative;
}

.vime-listing__items > style,
.vime-listing__items > link {
	display: none;
}

/* ── Carregamento (estilo escolhido na listagem) ── */

.vime-listing {
	--vime-loading-color: #1d2327;
	--vime-skeleton-base: #ececec;
	--vime-skeleton-shine: #f7f7f7;
	--vime-skeleton-radius: 8px;
}

.vime-listing.is-loading .vime-listing__items {
	pointer-events: none;
}

.vime-listing--loading-fade.is-loading .vime-listing__items,
.vime-listing--loading-spinner.is-loading .vime-listing__items {
	opacity: .45;
	transition: opacity .2s ease;
}

.vime-listing--loading-spinner.is-loading::after {
	content: "";
	position: absolute;
	z-index: 5;
	top: min(50%, 160px);
	left: 50%;
	width: 36px;
	height: 36px;
	margin: -18px 0 0 -18px;
	border: 3px solid var(--vime-loading-color);
	border-right-color: transparent;
	border-radius: 50%;
	animation: vime-listing-spin .8s linear infinite;
}

.vime-listing--loading-bar::before {
	content: "";
	position: absolute;
	z-index: 5;
	top: -6px;
	left: 0;
	width: 0;
	height: 3px;
	border-radius: 2px;
	background: var(--vime-loading-color);
	opacity: 0;
}

.vime-listing--loading-bar.is-loading::before {
	opacity: 1;
	animation: vime-listing-bar 1.2s ease-in-out infinite;
}

@keyframes vime-listing-bar {
	0% { left: 0; width: 0; }
	50% { left: 15%; width: 55%; }
	100% { left: 100%; width: 0; }
}

.vime-listing--loading-text.is-loading::after {
	content: attr(data-loading-text);
	display: block;
	margin-top: 16px;
	color: var(--vime-loading-color);
	text-align: center;
}

.vime-skeleton {
	border-radius: var(--vime-skeleton-radius);
	background: linear-gradient(90deg, var(--vime-skeleton-base) 25%, var(--vime-skeleton-shine) 37%, var(--vime-skeleton-base) 63%);
	background-size: 400% 100%;
	animation: vime-skeleton 1.4s ease infinite;
}

@keyframes vime-skeleton {
	0% { background-position: 100% 50%; }
	100% { background-position: 0 50%; }
}

/* ── Grade ── */

.vime-listing-grid {
	display: grid;
	grid-template-columns: repeat(var(--vime-columns, 3), minmax(0, 1fr));
	column-gap: var(--vime-col-gap, 24px);
	row-gap: var(--vime-row-gap, 24px);
}

/* Colunas por largura: cabem quantas a tela permitir, entre a mínima e a máxima. */
.vime-listing-grid--auto {
	grid-template-columns: repeat(auto-fill, minmax(min(var(--vime-col-min, 240px), 100%), var(--vime-col-max, 1fr)));
}

.vime-listing.is-adjusting .vime-listing__items {
	opacity: .4;
	transition: opacity .15s ease;
}

.vime-listing-grid--equal > .vime-loop-item {
	height: 100%;
}

.vime-listing-grid--equal > .vime-loop-item > .e-con,
.vime-listing-grid--equal > .vime-loop-item > .elementor-section,
.vime-listing-grid--equal > .vime-loop-item > .elementor-section-wrap > .elementor-section {
	height: 100%;
}

/* Masonry: o JS calcula quantas linhas de 1px cada item ocupa (gap incluso).
   Só depois do JS: antes (ou com JS atrasado por otimizador) é uma grade normal. */
.vime-listing.is-ready .vime-listing-grid--masonry {
	grid-auto-rows: 1px;
	row-gap: 0;
}

/* Itens e blocos que ocupam várias células (templates alternativos). O JS
   limita as colunas às que existem na tela (--vime-col-span-fit). */
.vime-listing-grid > .vime-loop-item--span {
	grid-column: span var(--vime-col-span-fit, var(--vime-col-span, 1));
	grid-row: span var(--vime-row-span, 1);
}

/* Modo linhas sem paginação: com menos colunas, o excesso só fica escondido. */
.vime-listing-grid > .is-rows-hidden {
	display: none;
}

.vime-listing-grid--dense {
	grid-auto-flow: row dense;
}

.vime-listing-grid--masonry > .vime-loop-item {
	align-self: start;
}

/* Favoritos de visitante: o "nenhum item" só aparece depois de o JS ler o navegador. */
.vime-listing.is-favorites-pending .vime-listing__empty {
	visibility: hidden;
}

/* ── Carrossel ── */

.vime-listing-carousel {
	--vime-arrow-size: 44px;
	--vime-arrow-icon: 18px;
	position: relative;
	display: flex;
	flex-direction: column;
	min-width: 0;
}

.vime-listing-carousel__stage {
	position: relative;
	min-width: 0;
}

.vime-listing-carousel__viewport {
	overflow: hidden;
}

/* Antes do Swiper (ou sem JS): rolagem horizontal com os mesmos itens visíveis
   e espaço de cada dispositivo (variáveis impressas pelo servidor) — sem pulo ao iniciar. */
.vime-listing-carousel:not(.is-ready) .swiper-wrapper {
	display: flex;
	gap: var(--vime-gap, 24px);
	overflow-x: auto;
	scroll-snap-type: x mandatory;
}

.vime-listing-carousel:not(.is-ready) .swiper-slide {
	flex: 0 0 calc((100% - var(--vime-gap, 24px) * (var(--vime-slides, 3) - 1)) / var(--vime-slides, 3));
	scroll-snap-align: start;
}

.vime-listing-carousel .swiper-slide {
	height: auto;
}

/* Setas: botão sem herdar estilo de botão do tema. */
.vime-listing-carousel .vime-listing-carousel__arrow {
	z-index: 2;
	display: inline-flex;
	flex: 0 0 auto;
	align-items: center;
	justify-content: center;
	width: var(--vime-arrow-size);
	height: var(--vime-arrow-size);
	min-height: 0;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: var(--vime-arrow-bg, #fff);
	color: var(--vime-arrow-color, #1d2327);
	box-shadow: 0 2px 8px rgba(0, 0, 0, .15);
	font-size: var(--vime-arrow-icon);
	line-height: 1;
	text-transform: none;
	cursor: pointer;
	transition: opacity .2s ease, background-color .2s ease, color .2s ease, border-color .2s ease;
}

.vime-listing-carousel .vime-listing-carousel__arrow:hover,
.vime-listing-carousel .vime-listing-carousel__arrow:focus {
	background: var(--vime-arrow-bg-hover, var(--vime-arrow-bg, #fff));
	color: var(--vime-arrow-color-hover, var(--vime-arrow-color, #1d2327));
}

.vime-listing-carousel__arrow svg {
	width: var(--vime-arrow-icon);
	height: var(--vime-arrow-icon);
	fill: currentColor;
}

.vime-listing-carousel__arrow i {
	font-size: var(--vime-arrow-icon);
	color: inherit;
}

.vime-listing-carousel__arrow svg.vime-listing-carousel__chevron {
	fill: none;
	stroke: currentColor;
	stroke-width: 2.5;
	stroke-linecap: round;
	stroke-linejoin: round;
}

.vime-listing-carousel .vime-listing-carousel__arrow.swiper-button-disabled {
	opacity: var(--vime-arrow-disabled, .35);
	cursor: default;
}

.vime-listing-carousel .vime-listing-carousel__arrow.swiper-button-lock {
	display: none;
}

/* Laterais: sobre os itens ou fora deles. */
.vime-listing-carousel__stage > .vime-listing-carousel__arrow {
	position: absolute;
	top: var(--vime-arrow-top, 50%);
	transform: translateY(-50%);
}

.vime-listing-carousel--arrows-inside .vime-listing-carousel__arrow--prev {
	left: var(--vime-arrow-offset, 8px);
}

.vime-listing-carousel--arrows-inside .vime-listing-carousel__arrow--next {
	right: var(--vime-arrow-offset, 8px);
}

.vime-listing-carousel--arrows-outside .vime-listing-carousel__stage {
	padding-inline: calc(var(--vime-arrow-size) + var(--vime-arrow-spacing, 12px));
}

.vime-listing-carousel--arrows-outside .vime-listing-carousel__arrow--prev {
	left: var(--vime-arrow-offset, 0px);
}

.vime-listing-carousel--arrows-outside .vime-listing-carousel__arrow--next {
	right: var(--vime-arrow-offset, 0px);
}

/* Vertical: setas em cima e embaixo, área com altura definida (CSS ou medida pelo JS). */
.vime-listing-carousel--vertical .vime-listing-carousel__viewport {
	height: var(--vime-carousel-height, auto);
}

/* Altura fixa menor que o item: corta o excesso em vez de invadir o item seguinte. */
.vime-listing-carousel--vertical .swiper-slide {
	overflow: hidden;
}

.vime-listing-carousel--vertical:not(.is-ready) .swiper-wrapper {
	flex-direction: column;
	overflow: hidden;
	max-height: var(--vime-carousel-height, 640px);
}

.vime-listing-carousel--vertical:not(.is-ready) .swiper-slide {
	flex: 0 0 auto;
}

.vime-listing-carousel--vertical .vime-listing-carousel__stage > .vime-listing-carousel__arrow {
	top: auto;
	left: var(--vime-arrow-top, 50%);
	transform: translateX(-50%);
}

.vime-listing-carousel--vertical.vime-listing-carousel--arrows-inside .vime-listing-carousel__arrow--prev,
.vime-listing-carousel--vertical.vime-listing-carousel--arrows-outside .vime-listing-carousel__arrow--prev {
	top: var(--vime-arrow-offset, 8px);
	right: auto;
}

.vime-listing-carousel--vertical.vime-listing-carousel--arrows-inside .vime-listing-carousel__arrow--next,
.vime-listing-carousel--vertical.vime-listing-carousel--arrows-outside .vime-listing-carousel__arrow--next {
	right: auto;
	bottom: var(--vime-arrow-offset, 8px);
}

.vime-listing-carousel--vertical.vime-listing-carousel--arrows-outside .vime-listing-carousel__stage {
	padding-inline: 0;
	padding-block: calc(var(--vime-arrow-size) + var(--vime-arrow-spacing, 12px));
}

.vime-listing-carousel--vertical.vime-listing-carousel--arrows-outside .vime-listing-carousel__arrow--prev {
	top: var(--vime-arrow-offset, 0px);
}

.vime-listing-carousel--vertical.vime-listing-carousel--arrows-outside .vime-listing-carousel__arrow--next {
	bottom: var(--vime-arrow-offset, 0px);
}

/* Juntas, acima ou abaixo. */
.vime-listing-carousel__nav {
	display: flex;
	gap: var(--vime-arrow-spacing, 12px);
	justify-content: flex-end;
	margin-top: var(--vime-arrow-spacing, 12px);
}

.vime-listing-carousel--arrows-top .vime-listing-carousel__nav {
	order: -2;
	margin-top: 0;
	margin-bottom: var(--vime-arrow-spacing, 12px);
}

.vime-listing-carousel--arrows-align-left .vime-listing-carousel__nav {
	justify-content: flex-start;
}

.vime-listing-carousel--arrows-align-center .vime-listing-carousel__nav {
	justify-content: center;
}

.vime-listing-carousel__nav:not(:has(.vime-listing-carousel__arrow:not(.swiper-button-lock))) {
	display: none;
}

/* Bolinhas. */
.vime-listing-carousel .vime-listing-carousel__dots {
	position: static;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: var(--vime-dots-align, center);
	gap: var(--vime-dot-gap, 8px);
	width: auto;
	margin-top: var(--vime-dots-spacing, 16px);
	transform: none;
}

.vime-listing-carousel--dots-above .vime-listing-carousel__dots {
	order: -1;
	margin-top: 0;
	margin-bottom: var(--vime-dots-spacing, 16px);
}

.vime-listing-carousel--dots-inside .vime-listing-carousel__dots {
	position: absolute;
	right: 12px;
	bottom: var(--vime-dots-spacing, 12px);
	left: 12px;
	z-index: 2;
	margin: 0;
}

.vime-listing-carousel .vime-listing-carousel__dots .swiper-pagination-bullet {
	width: var(--vime-dot-w, 8px);
	height: var(--vime-dot-h, var(--vime-dot-w, 8px));
	margin: 0;
	border-radius: var(--vime-dot-radius, 999px);
	background: var(--vime-dot-color, #c3c4c7);
	opacity: 1;
	transition: width .2s ease, background-color .2s ease;
}

.vime-listing-carousel .vime-listing-carousel__dots .swiper-pagination-bullet:hover {
	background: var(--vime-dot-hover, var(--vime-dot-active, #1d2327));
}

.vime-listing-carousel .vime-listing-carousel__dots .swiper-pagination-bullet-active {
	width: var(--vime-dot-active-w, var(--vime-dot-w, 8px));
	background: var(--vime-dot-active, #1d2327);
}

.vime-listing-carousel .vime-listing-carousel__dots.swiper-pagination-lock {
	display: none;
}

/* Rolagem contínua: a faixa anda sozinha (JS clona os itens e mede o passo). */
.vime-listing-carousel--marquee.is-ready .swiper-wrapper {
	display: flex;
	gap: var(--vime-gap, 24px);
	width: max-content;
	animation: vime-marquee var(--vime-marquee-duration, 30s) linear infinite;
	will-change: transform;
}

.vime-listing-carousel--marquee.is-ready .swiper-slide {
	flex: 0 0 var(--vime-slide-w, 300px);
	width: var(--vime-slide-w, 300px);
	margin: 0;
}

.vime-listing-carousel--marquee.vime-listing-carousel--vertical.is-ready .swiper-wrapper {
	flex-direction: column;
	width: 100%;
	height: max-content;
	animation-name: vime-marquee-y;
}

.vime-listing-carousel--marquee.vime-listing-carousel--vertical.is-ready .swiper-slide {
	flex: 0 0 auto;
	width: 100%;
}

.vime-listing-carousel--marquee.vime-listing-carousel--reverse .swiper-wrapper {
	animation-direction: reverse;
}

.vime-listing-carousel--marquee.vime-listing-carousel--pause-hover:hover .swiper-wrapper,
.vime-listing-carousel--marquee.vime-listing-carousel--pause-hover:focus-within .swiper-wrapper {
	animation-play-state: paused;
}

@keyframes vime-marquee {
	from {
		transform: translate3d(0, 0, 0);
	}
	to {
		transform: translate3d(var(--vime-marquee-shift, -50%), 0, 0);
	}
}

@keyframes vime-marquee-y {
	from {
		transform: translate3d(0, 0, 0);
	}
	to {
		transform: translate3d(0, var(--vime-marquee-shift, -50%), 0);
	}
}

@media (prefers-reduced-motion: reduce) {
	.vime-listing-carousel--marquee.is-ready .swiper-wrapper {
		animation: none;
	}

	.vime-listing-carousel--marquee .vime-listing-carousel__viewport {
		overflow-x: auto;
	}

	.vime-listing-carousel--marquee.vime-listing-carousel--vertical .vime-listing-carousel__viewport {
		overflow-x: hidden;
		overflow-y: auto;
	}
}

/* ── Paginação ── */

.vime-listing__pagination {
	display: flex;
	justify-content: var(--vime-pg-align, center);
	margin-top: var(--vime-pg-spacing, 32px);
}

.vime-listing__pagination:empty {
	display: none;
}

.vime-listing-pager {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
}

.vime-listing-pager a,
.vime-listing-pager span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.5em;
	min-height: 2.5em;
	padding: .25em .75em;
	border-radius: var(--vime-pg-radius, 6px);
	background: var(--vime-pg-normal-bg, transparent);
	color: var(--vime-pg-normal-color, inherit);
	text-decoration: none;
	transition: background-color .2s ease, color .2s ease;
}

.vime-listing-pager a:hover,
.vime-listing-pager a:focus-visible,
.vime-listing-pager .is-current {
	background: var(--vime-pg-active-bg, #1d2327);
	color: var(--vime-pg-active-color, #fff);
}

.vime-listing-pager .is-disabled {
	opacity: .4;
}

.vime-listing-pager .vime-listing-pager__dots {
	min-width: auto;
	background: none;
}

.vime-listing-more__button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: .75em 1.75em;
	border-radius: var(--vime-pg-radius, 6px);
	background: var(--vime-pg-normal-bg, #1d2327);
	color: var(--vime-pg-normal-color, #fff);
	text-decoration: none;
	transition: background-color .2s ease, color .2s ease;
}

.vime-listing-more__button:hover,
.vime-listing-more__button:focus-visible {
	background: var(--vime-pg-active-bg, #000);
	color: var(--vime-pg-active-color, #fff);
}

/* Rolagem infinita: com JS o botão vira só a âncora observada. */
.vime-listing.is-ready .vime-listing-more--infinite .vime-listing-more__button {
	visibility: hidden;
}

.vime-listing.is-ready.is-loading .vime-listing-more--infinite::after {
	content: "";
	display: block;
	width: 28px;
	height: 28px;
	margin: 0 auto;
	border: 3px solid currentColor;
	border-right-color: transparent;
	border-radius: 50%;
	animation: vime-listing-spin .8s linear infinite;
}

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

/* ── Estados ── */

.vime-listing__empty {
	padding: 2em 0;
}

.vime-listing__placeholder {
	padding: 24px;
	border: 1px dashed #c3c4c7;
	border-radius: 6px;
	color: #50575e;
	text-align: center;
}

@media (prefers-reduced-motion: reduce) {
	.vime-skeleton,
	.vime-listing--loading-bar.is-loading::before,
	.vime-listing--loading-spinner.is-loading::after {
		animation-duration: 3s;
	}

	.vime-listing.is-loading .vime-listing__items,
	.vime-listing-pager a,
	.vime-listing-more__button {
		transition: none;
	}
}

/* ── Filtros ── */

/* Valores padrão no wrapper do widget: os controles de estilo do Elementor
   gravam no mesmo elemento ({{WRAPPER}}), com seletor mais específico. */
.elementor-widget-vime-filter,
.elementor-widget-vime-filters {
	--vime-filters-gap: 24px;
	--vime-filter-gap: 8px;
	--vime-filter-label-gap: 8px;
	--vime-filter-indent: 1.25em;
	--vime-filter-radius: 6px;
	--vime-filter-accent: #1d2327;
	--vime-filter-accent-text: #fff;
	--vime-filter-bg: #fff;
	--vime-chip-border: currentColor;
	--vime-chip-border-width: 1px;
	--vime-icon-size: 1em;
	--vime-icon-gap: 8px;
	--vime-check-size: 18px;
	--vime-check-radius: 4px;
	--vime-check-border-width: 2px;
	--vime-check-border: #8c8f94;
	--vime-check-bg: #fff;
	--vime-check-checked-bg: var(--vime-filter-accent);
	--vime-check-checked-border: var(--vime-filter-accent);
	--vime-check-mark: #fff;
	--vime-check-gap: 8px;
	--vime-swatch-size: 32px;
	--vime-swatch-radius: 50%;
	--vime-swatch-border-width: 1px;
	--vime-swatch-border: rgba(0, 0, 0, .15);
	--vime-swatch-ring: var(--vime-filter-accent);
	--vime-swatch-ring-offset: 2px;
	--vime-field-bg: #fff;
	--vime-field-border: #c3c4c7;
	--vime-field-focus: var(--vime-filter-accent);
	--vime-field-radius: 6px;
	--vime-field-height: 2.6em;
	--vime-range-track: #dcdcde;
	--vime-range-active: var(--vime-filter-accent);
	--vime-range-thumb: var(--vime-filter-accent);
	--vime-range-thumb-size: 18px;
	--vime-dropdown-bg: #fff;
	--vime-dropdown-hover: #f0f0f1;
	--vime-apply-bg: var(--vime-filter-accent);
	--vime-apply-color: var(--vime-filter-accent-text);
	--vime-apply-radius: 6px;
}

.vime-filters {
	display: flex;
	flex-direction: column;
	gap: var(--vime-filters-gap);
}

.vime-filters__list {
	display: flex;
	flex-direction: column;
	flex-wrap: wrap;
	gap: var(--vime-filters-gap);
}

/* Base automática: em coluna vira altura do conteúdo; lado a lado, divide a linha. */
.vime-filters__list > .vime-filter {
	flex: 1 1 auto;
}

/* Temas estilizam todo <button> (fundo, borda, cor em hover/focus). Aqui os
   botões dos filtros voltam ao visual do próprio filtro, em todos os estados. */
.vime-filters button,
.vime-filters button:hover,
.vime-filters button:focus,
.vime-active-filters button,
.vime-active-filters button:hover,
.vime-active-filters button:focus {
	min-height: 0;
	margin: 0;
	box-shadow: none;
	letter-spacing: normal;
	line-height: 1.4;
	text-transform: none;
	text-decoration: none;
}

.vime-filters .vime-filter__dropdown-toggle,
.vime-filters .vime-filter__dropdown-toggle:hover,
.vime-filters .vime-filter__dropdown-toggle:focus {
	border: 1px solid var(--vime-field-border);
	background: var(--vime-field-bg);
	color: var(--vime-field-color, inherit);
}

.vime-filters .vime-filter__dropdown-toggle:focus-visible,
.vime-filters .vime-filter__dropdown.is-open .vime-filter__dropdown-toggle {
	border-color: var(--vime-field-focus);
	box-shadow: 0 0 0 1px var(--vime-field-focus);
}

.vime-filters .vime-filter__swatch-option,
.vime-filters .vime-filter__swatch-option:hover,
.vime-filters .vime-filter__swatch-option:focus {
	padding: 0;
	border: 0;
	background: none;
	color: inherit;
}

.vime-filters .vime-filter__chip,
.vime-filters .vime-filter__chip:focus {
	border: var(--vime-chip-border-width) solid var(--vime-chip-border);
	background: var(--vime-filter-bg);
	color: inherit;
}

.vime-filters .vime-filter__chip:hover {
	background: var(--vime-chip-hover-bg, var(--vime-filter-bg));
	color: var(--vime-filter-hover-color, inherit);
}

.vime-filters .vime-filter__chip.is-active,
.vime-filters .vime-filter__chip.is-active:hover,
.vime-filters .vime-filter__chip.is-active:focus {
	border-color: var(--vime-filter-accent);
	background: var(--vime-filter-accent);
	color: var(--vime-filter-accent-text);
}

.vime-filters .vime-filter__apply,
.vime-filters .vime-filter__apply:focus {
	border: 0;
	background: var(--vime-apply-bg);
	color: var(--vime-apply-color);
}

.vime-filters .vime-filter__apply:hover {
	background: var(--vime-apply-hover-bg, var(--vime-apply-bg));
	color: var(--vime-apply-color);
}

.vime-filters .vime-filters__clear[hidden] {
	display: none;
}

.vime-filters .vime-filters__clear,
.vime-filters .vime-filters__clear:hover,
.vime-filters .vime-filters__clear:focus {
	border: 0;
	background: none;
	color: var(--vime-clear-color, inherit);
	text-decoration: underline;
}

.vime-active-filters .vime-active-filters__chip,
.vime-active-filters .vime-active-filters__chip:hover,
.vime-active-filters .vime-active-filters__chip:focus {
	border: 0;
	background: var(--vime-chip-bg);
	color: var(--vime-chip-color);
}

.vime-active-filters .vime-active-filters__clear,
.vime-active-filters .vime-active-filters__clear:hover,
.vime-active-filters .vime-active-filters__clear:focus {
	border: 0;
	background: none;
	color: inherit;
	text-decoration: underline;
}

.vime-filters button:focus-visible,
.vime-active-filters button:focus-visible {
	outline: 2px solid var(--vime-filter-accent);
	outline-offset: 2px;
}

.vime-filter {
	display: flex;
	flex-direction: column;
	gap: var(--vime-filter-label-gap);
	min-width: 0;
	color: var(--vime-filter-color, inherit);
}

.vime-filter__label {
	font-weight: 600;
}

.vime-filter__options {
	display: flex;
	flex-direction: column;
	flex-wrap: wrap;
	gap: var(--vime-filter-gap);
}

.vime-filter--ui-buttons .vime-filter__options,
.vime-filter--ui-swatches .vime-filter__options,
.vime-filter--ui-sort-buttons .vime-filter__options {
	flex-direction: row;
}

.vime-filter__option {
	display: flex;
	align-items: center;
	gap: var(--vime-check-gap);
	cursor: pointer;
	transition: color .15s ease;
}

.vime-filter__option:hover,
.vime-filter__dropdown-option:hover {
	color: var(--vime-filter-hover-color, inherit);
}

.vime-filter__option:has(input:checked) {
	color: var(--vime-filter-active-color, inherit);
}

.vime-filter__option input {
	flex: none;
	margin: 0;
	accent-color: var(--vime-filter-accent);
}

.vime-filter__option--depth-1 { margin-left: var(--vime-filter-indent); }
.vime-filter__option--depth-2 { margin-left: calc(var(--vime-filter-indent) * 2); }
.vime-filter__option--depth-3,
.vime-filter__option--depth-4 { margin-left: calc(var(--vime-filter-indent) * 3); }

/* Quantidade: ao lado do nome, ou justificada à direita. */
.vime-filter__count {
	opacity: .6;
}

.vime-filter-count-parens-yes .vime-filter__count::before { content: "("; }
.vime-filter-count-parens-yes .vime-filter__count::after { content: ")"; }

.vime-filter-count-end .vime-filter__option,
.vime-filter-count-end .vime-filter__dropdown-option {
	width: 100%;
}

.vime-filter-count-end .vime-filter__count {
	margin-left: auto;
}

/* Caixa de seleção e opção personalizadas. */
.vime-filter-check-custom-yes .vime-filter__option input[type="checkbox"],
.vime-filter-check-custom-yes .vime-filter__option input[type="radio"] {
	position: relative;
	width: var(--vime-check-size);
	height: var(--vime-check-size);
	border: var(--vime-check-border-width) solid var(--vime-check-border);
	border-radius: var(--vime-check-radius);
	background: var(--vime-check-bg);
	cursor: pointer;
	transition: background-color .15s ease, border-color .15s ease;
	-webkit-appearance: none;
	appearance: none;
}

.vime-filter-check-custom-yes .vime-filter__option input[type="radio"] {
	border-radius: 50%;
}

.vime-filter-check-custom-yes .vime-filter__option input:checked {
	border-color: var(--vime-check-checked-border);
	background: var(--vime-check-checked-bg);
}

.vime-filter-check-custom-yes .vime-filter__option input[type="checkbox"]:checked::after {
	content: "";
	position: absolute;
	top: 45%;
	left: 50%;
	width: 30%;
	height: 55%;
	border: solid var(--vime-check-mark);
	border-width: 0 2px 2px 0;
	transform: translate(-50%, -50%) rotate(45deg);
}

.vime-filter-check-custom-yes .vime-filter__option input[type="radio"]:checked::after {
	content: "";
	position: absolute;
	inset: 25%;
	border-radius: 50%;
	background: var(--vime-check-mark);
}

.vime-filter-check-custom-yes .vime-filter__option input:focus-visible {
	outline: 2px solid var(--vime-filter-accent);
	outline-offset: 2px;
}

/* Botões (opções e ordenação). */
.vime-filter__chip {
	display: inline-flex;
	align-items: center;
	gap: var(--vime-icon-gap);
	padding: .45em .9em;
	border: var(--vime-chip-border-width) solid var(--vime-chip-border);
	border-radius: var(--vime-filter-radius);
	background: var(--vime-filter-bg);
	color: inherit;
	font: inherit;
	cursor: pointer;
	transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

.vime-filter__chip:hover {
	background: var(--vime-chip-hover-bg, var(--vime-filter-bg));
	color: var(--vime-filter-hover-color, inherit);
}

.vime-filter__chip.is-active {
	border-color: var(--vime-filter-accent);
	background: var(--vime-filter-accent);
	color: var(--vime-filter-accent-text);
}

/* Swatches. */
.vime-filter__swatch-option {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 0;
	border: 0;
	background: none;
	color: inherit;
	font: inherit;
	cursor: pointer;
}

.vime-filter__swatch {
	display: inline-flex;
	flex: none;
	align-items: center;
	justify-content: center;
	width: var(--vime-swatch-size);
	height: var(--vime-swatch-size);
	border: var(--vime-swatch-border-width) solid var(--vime-swatch-border);
	border-radius: var(--vime-swatch-radius);
	background-color: #f0f0f1;
	background-position: center;
	background-size: cover;
	font-size: calc(var(--vime-swatch-size) * .45);
	text-transform: uppercase;
	transition: box-shadow .15s ease;
}

.vime-filter__swatch-option:hover .vime-filter__swatch {
	box-shadow: 0 0 0 var(--vime-swatch-ring-offset) #fff, 0 0 0 calc(var(--vime-swatch-ring-offset) + 2px) var(--vime-swatch-border);
}

.vime-filter__swatch-option.is-active .vime-filter__swatch {
	box-shadow: 0 0 0 var(--vime-swatch-ring-offset) #fff, 0 0 0 calc(var(--vime-swatch-ring-offset) + 2px) var(--vime-swatch-ring);
}

.vime-filter__swatch-option:focus-visible {
	outline: 2px solid var(--vime-filter-accent);
	outline-offset: 4px;
	border-radius: 4px;
}

/* Nome no hover (modo "só o swatch"): balão acima da cor. */
.vime-filter__swatch-option[data-tooltip] {
	position: relative;
}

.vime-filter__swatch-option[data-tooltip]::after,
.vime-filter__swatch-option[data-tooltip]::before {
	position: absolute;
	z-index: 10;
	left: 50%;
	opacity: 0;
	pointer-events: none;
	transform: translate(-50%, 4px);
	transition: opacity .15s ease, transform .15s ease;
}

.vime-filter__swatch-option[data-tooltip]::after {
	content: attr(data-tooltip);
	bottom: calc(100% + 8px);
	padding: .3em .6em;
	border-radius: 4px;
	background: var(--vime-tooltip-bg, #1d2327);
	color: var(--vime-tooltip-color, #fff);
	font-size: 12px;
	line-height: 1.3;
	white-space: nowrap;
}

.vime-filter__swatch-option[data-tooltip]::before {
	content: "";
	bottom: calc(100% + 3px);
	border: 5px solid transparent;
	border-top-color: var(--vime-tooltip-bg, #1d2327);
	border-bottom: 0;
}

.vime-filter__swatch-option[data-tooltip]:hover::after,
.vime-filter__swatch-option[data-tooltip]:hover::before,
.vime-filter__swatch-option[data-tooltip]:focus-visible::after,
.vime-filter__swatch-option[data-tooltip]:focus-visible::before {
	opacity: 1;
	transform: translate(-50%, 0);
}

/* Modos: nome embaixo (coluna) e só o nome (texto, sublinhado quando ativo). */
.vime-filter--swatch-below .vime-filter__swatch-option {
	flex-direction: column;
	gap: 4px;
	text-align: center;
}

.vime-filters .vime-filter--swatch-label .vime-filter__swatch-option {
	padding: .2em 0;
	border-bottom: 2px solid transparent;
}

.vime-filters .vime-filter--swatch-label .vime-filter__swatch-option.is-active {
	border-bottom-color: var(--vime-swatch-ring);
}

.vime-filter__swatch-option.is-active .vime-filter__swatch-label {
	color: var(--vime-filter-active-color, inherit);
	font-weight: 600;
}

/* Ícones (ordenação). */
.vime-filter__icon-wrap {
	display: inline-flex;
	align-items: center;
	color: var(--vime-icon-color, currentColor);
	font-size: var(--vime-icon-size);
	line-height: 1;
}

.vime-filter__icon-wrap svg {
	width: var(--vime-icon-size);
	height: var(--vime-icon-size);
	fill: currentColor;
}

/* Campos. */
.vime-filter__input,
.vime-filter__select,
.vime-filter__dropdown-toggle {
	width: 100%;
	min-height: var(--vime-field-height);
	padding: .4em .75em;
	border: 1px solid var(--vime-field-border);
	border-radius: var(--vime-field-radius);
	background: var(--vime-field-bg);
	color: var(--vime-field-color, inherit);
	font: inherit;
}

.vime-filter__input::placeholder {
	color: var(--vime-field-placeholder, #8c8f94);
}

.vime-filter__input:focus,
.vime-filter__select:focus,
.vime-filter__dropdown-toggle:focus-visible {
	border-color: var(--vime-field-focus);
	outline: none;
	box-shadow: 0 0 0 1px var(--vime-field-focus);
}

/* Lista com ícones (combobox). */
.vime-filter__dropdown {
	position: relative;
}

.vime-filter__dropdown-toggle {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	text-align: left;
	cursor: pointer;
}

.vime-filter__dropdown-value {
	display: inline-flex;
	align-items: center;
	gap: var(--vime-icon-gap);
	min-width: 0;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

.vime-filter__dropdown-value .vime-filter__swatch {
	--vime-swatch-size: 1.2em;
}

.vime-filter__dropdown-caret {
	flex: none;
	width: .5em;
	height: .5em;
	border: solid currentColor;
	border-width: 0 2px 2px 0;
	transform: translateY(-25%) rotate(45deg);
	transition: transform .15s ease;
}

.vime-filter__dropdown.is-open .vime-filter__dropdown-caret {
	transform: translateY(25%) rotate(-135deg);
}

.vime-filter__dropdown-list {
	position: absolute;
	z-index: 20;
	top: calc(100% + 4px);
	right: 0;
	left: 0;
	max-height: 280px;
	margin: 0;
	padding: 4px;
	overflow-y: auto;
	border: 1px solid var(--vime-field-border);
	border-radius: var(--vime-field-radius);
	background: var(--vime-dropdown-bg);
	box-shadow: 0 8px 24px rgba(0, 0, 0, .12);
	list-style: none;
}

.vime-filter__dropdown-list:focus {
	outline: none;
}

.vime-filter__dropdown-option {
	display: flex;
	align-items: center;
	gap: var(--vime-icon-gap);
	padding: .5em .75em;
	border-radius: calc(var(--vime-field-radius) - 2px);
	cursor: pointer;
}

.vime-filter__dropdown-option .vime-filter__swatch {
	--vime-swatch-size: 1.2em;
}

.vime-filter__dropdown-option:hover,
.vime-filter__dropdown-option.is-focused,
.vime-filter__dropdown-option[aria-selected="true"] {
	background: var(--vime-dropdown-hover);
}

.vime-filter__dropdown-option[aria-selected="true"] {
	color: var(--vime-filter-active-color, inherit);
	font-weight: 600;
}

/* Faixa: duas barras nativas sobrepostas, o trecho escolhido pintado por variável. */
.vime-filter__slider {
	--vime-range-from: 0%;
	--vime-range-to: 100%;
	position: relative;
	height: calc(var(--vime-range-thumb-size) + 6px);
}

.vime-filter__slider::before {
	content: "";
	position: absolute;
	top: 50%;
	right: 0;
	left: 0;
	height: 4px;
	border-radius: 2px;
	background: linear-gradient(to right, var(--vime-range-track) var(--vime-range-from), var(--vime-range-active) var(--vime-range-from), var(--vime-range-active) var(--vime-range-to), var(--vime-range-track) var(--vime-range-to));
	transform: translateY(-50%);
}

.vime-filter__slider input[type="range"] {
	position: absolute;
	inset: 0;
	width: 100%;
	margin: 0;
	background: none;
	pointer-events: none;
	-webkit-appearance: none;
	appearance: none;
}

.vime-filter__slider input[type="range"]::-webkit-slider-thumb {
	width: var(--vime-range-thumb-size);
	height: var(--vime-range-thumb-size);
	border: 2px solid #fff;
	border-radius: 50%;
	background: var(--vime-range-thumb);
	box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
	pointer-events: auto;
	cursor: grab;
	-webkit-appearance: none;
}

.vime-filter__slider input[type="range"]::-moz-range-thumb {
	width: calc(var(--vime-range-thumb-size) - 4px);
	height: calc(var(--vime-range-thumb-size) - 4px);
	border: 2px solid #fff;
	border-radius: 50%;
	background: var(--vime-range-thumb);
	pointer-events: auto;
	cursor: grab;
}

.vime-filter__range-inputs {
	display: flex;
	align-items: center;
	gap: 8px;
}

.vime-filter__range-inputs label {
	display: flex;
	flex: 1;
	align-items: center;
	gap: 4px;
	min-width: 0;
}

.vime-filter__affix:empty {
	display: none;
}

/* Aplicar / limpar. */
.vime-filter__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
}

.vime-filter__apply {
	padding: .6em 1.4em;
	border: 0;
	border-radius: var(--vime-apply-radius);
	background: var(--vime-apply-bg);
	color: var(--vime-apply-color);
	font: inherit;
	cursor: pointer;
	transition: background-color .2s ease, box-shadow .2s ease;
}

.vime-filter__apply:hover {
	background: var(--vime-apply-hover-bg, var(--vime-apply-bg));
}

.vime-filter.is-dirty .vime-filter__apply,
.vime-filters.is-dirty > .vime-filter__actions .vime-filter__apply {
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--vime-apply-bg) 25%, transparent);
}

.vime-filters__clear {
	padding: .4em .2em;
	border: 0;
	background: none;
	color: var(--vime-clear-color, inherit);
	font: inherit;
	text-decoration: underline;
	cursor: pointer;
}

.screen-reader-text {
	position: absolute !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	white-space: nowrap;
}


/* ── Filtros ativos ── */

.vime-active-filters {
	--vime-chip-bg: #f0f0f1;
	--vime-chip-color: inherit;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
}

.vime-active-filters[hidden] {
	display: none;
}

.vime-active-filters__chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: .3em .75em;
	border: 0;
	border-radius: 999px;
	background: var(--vime-chip-bg);
	color: var(--vime-chip-color);
	font: inherit;
	cursor: pointer;
}

.vime-active-filters__x {
	font-size: 1.1em;
	line-height: 1;
	opacity: .6;
}

.vime-active-filters__clear {
	padding: .3em .5em;
	border: 0;
	background: none;
	color: inherit;
	font: inherit;
	text-decoration: underline;
	cursor: pointer;
}

/* Paginação avulsa: sem margem própria (o widget fica onde o usuário pôs). */
.vime-listing-pager-widget {
	margin-top: var(--vime-pg-spacing, 0);
}

.vime-listing-pager-widget.is-ready .vime-listing-more--infinite .vime-listing-more__button {
	visibility: hidden;
}

/* ── Botões "Aplicar filtros" e "Limpar filtros" ── */

.vime-filter-button-wrap {
	--vime-btn-color-normal: #fff;
	--vime-btn-bg-normal: #1d2327;
	--vime-btn-border-normal: transparent;
	--vime-btn-border-width: 0px;
	--vime-btn-radius: 6px;
	--vime-btn-icon-size: 1em;
	display: flex;
}

.vime-filter-button-wrap .vime-filter-button,
.vime-filter-button-wrap .vime-filter-button:focus {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 0;
	margin: 0;
	padding: .65em 1.4em;
	border: var(--vime-btn-border-width) solid var(--vime-btn-border-normal);
	border-radius: var(--vime-btn-radius);
	background: var(--vime-btn-bg-normal);
	box-shadow: none;
	color: var(--vime-btn-color-normal);
	font: inherit;
	line-height: 1.3;
	text-transform: none;
	cursor: pointer;
	transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

.vime-filter-button-wrap .vime-filter-button:hover {
	border-color: var(--vime-btn-border-hover, var(--vime-btn-border-normal));
	background: var(--vime-btn-bg-hover, var(--vime-btn-bg-normal));
	color: var(--vime-btn-color-hover, var(--vime-btn-color-normal));
}

.vime-filter-button-wrap .vime-filter-button:focus-visible {
	outline: 2px solid var(--vime-btn-bg-normal);
	outline-offset: 2px;
}

.vime-filter-button-wrap .vime-filter-button[hidden] {
	display: none;
}

.vime-filter-button-wrap.is-full .vime-filter-button {
	flex: 1;
}

.vime-filter-button__icon {
	display: inline-flex;
	font-size: var(--vime-btn-icon-size);
	line-height: 1;
}

.vime-filter-button__icon svg {
	width: var(--vime-btn-icon-size);
	height: var(--vime-btn-icon-size);
	fill: currentColor;
}

/* Filtros esperando o botão: o "Aplicar" chama atenção. */
.vime-filter-button--apply-filters.is-dirty {
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--vime-btn-bg-normal) 25%, transparent);
}
