/* =========================================================================
   Controle Show — Design System (tokens + componentes base)
   Base: paleta Flat UI modernizada da v1.0. Light mode. Mobile-first.
   ========================================================================= */

:root {
	/* Cores de marca — TEMA PADRÃO (azul blue-600, o visual de sempre).
	   O tema é trocado em Configurações > Identidade: o shell estampa
	   data-csw-tema no <html> e o bloco [data-csw-tema="logo"] abaixo
	   sobrepõe estes tokens com as cores da logo. */
	--csw-primary: #2563eb;
	--csw-primary-600: #1d4ed8;
	--csw-primary-700: #1e40af;
	--csw-primary-soft: #eff6ff;

	/* Tokens temáveis usados nas classes arbitrárias do app JS */
	--csw-thead: #0056a0;      /* cabeçalho azul das tabelas */
	--csw-green: #28b050;      /* botão verde (CSW_GREEN_BTN) */
	--csw-green-600: #229648;  /* hover do botão verde */

	/* Superfícies */
	--csw-bg: #f1f5f9;
	--csw-surface: #ffffff;
	--csw-surface-2: #f8fafc;
	--csw-sidebar: #1e293b;
	--csw-sidebar-hover: #334155;
	--csw-sidebar-active: #2563eb;

	/* MENU lateral (tokens do tema — o app JS pinta por .csw-aside/.csw-nav-*) */
	--csw-aside: #0f172a;        /* fundo (slate-900 = o de sempre) */
	--csw-aside-sep: #1e293b;    /* bordas do topo/rodapé */
	--csw-aside-link: #cbd5e1;   /* texto do item */
	--csw-aside-hover: #1e293b;  /* fundo do item no hover */
	--csw-aside-foot: #64748b;   /* rodapé */
	--csw-aside-grp: #94a3b8;    /* cabeçalho de grupo (CADASTROS, VENDAS…) */
	--csw-aside-sub: #64748b;    /* sub-rótulo dentro do grupo */

	/* Texto */
	--csw-text: #0f172a;
	--csw-text-muted: #64748b;
	--csw-text-invert: #f8fafc;

	/* Estados */
	--csw-success: #059669;
	--csw-warning: #d97706;
	--csw-danger: #dc2626;
	--csw-danger-600: #b91c1c;

	/* Bordas / raios / sombras */
	--csw-border: #e2e8f0;
	--csw-radius-sm: 6px;
	--csw-radius: 10px;
	--csw-radius-lg: 16px;
	--csw-shadow: 0 1px 3px rgba(15, 23, 42, .08), 0 1px 2px rgba(15, 23, 42, .04);
	--csw-shadow-lg: 0 10px 30px rgba(15, 23, 42, .12);

	/* Espaços / tipografia */
	--csw-space: 16px;
	--csw-font: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

	/* Layout */
	--csw-sidebar-w: 260px;
	--csw-topbar-h: 60px;
}

/* =====================================================================
   TEMA "CORES DA LOGO" (Configurações > Identidade > Tema de cores)
   Azul do arco (#3b9af5) e verde do cifrão (#34a853) do logotipo.
   Botões/títulos usam tons 1 passo mais escuros p/ contraste AA de
   texto branco. As escalas Twind blue/emerald são remapeadas no shell.
   ===================================================================== */
html[data-csw-tema="logo"] {
	--csw-primary: #1a73cf;
	--csw-primary-600: #155ca8;
	--csw-primary-700: #124b88;
	--csw-primary-soft: #eff7ff;
	--csw-thead: #155ca8;
	--csw-green: #34a853;
	--csw-green-600: #2b8c45;
	--csw-sidebar: #1669c2;
	--csw-sidebar-hover: #2f86dd;
	--csw-sidebar-active: #34a853;
	--csw-success: #2b8c45;

	/* Menu no AZUL VIVO da logo (o mesmo do arco, 1 tom abaixo p/ leitura) e o
	   item ativo no VERDE do cifrão — o par de cores do logotipo, sem timidez. */
	--csw-aside: #1669c2;
	--csw-aside-sep: #2f86dd;
	--csw-aside-link: #eaf4ff;
	--csw-aside-hover: #2f86dd;
	--csw-aside-foot: #b7d9f8;
	--csw-aside-grp: #cfe6fb;
	--csw-aside-sub: #a8cef2;
}

/* ---------------------------------------------------------------------
   Utilitários TEMÁVEIS (CSS puro, não Twind).
   O Twind NÃO resolve var() dentro de classe arbitrária (bg-[var(--x)]
   sai sem cor) — por isso estas classes existem: são o único jeito de
   ligar os tokens do tema aos elementos pintados pelo app JS.
   --------------------------------------------------------------------- */
.csw-thead { background-color: var(--csw-thead); }
.csw-thead-text { color: var(--csw-thead); }
.csw-thead-border { border-color: var(--csw-thead); }
.csw-thead-hover:hover { background-color: var(--csw-primary-700); }
.csw-thead-grad { background-image: linear-gradient(to right, var(--csw-thead), var(--csw-primary-700)); }

.csw-btn-green { background-color: var(--csw-green); color: #fff; }
.csw-btn-green:hover { background-color: var(--csw-green-600); }

/* Menu lateral temável (o app JS aplica estas classes no <aside> e nos itens) */
.csw-aside { background-color: var(--csw-aside); }
.csw-aside-sep { border-color: var(--csw-aside-sep); }
.csw-aside-foot { color: var(--csw-aside-foot); }
.csw-nav-link { color: var(--csw-aside-link); }
.csw-nav-link:hover { background-color: var(--csw-aside-hover); color: #fff; }
.csw-nav-active { background-color: var(--csw-sidebar-active); color: #fff; }
.csw-nav-grp { color: var(--csw-aside-grp); }
.csw-nav-grp:hover { color: #fff; }
.csw-nav-sub { color: var(--csw-aside-sub); }

* { box-sizing: border-box; }

html, body { height: 100%; }

.csw-body {
	margin: 0;
	font-family: var(--csw-font);
	color: var(--csw-text);
	background: var(--csw-bg);
	-webkit-font-smoothing: antialiased;
	font-size: 15px;
	line-height: 1.5;
}

/* ----- Splash / spinner ----- */
.csw-splash {
	position: fixed;
	inset: 0;
	display: grid;
	place-items: center;
	background: var(--csw-bg);
}
.csw-spinner {
	width: 42px;
	height: 42px;
	border: 4px solid var(--csw-border);
	border-top-color: var(--csw-primary);
	border-radius: 50%;
	animation: csw-spin .8s linear infinite;
}
@keyframes csw-spin { to { transform: rotate(360deg); } }

/* ----- Botões ----- */
.csw-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 10px 16px;
	font: inherit;
	font-weight: 600;
	border: 1px solid transparent;
	border-radius: var(--csw-radius-sm);
	cursor: pointer;
	transition: background .15s, border-color .15s, opacity .15s;
	text-decoration: none;
	color: var(--csw-text);
	background: var(--csw-surface);
	border-color: var(--csw-border);
}
.csw-btn:hover { background: var(--csw-surface-2); }
.csw-btn--primary { background: var(--csw-primary); border-color: var(--csw-primary); color: #fff; }
.csw-btn--primary:hover { background: var(--csw-primary-600); }
.csw-btn--danger { background: var(--csw-danger); border-color: var(--csw-danger); color: #fff; }
.csw-btn--danger:hover { background: var(--csw-danger-600); }
.csw-btn--block { width: 100%; }
.csw-btn[disabled] { opacity: .55; cursor: not-allowed; }
.csw-btn .lucide { width: 18px; height: 18px; }

/* ----- Inputs ----- */
.csw-field { margin-bottom: var(--csw-space); }
.csw-label { display: block; font-size: 13px; font-weight: 600; color: var(--csw-text-muted); margin-bottom: 6px; }
.csw-input {
	width: 100%;
	padding: 11px 12px;
	font: inherit;
	color: var(--csw-text);
	background: var(--csw-surface);
	border: 1px solid var(--csw-border);
	border-radius: var(--csw-radius-sm);
	transition: border-color .15s, box-shadow .15s;
}
.csw-input:focus {
	outline: none;
	border-color: var(--csw-primary);
	box-shadow: 0 0 0 3px var(--csw-primary-soft);
}

/* ----- Cards ----- */
.csw-card {
	background: var(--csw-surface);
	border: 1px solid var(--csw-border);
	border-radius: var(--csw-radius);
	box-shadow: var(--csw-shadow);
	padding: 20px;
}

/* ----- Tela de autenticação (login/recover/reset) ----- */
.csw-auth {
	min-height: 100vh;
	display: grid;
	place-items: center;
	padding: 24px;
	background: linear-gradient(135deg, var(--csw-primary-700), var(--csw-sidebar));
}
.csw-auth__box {
	width: 100%;
	max-width: 380px;
	background: var(--csw-surface);
	border-radius: var(--csw-radius-lg);
	box-shadow: var(--csw-shadow-lg);
	padding: 32px;
}
.csw-auth__brand { text-align: center; margin-bottom: 24px; font-size: 22px; font-weight: 800; color: var(--csw-primary-700); }
.csw-auth__title { font-size: 16px; font-weight: 700; margin: 0 0 4px; }
.csw-auth__sub { color: var(--csw-text-muted); font-size: 13px; margin: 0 0 20px; }
.csw-auth__links { display: flex; justify-content: space-between; margin-top: 16px; font-size: 13px; }
.csw-auth__links a { color: var(--csw-primary); text-decoration: none; cursor: pointer; }
.csw-auth__links a:hover { text-decoration: underline; }

/* ----- Shell (sidebar + topbar) ----- */
.csw-shell { display: grid; grid-template-columns: var(--csw-sidebar-w) 1fr; min-height: 100vh; }
.csw-sidebar {
	background: var(--csw-sidebar);
	color: var(--csw-text-invert);
	display: flex;
	flex-direction: column;
	position: sticky;
	top: 0;
	height: 100vh;
	overflow-y: auto;
}
.csw-sidebar__brand { padding: 18px 20px; font-weight: 800; font-size: 18px; letter-spacing: .3px; border-bottom: 1px solid var(--csw-sidebar-hover); }
.csw-nav { padding: 12px 8px; flex: 1; }
.csw-nav__group { color: #94a3b8; font-size: 11px; text-transform: uppercase; letter-spacing: .6px; padding: 14px 12px 6px; }
.csw-nav__item {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 10px 12px;
	border-radius: var(--csw-radius-sm);
	color: #cbd5e1;
	text-decoration: none;
	cursor: pointer;
	font-weight: 500;
}
.csw-nav__item:hover { background: var(--csw-sidebar-hover); color: #fff; }
.csw-nav__item.is-active { background: var(--csw-sidebar-active); color: #fff; }
.csw-nav__item .lucide { width: 18px; height: 18px; }

.csw-main { display: flex; flex-direction: column; min-width: 0; }
.csw-topbar {
	height: var(--csw-topbar-h);
	background: var(--csw-surface);
	border-bottom: 1px solid var(--csw-border);
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 0 20px;
	position: sticky;
	top: 0;
	z-index: 10;
}
.csw-topbar__title { font-weight: 700; font-size: 16px; }
.csw-topbar__user { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.csw-topbar__user img { width: 32px; height: 32px; border-radius: 50%; }
.csw-burger { display: none; background: none; border: none; cursor: pointer; color: var(--csw-text); }

.csw-content { padding: 24px; }
.csw-page__title { font-size: 22px; font-weight: 700; margin: 0 0 4px; }
.csw-page__sub { color: var(--csw-text-muted); margin: 0 0 20px; }

/* ----- Empty state ----- */
.csw-empty { text-align: center; color: var(--csw-text-muted); padding: 48px 16px; }
.csw-empty .lucide { width: 40px; height: 40px; margin-bottom: 12px; opacity: .5; }

/* ----- Tabela / matriz de permissões ----- */
.csw-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.csw-table th, .csw-table td { padding: 10px 12px; border-bottom: 1px solid var(--csw-border); text-align: left; }
.csw-table th { color: var(--csw-text-muted); font-size: 12px; text-transform: uppercase; letter-spacing: .4px; }
.csw-table td.csw-center, .csw-table th.csw-center { text-align: center; }
.csw-table tbody tr:hover { background: var(--csw-surface-2); }

/* ----- Toasts ----- */
.csw-toasts { position: fixed; bottom: 20px; right: 20px; display: flex; flex-direction: column; gap: 10px; z-index: 9999; }
.csw-toast {
	background: var(--csw-text);
	color: #fff;
	padding: 12px 16px;
	border-radius: var(--csw-radius-sm);
	box-shadow: var(--csw-shadow-lg);
	font-size: 14px;
	animation: csw-toast-in .2s ease;
	max-width: 320px;
}
.csw-toast--error { background: var(--csw-danger); }
.csw-toast--success { background: var(--csw-success); }
@keyframes csw-toast-in { from { opacity: 0; transform: translateY(8px); } }
.csw-anim { animation: csw-toast-in .15s ease; }

.csw-error-text { color: var(--csw-danger); font-size: 13px; margin: 8px 0 0; }

/* ----- Modal ----- */
.csw-modal-ov {
	position: fixed;
	inset: 0;
	background: rgba(15, 23, 42, .5);
	display: grid;
	place-items: center;
	padding: 20px;
	z-index: 100;
	animation: csw-toast-in .15s ease;
}
.csw-modal {
	background: var(--csw-surface);
	border-radius: var(--csw-radius-lg);
	box-shadow: var(--csw-shadow-lg);
	padding: 24px;
	width: 100%;
	max-width: 460px;
	max-height: 90vh;
	overflow-y: auto;
}
.csw-modal .csw-auth__title { margin-bottom: 16px; }

/* ----- Responsivo ----- */
@media (max-width: 860px) {
	.csw-shell { grid-template-columns: 1fr; }
	.csw-sidebar {
		position: fixed;
		left: 0;
		top: 0;
		width: var(--csw-sidebar-w);
		transform: translateX(-100%);
		transition: transform .2s ease;
		z-index: 50;
	}
	.csw-shell.is-open .csw-sidebar { transform: translateX(0); }
	.csw-burger { display: inline-flex; }
}

/* ----- Caixa / Pagamentos (Fase 5) ----- */
.csw-toolbar {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	align-items: flex-end;
}
.csw-toolbar .csw-field { margin: 0; min-width: 200px; flex: 1; }
.csw-grid-notas {
	display: grid;
	grid-template-columns: repeat(6, minmax(80px, 1fr));
	gap: 12px;
	margin-bottom: 12px;
}
.csw-grid-notas .csw-field { margin: 0; }
.csw-cx-result {
	margin: 12px 0;
	padding: 12px 14px;
	background: var(--csw-bg, #f4f6f8);
	border-radius: 8px;
	font-size: 15px;
}
.csw-table tfoot th { font-weight: 700; border-top: 2px solid rgba(0,0,0,.12); }
@media (max-width: 860px) {
	.csw-grid-notas { grid-template-columns: repeat(3, 1fr); }
}

/* ----- Dashboard (Fase 5e) ----- */
.csw-dash-banner {
	background: #fff;
	border: 1px solid var(--csw-border, #e6e9ee);
	border-radius: 12px;
	padding: 24px;
	text-align: center;
	position: relative;
	margin-bottom: 20px;
}
.csw-dash-hello { margin: 0; font-size: 26px; color: var(--csw-primary, #3498db); font-weight: 800; }
.csw-dash-sub { margin: 6px 0 0; color: #5a6677; }
.csw-dash-actions { margin-top: 10px; display: flex; gap: 14px; justify-content: center; align-items: center; color: var(--csw-primary, #3498db); }
.csw-icon-btn { background: none; border: none; cursor: pointer; color: var(--csw-primary, #3498db); padding: 4px; }
.csw-dash-h { display: flex; align-items: center; gap: 8px; margin: 22px 0 12px; color: var(--csw-primary, #3498db); font-size: 18px; }
.csw-dash-h i { width: 20px; height: 20px; }
.csw-dash-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.csw-metric {
	background: #fff;
	border: 1px solid var(--csw-border, #e6e9ee);
	border-radius: 10px;
	padding: 18px;
	text-align: center;
	border-top: 4px solid #95a5a6;
}
.csw-metric i { width: 22px; height: 22px; }
.csw-metric-value { font-size: 30px; font-weight: 800; color: var(--csw-primary, #3498db); line-height: 1.1; }
.csw-metric-label { color: #5a6677; font-weight: 600; font-size: 13px; }
.csw-metric--blue { border-top-color: #3498db; }
.csw-metric--green { border-top-color: #27ae60; }
.csw-metric--green i { color: #27ae60; }
.csw-metric--red { border-top-color: #e74c3c; }
.csw-metric--red i { color: #e74c3c; }
.csw-dash-metric-row { display: flex; flex-wrap: wrap; gap: 18px; margin-bottom: 14px; }
.csw-dash-metric-row > div { display: flex; flex-direction: column; }
.csw-dash-metric-label { font-size: 12px; color: #5a6677; }
.csw-dash-metric-row strong { font-size: 18px; }
.csw-dash-prog-label { margin: 6px 0; }
.csw-dash-bar { background: #eef1f4; border-radius: 999px; height: 16px; overflow: hidden; }
.csw-dash-bar-fill { background: linear-gradient(90deg, #f1c40f, #f39c12); height: 100%; border-radius: 999px; transition: width .3s ease; }
.csw-dash-comp { margin-top: 10px; padding: 10px 12px; background: #f8fafc; border-radius: 8px; font-size: 14px; }
@media (max-width: 600px) {
	.csw-dash-cards { grid-template-columns: 1fr; }
}

/* ----- Conferência por linha (Fase 5c) ----- */
.csw-cf-summary { display: flex; flex-wrap: wrap; gap: 18px; margin-top: 6px; }
.csw-cf-summary span { color: #5a6677; font-size: 14px; }
.csw-cf-summary strong { color: #2c3e50; }
.csw-cf-vend-title { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font-size: 16px; }
.csw-cf-vend-title i { width: 18px; height: 18px; color: var(--csw-primary, #3498db); }
#csw-cf-list .csw-table { font-size: 13px; }

/* ----- Encerramento (Fase 5d) ----- */
.csw-btn--sm { padding: 5px 10px; font-size: 13px; }
.csw-btn--sm .lucide { width: 15px; height: 15px; }
.csw-en-badge { display: inline-block; padding: 2px 8px; border-radius: 10px; color: #fff; font-size: 11px; font-weight: 600; letter-spacing: .3px; }
.csw-en-conf-card { border-left: 3px solid var(--csw-primary, #3498db); }

/* ----- Prêmios da venda (Fase 5f) ----- */
.csw-vp-row { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; }
.csw-vp-row .csw-vp-premio { flex: 1 1 auto; }
.csw-vp-row .csw-vp-qtd { width: 90px; }
.csw-vp-row .csw-vp-sub { min-width: 90px; text-align: right; font-weight: 600; color: #2c3e50; }

/* ----- Impressão & WhatsApp (Fase 6b) ----- */
.csw-pb { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.csw-pb__label { font-weight: 600; color: #5a6677; margin-right: 4px; }

/* Área de impressão: oculta na tela, visível só ao imprimir. */
.csw-print { display: none; }
.csw-rc { color: #000; font-family: 'Segoe UI', Arial, sans-serif; }
.csw-rc__head { text-align: center; margin-bottom: 8px; }
.csw-rc__head h1 { font-size: 16px; margin: 0; }
.csw-rc__head p { font-size: 11px; margin: 4px 0 0; color: #333; }
.csw-rc h2 { font-size: 14px; text-align: center; margin: 6px 0; border-top: 1px dashed #000; border-bottom: 1px dashed #000; padding: 4px 0; }
.csw-rc__meta { font-size: 11px; text-align: center; margin: 4px 0 8px; }
.csw-rc__tbl { width: 100%; border-collapse: collapse; margin: 6px 0; font-size: 12px; }
.csw-rc__tbl th, .csw-rc__tbl td { text-align: left; padding: 2px 4px; border-bottom: 1px solid #ddd; }
.csw-rc__tbl .r { text-align: right; }
.csw-rc__tbl .c { text-align: center; color: #666; }
.csw-rc__tot { font-size: 13px; margin: 6px 0; text-align: right; }
.csw-rc__pix { font-size: 11px; text-align: center; margin-top: 10px; border-top: 1px dashed #000; padding-top: 6px; }

@media print {
	body.csw-printing .csw-app,
	body.csw-printing .csw-toasts,
	body.csw-printing #csw-toasts,
	body.csw-printing .csw-modal-ov { display: none !important; }
	body.csw-printing .csw-print { display: block; }
	.csw-print--58 { width: 58mm; font-size: 11px; }
	.csw-print--58 .csw-rc__head h1 { font-size: 13px; }
	.csw-print--58 .csw-rc__tbl { font-size: 10px; }
	.csw-print--80 { width: 80mm; font-size: 12px; }
	.csw-print--a4 { width: 100%; max-width: 190mm; margin: 0 auto; }
}

/* ----- Gráficos (Chart.js, Fase 6c) ----- */
.csw-dash-charts { display: grid; grid-template-columns: 2fr 1fr; gap: 16px; margin-bottom: 16px; }
.csw-chart-box { position: relative; height: 300px; }
.csw-chart-box--wide { height: 340px; }
.csw-chart-box canvas { max-width: 100%; }
@media ( max-width: 720px ) { .csw-dash-charts { grid-template-columns: 1fr; } }
@media print { body.csw-printing .csw-dash-charts, body.csw-printing .csw-chart-box { display: none !important; } }

/* ----- Mapa / GPS (Fase 6d) ----- */
.csw-map { height: 520px; border-radius: 10px; overflow: hidden; margin-top: 16px; z-index: 0; }
.csw-mp-pend { max-height: 220px; overflow-y: auto; }
.csw-mp-pend-row { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px solid #eee; font-size: 13px; }
.csw-mp-pend-row span { flex: 1 1 auto; }
@media print { body.csw-printing .csw-map { display: none !important; } }

/* ----- Vendas: tela dedicada com cálculo ao vivo (dívida #1) ----- */
.csw-vd-grid {
	display: grid;
	grid-template-columns: 1.4fr 1fr;
	gap: var(--csw-space);
	align-items: start;
}
.csw-vd-preview {
	position: sticky;
	top: var(--csw-space);
	border-left: 3px solid var(--csw-primary);
	background: var(--csw-primary-soft);
}
.csw-vd-preview .csw-table td:first-child { color: var(--csw-text-muted); }
@media ( max-width: 860px ) {
	.csw-vd-grid { grid-template-columns: 1fr; }
	.csw-vd-preview { position: static; }
}

/* ----- Distribuição: wizard multistep (dívida #1) ----- */
.csw-wz-prog {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0;
	margin-bottom: 20px;
}
.csw-wz-dot {
	width: 30px;
	height: 30px;
	flex: 0 0 30px;
	border-radius: 50%;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 13px;
	font-weight: 700;
	background: var(--csw-border);
	color: var(--csw-text-muted);
	transition: background .15s, color .15s;
}
.csw-wz-dot.is-on { background: var(--csw-primary); color: #fff; }
.csw-wz-line { width: 40px; height: 2px; background: var(--csw-border); }
.csw-wz-body { margin: 8px 0 4px; }

/* =========================================================================
   Distribuição Rasplec — layout da v1.0 (distribuicao-rasplec) recolorido
   para a paleta do app (indigo/slate/emerald). Estrutura fiel ao exemplo.
   ========================================================================= */
.csw-dr-wrap { max-width: 1200px; margin: 0 auto; }
/* .csw-dr-title REMOVIDA em 16/07: imitava o padrão da pág. Produtos (o comentário
   antigo até dizia isso) mas errava em tudo — 28px/800/margem 22px e ícone #059669,
   contra 24px/700/20px e #10b981 do padrão real. A página agora usa o pageHead(),
   fonte única do cabeçalho. Não recriar título de página em CSS. */
.csw-dr-header { display: flex; flex-wrap: wrap; justify-content: center; align-items: flex-end; gap: 16px; margin-bottom: 22px; }
.csw-dr-field { display: flex; flex-direction: column; }
.csw-dr-field > label { font-weight: 700; color: #1d4ed8; margin-bottom: 5px; font-size: 13px; }
.csw-dr-field select { padding: 9px; font-size: 14px; border: 1px solid #cbd5e1; border-radius: 8px; width: 200px; background: #fff; color: #1e293b; }
.csw-dr-info { display: flex; gap: 12px; flex-wrap: wrap; }
/* KPIs importantes (Dist. Rota/Entrada/Distribuídas/Vendas/Estoque): o LABEL fica
   fora (igual aos campos Rota/Extração, p/ alinhar a linha de labels) e só o INPUT
   vira tile azul destacado — número forte p/ saltar da página. Tile fica vermelho
   quando o valor é negativo (input.neg = estoque no vermelho). */
.csw-dr-info .box { display: flex; flex-direction: column; }
.csw-dr-info .box label { font-weight: 700; color: #1d4ed8; margin-bottom: 5px; font-size: 13px; text-align: center; }
.csw-dr-info .box input { padding: 8px; font-size: 17px; border: 1px solid #bfdbfe; border-radius: 8px; width: 96px; background: #eff6ff; text-align: center; font-weight: 800; color: #1e3a8a; box-shadow: 0 1px 2px rgba(30,64,175,.10); }
.csw-dr-info .box input.neg { background: #fef2f2; border-color: #fecaca; color: #dc2626; box-shadow: 0 1px 2px rgba(220,38,38,.12); }
.csw-dr-list { display: flex; flex-direction: column; gap: 14px; }
.csw-dr-card { background: var(--csw-surface); border: 1px solid var(--csw-border); border-radius: 12px; padding: 16px; box-shadow: 0 1px 3px rgba(0,0,0,.10), 0 1px 2px rgba(0,0,0,.06); display: flex; align-items: center; }
.csw-dr-row { display: flex; justify-content: center; align-items: center; gap: 14px; width: 100%; }
.csw-dr-cell { flex: 0 0 18%; min-width: 100px; text-align: center; display: flex; flex-direction: column; }
.csw-dr-cell > label { font-weight: 700; color: #1d4ed8; margin-bottom: 6px; font-size: 13px; }
.csw-dr-cell .name { font-weight: 700; font-size: 15px; color: #1e293b; }
.csw-dr-cell input { padding: 9px; font-size: 14px; border: 1px solid #cbd5e1; border-radius: 8px; text-align: center; background: var(--csw-surface-2); }
.csw-dr-actions { display: flex; gap: 16px; margin-left: 24px; justify-content: center; }
.csw-dr-ic { cursor: pointer; padding: 7px; border-radius: 8px; transition: background .2s, color .2s; display: inline-flex; align-items: center; justify-content: center; }
.csw-dr-ic.add { color: #059669; } .csw-dr-ic.add:hover { background: #059669; color: #fff; }
.csw-dr-ic.upd { color: #2563eb; } .csw-dr-ic.upd:hover { background: #2563eb; color: #fff; }
.csw-dr-ic.his { color: #64748b; } .csw-dr-ic.his:hover { background: #64748b; color: #fff; }
.csw-dr-footer { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin-top: 22px; }
.csw-dr-bar { width: 100%; max-width: 600px; margin: 18px auto 0; background: #e2e8f0; border-radius: 6px; overflow: hidden; }
.csw-dr-bar > div { width: 0%; height: 10px; background: #2563eb; transition: width .3s ease; }
.csw-gab-list { display: flex; flex-direction: column; gap: 10px; }
.csw-gab-item { display: flex; align-items: center; justify-content: space-between; gap: 12px; background: #f8fafc; border-radius: 8px; padding: 12px 16px; border-left: 4px solid #2563eb; transition: background .15s; }
.csw-gab-item:hover { background: #eef2ff; }
.csw-gab-nome { flex: 1; min-width: 0; font-size: 15px; font-weight: 600; color: #334155; display: flex; align-items: center; gap: 8px; cursor: pointer; }
.csw-gab-qtd { width: 110px; flex: 0 0 110px; padding: 9px 12px; border: 1px solid #cbd5e1; border-radius: 6px; font-size: 15px; text-align: center; background: #fff; color: #1e293b; }
.csw-gab-qtd:focus { border-color: var(--csw-primary); outline: none; box-shadow: 0 0 0 3px rgba(37,99,235,.12); }
@media (max-width: 768px) {
	/* .csw-dr-title (font-size 23px) removida junto com a regra de desktop — o título
	   agora vem do pageHead e tem o MESMO tamanho no mobile e no desktop, como o resto. */
	.csw-dr-header { flex-direction: row; align-items: center; gap: 10px; margin-left: 4px; margin-right: 4px; }
	.csw-dr-list { margin-left: 4px; margin-right: 4px; }
	.csw-dr-field { flex: 1 1 45%; }
	.csw-dr-field select { width: 100%; }
	.csw-dr-info { width: 100%; }
	.csw-dr-info .box { flex: 1 1 28%; }
	.csw-dr-info .box input { width: 100%; }
	.csw-dr-row { flex-direction: column; gap: 6px; }
	.csw-dr-cell { min-width: 100%; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 2%; }
	.csw-dr-cell > label { width: 36%; text-align: left; margin-bottom: 0; }
	.csw-dr-cell .name, .csw-dr-cell input { width: 62%; }
	.csw-dr-actions { margin-left: 0; gap: 36px; margin-top: 12px; width: 100%; }
}

/* =====================================================================
   HISTÓRICO de vendas/encerramentos (lista minimalista + cards de detalhe)
   As regras de card da v1.0 vivem escopadas em #csw-acerto-root; aqui ficam
   os equivalentes para a lista minimalista (abaixo de Encerrar Venda), os
   popups (ver/editar) e as abas Totolec/Rasplec — todos FORA daquele escopo.
   ===================================================================== */

/* ----- Lista minimalista (abaixo do formulário Encerrar Venda) ----- */
.csw-hist-wrap { margin-top: 22px; }
.csw-hist-titulo { font-size: 15px; font-weight: 700; color: #1d4ed8; margin: 0 0 10px; }
.csw-hist-vazio { color: #94a3b8; font-size: 14px; padding: 14px; text-align: center; border: 1px dashed #cbd5e1; border-radius: 10px; }
.csw-hist-row {
	display: flex; align-items: center; justify-content: space-between; gap: 10px;
	background: #fff; border: 1px solid #e5e7eb; border-radius: 10px;
	padding: 10px 14px; margin-bottom: 8px;
}
.csw-hist-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.csw-hist-vend { font-weight: 700; color: #0f172a; font-size: 15px; }
.csw-hist-tags { font-size: 12px; color: #64748b; }

/* ----- Botões de ação (compartilhados pela lista e pelos cards) ----- */
.csw-hist-row .venda-actions,
.csw-hist-cards .venda-actions { display: flex; gap: 8px; align-items: center; }
.csw-hist-row .venda-actions button,
.csw-hist-cards .venda-actions button {
	border: none; background: transparent; cursor: pointer; border-radius: 8px;
	width: 36px; height: 36px; display: inline-flex; align-items: center; justify-content: center;
	transition: background .15s, color .15s;
}
.csw-hist-row .venda-actions button svg,
.csw-hist-cards .venda-actions button svg { width: 18px; height: 18px; }
.csw-hist-row .acao-ver, .csw-hist-cards .acao-ver { color: #0ea5e9; }
.csw-hist-row .acao-ver:hover, .csw-hist-cards .acao-ver:hover { background: #0ea5e9; color: #fff; }
.csw-hist-row .acao-compartilhar, .csw-hist-cards .acao-compartilhar { color: #25D366; }
.csw-hist-row .acao-compartilhar:hover, .csw-hist-cards .acao-compartilhar:hover { background: #25D366; color: #fff; }
.csw-hist-row .acao-editar, .csw-hist-cards .acao-editar { color: #09913d; }
.csw-hist-row .acao-editar:hover, .csw-hist-cards .acao-editar:hover { background: #09913d; color: #fff; }
.csw-hist-row .acao-excluir, .csw-hist-cards .acao-excluir { color: #dc3545; }
.csw-hist-row .acao-excluir:hover, .csw-hist-cards .acao-excluir:hover { background: #dc3545; color: #fff; }

/* ----- Cards de detalhe (popup ver / abas Totolec e Rasplec) -----
   Layout em COLUNAS alinhadas (grid). Cada linha usa a largura cheia, dividida por
   colunas proporcionais (template inline por card). Vendedor + Produto na mesma linha. */
/* Barra de filtros das consultas Totolec/Rasplec. */
.csw-hist-filtros { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; }
.csw-hist-filtros .csw-hf-campo { display: flex; flex-direction: column; gap: 4px; min-width: 150px; flex: 1 1 150px; }
.csw-hist-filtros .csw-hf-campo input, .csw-hist-filtros .csw-hf-campo select { width: 100%; }
.csw-hist-filtros .csw-hf-limpar { flex: 0 0 auto; }

/* Overlay de progresso do "Adicionar Todos" (registro vendedor a vendedor).
   Leve: só CSS (spin + pulse), sem libs. Mostra que o sistema está trabalhando. */
.csw-reg-ov { position: fixed; inset: 0; z-index: 10050; display: flex; align-items: center; justify-content: center; background: rgba(15,23,42,.55); -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); animation: csw-reg-fade .18s ease; }
.csw-reg-card { background: #fff; border-radius: 18px; box-shadow: 0 20px 55px rgba(0,0,0,.28); padding: 28px 32px; width: min(92vw, 360px); text-align: center; }
.csw-reg-spin { width: 64px; height: 64px; margin: 0 auto 16px; position: relative; }
.csw-reg-spin::before { content: ''; position: absolute; inset: 0; border-radius: 50%; border: 4px solid #e0e7ff; }
.csw-reg-spin::after { content: ''; position: absolute; inset: 0; border-radius: 50%; border: 4px solid transparent; border-top-color: #2563eb; animation: csw-reg-rot .8s linear infinite; }
.csw-reg-ic { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: #2563eb; }
.csw-reg-ic svg { width: 26px; height: 26px; animation: csw-reg-pulse 1.2s ease-in-out infinite; }
.csw-reg-title { font-size: 17px; font-weight: 700; color: #1e293b; margin-bottom: 4px; }
.csw-reg-nome { font-size: 14px; color: #2563eb; font-weight: 600; min-height: 20px; margin-bottom: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.csw-reg-count { font-size: 13px; color: #64748b; margin-bottom: 10px; }
.csw-reg-count b { color: #2563eb; }
.csw-reg-track { height: 8px; border-radius: 99px; background: #eef2ff; overflow: hidden; }
.csw-reg-fill { height: 100%; width: 0; border-radius: 99px; background: linear-gradient(90deg,#3b82f6,#2563eb); transition: width .25s ease; }
/* Estado concluído: para o giro e fica verde. */
.csw-reg-done .csw-reg-spin::after { animation: none; border-color: #10b981; }
.csw-reg-done .csw-reg-ic { color: #10b981; }
.csw-reg-done .csw-reg-ic svg { animation: none; }
.csw-reg-done .csw-reg-fill { background: linear-gradient(90deg,#34d399,#10b981); }
@keyframes csw-reg-rot { to { transform: rotate(360deg); } }
@keyframes csw-reg-pulse { 0%,100% { transform: scale(1); opacity: 1; } 50% { transform: scale(.8); opacity: .55; } }
@keyframes csw-reg-fade { from { opacity: 0; } to { opacity: 1; } }

.csw-hist-cards { display: flex; flex-direction: column; gap: 14px; }
.csw-det-card {
	background: #fff; border: 1px solid #e5e7eb; border-radius: 12px;
	box-shadow: 0 1px 3px rgba(0,0,0,.06); overflow: hidden;
}
/* Vendedor: caixa CENTRALIZADA no topo (esboço). */
.csw-det-vendhead {
	display: flex; flex-direction: column; align-items: center; gap: 2px; text-align: center;
	width: max-content; max-width: 90%; margin: 16px auto 8px; padding: 8px 26px;
}
/* Ações no rodapé do popup de detalhe (compartilhar / editar / excluir), centralizadas. */
.csw-det-footacoes { display: flex; justify-content: center; align-items: center; gap: 18px; margin-top: 16px; }
.csw-det-footacoes button {
	border: none; background: transparent; cursor: pointer; border-radius: 10px;
	width: 48px; height: 48px; display: inline-flex; align-items: center; justify-content: center;
	transition: background .15s, color .15s;
}
.csw-det-footacoes button svg { width: 24px; height: 24px; }
.csw-det-footacoes .acao-compartilhar { color: #25D366; } .csw-det-footacoes .acao-compartilhar:hover { background: #25D366; color: #fff; }
.csw-det-footacoes .acao-editar { color: #09913d; } .csw-det-footacoes .acao-editar:hover { background: #09913d; color: #fff; }
.csw-det-footacoes .acao-excluir { color: #dc3545; } .csw-det-footacoes .acao-excluir:hover { background: #dc3545; color: #fff; }
.csw-det-grid { display: grid; align-items: start; gap: 12px; padding: 13px 18px; }
.csw-det-row { border-top: 1px solid #eef2f7; }
.csw-det-rows .csw-det-row:nth-child(odd) { background: #f8fafc; }
.csw-det-cell { display: flex; flex-direction: column; align-items: center; text-align: center; min-width: 0; gap: 3px; max-width: 100%; }
.csw-det-lbl { font-size: 11px; text-transform: uppercase; letter-spacing: .03em; color: #94a3b8; font-weight: 600; }
.csw-det-val { font-size: 15px; font-weight: 600; color: #0f172a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.csw-det-vend { color: #1d4ed8; font-weight: 700; font-size: 16px; }
.csw-det-money { color: #1d4ed8; }
.csw-det-troco { color: #b45309; }
.csw-det-pag { background: #f8fafc; border-top: 2px solid #e5e7eb; }
/* Prêmios: a PRÓPRIA faixa pintada de laranja (sem card interno). Full-width. */
.csw-det-premios {
	display: flex; flex-direction: column; align-items: center; gap: 4px;
	padding: 14px 18px; text-align: center;
	background: #fff7ed; border-top: 1px solid #fed7aa; border-bottom: 1px solid #fed7aa;
}
.csw-det-premios-lbl { font-size: 12px; text-transform: uppercase; letter-spacing: .03em; color: #c2410c; font-weight: 700; }
.csw-det-premio-item { font-size: 14px; color: #9a3412; font-weight: 600; }
.csw-det-premio-vazio { font-size: 13px; color: #9ca3af; font-style: italic; }

/* Mobile: cada célula vira bloco (grid de 2 colunas) p/ não espremer. */
@media (max-width: 640px) {
	.csw-det-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 8px 12px; }
	.csw-det-val { white-space: normal; }
}

/* ===== Vendas — Totolec: contraste LABEL x VALOR (17/07, fase de layout) ==========
   Pedido do usuário: LABELS em AZUL + negrito mais forte; VALORES todos na MESMA cor,
   VERDE ESCURO (bom contraste no fundo branco p/ leitor 50+). Escopado à página pela
   data-page — NÃO afeta Vendas Rasplec nem os popups de detalhe, que reusam .csw-det-*.
   Cor não está em @media → vale desktop E mobile de uma vez. */
#csw-content[data-page="vendas_totolec"] .csw-det-lbl { color: #1d4ed8; font-weight: 700; }
#csw-content[data-page="vendas_totolec"] .csw-det-val,
#csw-content[data-page="vendas_totolec"] .csw-det-money,
#csw-content[data-page="vendas_totolec"] .csw-det-troco,
#csw-content[data-page="vendas_totolec"] .csw-det-vend { color: #065f46; font-weight: 700; }
/* Labels dos filtros (Data / Período início/fim / Produto / Extração): azul + bold. */
#csw-content[data-page="vendas_totolec"] .csw-hf-campo label { color: #1d4ed8; font-weight: 700; }

/* ===== Vendas — Rasplec: MESMA config do Totolec (labels azul+bold, valores verde
   escuro+bold). O container de PRÊMIOS (.csw-det-premios*) fica INTOCADO — usa classes
   próprias, então estas regras não o alcançam. Escopado por data-page. Desktop+mobile. */
#csw-content[data-page="vendas_rasplec"] .csw-det-lbl { color: #1d4ed8; font-weight: 700; }
#csw-content[data-page="vendas_rasplec"] .csw-det-val,
#csw-content[data-page="vendas_rasplec"] .csw-det-money,
#csw-content[data-page="vendas_rasplec"] .csw-det-troco,
#csw-content[data-page="vendas_rasplec"] .csw-det-vend { color: #065f46; font-weight: 700; }
#csw-content[data-page="vendas_rasplec"] .csw-hf-campo label { color: #1d4ed8; font-weight: 700; }

/* Labels azuis (filtros + card) das DUAS páginas: fonte 18px no desktop / 16px no mobile
   (pedido do usuário — leitor 50+). A 11px o negrito 700 quase não se via; a este tamanho
   fica evidente. Reafirma weight 700 aqui. */
#csw-content[data-page="vendas_totolec"] .csw-det-lbl,
#csw-content[data-page="vendas_totolec"] .csw-hf-campo label,
#csw-content[data-page="vendas_rasplec"] .csw-det-lbl,
#csw-content[data-page="vendas_rasplec"] .csw-hf-campo label { font-size: 18px; font-weight: 700; }
@media (max-width: 640px) {
	#csw-content[data-page="vendas_totolec"] .csw-det-lbl,
	#csw-content[data-page="vendas_totolec"] .csw-hf-campo label,
	#csw-content[data-page="vendas_rasplec"] .csw-det-lbl,
	#csw-content[data-page="vendas_rasplec"] .csw-hf-campo label { font-size: 16px; }
}

/* Totolec + Rasplec: o restante (campos de filtro e botão Limpar) — que não é azul —
   também em NEGRITO, a pedido do usuário. Só peso da fonte; cores intactas; prêmios
   seguem intocados (classes próprias). */
#csw-content[data-page="vendas_totolec"] .csw-hf-campo input,
#csw-content[data-page="vendas_totolec"] .csw-hf-campo select,
#csw-content[data-page="vendas_totolec"] .csw-hf-limpar,
#csw-content[data-page="vendas_rasplec"] .csw-hf-campo input,
#csw-content[data-page="vendas_rasplec"] .csw-hf-campo select,
#csw-content[data-page="vendas_rasplec"] .csw-hf-limpar { font-weight: 700; }

/* ===== Comissões — ajuste SÓ MOBILE (17/07, fase de layout) =======================
   Pedido do usuário (só celular; desktop intacto):
   1) Ações do card (editar/excluir): empilhar VERTICAL (editar em cima, excluir
      embaixo) e ESTREITAR os botões → sobra largura p/ os textos do card centralizarem.
   2) Toolbar: Pesquisar em 50% com o Cadastrar AO LADO (2º item, logo após Pesquisar);
      Produto/Categoria descem p/ a linha de baixo. Feito via `order` (DOM intacto) —
      os botões/campos têm ganchos estáveis (#csw-cf-bar, [data-cf-edit/del]); as classes
      Twind são hash e não servem de alvo. */
@media (max-width: 640px) {
	/* 1) Ações verticais + estreitas. O container é o pai direto dos botões. */
	#csw-content[data-page="comissoes"] #csw-cf-list div:has( > [data-cf-edit] ),
	#csw-content[data-page="comissoes"] #csw-cf-list div:has( > [data-cf-del] ) { flex-direction: column; }
	#csw-content[data-page="comissoes"] #csw-cf-list [data-cf-edit],
	#csw-content[data-page="comissoes"] #csw-cf-list [data-cf-del] { width: 30px; height: 30px; }

	/* 2) Pesquisar 50% + Cadastrar ao lado; filtros descem. */
	#csw-content[data-page="comissoes"] #csw-cf-bar > div:nth-child(1) { grid-column: span 1 / span 1; order: 1; } /* Pesquisar */
	#csw-content[data-page="comissoes"] #csw-cf-bar > div:nth-child(4) { order: 2; } /* Cadastrar */
	#csw-content[data-page="comissoes"] #csw-cf-bar > div:nth-child(2) { order: 3; } /* Produto */
	#csw-content[data-page="comissoes"] #csw-cf-bar > div:nth-child(3) { order: 4; } /* Categoria */

	/* 3) Card: Produto 100% em cima; Categoria 50% + Comissão 50% lado a lado embaixo.
	   As cells têm flex/min-width INLINE (data-col) → precisa !important p/ sobrepor. */
	#csw-content[data-page="comissoes"] #csw-cf-list [data-col="produto_nome"] { flex: 1 1 100% !important; max-width: 100%; order: 1; }
	#csw-content[data-page="comissoes"] #csw-cf-list [data-col="categoria_nome"] { flex: 1 1 45% !important; min-width: 0 !important; order: 2; }
	#csw-content[data-page="comissoes"] #csw-cf-list [data-col="valor"] { flex: 1 1 45% !important; min-width: 0 !important; order: 3; }
}

/* ===== Metas do Distribuidor — ajuste SÓ MOBILE (17/07, fase de layout) ===========
   Pedido do usuário (só celular; desktop intacto):
   1) Toolbar: Pesquisar 50% + Cadastrar ao lado (2º); filtros descem (igual Comissões).
   2) Card: cargo/produto/quantidade/comissão cada um 50% (2 por linha); os ícones
      editar/excluir SAEM do lado e vão p/ BAIXO, cada um 50%, lado a lado.
   Ganchos estáveis: #csw-cf-bar, [data-col], [data-cf-edit/del]. Twind é hash → :has()
   p/ achar o card/containers; as cells têm flex/min-width inline → !important. */
@media (max-width: 640px) {
	/* 1) Pesquisar 50% + Cadastrar ao lado; filtros descem. */
	#csw-content[data-page="metas"] #csw-cf-bar > div:nth-child(1) { grid-column: span 1 / span 1; order: 1; } /* Pesquisar */
	#csw-content[data-page="metas"] #csw-cf-bar > div:nth-child(4) { order: 2; } /* Cadastrar */
	#csw-content[data-page="metas"] #csw-cf-bar > div:nth-child(2) { order: 3; } /* Produto */
	#csw-content[data-page="metas"] #csw-cf-bar > div:nth-child(3) { order: 4; } /* Cargo */

	/* 2a) Card empilha (cells em cima, ações embaixo): o card inline é flex-row → wrap. */
	#csw-content[data-page="metas"] #csw-cf-list div:has( > div > [data-cf-edit] ),
	#csw-content[data-page="metas"] #csw-cf-list div:has( > div > [data-cf-del] ) { flex-wrap: wrap; }

	/* 2b) cells container ocupa a linha inteira; cada cell ~50% (grow preenche 2 por linha). */
	#csw-content[data-page="metas"] #csw-cf-list div:has( > [data-col] ) { flex: 1 1 100% !important; }
	#csw-content[data-page="metas"] #csw-cf-list [data-col] { flex: 1 1 45% !important; min-width: 0 !important; }

	/* 2c) ações: linha inteira embaixo, sem borda/padding lateral; 2 botões 50%. */
	#csw-content[data-page="metas"] #csw-cf-list div:has( > [data-cf-edit] ),
	#csw-content[data-page="metas"] #csw-cf-list div:has( > [data-cf-del] ) {
		flex: 1 1 100% !important; width: 100%; border-left: 0 !important; padding-left: 0 !important;
	}
	#csw-content[data-page="metas"] #csw-cf-list [data-cf-edit],
	#csw-content[data-page="metas"] #csw-cf-list [data-cf-del] { flex: 1 1 0 !important; width: auto !important; }
}

/* ===== Despesa Sede — ajuste SÓ MOBILE (17/07, fase de layout) ====================
   Pedido do usuário (só celular; desktop intacto): no card, Produto 100% em cima;
   Descrição/Qtd 50% cada; Valor unit./Total 50% cada; ícones editar/excluir p/ BAIXO,
   50% cada. Mesmo padrão de Metas (só o card; a toolbar já vem como o usuário quer). */
@media (max-width: 640px) {
	/* Card empilha (cells em cima, ações embaixo). */
	#csw-content[data-page="despesa_sede"] #csw-cf-list div:has( > div > [data-cf-edit] ),
	#csw-content[data-page="despesa_sede"] #csw-cf-list div:has( > div > [data-cf-del] ) { flex-wrap: wrap; }
	/* cells: Produto 100%; os demais ~50% (2 por linha). */
	#csw-content[data-page="despesa_sede"] #csw-cf-list div:has( > [data-col] ) { flex: 1 1 100% !important; }
	#csw-content[data-page="despesa_sede"] #csw-cf-list [data-col] { flex: 1 1 45% !important; min-width: 0 !important; }
	#csw-content[data-page="despesa_sede"] #csw-cf-list [data-col="produto_nome"] { flex: 1 1 100% !important; }
	/* ações: linha inteira embaixo, 2 botões 50%. */
	#csw-content[data-page="despesa_sede"] #csw-cf-list div:has( > [data-cf-edit] ),
	#csw-content[data-page="despesa_sede"] #csw-cf-list div:has( > [data-cf-del] ) {
		flex: 1 1 100% !important; width: 100%; border-left: 0 !important; padding-left: 0 !important;
	}
	#csw-content[data-page="despesa_sede"] #csw-cf-list [data-cf-edit],
	#csw-content[data-page="despesa_sede"] #csw-cf-list [data-cf-del] { flex: 1 1 0 !important; width: auto !important; }
}

/* ===== Encerramento (enc_totolec) — ajuste SÓ MOBILE (17/07, fase de layout) ======
   Pedido do usuário (só celular; desktop intacto): as tabelas do carrossel (produtos,
   CAIXA, RESERVADO) estavam estreitas (sobrava lateral) e os botões EDITAR/EXCLUIR/
   TÉRMICA/A4 estouravam a largura (fonte grande, A4 cortado). Agora: cada tabela com
   ~6% de folga POR LADO (88% da tela) e os botões menores, alinhados à tabela.
   Classes Twind são hash → alvos estruturais: .csw-et-page (estável) + div:has(>table)
   (wrapper de cada tabela; o div de botões é irmão da table dentro dele). */
@media (max-width: 640px) {
	/* card da página (#csw-et-host > div): padding lateral no MÍNIMO (px literal,
	   pedido do usuário) — a tabela cola nas bordas do card. */
	#csw-content[data-page="enc_totolec"] #csw-et-host > div { padding-left: 4px !important; padding-right: 4px !important; }
	/* páginas do carrossel: largura total (o w-4/5 do desktop espremia no celular). */
	#csw-content[data-page="enc_totolec"] .csw-et-page { width: 100% !important; }
	/* cada tabela: largura TOTAL do card (bem justa na tela). */
	#csw-content[data-page="enc_totolec"] .csw-et-page > div:has( > table ) {
		flex: 0 0 100% !important; width: 100% !important; max-width: 100% !important; min-width: 0 !important;
	}
	/* botões por tabela: fonte/padding reduzidos p/ caberem lado a lado na largura da tabela. */
	#csw-content[data-page="enc_totolec"] .csw-et-page > div:has( > table ) > div:has( > button ) { gap: 6px; }
	#csw-content[data-page="enc_totolec"] .csw-et-page > div:has( > table ) > div:has( > button ) > button {
		font-size: 14px !important; padding: 8px 10px !important;
	}
}

/* ===== Encerramento Totolec (consulta, enc_hist_totolec) — SÓ MOBILE (17/07) ======
   Pedido do usuário (só celular; desktop intacto):
   1) Botão Limpar dos filtros em 100% de largura.
   2) Card do encerramento: TÍTULO do cabeçalho azul centralizado.
   3) Botões A4/Térmica/Detalhes centralizados, com espaçamento uniforme (o A4 saía
      cortado — o rodapé usa justify-end no desktop).
   Ganchos estáveis: #csw-eh-f-limpar, .csw-thead-grad, .csw-eh-a4 (Twind é hash). */
@media (max-width: 640px) {
	/* 17/07: consulta RASPLEC (enc_hist_rasplec) ganhou o MESMO ajuste de Limpar e
	   botões (pedido do usuário); o título centralizado segue só no Totolec. */
	#csw-content[data-page="enc_hist_totolec"] #csw-eh-f-limpar,
	#csw-content[data-page="enc_hist_rasplec"] #csw-eh-f-limpar { width: 100%; justify-content: center; }
	#csw-content[data-page="enc_hist_totolec"] .csw-thead-grad { justify-content: center; text-align: center; }
	#csw-content[data-page="enc_hist_totolec"] div:has( > .csw-eh-a4 ),
	#csw-content[data-page="enc_hist_rasplec"] div:has( > .csw-eh-a4 ) { justify-content: center; gap: 10px; }
}

/* ===== Loteria — Lançar Venda (loteria_lancar) — SÓ MOBILE (17/07) ================
   Refino GERAL do mobile (pedido: layout harmônico — antes: semana estreita, dias
   quebrando torto, salvar solto à direita, métodos desalinhados, filtros espremidos).
   Novo: Semana 100%; dias em GRADE 3 colunas; botões Salvar 100% centrados; métodos
   "Como preencher" empilhados 100%; upload PDF empilhado; Vendedor 100%; filtros da
   consulta 100% (De/até dividem a linha). Ganchos = ids estáveis (Twind é hash).
   Desktop intacto. */
@media (max-width: 640px) {
	/* Semana: campo na linha inteira. */
	#csw-content[data-page="loteria_lancar"] div:has( > #csw-lot-semana ) { width: 100%; }
	#csw-content[data-page="loteria_lancar"] #csw-lot-semana { width: 100%; }
	/* Dias da semana: grade uniforme 3 colunas (fim da quebra torta). */
	#csw-content[data-page="loteria_lancar"] #csw-lot-dias { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px 6px; }
	#csw-content[data-page="loteria_lancar"] #csw-lot-dias label { margin-right: 0; }
	/* Botões Salvar (topo e rodapé): linha inteira, centrados. */
	#csw-content[data-page="loteria_lancar"] #csw-lot-save-top,
	#csw-content[data-page="loteria_lancar"] #csw-lot-save { width: 100%; justify-content: center; margin-left: 0; }
	/* Como preencher: os 3 métodos empilhados, mesma largura. */
	#csw-content[data-page="loteria_lancar"] #csw-lot-metodos { display: grid; grid-template-columns: 1fr; gap: 8px; width: 100%; }
	#csw-content[data-page="loteria_lancar"] #csw-lot-metodos button { width: 100%; justify-content: center; }
	/* Upload do PDF (quando visível): arquivo + botão empilhados, largura total. */
	#csw-content[data-page="loteria_lancar"] div:has( > #csw-lot-file ) { flex-direction: column; align-items: stretch; }
	#csw-content[data-page="loteria_lancar"] #csw-lot-parse { width: 100%; justify-content: center; }
	/* Vendedor: select na linha inteira (solta o max-w-md do desktop). */
	#csw-content[data-page="loteria_lancar"] #csw-lot-addvend { width: 100%; max-width: 100%; }
	/* Filtros da consulta: selects em linha própria; De/até dividem uma linha. */
	#csw-content[data-page="loteria_lancar"] #csw-lot-f-sem,
	#csw-content[data-page="loteria_lancar"] #csw-lot-f-vend,
	#csw-content[data-page="loteria_lancar"] #csw-lot-f-term { width: 100%; }
	#csw-content[data-page="loteria_lancar"] #csw-lot-f-de,
	#csw-content[data-page="loteria_lancar"] #csw-lot-f-ate { flex: 1 1 0; min-width: 0; }
}

/* ===== Loteria — Pagamento ao Vendedor (loteria_pag_vend) — SÓ MOBILE (17/07) =====
   Refino fino do mobile (pedido do usuário; desktop intacto — no desktop só entrou o
   ícone lucide da moeda na Conferência, corrigido no app.js):
   1) Vendedor + Semana do acerto lado a lado, 50% cada (o min-w do desktop empurrava
      a semana p/ baixo); botões Atual/Passada dividem a metade por igual.
   2) Card VALOR A PAGAR: empilha e centraliza (o R$ grande quebrava torto ao lado do
      rótulo); valor numa linha só.
   3) Enviar cobrança ao vendedor: 100%, centrado.
   4) Conferência: fonte 16px (as linhas estavam pequenas demais p/ leitura). */
@media (max-width: 640px) {
	/* 1) Vendedor 50% + Semana 50% na mesma linha. */
	#csw-content[data-page="loteria_pag_vend"] div:has( > #csw-lr-vend ) { flex: 1 1 45%; min-width: 0 !important; }
	#csw-content[data-page="loteria_pag_vend"] div:has( > #csw-lr-semana ) { flex: 1 1 45%; min-width: 0; }
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-semana { width: 100%; }
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-semana .csw-lr-sem { flex: 1 1 0; }
	/* 2) Valor a pagar: bloco centralizado, valor sem quebra. */
	#csw-content[data-page="loteria_pag_vend"] div:has( > #csw-lr-apagar ) {
		flex-direction: column; align-items: center; text-align: center; gap: 4px;
	}
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-apagar { white-space: nowrap; }
	/* 3) Botão de cobrança: linha inteira, centrado. */
	#csw-content[data-page="loteria_pag_vend"] div:has( > #csw-lr-cobrar ) { justify-content: center; }
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-cobrar { width: 100%; justify-content: center; }
	/* 4) Conferência: leitura melhor (o container tinha text-sm). */
	#csw-content[data-page="loteria_pag_vend"] div:has( > div > #csw-lr-r-apagar ) { font-size: 16px; }
	/* 5) (17/07, 2ª rodada) Período da semana centralizado. */
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-periodo { text-align: center; }
	/* 6) Botão + dos prêmios: VERDE (estava fantasma — ninguém via que era clicável). */
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-premio-add {
		background: #16a34a !important; border-color: #16a34a !important; color: #fff !important;
	}
	/* 7) Moedas + PIX lado a lado, 50% cada (o min-w do desktop empilhava). */
	#csw-content[data-page="loteria_pag_vend"] div:has( > #csw-lr-moedas ),
	#csw-content[data-page="loteria_pag_vend"] div:has( > #csw-lr-pix ) { flex: 1 1 45%; min-width: 0 !important; }
	/* 8) Recebimentos registrados: título e toggle (Semana atual/passada) centrados. */
	#csw-content[data-page="loteria_pag_vend"] div:has( > div > .csw-lr-lsem ) { justify-content: center; }
	#csw-content[data-page="loteria_pag_vend"] div:has( > div > .csw-lr-lsem ) > h3 { width: 100%; text-align: center; }
	/* 9) Lista: tabela ganha largura mínima e o wrapper vira scroll horizontal DE
	   VERDADE. O pulo do gato: TODA a cadeia acima (main flex → card → host) precisa
	   de min-width:0/max-width:100% — sem isso o flex estica (min-width:auto) até o
	   tamanho da tabela e a TELA corta, em vez de o wrapper scrollar. */
	#csw-content[data-page="loteria_pag_vend"] { min-width: 0; }
	#csw-content[data-page="loteria_pag_vend"] div:has( > #csw-lr-lista ) { min-width: 0; max-width: 100%; }
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-lista { min-width: 0; max-width: 100%; }
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-lista > div {
		overflow-x: auto !important; max-width: 100%; -webkit-overflow-scrolling: touch;
	}
	#csw-content[data-page="loteria_pag_vend"] #csw-lr-lista table { min-width: 620px; }
}

/* ===== Loteria — Encerramento Sede (loteria_enc_sede) — SÓ MOBILE (17/07) =========
   MESMO pacote do Pagamento ao Vendedor (página irmã, ids csw-ls-*): semana com
   botões esticados; período centrado; VALOR A PAGAR empilhado/centrado sem quebra;
   botões + (prêmios E vales) verdes; campos largura total; Moedas+PIX 50/50;
   Conferência 16px; lista com scroll horizontal real. Desktop intacto. */
@media (max-width: 640px) {
	/* Página inteira: 6px de respiro lateral (o p-4 padrão comia largura). */
	#csw-content[data-page="loteria_enc_sede"] { padding-left: 6px !important; padding-right: 6px !important; }
	/* Semana do fechamento: bloco (label + Atual/Passada) CENTRALIZADO na linha. */
	#csw-content[data-page="loteria_enc_sede"] div:has( > div > .csw-ls-sem ) { width: 100%; align-items: center; }
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-periodo { text-align: center; }
	/* Valor a pagar: bloco centralizado, valor numa linha só. */
	#csw-content[data-page="loteria_enc_sede"] div:has( > #csw-ls-apagar ) {
		flex-direction: column; align-items: center; text-align: center; gap: 4px;
	}
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-apagar { white-space: nowrap; }
	/* Valor confirmado: campo na linha inteira (solta o max-w-xs do desktop). */
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-conf { width: 100%; max-width: 100%; }
	/* Prêmios e Vales: caixinha valor+qtd+botão na linha inteira; botões + VERDES. */
	#csw-content[data-page="loteria_enc_sede"] div:has( > #csw-ls-premio-val ),
	#csw-content[data-page="loteria_enc_sede"] div:has( > #csw-ls-vale-val ) { max-width: 100%; }
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-premio-add,
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-vale-add {
		background: #16a34a !important; border-color: #16a34a !important; color: #fff !important;
	}
	/* Moedas + PIX lado a lado, 50% cada. */
	#csw-content[data-page="loteria_enc_sede"] div:has( > #csw-ls-moedas ),
	#csw-content[data-page="loteria_enc_sede"] div:has( > #csw-ls-pix ) { flex: 1 1 45%; min-width: 0 !important; }
	/* Conferência: leitura melhor. */
	#csw-content[data-page="loteria_enc_sede"] div:has( > div > #csw-ls-r-base ) { font-size: 16px; }
	/* Ações: Enviar via WhatsApp + Registrar pagamento lado a lado, 50% cada. */
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-wpp,
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-save { flex: 1 1 45%; justify-content: center; }
	/* Lista de registros: scroll horizontal real (mesma receita da página irmã). */
	#csw-content[data-page="loteria_enc_sede"] { min-width: 0; }
	#csw-content[data-page="loteria_enc_sede"] div:has( > #csw-ls-lista ) { min-width: 0; max-width: 100%; }
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-lista { min-width: 0; max-width: 100%; }
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-lista > div {
		overflow-x: auto !important; max-width: 100%; -webkit-overflow-scrolling: touch;
	}
	#csw-content[data-page="loteria_enc_sede"] #csw-ls-lista table { min-width: 620px; }
}

/* ===== Relatórios Totolec + Rasplec (rel_totolec / rel_rasplec) — SÓ MOBILE (17/07)
   Acabamento (mesma tela p/ os dois slugs): 6px de respiro lateral na página; botão
   Limpar 100%; KPIs (Total vendido/Receita/Devolução...) em 1 por linha — o valor
   ganha a largura inteira e não quebra. Filtros já caíam bem (50/50). Desktop intacto. */
@media (max-width: 640px) {
	#csw-content[data-page="rel_totolec"],
	#csw-content[data-page="rel_rasplec"] { padding-left: 6px !important; padding-right: 6px !important; }
	#csw-content[data-page="rel_totolec"] #csw-rt-limpar,
	#csw-content[data-page="rel_rasplec"] #csw-rt-limpar { width: 100%; justify-content: center; }
	/* 1º filho do host = grade dos KPIs (o 2º é a dos gráficos, já 1 coluna no mobile). */
	#csw-content[data-page="rel_totolec"] #csw-rt-host > div:nth-child(1),
	#csw-content[data-page="rel_rasplec"] #csw-rt-host > div:nth-child(1) { grid-template-columns: 1fr !important; }
}

/* ===== Análise de Vendas (analise_vendas) — SÓ MOBILE (17/07) =====================
   Botões WhatsApp / Ver no mapa (atalhos do reforço) centralizados na linha — o
   ml-auto do desktop os jogava à direita, tortos sob o título. */
@media (max-width: 640px) {
	#csw-content[data-page="analise_vendas"] div:has( > #csw-an-wa ) {
		width: 100%; justify-content: center; margin-left: 0;
	}
	/* Botão Limpar dos filtros: linha inteira. */
	#csw-content[data-page="analise_vendas"] #csw-an-limpar { width: 100%; justify-content: center; }
}

/* ===== Mapeamento de Vendas (mapa_vendas) — SÓ MOBILE (17/07) =====================
   Botão Recarregar dos filtros: linha inteira. */
@media (max-width: 640px) {
	#csw-content[data-page="mapa_vendas"] #csw-mp-load { width: 100%; justify-content: center; }
}

/* ===== Cargos (cargos) — SÓ MOBILE (17/07) ========================================
   Toolbar: Pesquisar 50% + Cadastrar 50% lado a lado (o Pesquisar ocupava a linha
   inteira e empurrava o Cadastrar p/ baixo). Só 2 itens — sem reordenação. */
@media (max-width: 640px) {
	#csw-content[data-page="cargos"] #csw-cf-bar > div:nth-child(1) { grid-column: span 1 / span 1; }
}

/* ===== Configurações (configuracoes) — refinamento visual (17/07) =================
   Desktop + mobile, SÓ aparência (nenhuma função tocada). Ganchos estáveis:
   #csw-cfg-tabs / #csw-cfg-panel / button[data-tab] (+ data-on na aba ativa,
   estampado pelo cfgTabsBar — as classes Twind são hash).
   Objetivos: hierarquia clara na navegação por abas; painéis centrados com largura
   de leitura; toque de profundidade; mobile com abas em trilho (1 linha, scroll)
   e ações em largura total. */
/* Barra de abas: itens mais respirados, cantos superiores suaves, hover perceptível. */
#csw-content[data-page="configuracoes"] #csw-cfg-tabs button[data-tab] {
	padding: 10px 16px; font-weight: 600; border-radius: 10px 10px 0 0;
}
#csw-content[data-page="configuracoes"] #csw-cfg-tabs button[data-tab]:hover { background: #f1f5f9; }
/* Aba ATIVA: fundo azul-claro sutil colado à linha — hierarquia óbvia de onde estou. */
#csw-content[data-page="configuracoes"] #csw-cfg-tabs button[data-tab][data-on] { background: #eff6ff; }
/* Painel: largura de leitura confortável, ALINHADO À ESQUERDA (preferência do
   usuário no desktop — centrado deixava um vão morto à esquerda), respiro entre blocos. */
#csw-content[data-page="configuracoes"] #csw-cfg-panel > div {
	max-width: 920px; margin-left: 0; margin-right: auto;
}
#csw-content[data-page="configuracoes"] #csw-cfg-panel > div + div { margin-top: 16px; }

@media (max-width: 640px) {
	/* Página: 6px de respiro lateral (padrão da fase). */
	#csw-content[data-page="configuracoes"] { padding-left: 6px !important; padding-right: 6px !important; }
	/* Abas em TRILHO: uma linha só com scroll horizontal (7 abas empilhavam torto). */
	#csw-content[data-page="configuracoes"] #csw-cfg-tabs > div {
		flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch;
		scrollbar-width: none;
	}
	#csw-content[data-page="configuracoes"] #csw-cfg-tabs > div::-webkit-scrollbar { display: none; }
	#csw-content[data-page="configuracoes"] #csw-cfg-tabs button[data-tab] { white-space: nowrap; flex: 0 0 auto; }
	/* Campos que carregam max-w-* do desktop: linha inteira no celular. */
	#csw-content[data-page="configuracoes"] #csw-cfg-panel input,
	#csw-content[data-page="configuracoes"] #csw-cfg-panel select { max-width: 100% !important; }
	/* Botões de envio dos formulários: largura total, centrados (toque fácil). */
	#csw-content[data-page="configuracoes"] #csw-cfg-panel button[type="submit"] { width: 100%; justify-content: center; }
}

/* O popup de EDIÇÃO usa #csw-acerto-root e os MESMOS cards do registro, então herda
   todo o estilo de vendas10.css automaticamente — sem regras próprias aqui. */

/* ===== MOBILE: respiro do título de página (TODAS as páginas) =====================
   16/07: no celular o título nascia colado na barra de app / na alça do menu (o
   pageHead tem margin-top 0 e o mb-5 do Twind dá 20px embaixo). Pedido do usuário:
   15px em cima E embaixo, em px. Validado primeiro só em Pagamento e, aprovado,
   estendido a todo o sistema — como o pageHead é a fonte única do cabeçalho, esta
   regra alcança as 40 páginas de uma vez.
   SÓ MOBILE: no desktop o título segue 0 / 20px (mb-5), intocado.
   Especificidade (id + classe) vence o .mb-5 do Twind sem !important. */
@media (max-width: 768px) {
	#csw-content .csw-page-head {
		margin-top: 15px;
		margin-bottom: 15px;
	}
}

/* ===== MOBILE: barra de filtros do PRODUTOS em 3 colunas =========================
   16/07: no celular a barra vinha em 2 colunas (Twind grid-cols-2), então Tipo e
   Status ficavam na 1ª linha e o "Cadastrar" sobrava sozinho numa 2ª. Pedido do
   usuário: os três na MESMA linha, 33% cada. A busca continua em cima, full width.
   >>> ESCOPO: só data-page="produtos" — a barra (#csw-cf-bar) é COMPARTILHADA pelas
   12 páginas de card, que têm outras combinações de filtros; sem o escopo isto
   mexeria em todas. Breakpoint 639.98px = abaixo do `sm:` do Twind (640px), que é
   quem devolve a barra ao layout de desktop.
   Especificidade (id + atributo + id) vence as classes Twind sem !important. */
@media (max-width: 639.98px) {
	#csw-content[data-page="produtos"] #csw-cf-bar {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
	/* 1º filho = campo de busca (tem col-span-2 do Twind): ocupa a linha inteira. */
	#csw-content[data-page="produtos"] #csw-cf-bar > div:first-child {
		grid-column: span 3 / span 3;
	}
	/* ENTRADA TOTOLEC (mobile): Pesquisar (50%) + Cadastrar (50%) na MESMA 1ª linha.
	   O Cadastrar é o ÚLTIMO no DOM (depois dos filtros Produto/Extração/Status +
	   Automação), então uso `order` p/ trazê-lo p/ ao lado da busca sem reordenar o
	   HTML (a barra é compartilhada). Só data-page="entrada_totolec"; desktop intacto. */
	#csw-content[data-page="entrada_totolec"] #csw-cf-bar > div { order: 3; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-bar > div:first-child {
		grid-column: span 1 / span 1; order: 1;
	}
	#csw-content[data-page="entrada_totolec"] #csw-cf-bar > div:has( #csw-cf-new ) { order: 2; }

	/* ENTRADA TOTOLEC — CARD fluido no mobile ------------------------------------
	   As células inline têm `flex`/`min-width` inline (por isso o !important) que no
	   celular quebravam torto. Layout pedido:
	     linha1: Produto 50% · Qtd 25% · Extração 25%
	     linha2: Série 50% · Status 50%   (status REORDENADO p/ subir, via `order`)
	     linha3: Data Entrada 50% · Data Sorteio 50%
	     ações (editar/excluir) ABAIXO, 50% cada — não mais na lateral.
	   Escopo só data-page="entrada_totolec"; desktop intacto. */
	#csw-content[data-page="entrada_totolec"] #csw-cf-list > div > div {
		flex-direction: column; align-items: stretch;
	}
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col] { min-width: 0 !important; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col="produto_nome"]     { flex: 0 0 50% !important; order: 1; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col="quantidade"]       { flex: 0 0 25% !important; order: 2; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col="extracao_label"]   { flex: 0 0 25% !important; order: 3; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col="serie_label"]      { flex: 0 0 50% !important; order: 4; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col="status"]           { flex: 0 0 50% !important; order: 5; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col="data_recebimento"] { flex: 0 0 50% !important; order: 6; }
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-col="data_sorteio"]     { flex: 0 0 50% !important; order: 7; }
	/* bloco de ações (o filho do card que contém os botões) vai p/ baixo, full width */
	#csw-content[data-page="entrada_totolec"] #csw-cf-list > div > div > div:has( [data-cf-del], [data-cf-edit] ) {
		width: 100%; align-self: stretch; padding-left: 0; padding-top: 12px; margin-top: 4px;
		border-left: 0; border-top: 1px solid #f1f5f9; display: flex; gap: 8px;
	}
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-cf-edit],
	#csw-content[data-page="entrada_totolec"] #csw-cf-list [data-cf-del] {
		flex: 1 1 50%; width: auto;
	}

	/* ENTRADA RASPLEC (mobile) — mesmo padrão do Totolec, %s próprias -------------
	   Barra: Pesquisar 50% + Cadastrar 50% na 1ª linha (Cadastrar é o último no DOM,
	   trazido via `order`). Card (reordenado via `order`, DOM intacto):
	     linha1: Produto 50% · Extração 25% · Status 25%
	     linha2: Data Recebimento 50% · Qtd. Recebida 50%
	     ações (editar/excluir) ABAIXO, 50% cada.
	   Escopo só data-page="entrada_rasplec"; desktop intacto. */
	#csw-content[data-page="entrada_rasplec"] #csw-cf-bar > div { order: 3; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-bar > div:first-child { grid-column: span 1 / span 1; order: 1; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-bar > div:has( #csw-cf-new ) { order: 2; }

	#csw-content[data-page="entrada_rasplec"] #csw-cf-list > div > div {
		flex-direction: column; align-items: stretch;
	}
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-col] { min-width: 0 !important; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-col="produto_nome"]     { flex: 0 0 50% !important; order: 1; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-col="extracao_label"]   { flex: 0 0 25% !important; order: 2; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-col="status"]           { flex: 0 0 25% !important; order: 3; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-col="data_recebimento"] { flex: 0 0 50% !important; order: 4; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-col="quantidade"]       { flex: 0 0 50% !important; order: 5; }
	/* margem lateral 4px + padding lateral 8px (px, não rem) só mobile: barra-card
	   (contém #csw-cf-bar) e cada card da lista (#csw-cf-list > div > div). */
	#csw-content[data-page="entrada_rasplec"] > div:has( > #csw-cf-bar ) { margin-left: 4px; margin-right: 4px; padding-left: 8px; padding-right: 8px; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list > div > div { margin-left: 4px; margin-right: 4px; padding-left: 8px; padding-right: 8px; }
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list > div > div > div:has( [data-cf-del], [data-cf-edit] ) {
		width: 100%; align-self: stretch; padding-left: 0; padding-top: 12px; margin-top: 4px;
		border-left: 0; border-top: 1px solid #f1f5f9; display: flex; gap: 8px;
	}
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-cf-edit],
	#csw-content[data-page="entrada_rasplec"] #csw-cf-list [data-cf-del] {
		flex: 1 1 50%; width: auto;
	}

	/* ENCERRAR VENDA (mobile) — histórico abaixo do formulário: padding lateral 8px +
	   margem-topo 5px; título centralizado e maior (20px). px puro; desktop intacto. */
	#csw-acerto-hist { padding-left: 8px; padding-right: 8px; margin-top: 5px; }
	#csw-acerto-hist > div.csw-hist-titulo { text-align: center; font-size: 20px; }
}
