/* Appyon Payments Cockpit — Shell (sidebar, header, moldura de página) */
*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; background:var(--bg); color:var(--text);
  font-family:var(--font-sans); font-size:var(--text-body-size); line-height:var(--text-body-line);
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
a{color:inherit}
button{font-family:inherit}
input,select,textarea{font-family:inherit; color:inherit}
:focus-visible{outline:2px solid var(--accent-strong); outline-offset:2px; border-radius:4px}
.app{ display:grid; grid-template-columns:var(--sidebar-w) 1fr; min-height:100vh; }

/* ---------- SIDEBAR ---------- */
.sidebar{
  grid-row:1/3; background:var(--sb-bg); color:var(--sb-fg);
  display:flex; flex-direction:column; padding:var(--space-4) var(--space-3);
  position:sticky; top:0; height:100vh; z-index:var(--z-sidebar);
  border-right:1px solid var(--sb-border);
}
.sidebar-brand{ display:flex; align-items:center; gap:var(--space-2); padding:var(--space-2) var(--space-2) var(--space-4); flex:none; }
.sidebar-brand .mark{ width:34px; height:34px; border-radius:10px; background:linear-gradient(135deg,var(--accent),var(--sb-brand-end)); display:flex; align-items:center; justify-content:center; flex:none; }
.sidebar-brand .mark svg{ width:20px; height:20px; }
.sidebar-brand .name{ font-weight:700; font-size:15px; line-height:1.15; letter-spacing:-0.01em; }
.sidebar-brand .sub{ font-size:11px; color:var(--sb-text-sub); }
/* 4 grupos/13 itens (item 5) — padding mais compacto que uma lista plana para caber sem scroll
   interno em telas de laptop comuns (~800-900px de altura); overflow-y:auto continua como rede
   de segurança em janelas mais baixas, nunca escondendo item sem indicar que há mais conteúdo. */
.sidebar-nav{ display:flex; flex-direction:column; gap:1px; flex:1; overflow-y:auto; min-height:0; }
.sidebar-nav a{
  display:flex; align-items:center; gap:var(--space-3); padding:7px var(--space-3);
  border-radius:var(--radius-pill); text-decoration:none; color:var(--sb-text); font-size:13.5px; font-weight:600;
  transition:background var(--motion-base) var(--ease-standard), color var(--motion-base) var(--ease-standard);
}
.sidebar-nav a svg{ width:18px; height:18px; flex:none; opacity:.92 }
.sidebar-nav a:hover{ background:var(--sb-hover-bg); color:var(--sb-hover-fg) }
.sidebar-nav a[aria-current="page"]{ background:var(--sb-active-bg); color:var(--sb-active-fg); }
.sidebar-nav a[aria-current="page"] svg{ color:var(--sb-active-icon); }
/* Grupos de navegação colapsáveis (item 6-7 do definitivo): 21 itens em 4 grupos não cabem
   todos abertos ao mesmo tempo — botão com chevron, estado por grupo em localStorage. */
.sidebar-nav .nav-group-label{
  width:100%; display:flex; align-items:center; justify-content:space-between; gap:6px;
  padding:8px 12px 3px; font-size:10px; font-weight:700; letter-spacing:.08em; text-transform:uppercase;
  color:var(--sb-group-label); background:transparent; border:0; cursor:pointer; font-family:inherit;
}
.sidebar-nav .nav-group-label:hover{ color:var(--sb-group-label-hover); }
.sidebar-nav .nav-group-label .chev{ width:12px; height:12px; flex:none; transition:transform var(--motion-base) var(--ease-standard); }
.sidebar-nav .nav-group-label[aria-expanded="true"] .chev{ transform:rotate(180deg); }
.sidebar-nav .nav-group-items{ display:flex; flex-direction:column; gap:1px; }
.sidebar-nav .nav-group-items.collapsed{ display:none; }
.sidebar-nav .nav-sep{ border-top:1px solid var(--sb-sep); margin-top:5px; }
.sidebar-foot{ margin-top:var(--space-3); padding:var(--space-3) var(--space-2) 0; border-top:1px solid var(--sb-sep); flex:none; }
.sidebar-foot p{ margin:0 0 var(--space-3); font-size:12px; color:var(--sb-foot-text); line-height:1.4; }
.sidebar-status{ display:flex; flex-direction:column; gap:6px; font-size:11px; color:var(--sb-foot-text); }
.sidebar-status .dot{ width:7px; height:7px; border-radius:50%; background:var(--good); display:inline-block; margin-right:6px; }
.sidebar-status .row{ display:flex; align-items:center; }
.sidebar-status .row .dot.dot-warn{ background:var(--warn); }
.sidebar-status #ultimaVerificacao{ font-size:10px; color:var(--sb-foot-text-3); }
/* Versionamento separado (item 127-131): APP · PLAYBOOK · SCHEMA · CONTENT */
.sidebar-status .ver-row{ display:flex; justify-content:space-between; gap:8px; font-family:var(--font-mono); font-size:10px; }
.sidebar-status .ver-row b{ color:var(--sb-text); font-weight:600; }

/* ---------- HEADER ---------- */
.topbar{
  grid-column:2; position:sticky; top:0; z-index:var(--z-header);
  display:flex; align-items:center; gap:var(--space-3);
  height:var(--header-h); padding:0 var(--space-5);
  background:var(--sticky-bg); backdrop-filter:blur(18px) saturate(1.3);
  border-bottom:1px solid var(--hairline);
}
.topbar-month{ display:flex; align-items:center; gap:8px; padding:8px 12px; border-radius:var(--radius-sm); border:1px solid var(--hairline-strong); background:var(--panel); color:var(--text); font-size:13px; font-weight:600; cursor:pointer; white-space:nowrap; }
.topbar-month svg{ width:16px; height:16px; color:var(--text-2) }
.topbar-month .chev{ width:12px; height:12px; margin-left:2px; color:var(--text-3) }
.topbar-search{ flex:1; max-width:640px; display:flex; align-items:center; gap:8px; padding:8px 12px; border-radius:var(--radius-sm); border:1px solid var(--hairline-strong); background:var(--panel); color:var(--text-3); }
.topbar-search svg{ width:16px; height:16px; flex:none }
.topbar-search input{ border:0; background:transparent; outline:0; flex:1; color:var(--text); font-size:13.5px; }
.topbar-search input::placeholder{ color:var(--text-3) }
.topbar-search kbd{ font-family:var(--font-mono); font-size:10.5px; color:var(--text-3); border:1px solid var(--hairline-strong); border-radius:5px; padding:2px 5px; background:var(--bg-elevated); }
.topbar-actions{ display:flex; align-items:center; gap:var(--space-3); margin-left:auto; }
.seg{ display:flex; align-items:center; background:var(--panel); border:1px solid var(--hairline-strong); border-radius:var(--radius-pill); padding:3px; gap:2px; }
.seg button{ border:0; background:transparent; color:var(--text-2); font-size:12.5px; font-weight:600; padding:6px 12px; border-radius:var(--radius-pill); cursor:pointer; display:flex; align-items:center; gap:6px; transition:background var(--motion-base) var(--ease-standard), color var(--motion-base) var(--ease-standard); }
.seg button svg{ width:14px; height:14px }
.seg button[aria-pressed="true"]{ background:var(--accent); color:var(--on-accent); }
.icon-btn{ position:relative; width:36px; height:36px; border-radius:var(--radius-sm); border:1px solid var(--hairline-strong); background:var(--panel); color:var(--text-2); display:flex; align-items:center; justify-content:center; cursor:pointer; }
.icon-btn svg{ width:17px; height:17px }
.icon-btn .dot{ position:absolute; top:6px; right:7px; width:7px; height:7px; border-radius:50%; background:var(--bad); border:1.5px solid var(--panel); }
.user{ display:flex; align-items:center; gap:10px; padding-left:var(--space-3); border-left:1px solid var(--hairline); cursor:pointer; }
.user .avatar{ width:34px; height:34px; border-radius:50%; background:linear-gradient(135deg,var(--accent),#8db0ff); color:#fff; font-weight:700; font-size:12.5px; display:flex; align-items:center; justify-content:center; flex:none; }
.user .meta{ display:flex; flex-direction:column; line-height:1.25; }
.user .meta b{ font-size:13px; font-weight:700; }
.user .meta span{ font-size:11.5px; color:var(--text-3); }
.user .chev{ width:14px; height:14px; color:var(--text-3) }

/* ---------- MAIN / PAGE ---------- */
.main{ grid-column:2; padding:var(--space-6) var(--space-5) var(--space-8); min-width:0; }
.page-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-6); margin-bottom:var(--space-5); }
.page-head h1{ margin:0 0 6px; font-size:var(--text-display-size); line-height:var(--text-display-line); font-weight:var(--text-display-weight); letter-spacing:var(--text-display-tracking); }
.page-head .subtitle{ margin:0; color:var(--text-2); font-size:14.5px; max-width:56ch; }
.page-quote{ text-align:right; color:var(--text-2); font-size:13.5px; font-style:italic; line-height:1.4; white-space:nowrap; }
.page-quote b{ display:block; font-style:normal; font-weight:700; color:var(--text-3); font-size:12px; margin-top:4px; }

/* auto-fit em vez de repeat(6,...) fixo: a Home ganhou 8 tiles (item 113 — Data Confidence
   issues, Open Blockers) e um número fixo deixaria a última linha com células vazias. */
.tiles{ display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:var(--space-3); margin-bottom:var(--space-5); min-width:0; }
.tile{
  border-radius:var(--radius-md); padding:var(--space-4); border:1px solid var(--hairline-strong);
  display:flex; flex-direction:column; gap:var(--space-2); min-width:0; overflow-wrap:anywhere;
}
.tile .top{ display:flex; align-items:center; justify-content:space-between; }
.tile .ic{ width:34px; height:34px; border-radius:10px; display:flex; align-items:center; justify-content:center; background:#ffffff14; flex:none; }
.tile .ic svg{ width:18px; height:18px }
.tile .link{ width:22px; height:22px; color:currentColor; opacity:.6 }
.tile b{ font-family:var(--font-mono); font-variant-numeric:tabular-nums; font-size:var(--text-mono-lg-size); line-height:var(--text-mono-lg-line); font-weight:var(--text-mono-lg-weight); }
.tile .lbl{ font-size:13px; font-weight:700; }
.tile .det{ font-size:12px; color:var(--text-2); display:flex; align-items:center; gap:4px; }
.tile.t-blue{ background:var(--tile-blue-bg); border-color:var(--tile-blue-line); color:#bcd4ff; }
.tile.t-green{ background:var(--tile-green-bg); border-color:var(--tile-green-line); color:#8fe9c9; }
.tile.t-yellow{ background:var(--tile-yellow-bg); border-color:var(--tile-yellow-line); color:#f5d38a; }
.tile.t-red{ background:var(--tile-red-bg); border-color:var(--tile-red-line); color:#f7a9b6; }
.tile.t-indigo{ background:var(--tile-indigo-bg); border-color:var(--tile-indigo-line); color:#b9c3fb; }
.tile b, .tile .lbl{ color:var(--text); }
.tile .det{ color:var(--text-2); }
.tile.t-blue .ic svg,.tile.t-blue .link{ color:#6fa0ff }
.tile.t-green .ic svg,.tile.t-green .link{ color:var(--good) }
.tile.t-yellow .ic svg,.tile.t-yellow .link{ color:var(--warn) }
.tile.t-red .ic svg,.tile.t-red .link{ color:var(--bad) }
.tile.t-indigo .ic svg,.tile.t-indigo .link{ color:#9aa8ff }

.layout-2col{ display:grid; grid-template-columns:minmax(0,1fr) 300px; gap:var(--space-4); align-items:start; min-width:0; }
.layout-2col > *{ min-width:0; }
.layout-2col.wide-aside{ grid-template-columns:minmax(0,1fr) 400px; }
@media (max-width:1280px){ .layout-2col.wide-aside{ grid-template-columns:minmax(0,1fr); } }
.panel{ background:var(--panel); border:1px solid var(--hairline); border-radius:var(--radius-lg); padding:var(--space-4) var(--space-5); }
.panel + .panel{ margin-top:var(--space-4); }
.panel-head{ display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; margin-bottom:var(--space-3); gap:6px var(--space-3); }
.panel-head h2{ margin:0; font-size:var(--text-h3-size); font-weight:var(--text-h3-weight); }
.panel-head .subtitle{ margin:2px 0 0; font-size:12.5px; color:var(--text-3); font-weight:400; }
.panel-head-txt{ min-width:0; }
.side-col{ display:flex; flex-direction:column; gap:var(--space-4); min-width:0; }

.disabled-note{ font-size:12px; color:var(--text-3); font-style:italic; }

/* ---------- RESPONSIVO ---------- */
@media (max-width:1180px){
  .tiles{ grid-template-columns:repeat(3,minmax(0,1fr)); }
}
@media (max-width:1439px){
  .layout-2col:not(.wide-aside){ grid-template-columns:minmax(0,1fr); }
}
/* Tablet/mobile (901–1280px): a sidebar fixa some do fluxo e vira drawer via hambúrguer — sem
   isso, a soma de sidebar + busca + tema + usuário não cabe em 1024px (overflow de 158px,
   P1-4 do AUDIT_REPORT). Mesmo mecanismo do mobile, só que a partir de um limiar mais alto —
   "tablet colapsável" (item 63-74) reaproveitando o drawer já testado, labels nunca destruídos. */
@media (max-width:1280px){
  :root{ --sidebar-w:0px; }
  .sidebar{ position:fixed; left:0; top:0; width:236px; transform:translateX(-100%); transition:transform var(--motion-slow) var(--ease-standard); z-index:var(--z-drawer); }
  .sidebar.open{ transform:translateX(0); box-shadow:var(--shadow-2); }
  .app{ grid-template-columns:1fr; }
  .topbar,.main{ grid-column:1; }
  .topbar-search{ display:none; }
  /* QA reconciliação (P1): mesmo com sidebar/busca já removidos do fluxo, tablet 768px ainda
     não sobrava espaço — o botão "Escuro" do seg (labels mantidas de propósito, ver comentário
     acima) transbordava do próprio .seg e ficava sobreposto ao sino de notificações (overlap
     real de ~43px, não só clipping visual). Em vez de esconder os labels do tema (a intenção
     documentada era preservá-los), corta o texto nome/cargo do usuário — já duplicado no
     title="" do botão (shell.js renderUser()) — que sozinho ocupava >200px nessa largura. */
  .user .meta{ display:none; }
  .user{ padding-left:6px; }
}
@media (max-width:640px){
  .tiles{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .main{ padding:var(--space-4); }
  .page-head{ flex-direction:column; }
  .page-quote{ text-align:left; white-space:normal; }
  .topbar{ padding:0 var(--space-3); gap:6px; }
  .user .meta{ display:none; }
  .user{ padding-left:6px; }
  .seg .lbl{ display:none; }
  .seg button{ padding:7px 8px; }
  .topbar-month{ padding:7px 8px; }
  .topbar-month #monthLabel{ display:none; }
  .topbar-actions{ gap:6px; }
}
.topbar-actions,.topbar-month,.seg,.user{ min-width:0; }
@media (max-width:400px){
  .icon-btn{ width:32px; height:32px; }
  .user .chev{ display:none; }
}
