/* ==========================================================================
   WebSIS — camada de tema
   --------------------------------------------------------------------------
   Carregado DEPOIS de todo o Metronic (ver menu_lateral.blade.php), por isso
   sobrescreve sem precisar de !important na maioria dos casos. Onde o Metronic
   usa cadeia de seletores longa, aqui repetimos a mesma cadeia em vez de
   empilhar !important — mantem a folha previsivel.

   O Metronic 7 nao tem fontes SCSS neste projeto (so o bundle de 2,2 MB ja
   compilado), entao toda a repaginacao vive aqui.

   ATENCAO — TAMANHOS EM PX, NAO EM REM.
   O Metronic redefine o html para font-size: 12px. Um .875rem, que numa base
   normal daria 14px, aqui sai 10,5px. Escrevi este arquivo assumindo 16px e
   os 35 valores sairam 25% menores — o titulo da listagem ficou em 13,5px e
   o label dos indicadores em 9px. Por isso todo font-size aqui e absoluto.
   Se acrescentar regra, use px.
   ========================================================================== */

:root {
	/* ---- Neutros (frios, para nao amarelar sob luz de escritorio) ---- */
	--ws-n-0: #FFFFFF;
	--ws-n-50: #F6F8FA;
	--ws-n-100: #ECEFF3;
	--ws-n-200: #DFE3E9;
	--ws-n-300: #C7CDD6;
	--ws-n-400: #9AA3B0;
	--ws-n-500: #6E7887;
	--ws-n-600: #545D6B;
	--ws-n-700: #3D4550;
	--ws-n-800: #272D36;
	--ws-n-900: #161B22;

	/* ---- Primario: unico responsavel por "acao/navegacao" ----
	   Antes o sistema tinha DOIS acentos disputando esse papel: o verde-oliva
	   #97b924 do logo e o azul #3699ff padrao do Metronic. Agora e so este. */
	--ws-primary-50: #EEF3FE;
	--ws-primary-100: #D8E4FC;
	--ws-primary: #3B6FE0;
	--ws-primary-600: #2F5BC4;
	--ws-primary-700: #24499E;

	/* ---- Semanticos: verde volta a significar so "sucesso" ----
	   Calibrados em luminosidade parecida para nenhum gritar mais que o outro,
	   e escuros o bastante para passar contraste como texto sobre fundo claro. */
	--ws-success: #1E8E5A;
	--ws-success-50: #E8F5EE;
	--ws-warning: #B7791F;
	--ws-warning-50: #FBF3E3;
	--ws-danger: #C4362B;
	--ws-danger-50: #FBEAE8;
	--ws-info: #0E7C8A;
	--ws-info-50: #E4F3F5;

	/* ---- Sidebar e faixa da marca: mesma cor, sem costura ---- */
	--ws-side-bg: #101724;
	--ws-side-hover: #1A2434;
	--ws-side-active: #1E2A3D;
	--ws-side-text: #9BA6B7;
	--ws-side-text-active: #FFFFFF;
	--ws-side-section: #5D6879;
	--ws-side-border: rgba(255, 255, 255, .06);

	/* ---- Forma ---- */
	--ws-radius: 6px;
	--ws-radius-lg: 10px;
	--ws-shadow-sm: 0 1px 2px rgba(22, 27, 34, .06);
	--ws-shadow: 0 2px 8px rgba(22, 27, 34, .08);

	--ws-t: .15s ease;
}

/* ==========================================================================
   1. SIDEBAR
   ========================================================================== */

.aside {
	background-color: var(--ws-side-bg);
	box-shadow: none;
}

/* --- Faixa da marca ---------------------------------------------------
   O dark-brand.css pintava .brand de branco com "border-bottom: 2px solid
   #dfe2e8", criando uma costura horizontal entre o logo e o menu. Unificamos
   com o fundo da sidebar. O @media espelha o do dark-brand.css para vencer
   na mesma especificidade. */
@media (min-width: 992px) {
	.brand {
		background-color: var(--ws-side-bg);
		border-bottom: 1px solid var(--ws-side-border);
		box-shadow: none;
	}

	.brand .btn i,
	.brand .btn .svg-icon svg g [fill] {
		color: var(--ws-side-text);
		fill: var(--ws-side-text);
	}

	.brand .btn:hover i,
	.brand .btn.active i,
	.brand .btn:hover .svg-icon svg g [fill],
	.brand .btn.active .svg-icon svg g [fill] {
		color: var(--ws-side-text-active);
		fill: var(--ws-side-text-active);
	}
}

/* Logo branco. So o logo padrao do WebSIS leva o filtro — o logo do cliente
   (LOGOCLIENTE=1) e colorido e seria destruido por ele. Ver menu_lateral.blade.php. */
.brand .brand-logo img.logo-padrao,
#kt_header_mobile img.logo-padrao {
	filter: brightness(0) invert(1);
}

/* --- Itens de menu ----------------------------------------------------
   IMPORTANTE: os seletores abaixo sao copiados LITERALMENTE do dark-aside.css.
   Aquele arquivo usa cadeias longas — o hover chega a 0,9,0 de especificidade
   por causa dos quatro :not() encadeados. Espelhar o seletor e vencer pela
   ordem da cascata e mais previsivel do que empilhar !important. Se um dia o
   skin mudar, estas regras param de casar e o verde volta: e o sinal de que
   precisam ser re-sincronizadas. */

.aside-menu {
	background-color: transparent;
}

/* Estado padrao */
.aside-menu .menu-nav > .menu-item > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item > .menu-link .menu-text {
	color: var(--ws-side-text);
	font-weight: 500;
	transition: color var(--ws-t);
}

.aside-menu .menu-nav > .menu-item > .menu-link {
	transition: background-color var(--ws-t);
}

/* Os icones agora sao de traço com stroke="currentColor" (ver
   App\Helpers\Menu::getIcone), entao basta definir `color` no .menu-icon —
   nao e mais preciso caçar [fill] dentro do <g> do SVG. */
.aside-menu .menu-nav > .menu-item > .menu-link .menu-icon,
.aside-menu .menu-nav > .menu-item > .menu-heading .menu-icon {
	color: var(--ws-side-text);
	transition: color var(--ws-t);
}

.aside-menu .menu-nav .menu-icon svg {
	width: 21px;
	height: 21px;
	vertical-align: middle;
}

/* Hover — o seletor original tem quatro :not() e nao pode ser encurtado. */
.aside-menu .menu-nav > .menu-item:not(.menu-item-parent):not(.menu-item-open):not(.menu-item-here):not(.menu-item-active):hover > .menu-heading,
.aside-menu .menu-nav > .menu-item:not(.menu-item-parent):not(.menu-item-open):not(.menu-item-here):not(.menu-item-active):hover > .menu-link {
	background-color: var(--ws-side-hover);
}

/* Aberto (submenu expandido) */
.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-heading,
.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-link {
	background-color: var(--ws-side-hover);
}

.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-link .menu-text {
	color: var(--ws-side-text-active);
}

.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-heading .menu-icon,
.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-link .menu-icon {
	color: var(--ws-side-text-active);
}

.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-heading .menu-arrow,
.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-link .menu-arrow {
	color: var(--ws-side-text-active);
}

/* "here" = ancestral da rota atual. O skin pintava igual ao ativo, o que fazia
   dois itens parecerem selecionados ao mesmo tempo. Agora e so um realce. */
.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-heading,
.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-link {
	background-color: var(--ws-side-hover);
}

.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-link .menu-text {
	color: var(--ws-side-text-active);
}

.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-heading .menu-icon,
.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-link .menu-icon {
	color: var(--ws-side-text);
}

.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-heading .menu-arrow,
.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-link .menu-arrow {
	color: var(--ws-side-text-active);
}

/* Ativo — era uma barra verde-oliva solida ocupando o item inteiro. Agora
   fundo sutil + indicador de 3px: marca a posicao sem competir com a tela. */
.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-heading,
.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-link {
	background-color: var(--ws-side-active);
	position: relative;
}

.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-link::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0;
	bottom: 0;
	width: 3px;
	background-color: var(--ws-primary);
}

.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-link .menu-text {
	color: var(--ws-side-text-active);
	font-weight: 600;
}

.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-heading .menu-icon,
.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-link .menu-icon {
	color: var(--ws-primary);
}

/* Bullets: o skin usava #3699ff em todos os estados. */
.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-link .menu-bullet.menu-bullet-dot > span,
.aside-menu .menu-nav > .menu-item.menu-item-open > .menu-link .menu-bullet.menu-bullet-line > span,
.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-link .menu-bullet.menu-bullet-dot > span,
.aside-menu .menu-nav > .menu-item.menu-item-here > .menu-link .menu-bullet.menu-bullet-line > span,
.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-link .menu-bullet.menu-bullet-dot > span,
.aside-menu .menu-nav > .menu-item.menu-item-active > .menu-link .menu-bullet.menu-bullet-line > span {
	background-color: var(--ws-primary);
}

/* --- Submenu ----------------------------------------------------------
   Aqui a cadeia do skin tem um nivel a mais (>.menu-item .menu-submenu
   .menu-item), entao os seletores precisam acompanhar. */
.aside-menu .menu-nav > .menu-item .menu-submenu {
	background-color: rgba(0, 0, 0, .16);
}

.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item > .menu-link .menu-text {
	color: var(--ws-side-text);
	font-weight: 400;
}

.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item:not(.menu-item-parent):not(.menu-item-open):not(.menu-item-here):not(.menu-item-active):hover > .menu-heading,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item:not(.menu-item-parent):not(.menu-item-open):not(.menu-item-here):not(.menu-item-active):hover > .menu-link {
	background-color: var(--ws-side-hover);
}

.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-open > .menu-heading,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-open > .menu-link,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-here > .menu-heading,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-here > .menu-link {
	background-color: var(--ws-side-hover);
}

/* O skin adicionava margin-left:10px so no ativo do submenu, deslocando o item
   em relacao aos irmaos. Trocamos por indicador na borda, sem deslocar. */
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-active > .menu-heading,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-active > .menu-link {
	background-color: var(--ws-side-active);
	margin-left: 0;
	position: relative;
}

.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-active > .menu-link::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0;
	bottom: 0;
	width: 3px;
	background-color: var(--ws-primary);
}

.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-active > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-active > .menu-link .menu-text {
	color: var(--ws-side-text-active);
	font-weight: 600;
}

.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-open > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-open > .menu-link .menu-text,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-here > .menu-heading .menu-text,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-here > .menu-link .menu-text {
	color: var(--ws-side-text-active);
}

/* Bullets do submenu */
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item > .menu-link .menu-bullet.menu-bullet-dot > span,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item > .menu-link .menu-bullet.menu-bullet-line > span {
	background-color: var(--ws-n-500);
}

.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-active > .menu-link .menu-bullet.menu-bullet-dot > span,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-active > .menu-link .menu-bullet.menu-bullet-line > span,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-open > .menu-link .menu-bullet.menu-bullet-dot > span,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-here > .menu-link .menu-bullet.menu-bullet-dot > span {
	background-color: var(--ws-primary);
}

/* Seta do submenu: o skin usava #000000, invisivel no fundo escuro. */
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item > .menu-heading .menu-arrow,
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item > .menu-link .menu-arrow {
	color: var(--ws-side-text);
}

/* Cabecalho de secao dentro do submenu (menu-item-parent) */
.aside-menu .menu-nav > .menu-item .menu-submenu .menu-item.menu-item-parent > .menu-link .menu-text {
	color: var(--ws-side-section);
	text-transform: uppercase;
	font-size: 12px;
	letter-spacing: .04em;
}

/* --- Foco de teclado: nao existia. Sem isto, navegar por Tab e as cegas. -- */
.aside-menu .menu-nav .menu-link:focus-visible,
.brand .btn:focus-visible,
.header .menu-link:focus-visible {
	outline: 2px solid var(--ws-primary);
	outline-offset: -2px;
}

/* --- Scrollbar do menu -------------------------------------------------
   As duas regras .ps__rail-y abaixo so valem quando o PerfectScrollbar do
   Metronic esta inicializado em .aside-menu. Ele NAO esta: o wrapper usa
   rolagem nativa, entao quem aparecia era a barra padrao do sistema -- cinza
   clara, com setas, 15px de largura -- cravada dentro da sidebar escura e
   comendo espaco do menu (265px de aside viravam 250px uteis).
   Estilizamos a nativa para o tema escuro e mantemos as regras do PS caso
   ele volte a ser inicializado. */
/* --- Altura do wrapper, e por que ela e zero ----------------------------
   O menu nao rolava: os ultimos grupos ficavam abaixo da dobra sem como
   alcanca-los. Medido numa janela de 1052px, o aside tinha 1006px e este
   wrapper, 1208px -- maior que o proprio aside.

   A causa e o .flex-column-fluid do Metronic, que e `flex: 1 0 auto`. Com
   flex-basis auto a altura vem do conteudo, e com flex-shrink 0 o item nao
   encolhe para caber: o wrapper acompanha o tamanho do menu, nunca fica menor
   que a tela, e o overflow-y nao tem o que rolar.

   `height: 0` zera a base. Ai o flex-grow: 1 distribui o espaco que sobra
   depois da marca, o wrapper para exatamente na altura disponivel e o overflow
   passa a valer -- em qualquer altura de janela.

   Isto ja foi removido uma vez por parecer inofensivo (estava inline na view,
   como height: 0px). Nao e. */
#kt_aside_menu_wrapper {
	height: 0;
	overflow-y: auto;
	scrollbar-width: thin;
	scrollbar-color: rgba(255, 255, 255, .22) transparent;
}

#kt_aside_menu_wrapper::-webkit-scrollbar {
	width: 6px;
}

#kt_aside_menu_wrapper::-webkit-scrollbar-track {
	background: transparent;
}

#kt_aside_menu_wrapper::-webkit-scrollbar-thumb {
	background-color: rgba(255, 255, 255, .22);
	border-radius: 3px;
}

#kt_aside_menu_wrapper::-webkit-scrollbar-thumb:hover {
	background-color: rgba(255, 255, 255, .35);
}

.aside .aside-menu.ps > .ps__rail-y > .ps__thumb-y {
	background-color: rgba(255, 255, 255, .18);
}

.aside .aside-menu.ps > .ps__rail-y:hover > .ps__thumb-y {
	background-color: rgba(255, 255, 255, .3);
}

/* ==========================================================================
   2. HEADER
   ========================================================================== */

.header {
	background-color: var(--ws-n-0);
	box-shadow: var(--ws-shadow-sm);
	border-bottom: 1px solid var(--ws-n-200);
	/* Centralizacao vertical e gutter lateral vinham de .brand, que o #kt_header
	   carregava indevidamente (ver comentario no menu_lateral.blade.php). Com a
	   classe removida do header, as duas propriedades passam a ser declaradas
	   aqui, que e o lugar delas. */
	align-items: center;
	padding: 0 25px;
}

/* Abaixo de 992px quem atende e o #kt_header_mobile; o header desktop tem de
   sumir. Isso tambem so acontecia por tabela, via .brand{display:none} do
   Metronic. O style.bundle.css nao tem nenhuma regra de display para .header
   fora do @media (min-width: 992px), entao sem esta declaracao o header
   desktop reapareceria empilhado sobre o mobile. */
@media (max-width: 991.98px) {
	.header {
		display: none;
	}
}

/* O header do Metronic e um flex container com um bloco a esquerda e o
   .topbar a direita; sem conteudo no meio, tudo ficava colado nas pontas. */
.header .container-fluid.div-topo {
	align-items: center;
}

/* --- Empresa ativa (esquerda) ---------------------------------------- */
.header .menu-nav {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.ws-header-empresa > a {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	padding: 6px 12px 6px 10px;
	border-radius: var(--ws-radius);
	color: var(--ws-n-700);
	font-size: 14px;
	font-weight: 600;
	line-height: 1.2;
	text-decoration: none;
	border: 1px solid transparent;
	transition: background-color var(--ws-t), border-color var(--ws-t), color var(--ws-t);
}

.ws-header-empresa > a svg {
	color: var(--ws-n-400);
	flex-shrink: 0;
	transition: color var(--ws-t);
}

.ws-header-empresa > a:hover {
	background-color: var(--ws-n-50);
	border-color: var(--ws-n-200);
	color: var(--ws-n-900);
}

.ws-header-empresa > a:hover svg {
	color: var(--ws-primary);
}

/* Razao social costuma ser longa; corta em vez de empurrar o layout. */
.ws-header-empresa > a span {
	max-width: 34ch;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* Badges contextuais que dividem a barra (Upgrade, Assinar contrato) */
.header .menu-nav .label.label-inline {
	border-radius: var(--ws-radius);
	font-weight: 600;
	font-size: 13px;
}

/* --- Bloco do usuario (direita) --------------------------------------- */
.ws-user {
	display: flex;
	align-items: center;
	gap: 10px;
	padding-left: 14px;
	margin-left: 4px;
	border-left: 1px solid var(--ws-n-200);
}

.ws-user-avatar {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	border-radius: 50%;
	background-color: var(--ws-primary-50);
	color: var(--ws-primary-700);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .02em;
	flex-shrink: 0;
	user-select: none;
}

.ws-user-nome {
	color: var(--ws-n-700);
	font-size: 14px;
	font-weight: 600;
	line-height: 1.2;
	max-width: 18ch;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* Sair: acao secundaria, nao destrutiva. Era btn-danger vermelho.
   Fica neutro e so assume o vermelho no hover, como confirmacao visual. */
.ws-sair {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: var(--ws-radius);
	color: var(--ws-n-500);
	background-color: transparent;
	transition: background-color var(--ws-t), color var(--ws-t);
}

.ws-sair:hover {
	background-color: var(--ws-danger-50);
	color: var(--ws-danger);
}

.ws-sair:focus-visible {
	outline: 2px solid var(--ws-primary);
	outline-offset: 2px;
}

/* Em telas estreitas o nome sai e sobra avatar + sair. */
@media (max-width: 1199.98px) {
	.ws-user-nome {
		display: none;
	}

	.ws-header-empresa > a span {
		max-width: 20ch;
	}
}

/* --- Icones do topbar (notificacoes) ---------------------------------- */
.header .btn.btn-icon i,
.header .btn.btn-icon .svg-icon svg g [fill] {
	color: var(--ws-n-500);
	fill: var(--ws-n-500);
	transition: color var(--ws-t), fill var(--ws-t);
}

.header .btn.btn-icon:hover i,
.header .btn.btn-icon:hover .svg-icon svg g [fill] {
	color: var(--ws-primary);
	fill: var(--ws-primary);
}

/* --- Header mobile ----------------------------------------------------
   Estava em #1a1a27, cor que nao aparecia em nenhum outro lugar do sistema. */
@media (max-width: 991.98px) {
	.header-mobile {
		background-color: var(--ws-side-bg);
		box-shadow: var(--ws-shadow-sm);
	}

	.header-mobile .burger-icon span,
	.header-mobile .burger-icon span::after,
	.header-mobile .burger-icon span::before {
		background-color: var(--ws-side-text);
	}

	.header-mobile .burger-icon:hover span,
	.header-mobile .burger-icon:hover span::after,
	.header-mobile .burger-icon:hover span::before,
	.header-mobile .burger-icon-active span,
	.header-mobile .burger-icon-active span::after,
	.header-mobile .burger-icon-active span::before {
		background-color: var(--ws-primary);
	}

	.header-mobile .btn i,
	.header-mobile .btn .svg-icon svg g [fill] {
		color: var(--ws-side-text);
		fill: var(--ws-side-text);
	}

	.header-mobile .btn:hover i,
	.header-mobile .btn.active i,
	.header-mobile .btn:hover .svg-icon svg g [fill],
	.header-mobile .btn.active .svg-icon svg g [fill] {
		color: var(--ws-side-text-active);
		fill: var(--ws-side-text-active);
	}
}

/* ==========================================================================
   3. ESTADO RECOLHIDO (aside-minimize)
   ========================================================================== */

.aside-minimize .aside-menu .menu-nav > .menu-item.menu-item-active > .menu-link::before {
	width: 3px;
}

.aside-minimize .brand .brand-logo img.logo-padrao {
	max-width: 42px;
}

/* ==========================================================================
   4. LISTAGENS
   ========================================================================== */

/* --- Cabecalho da tabela ---------------------------------------------
   Era uppercase com letter-spacing largo e fonte minuscula: praticamente
   ilegivel. O .datatable-* do Metronic e markup estatico copiado a mao —
   nao ha lib de datatable por tras — entao estilizamos direto. */
.datatable .datatable-head .datatable-row,
.datatable-table thead .datatable-row {
	background-color: var(--ws-n-50);
	border-bottom: 1px solid var(--ws-n-200);
}

.datatable-table thead .datatable-cell > span {
	color: var(--ws-n-600);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .01em;
	text-transform: none;
}

/* --- Linhas ------------------------------------------------------------ */
.datatable-table tbody .datatable-row {
	border-bottom: 1px solid var(--ws-n-100);
	transition: background-color var(--ws-t);
}

.datatable-table tbody .datatable-row:hover {
	background-color: var(--ws-primary-50);
}

.datatable-table tbody .datatable-cell > span {
	color: var(--ws-n-700);
	font-size: 13px;
}

/* --- Coluna de acoes --------------------------------------------------- */
.ws-actions {
	display: inline-flex;
	align-items: center;
	gap: 2px;
}

.ws-action {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	border-radius: var(--ws-radius);
	background-color: transparent;
	color: var(--ws-n-500);
	font-size: 17px;
	line-height: 1;
	cursor: pointer;
	transition: background-color var(--ws-t), color var(--ws-t);
}

.ws-action:hover,
.ws-action:focus {
	background-color: var(--ws-n-100);
	color: var(--ws-primary);
	text-decoration: none;
}

.ws-action:focus-visible {
	outline: 2px solid var(--ws-primary);
	outline-offset: 1px;
}

.ws-actions-more.show .ws-action {
	background-color: var(--ws-n-100);
	color: var(--ws-primary);
}

/* Menu de overflow */
.ws-actions-menu {
	min-width: 208px;
	padding: 6px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius-lg);
	box-shadow: var(--ws-shadow);
}

.ws-actions-menu .dropdown-item {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 8px 10px;
	border-radius: var(--ws-radius);
	color: var(--ws-n-700);
	font-size: 14px;
	font-weight: 500;
}

.ws-actions-menu .dropdown-item i {
	width: 18px;
	color: var(--ws-n-400);
	font-size: 17px;
	text-align: center;
}

.ws-actions-menu .dropdown-item:hover,
.ws-actions-menu .dropdown-item:focus {
	background-color: var(--ws-n-50);
	color: var(--ws-n-900);
}

.ws-actions-menu .dropdown-item:hover i {
	color: var(--ws-primary);
}

.ws-actions-menu .dropdown-divider {
	margin: 6px 4px;
	border-top-color: var(--ws-n-200);
}

/* Unica acao colorida da linha: a destrutiva. */
.ws-actions-menu .dropdown-item.ws-action-destrutiva,
.ws-actions-menu .dropdown-item.ws-action-destrutiva i {
	color: var(--ws-danger);
}

.ws-actions-menu .dropdown-item.ws-action-destrutiva:hover {
	background-color: var(--ws-danger-50);
	color: var(--ws-danger);
}

/* --- Estado vazio ------------------------------------------------------ */

/* A linha do estado vazio nao centralizava. Motivo: o .datatable-table do
   Metronic e "display: block", e as linhas de dados carregam .datatable-row,
   que o skin define como "display: table; width: 100%". A linha do estado
   vazio e um <tr> sem classe, entao caia no "display: table-row" padrao e o
   navegador embrulhava ela numa tabela anonima que encolhe ate o conteudo:
   o <td colspan> ficava com a largura do texto (454px numa tabela de 1299px)
   e ancorado a esquerda. O bloco ate estava centralizado -- dentro da propria
   caixa encolhida, que por sua vez estava torta.
   Aqui a linha sem classe passa a se comportar como .datatable-row. Vale para
   as 107 listagens que usam <x-empty-state> dentro de <tr><td colspan>. */
.datatable-table > tbody > tr:not(.datatable-row) {
	display: table;
	width: 100%;
}

.datatable-table > tbody > tr:not(.datatable-row) > td {
	display: table-cell;
	width: 100%;
}

.ws-empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 4px;
	padding: 56px 24px;
	text-align: center;
}

.ws-empty-icone {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	margin-bottom: 8px;
	border-radius: 50%;
	background-color: var(--ws-n-100);
	color: var(--ws-n-400);
	font-size: 28px;
}

.ws-empty-titulo {
	margin: 0;
	color: var(--ws-n-800);
	font-size: 16px;
	font-weight: 600;
}

.ws-empty-desc {
	margin: 0;
	max-width: 46ch;
	color: var(--ws-n-500);
	font-size: 14px;
}

.ws-empty-acao {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	margin-top: 14px;
	padding: 9px 16px;
	border-radius: var(--ws-radius);
	background-color: var(--ws-primary);
	color: #fff;
	font-size: 14px;
	font-weight: 600;
	transition: background-color var(--ws-t);
}

.ws-empty-acao:hover {
	background-color: var(--ws-primary-600);
	color: #fff;
	text-decoration: none;
}

/* --- Barra de acoes em lote (ex.: /vendas) -----------------------------
   Substitui as duas linhas de 12 botoes coloridos que ficavam abaixo da
   tabela. Os botoes desabilitados continuam recebendo .disabled via nf.js. */
.ws-toolbar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
	padding: 14px 0 4px;
	border-top: 1px solid var(--ws-n-100);
	margin-top: 12px;
}

.ws-toolbar .btn {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	border-radius: var(--ws-radius);
	font-size: 14px;
	font-weight: 600;
	padding: 9px 15px;
}

.ws-toolbar .btn.btn-primary {
	background-color: var(--ws-primary);
	border-color: var(--ws-primary);
}

.ws-toolbar .btn.btn-primary:hover {
	background-color: var(--ws-primary-600);
	border-color: var(--ws-primary-600);
}

.ws-toolbar .btn.btn-light {
	background-color: var(--ws-n-0);
	border: 1px solid var(--ws-n-200);
	color: var(--ws-n-700);
}

.ws-toolbar .btn.btn-light:hover {
	background-color: var(--ws-n-50);
	border-color: var(--ws-n-300);
	color: var(--ws-n-900);
}

/* Desabilitado: o nf.js alterna a classe .disabled conforme o estado da nota. */
.ws-toolbar .btn.disabled,
.ws-toolbar .btn[disabled],
.ws-actions-menu .dropdown-item.disabled {
	opacity: .45;
	pointer-events: none;
}

.ws-toolbar-more .dropdown-menu {
	min-width: 248px;
}

/* --- Botao "Opções" e popup -------------------------------------------
   Substitui o dropdown, que era cortado pelo overflow dos ancestrais. */
.ws-opcoes-btn {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	height: 32px;
	padding: 0 11px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius);
	background-color: var(--ws-n-0);
	color: var(--ws-n-600);
	font-size: 13px;
	font-weight: 600;
	line-height: 1;
	white-space: nowrap;
	cursor: pointer;
	transition: background-color var(--ws-t), border-color var(--ws-t), color var(--ws-t);
}

.ws-opcoes-btn:hover {
	background-color: var(--ws-n-50);
	border-color: var(--ws-n-300);
	color: var(--ws-n-900);
}

.ws-opcoes-btn:focus-visible {
	outline: 2px solid var(--ws-primary);
	outline-offset: 1px;
}

.ws-opcoes-modal .modal-content {
	border: 0;
	border-radius: var(--ws-radius-lg);
	box-shadow: 0 12px 32px rgba(22, 27, 34, .18);
}

.ws-opcoes-modal .modal-header {
	align-items: center;
	padding: 16px 18px;
	border-bottom: 1px solid var(--ws-n-100);
}

.ws-opcoes-modal .modal-title {
	color: var(--ws-n-800);
	font-size: 16px;
	font-weight: 600;
}

.ws-opcoes-modal .close {
	padding: 0;
	margin: 0;
	color: var(--ws-n-500);
	font-size: 18px;
	opacity: 1;
	text-shadow: none;
}

.ws-opcoes-modal .close:hover {
	color: var(--ws-n-900);
}

.ws-opcoes-modal .modal-body {
	padding: 12px;
}

/* Nome do registro sobre o qual as opcoes agem — sem isso o popup nao diz
   em qual linha voce clicou. */
.ws-opcoes-alvo {
	margin: 2px 6px 10px;
	color: var(--ws-n-500);
	font-size: 13px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.ws-opcoes-lista {
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.ws-opcoes-item {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 11px 12px;
	border-radius: var(--ws-radius);
	color: var(--ws-n-700);
	font-size: 14px;
	font-weight: 500;
	text-decoration: none;
	transition: background-color var(--ws-t), color var(--ws-t);
}

.ws-opcoes-item i {
	width: 20px;
	color: var(--ws-n-400);
	font-size: 18px;
	text-align: center;
	transition: color var(--ws-t);
}

.ws-opcoes-item:hover {
	background-color: var(--ws-n-50);
	color: var(--ws-n-900);
	text-decoration: none;
}

.ws-opcoes-item:hover i {
	color: var(--ws-primary);
}

/* Unica opcao colorida: a destrutiva. */
.ws-opcoes-item-perigo,
.ws-opcoes-item-perigo i {
	color: var(--ws-danger);
}

.ws-opcoes-item-perigo:hover {
	background-color: var(--ws-danger-50);
	color: var(--ws-danger);
}

.ws-opcoes-item-perigo:hover i {
	color: var(--ws-danger);
}

/* --- Verde de criar/confirmar ------------------------------------------
   O fork do style.bundle.css renderiza .btn-success como rgb(0,66,100), um
   navy escuro que nao conversa com nada. Criar e confirmar sao acoes de
   criacao: verde semantico, distinto do primario de navegacao.

   O seletor comecou escopado em .card-body e .ws-toolbar-topo, e so pegava
   <a>. Nas telas de cadastro nao existe .card-body — a estrutura e
   .card-custom > .kt-section__body — e o Salvar e <button>. Resultado: o
   botao principal do formulario continuava navy. Por isso a regra vale para
   .btn-success em qualquer lugar, nas duas tags. */
.btn.btn-success,
a.btn.btn-success,
button.btn.btn-success {
	background-color: var(--ws-success);
	border-color: var(--ws-success);
	color: #fff;
	border-radius: var(--ws-radius);
	font-weight: 600;
	box-shadow: none;
}

.btn.btn-success:hover,
a.btn.btn-success:hover,
button.btn.btn-success:hover {
	background-color: #19794c;
	border-color: #19794c;
	color: #fff;
}

/* Barra do topo da listagem: titulo/contador a esquerda, cadastrar a direita. */
.ws-toolbar-topo {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 12px;
	margin-bottom: 14px;
}

.ws-toolbar-topo .ws-toolbar-topo-acoes {
	display: flex;
	align-items: center;
	gap: 8px;
}

/* A coluna de acoes e sempre a ultima e nao estica. */
.datatable-table thead .datatable-cell:last-child,
.datatable-table tbody .datatable-cell:last-child {
	text-align: right;
}

.datatable-table tbody .datatable-cell:last-child > span {
	display: inline-flex;
	justify-content: flex-end;
	overflow: visible;
}

.ws-toolbar-topo-titulo {
	margin: 0;
	color: var(--ws-n-900);
	font-size: 20px;
	font-weight: 600;
	line-height: 1.25;
}

.ws-toolbar-topo .btn {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 9px 16px;
	border-radius: var(--ws-radius);
	font-size: 14px;
	font-weight: 600;
}

.ws-form-footer .btn.btn-light,
.ws-toolbar-topo .btn.btn-light {
	background-color: var(--ws-n-0);
	border: 1px solid var(--ws-n-200);
	color: var(--ws-n-700);
}

.ws-form-footer .btn.btn-light:hover,
.ws-toolbar-topo .btn.btn-light:hover {
	background-color: var(--ws-n-50);
	border-color: var(--ws-n-300);
	color: var(--ws-n-900);
}

/* ==========================================================================
   5. TABELA — espaçamento e legibilidade
   --------------------------------------------------------------------------
   As regras do Metronic aqui sao longas (ate 0,7,1 de especificidade) e vem
   com um :first-child { padding-left: 0 } que colava a primeira coluna na
   borda do card. Repetimos a mesma cadeia em vez de usar !important.
   ========================================================================== */

/* Padding simetrico. O original era 9px 12px 9px 0 na primeira celula. */
.datatable.datatable-default > .datatable-table > .datatable-head .datatable-row > .datatable-cell,
.datatable.datatable-default > .datatable-table > .datatable-body .datatable-row > .datatable-cell {
	padding: 12px 14px;
	vertical-align: middle;
}

/* Respiro nas bordas do card, em vez de encostar. */
.datatable.datatable-default > .datatable-table > .datatable-head .datatable-row > .datatable-cell:first-child,
.datatable.datatable-default > .datatable-table > .datatable-body .datatable-row > .datatable-cell:first-child {
	padding-left: 20px;
}

.datatable.datatable-default > .datatable-table > .datatable-head .datatable-row > .datatable-cell:last-child,
.datatable.datatable-default > .datatable-table > .datatable-body .datatable-row > .datatable-cell:last-child {
	padding-right: 20px;
}

/* Cabeçalho: era 0.9rem, uppercase, letter-spacing 0.1rem e cor #B5B5C3 —
   texto esparramado e claro demais. O uppercase fica (o texto ja vem assim do
   blade), mas com espacamento e contraste utilizaveis. */
.datatable.datatable-default.datatable-head-custom > .datatable-table > .datatable-head .datatable-row > .datatable-cell > span,
.datatable.datatable-default.datatable-head-custom > .datatable-table > .datatable-foot .datatable-row > .datatable-cell > span {
	color: var(--ws-n-600);
	/* 1rem = 12px neste app (o Metronic redefine o html), entao valor
	   absoluto para nao depender dessa base. */
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	white-space: nowrap;
}

/* O span de cada celula tem width fixo inline (style="width: 250px") e
   overflow:hidden, mas SEM white-space:nowrap — por isso "UN. COMPRA/VENDA"
   quebrava no meio da palavra em vez de truncar. */
.datatable.datatable-default > .datatable-table > .datatable-head .datatable-row > .datatable-cell > span,
.datatable.datatable-default > .datatable-table > .datatable-body .datatable-row > .datatable-cell > span {
	white-space: nowrap;
	text-overflow: ellipsis;
	max-width: 100%;
}

/* A coluna de acoes nao trunca: o botao Opções precisa aparecer inteiro. */
.datatable.datatable-default > .datatable-table > .datatable-body .datatable-row > .datatable-cell:last-child > span {
	overflow: visible;
	width: auto !important;
}

/* A tabela tinha style="overflow: scroll" inline, o que gera barra horizontal
   mesmo sem necessidade. O wrapper cuida da rolagem quando ela e precisa. */
#kt_datatable.datatable > .datatable-table {
	overflow-x: auto;
	overflow-y: visible;
}

/* ==========================================================================
   6. FILTROS — collapse abaixo da barra de acoes
   ========================================================================== */

/* display:contents faz o botao e o painel virarem itens diretos do flex
 .ws-toolbar-topo. Sem isso o painel ficaria preso na largura do botao e nao
 conseguiria quebrar para a linha toda. */
.ws-filtro {
	display: contents;
}

.ws-filtro-abrir {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 9px 16px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius);
	background-color: var(--ws-n-0);
	color: var(--ws-n-700);
	font-size: 14px;
	font-weight: 600;
	cursor: pointer;
	transition: background-color var(--ws-t), border-color var(--ws-t), color var(--ws-t);
}

.ws-filtro-abrir:hover {
	background-color: var(--ws-n-50);
	border-color: var(--ws-n-300);
	color: var(--ws-n-900);
}

.ws-filtro-abrir:focus-visible {
	outline: 2px solid var(--ws-primary);
	outline-offset: 1px;
}

/* Com filtro aplicado o botao fica marcado, senao nao da para saber que a
   lista esta filtrada sem abrir o painel. */
.ws-filtro-abrir.ws-filtro-ativo {
	border-color: var(--ws-primary);
	color: var(--ws-primary-700);
	background-color: var(--ws-primary-50);
}

.ws-filtro-badge {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 20px;
	height: 20px;
	padding: 0 6px;
	border-radius: 10px;
	background-color: var(--ws-primary);
	color: #fff;
	font-size: 11px;
	font-weight: 700;
}

.ws-filtro-seta {
	font-size: 14px;
	color: var(--ws-n-400);
	transition: transform var(--ws-t);
}

.ws-filtro-abrir[aria-expanded="true"] .ws-filtro-seta {
	transform: rotate(180deg);
}

/* O painel ocupa a largura toda da listagem, nao a do botao — por isso sai do
   fluxo do .ws-toolbar-topo-acoes e vira uma faixa propria abaixo dele. */
.ws-filtro-painel {
	display: none;
	order: 99;
	width: 100%;
	margin-top: 14px;
}

.ws-filtro-painel.ws-aberto {
	display: block;
}

.ws-filtro-corpo {
	padding: 18px 18px 6px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius-lg);
	background-color: var(--ws-n-50);
}

.ws-filtro-corpo .col-form-label,
.ws-filtro-corpo label {
	color: var(--ws-n-600);
	font-size: 13px;
	font-weight: 600;
	margin-bottom: 4px;
	padding-bottom: 0;
}

.ws-filtro-corpo .form-control,
.ws-filtro-corpo .custom-select {
	height: 40px;
	border-color: var(--ws-n-200);
	border-radius: var(--ws-radius);
	font-size: 14px;
	background-color: var(--ws-n-0);
}

.ws-filtro-corpo .form-control:focus,
.ws-filtro-corpo .custom-select:focus {
	border-color: var(--ws-primary);
	box-shadow: 0 0 0 3px var(--ws-primary-50);
}

/* O botao de submit de cada tela vira a acao principal do painel. */
.ws-filtro-corpo button[type="submit"],
.ws-filtro-corpo .btn-light-primary {
	height: 40px;
	padding: 0 22px;
	border: 0;
	border-radius: var(--ws-radius);
	background-color: var(--ws-primary);
	color: #fff;
	font-size: 14px;
	font-weight: 600;
}

.ws-filtro-corpo button[type="submit"]:hover,
.ws-filtro-corpo .btn-light-primary:hover {
	background-color: var(--ws-primary-600);
	color: #fff;
}

.ws-filtro-limpar {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin: 4px 0 12px;
	color: var(--ws-n-600);
	font-size: 13px;
	font-weight: 600;
}

.ws-filtro-limpar:hover {
	color: var(--ws-danger);
	text-decoration: none;
}
/* ==========================================================================
   7. INDICADORES DA LISTAGEM
   ========================================================================== */

.ws-meta {
	margin: 0 0 16px;
}

.ws-meta-itens {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.ws-meta-item {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 132px;
	padding: 10px 14px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius);
	background-color: var(--ws-n-50);
}

.ws-meta-label {
	color: var(--ws-n-500);
	font-size: 12px;
	font-weight: 500;
	line-height: 1.3;
}

.ws-meta-valor {
	color: var(--ws-n-900);
	font-size: 17px;
	font-weight: 700;
	line-height: 1.2;
	font-variant-numeric: tabular-nums;
}

.ws-meta-legenda {
	display: flex;
	align-items: center;
	gap: 7px;
	margin: 10px 0 0;
	color: var(--ws-n-500);
	font-size: 13px;
}

.ws-meta-legenda i {
	font-size: 16px;
	color: var(--ws-n-400);
}

.ws-meta-legenda-aviso i {
	color: var(--ws-warning);
}

.ws-meta-legenda-ok i {
	color: var(--ws-success);
}

/* --- Alinhamento vertical da listagem ---------------------------------
   O wrapper que envolve indicadores e tabela carrega, em 171 arquivos, um
   style="margin-left: 10px; margin-right: 10px" INLINE. Resultado: a barra de
   acoes e o painel de filtro ficavam em L=57/R=699 enquanto a tabela ficava em
   L=67/R=689 — 10px de desalinhamento de cada lado, visivel como degrau.

   !important e inevitavel aqui: so ele vence estilo inline. A alternativa
   seria editar os 171 arquivos, com risco muito maior e nenhum ganho. */
#kt_user_profile_aside {
	margin-left: 0 !important;
	margin-right: 0 !important;
}

/* --- Coluna de acoes fixa a direita ------------------------------------
   A tabela de vendas tem 15 colunas e passa de 1.700px. Sem isto a coluna de
   acoes fica fora da area visivel e so aparece rolando ate o fim. */
.datatable-table thead .datatable-cell:last-child,
.datatable-table tbody .datatable-cell:last-child {
	position: sticky;
	right: 0;
	z-index: 2;
	background-color: var(--ws-n-0);
	box-shadow: -6px 0 10px -8px rgba(22, 27, 34, .35);
}

.datatable-table thead .datatable-cell:last-child {
	background-color: var(--ws-n-50);
	z-index: 3;
}

/* O hover da linha precisa alcancar a celula fixa, senao ela fica destacada
   em branco enquanto o resto da linha muda de cor. */
.datatable-table tbody .datatable-row:hover .datatable-cell:last-child {
	background-color: var(--ws-primary-50);
}

/* A celula do checkbox nao precisa de largura de coluna inteira. */
.datatable-table tbody td#checkbox p {
	margin: 0;
}

/* Switch dentro da barra de acoes (DEBUG na listagem de empresas). O switch do
   Metronic e um bloco; aqui precisa ficar em linha com os botoes ao lado. */
.ws-toolbar-switch {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	color: var(--ws-n-600);
	font-size: 12px;
	font-weight: 600;
	letter-spacing: .02em;
}

.ws-toolbar-switch .switch {
	margin: 0;
}

/* Texto informativo dentro da barra de acoes (ex.: "Selecionado: R$ 0,00" em
   contas a pagar/receber, exibido so com a selecao multipla ligada). */
.ws-toolbar-info {
	display: inline-flex;
	align-items: center;
	margin-left: 4px;
	color: var(--ws-n-600);
	font-size: 13px;
}

.ws-toolbar-info strong {
	margin-left: 5px;
	color: var(--ws-n-900);
}

/* Blocos por tipo de documento na tela de enviar XML ao escritorio. Sao sete
   secoes na mesma pagina; a linha separa uma da outra sem precisar de card. */
.ws-xml-bloco + .ws-xml-bloco {
	margin-top: 28px;
	padding-top: 24px;
	border-top: 1px solid var(--ws-n-200);
}

/* ==========================================================================
   FORMULARIOS
   ========================================================================== */

/* Rodape de formulario: os botoes ficam a direita, na mesma ordem de leitura
   das listagens (acao secundaria em cinza, principal em verde). Antes era uma
   .row com um col-xl-2 VAZIO so para empurrar, e largura por style inline. */
.ws-form-footer {
	display: flex;
	justify-content: flex-end;
	gap: 10px;
	/* A borda encostava no ultimo campo do formulario: sem margem, a linha nascia
	   colada no input de cima. O respiro tem que vir ANTES da borda (margin), nao
	   depois (padding) -- o padding so afastava os botoes da linha. */
	margin-top: 24px;
	padding-top: 20px;
	border-top: 1px solid var(--ws-n-200);
}

.ws-form-footer .btn {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	min-width: 130px;
	justify-content: center;
}

/* Marcador de campo obrigatorio. Antes cada tela escrevia " *" no texto do
   proprio label, entao o asterisco herdava peso e cor do rotulo e sumia. */
.ws-campo-obrigatorio {
	color: var(--ws-danger);
	font-weight: 700;
}

/* O rotulo do campo. O .col-form-label do Bootstrap traz padding vertical
   pensado para formulario horizontal; aqui os campos sao empilhados. */
.form-group.validated > .col-form-label {
	display: block;
	margin-bottom: 4px;
	padding-bottom: 0;
	color: var(--ws-n-700);
	font-size: 13px;
	font-weight: 600;
}

/* Painel de graficos das listagens de contas. Dois graficos lado a lado no
   desktop, empilhados no celular. A altura e fixa porque o Google Charts
   precisa de um elemento com dimensao para desenhar. */
.ws-graficos {
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
	margin-bottom: 16px;
}

.ws-graficos .ws-grafico {
	flex: 1 1 320px;
	min-width: 280px;
	height: 300px;
}


/* ==========================================================================
   ABAS (wizard do Metronic)
   ==========================================================================

   O markup "wizard wizard-3" aparece 45 vezes em 33 telas. O desenho original
   era uma barra de progresso: cada passo esticava para ocupar uma fracao da
   largura (326px, 407px... conforme o tamanho do texto), com uma barra de 4px
   embaixo e o passo ativo em verde-limao #97b924 -- uma cor que nao existe na
   paleta do sistema.

   Aqui vira aba de verdade: rotulo com largura do proprio texto, sublinhado de
   2px no ativo, cinza nos demais, e uma linha continua separando as abas do
   conteudo. Como e só CSS, as 33 telas mudam juntas, sem editar markup.

   Os !important sao necessarios: as classes px-8/py-8/px-lg-15/py-lg-3 estao
   escritas no HTML das 33 telas e utilitarios de espacamento do Bootstrap ja
   vem com !important. Sem isso o padding de 48px continuaria empurrando as abas.
   ========================================================================== */

.wizard.wizard-3 .wizard-nav {
	border-bottom: 1px solid var(--ws-n-200);
	margin-bottom: 24px;
}

.wizard.wizard-3 .wizard-nav .wizard-steps {
	display: flex;
	flex-wrap: wrap;
	gap: 2px;
	padding: 0 !important;
}

/* Sem o flex-grow do original, a aba tem a largura do proprio rotulo. */
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step {
	flex: 0 0 auto;
	width: auto;
	padding: 0;
	background-color: transparent;
}

.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label {
	padding: 0;
	margin: 0;
}

/* O <span> dentro do <h3> tem font-size proprio (26px) no skin do Metronic --
   sem repetir a tipografia aqui, o rotulo continuava enorme e a aba ficava com
   largura de 184px para a palavra "Transporte". */
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label .wizard-title,
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label .wizard-title span {
	color: var(--ws-n-500);
	font-size: 14px;
	font-weight: 600;
	line-height: 1.4;
}

.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label .wizard-title span {
	margin: 0;
}

.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label .wizard-title {
	margin: 0;
	padding: 11px 16px;
	border-bottom: 2px solid transparent;
	/* -1px encaixa o sublinhado da aba em cima da linha do .wizard-nav. */
	margin-bottom: -1px;
	cursor: pointer;
	transition: color var(--ws-t), border-color var(--ws-t);
}

.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label .wizard-title:hover,
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label .wizard-title:hover span {
	color: var(--ws-n-800);
}

/* Aba aberta */
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step[data-wizard-state="current"] .wizard-label .wizard-title,
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step[data-wizard-state="current"] .wizard-label .wizard-title span {
	color: var(--ws-primary);
	border-bottom-color: var(--ws-primary);
}

/* Passo ja preenchido: mais escuro que os pendentes, sem sublinhado. */
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step[data-wizard-state="done"] .wizard-label .wizard-title,
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step[data-wizard-state="done"] .wizard-label .wizard-title span {
	color: var(--ws-n-700);
}

.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-label .wizard-title:focus-visible {
	outline: 2px solid var(--ws-primary);
	outline-offset: -2px;
}

/* A barra de 4px do original nao existe mais: quem marca a aba ativa agora e o
   proprio sublinhado do rotulo. */
.wizard.wizard-3 .wizard-nav .wizard-steps .wizard-step .wizard-bar {
	display: none;
}


/* ==========================================================================
   ALERTAS (SweetAlert)
   --------------------------------------------------------------------------
   O sistema tem 1238 chamadas de swal(). A biblioteca injeta o proprio CSS a
   partir do bundle JS e nada sobrevoava isso, entao todo alerta saia com o
   tema de fabrica: botao azul-bebe #7cd1f9, titulo de 27px e o icone de aviso
   pulsando sem parar.

   Como sao classes fixas (.swal-modal, .swal-button, .swal-icon--*), da para
   alinhar as 1238 de uma vez daqui, sem tocar em nenhuma chamada. Mesma
   alavanca das abas.
   ========================================================================== */

.swal-overlay {
	background-color: rgba(22, 27, 34, .55);
}

.swal-modal {
	border-radius: var(--ws-radius-lg);
	box-shadow: 0 12px 40px rgba(22, 27, 34, .18);
	padding-bottom: 4px;
}

/* 27px competia com o titulo da propria tela por tras do overlay. Usa a mesma
   medida do .ws-toolbar-topo-titulo. */
.swal-title {
	color: var(--ws-n-900);
	font-size: 20px;
	font-weight: 600;
	line-height: 1.3;
	padding: 20px 24px 0;
}

.swal-title:first-child {
	margin-top: 18px;
}

.swal-text {
	color: var(--ws-n-600);
	font-size: 14.5px;
	line-height: 1.55;
	padding: 0 24px;
}

.swal-footer {
	display: flex;
	justify-content: flex-end;
	gap: 8px;
	padding: 20px 24px 20px;
	margin-top: 20px;
}

/* O .swal-button-container tem margin:5px proprio; o gap do flex ja cuida do
   espaco, e as duas medidas juntas deixavam o vao irregular. */
.swal-footer .swal-button-container {
	margin: 0;
}

/* -------- Botoes: os mesmos tres niveis do resto do sistema -------- */

/* Base = primario. E o que a lib da para confirm e para qualquer chave
   customizada, que e a semantica certa: quem nao e cancelar nem perigo e acao. */
.swal-button {
	background-color: var(--ws-primary);
	border: 1px solid var(--ws-primary);
	color: #fff;
	border-radius: var(--ws-radius);
	font-size: 14px;
	font-weight: 600;
	padding: 9px 18px;
	transition: background-color var(--ws-t), border-color var(--ws-t);
}

.swal-button:not([disabled]):hover {
	background-color: var(--ws-primary-600);
	border-color: var(--ws-primary-600);
}

.swal-button:active {
	background-color: var(--ws-primary-700);
	border-color: var(--ws-primary-700);
}

.swal-button:focus {
	outline: none;
	box-shadow: 0 0 0 3px var(--ws-primary-100);
}

/* Secundario: sair sem fazer nada nunca foi acao colorida. */
.swal-button--cancel,
.swal-button--cancel:not([disabled]):hover {
	color: var(--ws-n-700);
}

.swal-button--cancel {
	background-color: var(--ws-n-0);
	border: 1px solid var(--ws-n-200);
}

.swal-button--cancel:not([disabled]):hover {
	background-color: var(--ws-n-50);
	border-color: var(--ws-n-300);
}

.swal-button--cancel:focus {
	box-shadow: 0 0 0 3px var(--ws-n-100);
}

/* Destrutivo. */
.swal-button--danger {
	background-color: var(--ws-danger);
	border-color: var(--ws-danger);
}

.swal-button--danger:not([disabled]):hover,
.swal-button--danger:active {
	background-color: #a72c23;
	border-color: #a72c23;
}

.swal-button--danger:focus {
	box-shadow: 0 0 0 3px var(--ws-danger-50);
}

/* -------- Icones -------- */

/* As cores de fabrica (#f8bb86, #a5dc86, #f27474) sao pasteis de outra paleta.
   Passam a ser os semanticos do tema, os mesmos dos labels e badges. */
.swal-icon--warning {
	border-color: var(--ws-warning);
	/* A lib deixa esse icone pulsando em loop infinito. Um aviso que nao para de
	   se mexer rouba a atencao do texto que ele deveria estar reforcando. */
	animation: none;
	-webkit-animation: none;
}

.swal-icon--warning__body,
.swal-icon--warning__dot {
	background-color: var(--ws-warning);
}

.swal-icon--success {
	border-color: var(--ws-success);
}

.swal-icon--success__line {
	background-color: var(--ws-success);
}

/* O anel externo do "ok" tem cor propria (um verde pastel a 20%), separada da
   borda do icone — sem isto ele ficava destoando do check por dentro. */
.swal-icon--success__ring {
	border-color: rgba(30, 142, 90, .2);
}

.swal-icon--error {
	border-color: var(--ws-danger);
}

.swal-icon--error__line {
	background-color: var(--ws-danger);
}

.swal-icon--info {
	border-color: var(--ws-info);
}

.swal-icon--info:after,
.swal-icon--info:before {
	background-color: var(--ws-info);
}


/* ==========================================================================
   DASHBOARD
   --------------------------------------------------------------------------
   Os seis indicadores eram blocos chapados de seis cores saturadas (azul,
   quase-preto, dois verdes iguais, roxo, vermelho) sem nada em comum: a cor
   nao dizia o que o numero era. "Vendas" e "Contas a receber" usavam o MESMO
   verde para coisas diferentes, e o rotulo vinha grudado no valor numa frase
   so ("Clientes: 2"), o que obrigou dois cartoes a baixar a fonte para 10px e
   11px inline para o texto caber.

   Agora todos os cartoes sao iguais — fundo branco, rotulo em cima, numero
   embaixo — e a cor sobrou so para o par financeiro, onde ela significa algo:
   verde entra, vermelho sai.
   ========================================================================== */

.ws-kpi {
	display: block;
	height: 100%;
	padding: 18px 20px;
	background-color: var(--ws-n-0);
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius-lg);
	transition: border-color var(--ws-t), box-shadow var(--ws-t);
}

/* Quatro dos seis cartoes navegam; os outros dois nao. O ponteiro e a sombra
   so aparecem em quem realmente leva a algum lugar. */
a.ws-kpi:hover,
.ws-kpi--clicavel:hover {
	border-color: var(--ws-n-300);
	box-shadow: var(--ws-shadow);
	text-decoration: none;
}

.ws-kpi--clicavel {
	cursor: pointer;
}

.ws-kpi__ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	margin-bottom: 14px;
	border-radius: var(--ws-radius);
	background-color: var(--ws-n-100);
	color: var(--ws-n-600);
	font-size: 19px;
}

.ws-kpi__label {
	display: block;
	margin-bottom: 4px;
	color: var(--ws-n-500);
	font-size: 11.5px;
	font-weight: 600;
	letter-spacing: .04em;
	text-transform: uppercase;
	line-height: 1.3;
}

.ws-kpi__valor {
	display: block;
	color: var(--ws-n-900);
	font-size: 24px;
	font-weight: 600;
	line-height: 1.2;
	/* Valores longos em dinheiro nao podem empurrar a largura do cartao. */
	overflow-wrap: anywhere;
}

/* Unico lugar em que a cor carrega significado: dinheiro que entra x que sai. */
.ws-kpi--entra .ws-kpi__ico {
	background-color: var(--ws-success-50);
	color: var(--ws-success);
}

.ws-kpi--sai .ws-kpi__ico {
	background-color: var(--ws-danger-50);
	color: var(--ws-danger);
}

/* -------- Seletor de periodo --------
   Eram cinco <a class="btn btn-clean"> soltos, e o "Tour" estava no meio deles
   pintado de verde — sem ser um periodo. Os quatro periodos viraram um controle
   segmentado (so um vale por vez, e da para ver qual) e o Tour saiu do grupo. */

.ws-periodo {
	display: inline-flex;
	align-items: center;
	gap: 2px;
	padding: 3px;
	background-color: var(--ws-n-100);
	border-radius: var(--ws-radius);
}

.ws-periodo > a {
	padding: 6px 14px;
	border-radius: 4px;
	color: var(--ws-n-600);
	font-size: 13px;
	font-weight: 600;
	line-height: 1.4;
	cursor: pointer;
	transition: background-color var(--ws-t), color var(--ws-t);
}

.ws-periodo > a:hover {
	color: var(--ws-n-800);
	text-decoration: none;
}

.ws-periodo > a.active {
	background-color: var(--ws-n-0);
	color: var(--ws-n-900);
	box-shadow: var(--ws-shadow-sm);
}

.ws-dash-barra {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 12px;
	margin-bottom: 18px;
}

/* O grafico tinha altura livre e esticava conforme a tela. Um teto deixa a
   pagina previsivel e evita a faixa enorme de espaco vazio quando nao ha venda. */
.ws-grafico-caixa {
	position: relative;
	min-height: 260px;
}


/* ==========================================================================
   ACOES DO HEADER
   --------------------------------------------------------------------------
   Eram tres botoes com tres tratamentos diferentes, todos herdados do
   Metronic: "Assinar contrato" em `label label-xl label-inline btn-success`
   (uma label com classe de botao junto, e um icone .text-danger dentro de um
   fundo verde), "Upgrade" em `label-light-success` — a pastilha verde-menta
   que nao existe em nenhum outro lugar do sistema — e "Video Ajuda" em
   `btn btn-light-info`.

   Aqui viram uma coisa so: chip de header, mesma altura e mesmo raio do
   seletor de empresa ao lado. A cor volta a significar urgencia: contrato
   pendente bloqueia a emissao, entao e o unico em tom de alerta.
   ========================================================================== */

.ws-header-acao > a {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	/* O seletor de empresa ao lado tem 32px (padding 6px + icone de 18px). O
	   icone daqui e menor, entao a altura vinha 2px abaixo e os dois nao
	   assentavam na mesma linha. */
	min-height: 32px;
	padding: 6px 12px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius);
	background-color: var(--ws-n-0);
	color: var(--ws-n-700);
	font-size: 13.5px;
	font-weight: 600;
	line-height: 1.2;
	white-space: nowrap;
	text-decoration: none;
	transition: background-color var(--ws-t), border-color var(--ws-t), color var(--ws-t);
}

.ws-header-acao > a:hover {
	background-color: var(--ws-n-50);
	border-color: var(--ws-n-300);
	color: var(--ws-n-900);
	text-decoration: none;
}

.ws-header-acao > a svg {
	flex-shrink: 0;
	color: var(--ws-n-400);
	transition: color var(--ws-t);
}

.ws-header-acao > a:hover svg { color: var(--ws-primary); }

/* Assinar contrato: sem ele a empresa nao emite. E o unico que grita. */
.ws-header-acao--urgente > a {
	background-color: var(--ws-warning-50);
	border-color: #E8D3A8;
	color: #7A5214;
}

.ws-header-acao--urgente > a svg { color: var(--ws-warning); }

.ws-header-acao--urgente > a:hover {
	background-color: #F7EBD4;
	border-color: var(--ws-warning);
	color: #5F3F0F;
}

.ws-header-acao--urgente > a:hover svg { color: var(--ws-warning); }

@media (max-width: 767px) {
	.ws-header-acao > a span { display: none; }
	.ws-header-acao > a { padding: 6px 9px; }
}


/* ==========================================================================
   BARRA DE ALERTA NO TOPO
   --------------------------------------------------------------------------
   O aviso de certificado a vencer era um swal no meio da tela, com tres botoes
   ("Ver depois", "Emitente", "Compre agora") — um modal bloqueando o trabalho
   para dar um recado que nao exige acao naquele segundo.

   Aqui vira faixa no topo: ocupa a largura toda, nao cobre nada e sai com um X.
   Como o header e o aside sao `position: fixed; top: 0`, os dois precisam
   descer a altura da faixa enquanto ela existe — dai a classe no <body> e a
   variavel de altura, que o JS remove ao fechar.
   ========================================================================== */

:root { --ws-alerta-h: 46px; }

.ws-alerta {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	/* Acima do aside (98) e do header (97). */
	z-index: 99;
	display: flex;
	align-items: center;
	gap: 12px;
	height: var(--ws-alerta-h);
	padding: 0 16px;
	background-color: var(--ws-danger);
	color: #fff;
	font-size: 14px;
}

.ws-alerta__ico {
	flex-shrink: 0;
	display: inline-flex;
	opacity: .92;
}

.ws-alerta__txt {
	flex: 1 1 auto;
	min-width: 0;
	font-weight: 600;
	/* Uma linha so: se quebrar, a altura muda e os deslocamentos do header e do
	   aside (que sao fixos) deixam de bater. */
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.ws-alerta__acoes {
	flex-shrink: 0;
	display: flex;
	align-items: center;
	gap: 8px;
}

.ws-alerta__acoes a {
	padding: 5px 12px;
	border: 1px solid rgba(255, 255, 255, .45);
	border-radius: var(--ws-radius);
	color: #fff;
	font-size: 13px;
	font-weight: 600;
	white-space: nowrap;
	text-decoration: none;
	transition: background-color var(--ws-t), border-color var(--ws-t);
}

.ws-alerta__acoes a:hover {
	background-color: rgba(255, 255, 255, .16);
	border-color: #fff;
	color: #fff;
	text-decoration: none;
}

.ws-alerta__fechar {
	flex-shrink: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	padding: 0;
	border: 0;
	border-radius: var(--ws-radius);
	background: transparent;
	color: #fff;
	opacity: .8;
	cursor: pointer;
	transition: background-color var(--ws-t), opacity var(--ws-t);
}

.ws-alerta__fechar:hover {
	background-color: rgba(255, 255, 255, .18);
	opacity: 1;
}

/* Enquanto a faixa existe, tudo que e fixo desce. */
body.ws-com-alerta .header.header-fixed { top: var(--ws-alerta-h); }
body.ws-com-alerta .aside { top: var(--ws-alerta-h); }
body.ws-com-alerta .wrapper { padding-top: calc(65px + var(--ws-alerta-h)); }
body.ws-com-alerta .header-mobile { top: var(--ws-alerta-h); }

@media (max-width: 991px) {
	/* Sem aside fixo aqui; o header mobile e que precisa do empurrao. */
	body.ws-com-alerta .wrapper { padding-top: var(--ws-alerta-h); }
}

@media (max-width: 767px) {
	/* Os botoes nao cabem junto com o texto; fica a mensagem e o X. O caminho
	   continua no menu (Configuracoes > Configurar emitente). */
	.ws-alerta__acoes { display: none; }
	.ws-alerta { font-size: 13px; padding: 0 10px; }
}


/* ==========================================================================
   GRADE DE PERMISSOES
   --------------------------------------------------------------------------
   Sao 17 grupos e mais de 120 itens. O layout anterior empilhava, para cada
   grupo, um titulo roxo e uma faixa de checkboxes em linha que quebrava na
   largura toda da tela — sem moldura, sem coluna, sem separacao. Achar um item
   exigia varrer a parede inteira, e nao dava para saber de qual grupo era uma
   caixa perdida no meio da terceira linha.

   Aqui cada grupo vira um painel com contorno: cabecalho com o nome e o
   "marcar todos", e os itens numa grade de colunas que acompanha a largura.
   ========================================================================== */

/* Colunas, nao grade.
   Os grupos tem de 2 a 16 itens, entao os paineis nunca vao ter a mesma
   altura. Numa grade isso da os dois piores resultados possiveis: com
   align-items stretch, o painel de 4 itens estica ate a altura do de 16 e fica
   com um vazio embaixo; com start, as linhas ficam irregulares e sobra buraco
   entre elas.

   Com multi-coluna os paineis fluem um sob o outro e o navegador equilibra a
   altura das colunas sozinho -- nada estica e nao sobra buraco. A leitura
   passa a ser de cima para baixo em cada coluna, que e a mesma do menu
   lateral de onde esses grupos vem. */
.ws-permissoes {
	column-count: 3;
	column-gap: 16px;
}

@media (max-width: 1400px) { .ws-permissoes { column-count: 2; } }
@media (max-width: 900px)  { .ws-permissoes { column-count: 1; } }

.ws-permissao-grupo {
	/* Sem isto o navegador quebra o painel no meio, deixando o cabecalho numa
	   coluna e metade dos itens na seguinte. */
	break-inside: avoid;
	-webkit-column-break-inside: avoid;
	page-break-inside: avoid;
	margin-bottom: 16px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius-lg);
	background-color: var(--ws-n-0);
	overflow: hidden;
}

.ws-permissao-grupo__topo {
	display: flex;
	align-items: center;
	gap: 9px;
	padding: 11px 14px;
	background-color: var(--ws-n-50);
	border-bottom: 1px solid var(--ws-n-200);
}

.ws-permissao-grupo__topo label {
	display: flex;
	align-items: center;
	gap: 9px;
	margin: 0;
	cursor: pointer;
	font-size: 14px;
	font-weight: 600;
	color: var(--ws-n-900);
}

.ws-permissao-grupo__conta {
	margin-left: auto;
	font-size: 12px;
	font-weight: 600;
	color: var(--ws-n-500);
	font-variant-numeric: tabular-nums;
}

.ws-permissao-grupo__itens {
	display: grid;
	/* Duas colunas quando cabe; uma so em painel estreito. */
	grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
	gap: 2px 14px;
	padding: 12px 14px 14px;
}

.ws-permissao-item {
	display: flex;
	align-items: center;
	gap: 9px;
	margin: 0;
	padding: 5px 0;
	cursor: pointer;
	font-size: 13.5px;
	line-height: 1.35;
	color: var(--ws-n-700);
}

.ws-permissao-item:hover { color: var(--ws-n-900); }

/* Caixa desenhada no lugar da nativa: a do sistema muda de tamanho e cor entre
   navegadores, e numa grade com 120 delas isso aparece. */
.ws-permissoes input[type="checkbox"] {
	appearance: none;
	-webkit-appearance: none;
	flex: none;
	width: 17px;
	height: 17px;
	margin: 0;
	border: 1px solid var(--ws-n-300);
	border-radius: 4px;
	background-color: var(--ws-n-0);
	cursor: pointer;
	transition: background-color var(--ws-t), border-color var(--ws-t);
}

.ws-permissoes input[type="checkbox"]:checked {
	background-color: var(--ws-primary);
	border-color: var(--ws-primary);
	/* O "v" e desenhado por gradiente para nao depender de fonte de icone. */
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5l3 3 6-6'/%3E%3C/svg%3E");
	background-size: 13px 13px;
	background-position: center;
	background-repeat: no-repeat;
}

.ws-permissoes input[type="checkbox"]:focus-visible {
	outline: none;
	box-shadow: 0 0 0 3px var(--ws-primary-100);
}


/* Linha de "rotulo: valor" com acao a direita — plano e contrato na tela da
   empresa. Antes eram <h3> com o valor dentro, o que dava peso de titulo a um
   texto que e conteudo, e os botoes ficavam soltos dentro do mesmo <h3>. */
.ws-dado {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	flex-wrap: wrap;
	padding: 14px 0;
	border-bottom: 1px solid var(--ws-n-100);
}

.ws-dado:last-child { border-bottom: 0; padding-bottom: 0; }

.ws-dado__rot {
	flex: none;
	width: 110px;
	color: var(--ws-n-500);
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .03em;
	padding-top: 3px;
}

.ws-dado__val {
	flex: 1 1 260px;
	min-width: 0;
	color: var(--ws-n-900);
	font-size: 14.5px;
	line-height: 1.5;
}

.ws-dado__acao {
	flex: none;
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
	margin-left: auto;
}

@media (max-width: 560px) {
	.ws-dado__rot { width: 100%; }
	.ws-dado__acao { margin-left: 0; }
}


/* ==========================================================================
   AJUDA DO CAMPO (o "i" ao lado do rotulo)
   --------------------------------------------------------------------------
   Eram 27 botoes assim:

       <label class="col-form-label">Email próprio</label>
       <button class="btn btn-light-info btn-sm btn-icon col-lg-6 col-sm-6" ...>

   O botao carregava CLASSES DE COLUNA do grid. `.col-*` e display: block, e
   isso empurrava o campo para a terceira linha: rotulo em cima, o "i" no meio,
   o input embaixo. Medido numa delas: o grupo ocupava 104px em vez de 75px.

   Tirar so as classes de coluna nao resolvia, porque o <label> tambem e
   display: block e o botao continuava caindo para a linha seguinte. Por isso o
   par rotulo + ajuda vive agora dentro de .ws-rotulo, que e uma linha flex.

   Visualmente: deixa de ser um quadrado azul preenchido do tamanho de um botao
   e vira um "i" discreto ao lado do texto, que so ganha cor no hover.
   ========================================================================== */

.ws-rotulo {
	display: flex;
	align-items: center;
	gap: 6px;
	/* O .col-form-label traz o proprio padding vertical; o wrapper nao soma
	   nada para nao empurrar o campo para baixo. */
	min-height: 0;
}

.ws-rotulo > label,
.ws-rotulo > h3,
.ws-rotulo > h4 {
	margin-bottom: 0;
}

.ws-ajuda {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: none;
	width: 18px;
	height: 18px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--ws-n-400);
	cursor: help;
	transition: color var(--ws-t), background-color var(--ws-t);
}

.ws-ajuda:hover,
.ws-ajuda:focus {
	background-color: var(--ws-primary-50);
	color: var(--ws-primary);
	outline: none;
}

.ws-ajuda:focus-visible {
	box-shadow: 0 0 0 3px var(--ws-primary-100);
}

.ws-ajuda svg { display: block; }

/* O popover do Bootstrap tambem vinha com o visual de fabrica. */
.popover {
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius);
	box-shadow: var(--ws-shadow);
	font-family: inherit;
}

.popover .popover-body {
	padding: 11px 14px;
	color: var(--ws-n-700);
	font-size: 13.5px;
	line-height: 1.5;
}


/* Bloco de dados sem virar cartao. Serve para os quadros de informacao que
   estavam como "card dentro de card" — o que a secao 1 proibe — e que existem
   so para agrupar alguns pares rotulo/valor. */
.ws-bloco {
	padding: 4px 16px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius-lg);
	background-color: var(--ws-n-50);
}

/* Grade de caixas de selecao (os graficos da tela inicial, por exemplo). Era
   style="display: grid;grid-template-columns: 1fr 1fr 1fr" escrito no elemento,
   com tres colunas fixas que nao cabiam em tela estreita. */
.ws-caixas {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
	gap: 2px 18px;
	margin-top: 4px;
}

.ws-caixas > label {
	display: flex;
	align-items: center;
	gap: 9px;
	margin: 0;
	padding: 6px 0;
	font-size: 14px;
	font-weight: 400;
	color: var(--ws-n-700);
	cursor: pointer;
}

.ws-caixas input[type="checkbox"] {
	appearance: none;
	-webkit-appearance: none;
	flex: none;
	width: 17px;
	height: 17px;
	margin: 0;
	border: 1px solid var(--ws-n-300);
	border-radius: 4px;
	background-color: var(--ws-n-0);
	cursor: pointer;
	transition: background-color var(--ws-t), border-color var(--ws-t);
}

.ws-caixas input[type="checkbox"]:checked {
	background-color: var(--ws-primary);
	border-color: var(--ws-primary);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5l3 3 6-6'/%3E%3C/svg%3E");
	background-size: 13px 13px;
	background-position: center;
	background-repeat: no-repeat;
}



/* Logo do cliente no chip do header. As logos cadastradas sao quadradas
   (medido: proporcao entre 1,00 e 1,02), entao um quadrado de 22px com
   object-fit contain nao corta nem distorce nenhuma delas. A borda separa a
   logo do fundo branco quando ela propria tem fundo claro. */
.ws-header-empresa__logo {
	/* 20px e nao 22: com 22 o chip ia a 36px de altura e desalinhava do chip de
	   acao ao lado, que tem 32. Medido. */
	width: 20px;
	height: 20px;
	flex-shrink: 0;
	object-fit: contain;
	border: 1px solid var(--ws-n-200);
	border-radius: 4px;
	background-color: var(--ws-n-0);
}


/* ==========================================================================
   RELATORIOS
   --------------------------------------------------------------------------
   A tela tinha 21 sanfonas fechadas empilhadas em duas colunas: para achar um
   relatorio era preciso descer a pagina lendo titulo por titulo. Virou uma
   grade de cartoes com busca e filtro por assunto; escolher um cartao troca a
   grade pelo painel do relatorio, entao so existe um formulario na tela por
   vez.
   ========================================================================== */

.ws-rel-busca {
	position: relative;
	min-width: 280px;
}

.ws-rel-busca i {
	position: absolute;
	top: 50%;
	left: 12px;
	transform: translateY(-50%);
	font-size: 18px;
	color: var(--ws-n-400);
	pointer-events: none;
}

.ws-rel-busca .form-control {
	padding-left: 38px;
}

/* --- Filtro por assunto --- */
.ws-rel-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 18px 0 22px;
}

.ws-rel-chip {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 7px 14px;
	border: 1px solid var(--ws-n-200);
	border-radius: 999px;
	background-color: var(--ws-n-0);
	color: var(--ws-n-600);
	font-size: 13px;
	font-weight: 500;
	cursor: pointer;
	transition: all var(--ws-t);
}

.ws-rel-chip:hover {
	border-color: var(--ws-n-300);
	background-color: var(--ws-n-50);
	color: var(--ws-n-800);
}

.ws-rel-chip.is-ativo {
	border-color: var(--ws-primary);
	background-color: var(--ws-primary);
	color: #fff;
}

.ws-rel-chip__n {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 20px;
	height: 18px;
	padding: 0 5px;
	border-radius: 999px;
	background-color: var(--ws-n-100);
	color: var(--ws-n-600);
	font-size: 11px;
	font-weight: 600;
}

.ws-rel-chip.is-ativo .ws-rel-chip__n {
	background-color: rgba(255, 255, 255, .22);
	color: #fff;
}

/* --- Grade de cartoes --- */
.ws-rel-grade {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
	gap: 14px;
}

.ws-rel-card {
	display: flex;
	align-items: center;
	gap: 13px;
	width: 100%;
	padding: 16px;
	border: 1px solid var(--ws-n-200);
	border-radius: var(--ws-radius-lg);
	background-color: var(--ws-n-0);
	text-align: left;
	cursor: pointer;
	transition: border-color var(--ws-t), box-shadow var(--ws-t), transform var(--ws-t);
}

.ws-rel-card:hover {
	border-color: var(--ws-primary);
	box-shadow: var(--ws-shadow);
	transform: translateY(-1px);
}

.ws-rel-card__ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	width: 42px;
	height: 42px;
	border-radius: var(--ws-radius);
	background-color: var(--ws-primary-50);
	color: var(--ws-primary);
	font-size: 22px;
}

.ws-rel-card__txt {
	display: flex;
	flex-direction: column;
	gap: 3px;
	min-width: 0;
	flex: 1;
}

.ws-rel-card__nome {
	color: var(--ws-n-800);
	font-size: 14px;
	font-weight: 600;
	line-height: 1.3;
}

.ws-rel-card__desc {
	color: var(--ws-n-500);
	font-size: 12px;
	line-height: 1.4;
}

.ws-rel-card__seta {
	flex-shrink: 0;
	font-size: 18px;
	color: var(--ws-n-300);
	transition: color var(--ws-t), transform var(--ws-t);
}

.ws-rel-card:hover .ws-rel-card__seta {
	color: var(--ws-primary);
	transform: translateX(2px);
}

/* --- Painel de um relatorio --- */
.ws-rel-painel__topo {
	display: flex;
	align-items: center;
	gap: 18px;
	flex-wrap: wrap;
	padding-bottom: 16px;
	margin-bottom: 22px;
	border-bottom: 1px solid var(--ws-n-100);
}

.ws-rel-painel__id {
	display: flex;
	align-items: center;
	gap: 12px;
}

.ws-rel-painel__id > i {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border-radius: var(--ws-radius);
	background-color: var(--ws-primary-50);
	color: var(--ws-primary);
	font-size: 21px;
}

.ws-rel-painel__id h5 {
	margin: 0;
	color: var(--ws-n-800);
	font-size: 16px;
	font-weight: 600;
}

.ws-rel-painel__id small {
	color: var(--ws-n-500);
	font-size: 12px;
}

@media (max-width: 575px) {
	.ws-rel-busca { min-width: 100%; margin-top: 12px; }
	.ws-rel-grade { grid-template-columns: 1fr; }
}
