/* ============================================================================
   CIPT — Design System (redesign)
   Fonte única de tokens + componentes. Substitui os :root espalhados pelas
   páginas. Camadas: primitivos → semânticos → componentes.
   Identidade azul institucional CIPT preservada, modernizada sobre escala slate.
   ============================================================================ */

/* ---------- 1. PRIMITIVOS ---------- */
:root{
  /* Marca CIPT (azul institucional preservado) */
  --blue-900:#062a4d;
  --blue-800:#053a6b;
  --blue-700:#004480;   /* sidebar/footer legado */
  --blue-600:#0056a0;   /* primária legado */
  --blue-500:#0a6fc2;
  --blue-400:#3f93d8;
  --blue-300:#7fb6e6;
  --blue-100:#e6f0fa;
  --blue-50:#f1f7fc;

  /* Neutros (slate) */
  --slate-950:#0b1220;
  --slate-900:#0f172a;
  --slate-800:#1e293b;
  --slate-700:#334155;
  --slate-600:#475569;
  --slate-500:#64748b;
  --slate-400:#94a3b8;
  --slate-300:#cbd5e1;
  --slate-200:#e2e8f0;
  --slate-100:#f1f5f9;
  --slate-50:#f8fafc;
  --white:#ffffff;

  /* Semânticos de estado */
  --green-600:#16a34a; --green-100:#dcfce7;
  --amber-600:#d97706; --amber-100:#fef3c7;
  --red-600:#dc2626;   --red-100:#fee2e2;
  --sky-600:#0369a1;   --sky-100:#e0f2fe;

  /* Tipografia */
  --font-sans:'Montserrat',system-ui,-apple-system,'Segoe UI',Roboto,Arial,sans-serif;
  --fs-xs:.75rem; --fs-sm:.875rem; --fs-base:1rem;
  --fs-lg:1.125rem; --fs-xl:1.25rem;
  --fs-2xl:clamp(1.4rem,3.5vw,1.75rem);
  --fs-3xl:clamp(1.75rem,5vw,2.4rem);
  --fw-regular:400; --fw-medium:500; --fw-semibold:600; --fw-bold:700; --fw-extra:800;
  --lh-tight:1.2; --lh-normal:1.5;

  /* Espaçamento (escala 4px) */
  --sp-1:.25rem; --sp-2:.5rem; --sp-3:.75rem; --sp-4:1rem;
  --sp-5:1.25rem; --sp-6:1.5rem; --sp-8:2rem; --sp-10:2.5rem; --sp-12:3rem;

  /* Raio */
  --radius-sm:.5rem; --radius:.75rem; --radius-lg:1rem; --radius-xl:1.25rem; --radius-pill:999px;

  /* Sombra */
  --shadow-xs:0 1px 2px rgba(15,23,42,.06);
  --shadow-sm:0 1px 3px rgba(15,23,42,.08),0 1px 2px rgba(15,23,42,.04);
  --shadow:0 4px 12px rgba(15,23,42,.08);
  --shadow-lg:0 12px 28px rgba(15,23,42,.14);

  /* Z-index */
  --z-sidebar:1040; --z-backdrop:1039; --z-topbar:1030; --z-overlay:1080; --z-toast:1090;

  /* Layout */
  --sidebar-w:264px;
  --topbar-h:60px;

  /* Transições */
  --t-fast:.15s ease; --t:.22s ease;
}

/* ---------- 2. SEMÂNTICOS (light por padrão) ---------- */
:root{
  --primary:var(--blue-600);
  --primary-hover:var(--blue-700);
  --primary-contrast:#fff;
  --accent:var(--sky-600);

  --bg:var(--slate-50);
  --surface:var(--white);
  --surface-2:var(--slate-100);
  --sidebar-bg:linear-gradient(180deg,var(--blue-700),var(--blue-900));
  --sidebar-fg:#dbe7f3;

  --text:var(--slate-900);
  --text-muted:var(--slate-500);
  --border:var(--slate-200);
  --ring:rgba(10,111,194,.35);

  --success:var(--green-600); --success-bg:var(--green-100);
  --warning:var(--amber-600); --warning-bg:var(--amber-100);
  --danger:var(--red-600);    --danger-bg:var(--red-100);
  --info:var(--sky-600);      --info-bg:var(--sky-100);
}

/* Dark mode: [data-theme="dark"] no <html> ou prefers-color-scheme */
[data-theme="dark"]{
  --primary:var(--blue-400);
  --primary-hover:var(--blue-300);
  --primary-contrast:#06223d;
  --bg:#0b1220;
  --surface:#131a2a;
  --surface-2:#1b2436;
  --sidebar-bg:linear-gradient(180deg,#0d1830,#070d1b);
  --sidebar-fg:#c6d4e6;
  --text:#e8eef7;
  --text-muted:#9fb0c6;
  --border:#27324a;
  --ring:rgba(63,147,216,.4);
  --success-bg:rgba(22,163,74,.18);
  --warning-bg:rgba(217,119,6,.18);
  --danger-bg:rgba(220,38,38,.18);
  --info-bg:rgba(3,105,161,.2);
  --shadow:0 4px 14px rgba(0,0,0,.45);
  --shadow-lg:0 16px 34px rgba(0,0,0,.55);
}

/* ---------- 3. RESET / BASE ---------- */
*,*::before,*::after{box-sizing:border-box}
html{ -webkit-text-size-adjust:100%; }
body{
  margin:0; font-family:var(--font-sans); font-size:var(--fs-base);
  line-height:var(--lh-normal); color:var(--text); background:var(--bg);
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  -webkit-tap-highlight-color:transparent;
  transition:background var(--t),color var(--t);
}
@supports (min-height:100dvh){ body{min-height:100dvh} }
h1,h2,h3,h4,h5{margin:0 0 var(--sp-3);font-weight:var(--fw-bold);line-height:var(--lh-tight);color:var(--text)}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
img{max-width:100%;height:auto}
:focus-visible{outline:3px solid var(--ring);outline-offset:2px;border-radius:var(--radius-sm)}

.ds-container{width:100%;max-width:1200px;margin-inline:auto;padding-inline:var(--sp-4)}
.text-muted{color:var(--text-muted)!important}

/* ---------- 4. BOTÕES ---------- */
.btn{
  --_bg:var(--surface); --_fg:var(--text); --_bd:var(--border);
  display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);
  min-height:44px;padding:.6rem 1.1rem;font:inherit;font-weight:var(--fw-semibold);
  font-size:var(--fs-sm);border:1px solid var(--_bd);border-radius:var(--radius-sm);
  background:var(--_bg);color:var(--_fg);cursor:pointer;
  transition:transform var(--t-fast),box-shadow var(--t-fast),background var(--t-fast),filter var(--t-fast);
}
.btn:hover{filter:brightness(.97);text-decoration:none}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-primary{--_bg:var(--primary);--_fg:var(--primary-contrast);--_bd:var(--primary)}
.btn-primary:hover{--_bg:var(--primary-hover);filter:none}
.btn-ghost{--_bg:transparent;--_bd:transparent}
.btn-outline{--_bg:transparent;--_bd:var(--border);--_fg:var(--primary)}
.btn-danger{--_bg:var(--danger);--_fg:#fff;--_bd:var(--danger)}
.btn-success{--_bg:var(--success);--_fg:#fff;--_bd:var(--success)}
.btn-block{width:100%}
.btn-sm{min-height:36px;padding:.4rem .75rem;font-size:var(--fs-xs)}
.btn-lg{min-height:52px;padding:.8rem 1.5rem;font-size:var(--fs-base)}

/* ---------- 5. CARDS + BENTO GRID ---------- */
.card{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-sm);overflow:hidden;
}
.card-body{padding:var(--sp-5)}
.card-head{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}
.card-title{font-size:var(--fs-lg);font-weight:var(--fw-bold);margin:0}

.bento{
  display:grid;gap:var(--sp-4);
  grid-template-columns:repeat(12,1fr);
}
/* width:auto/min-width:0 blindam o grid contra o Bootstrap .col-* (width:33%) quando ambos coexistem */
.bento>*{grid-column:span 12;min-width:0;width:auto;max-width:100%}
@media(min-width:640px){
  .bento>.col-6{grid-column:span 6}
  .bento>.col-4{grid-column:span 6}
}
@media(min-width:992px){
  .bento>.col-3{grid-column:span 3}
  .bento>.col-4{grid-column:span 4}
  .bento>.col-6{grid-column:span 6}
  .bento>.col-8{grid-column:span 8}
  .bento>.col-9{grid-column:span 9}
  .bento>.row-2{grid-row:span 2}
}

/* KPI card */
.kpi{position:relative;display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-5);
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);
  container-type:inline-size}
.kpi-label{font-size:var(--fs-sm);color:var(--text-muted);font-weight:var(--fw-medium)}
/* fonte escala pela LARGURA REAL do card (cqi), não do viewport — garante que valores
   monetários longos (R$ 1.234.567,89) caibam numa linha em cards estreitos do grid */
.kpi-value{font-size:clamp(1.05rem,8.5cqi,1.7rem);font-weight:var(--fw-extra);line-height:1.1;color:var(--text);
  max-width:100%;white-space:nowrap;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.kpi-trend{display:inline-flex;align-items:center;gap:.25rem;font-size:var(--fs-xs);font-weight:var(--fw-semibold)}
.kpi-trend.up{color:var(--success)} .kpi-trend.down{color:var(--danger)}
.kpi-icon{position:absolute;top:var(--sp-4);right:var(--sp-4);width:42px;height:42px;display:grid;place-items:center;
  border-radius:var(--radius);background:var(--blue-100);color:var(--primary);font-size:1.25rem}
[data-theme="dark"] .kpi-icon{background:rgba(63,147,216,.16)}
.kpi.accent-success .kpi-icon{background:var(--success-bg);color:var(--success)}
.kpi.accent-warning .kpi-icon{background:var(--warning-bg);color:var(--warning)}
.kpi.accent-danger  .kpi-icon{background:var(--danger-bg);color:var(--danger)}

/* ---------- 6. BADGES (cor + ícone) ---------- */
.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .6rem;border-radius:var(--radius-pill);
  font-size:var(--fs-xs);font-weight:var(--fw-semibold);line-height:1.4;border:1px solid transparent}
.badge i{font-size:.9em}
.badge-success{background:var(--success-bg);color:var(--success)}
.badge-warning{background:var(--warning-bg);color:var(--warning)}
.badge-danger{background:var(--danger-bg);color:var(--danger)}
.badge-info{background:var(--info-bg);color:var(--info)}
.badge-neutral{background:var(--surface-2);color:var(--text-muted)}

/* ---------- 7. FORMS ---------- */
.field{margin-bottom:var(--sp-4)}
.label{display:block;font-size:var(--fs-sm);font-weight:var(--fw-semibold);margin-bottom:var(--sp-2);color:var(--text)}
.label .req{color:var(--danger);margin-left:.15rem}
.input,.select,.textarea{
  width:100%;min-height:44px;padding:.6rem .8rem;font:inherit;font-size:var(--fs-base);
  color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);
  transition:border-color var(--t-fast),box-shadow var(--t-fast)
}
.textarea{min-height:96px;resize:vertical}
.input:focus,.select:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--ring);outline:none}
.input::placeholder{color:var(--slate-400)}
.input[readonly]{background:var(--surface-2);color:var(--text-muted)}
.help{font-size:var(--fs-xs);color:var(--text-muted);margin-top:var(--sp-1)}
.input-group{display:flex}
.input-group .input{border-top-right-radius:0;border-bottom-right-radius:0}
.input-group .btn{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}

/* ---------- 8. WIZARD (stepper) ---------- */
.wizard-steps{display:flex;gap:var(--sp-2);list-style:none;margin:0 0 var(--sp-6);padding:0;counter-reset:step;
  overflow-x:auto;scrollbar-width:none}
.wizard-steps::-webkit-scrollbar{display:none}
.wizard-step{flex:1 1 0;min-width:84px;position:relative;display:flex;flex-direction:column;align-items:center;
  gap:var(--sp-2);font-size:var(--fs-xs);color:var(--text-muted);text-align:center}
.wizard-step .dot{counter-increment:step;width:34px;height:34px;border-radius:var(--radius-pill);
  display:grid;place-items:center;background:var(--surface-2);color:var(--text-muted);
  font-weight:var(--fw-bold);border:2px solid var(--border);transition:all var(--t)}
.wizard-step .dot::before{content:counter(step)}
.wizard-step:not(:first-child)::after{content:"";position:absolute;top:17px;right:50%;width:100%;height:2px;
  background:var(--border);z-index:0}
.wizard-step .dot,.wizard-step .lbl{position:relative;z-index:1}
.wizard-step.active .dot{background:var(--primary);color:var(--primary-contrast);border-color:var(--primary);
  box-shadow:0 0 0 4px var(--ring)}
.wizard-step.active{color:var(--text);font-weight:var(--fw-semibold)}
.wizard-step.done .dot{background:var(--success);border-color:var(--success);color:#fff}
.wizard-step.done .dot::before{content:"\2713"}
.wizard-step.done:not(:first-child)::after{background:var(--success)}
.wizard-actions{display:flex;justify-content:space-between;gap:var(--sp-3);margin-top:var(--sp-6);
  padding-top:var(--sp-4);border-top:1px solid var(--border)}

/* ---------- 9. TABELA RESPONSIVA (vira cards no mobile, via CSS nativo) ---------- */
.data-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}
.data-table thead th{text-align:left;padding:var(--sp-3) var(--sp-4);color:var(--text-muted);
  font-weight:var(--fw-semibold);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.03em;
  border-bottom:1px solid var(--border);white-space:nowrap}
.data-table tbody td{padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border);vertical-align:middle}
.data-table tbody tr:hover{background:var(--surface-2)}
@media(max-width:768px){
  .data-table,.data-table thead,.data-table tbody,.data-table tr,.data-table td{display:block;width:100%}
  .data-table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .data-table tbody tr{margin-bottom:var(--sp-3);border:1px solid var(--border);border-radius:var(--radius);
    background:var(--surface);box-shadow:var(--shadow-xs);padding:var(--sp-2) var(--sp-4)}
  .data-table tbody td{border:0;display:flex;justify-content:space-between;gap:var(--sp-4);
    padding:var(--sp-2) 0;text-align:right}
  .data-table tbody td::before{content:attr(data-label);font-weight:var(--fw-semibold);
    color:var(--text-muted);text-align:left}
}

/* ---------- 10. APP SHELL (topbar + sidebar off-canvas) ---------- */
.app{min-height:100dvh}
.topbar{position:sticky;top:0;z-index:var(--z-topbar);height:var(--topbar-h);
  display:flex;align-items:center;gap:var(--sp-3);padding:0 var(--sp-4);
  background:color-mix(in srgb,var(--surface) 85%,transparent);
  backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--border)}
.topbar .spacer{flex:1}
.sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar-w);z-index:var(--z-sidebar);
  background:var(--sidebar-bg);color:var(--sidebar-fg);display:flex;flex-direction:column;
  padding:var(--sp-4);transform:translateX(-100%);transition:transform var(--t)}
.sidebar.open{transform:none}
.sidebar a{display:flex;align-items:center;gap:var(--sp-3);padding:.7rem .85rem;border-radius:var(--radius-sm);
  color:var(--sidebar-fg);font-weight:var(--fw-medium);font-size:var(--fs-sm)}
.sidebar a:hover{background:rgba(255,255,255,.08);text-decoration:none}
.sidebar a.active{background:rgba(255,255,255,.16);color:#fff}
.sidebar-backdrop{position:fixed;inset:0;background:rgba(2,6,23,.5);z-index:var(--z-backdrop);
  opacity:0;visibility:hidden;transition:opacity var(--t)}
.sidebar-backdrop.show{opacity:1;visibility:visible}
.content{padding:var(--sp-5)}
@media(min-width:992px){
  .sidebar{transform:none}
  .with-sidebar .topbar,.with-sidebar .content{margin-left:var(--sidebar-w)}
  .menu-toggle{display:none}
  .sidebar-backdrop{display:none}
}

/* ---------- 11. TOASTS ---------- */
.toast-wrap{position:fixed;left:50%;transform:translateX(-50%);bottom:var(--sp-4);display:grid;gap:var(--sp-2);
  z-index:var(--z-toast);width:min(420px,92vw)}
.toast{display:flex;align-items:center;gap:var(--sp-3);background:var(--slate-900);color:#fff;
  padding:.85rem 1rem;border-radius:var(--radius);box-shadow:var(--shadow-lg);font-size:var(--fs-sm)}
.toast.success{background:var(--success)} .toast.warning{background:var(--amber-600)} .toast.danger{background:var(--danger)}

/* ---------- 12. AUTH (login/cadastro modernos) ---------- */
.auth{min-height:100dvh;display:grid;grid-template-columns:1fr;background:var(--bg)}
@media(min-width:992px){ .auth{grid-template-columns:1.1fr .9fr} }
.auth-hero{display:none;position:relative;padding:var(--sp-12);color:#fff;
  background:linear-gradient(135deg,var(--blue-700),var(--blue-900))}
@media(min-width:992px){ .auth-hero{display:flex;flex-direction:column;justify-content:center} }
.auth-panel{display:flex;align-items:center;justify-content:center;padding:var(--sp-6)}
.auth-card{width:100%;max-width:420px}

/* ---------- 13. UTILITÁRIOS ---------- */
.stack{display:grid;gap:var(--sp-4)}
.cluster{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center}
.skeleton{background:linear-gradient(90deg,var(--surface-2) 25%,var(--border) 37%,var(--surface-2) 63%);
  background-size:400% 100%;animation:sk 1.4s ease infinite;border-radius:var(--radius-sm);min-height:1em}
@keyframes sk{0%{background-position:100% 0}100%{background-position:0 0}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
