/* ==========================================================================
   R2 FINANCEIRO — Design System · MOBILE FIRST
   --------------------------------------------------------------------------
   O estado base deste arquivo é o celular: uma coluna, navegação fora da tela,
   tabela empilhada em cartões, alvo de toque de 44px. As media queries são
   todas `min-width` — desktop é o caso ampliado, nunca o ponto de partida.
      base            celular (até 599px)
      >= 600px        telas largas de celular / tablet em pé
      >= 768px        tablet e desktop: barra lateral fixa, tabela vira tabela
      >= 1100px       desktop largo: grades de 3 e 4 colunas
   Marca R2 (azul #00376C), Archivo + JetBrains Mono, tema claro/escuro.
   ========================================================================== */

:root{
  /* Marca — Azul R2 */
  --r2-50:#EAF1F8; --r2-100:#CFDEEE; --r2-200:#9EBBDA; --r2-300:#6693C2;
  --r2-400:#2E6B87; --r2-500:#04384F; --r2-600:#032B3C; --r2-700:#00376C;
  --r2-800:#08202F; --r2-900:#05141E;
  /* Acento — Âmbar */
  --am-50:#FFF6E6; --am-100:#FCE7BE; --am-200:#F5CE84; --am-300:#EDB44E;
  --am-400:#E8A33D; --am-500:#CC8722; --am-600:#9E661A;
  /* Neutros */
  --n-0:#FFFFFF; --n-50:#F7F8FA; --n-100:#EFF1F5; --n-200:#E4E8EE; --n-300:#C9D0DA;
  --n-400:#9BA3B2; --n-500:#6B7280; --n-600:#4A5262; --n-700:#2C3340;
  --n-800:#16202E; --n-900:#0A0E16;
  /* Semânticas (claro) */
  --bg-page:var(--n-50); --surface:var(--n-0); --surface-2:var(--n-50); --surface-3:var(--n-100);
  --border:var(--n-200); --border-strong:var(--n-300);
  --text:var(--n-900); --text-dim:var(--n-600); --text-muted:var(--n-500); --text-faint:var(--n-400);
  --accent:var(--r2-500); --accent-dim:var(--r2-600); --accent-text:var(--r2-600);
  --accent-bg:var(--r2-50); --accent-bg-2:var(--r2-100);
  --highlight:var(--am-400); --highlight-text:var(--am-600); --highlight-bg:var(--am-50);
  --danger:#D92D20; --danger-text:#B42318; --danger-bg:#FDEBEA;
  --success:#109854; --success-text:#087042; --success-bg:#E8F6EE;
  --warning:#B45309; --warning-text:#844105; --warning-bg:#FFF6E3;
  --topbar-bg:var(--r2-500);
  /* Tipografia */
  --font-display:'Archivo',system-ui,-apple-system,sans-serif;
  --font-mono:'JetBrains Mono',ui-monospace,monospace;
  /* Layout — valores do celular; a media query de 768px amplia */
  --sidebar-w:230px; --topbar-h:52px; --gutter:14px; --toque:44px;
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px; --sp-6:24px; --sp-7:32px;
  --r-sm:6px; --r-md:8px; --r-lg:12px; --r-full:9999px;
  --sh-sm:0 1px 3px rgba(10,14,22,.06),0 1px 2px rgba(10,14,22,.04);
  --sh-md:0 4px 12px rgba(10,14,22,.06);
  --sh-lg:0 8px 24px rgba(10,14,22,.10);
}
[data-theme="dark"]{
  --bg-page:#05121C; --surface:var(--r2-800); --surface-2:#0E2536; --surface-3:#123047;
  --border:#1B3A50; --border-strong:#26506B;
  --text:#EAF1F8; --text-dim:#9EBBDA; --text-muted:#6693C2; --text-faint:#4A6E8E;
  --accent:var(--am-400); --accent-dim:var(--am-500); --accent-text:var(--am-200);
  --accent-bg:rgba(232,163,61,.10); --accent-bg-2:rgba(232,163,61,.18);
  --highlight:var(--am-400); --highlight-text:var(--am-200); --highlight-bg:rgba(232,163,61,.12);
  --danger-bg:rgba(217,45,32,.16); --success-bg:rgba(16,152,84,.14); --warning-bg:rgba(180,83,9,.16);
  --topbar-bg:var(--r2-700);
  --sh-sm:0 1px 3px rgba(0,0,0,.4); --sh-md:0 4px 12px rgba(0,0,0,.35); --sh-lg:0 8px 24px rgba(0,0,0,.45);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0; min-height:100%; background:var(--bg-page); color:var(--text);
  font-family:var(--font-display); font-size:15px; line-height:1.45;
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
h1,h2,h3,h4{margin:0; font-weight:700; letter-spacing:-.01em}
button,input,select,textarea{font:inherit; color:inherit}
a{color:var(--accent-text)}
.num{font-family:var(--font-mono); font-variant-numeric:tabular-nums}
.hidden{display:none !important}

/* ==========================================================================
   Topbar — base celular
   ========================================================================== */
.topbar{
  position:fixed; inset:0 0 auto 0; height:var(--topbar-h); z-index:40;
  display:flex; align-items:center; gap:var(--sp-2); padding:0 var(--sp-2) 0 var(--sp-1);
  background:var(--topbar-bg); color:#fff;
}
.tb-brand{
  display:flex; align-items:center; gap:var(--sp-2);
  color:inherit; text-decoration:none; white-space:nowrap;
}
.tb-logo{height:22px; width:auto; display:block}
.tb-produto{font-weight:800; letter-spacing:.04em; font-size:14px}
.tb-title{display:none}
.tb-spacer{flex:1}
.tb-actions{display:flex; align-items:center; gap:var(--sp-1)}
.icon-btn{
  display:inline-grid; place-items:center; width:var(--toque); height:var(--toque); padding:0;
  background:transparent; border:1px solid transparent; border-radius:var(--r-sm);
  color:inherit; cursor:pointer; font-size:17px; line-height:1;
  -webkit-tap-highlight-color:transparent;
}
.icon-btn:hover{background:rgba(255,255,255,.14)}
.topbar .icon-btn:focus-visible,.sidebar a:focus-visible{outline:2px solid var(--am-300); outline-offset:1px}
.tb-user{display:flex; align-items:center; gap:var(--sp-2); font-size:12px}
.tb-user .u-nome{display:none}
.avatar{
  width:30px; height:30px; border-radius:var(--r-full); display:grid; place-items:center;
  background:var(--am-400); color:var(--r2-800); font-weight:800; font-size:11px; flex:none;
}

/* ==========================================================================
   Shell — base celular: navegação fora da tela
   ========================================================================== */
.app-body{display:block; padding-top:var(--topbar-h)}
.sidebar{
  position:fixed; top:var(--topbar-h); bottom:0; left:0; width:var(--sidebar-w); z-index:30;
  display:flex; flex-direction:column;
  background:var(--surface); border-right:1px solid var(--border);
  padding:var(--sp-4) var(--sp-3); overflow-y:auto;
  transform:translateX(-100%); transition:transform .2s ease; box-shadow:var(--sh-lg);
}
body.nav-open .sidebar{transform:none}
.scrim{display:none}
body.nav-open .scrim{
  display:block; position:fixed; inset:var(--topbar-h) 0 0; z-index:29; background:rgba(5,20,30,.45);
}
.nav-group{margin-bottom:var(--sp-5)}
.nav-label{
  font-size:10px; font-weight:800; letter-spacing:.1em; text-transform:uppercase;
  color:var(--text-faint); padding:0 var(--sp-3) var(--sp-2);
}
.nav-rodape{margin-top:auto; padding-top:var(--sp-5)}
.sidebar a{
  display:flex; align-items:center; gap:var(--sp-3); min-height:var(--toque);
  padding:8px var(--sp-3); border-radius:var(--r-sm);
  color:var(--text-dim); text-decoration:none; font-weight:500;
}
.sidebar a:hover{background:var(--surface-2); color:var(--text)}
.sidebar a.active{background:var(--accent-bg); color:var(--accent-text); font-weight:600}
.sidebar a .ico{width:18px; text-align:center; opacity:.8}

.main{padding:var(--gutter); min-width:0}

/* Cabeçalho de página — no celular empilha e a ação principal ocupa a largura */
.page-head{display:flex; flex-direction:column; gap:var(--sp-3); margin-bottom:var(--sp-4)}
.page-head h1{font-size:20px}
.page-head .sub{color:var(--text-muted); font-size:13px}
.page-head .spacer{display:none}
.page-head .btn-primary{width:100%; justify-content:center}
.page-head .acoes{display:flex; gap:var(--sp-2); align-items:flex-end}
.page-head .acoes > *{flex:1}

/* Seletor ‹ MÊS/ANO › — as setas são alvo de toque; o rótulo ocupa o meio */
.seletor-periodo{display:flex; align-items:center; gap:var(--sp-2)}
.seletor-periodo .rotulo{flex:1; text-align:center; font-size:16px; font-weight:700}
.seletor-periodo .btn{flex:none; min-width:var(--toque)}

/* ==========================================================================
   Cartões e grades — base: uma coluna
   ========================================================================== */
.card{
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg);
  box-shadow:var(--sh-sm); padding:var(--sp-4); margin-bottom:var(--sp-4);
}
.card > h2{
  font-size:11px; font-weight:800; letter-spacing:.09em; text-transform:uppercase;
  color:var(--text-muted); margin-bottom:var(--sp-4);
}
.grid{display:grid; gap:var(--sp-3); grid-template-columns:1fr}

.kpi{background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); padding:var(--sp-4)}
.kpi .k-label{font-size:10px; font-weight:800; letter-spacing:.09em; text-transform:uppercase; color:var(--text-muted)}
.kpi .k-value{font-family:var(--font-mono); font-size:20px; font-weight:600; margin-top:4px; letter-spacing:-.02em}
.kpi .k-note{font-size:11.5px; color:var(--text-faint); margin-top:2px}
.kpi.is-accent{background:var(--accent-bg); border-color:var(--accent-bg-2)}
.kpi.is-accent .k-value{color:var(--accent-text)}

/* ==========================================================================
   Tabela — base celular: cada linha vira um cartão empilhado.
   O rótulo de cada campo sai do <th> correspondente, gravado em data-rotulo
   por UI.tabelaWrap(). Sem rolagem lateral, sem lupa.
   ========================================================================== */
.table-wrap{overflow-x:visible}
table.tbl{width:100%; border-collapse:collapse; font-size:14px; display:block}
table.tbl thead{display:none}
table.tbl tbody{display:block}
table.tbl tbody tr{
  display:block; background:var(--surface-2); border:1px solid var(--border);
  border-radius:var(--r-md); padding:var(--sp-3); margin-bottom:var(--sp-3);
}
table.tbl tbody td{
  display:flex; align-items:center; justify-content:space-between; gap:var(--sp-3);
  padding:4px 0; border:none; text-align:left;
}
table.tbl tbody td::before{
  content:attr(data-rotulo);
  font-size:10px; font-weight:800; letter-spacing:.08em; text-transform:uppercase;
  color:var(--text-muted); flex:none;
}
table.tbl tbody td:empty{display:none}
/* a coluna de ações não leva rótulo e ganha os botões lado a lado */
table.tbl tbody td.col-acao{justify-content:flex-end; gap:var(--sp-2); padding-top:var(--sp-3)}
table.tbl tbody td.col-acao::before{content:''}
table.tbl tbody td.col-destaque{font-size:16px; font-weight:700}
/* primeira coluna: vira o título do cartão, sem repetir o rótulo da coluna */
table.tbl tbody td.col-titulo{
  display:block; font-size:15px; font-weight:700; line-height:1.3;
  padding:0 0 var(--sp-2); margin-bottom:var(--sp-2);
  border-bottom:1px solid var(--border);
}
table.tbl tbody td.col-titulo::before{content:none}
table.tbl tfoot{display:block}
table.tbl tfoot tr{display:flex; justify-content:space-between; gap:var(--sp-3)}
table.tbl tfoot td{display:block; border:none; padding:var(--sp-2) 0 0; font-weight:700}
.ta-r,.ta-c{text-align:left}
.empty{padding:var(--sp-6) var(--sp-4); text-align:center; color:var(--text-faint)}

/* ---------- Etiquetas ---------- */
.tag{
  display:inline-block; padding:3px 9px; border-radius:var(--r-full);
  font-size:11px; font-weight:700; letter-spacing:.03em; white-space:nowrap;
  background:var(--surface-3); color:var(--text-dim);
}
.tag-r2{background:var(--accent-bg); color:var(--accent-text)}
.tag-socio{background:var(--highlight-bg); color:var(--highlight-text)}
.tag-rateio{background:var(--success-bg); color:var(--success-text)}
.tag-fixa{background:var(--surface-3); color:var(--text-muted)}

/* ---------- Botões — alvo de toque de 44px na base ---------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  min-height:var(--toque); padding:8px 16px; cursor:pointer;
  background:var(--surface); border:1px solid var(--border-strong); border-radius:var(--r-sm);
  font-weight:600; font-size:14px; color:var(--text); white-space:nowrap;
  -webkit-tap-highlight-color:transparent;
}
.btn:hover{background:var(--surface-2)}
.btn-primary{background:var(--accent); border-color:var(--accent); color:#fff}
.btn-primary:hover{background:var(--accent-dim); border-color:var(--accent-dim)}
[data-theme="dark"] .btn-primary{color:var(--r2-900)}
.btn-danger{color:var(--danger-text); border-color:var(--danger-bg)}
.btn-danger:hover{background:var(--danger-bg)}
.btn-sm{min-height:38px; padding:6px 12px; font-size:13px}
.btn-icone{min-width:38px; padding:6px 10px}
.btn:disabled{opacity:.5; cursor:not-allowed}

/* ---------- Formulário — 16px evita o zoom automático do iOS ---------- */
.field{display:flex; flex-direction:column; gap:5px; min-width:0}
.field > label{font-size:10.5px; font-weight:800; letter-spacing:.07em; text-transform:uppercase; color:var(--text-muted)}
.field input,.field select,.field textarea{
  min-height:var(--toque); padding:8px 12px; font-size:16px;
  background:var(--surface); color:var(--text);
  border:1px solid var(--border-strong); border-radius:var(--r-sm); width:100%;
}
.field input:focus,.field select:focus{outline:2px solid var(--accent); outline-offset:-1px; border-color:transparent}
.field input.num{text-align:right}
.form-row{display:grid; gap:var(--sp-3); grid-template-columns:1fr; align-items:end}
.form-row + .form-row{margin-top:var(--sp-3)}

/* ---------- Conferência ---------- */
.confere{
  display:flex; flex-wrap:wrap; align-items:center; gap:var(--sp-2);
  padding:var(--sp-3); border-radius:var(--r-md); font-size:12.5px; font-weight:600;
  background:var(--success-bg); color:var(--success-text);
}
.confere.erro{background:var(--danger-bg); color:var(--danger-text)}
.confere .num{font-weight:700; width:100%}
.confere .spacer{display:none}

/* ---------- Modal — no celular sobe do rodapé e ocupa a tela ---------- */
.modal-bg{
  position:fixed; inset:0; z-index:60; background:rgba(5,20,30,.55);
  display:flex; align-items:flex-end; justify-content:center;
}
.modal{
  background:var(--surface); border-radius:var(--r-lg) var(--r-lg) 0 0; box-shadow:var(--sh-lg);
  width:100%; max-height:92vh; overflow-y:auto;
  padding:var(--sp-5) var(--gutter) calc(var(--sp-5) + env(safe-area-inset-bottom));
}
.modal h2{font-size:17px; margin-bottom:var(--sp-4)}
.modal-acoes{display:flex; flex-direction:column-reverse; gap:var(--sp-2); margin-top:var(--sp-5)}
.modal-acoes .btn{width:100%}

/* ---------- Toast ---------- */
.toasts{
  position:fixed; left:var(--gutter); right:var(--gutter); bottom:calc(var(--gutter) + env(safe-area-inset-bottom));
  z-index:80; display:flex; flex-direction:column; gap:var(--sp-2); pointer-events:none;
}
.toast{
  background:var(--n-800); color:#fff; padding:12px 16px; border-radius:var(--r-md);
  box-shadow:var(--sh-lg); font-size:14px; font-weight:500;
}
.toast.erro{background:var(--danger)}
.toast.ok{background:var(--success)}

/* ---------- Login ---------- */
.login-wrap{display:grid; place-items:center; min-height:100vh; padding:var(--gutter); background:var(--bg-page)}
.login-card{width:100%; max-width:400px; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-lg); box-shadow:var(--sh-md); padding:var(--sp-6) var(--sp-5)}
.login-logo{width:min(230px,72%); height:auto; display:block; margin-bottom:var(--sp-5)}
[data-theme="dark"] .login-logo{content:url('../assets/logo-r2-branco.png')}
.login-produto{font-size:20px; font-weight:800; letter-spacing:-.01em; color:var(--text)}
.login-card p.lead{color:var(--text-muted); font-size:13px; margin:2px 0 var(--sp-5)}
.login-card .field{margin-bottom:var(--sp-4)}
.login-card .btn{width:100%}
.login-erro{color:var(--danger-text); font-size:12.5px; margin-top:var(--sp-3); min-height:18px}

/* ==========================================================================
   >= 600px — celular deitado e tablet em pé
   ========================================================================== */
@media (min-width:600px){
  :root{--gutter:20px}
  .grid-2,.grid-3,.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .page-head{flex-direction:row; align-items:flex-end; flex-wrap:wrap}
  .page-head .spacer{display:block; flex:1}
  .page-head .btn-primary{width:auto}
  .page-head .acoes > *{flex:none}
  .seletor-periodo .rotulo{flex:none; min-width:96px; font-size:15px}
  .modal-bg{align-items:center; padding:var(--sp-4)}
  .modal{width:min(560px,100%); border-radius:var(--r-lg); padding:var(--sp-6)}
  .modal-acoes{flex-direction:row; justify-content:flex-end}
  .modal-acoes .btn{width:auto}
  .toasts{left:auto; right:var(--sp-5); bottom:var(--sp-5); max-width:340px}
}

/* ==========================================================================
   >= 768px — barra lateral fixa e a tabela volta a ser tabela
   ========================================================================== */
@media (min-width:768px){
  :root{--topbar-h:54px; --gutter:24px; --toque:36px}
  body{font-size:14px}

  .topbar{gap:var(--sp-3); padding:0 var(--sp-4)}
  .tb-logo{height:24px}
  .tb-produto{font-size:15px}
  .tb-actions{gap:var(--sp-2)}
  .tb-user .u-nome{display:inline}
  .icon-btn{width:32px; height:32px; font-size:15px}

  .main{padding:var(--sp-6)}
  .page-head h1{font-size:22px}
  .card{padding:var(--sp-5); margin-bottom:var(--sp-5)}
  .grid{gap:var(--sp-5)}
  .kpi .k-value{font-size:22px}

  /* tabela de verdade */
  .table-wrap{
    overflow-x:auto;
    margin:0 calc(var(--sp-5) * -1) calc(var(--sp-5) * -1);
    padding:0 var(--sp-5) var(--sp-5);
  }
  /* Cada seletor abaixo casa a especificidade do seu par lá em cima —
     `table.tbl tbody tr` é mais específico que `table.tbl tr` e venceria
     mesmo estando dentro desta media query. */
  table.tbl{display:table; font-size:13px}
  table.tbl thead{display:table-header-group}
  table.tbl tbody{display:table-row-group}
  table.tbl tfoot{display:table-footer-group}
  table.tbl thead tr,
  table.tbl tbody tr,
  table.tbl tfoot tr{display:table-row}
  table.tbl tbody td,
  table.tbl tfoot td{display:table-cell}
  table.tbl th{
    text-align:left; font-size:10px; font-weight:800; letter-spacing:.08em; text-transform:uppercase;
    color:var(--text-muted); padding:0 var(--sp-3) var(--sp-2); border-bottom:1px solid var(--border);
    white-space:nowrap;
  }
  table.tbl tbody tr{
    background:transparent; border:none; border-radius:0; padding:0; margin:0;
  }
  table.tbl tbody tr:hover{background:var(--surface-2)}
  table.tbl tbody td{
    padding:7px var(--sp-3); border-bottom:1px solid var(--border);
    vertical-align:middle; justify-content:flex-start;
  }
  table.tbl tbody td.col-acao{padding:7px var(--sp-3)}
  table.tbl tbody td::before{content:none}
  table.tbl tbody td.col-destaque{font-size:13px}
  table.tbl tbody td.col-titulo{
    display:table-cell; font-size:13px; font-weight:400; line-height:1.45;
    padding:7px var(--sp-3); margin:0; border-bottom:1px solid var(--border);
  }
  table.tbl tfoot td{
    font-weight:700; border-bottom:none; border-top:2px solid var(--border-strong);
    padding:var(--sp-3) var(--sp-3) 7px;
  }
  .ta-r{text-align:right} .ta-c{text-align:center}
  .col-acao{width:1%; white-space:nowrap}

  .btn{min-height:34px; padding:7px 14px; font-size:13px}
  .btn-sm{min-height:26px; padding:3px 9px; font-size:12px}
  .btn-icone{min-width:26px; padding:3px 8px}
  .field input,.field select,.field textarea{min-height:34px; padding:7px 10px; font-size:14px}
  /* linhas de formulário lado a lado só a partir daqui */
  .form-row-2{grid-template-columns:repeat(2,minmax(0,1fr))}
  .form-row-3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .form-row-4{grid-template-columns:repeat(4,minmax(0,1fr))}
  .form-row + .form-row{margin-top:var(--sp-4)}

  .confere{flex-wrap:nowrap; padding:var(--sp-3) var(--sp-4)}
  .confere .num{width:auto}
  .confere .spacer{display:block; flex:1}
  .empty{padding:var(--sp-7)}
}

/* ==========================================================================
   >= 900px — a barra lateral cabe sem espremer o conteúdo
   Abaixo disso ela continua fora da tela, inclusive no tablet de 768px: 230px
   de lateral ali sobrariam ~490px de conteúdo, e a tabela ficaria apertada.
   ========================================================================== */
@media (min-width:900px){
  .tb-title{display:inline; font-weight:600; opacity:.85; font-size:13px; white-space:nowrap}
  .menu-toggle{display:none}
  .app-body{display:flex}
  .sidebar{transform:none; box-shadow:none; transition:none}
  body.nav-open .scrim{display:none}
  .main{flex:1; margin-left:var(--sidebar-w)}
}

/* ==========================================================================
   >= 1100px — desktop largo
   ========================================================================== */
@media (min-width:1100px){
  .grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
}
