/*
 * ==========================================================
 * Kondor ID
 * Estrutura visual dos cards
 * ==========================================================
 */

:root {
	/* Cor primária */
	--kondor-primary: #007bff;

	/* Cor secundária */
	--kondor-secondary: #19EBCB;

	/* Cores de texto */
	--kondor-text-primary: #1a1a1a;
	--kondor-text-secondary: #576b7c;
	--kondor-text-placeholder: #9da7b3;
	--kondor-text-success: #059669;
	--kondor-text-info: #0369a1;
	--kondor-text-error: #991b1b;
	--kondor-success: #059669;

	/* Cores de fundo */
	--kondor-bg-primary: #ffffff;
	--kondor-bg-secondary: #fafafa;
	--kondor-bg-listening: #f9fafb;
	--kondor-bg-button: #f0f2f5;
	--kondor-bg-success: #f0f9ff;
	--kondor-bg-info: #f0f8ff;
	--kondor-bg-alternatives: #fafbfc;
	--kondor-bg-error: #fef2f2;
	--kondor-bg-button-hover: #e8eaed;
	--kondor-bg-button-active: #d9dce1;
	--kondor-bg-secondary-hover: #f0f0f0;

	/* Cores de borda */
	--kondor-border-primary: #dfe5ea;
	--kondor-border-divider: #eceff3;
	--kondor-border-dashed: #d9d9d9;
	--kondor-border-specs: #e7ebef;
	--kondor-border-button: #d0d7de;
	--kondor-border-button-hover: #bcc5cf;
	--kondor-border-button-active: #9ca3af;
	--kondor-border-listening: #e5e7eb;
	--kondor-border-success: #bfdbfe;
	--kondor-border-alternatives: #e2e8f0;
	--kondor-border-secondary: #e0e0e0;
	--kondor-border-secondary-hover: #d0d0d0;
	--kondor-border-error: #fecaca;

	/* Espaçamento */
	--kondor-space-xs: 8px;
	--kondor-space-sm: 12px;
	--kondor-space-md: 16px;
	--kondor-space-lg: 20px;
	--kondor-space-xl: 24px;
	--kondor-space-2xl: 32px;

	/* Raios de borda */
	--kondor-radius-sm: 6px;
	--kondor-radius-md: 8px;
	--kondor-radius-lg: 12px;

	/* Tipografia */
	--kondor-font-family-mono: 'Courier New', monospace;
	--kondor-font-size-sm: 12px;
	--kondor-font-size-base: 14px;
	--kondor-font-size-lg: 16px;
	--kondor-font-size-xl: 2rem;
	--kondor-font-size-status: 13px;
	--kondor-font-weight-normal: 400;
	--kondor-font-weight-medium: 500;
	--kondor-font-weight-semibold: 600;
	--kondor-font-weight-bold: 700;
	--kondor-line-height-tight: 1.2;
	--kondor-line-height-base: 1.4;
	--kondor-line-height-relaxed: 1.5;

	/* Sombras */
	--kondor-shadow-card: 0 3px 12px rgba(0, 0, 0, 0.08);

	/* Transições */
	--kondor-transition-default: all 0.2s ease;
	--kondor-transition-wave: 0.6s ease-in-out infinite;

	/* Opacidades */
	--kondor-opacity-disabled: 0.5;
	--kondor-opacity-loading: 0.7;
	--kondor-opacity-shadow: 0.08;

	/* Dimensões */
	--kondor-width-container: 1280px;
	--kondor-width-card-min: 340px;
	--kondor-height-image: 200px;
	--kondor-height-media: 80px;
	--kondor-height-wave-bar: 10px;
	--kondor-height-wave-bar-active: 30px;
	--kondor-height-wave-bar-reduced: 20px;
	--kondor-height-waveform: 30px;
	--kondor-size-wave-bar: 4px;
	--kondor-size-wave-bar-radius: 2px;
}

.kondor-id {
	max-width: var(--kondor-width-container, 1280px);
	width: 100%;
	box-sizing: border-box;
	margin: 0 auto;
}

/*
 * Resultado
 *
 * max-width/box-sizing/overflow-x aqui são uma rede de segurança contra
 * estouro horizontal (ex.: candidatos no mobile): o grid interno já respeita
 * minmax(0, 1fr), mas sem essa contenção no próprio container o navegador
 * poderia, em temas com padding/CSS imprevisíveis, ainda permitir que a
 * página role horizontalmente.
 */
#kondor-result,
.kondor-id__result {
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-xl, 24px);
	width: 100%;
	max-width: 100%;
	box-sizing: border-box;
	overflow-x: hidden;
}

/*
 * Grid de baterias
 */

.kondor-batteries {
	display: grid;
	grid-template-columns: repeat(var(--kondor-cards-per-row, 2), minmax(0, 1fr));
	gap: var(--kondor-space-2xl, 32px);
}

/*
 * Card
 */

/*
 * O max-width NÃO é declarado aqui: com múltiplos cards o grid controla a largura
 * via cards_per_row. O limite single_card_max_width é aplicado exclusivamente sob
 * .kondor-batteries--single (CSS inline gerado em includes/class-assets.php).
 */
.kondor-battery-card {
	display: flex;
	flex-direction: column;
	background: var(--kondor-bg-primary, #ffffff);
	border: 1px solid var(--kondor-border-primary, #dfe5ea);
	border-radius: var(--kondor-radius-lg, 12px);
	box-shadow: var(--kondor-shadow-card, 0 3px 12px rgba(0, 0, 0, 0.08));
	overflow: hidden;
}

/*
 * Cabeçalho
 */

.kondor-battery-card__header {
	padding: 16px;
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 12px;
	border-bottom: 1px solid var(--kondor-border-divider, #eceff3);
	flex-wrap: wrap;
}

.kondor-battery-card__code {
	margin: 0;
	font-size: var(--kondor-font-size-xl, 2rem);
	font-weight: var(--kondor-font-weight-bold, 700);
	line-height: var(--kondor-line-height-tight, 1.2);
	color: var(--kondor-primary, #007bff);
	flex: 1;
	min-width: 0;
}

.kondor-battery-card__line-badge {
	display: inline-block;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-sm, 12px);
	background-color: var(--kondor-secondary, #19EBCB);
	color: #000;
	font-size: var(--kondor-font-size-sm, 12px);
	font-weight: var(--kondor-font-weight-semibold, 600);
	border-radius: var(--kondor-radius-sm, 6px);
	text-transform: capitalize;
	white-space: nowrap;
}

/*
 * Corpo
 */

.kondor-battery-card__body {
	display: flex;
	flex-direction: column;
	gap: 16px;
	padding: 16px;
}

/*
 * Área reservada para imagem
 */

.kondor-battery-card__image {
	height: 160px;
	display: flex;
	align-items: center;
	justify-content: center;
	overflow: hidden;
	border: 2px dashed var(--kondor-border-dashed, #d9d9d9);
	border-radius: var(--kondor-radius-md, 8px);
	background: #ffffff;
}

.kondor-battery-card__image img {
	display: block;
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	object-fit: contain;
	object-position: center;
}

.kondor-battery-card__image:empty::before {
	content: "Imagem";
	color: var(--kondor-text-placeholder, #9da7b3);
	font-size: 0.95rem;
}

/*
 * Especificações
 */

.kondor-battery-card__specs {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--kondor-border-specs, #e7ebef);
	border-radius: var(--kondor-radius-sm, 6px);
	overflow: hidden;
}

.kondor-battery-card__spec {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: var(--kondor-space-md, 16px);
	padding: 8px 12px;
	border-bottom: 1px solid var(--kondor-border-specs, #e7ebef);
}

.kondor-battery-card__spec:last-child {
	border-bottom: none;
}

.kondor-battery-card__spec strong {
	font-weight: var(--kondor-font-weight-semibold, 600);
}

.kondor-battery-card__spec span {
	text-align: right;
}

/*
 * Rodapé
 */

.kondor-battery-card__footer {
	padding: 16px;
	border-top: 1px solid var(--kondor-border-divider, #eceff3);
	display: grid;
	gap: var(--kondor-space-lg, 20px);
}

.kondor-battery-card__footer--empty {
	display: none;
}

.kondor-battery-card__footer--one-column {
	grid-template-columns: 1fr;
}

.kondor-battery-card__footer--two-columns {
	grid-template-columns: 1fr 1fr;
}

/*
 * Proporções de rodapé (selo x PDF)
 */

.ratio-50-50 .kondor-battery-card__footer--two-columns {
	grid-template-columns: 1fr 1fr;
}

.ratio-60-40 .kondor-battery-card__footer--two-columns {
	grid-template-columns: 1.5fr 1fr;
}

.ratio-67-33 .kondor-battery-card__footer--two-columns {
	grid-template-columns: 2fr 1fr;
}

.ratio-75-25 .kondor-battery-card__footer--two-columns {
	grid-template-columns: 3fr 1fr;
}

/*
 * Selo
 */

.kondor-battery-card__seal {
	height: 96px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--kondor-radius-md, 8px);
	padding: var(--kondor-space-sm, 12px);
}

.kondor-battery-card__seal img {
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	display: block;
	object-fit: contain;
	object-position: center;
}

/*
 * PDF
 */

/*
 * O próprio <a> é o container: toda a área responde ao clique e é focável
 * nativamente. Não existe regra descendente `.kondor-battery-card__pdf a`,
 * pois ela sobrescreveria o contraste automático da cor institucional da marca
 * injetado em includes/class-assets.php.
 */
.kondor-battery-card__pdf {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
	min-height: var(--kondor-height-media, 80px);
	box-sizing: border-box;
	border-radius: var(--kondor-radius-md, 8px);
	text-align: center;
	text-decoration: none;
	font-weight: var(--kondor-font-weight-semibold, 600);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
	/*
	 * Fundo e cor padrão garantem contraste no caminho de marca NÃO oficial
	 * (renderizado em assets/js/kondor-id.js), que não recebe cor institucional.
	 * As regras por marca têm especificidade maior e sobrescrevem estes valores.
	 */
	background-color: var(--kondor-bg-secondary, #fafafa);
	color: var(--kondor-primary, #003B71);
	border: 1px solid var(--kondor-border-primary, #dfe5ea);
}

.kondor-battery-card__pdf:focus-visible {
	outline: 3px solid var(--kondor-secondary, #19EBCB);
	outline-offset: 2px;
}

/*
 * Área reservada para marcas
 */

.kondor-battery-card__brands {
	min-height: 90px;
	padding: var(--kondor-space-xl, 24px);
	border-top: 1px solid var(--kondor-border-divider, #eceff3);
	background: var(--kondor-bg-primary, #ffffff);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
}

.kondor-battery-card__brands:empty::before {
	content: "Área reservada para marcas";
	display: block;
	text-align: center;
	color: var(--kondor-text-placeholder, #9da7b3);
}

.kondor-battery-card__brands img {
	width: auto;
	height: auto;
	display: block;
	object-fit: contain;
	margin-inline: auto;
}

/*
 * Altura E largura máximas: logos muito horizontais só respeitando a altura
 * ainda ficavam largos demais — por isso cada tamanho limita as duas dimensões.
 */
.kondor-battery-card__brands img.kondor-logo-size--xxsmall {
	max-height: 14px;
	max-width: min(100%, 90px);
}

.kondor-battery-card__brands img.kondor-logo-size--xsmall {
	max-height: 20px;
	max-width: min(100%, 130px);
}

.kondor-battery-card__brands img.kondor-logo-size--small {
	max-height: 28px;
	max-width: min(100%, 180px);
}

.kondor-battery-card__brands img.kondor-logo-size--medium {
	max-height: 40px;
	max-width: min(100%, 260px);
}

.kondor-battery-card__brands img.kondor-logo-size--large {
	max-height: 56px;
	max-width: min(100%, 360px);
}

.kondor-battery-card__brands-text {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 60px;
	word-break: break-word;
}

.kondor-id__voice-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.2;
	gap: 8px;
	max-width: 100%;
	box-sizing: border-box;
	white-space: normal;
	overflow-wrap: anywhere;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-md, 16px);
	margin-top: var(--kondor-space-sm, 12px);
	background-color: var(--kondor-bg-button, #f0f2f5);
	border: 1px solid var(--kondor-border-button, #d0d7de);
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
	width: 100%;
}

.kondor-id__voice-btn:hover:not(:disabled) {
	background-color: var(--kondor-bg-button-hover, #e8eaed);
	border-color: var(--kondor-border-button-hover, #bcc5cf);
}

.kondor-id__voice-btn:active:not(:disabled) {
	background-color: var(--kondor-bg-button-active, #d9dce1);
}

.kondor-id__voice-btn:disabled {
	opacity: var(--kondor-opacity-disabled, 0.5);
	cursor: not-allowed;
}

.kondor-id__voice-status {
	margin-top: var(--kondor-space-xs, 8px);
	font-size: var(--kondor-font-size-status, 13px);
	color: var(--kondor-text-secondary, #576b7c);
	line-height: var(--kondor-line-height-base, 1.4);
	min-height: 20px;
}

/*
 * Estado de escuta
 */

.kondor-id__voice-listening {
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-sm, 12px);
	padding: var(--kondor-space-sm, 12px);
	background-color: var(--kondor-bg-listening, #f9fafb);
	border: 1px solid var(--kondor-border-listening, #e5e7eb);
	border-radius: var(--kondor-radius-md, 8px);
	margin-top: var(--kondor-space-sm, 12px);
}

.kondor-id__voice-listening-text {
	margin: 0;
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	color: var(--kondor-text-primary, #1a1a1a);
	text-align: center;
}

.kondor-id__voice-activity {
	display: flex;
	justify-content: center;
	align-items: center;
	gap: var(--kondor-space-xs, 8px);
	margin: var(--kondor-space-xs, 8px) 0;
}

.kondor-id__voice-waveform {
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 4px;
	height: var(--kondor-height-waveform, 30px);
}

.kondor-id__voice-wave-bar {
	width: var(--kondor-size-wave-bar, 4px);
	height: var(--kondor-height-wave-bar, 10px);
	background-color: var(--kondor-primary, #007bff);
	border-radius: var(--kondor-size-wave-bar-radius, 2px);
	animation: kondor-voice-wave var(--kondor-transition-wave, 0.6s ease-in-out infinite);
}

.kondor-id__voice-wave-bar:nth-child(1) { animation-delay: 0s; }
.kondor-id__voice-wave-bar:nth-child(2) { animation-delay: 0.1s; }
.kondor-id__voice-wave-bar:nth-child(3) { animation-delay: 0.2s; }
.kondor-id__voice-wave-bar:nth-child(4) { animation-delay: 0.3s; }
.kondor-id__voice-wave-bar:nth-child(5) { animation-delay: 0.2s; }
.kondor-id__voice-wave-bar:nth-child(6) { animation-delay: 0.1s; }
.kondor-id__voice-wave-bar:nth-child(7) { animation-delay: 0s; }

@keyframes kondor-voice-wave {
	0% { height: var(--kondor-height-wave-bar, 10px); }
	50% { height: var(--kondor-height-wave-bar-active, 30px); }
	100% { height: var(--kondor-height-wave-bar, 10px); }
}

.kondor-id__voice-counter {
	font-family: var(--kondor-font-family-mono, 'Courier New', monospace);
	font-size: var(--kondor-font-size-sm, 12px);
	font-weight: var(--kondor-font-weight-medium, 500);
	color: var(--kondor-text-secondary, #576b7c);
	min-width: 40px;
	text-align: center;
}

/*
 * Placa reconhecida
 */

.kondor-id__voice-recognized {
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-xs, 8px);
	padding: var(--kondor-space-sm, 12px);
	background-color: var(--kondor-bg-success, #f0f9ff);
	border: 1px solid var(--kondor-border-success, #bfdbfe);
	border-radius: var(--kondor-radius-md, 8px);
	margin-top: var(--kondor-space-sm, 12px);
}

.kondor-id__voice-recognized-label {
	margin: 0;
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	color: var(--kondor-success, #059669);
}

.kondor-id__voice-recognized-label::before {
	content: '✓ ';
	font-weight: var(--kondor-font-weight-bold, 700);
	margin-right: 4px;
}

.kondor-id__voice-recognized-value {
	font-size: var(--kondor-font-size-lg, 16px);
	font-weight: var(--kondor-font-weight-bold, 700);
	color: var(--kondor-text-primary, #1a1a1a);
	font-family: var(--kondor-font-family-mono, 'Courier New', monospace);
	letter-spacing: 1px;
	text-align: center;
}

/*
 * Alternativas
 */

.kondor-id__voice-alternatives-container {
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-sm, 12px);
	padding: var(--kondor-space-sm, 12px);
	background-color: var(--kondor-bg-alternatives, #fafbfc);
	border: 1px solid var(--kondor-border-alternatives, #e2e8f0);
	border-radius: var(--kondor-radius-md, 8px);
	margin-top: var(--kondor-space-sm, 12px);
}

.kondor-id__voice-alternatives-title {
	margin: 0;
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-semibold, 600);
	color: var(--kondor-text-primary, #1a1a1a);
	text-align: center;
}

.kondor-id__voice-alternatives {
	display: flex;
	flex-wrap: wrap;
	gap: var(--kondor-space-xs, 8px);
	justify-content: center;
}

.kondor-id__voice-alternative-btn {
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-md, 16px);
	background-color: var(--kondor-bg-button, #f0f2f5);
	border: 2px solid var(--kondor-border-button, #d0d7de);
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
	font-family: var(--kondor-font-family-mono, 'Courier New', monospace);
	letter-spacing: 0.5px;
	white-space: nowrap;
}

.kondor-id__voice-alternative-btn:hover {
	background-color: var(--kondor-bg-button-hover, #e8eaed);
	border-color: var(--kondor-border-button-hover, #bcc5cf);
}

.kondor-id__voice-alternative-btn:active {
	background-color: var(--kondor-bg-button-active, #d9dce1);
	border-color: var(--kondor-border-button-active, #9ca3af);
}

/*
 * Candidatos (veículos compatíveis)
 *
 * A estrutura vive aqui, e não em style inline no JavaScript, para que as cores
 * de estado (ativo / hover / desabilitado) injetadas em includes/class-assets.php
 * possam de fato ser aplicadas. Um style inline venceria o CSS injetado.
 */

.kondor-candidates {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	width: 100%;
	max-width: 100%;
	min-width: 0;
	box-sizing: border-box;
	overflow-x: hidden;
	gap: var(--kondor-space-xs, 8px);
	margin-top: var(--kondor-space-sm, 12px);
}

.kondor-candidate-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	max-width: 100%;
	min-width: 0;
	box-sizing: border-box;
	height: auto;
	white-space: normal;
	overflow: hidden;
	padding: var(--kondor-space-sm, 12px);
	border: 1px solid;
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
}

.kondor-candidate-btn__label {
	display: block;
	width: 100%;
	max-width: 100%;
	min-width: 0;
	white-space: normal;
	overflow-wrap: anywhere;
	word-break: normal;
	line-height: 1.3;
	text-align: center;
}

.kondor-id__voice-none-btn {
	width: 100%;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-md, 16px);
	background-color: var(--kondor-bg-secondary, #fafafa);
	border: 2px solid var(--kondor-border-secondary, #e0e0e0);
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
	margin-top: var(--kondor-space-xs, 8px);
}

.kondor-id__voice-none-btn:hover {
	background-color: var(--kondor-bg-secondary-hover, #f0f0f0);
	border-color: var(--kondor-border-secondary-hover, #d0d0d0);
}

/*
 * Acessibilidade
 */

@media (prefers-reduced-motion: reduce) {
	.kondor-id__voice-wave-bar {
		animation: none;
		height: var(--kondor-height-wave-bar-reduced, 20px);
	}
}

/*
 * Shortcodes autônomos
 */

.kondor-id--input,
.kondor-id--voice,
.kondor-id--upload,
.kondor-id--scan {
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-sm, 12px);
}

/*
 * Campos de placa (Digitar e Falar) — valor e placeholder centralizados.
 * Classe compartilhada pelos três contextos (kondor_full, kondor_input,
 * kondor_voice); nenhum outro campo do plugin usa esta classe.
 */
.kondor-id__plate-input {
	text-align: center;
}

.kondor-id--input .kondor-id__plate-input,
.kondor-id--voice .kondor-id__plate-input {
	width: 100%;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-sm, 12px);
	font-size: var(--kondor-font-size-base, 14px);
	border-radius: var(--kondor-radius-sm, 6px);
}

/*
 * A borda de .kondor-id__plate-input (cor e espessura, configuráveis no ADM
 * em "Campos de placa") é resolvida dinamicamente em
 * includes/class-assets.php e alcança os três contextos (kondor_full,
 * kondor_input, kondor_voice) através do seletor `.kondor-id
 * .kondor-id__plate-input` — inclusive [kondor_full], que nunca teve borda
 * própria aqui.
 */

.kondor-id--input .kondor-id__search-btn,
.kondor-id--input .kondor-id__clear-btn,
.kondor-id--voice .kondor-id__voice-btn,
.kondor-id--voice .kondor-id__search-btn,
.kondor-id--voice .kondor-id__clear-btn,
.kondor-id--upload .kondor-id__clear-btn,
.kondor-id--scan .kondor-id__clear-btn,
.kondor-id--full .kondor-id__clear-btn {
	width: 100%;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-sm, 12px);
	background-color: var(--kondor-bg-button, #f0f2f5);
	border: 1px solid var(--kondor-border-button, #d0d7de);
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
}

.kondor-id__search-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.2;
	gap: 8px;
	max-width: 100%;
	box-sizing: border-box;
	white-space: normal;
	overflow-wrap: anywhere;
}

.kondor-id--input .kondor-id__search-btn,
.kondor-id--voice .kondor-id__search-btn {
	background-color: var(--kondor-primary, #003B71);
	border-color: var(--kondor-primary, #003B71);
	color: var(--kondor-primary-contrast, #ffffff);
}

.kondor-id--input .kondor-id__search-btn:hover,
.kondor-id--voice .kondor-id__search-btn:hover {
	background-color: var(--kondor-secondary, #19EBCB);
	border-color: var(--kondor-secondary, #19EBCB);
	color: var(--kondor-secondary-contrast, #000000);
}

.kondor-id--input .kondor-id__clear-btn:hover,
.kondor-id--voice .kondor-id__clear-btn:hover,
.kondor-id--upload .kondor-id__clear-btn:hover,
.kondor-id--scan .kondor-id__clear-btn:hover,
.kondor-id--full .kondor-id__clear-btn:hover {
	opacity: 0.8;
}

.kondor-id--input .kondor-id__search-btn:active,
.kondor-id--voice .kondor-id__voice-btn:hover:not(:disabled),
.kondor-id--voice .kondor-id__search-btn:active {
	opacity: 0.9;
}

/*
 * Causa raiz do "Falar placa" com fundo cinza-claro em [kondor_voice]: a
 * regra legada .kondor-id--voice .kondor-id__voice-btn (0,2,0 — dentro do
 * grupo de largura/padding/fundo de "Shortcodes autônomos", acima) tem
 * especificidade MAIOR que a regra de cor dinâmica .kondor-id__voice-btn
 * (0,1,0, seção "Botão de Voz com cores dinâmicas"), então vencia
 * independente da ordem — o botão nunca chegava a ficar azul nesse
 * contexto, mesmo estando funcionalmente habilitado. O search-btn já tinha
 * o equivalente desta correção (ver .kondor-id--input .kondor-id__search-btn,
 * .kondor-id--voice .kondor-id__search-btn acima); o voice-btn nunca
 * recebeu o mesmo tratamento.
 */
.kondor-id--voice .kondor-id__voice-btn {
	width: 100%;
	background-color: var(--kondor-primary, #003B71);
	border-color: var(--kondor-primary, #003B71);
	color: var(--kondor-primary-contrast, #ffffff);
}

/*
 * Loading
 */

.kondor-id--loading {
	opacity: var(--kondor-opacity-loading, 0.7);
}

/*
 * Feedback
 */

.kondor-id__feedback {
	padding: var(--kondor-space-sm, 12px) var(--kondor-space-md, 16px);
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	line-height: var(--kondor-line-height-relaxed, 1.5);
	margin-bottom: var(--kondor-space-sm, 12px);
}

.kondor-id__feedback--loading {
	background-color: var(--kondor-bg-info, #f0f8ff);
	border: 1px solid var(--kondor-border-success, #bfdbfe);
	color: var(--kondor-text-info, #0369a1);
}

.kondor-id__feedback--error {
	background-color: var(--kondor-bg-error, #fef2f2);
	border: 1px solid var(--kondor-border-error, #fecaca);
	color: var(--kondor-text-error, #991b1b);
}

/*
 * Global Loading Overlay
 */

.kondor-loading-overlay {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	z-index: 9999;
	background-color: var(--kondor-loading-overlay-color, rgba(0, 0, 0, 0.65));
	display: flex;
	align-items: center;
	justify-content: center;
	pointer-events: auto;
}

.kondor-loading-overlay[hidden] {
	display: none;
}

.kondor-loading-overlay__content {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: var(--kondor-space-lg, 20px);
}

.kondor-loading-overlay__image {
	width: 80px;
	height: 80px;
	display: flex;
	align-items: center;
	justify-content: center;
}

.kondor-loading-overlay__gif {
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	display: block;
}

.kondor-loading-overlay__message {
	color: #ffffff;
	font-size: var(--kondor-font-size-lg, 16px);
	font-weight: var(--kondor-font-weight-medium, 500);
	text-align: center;
	line-height: var(--kondor-line-height-base, 1.4);
	max-width: 300px;
	margin: 0;
}

/*
 * Botão de Voz com cores dinâmicas
 */

.kondor-id__voice-btn {
	background-color: var(--kondor-primary, #f0f2f5);
	border-color: var(--kondor-primary, #d0d7de);
	color: var(--kondor-primary-contrast, #1a1a1a);
}

.kondor-id__voice-btn:hover:not(:disabled) {
	background-color: var(--kondor-secondary, #e8eaed);
	border-color: var(--kondor-secondary, #bcc5cf);
	color: var(--kondor-secondary-contrast, #1a1a1a);
}

.kondor-id__voice-btn:active:not(:disabled) {
	opacity: 0.9;
}

/*
 * Base das abas de navegação.
 *
 * appearance:none remove o "bevel" nativo do navegador que mudava de
 * aparência em :hover/:active e causava tremor visual. A borda tem a
 * mesma espessura em todos os estados (só a cor muda, nas regras dinâmicas
 * de includes/class-assets.php); a transition é limitada a cor/fundo, sem
 * transform, para não deslocar nem escalar o botão.
 */
.kondor-id__nav-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	appearance: none;
	-webkit-appearance: none;
	border: 2px solid transparent;
	background-color: transparent;
	cursor: pointer;
	transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

/*
 * Navegação ativa com cores dinâmicas
 */

.kondor-id__nav-btn--active {
	background-color: var(--kondor-primary, #003B71);
	border-color: var(--kondor-primary, #003B71);
	color: var(--kondor-primary-contrast, #ffffff);
}

.kondor-id__nav-btn--active:hover {
	background-color: var(--kondor-secondary, #19EBCB);
	border-color: var(--kondor-secondary, #19EBCB);
	color: var(--kondor-secondary-contrast, #000000);
}

/*
 * Foco visível para acessibilidade
 */

.kondor-id__plate-input:focus,
.kondor-id__search-btn:focus,
.kondor-id__clear-btn:focus,
.kondor-id__voice-btn:focus,
.kondor-candidate-btn:focus,
.kondor-id__voice-alternative-btn:focus,
.kondor-id__nav-btn:focus,
.kondor-id__image-input:focus,
.kondor-id__upload-dropzone:focus,
.kondor-id__scan-trigger-btn:focus,
.kondor-id__camera-capture:focus,
.kondor-id__camera-switch:focus,
.kondor-id__camera-native-fallback-trigger:focus {
	outline: 2px solid var(--kondor-primary, #003B71);
	outline-offset: 2px;
}

/*
 * Botão Limpar com ícone dinâmico
 */

.kondor-id__clear-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.2;
	gap: 8px;
	max-width: 100%;
	box-sizing: border-box;
	white-space: normal;
	overflow-wrap: anywhere;
	background-color: var(--kondor-clear-button-bg, #FFFFFF);
	color: var(--kondor-clear-button-text, #003B71);
	border: 1px solid var(--kondor-clear-button-border, #003B71);
	border-radius: var(--kondor-radius-sm, 6px);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
}

.kondor-id__clear-btn:hover {
	opacity: 0.8;
	border-color: var(--kondor-clear-button-border, #003B71);
}

.kondor-id__clear-btn:active {
	opacity: 0.7;
}

/*
 * Botão sólido de "Escanear placa" (Sprint 26.2 C02.0): visual restaurado
 * da 4.0.0-rc.26.1.22, agora aplicado a um <button type="button"> real
 * (não mais <label> nem <div>). A C01.1 confirmou por teste físico que o
 * problema nunca foi o botão bonito — era o <input capture="environment">
 * nativo não garantir a câmera traseira no aparelho testado — então o
 * visual pôde ser restaurado sem ressalvas, com o acionamento principal
 * migrado para getUserMedia() (ver assets/js/kondor-id.js, câmera
 * customizada). O estado desabilitado usa a mesma classe modificadora de
 * sempre (kondor-id__scan-trigger-btn--disabled), já resolvida em
 * includes/class-assets.php — nenhuma alteração necessária nesse arquivo.
 */
.kondor-id__scan-trigger-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.2;
	gap: 8px;
	max-width: 100%;
	box-sizing: border-box;
	white-space: normal;
	overflow-wrap: anywhere;
	width: 100%;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-md, 16px);
	appearance: none;
	-webkit-appearance: none;
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
}

/*
 * Reforço com seletor escopado (.kondor-id .kondor-id__scan-trigger-btn,
 * especificidade 0,2,0) para as propriedades que definem a aparência
 * sólida do botão — cor de fundo, borda e texto ficam concentradas aqui,
 * não na regra de classe única acima, para vencer com folga qualquer
 * regra legada por tipo de shortcode que ainda mire este elemento.
 */
.kondor-id .kondor-id__scan-trigger-btn {
	appearance: none;
	-webkit-appearance: none;
	background-color: var(--kondor-primary, #003B71);
	background-image: none;
	border-width: 1px;
	border-style: solid;
	border-color: var(--kondor-primary, #003B71);
	color: var(--kondor-primary-contrast, #ffffff);
	box-shadow: none;
	text-decoration: none;
}

.kondor-id .kondor-id__scan-trigger-btn:hover {
	background-color: var(--kondor-secondary, #19EBCB);
	border-color: var(--kondor-secondary, #19EBCB);
	color: var(--kondor-secondary-contrast, #000000);
}

.kondor-id__scan-trigger-btn:active {
	opacity: 0.9;
}

.kondor-id__scan-trigger-btn--disabled,
.kondor-id__scan-trigger-btn:disabled {
	cursor: not-allowed;
}

/*
 * Painel de câmera customizado (Sprint 26.2 C02.0): oculto por padrão
 * (atributo `hidden`), aberto por JavaScript ao conceder acesso à câmera.
 * Escopado à própria instância — nunca um modal global no body.
 */
.kondor-id__camera-panel {
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-sm, 12px);
	width: 100%;
	box-sizing: border-box;
	margin-top: var(--kondor-space-sm, 12px);
}

/*
 * Palco da câmera (Sprint 26.3 §7): agrupa o preview de vídeo e a moldura
 * SVG opcional na mesma superfície visual, proporção fixa 4:3 (evita
 * "pulo" de layout enquanto o stream carrega). A moldura é puramente
 * visual — nunca faz parte do frame capturado pelo canvas.
 */
.kondor-id__camera-stage {
	position: relative;
	width: 100%;
	max-width: 100%;
	aspect-ratio: 4 / 3;
	background-color: #000000;
	border-radius: var(--kondor-radius-sm, 6px);
	overflow: hidden;
}

/*
 * Preview de vídeo: nunca espelhado (nenhum transform aplicado — espelhar
 * é comportamento de câmera frontal, incompatível com o uso pretendido,
 * traseira).
 */
.kondor-id__camera-preview {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/*
 * Moldura SVG opcional (Sprint 26.3): camada puramente visual sobre o
 * preview — centralizada, proporcional, sem distorção, sem interceptar
 * toque. Sem SVG configurado, o elemento nem chega a ser renderizado no
 * PHP (includes/class-shortcodes.php), então não há espaço reservado.
 */
.kondor-id__camera-frame {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: contain;
	pointer-events: none;
	z-index: 2;
}

.kondor-id__camera-status {
	margin: 0;
	min-height: 1.2em;
	font-size: var(--kondor-font-size-status, 13px);
	color: var(--kondor-text-secondary, #576b7c);
}

/*
 * Hierarquia dos controles do painel (Sprint 26.2 C02.1): linha principal
 * ("Escanear placa", ação de maior destaque, largura total) e, abaixo,
 * uma linha secundária com "Trocar câmera" e "Câmera do sistema" dividindo
 * o espaço — o botão Cancelar foi removido; Limpar (já existente, fora do
 * painel) passa a ser a rota de encerramento manual.
 */
.kondor-id__camera-actions {
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-xs, 8px);
}

/*
 * Botão principal "Escanear placa" (captura o frame atual): mesma
 * aparência sólida do botão externo, agora dentro do painel, ocupando
 * 100% da largura — é a ação de maior destaque do painel.
 */
.kondor-id__camera-capture {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.2;
	gap: 8px;
	width: 100%;
	min-height: 44px;
	box-sizing: border-box;
	white-space: normal;
	overflow-wrap: anywhere;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-md, 16px);
	appearance: none;
	-webkit-appearance: none;
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
	background-color: var(--kondor-primary, #003B71);
	border: 1px solid var(--kondor-primary, #003B71);
	color: var(--kondor-primary-contrast, #ffffff);
}

.kondor-id__camera-capture:hover {
	background-color: var(--kondor-secondary, #19EBCB);
	border-color: var(--kondor-secondary, #19EBCB);
	color: var(--kondor-secondary-contrast, #000000);
}

.kondor-id__camera-capture:disabled {
	cursor: not-allowed;
	opacity: 0.6;
}

/*
 * Linha secundária: "Trocar câmera" e "Câmera do sistema" dividindo a
 * largura disponível em duas colunas. minmax(0, 1fr) impede que o texto
 * de qualquer um dos dois force overflow horizontal — quebra dentro da
 * própria coluna em vez de estourar a largura do painel.
 */
.kondor-id__camera-secondary-actions {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--kondor-space-xs, 8px);
}

.kondor-id__camera-switch,
.kondor-id__camera-native-fallback-trigger {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.2;
	gap: 8px;
	width: 100%;
	min-width: 0;
	min-height: 44px;
	box-sizing: border-box;
	white-space: normal;
	overflow-wrap: anywhere;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-sm, 12px);
	appearance: none;
	-webkit-appearance: none;
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
	background-color: var(--kondor-clear-button-bg, #FFFFFF);
	border: 1px solid var(--kondor-clear-button-border, #003B71);
	color: var(--kondor-clear-button-text, #003B71);
}

.kondor-id__camera-switch:hover,
.kondor-id__camera-native-fallback-trigger:hover {
	opacity: 0.8;
}

.kondor-id__camera-switch:disabled,
.kondor-id__camera-native-fallback-trigger:disabled {
	cursor: not-allowed;
	opacity: 0.5;
}

/*
 * Dropzone de "Selecionar foto da placa".
 *
 * Restaura o suporte a arrastar-e-soltar perdido em C01.9 sem voltar à
 * aparência do <input type="file"> nativo: o input continua no DOM
 * (funcional e acessível via .kondor-id__file-input-hidden), mas quem
 * recebe clique e drag/drop é este contêiner (assets/js/kondor-id.js).
 */
.kondor-id__upload-dropzone {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.2;
	gap: 8px;
	max-width: 100%;
	box-sizing: border-box;
	white-space: normal;
	overflow-wrap: anywhere;
	width: 100%;
	min-height: 96px;
	padding: var(--kondor-space-md, 16px);
	background-color: var(--kondor-bg-secondary, #fafafa);
	border: 2px dashed var(--kondor-border-button, #d0d7de);
	border-radius: var(--kondor-radius-sm, 6px);
	color: var(--kondor-text-secondary, #576b7c);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	transition: var(--kondor-transition-default, all 0.2s ease);
}

.kondor-id__upload-dropzone:hover,
.kondor-id__upload-dropzone:focus-visible {
	border-color: var(--kondor-primary, #003B71);
	background-color: var(--kondor-bg-info, #f0f8ff);
}

.kondor-id__upload-dropzone--dragover {
	border-style: solid;
	border-color: var(--kondor-primary, #003B71);
	background-color: var(--kondor-bg-info, #f0f8ff);
}

/*
 * Input de arquivo nativo: oculto visualmente, mas mantido no fluxo de
 * acessibilidade (sem display:none, que o removeria da árvore de AT).
 */
.kondor-id__file-input-hidden {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

.kondor-id__upload-filename {
	margin: var(--kondor-space-xs, 8px) 0 0;
	font-size: var(--kondor-font-size-status, 13px);
	color: var(--kondor-text-secondary, #576b7c);
	overflow-wrap: anywhere;
	word-break: break-word;
}

.kondor-id__upload-filename:empty {
	display: none;
}

/*
 * Conjunto real de ícone + texto dos 5 controles internos (Consultar
 * placa, Falar placa, Selecionar foto, Escanear placa, Limpar).
 *
 * O ícone configurável é uma <img> real dentro deste wrapper (renderizada
 * em includes/class-shortcodes.php), não um ::before/::after posicionado
 * em relação ao botão inteiro — por isso ícone e texto centralizam como
 * uma única unidade, inclusive quando o texto quebra em mais de uma linha.
 * Sem ícone configurado, a <img> simplesmente não é renderizada: nenhum
 * espaço é reservado.
 */
.kondor-control-content {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--kondor-control-gap, 8px);
	max-width: 100%;
	min-width: 0;
	margin-inline: auto;
	text-align: center;
}

.kondor-control-label {
	min-width: 0;
	max-width: 100%;
	white-space: normal;
	overflow-wrap: anywhere;
	line-height: 1.2;
	text-align: center;
	font-size: var(--kondor-control-text-size, 16px);
}

.kondor-control-icon {
	display: block;
	width: var(--kondor-control-icon-size, 28px);
	height: var(--kondor-control-icon-size, 28px);
	object-fit: contain;
	flex: 0 0 auto;
}

/*
 * × padrão do botão Limpar (sem ícone configurado) e do estado de escuta
 * do botão de voz — ocupa a mesma caixa que um ícone real ocuparia, para
 * que a troca entre os dois nunca desloque o texto ao lado.
 */
.kondor-control-default-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var(--kondor-control-icon-size, 28px);
	height: var(--kondor-control-icon-size, 28px);
	flex: 0 0 auto;
	font-weight: var(--kondor-font-weight-bold, 700);
	font-size: calc(var(--kondor-control-icon-size, 28px) * 0.75);
	line-height: 1;
}

/*
 * Bloco de resultado do veículo/placa
 */

.kondor-vehicle-info {
	width: 100%;
	max-width: 900px;
	margin-left: auto;
	margin-right: auto;
	box-sizing: border-box;
	background-color: var(--kondor-bg-secondary, #fafafa);
	border-radius: var(--kondor-radius-lg, 12px);
	padding: var(--kondor-space-lg, 20px);
}

.kondor-vehicle-info--full {
	max-width: none;
}

.kondor-vehicle-info__title {
	font-size: clamp(20px, 2.4vw, 26px);
	line-height: 1.15;
	font-weight: 800;
	text-align: center;
	color: var(--kondor-text-primary, #1a1a1a);
	margin: 0 0 var(--kondor-space-lg, 20px);
}

/*
 * Sprint 27.0 — Privacidade + identidade do dispositivo.
 *
 * Todo seletor novo é escopado por `.kondor-privacy` ou
 * `.kondor-privacy-notice` — nenhum seletor global (body/html/button/
 * input/a/div/h1/h2 sem prefixo Kondor). Reaproveita os tokens do Design
 * System já existentes (espaçamento, raio, tipografia, cores primária/
 * secundária/erro) — nenhum redesign, nenhuma folha global nova.
 */

/* ---- Aviso inicial (overlay próprio, nunca o loading overlay) ---- */

/* Sprint 27.0 C01.8/C01.9: banner de consentimento ancorado embaixo.
   C01.8 deixou o layout compacto (coluna de ações auto-dimensionada,
   Aceitar/Negar lado a lado, título reduzido). C01.9 corrige a
   largura no desktop: max-width fixo (840px) fazia o título quebrar
   em 2 linhas em telas largas, deixando o painel com aparência de
   card/modal alto em vez de barra horizontal larga — substituído por
   90vw, aproximando o painel de uma faixa larga ancorada embaixo
   (dentro da faixa 80-90vw pedida), com espaço suficiente para o
   título caber numa linha só na maioria das larguras de desktop.
   Nenhuma alteração de HTML/JS. Backdrop (--kondor-loading-overlay-color,
   token do ADM) e posição ancorada embaixo (C01.7) preservados. No
   mobile (@media 767px, abaixo), max-width volta a none — largura
   plena do espaço disponível, sem o teto de 90vw do desktop, mesmo
   comportamento de sempre. role="dialog"/aria-modal="true" (JS/HTML,
   não tocados aqui) permanecem. Conteúdo/textos do aviso e lógica de
   Aceitar/Negar não foram tocados. */
.kondor-privacy-notice {
	position: fixed;
	inset: 0;
	z-index: 10000;
	display: flex;
	align-items: flex-end;
	justify-content: center;
	padding: var(--kondor-space-lg, 20px);
	background-color: var(--kondor-loading-overlay-color, rgba(0, 0, 0, 0.65));
	box-sizing: border-box;
}

.kondor-privacy-notice[hidden] {
	display: none;
}

.kondor-privacy-notice__panel {
	width: 100%;
	max-width: 90vw;
	max-height: min(80vh, 640px);
	overflow-y: auto;
	box-sizing: border-box;
	background-color: var(--kondor-bg-primary, #ffffff);
	border-radius: var(--kondor-radius-lg, 12px);
	padding: var(--kondor-space-lg, 20px) var(--kondor-space-lg, 20px) var(--kondor-space-sm, 12px);
	box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18), 0 2px 10px rgba(0, 0, 0, 0.10);
	display: grid;
	grid-template-columns: 1fr auto;
	column-gap: var(--kondor-space-lg, 20px);
	row-gap: var(--kondor-space-xs, 8px);
	align-items: center;
}

.kondor-privacy-notice__title {
	grid-column: 1;
	margin: 0;
	font-size: var(--kondor-font-size-status, 13px);
	font-weight: 700;
	color: var(--kondor-text-primary, #1a1a1a);
}

.kondor-privacy-notice__text {
	grid-column: 1;
	margin: 0;
	font-size: var(--kondor-font-size-base, 14px);
	line-height: 1.5;
	color: var(--kondor-text-secondary, #576b7c);
	white-space: pre-line;
}

.kondor-privacy-notice__actions {
	grid-column: 2;
	grid-row: 1 / 4;
	align-self: center;
	display: flex;
	flex-direction: row;
	gap: var(--kondor-space-xs, 8px);
}

.kondor-privacy-notice__actions .kondor-privacy-notice__btn {
	width: auto;
	flex: 0 0 auto;
	min-width: 96px;
	padding-left: var(--kondor-space-md, 16px);
	padding-right: var(--kondor-space-md, 16px);
}

.kondor-privacy-notice__btn {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	width: 100%;
	min-height: 44px;
	box-sizing: border-box;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-md, 16px);
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	appearance: none;
	-webkit-appearance: none;
	transition: var(--kondor-transition-default, all 0.2s ease);
}

/* Sprint 27.0 C01.4: os dois botões do aviso (Aceitar/Negar) passam a
   compartilhar o mesmo padrão visual principal do plugin — normal em
   cor primária, hover em cor secundária — em vez de "primário
   preenchido" + "secundário neutro/outline". */
.kondor-privacy-notice__btn--primary,
.kondor-privacy-notice__btn--secondary {
	background-color: var(--kondor-primary, #003B71);
	border: 1px solid var(--kondor-primary, #003B71);
	color: var(--kondor-primary-contrast, #ffffff);
}

.kondor-privacy-notice__btn--primary:hover:not(:disabled),
.kondor-privacy-notice__btn--secondary:hover:not(:disabled) {
	background-color: var(--kondor-secondary, #19EBCB);
	border-color: var(--kondor-secondary, #19EBCB);
	color: var(--kondor-secondary-contrast, #000000);
}

.kondor-privacy-notice__btn:disabled {
	cursor: not-allowed;
	opacity: 0.6;
}

.kondor-privacy-notice__btn:focus-visible {
	outline: 3px solid var(--kondor-secondary, #19EBCB);
	outline-offset: 2px;
}

.kondor-privacy-notice__link {
	grid-column: 1;
	margin: 0;
	text-align: left;
	font-size: var(--kondor-font-size-status, 13px);
}

.kondor-privacy-notice__link a {
	color: var(--kondor-primary, #003B71);
}

.kondor-privacy-notice__status {
	grid-column: 1;
	margin: 0;
	min-height: 0;
	font-size: var(--kondor-font-size-status, 13px);
	color: var(--kondor-text-secondary, #576b7c);
	text-align: left;
}

.kondor-privacy-notice__status:empty {
	display: none;
}

/* ---- Shortcode [kondor_privacy] ---- */

.kondor-privacy {
	width: 100%;
	box-sizing: border-box;
	background-color: var(--kondor-bg-secondary, #fafafa);
	border-radius: var(--kondor-radius-lg, 12px);
	padding: var(--kondor-space-lg, 20px);
}

.kondor-privacy__title {
	margin: 0 0 var(--kondor-space-xs, 8px);
	font-size: var(--kondor-font-size-lg, 16px);
	font-weight: 700;
	color: var(--kondor-text-primary, #1a1a1a);
}

.kondor-privacy__text {
	margin: 0 0 var(--kondor-space-md, 16px);
	font-size: var(--kondor-font-size-base, 14px);
	line-height: 1.5;
	color: var(--kondor-text-secondary, #576b7c);
	white-space: pre-line;
}

.kondor-privacy__subtext {
	margin: 0 0 var(--kondor-space-md, 16px);
	font-size: var(--kondor-font-size-status, 13px);
	line-height: 1.5;
	color: var(--kondor-text-secondary, #576b7c);
	white-space: pre-line;
}

.kondor-privacy__summary {
	margin: 0 0 var(--kondor-space-md, 16px);
	padding: var(--kondor-space-sm, 12px) var(--kondor-space-md, 16px);
	background-color: var(--kondor-bg-primary, #ffffff);
	border-radius: var(--kondor-radius-sm, 6px);
}

.kondor-privacy__summary[hidden],
.kondor-privacy__empty[hidden],
.kondor-privacy__details[hidden],
.kondor-privacy__confirm[hidden] {
	display: none;
}

/* Sprint 27.1 C02.3 §4: os botões (.kondor-privacy__btn) definem
   `display: inline-flex`, com a mesma especificidade (uma classe) que
   a regra nativa do navegador para [hidden] — como regra de autor
   sempre vence a folha de estilo do user agent em empate de
   especificidade, os botões ficavam visíveis mesmo com o atributo
   `hidden` presente. Regra única, escopada a `.kondor-privacy`
   (nunca `[hidden]` global), cobre todos os descendentes ocultáveis
   do componente — inclusive os 4 botões condicionais (Autorizar/
   Revogar dados de uso, Compartilhar/Revogar localização) — com
   `!important` para garantir a prioridade independentemente de
   qualquer especificidade futura. */
.kondor-privacy [hidden] {
	display: none !important;
}

.kondor-privacy__row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--kondor-space-xs, 8px);
	margin: 0;
	font-size: var(--kondor-font-size-base, 14px);
}

.kondor-privacy__row + .kondor-privacy__row {
	margin-top: var(--kondor-space-xs, 8px);
}

.kondor-privacy__label {
	color: var(--kondor-text-secondary, #576b7c);
}

.kondor-privacy__value {
	color: var(--kondor-text-primary, #1a1a1a);
	font-weight: var(--kondor-font-weight-medium, 500);
}

.kondor-privacy__empty {
	margin: 0 0 var(--kondor-space-md, 16px);
	font-size: var(--kondor-font-size-base, 14px);
	color: var(--kondor-text-secondary, #576b7c);
}

.kondor-privacy__actions {
	display: flex;
	flex-wrap: wrap;
	gap: var(--kondor-space-xs, 8px);
}

.kondor-privacy__btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	min-height: 44px;
	box-sizing: border-box;
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-md, 16px);
	border-radius: var(--kondor-radius-sm, 6px);
	font-size: var(--kondor-font-size-base, 14px);
	font-weight: var(--kondor-font-weight-medium, 500);
	cursor: pointer;
	appearance: none;
	-webkit-appearance: none;
	transition: var(--kondor-transition-default, all 0.2s ease);
}

/* Sprint 27.0 C01.4: os botões da Central de Privacidade (Ver meus
   dados, Compartilhar/Revogar localização, Apagar meus dados,
   Cancelar) passam a compartilhar o mesmo padrão visual principal do
   plugin — normal em cor primária, hover em cor secundária — em vez
   de variações "neutro/outline" e "vermelho de perigo". O painel de
   confirmação (.kondor-privacy__confirm) mantém seu destaque visual
   de aviso — só os BOTÕES foram unificados, conforme o ticket. */
.kondor-privacy__btn--primary,
.kondor-privacy__btn--secondary,
.kondor-privacy__btn--danger {
	background-color: var(--kondor-primary, #003B71);
	border: 1px solid var(--kondor-primary, #003B71);
	color: var(--kondor-primary-contrast, #ffffff);
}

.kondor-privacy__btn--primary:hover:not(:disabled),
.kondor-privacy__btn--secondary:hover:not(:disabled),
.kondor-privacy__btn--danger:hover:not(:disabled) {
	background-color: var(--kondor-secondary, #19EBCB);
	border-color: var(--kondor-secondary, #19EBCB);
	color: var(--kondor-secondary-contrast, #000000);
}

.kondor-privacy__btn:disabled {
	cursor: not-allowed;
	opacity: 0.6;
}

.kondor-privacy__btn:focus-visible {
	outline: 3px solid var(--kondor-secondary, #19EBCB);
	outline-offset: 2px;
}

.kondor-privacy__details {
	margin-top: var(--kondor-space-md, 16px);
	padding: var(--kondor-space-sm, 12px) var(--kondor-space-md, 16px);
	background-color: var(--kondor-bg-primary, #ffffff);
	border-radius: var(--kondor-radius-sm, 6px);
}

.kondor-privacy__detail-row {
	margin: 0;
	font-size: var(--kondor-font-size-status, 13px);
	color: var(--kondor-text-primary, #1a1a1a);
	overflow-wrap: anywhere;
	word-break: break-word;
}

.kondor-privacy__detail-row + .kondor-privacy__detail-row {
	margin-top: var(--kondor-space-xs, 8px);
}

.kondor-privacy__confirm {
	margin-top: var(--kondor-space-md, 16px);
	padding: var(--kondor-space-sm, 12px) var(--kondor-space-md, 16px);
	background-color: var(--kondor-bg-error, #fef2f2);
	border: 1px solid var(--kondor-border-error, #fecaca);
	border-radius: var(--kondor-radius-sm, 6px);
}

.kondor-privacy__confirm-text {
	margin: 0 0 var(--kondor-space-sm, 12px);
	font-size: var(--kondor-font-size-base, 14px);
	color: var(--kondor-text-error, #991b1b);
}

.kondor-privacy__confirm-actions {
	display: flex;
	flex-wrap: wrap;
	gap: var(--kondor-space-xs, 8px);
}

.kondor-privacy__status {
	margin: var(--kondor-space-sm, 12px) 0 0;
	min-height: 1.2em;
	font-size: var(--kondor-font-size-status, 13px);
	color: var(--kondor-text-secondary, #576b7c);
}

.kondor-privacy__status--success {
	/* Sprint 27.0 C01.2 — correção 2: --kondor-bg-success/--kondor-border-success
	   são azulados (compartilhados com outros componentes homologados,
	   ex.: .kondor-id__voice-recognized) e não podem ser alterados
	   globalmente. Fundo/borda abaixo são tons de verde escopados
	   exclusivamente a este estado, derivados da mesma família da cor
	   --kondor-success/--kondor-text-success (#059669) já usada abaixo. */
	padding: var(--kondor-space-xs, 8px) var(--kondor-space-sm, 12px);
	background-color: #ecfdf5;
	border: 1px solid #a7f3d0;
	border-radius: var(--kondor-radius-sm, 6px);
	color: var(--kondor-text-success, #059669);
	font-weight: var(--kondor-font-weight-medium, 500);
}

.kondor-vehicle-info__content {
	display: grid;
	grid-template-columns: minmax(180px, 230px) 3px minmax(280px, 480px);
	align-items: center;
	justify-content: center;
	gap: var(--kondor-space-xl, 24px);
}

.kondor-vehicle-info__plate {
	position: relative;
	width: 200px;
	max-width: 100%;
	justify-self: center;
	background-color: #ffffff;
	border: 2px solid var(--kondor-text-primary, #1a1a1a);
	border-radius: var(--kondor-radius-md, 8px);
	overflow: hidden;
	padding-bottom: 18px;
}

.kondor-vehicle-info__plate-top {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	background-color: var(--kondor-primary, #003B71);
	color: #ffffff;
	font-size: 11px;
	font-weight: var(--kondor-font-weight-bold, 700);
	letter-spacing: 1px;
	padding: 3px 0;
}

.kondor-vehicle-info__plate-flag {
	display: block;
	width: 18px;
	height: auto;
	max-height: 14px;
	object-fit: contain;
}

.kondor-vehicle-info__plate-number {
	text-align: center;
	font-family: var(--kondor-font-family-mono, 'Courier New', monospace);
	font-size: 1.6rem;
	font-weight: var(--kondor-font-weight-bold, 700);
	letter-spacing: 2px;
	color: var(--kondor-text-primary, #1a1a1a);
	padding: 10px 8px 0;
}

.kondor-vehicle-info__plate-br {
	position: absolute;
	left: 8px;
	bottom: 4px;
	font-size: 10px;
	font-weight: var(--kondor-font-weight-semibold, 600);
	color: var(--kondor-text-secondary, #576b7c);
}

.kondor-vehicle-info__divider {
	width: 3px;
	height: 64px;
	justify-self: center;
	background-color: var(--kondor-primary, #003B71);
	opacity: 0.55;
	border-radius: 2px;
}

.kondor-vehicle-info__details {
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: var(--kondor-space-sm, 12px);
	text-align: left;
}

.kondor-vehicle-info__details p {
	margin: 0;
	font-size: var(--kondor-font-size-base, 14px);
	overflow-wrap: anywhere;
}

.kondor-vehicle-info__details strong {
	color: #111111;
	font-weight: 800;
}

.kondor-vehicle-info__details span {
	color: #111111;
	font-weight: 700;
}

/*
 * Título "Baterias Recomendadas".
 *
 * Classe própria (em vez do seletor global h3) para não herdar tamanho,
 * cor, line-height ou margens de outros sites/temas. Cor e margens exatas
 * são dinâmicas (includes/class-assets.php); aqui só a tipografia
 * estrutural, que vale mesmo antes do CSS dinâmico carregar.
 */
.kondor-id__recommendations-title {
	font-size: clamp(24px, 3vw, 32px);
	line-height: 1.15;
	font-weight: 800;
	overflow-wrap: anywhere;
	text-align: center;
	color: var(--kondor-primary, #003B71);
	margin-top: 28px;
	margin-bottom: 18px;
}

/*
 * Modificador para reaproveitar a mesma base visual do título "Baterias
 * Recomendadas" (cor configurável, centralização, espaçamento dinâmico) em
 * mensagens de resultado menos proeminentes: "Foram encontrados vários
 * veículos compatíveis." usa a base sem modificador; "Nenhuma bateria
 * está disponível..." usa este modificador, só reduzindo o font-size.
 */
.kondor-id__recommendations-title--compact {
	font-size: clamp(15px, 2.2vw, 18px);
}

/*
 * Responsividade
 */

@media (max-width: 767px) {
	.kondor-battery-card__footer {
		grid-template-columns: 1fr;
	}

	.kondor-loading-overlay__message {
		font-size: var(--kondor-font-size-base, 14px);
	}

	.kondor-vehicle-info__content {
		grid-template-columns: 1fr;
		justify-content: stretch;
	}

	.kondor-vehicle-info__plate {
		justify-self: center;
	}

	.kondor-vehicle-info__divider {
		width: 100%;
		height: 3px;
	}

	.kondor-vehicle-info__details {
		text-align: left;
	}

	/* Sprint 27.0 C01.7/C01.8/C01.9: no mobile, o banner de privacidade
	   reduz as margens do wrapper (sem overflow horizontal) e a grade
	   interna volta a uma única coluna — texto e ações empilhados
	   verticalmente, em vez das duas colunas lado a lado do desktop.
	   Os botões (lado a lado no desktop desde C01.8) voltam a
	   empilhar em coluna cheia, mais fáceis de tocar. max-width: none
	   (C01.9) mantém o mobile usando a largura cheia disponível,
	   ignorando o teto de 90vw introduzido para o desktop — sem essa
	   regra, 90vw ficaria ligeiramente mais estreito que o
	   comportamento já aprovado no mobile. */
	.kondor-privacy-notice {
		padding: var(--kondor-space-sm, 12px);
	}

	.kondor-privacy-notice__panel {
		max-width: none;
		grid-template-columns: 1fr;
	}

	.kondor-privacy-notice__actions {
		grid-column: 1;
		grid-row: auto;
		flex-direction: column;
		margin-top: var(--kondor-space-md, 16px);
	}

	.kondor-privacy-notice__actions .kondor-privacy-notice__btn {
		width: 100%;
		min-width: 0;
	}
}

@media (min-width: 720px) and (max-width: 1179px) {
	.kondor-id {
		--kondor-cards-per-row-tablet: var(--cards-per-row-tablet, 1);
	}
}

/*
 * Botões com texto longo no mobile: quebram em vez de cortar ou estourar a largura.
 */
@media (max-width: 719px) {
	.kondor-candidate-btn,
	.kondor-id__nav-btn,
	.kondor-id__search-btn,
	.kondor-id__voice-btn,
	.kondor-id__clear-btn,
	.kondor-id__upload-dropzone,
	.kondor-id__scan-trigger-btn,
	.kondor-id__camera-capture,
	.kondor-id__camera-switch,
	.kondor-id__camera-native-fallback-trigger,
	.kondor-id__voice-alternative-btn,
	.kondor-id__voice-none-btn {
		max-width: 100%;
		box-sizing: border-box;
		white-space: normal;
		overflow-wrap: anywhere;
		word-break: break-word;
		height: auto;
		min-height: 48px;
		line-height: 1.3;
	}
}
