:root {
  /* Tema claro (corrección 05/09/2026, ABCElson.Md: "mude todo o cenario
     para uma cor clara... estamos perdendo em aparencia por usar este
     negro"). Paleta aprovada por Elson a partir da proposta enviada em
     proposta-tema-claro-abc.html. Os NOMES das variáveis não mudaram
     (pra não precisar tocar em cada regra que já as usava) — só o
     significado de "graphite-900" mudou: antes era o fundo mais escuro
     da página, agora é só a tinta escura usada como texto sobre o botão
     âmbar (o fundo da página vira --page-bg, nova variável).
     --graphite-800/700/650 (antes 3 tons de superfície escura) agora são
     todos superfície clara (branco) — mais simples que a proposta original
     do mockup (que tinha um tom "sunken" separado pros inputs), mas
     suficiente aqui porque bordas + tipografia já diferenciam header de
     tabela e inputs do fundo. */
  --page-bg: #f6f7f9;
  --graphite-900: #1b1f23;
  --graphite-800: #ffffff;
  --graphite-700: #ffffff;
  --graphite-650: #eef0f2;
  --steel-500: #2f6690;
  --amber-500: #f2a93b;
  --amber-600: #d68f22;
  --ink-100: #1b1f23;
  --ink-300: #565e66;
  --ink-500: #848b92;
  --red-500: #c9362d;
  --green-500: #3f8a54;
  --font-display: "Space Grotesk", sans-serif;
  --font-body: "Inter", sans-serif;

  /* Escala de "arredondamento" — cantos mais suaves em todo lugar (pedido
     de Elson, 04/09/2026: "contornos e botões mais amigáveis"). */
  --radius-sm: 8px;
  --radius-md: 12px;
  --radius-lg: 18px;
  --radius-pill: 999px;

  --shadow-sm: 0 2px 8px rgba(20,23,26,0.08);
  --shadow-md: 0 10px 28px rgba(20,23,26,0.12);
  --shadow-amber: 0 6px 18px rgba(242,169,59,0.25);

  --ease: 150ms cubic-bezier(0.2, 0.6, 0.3, 1);
}

* { box-sizing: border-box; }

html, body {
  margin: 0; padding: 0;
  background: var(--page-bg);
  color: var(--ink-100);
  font-family: var(--font-body), system-ui, sans-serif;
}

/* A rotina integrada ocupa o iframe e mantém sua própria região de rolagem;
   a única barra e o único rodapé pertencem a workspace.html.
   © 2026 ABC System's. Todos os direitos reservados. ABC System's é propriedade da Bordignon & Costa Asociados. */
html, body {
  height: 100%;
  overflow: hidden;
}
body {
  display: flex;
  flex-direction: column;
}
main.wrap {
  flex: 1 1 auto;
  width: 100%;
  overflow-y: auto;
  min-height: 0;
}
main.wrap.presupuesto-workspace-main { display: flex; flex-direction: column; }

a, button, input, select, textarea, summary {
  transition: background-color var(--ease), border-color var(--ease), color var(--ease),
              box-shadow var(--ease), transform var(--ease), opacity var(--ease);
}

.wrap { margin: 0 auto; padding: 20px 32px; } /* corrección 05/09/2026 (ABCElson.Md): menos espacio perdido, más grid a la vista */
/* Pantallas de dato denso (home, listados) usan el ancho completo de la
   pantalla — corrección de Elson (05/09/2026, ver 18_Guia_UX_UI.md
   sección 4.2): antes .wrap tenía un max-width de 1080px que desperdiciaba
   espacio en monitores anchos. El login sigue angosto a propósito, vía
   .auth-box (max-width propio), no vía .wrap. */


.auth-box { max-width: 420px; margin: 40px auto; }

/* Autenticación standalone: misma identidad clara del aplicativo, sin la
   cabecera operativa que sólo tiene sentido después del login.
   © 2026 ABC System's. Todos os direitos reservados. */
body.auth-page { min-height:100vh; display:grid; grid-template-rows:1fr auto; background:linear-gradient(145deg,#edf3ee 0%,#f8faf7 58%,#eef4ef 100%); }
body.auth-page main.wrap { width:100%; display:grid; place-items:center; padding:32px 20px; }
.auth-page .auth-box { box-sizing:border-box; width:min(460px,100%); max-width:none; margin:0; padding:30px 34px 32px; border:1px solid #d5dfd7; border-radius:14px; background:#fffffff2; box-shadow:0 18px 48px #173b3020; }
.auth-brand { display:flex; justify-content:flex-start; align-items:center; min-height:62px; margin:-4px 0 22px; padding-bottom:18px; border-bottom:1px solid #e1e8e2; }
.auth-brand img { display:block; width:150px; height:62px; object-fit:contain; object-position:left center; mix-blend-mode:multiply; }
.auth-page .auth-box h1 { margin:0 0 8px; color:#123f4a; font-size:2rem; letter-spacing:-.03em; }
.auth-page .auth-box .lead { margin:0 0 24px; color:#58666a; font-size:.96rem; line-height:1.45; }
.auth-page .country-login { margin-bottom:14px; }
.auth-page .country-picker{position:relative;margin-top:6px}
.auth-page .country-picker>summary{box-sizing:border-box;display:flex;align-items:center;min-height:40px;padding:8px 34px 8px 11px;border:1px solid #cbd7cf;border-radius:6px;background:#fff;cursor:pointer;list-style:none}
.auth-page .country-picker>summary::-webkit-details-marker{display:none}
.auth-page .country-picker>summary::after{content:'⌄';position:absolute;right:12px;color:#58666a}
.auth-page .country-picker-menu{position:absolute;z-index:30;top:calc(100% + 5px);left:0;right:0;max-height:min(390px,55vh);overflow:auto;padding:8px;border:1px solid #cbd7cf;border-radius:7px;background:#fff;box-shadow:0 14px 32px #173b3028}
.auth-page .country-picker:not([open]) .country-picker-menu{display:none}
.auth-page .country-picker-menu section{display:grid;gap:2px}
.auth-page .country-picker-menu section+section{margin-top:8px;padding-top:8px;border-top:1px solid #e1e8e2}
.auth-page .country-picker-menu strong{padding:5px 7px;color:#60706a;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em}
.auth-page .country-picker-menu button{width:100%;padding:7px;border:0;border-radius:4px;background:transparent;text-align:left;color:#173b30;cursor:pointer}
.auth-page .country-picker-menu button:hover{background:#edf5f0}
.auth-page .country-picker-menu button:disabled{color:#9aa6a0;cursor:not-allowed}
.auth-page .entity-form { gap:12px; }
.auth-page .form-actions { margin-top:6px; padding-top:18px; border-top:1px solid #e1e8e2; }
.auth-page .auth-links { margin:20px 0 0; }
.auth-footer { padding:16px 20px; text-align:center; font-size:.76rem; color:var(--ink-500); }
.embedded-auth .auth-footer{display:none}
@media(max-width:540px){.auth-page .auth-box{padding:24px 20px}.auth-page .auth-box h1{font-size:1.7rem}}
.auth-links { margin-top: 16px; font-size: 0.85rem; }
.auth-links a { color: var(--steel-500); }

/* Corrección 05/09/2026 (fase 2 da premissa dos 3 idiomas, AGENTS.md
   seção 54) — seletor de bandeiras da tela de login. Mesma regra/mesmo
   critério do site institucional (Apps/site-institucional/app/static/css/
   style.css, seção 5 de 19_Mapa_Recursos_Compartidos.md) — SEGUNDO
   style.css independente, sem CSS compartido de verdade entre os dois
   projetos Docker, então a regra se repete acá com as variáveis próprias
   deste tema (--amber-500 já existe nos dois arquivos com o mesmo nome). */
.lang-switch { display: flex; align-items: center; justify-content: center; gap: 4px; }
.lang-switch a {
  text-decoration: none;
  font-size: 1.35rem;
  line-height: 1;
  padding-bottom: 4px;
  border-bottom: 2px solid transparent;
  opacity: 0.5;
  filter: grayscale(60%);
  transition: opacity 0.15s ease, border-color 0.15s ease, filter 0.15s ease;
}
.lang-switch a:hover,
.lang-switch a.is-active {
  opacity: 1;
  filter: grayscale(0%);
  border-color: var(--amber-500);
}

.form-notice {
  background: rgba(76,154,99,0.1); border: 1px solid rgba(76,154,99,0.3);
  border-radius: var(--radius-md); padding: 14px 18px; margin-bottom: 20px; color: var(--ink-100);
  font-size: 0.9rem; word-break: break-all;
}

h2 { font-family: var(--font-display), sans-serif; font-size: 1.15rem; margin: 32px 0 6px; }

input[readonly] { opacity: 0.6; cursor: not-allowed; }

h1 { font-family: var(--font-display), sans-serif; font-size: 1.6rem; margin: 0 0 8px; }
.lead { color: var(--ink-300); margin: 0 0 28px; }

.entity-group { margin-bottom: 34px; }
.entity-group:first-of-type { margin-top: 8px; }
.entity-group-title {
  font-family: var(--font-display), sans-serif; font-size: 0.78rem; margin: 0 0 14px;
  text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-500);
}

.card-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px;
}
.entity-card {
  display: flex; flex-direction: column; gap: 10px;
  background: var(--graphite-800); border: 1px solid rgba(20,23,26,0.07);
  border-radius: var(--radius-lg); padding: 22px; text-decoration: none; color: var(--ink-100);
  box-shadow: var(--shadow-sm);
}
.entity-card h3 { margin: 0; font-size: 1.02rem; }
.entity-card-cta { color: var(--amber-500); font-size: 0.85rem; }
.entity-card:hover {
  border-color: rgba(242,169,59,0.4); transform: translateY(-2px); box-shadow: var(--shadow-amber);
}

/* Home compacta (08/09/2026): os mesmos números operacionais viram
   mostradores circulares, não barras de progresso — os estados não têm uma
   meta comum, então o anel comunica identidade/cor sem inventar percentual.
   Os atalhos ficam em grupos compactos para todos caberem na primeira tela
   de um monitor amplo. */
.home-dashboard { display: flex; flex-direction: column; gap: 16px; }
.dashboard-sector-title { margin:0 0 8px;padding:0 0 7px;border-bottom:1px solid rgba(20,23,26,.12);color:var(--ink-500);font-size:.72rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase; }
.inicio-dashboard-main { height: 100%; overflow: auto; }
.inicio-dashboard-index { position: relative; z-index: 1; display: grid; gap: 18px; align-content: start; }
.inicio-dashboard-sector { display: grid; gap: 9px; }
.inicio-dashboard-sector h2 {
  margin: 0; padding: 0 0 7px; border-bottom: 1px solid rgba(20,23,26,.12);
  color: var(--ink-500); font-size: .72rem; font-weight: 800;
  letter-spacing: .07em; text-transform: uppercase;
}
.inicio-dashboard-cards { display: grid; grid-template-columns: repeat(auto-fit,minmax(220px,1fr)); gap: 10px; }
.inicio-dashboard-card {
  display: flex; align-items: center; gap: 11px; min-height: 62px; box-sizing: border-box;
  padding: 10px 12px; border: 1px solid rgba(20,23,26,.12); border-radius: 9px;
  background: rgba(255,255,255,.78); color: var(--ink-100); text-decoration: none;
  box-shadow: 0 2px 8px rgba(23,55,41,.04);
}
.inicio-dashboard-card:hover { border-color: var(--green-500); background: rgba(255,255,255,.94); }
.inicio-dashboard-card-mark { flex: 0 0 4px; align-self: stretch; border-radius: 3px; background: var(--green-500); }
.inicio-dashboard-card-copy { display: grid; gap: 3px; min-width: 0; }
.inicio-dashboard-card-copy strong { overflow: hidden; text-overflow: ellipsis; font-size: .86rem; }
.inicio-dashboard-card-copy small { color: var(--ink-500); font-size: .7rem; }
.inicio-dashboard-card-arrow { margin-left: auto; color: var(--green-500); font-size: 1.35rem; line-height: 1; }
@media(max-width:560px){.inicio-dashboard-cards{grid-template-columns:minmax(0,1fr)}}
.home-lead { margin: 0; font-size: 0.9rem; }
.home-indicator-sectors { display: grid; gap: 18px; }
.home-indicator-sector { min-width: 0; }
.home-indicator-subsector { display: grid; gap: 8px; margin-top: 10px; }
.home-indicator-subsector-title { margin: 0; color: var(--ink-100); font-size: .86rem; font-weight: 800; }
.home-kpi-board { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 18px; }
.kpi-block { min-width: 0; }
.kpi-block .entity-group-title { margin-bottom: 8px; }
.kpi-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 8px; }
.kpi-card {
  display: flex; align-items: center; gap: 10px; min-height: 66px;
  background: var(--graphite-800); border: 1px solid rgba(20,23,26,0.07);
  border-radius: var(--radius-md); padding: 8px 10px; box-shadow: var(--shadow-sm);
  text-decoration: none; color: var(--ink-100);
}
.kpi-card:hover { border-color: rgba(242,169,59,0.4); transform: translateY(-1px); box-shadow: var(--shadow-amber); }
.kpi-orb {
  position: relative; display: grid; place-items: center; flex: 0 0 46px; width: 46px; height: 46px;
  border-radius: 50%; background: conic-gradient(var(--kpi-color) 0deg 318deg, rgba(20,23,26,0.09) 318deg 360deg);
}
.kpi-orb::before { content: ""; position: absolute; inset: 5px; border-radius: 50%; background: var(--graphite-800); }
.kpi-count { position: relative; z-index: 1; font-family: var(--font-display), sans-serif; font-size: 1.15rem; font-weight: 700; line-height: 1; }
.kpi-label { color: var(--ink-300); font-size: 0.76rem; line-height: 1.2; }
.home-cadastros { min-width: 0; }
.home-cadastros-title { margin-bottom: 8px; }
.home-menu-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.home-menu-group { padding: 10px 12px; background: var(--graphite-800); border: 1px solid rgba(20,23,26,0.07); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); }
.home-menu-group .entity-group-title { margin-bottom: 6px; }
.home-menu-links { display: grid; gap: 3px; }
.home-menu-link { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--ink-100); text-decoration: none; font-size: 0.84rem; padding: 5px 6px; border-radius: var(--radius-sm); }
.home-menu-link span:last-child { color: var(--amber-500); font-size: 1rem; }
.home-menu-link:hover { background: rgba(242,169,59,0.08); color: var(--amber-600); }

@media (max-width: 1100px) {
  .home-menu-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 640px) {
  .wrap { padding: 14px 16px; }
  .home-menu-grid { grid-template-columns: 1fr; }
  .kpi-row { grid-template-columns: repeat(auto-fit, minmax(145px, 1fr)); }
}

/* Corrección 08/09/2026 (pedido de Elson: "poderia mudar o padrao onde
   esta quote, colocar esta informação centraliza no cabecalho e isso
   poderia ser para todas as janelas que vamos abrir") — título centrado
   de verdad (columna del medio de una grilla de 3), sin importar cuánto
   pese el botón de acción a la derecha (columna 3). ".list-header h1 ~
   *" agarra CUALQUIER cosa que venga después del <h1> (a.btn suelto en
   master_detail.html/empresas_list.html/usuarios_list.html, o el <div
   class="list-header-actions"> envolviendo 2 botones en list.html) sin
   tener que listar cada variante — mismo criterio de ".record-header-
   top" más abajo. */
.list-header {
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center;
  margin-bottom: 20px; gap: 12px;
}
.list-header h1 { grid-column: 2; text-align: center; margin: 0; }
.list-header h1 ~ * { grid-column: 3; justify-self: end; }
.list-header-actions {
  /* Agrupa "Importar CSV" + "+ Nuevo" (pedido de Elson 07/09/2026, ver
     HISTORICO.md §83) — antes .list-header tenía un único botón a
     la derecha; con 2 acciones posibles, se envuelven juntas para que
     justify-content:space-between del padre siga poniendo el bloque
     entero pegado a la derecha, uno al lado del otro. */
  display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
}
.browse-toolbar {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  min-height: 42px; margin-bottom: 12px;
}
.browse-toolbar-primary, .browse-toolbar-search, .productos-browse-more {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 10px 0;
}
.browse-toolbar-primary { margin: 0; }
.browse-toolbar-search { justify-content: flex-end; margin: 0; }
.browse-toolbar-search label { font-size: 0.84rem; color: var(--ink-300); font-weight: 600; }
.browse-toolbar-search input { width: min(360px, 38vw); }
.productos-browse-more { justify-content: center; }
.productos-browse-more[hidden] { display:none; }
.browse-more-actions { font-weight: 600; color: var(--ink-100); }

@media (max-width: 720px) {
  .browse-toolbar { align-items: stretch; flex-direction: column; }
  .browse-toolbar-search { justify-content: flex-start; }
  .browse-toolbar-search input { flex: 1 1 220px; width: auto; }
}

.btn {
  display: inline-flex; align-items: center; gap: 6px; padding: 10px 20px; border-radius: var(--radius-md);
  text-decoration: none; font-size: 0.9rem; font-weight: 600; border: 1px solid transparent;
  cursor: pointer;
}
.btn-primary { background: var(--amber-500); color: var(--graphite-900); box-shadow: var(--shadow-amber); }
.btn-primary:hover { background: var(--amber-600); transform: translateY(-1px); box-shadow: 0 10px 24px rgba(242,169,59,0.3); }
.btn-primary:active { transform: translateY(0); box-shadow: var(--shadow-amber); }
.btn-ghost { background: transparent; border-color: rgba(20,23,26,0.15); color: var(--ink-100); }
.btn-ghost:hover { border-color: rgba(20,23,26,0.3); background: rgba(20,23,26,0.04); }

.table-wrap { overflow-x: auto; border: 1px solid rgba(20,23,26,0.08); border-radius: var(--radius-md); }
/* Browse sempre mantém um registro por linha. Se as colunas excederem a
   largura disponível, a navegação acontece horizontalmente no contêiner. */
.table-wrap > table[data-browse-actions] { width: max-content; min-width: 100%; }
.table-wrap > table[data-browse-actions] > tbody > tr > td { white-space: nowrap; }
/* Los catálogos simples conservan el fondo visible y desplazan sólo la grilla.
   © 2026 ABC System's. Todos os direitos reservados. */
main.wrap.simple-browse-main { display:flex; flex-direction:column; height:100%; overflow:hidden; }
.stock-process-tabs { display:flex; align-items:center; gap:6px; flex:0 0 auto; margin-bottom:10px; border-bottom:1px solid var(--border, #d7dce5); }
.stock-process-tab { display:inline-flex; align-items:center; min-height:38px; padding:7px 13px; border-radius:9px 9px 0 0; color:inherit; text-decoration:none; }
.stock-process-tab.is-active { border-bottom:2px solid currentColor; font-weight:700; }
.stock-process-tab:not(.is-active):hover { background:rgba(255,255,255,.13); }
.simple-browse-main > .browse-toolbar,
.simple-browse-main > .productos-browse-more { flex:0 0 auto; }
.simple-browse-main > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; background:transparent; }
.simple-browse-main > .table-wrap thead th { position:sticky; top:0; z-index:1; }
.document-browse-main > .table-wrap table { min-width:980px; }
.documentos-browse-pagination { min-height:32px; margin:4px 0 0; font-size:.82rem; line-height:1; }
.documentos-browse-pagination .btn { padding:6px 12px; font-size:.82rem; }
.simple-browse-main > .browse-pagination,
.simple-browse-main > #portal-document-pagination,
.simple-browse-main > #control-project-pagination { flex:0 0 auto; }
.portal-document-browse-main > .portal-tabs,
.portal-document-browse-main > .portal-filter { flex:0 0 auto; }
.simple-browse-main > #productos-browse-results,
.simple-browse-main > #documentos-browse-results,
.simple-browse-main > #bal-browse-results { display:flex; flex:1 1 auto; flex-direction:column; min-height:0; overflow:hidden; }
.simple-browse-main > #productos-browse-results > .table-wrap,
.simple-browse-main > #documentos-browse-results > .table-wrap,
.simple-browse-main > #bal-browse-results > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; background:transparent; }
.simple-browse-main > #productos-browse-results > .table-wrap thead th,
.simple-browse-main > #documentos-browse-results > .table-wrap thead th,
.simple-browse-main > #bal-browse-results > .table-wrap thead th { position:sticky; top:0; z-index:1; }
.simple-browse-main > #productos-browse-results > .productos-browse-more { flex:0 0 auto; }
@media (max-width:720px) { main.wrap.simple-browse-main { overflow-y:auto; } .simple-browse-main > .table-wrap, .simple-browse-main > #productos-browse-results > .table-wrap, .simple-browse-main > #documentos-browse-results > .table-wrap, .simple-browse-main > #bal-browse-results > .table-wrap { flex:0 0 auto; max-height:65vh; } .simple-browse-main > #productos-browse-results, .simple-browse-main > #documentos-browse-results, .simple-browse-main > #bal-browse-results { flex:0 0 auto; overflow:visible; } }
/* Browse de Contas ocupa el área disponible; sólo la grilla desplaza registros.
   © 2026 ABC System's. Todos os direitos reservados. */
main.wrap.account-browse-main { display:flex; flex-direction:column; overflow:hidden; }
.account-browse-main > .browse-toolbar { flex:0 0 auto; }
.account-browse-main > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; }
.account-browse-main > .table-wrap thead th { position:sticky; top:0; z-index:1; }
.account-browse-search { flex: 1 1 auto; min-width: 0; }
.account-browse-search input { width: min(420px, 100%); }
.account-sort-button { display: inline-flex; align-items: center; gap: 6px; padding: 0; border: 0; background: none; color: inherit; font: inherit; font-weight: inherit; text-transform: inherit; letter-spacing: inherit; cursor: pointer; }
.account-sort-button:hover, .account-sort-button:focus-visible { color: #fff; }
.account-sort-indicator { font-size: 0.95rem; }
#account-browse-table tbody tr[hidden], #account-browse-empty[hidden] { display: none; }
table { width: 100%; border-collapse: collapse; font-size: 0.88rem; }
thead th {
  text-align: left; padding: 9px 14px; background: var(--graphite-800);
  color: var(--ink-500); font-weight: 600; text-transform: uppercase; font-size: 0.72rem; letter-spacing: 0.04em;
  white-space: nowrap;
}
thead th:first-child { border-top-left-radius: var(--radius-md); }
thead th:last-child { border-top-right-radius: var(--radius-md); }
tbody td { padding: 8px 14px; border-top: 1px solid rgba(20,23,26,0.06); vertical-align: middle; } /* corrección 05/09/2026 (ABCElson.Md): "otimizar ocupação de tela... poucas linhas a disposição na grid" */
tbody tr:hover { background: rgba(20,23,26,0.025); }
.col-actions { white-space: nowrap; text-align: right; }
table[data-browse-actions] > thead > tr > .col-actions,
table[data-browse-actions] > tbody > tr > .browse-actions-source { display: none; }
table[data-browse-actions] > tbody > tr.row-selected {
  background: rgba(242,169,59,0.10);
  box-shadow: inset 3px 0 0 var(--amber-500);
}
table[data-browse-actions] > tbody > tr.row-selected td { border-top-color: rgba(242,169,59,0.28); }
.browse-row-actions:empty { display: none; }
.browse-row-actions:not(:empty) { display: contents; }
.browse-row-actions[hidden] { display: none !important; }
/* Alinhamento/largura pra valores numéricos (Valor unitario/Valor total,
   cantidad, subtotales) — pedido de Elson 07/09/2026: "veja as label de
   campos em tela para nao ficar cortando" — .num já existia como marcador
   em vários templates, mas nunca tinha estilo próprio aqui (só em
   imprimir.html, que tem seu próprio <style>). Sem isto os valores do
   novo picture 18,6 (mais longos, com separador de milhar) podiam
   quebrar linha de forma feia dentro da célula. */
.num { text-align: right; white-space: nowrap; }
.kardex-matrix-main,.kardex-movements-main{display:flex;flex-direction:column;min-height:0;overflow:hidden}
.kardex-matrix-toolbar{flex:0 0 auto}
.kardex-product-heading{min-width:0;display:flex;flex-direction:column;gap:3px}
.kardex-product-heading h2{max-width:min(100%,1050px);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kardex-matrix-hint{flex:0 0 auto;margin:0 0 8px}
.kardex-matrix-wrap,.kardex-movements-wrap{flex:1 1 auto;min-height:0;overflow:auto}
.kardex-matrix{min-width:1180px}
.kardex-matrix thead th{position:sticky;top:0;z-index:2}
.kardex-matrix tbody th,.kardex-matrix tfoot th{padding:8px 14px;text-align:left;white-space:nowrap}
.kardex-matrix tbody th{position:sticky;left:0;z-index:1;background:#fff;border-top:1px solid rgba(20,23,26,.06)}
.kardex-matrix tfoot th,.kardex-matrix tfoot td{position:sticky;bottom:0;background:var(--graphite-800);color:var(--ink-500);padding:9px 14px}
.kardex-balance-cell{cursor:pointer;outline:none}
.kardex-balance-cell:hover{background:rgba(242,169,59,.08)}
.kardex-balance-cell.kardex-cell-selected{background:rgba(242,169,59,.16);box-shadow:inset 0 0 0 2px var(--amber-500)}
.kardex-total{background:rgba(20,23,26,.035)}
.col-actions a {
  color: var(--steel-500); text-decoration: none; margin-right: 4px; font-size: 0.85rem;
  padding: 5px 10px; border-radius: var(--radius-pill);
}
.col-actions a:hover { color: var(--amber-500); background: rgba(242,169,59,0.08); }

.kebab-btn {
  background: none; border: 1px solid transparent; color: var(--ink-300); cursor: pointer;
  padding: 6px 9px; border-radius: var(--radius-sm); display: inline-flex; align-items: center; font-family: inherit;
}
.kebab-btn:hover, .kebab-btn[aria-expanded="true"] {
  color: var(--amber-500); background: rgba(242,169,59,0.08); border-color: rgba(242,169,59,0.25);
}
.kebab-menu {
  position: fixed; z-index: 1000; min-width: 220px; text-align: left;
  background: var(--graphite-700); border: 1px solid rgba(20,23,26,0.12); border-radius: var(--radius-md);
  box-shadow: var(--shadow-md); padding: 6px; display: none; flex-direction: column; gap: 2px;
}
.kebab-menu.is-open { display: flex; }
.kebab-menu a, .kebab-menu > button {
  display: block; width: 100%; text-align: left; background: none; border: none; color: var(--ink-100);
  font-family: inherit; font-size: 0.85rem; padding: 9px 12px; border-radius: var(--radius-sm); cursor: pointer;
  text-decoration: none; margin: 0;
}
.kebab-menu a:hover, .kebab-menu > button:hover { background: rgba(242,169,59,0.1); color: var(--amber-500); }
.kebab-menu .link-danger, .kebab-menu .link-primary { width: 100%; text-align: left; padding: 9px 12px; }
.kebab-menu .inline-form-cancel { padding: 4px 8px 4px 12px; width: 100%; }
.kebab-menu .inline-form { width: 100%; }
.inline-form { display: inline; }
.link-danger {
  background: none; border: none; color: var(--red-500); cursor: pointer;
  font-size: 0.85rem; padding: 5px 10px; text-decoration: none; font-family: inherit;
  border-radius: var(--radius-pill);
}
.link-danger:hover { background: rgba(229,83,75,0.1); }
.link-primary {
  background: none; border: none; color: var(--green-500); cursor: pointer;
  font-size: 0.85rem; padding: 5px 10px; text-decoration: none; font-family: inherit;
  border-radius: var(--radius-pill);
}
.link-primary:hover { background: rgba(76,154,99,0.1); }
/* Acción "Cancelar" de Presupuestos (04/09/2026): a diferencia de las
   demás acciones de la lista, esta lleva un campo de texto obligatorio
   (motivo) junto al botón — ver templates/list.html. */
.inline-form-cancel { display: inline-flex; align-items: center; gap: 6px; vertical-align: middle; }
.inline-form-cancel input[type="text"] { padding: 5px 10px; font-size: 0.8rem; width: 150px; }

/* Campo de comentário do cancelamento de Presupuesto (06/09/2026, ver
   HISTORICO.md §61) — substitui o antigo confirm()/prompt() do
   navegador por uma caixa de verdade na tela, revelada ao clicar em
   "Cancelar" (ver static/js/cancelar-toggle.js). */
.cancelar-presupuesto-wrap { display: inline-block; }
.cancelar-box {
  margin-top: 10px; padding: 14px; border: 1px solid rgba(229,83,75,0.3);
  border-radius: var(--radius-md); background: rgba(229,83,75,0.05);
  max-width: 420px;
}
.cancelar-box label { display: block; font-size: 0.8rem; font-weight: 600; color: var(--ink-200); margin-bottom: 6px; }
.cancelar-box textarea {
  width: 100%; padding: 8px 10px; font-size: 0.85rem; font-family: inherit;
  border: 1px solid rgba(20,23,26,0.15); border-radius: var(--radius-sm); resize: vertical;
}
.cancelar-box-actions { display: flex; gap: 8px; margin-top: 10px; }
.btn-danger { background: var(--red-500); color: #fff; }
.btn-danger:hover { background: #c8433c; }

.badge { padding: 3px 10px; border-radius: var(--radius-pill); font-size: 0.76rem; font-weight: 600; }
.badge-yes { background: rgba(76,154,99,0.18); color: var(--green-500); }
.badge-no { background: rgba(229,83,75,0.14); color: var(--red-500); }
/* Coluna "Orden de Servicio" do browse de Presupuestos (06/09/2026, ver
   HISTORICO.md §64) — distingue visualmente o fundador
   ("Principal") de um complementario. */
.badge-principal { background: rgba(47,102,144,0.16); color: var(--steel-500); }
.badge-complementario { background: rgba(132,139,146,0.16); color: var(--ink-300); }

.empty-state { color: var(--ink-300); }

.entity-form { max-width: 520px; display: flex; flex-direction: column; gap: 18px; }
/* Abas fiscais autorizadas: mesma densidade/grid dos cadastros existentes. */
.entity-form.fiscal-cadastro-form { max-width:none; width:100%; min-height:0; }
.fiscal-cadastro-form > [data-item-tabs] { display:flex; flex-direction:column; flex:1 1 auto; min-height:0; }
.fiscal-cadastro-form .tab-panel { display:flex; flex-direction:column; gap:18px; min-height:0; overflow:auto; }
.fiscal-cadastro-form .tab-panel[hidden] { display:none; }
[data-fiscal-proportion][hidden] { display:none; }
.fiscal-cadastro-form .entity-form--grid { max-width:none; width:100%; grid-template-columns:repeat(3,minmax(0,1fr)); }
.fiscal-cadastro-form #empresa-general .record-header { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px 20px; }
.fiscal-cadastro-form #empresa-general .record-header > h2 { grid-column:1/-1; }
.fiscal-cadastro-form #empresa-general .detail-section { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px 20px; }
.fiscal-cadastro-form #empresa-general .detail-section > h3,
.fiscal-cadastro-form #empresa-general .detail-section > .field-help { grid-column:1/-1; }
.fiscal-cadastro-form .tab-btn:not(.is-active) { color:var(--ink-500); border-bottom-color:transparent; }
@media(max-width:760px) { .fiscal-cadastro-form #empresa-general .detail-section { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media(max-width:540px) { .fiscal-cadastro-form #empresa-general .detail-section { grid-template-columns:1fr; } }
@media(max-width:760px) { .fiscal-cadastro-form .entity-form--grid,.fiscal-cadastro-form #empresa-general .record-header { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media(max-width:540px) { .fiscal-cadastro-form .entity-form--grid,.fiscal-cadastro-form #empresa-general .record-header { grid-template-columns:1fr; } }
/* Corrección 05/09/2026 (pedido de Elson: "olha como esta mal aproveitada
   esta tela" — la pantalla de "Nuevo Presupuesto"/"Alterar" y los
   formularios genéricos de entidad (form.html) quedaban en una sola
   columna angosta de 520px, con toda la pantalla vacía al lado en
   monitores anchos). Modificador opcional — SOLO para pantallas de alta
   (form.html, presupuesto_nuevo.html), NO para login/usuario/empresa/
   recuperar contraseña (esas quedan angostas a propósito, ver
   19_Mapa_Recursos_Compartidos.md sección 5): reparte los campos en
   columnas cuando el ancho da, apila en 1 columna en pantallas angostas
   (auto-fit, sin media query manual). */
.entity-form.entity-form--grid {
  max-width: 1040px; display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  column-gap: 28px; row-gap: 18px;
}
.entity-form--grid .form-row--wide { grid-column: 1 / -1; }
.product-structure-form-main > .entity-form,
.product-structure-form-main .entity-form--grid {
  max-width: none;
  width: 100%;
}
.form-row { display: flex; flex-direction: column; gap: 6px; }
.form-row label { font-size: 0.85rem; color: var(--ink-300); }
.req { color: var(--amber-500); }
.field-help { margin: 0; font-size: 0.78rem; color: var(--ink-500); }

/* Logo da Empresa (pedido de Elson, 06/09/2026, ver HISTORICO.md
   §68) — preview no cadastro de Empresa + checkbox "quitar" em linha. */
.logo-preview-wrap { margin-bottom: 4px; }
.logo-preview { max-height: 70px; max-width: 220px; border-radius: 6px; border: 1px solid rgba(20,23,26,0.14); background: #fff; padding: 4px; }
.checkbox-inline { display: flex; flex-direction: row !important; align-items: center; gap: 6px; font-size: 0.85rem; color: var(--ink-300); }


/* Apontamento de Serviços (Fase B2, 06/09/2026, ver HISTORICO.md
   §71/72) — caixa por ítem na aba "Servicios propios" de la pantalla
   combinada de Orden de Servicio: historial de apontamentos + formulario
   para agregar uno nuevo + "Estornar todos". Mismo criterio visual que
   .cancelar-box (fila que aparece/desaparece dentro de la misma tabla). */
.apontamento-toggle-row > td { padding: 0; border-top: none; }
.apontamento-box {
  margin: 4px 0 14px; padding: 14px 16px; border-radius: var(--radius-sm);
  background: var(--graphite-800); border: 1px solid rgba(20,23,26,0.14);
}
.apontamento-box h4 { margin: 0 0 10px; font-size: 0.9rem; color: var(--ink-100); }
.apontamento-historico { font-size: 0.86rem; }
.apontamento-estornado { opacity: 0.55; text-decoration: line-through; }
.apontamento-memo { display: block; font-size: 0.78rem; color: var(--ink-500); text-decoration: none; }
.apontamento-form { margin-top: 12px; display: flex; flex-direction: column; gap: 10px; max-width: 420px; }
.item-tabs { position: relative; }
.item-tabs-stock-menu { position: absolute; right: 0; top: 0; z-index: 3; }
.item-tabs-stock-menu summary { list-style: none; cursor: pointer; }
.item-tabs-stock-menu summary::-webkit-details-marker { display: none; }
.item-tabs-stock-menu:not([open]) .stock-menu { display: none; }
.item-tabs-stock-menu[open] .stock-menu { display: flex; position: absolute; top: calc(100% + 4px); right: 0; left: auto; min-width: 190px; }
.item-tabs-stock-menu .stock-menu button { border: 0; background: transparent; text-align: left; padding: 9px 12px; cursor: pointer; font: inherit; }
.item-tabs-stock-menu .stock-menu button:hover { background: var(--surface-muted, #f3f4f6); }
.stock-dialog { width: min(900px, calc(100vw - 32px)); max-height: min(80vh, 760px); border: 0; border-radius: 12px; box-shadow: 0 18px 60px rgba(0,0,0,.25); padding: 24px; }
.stock-dialog::backdrop { background: rgba(15, 23, 42, .42); }
.stock-dialog .entity-form { max-width: none; }
.apontamento-box-actions { display: flex; gap: 10px; align-items: center; margin-top: 4px; }
.lancamento-estado-atual { margin: 0 0 10px; font-size: 0.88rem; color: var(--ink-100); }
.gasto-editar-row td { padding: 8px 0; border-top: none; background: rgba(20,23,26,0.03); }
.gasto-editar-form { max-width: 380px; margin: 0; }

input[type="text"], input[type="number"], input[type="date"], select, textarea {
  background: var(--graphite-800); border: 1px solid rgba(20,23,26,0.14);
  border-radius: var(--radius-sm); padding: 10px 14px; color: var(--ink-100); font-size: 0.92rem;
  font-family: inherit;
}
input[type="text"]:hover, input[type="number"]:hover, input[type="date"]:hover, select:hover, textarea:hover {
  border-color: rgba(20,23,26,0.24);
}
input[type="text"]:focus, input[type="number"]:focus, input[type="date"]:focus, select:focus, textarea:focus {
  outline: none; border-color: var(--amber-500); box-shadow: 0 0 0 3px rgba(242,169,59,0.18);
}
input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--amber-500); cursor: pointer; }
select { appearance: auto; }

/* Campo de data dd/mm/aaaa + botão de calendário (ver static/js/date-picker.js
   — o input type="date" nativo fica escondido, só serve pra abrir o seletor
   do navegador; quem vai no form é sempre o texto dd/mm/aaaa). */
.date-field { display: flex; align-items: stretch; gap: 8px; }
.date-field .date-input-text { flex: 1; min-width: 0; }
.date-input-native {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; pointer-events: none;
}
.date-picker-btn {
  flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
  width: 40px; background: var(--graphite-800); border: 1px solid rgba(20,23,26,0.14);
  border-radius: var(--radius-sm); color: var(--ink-300); cursor: pointer; padding: 0;
}
.date-picker-btn:hover { border-color: rgba(242,169,59,0.4); color: var(--amber-500); background: rgba(242,169,59,0.06); }
.date-picker-btn:active { transform: translateY(1px); }

/* Corrección 08/09/2026 (pedido de Elson: "reduza o tamanho da tela
   detalhe ate os botoes aparecerem pois eles estao atras do rodape") —
   .form-actions (Guardar/Cancelar) fica DEPOIS de .item-tabs no fluxo
   normal, que reserva no mínimo 600px pra tabela de itens (10 líneas,
   ver comentario mais acima) — o total (mestre + título + item-tabs)
   passa facilmente da altura visível de <main class="wrap">, empurrando
   os botões bem abaixo do viewport (era preciso rolar bastante pra
   chegar neles). Em vez de reduzir a área reservada pros itens (que já
   tinha sido calculada de propósito pra 10 líneas, pedido anterior),
   .form-actions ganha position: sticky; bottom: 0 — mesmo princípio já
   usado anteriormente na barra operacional/tentado no .item-tabs (§91 Addendum 3, revertido
   no Addendum 4 por bug). AQUI não repete aquele bug: o problema de lá
   era um elemento com min-height:60vh maior que o container de scroll —
   aqui .form-actions não tem min-height nenhum (só a altura natural dos
   botões), então o sticky não tem como "empurrar" nada por cima —
   confirmado com Playwright: fica sempre visível dentro da área de
   main.wrap, sem cobrir o conteúdo, tanto no topo do
   scroll quanto rolado. Fundo opaco (--page-bg) + borda de cima, mesmo
   critério visual do resto (senão o conteúdo que rola por baixo
   apareceria por trás dos botões). */
.form-actions {
  display: flex; gap: 12px; margin-top: 20px; padding: 14px 0;
  position: sticky; bottom: 0; background: var(--page-bg);
  border-top: 1px solid rgba(20,23,26,0.08); z-index: 10;
}

.form-errors {
  background: rgba(229,83,75,0.1); border: 1px solid rgba(229,83,75,0.3);
  border-radius: var(--radius-md); padding: 14px 18px; margin-bottom: 20px; color: #8a2820;
}
.form-errors ul { margin: 0; padding-left: 18px; }

/* Resultado de la importación de Productos por CSV (pedido de Elson
   07/09/2026, ver HISTORICO.md §83) — mismo formato que
   .form-errors, en verde en vez de rojo (--green-500 ya existe en la
   paleta, ver :root). */
.form-success {
  background: rgba(63,138,84,0.1); border: 1px solid rgba(63,138,84,0.3);
  border-radius: var(--radius-md); padding: 14px 18px; margin-bottom: 20px; color: #1f5c34;
}
.form-success ul { margin: 6px 0 0; padding-left: 18px; }
.form-success p:last-child { margin-bottom: 0; }

/* Pantallas maestro-detalhe (ver MASTER_DETAIL_PAIRS en main.py) — el click
   en cualquier parte de la fila (excepto la columna de acciones) ya navega
   y refresca la grilla de detalhe, sin necesitar un link "Ver detalles"
   aparte (pedido de Elson, 04/09/2026). */
tr.row-clickable { cursor: pointer; }
tr.row-clickable:hover { background: rgba(242,169,59,0.05); }
tr.row-selected { background: rgba(242,169,59,0.10); box-shadow: inset 3px 0 0 var(--amber-500); }
tr.row-selected td { border-top-color: rgba(242,169,59,0.28); }
.tag-selected {
  display: inline-block; color: var(--amber-500); background: rgba(242,169,59,0.12);
  font-size: 0.78rem; font-weight: 600; margin-right: 8px; padding: 4px 10px; border-radius: var(--radius-pill);
}
.detail-section { margin-top: 36px; padding-top: 8px; border-top: 1px solid rgba(20,23,26,0.08); }
.master-detail-form { display: grid; gap: 12px; min-width: 0; }
.master-detail-form > .level-toolbar { justify-content: space-between; }
.master-detail-form > .record-header,
.master-detail-form > .detail-section { margin: 0; padding: 14px; border: 1px solid rgba(20,23,26,0.08); border-radius: var(--radius-md); background: transparent; }
.master-detail-form > .detail-section { min-height: 120px; }
.master-detail-form > .record-header > h2,
.master-detail-form > .detail-section > h3 { margin-top: 0; }
/* Cuenta/Endereços: maestro compacto y browse de detalle hasta el pie.
   © 2026 ABC System's. Todos os direitos reservados. */
main.wrap.account-master-form-main { display:flex; flex-direction:column; overflow:hidden; }
main.wrap.master-detail-form-main { display:flex; flex-direction:column; overflow:hidden; }
.account-master-form-main > .master-detail-form { flex:1 1 auto; min-height:0; max-width:none; width:100%; display:flex; flex-direction:column; }
.master-detail-form-main > .master-detail-form { flex:1 1 auto; min-height:0; max-width:none; width:100%; display:flex; flex-direction:column; }
.master-detail-form-main .record-header .entity-form--grid { max-width:none; width:100%; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px 20px; }
.master-detail-form-main .master-detail-form > .level-toolbar,
.master-detail-form-main .master-detail-form > .record-header { flex:0 0 auto; }
.master-detail-form-main .master-detail-form > .detail-section { flex:1 1 auto; min-height:0; display:flex; flex-direction:column; }
.master-detail-form-main .detail-section > .level-toolbar { flex:0 0 auto; }
.master-detail-form-main .detail-section > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; }
.master-detail-form-main .detail-section > .table-wrap thead th { position:sticky; top:0; z-index:1; }
.master-detail-form-main .detail-section > .entity-form--grid { max-width:none; width:100%; min-height:0; overflow-y:auto; align-content:start; }
/* Premissa visual canônica: todo mestre/detalhe deixa o fundo da aplicação
   e a marca d'água visíveis. A regra pertence ao componente compartilhado;
   não pode ficar restrita a Contas/Chassis nem ser reimplementada por rotina.
   © 2026 ABC System's. Todos os direitos reservados. */
.account-master-form-main .record-header .entity-form--grid { max-width:none; width:100%; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px 20px; }
.account-master-form-main .master-detail-form > .level-toolbar,
.account-master-form-main .master-detail-form > .record-header { flex:0 0 auto; }
.account-master-form-main .master-detail-form > .detail-section { flex:1 1 auto; min-height:0; display:flex; flex-direction:column; }
.account-master-form-main .detail-section > .level-toolbar { flex:0 0 auto; }
.account-master-form-main .detail-section > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; }
.account-master-form-main .detail-section > .table-wrap thead th { position:sticky; top:0; z-index:1; }
.account-legacy-document { margin:8px 0 0; font-size:.82rem; color:var(--ink-300); }
main.wrap.account-detail-main { display:flex; flex-direction:column; overflow:hidden; }
.account-detail-main > .record-header { flex:0 0 auto; }
.account-detail-main > .detail-section { flex:1 1 auto; min-height:0; margin-top:12px; display:flex; flex-direction:column; }
.account-detail-main > .detail-section > .level-toolbar,
.account-detail-main > .detail-section > .list-header { flex:0 0 auto; }
.account-detail-main > .detail-section > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; }
.account-detail-main > .detail-section > .table-wrap thead th { position:sticky; top:0; z-index:1; }
@media (max-width:760px) { .account-master-form-main .record-header .entity-form--grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:540px) { .account-master-form-main .record-header .entity-form--grid { grid-template-columns:1fr; } }
@media (max-width:760px) { .master-detail-form-main .record-header .entity-form--grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:540px) { .master-detail-form-main .record-header .entity-form--grid { grid-template-columns:1fr; } }

/* Inventário físico usa o mesmo contrato visual de browse e mestre/detalhe.
   Somente a grilha ativa desloca; mestre, abas e ações permanecem compactos.
   © 2026 ABC System's. Todos os direitos reservados. */
.inventory-summary-line { display:flex; align-items:center; gap:8px 18px; flex-wrap:wrap; flex:0 0 auto; min-height:30px; padding:0 0 8px; color:var(--ink-300); font-size:.84rem; border-bottom:1px solid rgba(20,23,26,.08); }
.inventory-summary-line strong { color:var(--ink-100); font-size:1rem; }
.inventory-main > .detail-section { margin-top:12px; padding-top:0; border-top:0; overflow:hidden; }
.inventory-main > .detail-section > .item-tabs { flex:1 1 auto; min-height:0; max-height:none; margin-top:0; padding-top:0; border-top:0; overflow:hidden; }
.inventory-main .item-tabs > .tab-list { margin-bottom:8px; overflow-x:auto; overflow-y:hidden; flex-wrap:nowrap; white-space:nowrap; }
.manual-page .manual-description{max-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inventory-detail-toolbar { display:flex; align-items:center; justify-content:space-between; gap:12px; flex:0 0 auto; min-height:38px; margin-bottom:6px; }
.inventory-tab-context { display:flex; align-items:center; justify-content:space-between; gap:12px; width:100%; min-width:0; }
.inventory-tab-context[hidden] { display:none; }
.inventory-state-legend { margin:0; gap:6px; }
.inventory-state-legend .legenda-item { padding:4px 9px; background:transparent; }
.inventory-state-legend .kpi-dot { width:10px; height:10px; flex-basis:10px; }
.inventory-state-filter { border:1px solid transparent; color:inherit; font:inherit; cursor:pointer; }
.inventory-state-filter:hover { border-color:rgba(47,102,144,.42); }
.inventory-state-filter.is-active { border-color:var(--steel-500); background:rgba(47,102,144,.10); color:var(--steel-500); }
.inventory-state-filter:focus-visible { outline:2px solid var(--steel-500); outline-offset:2px; }
.inventory-mission-legend { align-items:center; flex-wrap:wrap; }
.inventory-legend-group { display:inline-flex; align-items:center; gap:6px; }
.inventory-legend-label { color:var(--ink-300); font-size:.76rem; font-weight:700; text-transform:uppercase; letter-spacing:.03em; }
.inventory-state-pending { background:#9e9e9e; }
.inventory-state-assigned { background:#2f6690; }
.inventory-state-completed { background:#3f8a54; }
.inventory-state-cancelled { background:#c9362d; }
.collector-status { display:inline-flex; align-items:center; min-height:22px; padding:3px 9px; border-radius:999px; font-size:.78rem; font-weight:700; white-space:nowrap; }
.collector-status-working { background:rgba(76,154,99,.18); color:var(--green-500); }
.collector-status-warning { background:rgba(224,167,42,.22); color:#8a5b00; }
.collector-status-critical { background:rgba(229,83,75,.16); color:var(--red-500); }
.collector-status-offline { background:rgba(110,118,126,.16); color:#687078; }
.collector-status-waiting { background:rgba(47,102,144,.12); color:var(--steel-500); }
.inventory-page-filters { min-height:34px; margin-bottom:6px; }
.inventory-page-filters .browse-toolbar-primary { width:100%; }
.inventory-page-filters label { display:flex; align-items:center; gap:6px; font-size:.8rem; color:var(--ink-300); }
.inventory-page-filters input,.inventory-page-filters select { padding:6px 8px; }
.inventory-dialog { width:min(680px,calc(100vw - 32px)); }
.inventory-dialog-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px 16px; }
.inventory-dialog-grid label { display:grid; gap:5px; min-width:0; font-size:.82rem; color:var(--ink-300); }
.inventory-dialog-grid input,.inventory-dialog-grid select { width:100%; min-width:0; }
.inventory-dialog-wide { grid-column:1/-1; }
.inventory-main .tab-panel { flex:1 1 auto; min-height:0; overflow:auto; padding-top:4px; }
.inventory-main .tab-panel > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; background:transparent; }
.inventory-main .tab-panel > .table-wrap thead th { position:sticky; top:0; z-index:1; }
.inventory-main .tab-panel > .browse-toolbar { margin-bottom:8px; }
.inventory-main .record-campos-grid { gap:8px 20px; }
.inventory-main .record-campo { min-width:0; }
.inventory-main .inventory-create-form { flex:1 1 auto; min-height:0; max-width:none; width:100%; display:flex; flex-direction:column; }
.inventory-main .inventory-create-form > .record-header { flex:0 0 auto; }
.inventory-main .inventory-create-form > .detail-section { flex:1 1 auto; min-height:0; display:flex; flex-direction:column; }
@media (max-width:720px) {
  .inventory-detail-toolbar { align-items:flex-start; flex-direction:column; }
  .inventory-main > .detail-section { overflow:visible; }
  .inventory-main > .detail-section > .item-tabs { overflow:visible; }
  .inventory-main .tab-panel { overflow:visible; }
}

/* Corrección 05/09/2026 (manual de referencia, DocsReference/
   ABC_gestaoservicos.pdf, pág. 15): punto de color por estado en cada
   fila del browse mestre (Presupuesto/OS). Reversão 06/09/2026 (pedido
   de Elson, ver HISTORICO.md §59): en la columna de la lista el
   punto ahora va SOLO (.estado-dot-only, sin margen para texto al
   lado) — el texto sigue en title/aria-label; en el record-header
   (mestre+detalhe de un registro puntual) sigue igual que siempre,
   punto + texto en el <h1>. */
.estado-dot {
  display: inline-block; width: 9px; height: 9px; border-radius: 50%;
  margin-right: 6px; vertical-align: middle;
}
.estado-dot-only { width: 14px; height: 14px; margin-right: 0; }
.col-estado { text-align: center; }

/* Panel "Leyenda" (pedido de Elson, 06/09/2026) — <details>/<summary>
   nativos arriba del browse de Presupuesto/OS, mismo dato que los cards
   de la home (color + descripción + conteo por estado), ver
   estado_legenda en list_entity(). */
.legenda-estado { margin-bottom: 16px; }
.legenda-estado summary {
  cursor: pointer; display: inline-flex; align-items: center; gap: 6px;
  font-size: 0.85rem; font-weight: 600; color: var(--ink-300); list-style: none;
}
.legenda-estado summary::-webkit-details-marker { display: none; }
.legenda-panel { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 10px; }
.legenda-item {
  display: inline-flex; align-items: center; gap: 6px; background: var(--graphite-800);
  border: 1px solid rgba(20,23,26,0.07); border-radius: var(--radius-md);
  padding: 6px 12px; font-size: 0.82rem; color: var(--ink-100);
}
.kpi-dot {
  display: inline-block; flex: 0 0 12px; width: 12px; height: 12px;
  border-radius: 50%; border: 1px solid rgba(20,23,26,0.16);
}
.legenda-count { font-weight: 700; color: var(--ink-300); }

/* Ítems de Presupuesto/OS agrupados por tipo (Repuestos/Servicios
   propios/Servicios de terceros/Otros gastos), con subtotal por grupo y
   total general — mismo criterio visual del manual de referencia. */
.detail-group-title {
  margin: 22px 0 8px; font-size: 0.85rem; color: var(--ink-300);
  text-transform: uppercase; letter-spacing: 0.04em;
}
.detail-group-title:first-of-type { margin-top: 8px; }
tr.detail-group-subtotal td {
  font-weight: 600; color: var(--ink-100);
  border-top: 1px solid rgba(20,23,26,0.12);
}
.detail-total {
  text-align: right; font-weight: 700; font-size: 1.05rem; margin: 14px 4px 0;
  color: var(--amber-500);
}

/* Resumen por agrupador (pedido de Elson, 07/09/2026, ver
   HISTORICO.md §75) — clic sobre .detail-total abre/cierra el
   resumen; solo se vuelve clickable (botón) cuando hay resumo_agrupador
   con datos, ver list.html. */
.detail-total-clickable {
  display: block; width: 100%; background: none; border: none; cursor: pointer;
  font-family: inherit;
}
.detail-total-clickable:hover { text-decoration: underline; }
.detail-total-hint { font-size: 0.78rem; font-weight: 400; color: var(--ink-500); }
.resumo-agrupador-box {
  margin: 4px 4px 14px; padding: 14px 16px; border-radius: var(--radius-sm);
  background: var(--graphite-800); border: 1px solid rgba(20,23,26,0.14);
}
.resumo-agrupador-box h4 { margin: 0 0 10px; font-size: 0.9rem; color: var(--ink-100); }
.resumo-agrupador-tabla { font-size: 0.86rem; width: 100%; }
.resumo-agrupador-tabla tfoot td { font-weight: 700; border-top: 1px solid rgba(20,23,26,0.12); }
/* Total apontado (totalizador de tempo, pedido de Elson 07/09/2026) —
   mismo criterio visual que .detail-total, dentro de la caja de
   apontamento (ver .apontamento-box arriba). */
.apontamento-total {
  text-align: right; font-weight: 700; font-size: 0.92rem; margin: 8px 2px 12px;
  color: var(--amber-500);
}

/* Grilla de carga rápida de ítems (pedido de Elson, 05/09/2026 — ver
   static/js/item-grid.js y create_detail_grid en main.py).

   Corrección 07/09/2026 (noturno) — estas reglas apuntaban a ".item-grid
   input"/".item-grid .grid-remove-row"/etc. porque ese <div> envolvía el
   <table> entero de la grilla. Desde que presupuesto_nuevo.html unificó
   la tabla de ítems ya guardados y la grilla de carga en un solo <table>
   (ver "por que ainda existe dois quadros aqui" ahí y en item-grid.js),
   el <tbody> de carga (id="grid-tbody-<cod>") ya NO vive dentro de
   ".item-grid" (que pasó a envolver solo el aviso/botón "+ Agregar
   línea", debajo de la tabla) — estas reglas pasan a apuntar a
   ".item-grid-body" (clase puesta en ese <tbody>) en vez de ".item-grid". */
.item-grid-body input[type="text"] { width: 100%; min-width: 160px; }
/* Corrección 08/09/2026 — Cantidad/Valor unitario/Valor total/Precio de
   lista pasaron de <input type="number"> a <input type="text"
   inputmode="decimal" data-decimal-mask> (ver static/js/decimal-mask.js,
   pedido de Elson: campos sin separador de milhar mientras se tipeaba).
   Este selector cubre ambos por las dudas de algún <input type="number">
   remanente en otra pantalla, y el nuevo [data-decimal-mask] mantiene el
   mismo ancho angosto que tenían antes (no es el input[type="text"] ancho
   de 100% de la regla de arriba). */
.item-grid-body input[type="number"], .item-grid-body input[data-decimal-mask] { width: 100px; }
/* Corrección 08/09/2026 (pedido directo de Elson): TODOS los campos con
   data-decimal-mask (esta grilla, el formulario genérico de
   _campos_form.html, y "Registrar gastos" en list.html) tienen que quedar
   con el valor alineado A LA DERECHA — mismo criterio visual que un
   <input type="number"> nativo (que alinea a la derecha por default del
   browser) o el ".num" que ya usan las columnas numéricas de las tablas
   (ver más abajo). Al pasar de type="number" a type="text" se perdía ese
   alineado (texto alinea a la izquierda por default, distinto de number)
   — esta regla es GLOBAL sobre el atributo [data-decimal-mask], no una
   clase puntual, para que cubra automáticamente cualquier pantalla
   presente o futura que use este atributo, sin tener que acordarse de
   repetir la regla cada vez. */
input[data-decimal-mask] { text-align: right; }
.item-grid-body input.grid-unitario, .item-grid-body input.grid-total {
  /* picture 18,6 (pedido de Elson 07/09/2026) é bem mais longo que o
     0,00 anterior — larga o suficiente pra não cortar o valor digitado. */
  width: 150px;
}
.item-grid-body input[readonly] { opacity: 0.75; }
.item-grid-body .grid-remove-row {
  background: none; border: none; color: var(--red-500); cursor: pointer; font-size: 0.95rem;
}
.item-grid .list-header { margin-top: 10px; }

/* Aba Repuestos — Sigla (autocompletar del catálogo de Productos) +
   Precio de lista (pedido de Elson, 07/09/2026 tarde — ver
   static/js/item-grid.js: sugerirProductoPieza/buscarProductos). */
.item-grid-body input.grid-sigla { width: 140px; }
.item-grid-body input.grid-precio-lista { width: 130px; background: var(--page-bg); }
.item-grid-body td[style*="position:relative"] { position: relative; }
.grid-sigla-dropdown {
  /* Caja de consulta con 2 columnas alineadas (Sigla | Descripción) —
     corrección 08/09/2026 (Elson: "as colunas estar bagunçadas"). Ancho
     mayor que antes para que la descripción (truncada a 40 caracteres en
     JS, ver truncarDescripcionDropdown) entre sin comprimirse de más.
     position:fixed con left/top calculados en JS (buscarProductos, item-
     grid.js) — NO position:absolute: un position:absolute normal queda
     recortado por el overflow-x:auto de .table-wrap (overflow-y efectivo
     "auto" en cuanto se define overflow-x, regla del spec CSS) — mismo
     bug ya documentado y corregido en row-menu.js/.kebab-menu. Elson
     confirmó en producción (08/09/2026): el fetch volvía con los
     productos correctos, pero el dropdown quedaba invisible (recortado),
     no visible en pantalla — no era bug de datos. */
  position: fixed; z-index: 1000; min-width: 320px; max-width: 480px;
  background: #fff; border: 1px solid var(--border-color, #d8dce1); border-radius: 6px;
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.12); max-height: 220px; overflow-y: auto;
}
.grid-sigla-dropdown-item {
  display: flex; align-items: baseline; gap: 10px; padding: 6px 10px; font-size: 0.85rem; cursor: pointer;
}
.grid-sigla-dropdown-item:hover { background: var(--page-bg); }
.grid-sigla-dropdown-item.is-active {
  background: rgba(242,169,59,0.15); color: var(--ink-100); outline: 1px solid rgba(242,169,59,0.55);
}
.grid-sigla-dropdown-col-sigla {
  flex: 0 0 auto; min-width: 64px; font-weight: 600; white-space: nowrap;
}
.grid-sigla-dropdown-col-desc {
  flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* Cabecera de datos mestres del registro seleccionado (Presupuesto/OS) —
   pedido de Elson, 05/09/2026 (00_Notas_Tecnicas_Projeto.md sección 39):
   al entrar al mestre+detalhe de un registro puntual, el browse completo
   se esconde y la parte de arriba pasa a mostrar solo los datos de ESE
   registro (con sus propias acciones) — antes se seguía mostrando la
   lista entera arriba, redundante con el "Visualizar" que ya trajo hasta
   acá (ver list.html). */
.back-link {
  display: inline-block; color: var(--ink-300); text-decoration: none; font-size: 0.85rem; margin-bottom: 10px;
}
.back-link:hover { color: var(--amber-500); }
.record-header { margin-bottom: 8px; }
/* Corrección 08/09/2026 (pedido de Elson, mismo día — ver comentario en
   list.html): título centrado de verdad. Grilla de 3 columnas (1fr auto
   1fr) — el back-link va a la columna 1 (arriba, alineado con el
   título), el <h1> a la columna 2 (centrado), los botones de acción a
   la columna 3 (pegados a la derecha) — ya no comparten un <div> el
   back-link y el título, así el ancho de cada lado no empuja al título
   fuera del centro real. */
.record-header-top {
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 16px; margin-bottom: 18px;
}
.record-header-top .back-link { grid-column: 1; margin-bottom: 0; }
.record-header-top h1 { grid-column: 2; margin: 0; display: flex; align-items: center; justify-content: center; text-align: center; }
.record-header-actions { grid-column: 3; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; justify-self: end; }
.record-campos-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 4px 28px;
  border: 1px solid rgba(20,23,26,0.08); border-radius: var(--radius-md); padding: 16px 20px; margin-bottom: 10px;
}
.record-campo { border-bottom: 1px solid rgba(20,23,26,0.06); padding: 6px 0; font-size: 0.88rem; }
.record-campo .label {
  display: block; color: var(--ink-500); font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.03em; margin-bottom: 2px;
}
/* Corrección 08/09/2026 (pedido de Elson: "o campo observacao que tende
   a ficar maior reposicionar para a terceira linha deste quadro
   mestre") — campos largos (hoy solo "Motivo de apertura/observación"
   del Presupuesto, único "textarea" que aparece en este header; ver
   _campos_para_exibicao/campos_header en main.py, que ya los manda al
   final de la lista) ocupan el ancho completo de la grilla en vez de
   competir por una columna de 200px — terminan solos en su propia fila,
   abajo de los campos cortos. */
.record-campo--full { grid-column: 1 / -1; }
.record-campo--full .label { margin-bottom: 4px; }

/* Abas (flips) de ítems por tipo — Repuestos/Servicios propios/Servicios
   de terceros/Otros gastos (pedido de Elson, sección 39): reemplaza las
   secciones apiladas de la corrección anterior (05/09/2026, sección 37).
   Vanilla JS, ver static/js/item-tabs.js.

   Corrección 08/09/2026 (pedido de Elson: "a parte onde alimentamos os
   itens... precisa ter pelo menos 60% da tela e uma grade de pelo menos
   10 itens") — .item-tabs pasa a reservar un mínimo de 60% de la altura
   visible (60vh) y la aba activa (.tab-panel) se estira en columna para
   ocupar ese espacio. Dentro de la aba hay 2 tablas (mismo componente en
   presupuesto_nuevo.html Y list.html — ver comentario ahí): la de ítems
   YA guardados (secundaria/histórico, subtotal) y la .item-grid (donde
   se cargan líneas nuevas — "onde alimentamos"). Se distinguen por CSS
   con selectores de hijo directo (">"), sin depender del orden en que
   aparecen (que es distinto entre las 2 pantallas): ".tab-panel >
   .table-wrap" es siempre la de ítems ya guardados; ".item-grid >
   .table-wrap" es siempre la grilla de carga. La de carga recibe el
   grueso del espacio y una altura mínima calculada para 10 líneas (medida
   real en el browser: thead 32.5px + 10 × fila-con-<input> 56.5px ≈
   600px) — no cambia cuántas líneas en blanco se pre-cargan (eso sigue
   siendo 1, pedido explícito de Elson 05/09/2026, "um ja chega"), solo
   el espacio reservado para verlas sin scroll a medida que se van
   agregando con "+ Agregar línea". Cada tabla rola por sí sola
   (overflow-y) cuando se pasa de su alto — nunca la página entera
   (mismo espíritu del layout de 3 filas fixas de arriba, sección "3
   linhas fixas"). */
/* Corrección 08/09/2026, revertida no mesmo dia (bug real confirmado —
   ver HISTORICO.md 91 Addendum 4). Pedido original de Elson
   (mesma mensagem do título centrado): "o quadro do itens ficar fixo
   no rodape... para nao ficar saltando com movimentos do mouse" — a
   implementação usou position: sticky; bottom: 0 relativo ao scroll
   de <main class="wrap">. PROBLEMA: .item-tabs tem min-height: 60vh,
   e quando essa altura (mais o resto do conteúdo dentro dele) passa a
   altura visível de main.wrap, o sticky com bottom:0 calcula um
   deslocamento que empurra .item-tabs PARA CIMA, sobrepondo os campos
   do mestre (.entity-form) e vazando por baixo do rodapé — bug
   confirmado com Playwright + render real dos templates (coordenadas:
   .item-tabs.top ficava dentro do range vertical de .entity-form).
   Removido position: sticky; o resto (min-height: 60vh, borda
   superior, fundo opaco) continua igual — .item-tabs volta a ficar em
   fluxo normal, abaixo do mestre, rolando dentro de main.wrap como
   qualquer outro conteúdo. O pedido de "fixo no rodape sem saltar"
   fica pendente de uma nova abordagem (por exemplo sticky só na aba/
   tab-list interna, não no container inteiro todo) — nao reimplementar
   com este mesmo padrao sem testar altura minima vs. altura da
   viewport antes. */
/* Corrección 08/09/2026 (pedido de Elson: "colocar uma barra de rolagem
   dentro do quadro" — mesmo espírito visual da tela "Visualizar", que
   já rola por dentro sem estourar a página). Antes .item-tabs só tinha
   min-height: 60vh (sem limite de cima) — o quadro sempre CRESCIA pra
   caber toda a tabela, empurrando .form-actions/rodapé pra baixo (ver
   §91 Addendum 6) e obrigando a rolar a PÁGINA TODA (main.wrap) pra
   ver os últimos itens, em vez de rolar só dentro do quadro. Trocado
   min-height por max-height: agora .item-tabs NUNCA passa de 60vh — o
   excesso de linhas (mais que a área calculada pra ~10 items, ver
   .tab-panel > .table-wrap abaixo) passa a rolar POR DENTRO da própria
   tabela (overflow-y: auto, que essa regra já tinha, só não fazia
   efeito sem um limite de altura no pai pra "empurrar" contra). */
.item-tabs {
  margin-top: 28px; display: flex; flex-direction: column; max-height: 60vh;
  background: transparent;
  border-top: 1px solid rgba(20,23,26,0.08); padding-top: 12px;
}
.tab-list {
  display: flex; flex-wrap: wrap; gap: 4px; border-bottom: 1px solid rgba(20,23,26,0.1); margin-bottom: 20px;
  flex-shrink: 0;
}
.tab-btn {
  background: none; border: none; border-bottom: 2px solid transparent; color: var(--ink-300); cursor: pointer;
  font-family: inherit; font-size: 0.88rem; font-weight: 600; padding: 10px 16px; margin-bottom: -1px;
}
.tab-btn:hover { color: var(--ink-100); }
.tab-btn.is-active { color: var(--amber-500); border-bottom-color: var(--amber-500); }

/* Movimiento de Caja: seis vistas del mismo contrato RC/caja, sin layout paralelo. */
main.wrap.cash-workspace-main { overflow:hidden; }
.cash-workspace { display:flex; flex:1 1 auto; flex-direction:column; gap:8px; min-width:0; min-height:0; }
.cash-workspace .browse-toolbar { flex:0 0 auto; margin-bottom:0; }
.cash-filters .browse-toolbar-primary { display:flex; align-items:end; gap:12px; flex-wrap:wrap; }
.cash-period { display:flex; align-items:end; gap:8px; }
.cash-period label { display:grid; gap:3px; font-size:.76rem; }
.cash-period input { padding:6px 8px; }
.cash-tabs.item-tabs { flex:1 1 auto; min-height:0; max-height:none; margin-top:0; overflow:hidden; }
.cash-tabs .tab-list { overflow-x:auto; overflow-y:hidden; white-space:nowrap; flex-wrap:nowrap; margin-bottom:8px; }
.cash-tabs .tab-panel { padding-top:4px; overflow:auto; }
.cash-tabs .tab-panel > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; }
/* Contrato canônico de imagem do produto: Movimentos Financeiros usa a
   superfície única da aplicação. Abas, formulários auxiliares e browses
   deixam o fundo da página aparecer; somente ações e estados preservam cor. */
.cash-workspace,
.cash-workspace .browse-toolbar,
.cash-tabs.item-tabs,
.cash-tabs .tab-panel,
.cash-tabs .table-wrap,
.cash-tabs table,
.cash-tabs thead,
.cash-tabs tbody,
.cash-tabs tr,
.cash-tabs td,
.cash-tabs input,
.cash-tabs select,
.cash-tabs textarea,
.cash-detail-lines,
.cash-remittance-totals > div,
.cash-book-detail td,
.cash-balance-before { background:transparent; }
.cash-main-browse { width:100%; }
.cash-empty-row td { height:100%; padding:28px 16px; color:var(--ink-300); text-align:center; vertical-align:top; }
.cash-summary { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:12px; }
.cash-summary .section-card { display:grid; gap:6px; margin:0; }
.cash-summary strong { font-size:1.5rem; }
.cash-action-form { display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:10px; align-items:end; margin-bottom:12px; }
.cash-action-form label { display:grid; gap:4px; }
.cash-pending { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:10px 12px; border-bottom:1px solid rgba(27,31,35,.14); }
.cash-period-shortcuts,.cash-currency-tabs{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
/* Moedas: browse mestre de tela completa; ao abrir a linha, tela de detalhe.
   Mestre = data + país; detalhe = moeda + valor. Sem controles inventados.
   © 2026 ABC System's. Todos os direitos reservados. */
main.wrap.currency-browse-main,main.wrap.currency-detail-main{display:flex;flex-direction:column;overflow:hidden}
.currency-browse-main>.browse-toolbar{flex:0 0 auto}
.currency-browse-main>.currency-master{flex:1 1 auto;min-height:0;overflow:auto;margin:0}
.currency-master thead th,.currency-detail thead th{position:sticky;top:0;z-index:1}
.currency-detail-main>.currency-selected-master{flex:0 0 auto}
.currency-detail-main>.currency-maintenance-form{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.currency-maintenance-form>.currency-selected-master{flex:0 0 auto}
.currency-maintenance-form>.currency-detail{flex:1 1 auto;min-height:160px;margin-top:12px;display:flex;flex-direction:column;overflow:hidden}
.currency-detail>.level-toolbar{flex:0 0 auto}
.currency-detail>.table-wrap{flex:1 1 auto;min-height:0;overflow:auto;margin:0}
.finance-receipt-detail-main>.detail-section{margin-top:18px;padding-top:0;border-top:0}
.currency-value-input{width:100%;min-width:120px;padding:2px 0;border:0;border-bottom:1px solid var(--ink-300);border-radius:0;background:transparent;box-shadow:none;text-align:right}
.currency-value-input:focus{outline:2px solid var(--amber-500);outline-offset:2px}
@media(max-width:640px){.currency-detail-main>.currency-detail{min-height:140px}}
.address-map-picker{grid-column:1/-1;margin-top:12px;padding:14px;border:1px solid var(--border,#d9dee3);border-radius:var(--radius-md);background:var(--surface,#fff)}
.address-map-picker h3,.address-map-picker p{margin-top:0}
.address-map-panel{margin-top:10px}
#address-map{height:min(52vh,460px);min-height:300px;border:1px solid var(--border,#d9dee3);border-radius:var(--radius-md);background:#eef2f4}
.cash-currency-tabs{flex:0 0 auto;margin:6px 0}
.cash-currency-tabs .is-active{background:var(--color-primary,#276749);color:#fff}
.cash-book .panel-head{flex:0 0 auto}
.cash-book-currency{min-height:0;overflow:auto}
.cash-book-row td{white-space:nowrap}
.cash-expand{border:0;background:transparent;color:var(--color-primary,#276749);font-size:1.3rem;cursor:pointer;width:28px}
.cash-balance-before{font-style:italic;background:rgba(27,31,35,.045)}
.cash-kind{display:inline-block;border-radius:999px;padding:2px 9px;font-size:.72rem;font-weight:700}
.cash-kind-dinheiro,.cash-kind-transferencia{background:#e1f1e8;color:#26704b}
.cash-kind-documento{background:#fff1d5;color:#936414}
.cash-book-detail td{padding:0;background:rgba(27,31,35,.045)}
.cash-book-detail-inner{padding:12px 48px}
.cash-book-detail-inner>p{margin:0 0 8px;color:var(--muted,#68716b)}
.cash-detail-lines{max-width:740px;border:1px solid rgba(27,31,35,.14);border-radius:8px;background:#fff;padding:8px 14px}
.cash-detail-lines>div{display:flex;justify-content:space-between;gap:18px;padding:6px 0;border-bottom:1px solid rgba(27,31,35,.12)}
.cash-detail-lines>div:last-child{border-bottom:0}
.cash-accept-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.cash-remittance-totals{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:10px;margin-bottom:10px}
.cash-remittance-totals>div{display:flex;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid rgba(27,31,35,.14);border-radius:8px;background:#fff}
/* Esta declaração precisa ficar depois das regras específicas acima.
   Elas ainda definiam branco/sombra e anulavam parcialmente o contrato
   transparente de Movimentos Financeiros. Menus, ações e badges mantêm
   seus fundos funcionais; campos e superfícies de conteúdo não. */
.cash-workspace .cash-filters select,
.cash-workspace .cash-filters input,
.cash-tabs .cash-remittance-totals > div,
.cash-tabs .cash-detail-lines,
.cash-tabs .cash-book-detail td,
.cash-tabs .cash-balance-before { background:transparent; }
.cash-tabs .table-wrap thead th {
  position:sticky;
  top:0;
  z-index:1;
  background:var(--graphite-800);
}
.cash-tabs .panel-head{flex:0 0 auto;margin:0;padding:2px 0}
.cash-tabs .panel-head h2{margin:0;font-size:1rem}
.cash-tabs .panel-head .field-hint{margin:3px 0 0}
.cash-tabs .cash-subsection{margin-top:10px;padding-top:10px;border-top:1px solid rgba(27,31,35,.14)}
.cash-tabs .table-wrap{border:1px solid rgba(27,31,35,.14);border-radius:10px}
.cash-tabs .table-wrap table{min-width:900px}
.cash-tabs .account-sort-button{color:inherit;white-space:nowrap}
.cash-tabs .cash-main-browse,.cash-tabs .cash-remittances-browse{flex:1 1 auto;min-height:0}
.cash-tabs .cash-waiting-panel{overflow:hidden}
.cash-tabs .cash-waiting-browse{flex:1 1 auto;min-height:0;overflow:auto}
.cash-destination-actions{display:flex;gap:8px;align-items:center;justify-content:flex-end;flex-wrap:wrap}
.cash-destination-actions form{display:flex;gap:6px;align-items:center;margin:0}
.cash-destination-actions select{min-width:170px;max-width:240px}
.cash-tabs .cash-gavetas-browse,.cash-tabs .cash-conversions-browse,
.cash-tabs .cash-custody-browse,.cash-tabs .cash-excess-browse{flex:0 0 auto;max-height:34vh}
.cash-tabs .cash-remittances-panel{overflow:hidden}
.cash-tabs .cash-remittances-panel .cash-remittances-browse{overflow:auto}
.cash-tabs tr.row-selected td{background:rgba(242,169,59,.08)}
.cash-tabs [data-cash-detail-row] td{background:transparent}
.cash-tabs .badge-warn{background:#fff1d5;color:#936414}
@media(max-width:760px){.cash-remittance-totals{grid-template-columns:repeat(2,minmax(130px,1fr))}}
.tab-panel {
  display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; gap: 16px;
}
.tab-panel[hidden] { display: none; }
/* Corrección 07/09/2026 (noturno, pedido de Elson: "por que ainda existe
   dois quadros aqui, o certo era apenas um") — antes existían DOS
   .table-wrap acá dentro (ítems ya guardados con max-height:250px arriba,
   y la grilla de carga con min-height:600px abajo, cada uno con su
   propio <table>/<thead> — ver comentario anterior de esta sección,
   05-06/09/2026). presupuesto_nuevo.html los unificó en un solo <table>
   (dos <tbody> — ítems guardados+subtotal, y la línea de carga — pero un
   solo <thead>, sin duplicar cabecera). Ahora hay un único .table-wrap
   por aba, que pasa a llevar el tamaño que antes tenía SOLO la grilla de
   carga (flex:1 1 auto + min-height:600px, calculado para 10 líneas
   visibles sin scroll, pedido de Elson 06/09/2026) — aplicado a la tabla
   combinada entera; el min-height de 250px de la tabla de solo-lectura
   ya no existe como bloque separado. */
.tab-panel > .table-wrap {
  /* min-height: 600px (calculado antes pra 10 líneas, ver comentario
     acima na seção) trocado por min-height: 0 — com .item-tabs agora
     limitado por max-height (ver comentario ahí), um min-height fixo
     aqui competiria contra esse limite e voltaria a estourar o pai em
     vez de rolar por dentro. flex: 1 1 auto já garante que a tabela
     ocupe todo o espaço que .item-tabs tiver disponível (calculado
     pelas outras abas/margens ao redor) — sem precisar de um valor
     fixo em px pra "lutar" contra o max-height do pai. */
  flex: 1 1 auto; min-height: 0; overflow-y: auto; margin: 0;
}
.item-grid {
  /* Ya NO envuelve el <table> (compartido ahora con los ítems ya
     guardados, ver arriba) — solo el aviso de "sin Tipo de OS" y el
     botón "+ Agregar línea" que quedan debajo de la tabla. Deja de ser
     flex column (no hace falta, ya no tiene un <table> adentro que
     estirar) — la única regla que le queda es no encogerse dentro del
     .tab-panel (que sí sigue siendo flex column). */
  flex-shrink: 0;
}

/* Corrección 08/09/2026 (pedido de Elson, tela "Incluir Presupuesto":
   "va reduzindo o tamanho dos dados da mestre ate nao precisar de barra
   de rolagem") — a grilla de campos do mestre (Sucursal/Chasis/Cuenta/
   Horómetro/Motivo/Técnico) fica mais compacta SÓ em presupuesto_nuevo.
   html (classe extra ".entity-form--compact" nesse template, ver
   comentário lá) — form.html (Cuentas/Chasis/Empresas/etc., o outro
   consumidor da mesma macro campos_entidade/mesmas classes .entity-form.
   entity-form--grid) não é tocado, Elson não pediu mudança lá. */
.entity-form--compact.entity-form--grid { row-gap: 8px; }
.entity-form--compact .form-row { gap: 3px; }
.entity-form--compact .form-row label { font-size: 0.76rem; }
.entity-form--compact input[type="text"],
.entity-form--compact input[type="number"],
.entity-form--compact input[type="date"],
.entity-form--compact select,
.entity-form--compact textarea {
  padding: 6px 10px; font-size: 0.85rem;
}
.entity-form--compact textarea { height: 44px; resize: vertical; }
.entity-form--compact .field-help { font-size: 0.7rem; margin-top: 1px; }

/* Área de trabajo de Presupuesto (08/09/2026, ver 18_Guia_UX_UI.md §4.1).
   Elson confirmó con la pantalla real que el límite "max-height: 60vh" de
   .item-tabs evitaba que la tabla creciera sin control, pero no le ENTREGABA
   el espacio libre: la grilla quedaba pequeña aunque hubiese área vacía
   debajo. Este formulario pasa a ocupar exactamente el alto disponible de
   main.wrap y reparte sus tres zonas: cabecera (natural), ítems (todo el
   remanente) y acciones (natural). Así las pestañas, el encabezado de tabla
   y Guardar/Cancelar no salen de la pantalla; solo .table-wrap desplaza las
   líneas excedentes. No usar position:sticky en .item-tabs: ese patrón ya
   causó superposición sobre la cabecera (hist. §91 Addendum 4). */
.presupuesto-workspace {
  flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column;
  overflow: hidden;
}
.presupuesto-workspace .entity-form--compact { flex: 0 0 auto; }
.presupuesto-items-toolbar {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between;
  gap: 16px; margin-top: 8px;
}
.presupuesto-items-heading { margin: 0; }
.presupuesto-workspace .item-tabs {
  flex: 1 1 auto; min-height: 0; max-height: none; margin-top: 10px;
}
.presupuesto-workspace .tab-list { margin-bottom: 10px; }
.presupuesto-workspace .tab-panel { gap: 8px; }
.presupuesto-workspace .tab-panel > .table-wrap { min-height: 0; }
.presupuesto-workspace .tab-panel > .table-wrap thead th {
  position: sticky; top: 0; z-index: 2;
}
.presupuesto-workspace-actions {
  flex: 0 0 auto; position: static; margin: 0; padding: 0; border: 0;
}
.presupuesto-workspace .item-tabs table { table-layout: fixed; }
.presupuesto-workspace .item-tabs th:nth-child(1) { width: 120px; }
.presupuesto-workspace .item-tabs th:nth-child(2) { width: 160px; }
.presupuesto-workspace .item-tabs th:nth-child(4) { width: 112px; }
.presupuesto-workspace .item-tabs th:nth-child(5) { width: 144px; }
.presupuesto-workspace .item-tabs th:nth-child(6),
.presupuesto-workspace .item-tabs th:nth-child(7) { width: 160px; }
.presupuesto-workspace .item-tabs th:nth-child(8) { width: 128px; }
.presupuesto-workspace .item-tabs th:last-child { width: 56px; }
.presupuesto-workspace .item-tabs th { padding: 7px 10px; }
.presupuesto-workspace .item-tabs td { padding: 5px 10px; }
.presupuesto-workspace .item-grid-body input[type="text"] { min-width: 0; }
.presupuesto-workspace .item-grid-body input.grid-sigla { width: 100%; }
.presupuesto-workspace .item-grid-body input.grid-precio-lista { width: 100%; }
.presupuesto-workspace .item-grid-body input.grid-unitario,
.presupuesto-workspace .item-grid-body input.grid-total { width: 100%; }
.presupuesto-workspace .item-grid-body input[data-decimal-mask] { width: 100%; }

@media (max-width: 800px), (max-height: 680px) {
  /* En celular o en una notebook muy baja, no se fuerza un formulario a
     100% que podría comprimir la cabecera. El panel sigue limitado y la
     tabla mantiene su scroll interno. */
  .presupuesto-workspace { flex: 0 0 auto; height: auto; overflow: visible; }
  .presupuesto-workspace .item-tabs {
    flex: 0 0 auto; min-height: 280px; max-height: 55vh;
  }
  .presupuesto-items-toolbar { align-items: flex-start; flex-direction: column; }
  .presupuesto-workspace-actions { position: sticky; bottom: 0; }
}

/* RC mantiene la premisa de pantalla única aun en viewport bajo: la regla móvil
   genérica de Presupuesto no puede devolver rolagem al main financiero. */
main.wrap.finance-receipt-main { overflow:hidden; }
.finance-receipt-main > .fin-context-strip { flex:0 0 auto; }
.fin-account-actions-row { display:flex; align-items:flex-end; gap:14px; flex:0 0 auto; margin-top:8px; }
.fin-account-actions-row > #fin-account-form { flex:1 1 auto; width:100%; max-width:none; margin:0; background:transparent; }
.fin-account-actions-row > .level-options { flex:0 0 auto; padding-bottom:1px; }
.fin-context-strip { display:grid; grid-template-columns:repeat(4,minmax(130px,1fr)); gap:8px; flex:0 0 auto; }
.fin-context-strip span { display:grid; gap:2px; padding:6px 9px; border:1px solid rgba(27,31,35,.12); border-radius:var(--radius-sm); background:transparent; }
.fin-context-strip small { color:var(--ink-500); font-size:.68rem; }
.fin-context-strip strong { font-size:.82rem; }
.finance-receipt-main > #fin-receipt-form { flex:1 1 auto; min-height:0; height:auto; overflow:hidden; background:transparent; }
.finance-receipt-main #fin-receipt-form > .item-tabs { flex:1 1 auto; min-height:0; max-height:none; overflow:hidden; background:transparent; }
.finance-receipt-main #fin-receipt-form .tab-panel { min-height:0; overflow:hidden; }
.finance-receipt-main #fin-receipt-form .tab-panel > .table-wrap { flex:1 1 auto; min-height:0; overflow:auto; background:transparent; }
.finance-receipt-main #fin-receipt-form .item-tabs table { table-layout:auto; }
.finance-receipt-main #fin-receipt-form .item-tabs th { width:auto; }

/* Cantidad horaria del servicio: HHH:MM. */
.item-grid-body .grid-horas { width: 7rem; text-align: right; }

/* Apuntamientos de tiempo: grilla legible y captura horizontal (09/09/2026). */
.apontamento-historico th, .apontamento-historico td {
  padding: 7px 10px; vertical-align: top;
}
.apontamento-historico .num { white-space: nowrap; font-variant-numeric: tabular-nums; }
.apontamento-box--tiempo { margin: 0; padding: 10px 12px; }
.apontamento-box--tiempo > .table-wrap { max-width: calc(100vw - 64px); }
.apontamento-box--tiempo .apontamento-historico th { white-space: normal; }
.apontamento-box--tiempo .apontamento-historico td:nth-child(2),
.apontamento-box--tiempo .apontamento-historico td:nth-child(3),
.apontamento-box--tiempo .apontamento-historico td:nth-child(4) {
  white-space: nowrap; font-variant-numeric: tabular-nums;
}
.apontamento-box--tiempo .apontamento-historico td:nth-child(8) {
  min-width: 160px; overflow-wrap: anywhere;
}
.apontamento-totales { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px 24px; }
.apontamento-totales .apontamento-total { margin: 8px 0; font-variant-numeric: tabular-nums; }
.apontamento-form--tiempo {
  display: grid; max-width: none; width: 100%; margin-top: 8px;
  grid-template-columns: minmax(180px, 2fr) minmax(145px, 1fr) repeat(2, minmax(100px, .7fr)) minmax(210px, 3fr);
  gap: 8px 12px; align-items: end;
}
.apontamento-form--tiempo .form-row { min-width: 0; gap: 3px; }
.apontamento-form--tiempo input, .apontamento-form--tiempo select,
.apontamento-form--tiempo textarea { min-width: 0; width: 100%; padding: 6px 9px; min-height: 34px; box-sizing: border-box; }
.apontamento-form--tiempo input[name^="hora_"] { text-align: center; font-variant-numeric: tabular-nums; }
.apontamento-form--tiempo .date-input-text { padding-right: 36px; }
.apontamento-form--tiempo .apontamento-memo-field { grid-column: 1 / 5; }
.apontamento-form--tiempo textarea { height: 38px; resize: vertical; }
.apontamento-form--tiempo .apontamento-box-actions { justify-content: flex-end; flex-wrap: wrap; margin: 0; }
@media (max-width: 1100px) {
  .apontamento-form--tiempo { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .apontamento-form--tiempo .apontamento-memo-field { grid-column: auto; }
  .apontamento-form--tiempo .apontamento-box-actions { grid-column: 1 / -1; }
}
@media (max-width: 540px) {
  .apontamento-form--tiempo { grid-template-columns: minmax(0, 1fr); }
}

/* Perfiles de acceso: maestro compacto y detalle ancho. */
.access-editor { margin: 16px 0; }
.access-profile-options { display: flex; flex-wrap: wrap; gap: 12px 24px; margin: 12px 0; }
.access-tree { margin: 8px 0 8px 20px; }
.access-tree summary { cursor: pointer; }

.access-editor #nombre { width: min(420px, 70vw); }
.access-company-users, .access-denied-resources { margin: 12px 0; }
.access-denied-resources button { margin: 8px 8px 0 0; }

/* Perfiles: maestro de rutinas arriba y funcionalidades abajo (referencia de Elson). */
main.access-workspace { display: flex; flex-direction: column; overflow: hidden; }
.access-master-detail { flex: 1; min-height: 0; margin: 0; display: grid; grid-template-rows: auto minmax(0, 1.25fr) minmax(0, 1fr); gap: 12px; }
.access-profile-header { display: grid; grid-template-columns: minmax(230px, 1.5fr) minmax(160px, 1fr) auto auto; align-items: end; gap: 16px; }
.access-master-detail #nombre { width: 100%; box-sizing: border-box; }
.access-profile-company { font-size: .85rem; }
.access-profile-company > span { color: var(--ink-300); }
.access-profile-active { align-self: center; white-space: nowrap; }
.access-profile-actions { display: flex; gap: 8px; }
.access-pane { min-height: 0; display: flex; flex-direction: column; }
.access-pane-toolbar { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 8px; padding: 5px 0; }
.access-pane-toolbar h2 { font-size: .9rem; margin: 0; }
.access-pane-toolbar h2 span { color: var(--ink-300); font-weight: 400; }
.access-search { display: flex; gap: 12px; align-items: center; font-size: .8rem; color: var(--ink-300); }
.access-search input { width: 300px; max-width: 55vw; padding: 7px 10px; border: 1px solid var(--border, #d5d8dd); border-radius: 6px; font: inherit; background: white; }
.access-search label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.access-scroll { flex: 1; min-height: 0; overflow: auto; }
.access-scroll th { position: sticky; top: 0; z-index: 1; }
.access-scroll td { padding: 5px 10px; }
.access-scroll th { padding: 7px 10px; }
.access-scroll tbody tr:nth-child(even) { background: rgba(20,23,26,.025); }
.access-scroll tbody tr.is-selected { background: #fff2d9; box-shadow: inset 3px 0 var(--amber-500); }
.access-routines tbody tr { cursor: pointer; }
.access-routine-select { border: 0; background: transparent; font: inherit; color: inherit; text-align: left; cursor: pointer; padding: 2px 0; width: 100%; }
.access-routine-select:focus-visible { outline: 2px solid var(--amber-500); outline-offset: 2px; }
.access-routines th:first-child { width: 24%; }
.access-routines th:nth-child(3), .access-routines th:nth-child(4) { width: 120px; }
.access-functions th:last-child { width: 240px; }
.access-permission { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; }
.access-permission input { margin: 0; }
.access-scroll .empty-state { padding: 12px; }
@media (max-width: 760px), (max-height: 560px) {
  main.access-workspace { overflow: auto; }
  .access-master-detail { flex: none; grid-template-rows: auto minmax(220px, 40vh) minmax(200px, 35vh); }
  .access-profile-header { grid-template-columns: minmax(0, 1fr) auto; gap: 8px; }
  .access-profile-company { grid-column: 1; }
  .access-profile-actions { grid-column: 2; grid-row: 2; }
  .access-profile-active { grid-column: 2; grid-row: 1; }
  .access-pane-toolbar .field-help { font-size: .7rem; }
}

/* Cupo empresarial de pestañas: cabecera compacta del editor. */
.access-profile-header { grid-template-columns: minmax(200px,1.5fr) minmax(130px,1fr) minmax(110px,.6fr) auto auto; }
.access-tab-limit input { width:100%; max-width:130px; }
@media(max-width:900px) { .access-profile-header { grid-template-columns:minmax(0,1fr) minmax(0,1fr); } }


/* Indicadores de gestión: layout local, sin alterar los formularios de operación. */
.dashboard-filter,.dashboard-heading {display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.dashboard-filter {justify-content:flex-start;margin-bottom:12px;}
.dashboard-filter input,.dashboard-filter select {width:auto;max-width:260px;}
.management-dashboard {margin:16px 0;}
.dashboard-heading h2,.dashboard-heading h3 {margin:0;}
.dashboard-panels {display:grid;grid-template-columns:minmax(250px,.65fr) minmax(0,1.35fr);gap:12px;}
.dashboard-panel {background:#fff;border:1px solid var(--line, #ddd);border-radius:12px;padding:14px;min-width:0;}
.dashboard-panel h3 {font-size:1rem;margin:0 0 10px;}
.dashboard-values {grid-row:span 2;}
.dashboard-values dl {display:grid;grid-template-columns:1fr auto;gap:8px;margin:10px 0;}
.dashboard-values dd {margin:0;text-align:right;font-variant-numeric:tabular-nums;}
.dashboard-ring {position:relative;width:170px;height:170px;margin:auto;}
.dashboard-ring svg {width:100%;height:100%;transform:rotate(-90deg);}
.dashboard-ring circle {fill:none;stroke-width:11;}
.ring-track {stroke:#eef0f4;}.ring-sold {stroke:#efa424;}.ring-pointed {stroke:#16889a;}
.dashboard-ring strong {position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;font-size:22px;}
.dashboard-ring small {font-size:11px;font-weight:400;}
.sold-dot,.pointed-dot {display:inline-block;width:9px;height:9px;border-radius:50%;background:#efa424;}.pointed-dot {background:#16889a;}
.dashboard-table {overflow:auto;max-height:220px;}.dashboard-table th {position:sticky;top:0;background:#fff;z-index:1;}.dashboard-table td,.dashboard-table th {padding:7px 9px;font-size:12px;}
.dashboard-warning {color:#8e5700;}.dashboard-map-panel {margin-top:12px;}
#dashboard-map {height:320px;max-width:100%;background:#f4f6f8;border-radius:8px;position:relative;z-index:0;}
.dashboard-heat-legend {font-size:12px;}.dashboard-heat-legend span {display:inline-block;width:140px;height:9px;background:linear-gradient(90deg,#3269d6,#19bb9b,#ffd04a,#ef4935);margin-left:8px;}
@media(max-width:850px){.dashboard-panels{grid-template-columns:minmax(0,1fr);}.dashboard-values{grid-row:auto;}.dashboard-values dl{grid-template-columns:1fr;}.dashboard-values dd{text-align:left;}}

.auth-box input[type=password] {box-sizing:border-box;width:100%;min-height:40px;padding:10px 14px;border:1px solid #ddd;border-radius:8px;font:inherit}
.auth-box [hidden] {display:none!important}

/* © 2026 ABC System's. Todos os direitos reservados. */
.grid-tercero-costo { width:100%; text-align:right; }
.grid-proveedor { width:100%; min-width:0; }
.tercero-status { display:block; font-size:11px; white-space:normal; }
.apontamento-form--tercero { max-width:none; display:flex; flex-direction:row; align-items:end; gap:16px; flex-wrap:wrap; }
.apontamento-form--tercero .form-row { flex:1 1 240px; }

/* © 2026 ABC System's. Todos os direitos reservados. */
.access-master-detail.with-users{grid-template-columns:minmax(0,2fr) minmax(260px,1fr)}
.with-users .access-profile-header{grid-column:1/-1}
.with-users .access-routines{grid-column:1;grid-row:2}
.with-users .access-functions{grid-column:1;grid-row:3}
.with-users .profile-users{grid-column:2;grid-row:2/4;min-height:0;display:flex;flex-direction:column}
@media(max-width:900px){.access-master-detail.with-users{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(220px,40vh) minmax(200px,35vh) minmax(180px,30vh)}.with-users .profile-users{grid-column:1;grid-row:4}}

/* © 2026 ABC System's. Todos os direitos reservados. */
.stock-lookup-balance { font-variant-numeric:tabular-nums; white-space:nowrap; font-size:.78rem; }
@media(max-width:600px){.grid-sigla-dropdown-item {flex-wrap:wrap;} .grid-sigla-dropdown-col-desc {min-width:50%;}}

/* © 2026 ABC System's. Todos os direitos reservados. ABC System's é propriedade da Bordignon & Costa Asociados. */
.model-watermark { position: fixed; inset: 100px 10vw 40px; z-index: 0; pointer-events: none; opacity: .065; background: url('/static/abc-logo.jpg') center / contain no-repeat; mix-blend-mode: multiply; }
.welcome-note { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1100; width: min(460px, 86vw); padding: 22px; border: 1px solid var(--line, #ddd); border-radius: 12px; background: white; box-shadow: 0 10px 32px #0002; text-align: center; pointer-events: auto; }
.welcome-note p { margin: 10px 0 0; }
@media print { .model-watermark, .welcome-note { display: none; } }

/* © 2026 ABC System's. Todos os direitos reservados. */
.identity-links-form .form-actions { position: static; }
.identity-links-form .checkbox-inline input { flex: 0 0 18px; }

/* © 2026 ABC System's. Todos os direitos reservados. */
.usage-panel { border:1px solid #ddd; border-radius:10px; padding:12px; margin-bottom:16px; background:#ffffffd9; }
.usage-panel h2 { font-size:1rem; margin:0; }
.usage-chart { width:100%; min-width:600px; max-height:290px; display:block; }
.usage-panel { overflow-x:auto; }
.usage-current { background:#fff0cd; font-weight:bold; }

/* © 2026 ABC System's. Todos os direitos reservados. */
.usage-legend { display:flex; flex-wrap:wrap; gap:8px 20px; font-size:.85rem; margin-top:8px; }
.usage-legend span { display:inline-flex; align-items:center; gap:5px; }

/* © 2026 ABC System's. Todos os direitos reservados. */
.package-summary { margin-bottom:16px; }
.package-summary th { white-space:normal; }
.package-summary td { white-space:nowrap; }
.package-summary th:first-child { min-width:175px; }

/* Opciones por nivel. © 2026 ABC System's. Todos os direitos reservados. */
.level-options { margin-left: auto; flex: 0 0 auto; order: 20; }
.level-toolbar { display: flex; align-items: center; gap: 12px; }
.level-toolbar h2 { margin-right: auto; }
.level-toolbar-actions { display:flex; align-items:center; gap:8px; margin-left:auto; flex-wrap:wrap; }
.detail-options-toolbar { display: flex; justify-content: flex-end; margin: 0 0 8px; }
.record-header-actions > .level-options { margin-left: 0; }
@media (max-width:720px) { .browse-toolbar > .level-options { align-self: flex-end; } }

.item-level-toolbar { align-items: flex-start; }
.item-level-toolbar > .tab-list { flex: 1; min-width: 0; flex-wrap: wrap; }
.item-level-toolbar > .detail-options-toolbar { flex: 0 0 auto; }

/* © 2026 ABC System's. Todos os direitos reservados. */
.idle-dialog{visibility:visible;border:1px solid #ddd;border-radius:12px;padding:24px;max-width:500px}.idle-dialog::backdrop{background:#f4f5f8}.idle-dialog form{display:flex;gap:12px;flex-wrap:wrap}.final-pdf-frame{width:100%;height:75vh;border:1px solid #ddd}

/* © 2026 ABC System's. Todos os direitos reservados. */
.welcome-note{width:min(560px,86vw);padding:32px;border:1px solid #d7b477;border-radius:20px;background:linear-gradient(145deg,#fff,#fff9ed);box-shadow:0 18px 65px #30251830}
.welcome-signature{display:block;font-size:11px;letter-spacing:.2em;color:#8a642e;margin-bottom:18px}.welcome-note strong{display:block;font-size:21px}.welcome-note p{line-height:1.65;color:#4b4b4b}.welcome-note button{margin-top:22px}
/* Selector transversal de Account: documento/nombre; ID técnico oculto. */
.account-lookup{position:relative;display:flex;gap:.4rem;min-width:0}.account-lookup-input{width:100%}.account-lookup-results{position:absolute;z-index:80;top:100%;left:0;right:0;max-height:16rem;overflow:auto;background:#fff;border:1px solid #cbd5e1;border-radius:.55rem;box-shadow:0 .6rem 1.5rem rgba(15,23,42,.16)}.account-lookup-results button{display:block;width:100%;border:0;background:#fff;text-align:left;padding:.65rem .75rem;color:inherit}.account-lookup-results button:hover,.account-lookup-results button.is-active{background:#e8f3ef}.account-lookup-clear{flex:0 0 auto}

/* Organizador global do menu. © 2026 ABC System's. Todos os direitos reservados. */
.menu-organizer-form-main,.menu-organizer-detail-main{display:flex;flex-direction:column;height:100%;overflow:hidden}.menu-organizer-form,.menu-organizer-detail-main>.record-header,.menu-organizer-edit-form>.record-header{background:transparent}.menu-organizer-form .entity-form,.menu-organizer-edit-form .entity-form{max-width:none;background:transparent}.menu-organizer-detail-main>.record-header,.menu-organizer-edit-form>.record-header{flex:0 0 auto}.menu-organizer-detail-main>.detail-section,.menu-organizer-edit-form>.detail-section{flex:1 1 auto;min-height:0;margin-top:12px;display:flex;flex-direction:column}.menu-organizer-detail-main>.detail-section>.level-toolbar,.menu-organizer-edit-form>.detail-section>.level-toolbar{flex:0 0 auto}.menu-organizer-detail-main>.detail-section>.table-wrap,.menu-organizer-edit-form>.detail-section>.table-wrap{flex:1 1 auto;min-height:0;overflow:auto;background:transparent}.menu-organizer-detail-main>.detail-section>.table-wrap thead th,.menu-organizer-edit-form>.detail-section>.table-wrap thead th{position:sticky;top:0;z-index:1}.menu-organizer-edit-form{display:flex;flex:1 1 auto;min-height:0;flex-direction:column}.menu-routines-panel table{min-width:760px}.menu-routines-panel input,.menu-routines-panel select{width:100%;min-width:92px}.mega-menu-subgroup>span{display:block;font-weight:700;padding:4px 0}.mega-menu-subgroup ul{padding-left:14px}
.menu-distribution-main{display:flex;flex-direction:column;height:100%;overflow:hidden}.menu-distribution-form{display:flex;flex:1 1 auto;min-height:0;flex-direction:column}.menu-distribution-form>.browse-toolbar{flex:0 0 auto}.menu-distribution-form>.table-wrap{flex:1 1 auto;min-height:0;overflow:auto;background:transparent}.menu-distribution-form>.table-wrap thead th{position:sticky;top:0;z-index:1}.menu-distribution-form table{min-width:1120px}.menu-distribution-form select,.menu-distribution-form input[type=number]{width:100%;min-width:95px}
/* Detalhe da política: uma linha por regra, com rolagem horizontal. */
.price-grid-draft td{white-space:nowrap}.price-grid-draft select{min-width:180px;max-width:260px}.price-grid-draft input[type=text]{width:140px;min-width:140px}#price-grid-form{display:flex;gap:8px}
.policy-workspace .policy-fields{border:0;padding:0;margin:0;max-width:none;background:transparent;box-shadow:none;grid-template-columns:repeat(3,minmax(0,1fr))}
.policy-workspace .policy-lines{border:0;padding:0;margin:0;min-width:0;min-height:0;flex:1 1 auto;display:flex;flex-direction:column}
.policy-lines>.table-wrap{flex:1 1 auto;min-height:0;overflow:auto}.policy-lines th{white-space:nowrap;position:sticky;top:0;z-index:1}.policy-fields textarea{height:44px;min-height:44px}.policy-workspace [disabled]{opacity:1}.policy-workspace .presupuesto-items-toolbar{flex-wrap:wrap}
.policy-lines table{table-layout:auto;min-width:1800px}.policy-lines td{min-width:160px}.policy-workspace .item-grid-body input[type=text]{min-width:140px;width:140px}
@media(max-width:780px){.policy-workspace .policy-fields{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.policy-workspace .policy-fields{grid-template-columns:1fr}.policy-workspace-main .policy-workspace{overflow:auto}.policy-workspace .policy-lines{flex:none;min-height:320px}}
.product-prices-grid { min-width: 1100px; }
.product-prices-grid th, .product-prices-grid td { white-space: nowrap; }
.product-prices-tax { border-left: 4px solid #f5a623; padding: 12px 16px; background: #fff4df; color: #5b3c08; }
