/* ============================================================
   EAD Play — Design system do painel (v3)
   Tokens compartilhados com a nova área do aluno (mesma marca:
   índigo→violeta, superfícies escuras por padrão, modo claro via
   [data-theme="light"]). Sem framework CSS; ~1 arquivo, sem build.
   v3: escala fechada (espaço base 4, tipografia 11–30px sem 800,
   raios 4/6/8/12/16, controles 28/32/36/44 iguais para botão e campo),
   sidebar recolhível, abas sem rolagem (menu "Mais"), tabelas que
   escondem colunas pela própria largura, scrollbars finas.
   Seções: tokens · reset · layout · sidebar · topbar · componentes ·
   tabelas · modais · toasts · utilitários · responsivo
   ============================================================ */

/* ── Tokens ───────────────────────────────────────────────── */
:root {
    --primary-50:#eef2ff; --primary-100:#dbe4ff; --primary-200:#bac8ff; --primary-300:#91a7ff;
    --primary-400:#748ffc; --primary-500:#5c7cfa; --primary-600:#4c6ef5; --primary-700:#4263eb; --primary-800:#3b5bdb;
    --violet:#7c3aed; --primary-rgb:76,110,245;
    --gradient-primary:linear-gradient(135deg,#4c6ef5 0%,#7c3aed 100%);

    --success:#10b981; --success-rgb:16,185,129;
    --warning:#f59e0b; --warning-rgb:245,158,11;
    --danger:#ef4444;  --danger-rgb:239,68,68;
    --info:#06b6d4;    --info-rgb:6,182,212;
    --orange:#f97316;  --orange-rgb:249,115,22;
    --pink:#ec4899;    --pink-rgb:236,72,153;
    --teal:#14b8a6;    --teal-rgb:20,184,166;
    --purple:#8b5cf6;  --purple-rgb:139,92,246;
    --blue:#3b82f6;    --blue-rgb:59,130,246;
    --green:#22c55e;   --green-rgb:34,197,94;

    /* tipografia (nenhum texto abaixo de 11px) */
    --font:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
    --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
    --fs-2xs:.6875rem; /* 11 — rótulo uppercase, th, contadores */
    --fs-xs:.75rem;    /* 12 — ajuda, meta, badge */
    --fs-sm:.8125rem;  /* 13 — secundário, células, botões sm, abas */
    --fs-md:.875rem;   /* 14 — corpo, campos, botões, menu */
    --fs-base:.9375rem;/* 15 — título de card/seção */
    --fs-lg:1rem;      /* 16 — título da página e de modal */
    --fs-xl:1.25rem;   /* 20 — título do hero de entidade */
    --fs-2xl:1.5rem;   /* 24 — valor de KPI */
    --fs-3xl:1.875rem; /* 30 — display */
    --tr-tight:-.011em; --tr-tighter:-.02em; --tr-caps:.06em;

    /* espaço (base 4) */
    --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px; --sp-6:24px; --sp-8:32px; --sp-10:40px; --sp-12:48px;
    --gap-card:20px; --gap-section:24px; --pad-card:20px;

    /* raios */
    --r-xs:4px; --r-sm:6px; --r-md:8px; --r-lg:12px; --r-xl:16px; --r-full:999px;

    /* alturas de controle (botão = campo = icon-btn do mesmo tamanho) */
    --h-xs:28px; --h-sm:32px; --h-md:36px; --h-lg:44px;
    --ic-xs:24px; --ic-sm:32px; --ic-md:40px; --ic-lg:56px;

    --ease:cubic-bezier(.4,0,.2,1); --ease-out:cubic-bezier(.16,1,.3,1); --dur-fast:120ms; --dur:200ms; --dur-slow:300ms;
    --sidebar-w-expanded:248px; --sidebar-w-collapsed:64px; --sidebar-w:var(--sidebar-w-expanded);
    --topbar-h:56px; --content-max:1440px; --page-pad:32px;
    --z-sidebar:200; --z-topbar:150; --z-dropdown:300; --z-modal:400; --z-toast:500; --z-tip:550; --z-progress:600;
}
/* Paleta escura: padrão da página e da sidebar, que é escura nos dois temas — no claro ela
   recebe esta paleta de volta e tudo que mora nela (itens, pílulas, kbd, scrollbar) acompanha */
:root,[data-theme="light"] .sidebar {
    /* superfícies (dark) */
    --bg:#0f1117; --bg-elev:#13161f; --surface:#1a1d2e; --surface-2:#232640; --surface-3:#2a2d4a;
    --surface-glass:rgba(26,29,46,.72);
    --surface-subtle:rgba(255,255,255,.02); --surface-hover:rgba(255,255,255,.035);
    --field-bg:#1f2235;
    --border:rgba(255,255,255,.07); --border-strong:rgba(255,255,255,.12); --border-hover:rgba(255,255,255,.22);
    --sidebar-bg:linear-gradient(180deg,#171a2b 0%,#12141f 100%); --sidebar-border:rgba(255,255,255,.06);
    --topbar-bg:rgba(15,17,23,.78);
    --text:#e6e8f2; --text-2:#aab0c6; --text-3:#858aa3; --text-on-primary:#fff;
    --primary-text:var(--primary-400); --primary-soft:rgba(var(--primary-rgb),.14); --primary-soft-2:rgba(var(--primary-rgb),.26);
    --ring:rgba(var(--primary-rgb),.35);
    /* texto semântico (tons 300/400 no escuro, 700 no claro — contraste AA nos dois) */
    --danger-text:#f87171; --success-text:#34d399; --warning-text:#fbbf24; --info-text:#22d3ee;
    --tooltip-bg:#0b0d14;
    --scroll-thumb:rgba(255,255,255,.14); --scroll-thumb-hover:rgba(255,255,255,.26);
    --skeleton:linear-gradient(90deg,rgba(255,255,255,.04) 25%,rgba(255,255,255,.10) 50%,rgba(255,255,255,.04) 75%);
    --shadow-xs:0 1px 2px rgba(0,0,0,.3);
    --shadow-sm:0 1px 2px rgba(0,0,0,.35);
    --shadow-md:0 6px 16px -4px rgba(0,0,0,.45),0 2px 6px -2px rgba(0,0,0,.3);
    --shadow-lg:0 18px 40px -12px rgba(0,0,0,.55),0 6px 14px -6px rgba(0,0,0,.35);
    --shadow-glow:0 12px 32px -12px rgba(var(--primary-rgb),.45);
    color-scheme:dark;
}
[data-theme="light"] {
    --bg:#f5f6fa; --bg-elev:#fafbfd; --surface:#ffffff; --surface-2:#f6f7fb; --surface-3:#eceff5;
    --surface-glass:rgba(255,255,255,.8);
    --surface-subtle:#f9fafc; --surface-hover:#f4f6fa; --field-bg:#ffffff;
    --border:#e5e8f0; --border-strong:#d5dae6; --border-hover:#b9c0d2;
    --topbar-bg:rgba(245,246,250,.85);
    --text:#151827; --text-2:#4a5068; --text-3:#646a80;
    --primary-text:var(--primary-700); --primary-soft:rgba(var(--primary-rgb),.10); --primary-soft-2:rgba(var(--primary-rgb),.18);
    --ring:rgba(var(--primary-rgb),.25);
    --danger-text:#b91c1c; --success-text:#047857; --warning-text:#92400e; --info-text:#155e75;
    --tooltip-bg:#1a1d2e;
    --scroll-thumb:rgba(17,24,39,.20); --scroll-thumb-hover:rgba(17,24,39,.34);
    --skeleton:linear-gradient(90deg,rgba(0,0,0,.04) 25%,rgba(0,0,0,.09) 50%,rgba(0,0,0,.04) 75%);
    --shadow-xs:0 1px 2px rgba(16,24,40,.05);
    --shadow-sm:0 1px 3px rgba(16,24,40,.07);
    --shadow-md:0 6px 16px -4px rgba(16,24,40,.12),0 2px 6px -2px rgba(16,24,40,.06);
    --shadow-lg:0 18px 40px -12px rgba(16,24,40,.18),0 6px 14px -6px rgba(16,24,40,.08);
    --shadow-glow:0 12px 32px -12px rgba(var(--primary-rgb),.35);
    color-scheme:light;
}
[data-theme="light"] .only-dark { display:none !important; }
html:not([data-theme="light"]) .only-light { display:none !important; }

/* ── Reset ────────────────────────────────────────────────── */
*,*::before,*::after { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; scrollbar-gutter:stable; }
html.no-anim *,html.no-anim *::before,html.no-anim *::after { transition:none !important; }
body { margin:0; background:var(--bg); color:var(--text); font-family:var(--font); font-size:var(--fs-md); line-height:1.5; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; min-height:100vh; min-height:100dvh; font-feature-settings:"cv11"; }
a { color:var(--primary-text); text-decoration:none; }
a:hover { color:var(--primary-500); }
img,svg { display:block; max-width:100%; }
h1,h2,h3,h4,h5 { margin:0; font-weight:600; letter-spacing:var(--tr-tight); line-height:1.3; }
p { margin:0 0 .75em; }
button,input,select,textarea { font:inherit; color:inherit; }
button { cursor:pointer; background:none; border:0; padding:0; }
code,.mono { font-family:var(--mono); font-size:.9em; }
/* em textos de 12px o .9em daria 10,8px (abaixo do mínimo de 11) */
:is(.help,.cell-sub,.small,.field-error,.kpi-sub,.badge,.hero-desc) code { font-size:inherit; }
table { border-collapse:collapse; width:100%; }
hr { border:0; border-top:1px solid var(--border); margin:4px 0; }
:focus-visible { outline:2px solid var(--primary-500); outline-offset:2px; }
::selection { background:var(--primary-soft-2); }
[hidden] { display:none !important; }
.sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); clip-path:inset(50%); white-space:nowrap; border:0; }

/* Barras de rolagem finas e da cor do tema. No Chrome 121+ scrollbar-width/color têm prioridade
   sobre ::-webkit-scrollbar; o bloco @supports cobre Safari e navegadores antigos. */
* { scrollbar-width:thin; scrollbar-color:var(--scroll-thumb) transparent; }
@supports not (scrollbar-color:auto) {
    ::-webkit-scrollbar { width:10px; height:10px; }
    ::-webkit-scrollbar-track,::-webkit-scrollbar-corner { background:transparent; }
    ::-webkit-scrollbar-thumb { background:var(--scroll-thumb); border-radius:10px; border:3px solid transparent; background-clip:padding-box; }
    ::-webkit-scrollbar-thumb:hover { background-color:var(--scroll-thumb-hover); }
}
/* Barra "fantasma": só aparece com o mouse sobre o container */
.sidebar-nav,.combo-list,.modal-body { scrollbar-color:transparent transparent; }
.sidebar-nav:hover,.sidebar-nav:focus-within,.combo-list:hover,.modal-body:hover { scrollbar-color:var(--scroll-thumb) transparent; }

/* ── Layout ───────────────────────────────────────────────── */
.app { display:flex; min-height:100vh; min-height:100dvh; }
.main { flex:1; min-width:0; margin-left:var(--sidebar-w); display:flex; flex-direction:column; transition:margin-left var(--dur) var(--ease); }
.content { flex:1; width:100%; max-width:var(--content-max); margin:0 auto; padding:24px var(--page-pad) 40px; }
body.page-wide { --content-max:1680px; }
.app-footer { min-height:48px; padding:12px max(var(--page-pad), calc((100% - var(--content-max)) / 2 + var(--page-pad))); font-size:var(--fs-xs); color:var(--text-3); display:flex; gap:8px; align-items:center; border-top:1px solid var(--border); }
.app-footer .sep { opacity:.5; }
/* Voltar ao topo (app.js): fixo no canto inferior direito, abaixo de modais e toasts */
.back-to-top { position:fixed; right:24px; bottom:24px; z-index:var(--z-topbar); width:40px; height:40px; border-radius:var(--r-full); display:grid; place-items:center; background:var(--surface); color:var(--text-2); border:1px solid var(--border-strong); box-shadow:var(--shadow-md); font-size:14px; cursor:pointer; opacity:0; transform:translateY(8px); transition:opacity var(--dur-fast),transform var(--dur-fast),background-color var(--dur-fast),color var(--dur-fast); }
.back-to-top.show { opacity:1; transform:none; }
.back-to-top:hover { background:var(--surface-hover); color:var(--text); border-color:var(--border-hover); }
.back-to-top:focus-visible { outline:none; box-shadow:0 0 0 3px var(--ring),var(--shadow-md); }
#content:focus { outline:none; }
.nav-progress { position:fixed; top:0; left:0; height:2px; width:0; background:var(--gradient-primary); z-index:var(--z-progress); opacity:0; transition:width .3s var(--ease),opacity .3s; pointer-events:none; }
.nav-progress.running { opacity:1; width:70%; transition:width 6s cubic-bezier(.1,.6,.2,1),opacity .2s; }
.nav-progress.done { width:100%; opacity:0; transition:width .2s,opacity .4s .2s; }

/* ── Sidebar ──────────────────────────────────────────────── */
/* sempre escura (paleta nos tokens); color re-resolve o texto herdado do body, que no claro é escuro */
.sidebar { position:fixed; inset:0 auto 0 0; width:var(--sidebar-w); z-index:var(--z-sidebar); background:var(--sidebar-bg); color:var(--text); border-right:1px solid var(--sidebar-border); display:flex; flex-direction:column; transition:width var(--dur) var(--ease),transform .3s var(--ease-out); }
/* logo centralizada; o fechar da gaveta (celular) fica por cima, à direita, sem tirá-la do centro */
.sidebar-brand { position:relative; height:var(--topbar-h); display:flex; align-items:center; justify-content:center; padding:0 12px; border-bottom:1px solid var(--sidebar-border); flex-shrink:0; }
.brand-link { display:flex; align-items:center; justify-content:center; min-width:0; }
.sidebar-brand .sidebar-close { position:absolute; top:50%; right:12px; transform:translateY(-50%); }
.brand-img { max-height:28px; max-width:148px; width:auto; object-fit:contain; }
.brand-mini { display:none; width:28px; height:28px; border-radius:var(--r-md); object-fit:contain; }
.sidebar-nav { flex:1; overflow-y:auto; overflow-x:hidden; padding:6px 10px 16px; overscroll-behavior:contain; }
.nav-section { margin-top:2px; }
.nav-section + .nav-section { border-top:1px solid var(--sidebar-border); margin-top:6px; }
.nav-label { width:100%; display:flex; align-items:center; justify-content:space-between; gap:8px; padding:12px 10px 4px; font-size:var(--fs-2xs); line-height:16px; font-weight:600; letter-spacing:var(--tr-caps); text-transform:uppercase; color:var(--text-3); cursor:pointer; user-select:none; white-space:nowrap; }
.nav-label .chev { font-size:10px; opacity:0; transition:transform var(--dur),opacity var(--dur-fast); }
.nav-section:hover .nav-label .chev,.nav-label:focus-visible .chev,.nav-section.collapsed .nav-label .chev { opacity:.6; }
.nav-label:hover { color:var(--text-2); }
.nav-section.collapsed .nav-section-body { display:none; }
.nav-section.collapsed .nav-label .chev { transform:rotate(-90deg); }
.nav-item,.nav-subitem { width:100%; display:flex; align-items:center; gap:10px; height:34px; padding:0 10px; margin:1px 0; border-radius:var(--r-md); color:var(--text-2); font-weight:400; font-size:var(--fs-md); line-height:20px; text-align:left; transition:background-color var(--dur-fast),color var(--dur-fast); position:relative; white-space:nowrap; }
.nav-item i:first-child { width:18px; text-align:center; font-size:14px; color:var(--text-3); transition:color var(--dur-fast); flex-shrink:0; }
.nav-item span:not(.nav-pill),.nav-subitem span:not(.nav-pill) { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; }
.nav-item:hover,.nav-subitem:hover { background:var(--surface-hover); color:var(--text); }
.nav-item:hover i:first-child { color:var(--text-2); }
.nav-item.active { background:var(--primary-soft); color:var(--primary-text); font-weight:600; }
.nav-item.active i:first-child { color:var(--primary-text); }
.nav-item.active::before { content:''; position:absolute; left:0; top:8px; bottom:8px; width:3px; border-radius:0 3px 3px 0; background:var(--gradient-primary); }
/* Grupo com subitem ativo: só o ícone e o texto destacam (a pílula fica no subitem) */
.nav-group-toggle.active { background:transparent; color:var(--text); }
.nav-group-toggle.active::before { display:none; }
.nav-group-toggle.active:hover { background:var(--surface-hover); }
.nav-group .chev { font-size:10px; opacity:.5; transition:transform var(--dur); margin-left:auto; }
.nav-group.open .nav-group-toggle .chev { transform:rotate(180deg); }
.nav-sub { display:none; padding:1px 0 3px 9px; border-left:1px solid var(--border); margin-left:18px; }
.nav-group.open .nav-sub { display:block; }
/* texto do subitem alinhado ao texto do grupo (12 + 19 + 1 + 10 + 10 = 52 = 12 + 10 + 20 + 10) */
.nav-subitem { height:30px; padding:0 10px; margin:1px 0; font-size:var(--fs-sm); }
.nav-subitem.active { color:var(--primary-text); font-weight:600; background:var(--primary-soft); }
.nav-pill { margin-left:auto; font-size:var(--fs-2xs); font-weight:600; min-width:18px; height:18px; padding:0 6px; border-radius:var(--r-full); display:inline-flex; align-items:center; justify-content:center; background:rgba(var(--danger-rgb),.16); color:#fca5a5; flex-shrink:0; font-variant-numeric:tabular-nums; }
.nav-pill.orange { background:rgba(var(--orange-rgb),.16); color:#fdba74; }
.nav-pill.blue { background:rgba(var(--blue-rgb),.16); color:#93c5fd; }
.nav-pill.green { background:rgba(var(--green-rgb),.16); color:#86efac; }
.sidebar-foot { padding:8px 10px; border-top:1px solid var(--sidebar-border); display:flex; align-items:center; gap:4px; }
.sidebar-foot .sidebar-collapse { flex:1; min-width:0; }
/* Abrir/recolher todas as seções e grupos (o ícone mostra a próxima ação) */
.sb-toggle-all { color:var(--text-3); }
.sb-toggle-all .ic-abrir { display:none; }
.sb-toggle-all.tudo-fechado .ic-abrir { display:inline; } .sb-toggle-all.tudo-fechado .ic-fechar { display:none; }
/* Botão de recolher no rodapé da sidebar (o usuário fica só no menu da topbar) */
.sidebar-collapse { color:var(--text-3); font-size:var(--fs-sm); }
.sidebar-collapse i:first-child { font-size:13px; transition:transform var(--dur) var(--ease); }
.sidebar-collapse kbd { margin-left:auto; opacity:0; transition:opacity var(--dur-fast); }
.sidebar-collapse:hover kbd,.sidebar-collapse:focus-visible kbd { opacity:1; }
.user-chip { display:flex; align-items:center; gap:10px; padding:6px 8px; border-radius:var(--r-md); flex:1; min-width:0; color:inherit; }
.user-chip:hover { background:var(--surface-hover); color:inherit; }
[data-theme="light"] .user-chip:hover { background:var(--surface-2); }
.u-info { min-width:0; display:flex; flex-direction:column; line-height:1.25; }
.u-name { font-size:var(--fs-sm); font-weight:600; color:var(--text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.u-role { font-size:var(--fs-xs); color:var(--text-3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sidebar-backdrop { position:fixed; inset:0; background:rgba(5,7,15,.55); z-index:calc(var(--z-sidebar) - 1); opacity:0; pointer-events:none; transition:opacity .25s; }
body.sidebar-open .sidebar-backdrop { opacity:1; pointer-events:auto; }

/* Sidebar recolhida (só ícones) — só no desktop; até 1024px a sidebar é gaveta */
@media (min-width:1025px) {
    html[data-sidebar="collapsed"] { --sidebar-w:var(--sidebar-w-collapsed); }
    [data-sidebar="collapsed"] .sidebar-brand { padding:0; }
    [data-sidebar="collapsed"] .brand-img { display:none !important; }
    [data-sidebar="collapsed"] .brand-mini { display:block; }
    [data-sidebar="collapsed"] .sidebar-collapse i:first-child { transform:rotate(180deg); }
    [data-sidebar="collapsed"] .sidebar-collapse kbd,[data-sidebar="collapsed"] .sb-toggle-all { display:none; }
    [data-sidebar="collapsed"] .sidebar-foot { justify-content:center; }
    [data-sidebar="collapsed"] .sidebar-foot .sidebar-collapse { flex:0 0 auto; }
    [data-sidebar="collapsed"] .nav-section + .nav-section { border-top:0; margin-top:2px; }
    [data-sidebar="collapsed"] .nav-label { height:1px; padding:0; margin:12px 4px; background:var(--border); font-size:0; pointer-events:none; overflow:hidden; }
    [data-sidebar="collapsed"] .nav-label .chev,[data-sidebar="collapsed"] .nav-label > span { display:none; }
    [data-sidebar="collapsed"] .nav-section.collapsed .nav-section-body { display:block; }
    [data-sidebar="collapsed"] .nav-item { width:40px; padding:0; gap:0; justify-content:center; }
    [data-sidebar="collapsed"] .nav-item > span:not(.nav-pill),[data-sidebar="collapsed"] .nav-item > .chev { display:none; }
    [data-sidebar="collapsed"] .nav-item i:first-child { font-size:16px; }
    [data-sidebar="collapsed"] .nav-item .nav-pill { position:absolute; top:6px; right:6px; width:8px; min-width:8px; height:8px; padding:0; font-size:0; box-shadow:0 0 0 2px var(--surface); }
    [data-sidebar="collapsed"] .nav-sub { display:none !important; }
}
/* Tooltip (modo recolhido e [data-tip]) e flyout dos grupos: ficam no <body> (position:fixed) */
.sb-tip { position:fixed; z-index:var(--z-tip); padding:6px 10px; border-radius:var(--r-sm); background:var(--tooltip-bg); color:#fff; font-size:var(--fs-xs); line-height:16px; font-weight:500; white-space:nowrap; box-shadow:var(--shadow-md); pointer-events:none; animation:tipIn var(--dur-fast) var(--ease-out); max-width:320px; overflow:hidden; text-overflow:ellipsis; }
html:not([data-theme="light"]) .sb-tip { box-shadow:0 0 0 1px rgba(255,255,255,.09),var(--shadow-md); }
.sb-tip.lado { transform:translateY(-50%); }
.sb-tip.cima { transform:translate(-50%,-100%); animation-name:tipUp; }
.sb-tip.baixo { transform:translateX(-50%); animation-name:tipDown; }
.sb-flyout { position:fixed; z-index:var(--z-dropdown); min-width:220px; padding:6px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:var(--shadow-lg); animation:fadeUp .14s var(--ease-out); }
.sb-flyout-head { padding:8px 10px 6px; font-size:var(--fs-2xs); line-height:16px; font-weight:600; letter-spacing:var(--tr-caps); text-transform:uppercase; color:var(--text-3); }
.sb-flyout a { display:flex; align-items:center; gap:10px; height:32px; padding:0 10px; border-radius:var(--r-sm); color:var(--text-2); font-size:var(--fs-sm); font-weight:500; }
.sb-flyout a:hover,.sb-flyout a:focus-visible { background:var(--surface-hover); color:var(--text); outline:none; }
[data-theme="light"] .sb-flyout a:hover { background:var(--surface-2); }
.sb-flyout a.active { background:var(--primary-soft); color:var(--primary-text); font-weight:600; }

/* ── Topbar ───────────────────────────────────────────────── */
/* padding-inline alinha título e ações às bordas da coluna de conteúdo (max-width centralizada) */
.topbar { position:sticky; top:0; z-index:var(--z-topbar); height:var(--topbar-h); display:flex; align-items:center; gap:12px; padding:0 max(var(--page-pad), calc((100% - var(--content-max)) / 2 + var(--page-pad))); background:var(--topbar-bg); backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px); border-bottom:1px solid var(--border); }
.topbar-title { display:flex; align-items:center; gap:12px; min-width:0; flex:1; }
.topbar-title .t-icon { width:var(--ic-sm); height:var(--ic-sm); border-radius:var(--r-md); display:grid; place-items:center; background:var(--primary-soft); color:var(--primary-text); font-size:14px; flex-shrink:0; }
.topbar-title .t-text { min-width:0; display:flex; flex-direction:column; }
.topbar-title h1 { font-size:var(--fs-lg); line-height:20px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.topbar-title .t-sub { display:block; font-size:var(--fs-xs); line-height:16px; color:var(--text-3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.topbar-actions { display:flex; align-items:center; gap:8px; flex-shrink:0; }
.topbar-sep { width:1px; height:20px; background:var(--border-strong); margin:0 4px; flex-shrink:0; }
.icon-btn { width:var(--h-sm); height:var(--h-sm); border-radius:var(--r-md); display:inline-grid; place-items:center; color:var(--text-2); background:transparent; border:1px solid transparent; font-size:14px; flex-shrink:0; transition:background-color var(--dur-fast),color var(--dur-fast),border-color var(--dur-fast); }
.icon-btn:hover { background:var(--surface-hover); color:var(--text); }
[data-theme="light"] .icon-btn:hover { background:var(--surface-3); }
.icon-btn:disabled { opacity:.5; cursor:not-allowed; }
.icon-btn-sm { width:var(--h-xs); height:var(--h-xs); font-size:12px; border-radius:var(--r-sm); }
/* gatilhos da gaveta: só até 1024px (precisam vencer o display do .icon-btn) */
.icon-btn.menu-toggle,.icon-btn.sidebar-close { display:none; }
.user-menu .user-chip { height:var(--h-sm); gap:8px; padding:2px 8px 2px 2px; border:1px solid var(--border); background:var(--surface); flex:0 0 auto; }
.user-menu .user-chip:hover { border-color:var(--border-hover); }
.user-menu .user-chip { border-radius:var(--r-full); }
.user-menu .avatar { width:26px; height:26px; font-size:var(--fs-2xs); }
.user-menu .u-name { max-width:120px; font-weight:500; }
.u-chev { font-size:10px; color:var(--text-3); }
.avatar { width:var(--ic-sm); height:var(--ic-sm); border-radius:50%; display:inline-grid; place-items:center; background:var(--gradient-primary); color:#fff; font-weight:600; font-size:var(--fs-xs); flex-shrink:0; letter-spacing:.02em; }
/* Paleta por nome (EAD.fmt.cor): pessoas diferentes ficam com cores diferentes nas listas */
.avatar.c1 { background:linear-gradient(135deg,#4c6ef5,#7c3aed); } .avatar.c2 { background:linear-gradient(135deg,#0ea5e9,#2563eb); }
.avatar.c3 { background:linear-gradient(135deg,#10b981,#0d9488); } .avatar.c4 { background:linear-gradient(135deg,#f59e0b,#ea580c); }
.avatar.c5 { background:linear-gradient(135deg,#ec4899,#db2777); } .avatar.c6 { background:linear-gradient(135deg,#8b5cf6,#6d28d9); }
.avatar.c7 { background:linear-gradient(135deg,#14b8a6,#0891b2); } .avatar.c0 { background:linear-gradient(135deg,#64748b,#334155); }
.avatar-xs { width:24px; height:24px; font-size:var(--fs-2xs); }
.avatar-lg { width:var(--ic-lg); height:var(--ic-lg); border-radius:14px; font-size:var(--fs-xl); font-weight:700; }

/* Tema: botão de ícone na topbar (lua no escuro, sol no claro); pílula nas telas de login */
.theme-btn .fa-sun { color:var(--warning); }
.theme-toggle { display:inline-flex; align-items:center; gap:6px; padding:0 8px; border-radius:var(--r-full); border:1px solid var(--border); background:var(--surface); color:var(--text-3); font-size:var(--fs-xs); height:var(--h-sm); }
.theme-toggle-track { width:30px; height:16px; border-radius:var(--r-full); background:var(--surface-3); position:relative; transition:background .2s; }
.theme-toggle-thumb { position:absolute; top:2px; left:2px; width:12px; height:12px; border-radius:50%; background:var(--primary-500); transition:transform .25s var(--ease-out); }
[data-theme="light"] .theme-toggle-thumb { transform:translateX(14px); }
[data-theme="light"] .theme-toggle-sun { color:var(--warning); }
html:not([data-theme="light"]) .theme-toggle-moon { color:var(--primary-300); }

/* Dropdown */
.dropdown { position:relative; }
.dropdown-menu { position:absolute; top:calc(100% + 6px); left:0; min-width:200px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:var(--shadow-lg); padding:4px; z-index:var(--z-dropdown); display:none; }
.dropdown-menu.dropdown-right { left:auto; right:0; }
.dropdown.open .dropdown-menu { display:block; animation:fadeUp .15s var(--ease-out); }
.dropdown-menu a,.dropdown-menu button { display:flex; align-items:center; gap:10px; width:100%; min-height:32px; padding:6px 10px; border-radius:var(--r-sm); color:var(--text-2); font-size:var(--fs-sm); line-height:20px; font-weight:500; text-align:left; white-space:nowrap; }
.dropdown-menu a:hover,.dropdown-menu button:hover,.dropdown-menu a:focus-visible,.dropdown-menu button:focus-visible { background:var(--surface-hover); color:var(--text); outline:none; }
[data-theme="light"] .dropdown-menu a:hover,[data-theme="light"] .dropdown-menu button:hover { background:var(--surface-2); }
.dropdown-menu a.danger,.dropdown-menu button.danger { color:var(--danger-text); } .dropdown-menu a.danger:hover,.dropdown-menu button.danger:hover { background:rgba(var(--danger-rgb),.12); color:var(--danger-text); }
.dropdown-menu a.danger i,.dropdown-menu button.danger i { color:inherit; }
.dropdown-menu i { width:16px; text-align:center; color:var(--text-3); font-size:13px; flex-shrink:0; }
.dropdown-menu hr { margin:4px -4px; }
.dropdown-head { padding:8px 10px 10px; border-bottom:1px solid var(--border); margin:0 -4px 4px; padding-left:14px; padding-right:14px; display:flex; flex-direction:column; gap:2px; }
.dropdown-head strong { font-size:var(--fs-sm); font-weight:600; } .dropdown-head span { font-size:var(--fs-xs); color:var(--text-3); }
.dropdown-head .badge { align-self:flex-start; margin-top:6px; }
/* gatilho aberto: chevron gira e o botão fica "pressionado" */
.u-chev,.tabs-more-btn > i { transition:transform var(--dur) var(--ease); }
.dropdown.open > [data-dropdown] > .u-chev,.dropdown.open > .tabs-more-btn > i { transform:rotate(180deg); }
/* Privacidade (EAD.privacidade): ícone do modo atual, menu com estado e ocultação visual dos números */
.pv-btn .pv-ic-parcial,.pv-btn .pv-ic-tudo { display:none; }
html[data-privacidade="parcial"] .pv-btn .pv-ic-exibir,html[data-privacidade="tudo"] .pv-btn .pv-ic-exibir { display:none; }
html[data-privacidade="parcial"] .pv-btn .pv-ic-parcial,html[data-privacidade="tudo"] .pv-btn .pv-ic-tudo { display:inline; }
html[data-privacidade] .pv-btn { color:var(--primary-text); background:rgba(var(--primary-rgb),.12); }
.pv-menu .dropdown-menu { min-width:250px; }
.pv-menu .dropdown-menu button { align-items:flex-start; }
.pv-menu .dropdown-menu button i { margin-top:3px; }
.pv-menu .dropdown-menu button span { display:flex; flex-direction:column; }
.pv-menu .dropdown-menu button small { font-size:var(--fs-2xs); line-height:16px; color:var(--text-3); font-weight:400; }
.pv-menu .dropdown-menu button.active { color:var(--text); background:rgba(var(--primary-rgb),.10); }
.pv-menu .dropdown-menu button.active i { color:var(--primary-text); }
html[data-privacidade] .pv-fin,html[data-privacidade="tudo"] .pv-num,html[data-privacidade] [data-sensivel="fin"] { display:inline-block; filter:blur(6px); user-select:none; -webkit-user-select:none; pointer-events:none; }
html[data-privacidade] [data-sensivel="fin"] { display:revert; }
html[data-privacidade] svg text.pv-fin,html[data-privacidade="tudo"] svg text.pv-num { filter:none; opacity:0; }
@media print { html[data-privacidade] .pv-fin,html[data-privacidade="tudo"] .pv-num { filter:none; color:transparent; } }
.user-menu.open .user-chip { border-color:var(--border-hover); background:var(--surface-hover); }
[data-theme="light"] .user-menu.open .user-chip { background:var(--surface-2); }
.tabs-more.open > .tabs-more-btn { color:var(--text); }
.tabs-more.open > .tabs-more-btn::before { background:var(--surface-hover); }
[data-theme="light"] .tabs-more.open > .tabs-more-btn::before { background:var(--surface-3); }

/* ── Breadcrumb ───────────────────────────────────────────── */
.crumbs { display:flex; align-items:center; gap:6px; font-size:var(--fs-sm); line-height:20px; color:var(--text-3); margin-bottom:16px; flex-wrap:nowrap; min-width:0; overflow:hidden; }
.crumbs > a,.crumbs > span { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:24ch; flex:0 1 auto; min-width:3ch; }
.crumbs > a:first-child { min-width:auto; flex-shrink:0; }
.crumbs a { color:var(--text-2); } .crumbs a:hover { color:var(--primary-text); }
.crumbs .sep { font-size:9px; opacity:.5; flex-shrink:0; }
.crumbs .crumb { color:var(--text-3); }
.crumbs .cur { color:var(--text); font-weight:500; max-width:48ch; }

/* ── Botões ───────────────────────────────────────────────── */
.btn { display:inline-flex; align-items:center; justify-content:center; gap:8px; height:var(--h-md); padding:0 14px; border-radius:var(--r-md); font-weight:600; font-size:var(--fs-md); line-height:20px; border:1px solid transparent; transition:background-color var(--dur-fast),border-color var(--dur-fast),color var(--dur-fast),box-shadow var(--dur-fast),filter var(--dur-fast); white-space:nowrap; text-decoration:none; flex-shrink:0; }
.btn > i { font-size:13px; }
.btn:focus-visible { outline:none; box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--primary-500); }
.btn:disabled,.btn.disabled { opacity:.5; cursor:not-allowed; }
.btn.loading { opacity:.7; pointer-events:none; }
.btn-primary { background:var(--gradient-primary); color:#fff; box-shadow:0 1px 2px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.12); }
.btn-primary:hover { color:#fff; filter:brightness(1.07); box-shadow:0 4px 12px -4px rgba(var(--primary-rgb),.5),inset 0 1px 0 rgba(255,255,255,.12); }
.btn-primary:active { filter:brightness(.96); }
.btn-primary:disabled,.btn-primary.disabled { background:var(--surface-3); color:var(--text-3); box-shadow:none; filter:none; opacity:1; }
.btn-secondary { background:var(--surface-2); color:var(--text); border-color:var(--border-strong); }
[data-theme="light"] .btn-secondary { background:var(--surface); box-shadow:var(--shadow-xs); }
.btn-secondary:hover { background:var(--surface-3); border-color:var(--border-hover); color:var(--text); }
[data-theme="light"] .btn-secondary:hover { background:var(--surface-2); }
.btn-ghost { background:transparent; color:var(--text-2); } .btn-ghost:hover { background:var(--surface-hover); color:var(--text); }
[data-theme="light"] .btn-ghost:hover { background:var(--surface-3); }
.btn-danger { background:var(--danger); color:#fff; } .btn-danger:hover { background:#dc2626; color:#fff; }
.btn-success { background:var(--success); color:#fff; } .btn-success:hover { background:#059669; color:#fff; }
.btn-outline-danger { color:var(--danger-text); border-color:rgba(var(--danger-rgb),.4); } .btn-outline-danger:hover { background:rgba(var(--danger-rgb),.12); color:var(--danger-text); }
.btn-xs { height:var(--h-xs); padding:0 10px; gap:6px; font-size:var(--fs-xs); border-radius:var(--r-sm); }
.btn-xs > i { font-size:11px; }
.btn-sm { height:var(--h-sm); padding:0 12px; gap:6px; font-size:var(--fs-sm); border-radius:var(--r-sm); }
.btn-sm > i { font-size:12px; }
.btn-lg { height:var(--h-lg); padding:0 18px; font-size:var(--fs-base); border-radius:10px; }
.btn-lg > i { font-size:15px; }
.btn-block { width:100%; }
.btn-icon { width:var(--h-md); padding:0; }
.btn-sm.btn-icon { width:var(--h-sm); }
.btn-xs.btn-icon { width:var(--h-xs); }
.btn-lg.btn-icon { width:var(--h-lg); }
.btn .spin { animation:spin 1s linear infinite; }

/* ── Formulários ──────────────────────────────────────────── */
.field { display:flex; flex-direction:column; gap:6px; margin-bottom:16px; min-width:0; }
.field label,.label { font-size:var(--fs-sm); line-height:20px; font-weight:500; color:var(--text); }
.label-row { display:flex; justify-content:space-between; align-items:center; gap:8px; }
.link-sm { font-size:var(--fs-xs); font-weight:500; }
.input,.select,.textarea { width:100%; height:var(--h-md); padding:0 12px; background:var(--field-bg); border:1px solid var(--border-strong); border-radius:var(--r-md); color:var(--text); font-size:var(--fs-md); line-height:20px; transition:border-color var(--dur-fast),box-shadow var(--dur-fast),background-color var(--dur-fast); }
.textarea { height:auto; min-height:88px; padding:8px 12px; resize:vertical; }
select.input,select.select { padding-right:32px; }
.input::placeholder,.textarea::placeholder { color:var(--text-3); }
.input:hover,.select:hover,.textarea:hover { border-color:var(--border-hover); }
/* background-color (não o atalho background): o atalho apagaria a seta SVG do .select */
.input:focus,.select:focus,.textarea:focus { outline:none; border-color:var(--primary-500); box-shadow:0 0 0 3px var(--ring); background-color:var(--field-bg); }
.input.is-invalid,.select.is-invalid,.textarea.is-invalid,select.is-invalid,textarea.is-invalid { border-color:var(--danger); }
.input.is-invalid:focus,.select.is-invalid:focus,.textarea.is-invalid:focus { box-shadow:0 0 0 3px rgba(var(--danger-rgb),.25); }
.input[readonly] { opacity:.75; }
.input:disabled,.select:disabled,.textarea:disabled { background-color:transparent; border-style:dashed; color:var(--text-3); cursor:not-allowed; opacity:1; }
.input:disabled:hover,.select:disabled:hover,.textarea:disabled:hover { border-color:var(--border-strong); }
.input[type=date],.input[type=datetime-local],.input[type=time],.input[type=month] { padding-top:0; padding-bottom:0; line-height:1; }
.select:has(option[value=""]:checked) { color:var(--text-3); }
.input.is-empty:not(:focus)::-webkit-datetime-edit { color:var(--text-3); }
.select option { color:var(--text); }
.select { appearance:none; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238b90a6' stroke-width='2.5'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 10px center; padding-right:32px; }
.input-sm { height:var(--h-sm); padding:0 10px; font-size:var(--fs-sm); border-radius:var(--r-sm); }
.select.input-sm,.input-sm.select { padding-right:28px; background-position:right 8px center; }
textarea.input-sm { height:auto; padding:6px 10px; }
.input-icon { position:relative; }
.input-icon > i:first-child { position:absolute; left:12px; top:50%; transform:translateY(-50%); color:var(--text-3); font-size:13px; pointer-events:none; }
.input-icon .input { padding-left:36px; }
.input-eye { position:absolute; right:4px; top:50%; transform:translateY(-50%); width:28px; height:28px; border-radius:var(--r-sm); color:var(--text-3); display:grid; place-items:center; }
.input-eye:hover { color:var(--text); background:var(--surface-hover); }
.input-icon .input.has-eye,.input-icon:has(.input-eye) .input { padding-right:38px; }
.help { font-size:var(--fs-xs); line-height:16px; color:var(--text-3); text-wrap:pretty; }
.alert > div,.alert > span,.alert > p { text-wrap:pretty; }
.field-error { font-size:var(--fs-xs); line-height:16px; color:var(--danger-text); }
.form-actions { display:flex; gap:8px; justify-content:flex-end; margin-top:4px; flex-wrap:wrap; }
.form-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:0 16px; }
.check { display:inline-flex; align-items:center; gap:8px; font-size:var(--fs-sm); cursor:pointer; color:var(--text-2); }
.check input { width:16px; height:16px; accent-color:var(--primary-500); flex-shrink:0; }
.switch { position:relative; display:inline-block; width:36px; height:20px; flex-shrink:0; }
.switch input { opacity:0; width:0; height:0; position:absolute; }
.switch .slider { position:absolute; inset:0; background:var(--surface-3); border-radius:var(--r-full); transition:background-color .2s,border-color .2s; border:1px solid var(--border-strong); cursor:pointer; }
.switch .slider::before { content:''; position:absolute; width:14px; height:14px; left:2px; top:2px; background:#fff; border-radius:50%; transition:transform .2s var(--ease); box-shadow:0 1px 2px rgba(0,0,0,.3); }
.switch input:checked + .slider { background:var(--primary-500); border-color:var(--primary-500); }
.switch input:checked + .slider::before { transform:translateX(16px); }
.switch input:focus-visible + .slider { box-shadow:0 0 0 3px var(--ring); }
.switch input:disabled + .slider { opacity:.5; cursor:not-allowed; }
.switch-sm { width:28px; height:16px; }
.switch-sm .slider::before { width:10px; height:10px; }
.switch-sm input:checked + .slider::before { transform:translateX(12px); }
.pw-meter { height:4px; border-radius:4px; background:var(--surface-3); overflow:hidden; margin-top:2px; }
[data-theme="light"] .pw-meter span { background:#dc2626; } [data-theme="light"] .pw-meter[data-score="2"] span { background:#d97706; } [data-theme="light"] .pw-meter[data-score="3"] span { background:#059669; }
.pw-meter span { display:block; height:100%; width:0; background:var(--danger); transition:width .3s,background .3s; }
.pw-meter[data-score="2"] span { background:var(--warning); } .pw-meter[data-score="3"] span { background:var(--success); }

/* Input group: campo + botões colados (copiar, abrir) com a mesma altura */
.input-group { display:flex; align-items:stretch; min-width:0; }
.input-group > .input,.input-group > .input-icon { flex:1 1 auto; min-width:0; }
.input-group > .input,.input-group > .input-icon .input { border-top-right-radius:0; border-bottom-right-radius:0; }
.input-group > .btn { height:auto; min-height:var(--h-md); margin-left:-1px; border-radius:0; flex-shrink:0; }
.input-group > .btn-icon { width:var(--h-md); }
.input-group > .btn:last-child { border-top-right-radius:var(--r-md); border-bottom-right-radius:var(--r-md); }
.input-group > .btn:focus-visible { position:relative; z-index:1; }

/* Card de ajuda ("Bom saber"): <details class="card card-ajuda" open><summary class="card-head">…</summary><div class="card-body">…
   O <summary> é o cabeçalho (com seta). No celular o EAD fecha por padrão. */
.card-ajuda > summary { list-style:none; cursor:pointer; user-select:none; }
.card-ajuda > summary::-webkit-details-marker { display:none; }
.card-ajuda > summary::after { content:'\f078'; font-family:'Font Awesome 6 Free'; font-weight:900; font-size:11px; color:var(--text-3); margin-left:auto; transition:transform var(--dur); }
.card-ajuda:not([open]) > summary { border-bottom:0; }
.card-ajuda:not([open]) > summary::after { transform:rotate(-90deg); }
.card-ajuda > summary:hover::after { color:var(--text); }

/* ── Cards ────────────────────────────────────────────────── */
.card { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:var(--shadow-xs); margin-bottom:var(--gap-card); overflow:hidden; overflow:clip; }
.card-head { display:flex; align-items:center; gap:12px; min-height:65px; padding:12px var(--pad-card); border-bottom:1px solid var(--border); flex-wrap:wrap; }
/* bloco do título encolhe ao lado do ícone (não quebra para a linha de baixo) e empurra as ações para a direita */
.card-head > div:not([class]) { flex:1 1 220px; min-width:0; }
.card-head > .btn,.card-head > .seg-tabs,.card-head > .count-pill,.card-head > .dropdown { flex-shrink:0; }
/* coluna lateral estreita (360px): o título encolhe antes de mandar a ação para a linha de baixo */
:is(.proj-side,.grid-2-wide > :last-child) .card-head > div:not([class]) { flex-basis:120px; }
.card-head > div:not([class]) ~ .spacer { display:none; }
.card-head h3 { font-size:var(--fs-base); line-height:22px; font-weight:600; }
.card-head h3 { text-wrap:balance; }
.card-head h3 > .tab-n { margin-left:6px; vertical-align:2px; white-space:nowrap; }
.card-head p { margin:2px 0 0; font-size:var(--fs-xs); line-height:16px; color:var(--text-3); }
.card-head .spacer { flex:1; }
.card-icon { width:var(--ic-sm); height:var(--ic-sm); border-radius:var(--r-md); display:grid; place-items:center; background:var(--primary-soft); color:var(--primary-text); font-size:14px; flex-shrink:0; }
.card-icon.warning { background:rgba(var(--warning-rgb),.14); color:var(--warning-text); } .card-icon.danger { background:rgba(var(--danger-rgb),.14); color:var(--danger-text); } .card-icon.success { background:rgba(var(--success-rgb),.14); color:var(--success-text); }
[data-theme="light"] .card-icon.warning { color:#b45309; }
.card-icon.blue { background:rgba(var(--blue-rgb),.15); color:#60a5fa; } .card-icon.green { background:rgba(var(--green-rgb),.15); color:#4ade80; } .card-icon.purple { background:rgba(var(--purple-rgb),.15); color:#a78bfa; } .card-icon.orange { background:rgba(var(--orange-rgb),.15); color:#fb923c; } .card-icon.pink { background:rgba(var(--pink-rgb),.15); color:#f472b6; } .card-icon.teal { background:rgba(var(--teal-rgb),.15); color:#2dd4bf; } .card-icon.red { background:rgba(var(--danger-rgb),.15); color:#f87171; }
[data-theme="light"] .card-icon.blue { color:#2563eb; } [data-theme="light"] .card-icon.green { color:#16a34a; } [data-theme="light"] .card-icon.purple { color:#7c3aed; } [data-theme="light"] .card-icon.orange { color:#ea580c; } [data-theme="light"] .card-icon.pink { color:#db2777; } [data-theme="light"] .card-icon.teal { color:#0d9488; } [data-theme="light"] .card-icon.red { color:#dc2626; }
.card-body { padding:var(--pad-card); }
.card-body > :last-child { margin-bottom:0; }
/* último campo seguido só de alertas/erros ocultos: sem o respiro extra antes do rodapé */
.card-body > .field:not(:has(~ :not([hidden]))) { margin-bottom:0; }
.card-foot { padding:12px var(--pad-card); border-top:1px solid var(--border); background:var(--surface-subtle); display:flex; gap:8px; justify-content:flex-end; align-items:center; flex-wrap:wrap; }
.card-toolbar { display:flex; align-items:center; gap:8px; padding:12px var(--pad-card); border-bottom:1px solid var(--border); flex-wrap:wrap; }
.card-toolbar .spacer { flex:1; }
.grid-2 { display:grid; grid-template-columns:repeat(auto-fit,minmax(340px,1fr)); gap:var(--gap-card); align-items:start; margin-bottom:var(--gap-card); }
.grid-2-wide { grid-template-columns:minmax(0,1fr) 360px; }
/* Pilhas de cards: o espaço vem do gap (sem somar com o margin-bottom do card) */
.stack { display:flex; flex-direction:column; gap:var(--gap-card); min-width:0; }
.stack > .card,.grid-2 > .card,.grid-2 > .stack > .card { margin-bottom:0; }
/* colunas de ficha que já espaçam com gap (turma, matrícula, usuário): o card não soma margem */
:is(.turma-col,.mat-col,.usr-col,.alu-col) > .card { margin-bottom:0; }
.section-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin:32px 0 12px; }
.section-head h3 { font-size:var(--fs-base); line-height:22px; font-weight:600; }

/* Hero do dashboard / KPIs / atalhos */
.hero { display:flex; align-items:center; justify-content:space-between; gap:24px; padding:24px 28px; border-radius:var(--r-xl); background:var(--gradient-primary); color:#fff; margin-bottom:var(--gap-section); position:relative; overflow:hidden; box-shadow:var(--shadow-glow); }
.hero::after { content:''; position:absolute; right:-50px; top:-70px; width:220px; height:220px; border-radius:50%; background:rgba(255,255,255,.12); filter:blur(10px); pointer-events:none; }
.hero-kicker { font-size:var(--fs-2xs); line-height:16px; font-weight:600; letter-spacing:var(--tr-caps); text-transform:uppercase; opacity:.85; }
.hero h2 { font-size:var(--fs-2xl); line-height:32px; font-weight:700; letter-spacing:var(--tr-tighter); margin:4px 0 4px; }
.hero p { margin:0; opacity:.9; font-size:var(--fs-md); }
.hero-side { position:relative; z-index:1; }
.hero-stat { text-align:right; } .hero-stat .n { display:block; font-size:var(--fs-3xl); line-height:36px; font-weight:700; letter-spacing:var(--tr-tighter); font-variant-numeric:tabular-nums; }
.hero-stat .l { display:block; font-size:var(--fs-xs); opacity:.85; } .hero-stat .l::first-letter { text-transform:uppercase; }
.hero-link { color:inherit; text-decoration:none; }
.hero-link:hover { color:#fff; text-decoration:underline; text-underline-offset:3px; }
.kpi-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:16px; margin-bottom:var(--gap-section); }
.kpi { display:flex; align-items:center; gap:12px; min-height:80px; padding:16px 20px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:var(--shadow-xs); transition:border-color var(--dur-fast),background-color var(--dur-fast); min-width:0; }
/* KPI que filtra a lista (botão): estado ativo com anel; .kpi-line = valor + detalhe na mesma linha */
.kpi-btn { font:inherit; color:inherit; text-align:left; cursor:pointer; width:100%; }
.kpi-btn.active,.kpi-btn[aria-pressed="true"] { border-color:var(--primary-500); box-shadow:0 0 0 3px var(--ring); }
.kpi-btn.active .kpi-label,.kpi-btn[aria-pressed="true"] .kpi-label { color:var(--primary-text); }
.kpi-line { display:flex; align-items:baseline; gap:8px; min-width:0; }
.kpi-sub { font-size:var(--fs-2xs); line-height:16px; font-weight:500; color:var(--text-3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
a.kpi:hover,.kpi-btn:hover { border-color:var(--border-hover); background:var(--surface-hover); }
[data-theme="light"] a.kpi:hover,[data-theme="light"] .kpi-btn:hover { background:var(--surface-subtle); }
.kpi-icon { width:var(--ic-md); height:var(--ic-md); border-radius:10px; display:grid; place-items:center; font-size:16px; flex-shrink:0; }
.kpi-icon.blue { background:rgba(var(--blue-rgb),.15); color:#60a5fa; } .kpi-icon.green { background:rgba(var(--green-rgb),.15); color:#4ade80; } .kpi-icon.purple { background:rgba(var(--purple-rgb),.15); color:#a78bfa; } .kpi-icon.orange { background:rgba(var(--orange-rgb),.15); color:#fb923c; } .kpi-icon.pink { background:rgba(var(--pink-rgb),.15); color:#f472b6; } .kpi-icon.teal { background:rgba(var(--teal-rgb),.15); color:#2dd4bf; } .kpi-icon.red { background:rgba(var(--danger-rgb),.15); color:#f87171; }
[data-theme="light"] .kpi-icon.blue { color:#2563eb; } [data-theme="light"] .kpi-icon.green { color:#16a34a; } [data-theme="light"] .kpi-icon.purple { color:#7c3aed; } [data-theme="light"] .kpi-icon.orange { color:#ea580c; } [data-theme="light"] .kpi-icon.pink { color:#db2777; } [data-theme="light"] .kpi-icon.teal { color:#0d9488; } [data-theme="light"] .kpi-icon.red { color:#dc2626; }
.kpi-info { display:flex; flex-direction:column; min-width:0; }
/* .kpi-strip: faixa única de métricas coladas (ícone 32, valor 20, divisores de 1px) — para mais de 4 números
   ou métricas dentro de uma ficha. Quebra em 2 colunas abaixo de 560px de largura da faixa. */
.kpi-strip { container:kstrip / inline-size; display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:1px; background:var(--border); border:1px solid var(--border); border-radius:var(--r-lg); overflow:hidden; box-shadow:var(--shadow-xs); margin-bottom:var(--gap-section); }
.kpi-strip > .kpi { border:0; border-radius:0; box-shadow:none; min-height:0; padding:14px 16px; gap:10px; background:var(--surface); }
.kpi-strip .kpi-icon { width:var(--ic-sm); height:var(--ic-sm); font-size:14px; border-radius:var(--r-md); }
.kpi-strip .kpi-value { font-size:var(--fs-xl); line-height:28px; }
.card > .kpi-strip { border:0; border-radius:0; box-shadow:none; margin:0; border-bottom:1px solid var(--border); }
.kpi-value { font-size:var(--fs-2xl); line-height:32px; font-weight:700; letter-spacing:var(--tr-tighter); font-variant-numeric:tabular-nums; color:var(--text); }
.kpi-label { font-size:var(--fs-xs); line-height:16px; color:var(--text-3); font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* Acesso rápido (dashboard): cartões horizontais — ícone, título/descrição numa linha cada, seta no hover */
.quick-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; }
.quick-card { position:relative; display:flex; align-items:center; gap:14px; min-height:76px; padding:16px 44px 16px 16px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:var(--shadow-xs); color:inherit; transition:transform var(--dur) var(--ease),box-shadow var(--dur),border-color var(--dur),background-color var(--dur); min-width:0; }
.quick-card:hover { transform:translateY(-1px); box-shadow:var(--shadow-md); border-color:var(--border-hover); color:inherit; }
.quick-card:focus-visible { outline-offset:2px; }
.qc-icon { width:var(--ic-md); height:var(--ic-md); border-radius:10px; display:grid; place-items:center; font-size:16px; flex-shrink:0; }
.qc-text { display:flex; flex-direction:column; gap:2px; min-width:0; flex:1; }
.qc-text > span { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.qc-go { position:absolute; right:18px; top:50%; margin-top:-6px; font-size:12px; line-height:12px; color:var(--text-3); opacity:.55; transition:opacity var(--dur-fast),transform var(--dur) var(--ease),color var(--dur-fast); }
.quick-card:hover .qc-go,.quick-card:focus-visible .qc-go { opacity:1; color:var(--primary-text); transform:translateX(2px); }
.qc-icon.purple { background:rgba(var(--purple-rgb),.15); color:#a78bfa; } .qc-icon.green { background:rgba(var(--green-rgb),.15); color:#4ade80; } .qc-icon.blue { background:rgba(var(--blue-rgb),.15); color:#60a5fa; } .qc-icon.pink { background:rgba(var(--pink-rgb),.15); color:#f472b6; } .qc-icon.orange { background:rgba(var(--orange-rgb),.15); color:#fb923c; } .qc-icon.teal { background:rgba(var(--teal-rgb),.15); color:#2dd4bf; }
[data-theme="light"] .qc-icon.purple { color:#7c3aed; } [data-theme="light"] .qc-icon.green { color:#16a34a; } [data-theme="light"] .qc-icon.blue { color:#2563eb; } [data-theme="light"] .qc-icon.pink { color:#db2777; } [data-theme="light"] .qc-icon.orange { color:#ea580c; } [data-theme="light"] .qc-icon.teal { color:#0d9488; }
.qc-title { font-weight:600; font-size:var(--fs-md); line-height:20px; color:var(--text); } .qc-desc { font-size:var(--fs-xs); line-height:16px; color:var(--text-3); }

/* Perfil: ficha (identidade + fatos numa faixa) e troca de senha em 3 colunas */
.profile-hero { display:flex; align-items:center; gap:16px; min-width:0; }
.profile-id { min-width:0; }
.profile-name-row { display:flex; align-items:center; flex-wrap:wrap; gap:4px 10px; }
.profile-name { font-size:var(--fs-lg); line-height:24px; font-weight:600; letter-spacing:var(--tr-tight); min-width:0; overflow-wrap:anywhere; }
.profile-email { margin-top:2px; font-size:var(--fs-sm); line-height:20px; color:var(--text-2); overflow-wrap:anywhere; }
.profile-facts { display:grid; grid-template-columns:repeat(auto-fit,minmax(132px,1fr)); gap:16px 24px; margin:20px 0 0; padding-top:20px; border-top:1px solid var(--border); }
.profile-facts > div { min-width:0; }
.profile-facts dt { margin-bottom:4px; font-size:var(--fs-xs); line-height:16px; color:var(--text-3); }
.profile-facts dd { margin:0; font-size:var(--fs-md); line-height:20px; font-weight:500; color:var(--text); font-variant-numeric:tabular-nums; }
.perfil-forcar #cardSenha { order:-1; }
.pw-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; align-items:start; }
.pw-grid .field { margin-bottom:0; }
/* força da senha na linha do rótulo (texto + barra curta): aparece ao digitar, sem empurrar o layout */
.pw-strength { display:inline-flex; align-items:center; gap:8px; transition:opacity var(--dur-fast); }
.pw-strength[data-score="0"] { opacity:0; }
.pw-strength .pw-meter { display:block; width:48px; margin:0; flex:none; }
.pw-label { font-size:var(--fs-xs); line-height:16px; font-weight:600; color:var(--danger-text); }
.pw-strength[data-score="2"] .pw-label { color:var(--warning-text); } .pw-strength[data-score="3"] .pw-label { color:var(--success-text); }
@media (max-width:760px) { .pw-grid { grid-template-columns:minmax(0,1fr); } }
.dl { display:grid; grid-template-columns:minmax(120px,max-content) minmax(0,1fr); gap:10px 24px; margin:0; font-size:var(--fs-sm); line-height:20px; }
.dl dt { color:var(--text-3); font-weight:400; }
.dl dt > i:first-child { width:16px; text-align:center; opacity:.7; margin-right:6px; }
/* selo (22px) e code dentro de dd de 20px não esticam a linha (ritmo constante nas fichas) */
.dl dd > .badge { margin-block:-1px; vertical-align:top; }
.dl dd code { line-height:20px; vertical-align:top; }
/* coluna lateral estreita (320–360px): rótulo na própria largura, mais espaço para o valor */
:is(.proj-side,.grid-2-wide > :last-child) .dl:not(.dl-wide) { grid-template-columns:max-content minmax(0,1fr); column-gap:20px; }
.dl dd { margin:0; color:var(--text); font-weight:500; min-width:0; overflow-wrap:anywhere; }
.dl-rows { gap:0 24px; }
.dl-inline { gap:8px 16px; } /* rótulos curtos: continua em 2 colunas no celular */
.dl-rows > dt,.dl-rows > dd { padding:10px 0; border-bottom:1px solid var(--border); }
.dl-rows > dt:last-of-type,.dl-rows > dd:last-of-type { border-bottom:0; }

/* ── Badges / alerts ──────────────────────────────────────── */
.badge { display:inline-flex; align-items:center; gap:4px; height:22px; padding:0 8px; border-radius:var(--r-full); font-size:var(--fs-xs); line-height:16px; font-weight:600; letter-spacing:0; white-space:nowrap; vertical-align:middle; font-variant-numeric:tabular-nums; }
.badge i { font-size:10px; }
.badge-sm { height:18px; padding:0 6px; font-size:var(--fs-2xs); }
.badge-primary { background:var(--primary-soft); color:var(--primary-text); }
.badge-success { background:rgba(var(--success-rgb),.15); color:#34d399; } [data-theme="light"] .badge-success { color:#065f46; }
.badge-warning { background:rgba(var(--warning-rgb),.15); color:#fbbf24; } [data-theme="light"] .badge-warning { color:#92400e; }
.badge-danger { background:rgba(var(--danger-rgb),.15); color:#f87171; } [data-theme="light"] .badge-danger { color:#991b1b; }
.badge-info { background:rgba(var(--info-rgb),.15); color:#22d3ee; } [data-theme="light"] .badge-info { color:#155e75; }
.badge-muted { background:var(--surface-3); color:var(--text-2); }
/* Alerta: fundo e borda tingidos; texto neutro (legível) e cor só no ícone e no destaque */
.alert { display:flex; gap:10px; align-items:flex-start; padding:12px 14px; border-radius:10px; font-size:var(--fs-sm); line-height:20px; border:1px solid; margin-bottom:16px; color:var(--text); }
.alert > i { margin-top:3px; flex-shrink:0; font-size:14px; }
.alert-lg { padding:16px 18px; font-size:var(--fs-md); }
.alert-danger { background:rgba(var(--danger-rgb),.08); border-color:rgba(var(--danger-rgb),.3); } .alert-danger > i,.alert-danger strong { color:var(--danger-text); }
.alert-success { background:rgba(var(--success-rgb),.08); border-color:rgba(var(--success-rgb),.3); } .alert-success > i,.alert-success strong { color:var(--success-text); }
.alert-warning { background:rgba(var(--warning-rgb),.08); border-color:rgba(var(--warning-rgb),.32); } .alert-warning > i,.alert-warning strong { color:var(--warning-text); }
.alert-info { background:rgba(var(--info-rgb),.08); border-color:rgba(var(--info-rgb),.3); } .alert-info > i,.alert-info strong { color:var(--info-text); }

/* ── Tabelas ──────────────────────────────────────────────── */
/* .table-wrap é container: colunas .col-hide-* somem pela LARGURA DA TABELA (já considera a sidebar
   recolhida). O overflow-x é só rede de segurança no celular — em ≥1024 a tabela deve caber. */
.table-wrap { position:relative; overflow-x:auto; container:tbl / inline-size; }
.table { font-size:var(--fs-sm); line-height:20px; font-variant-numeric:tabular-nums; }
.table th { text-align:left; height:40px; padding:0 16px; font-size:var(--fs-2xs); line-height:16px; font-weight:600; letter-spacing:var(--tr-caps); text-transform:uppercase; color:var(--text-3); background:var(--surface-subtle); border-bottom:1px solid var(--border); white-space:nowrap; vertical-align:middle; }
.table th.sortable { cursor:pointer; user-select:none; } .table th.sortable:hover { color:var(--text); }
.table th.sortable::after { content:'\f0dc'; font-family:'Font Awesome 6 Free'; font-weight:900; margin-left:6px; opacity:.35; font-size:10px; }
.table th.sorted-asc::after { content:'\f0de'; opacity:1; color:var(--primary-text); } .table th.sorted-desc::after { content:'\f0dd'; opacity:1; color:var(--primary-text); }
.table td { padding:10px 16px; border-bottom:1px solid var(--border); vertical-align:middle; color:var(--text-2); }
.table th:first-child,.table td:first-child { padding-left:var(--pad-card); }
.table th:last-child,.table td:last-child { padding-right:var(--pad-card); }
.table tbody tr:last-child td { border-bottom:0; }
.table tbody tr:hover td { background:var(--surface-hover); }
/* linha que abre a ficha: tr[data-href] (EAD navega no clique fora de links/botões; Ctrl/meio abre em nova aba) */
.table tbody tr[data-href] { cursor:pointer; }
[data-theme="light"] .table tbody tr:hover td { background:var(--surface-subtle); }
.table td.strong,.table .strong { color:var(--text); font-weight:600; }
.table td.actions { width:1%; white-space:nowrap; text-align:right; }
.table td.actions > a,.table td.actions > button,.table td.actions > .btn { vertical-align:middle; }
.table td.actions > * + * { margin-left:2px; }
.table div.actions,.table span.actions { display:flex; gap:2px; justify-content:flex-end; align-items:center; white-space:nowrap; }
.table .btn-sm.btn-icon,.table .btn-icon.btn-sm { width:var(--h-xs); height:var(--h-xs); border-radius:var(--r-sm); }
.table .center { text-align:center; } .table .right,.table .col-num { text-align:right; }
.table .w-1 { width:1%; white-space:nowrap; }
.table-compact td { padding-top:6px; padding-bottom:6px; }
.table-fixed { table-layout:fixed; }
.table-empty td,.table-loading td { text-align:center; padding:40px 16px !important; color:var(--text-3); }
.table-empty td { font-size:var(--fs-sm); line-height:20px; }
.table-empty td > i:first-child { display:flex; align-items:center; justify-content:center; width:40px; height:40px; margin:0 auto 12px; border-radius:50%; background:var(--surface-2); border:1px solid var(--border); color:var(--text-3); font-size:15px; }
.table-empty td > i.fa-triangle-exclamation:first-child { background:rgba(var(--danger-rgb),.1); border-color:rgba(var(--danger-rgb),.25); color:var(--danger-text); }
.table-empty td strong { color:var(--text-2); font-weight:600; }
/* estado vazio rico dentro da tabela (EAD.vazioLinha com objeto): sem o círculo da linha simples */
.table-empty td > .empty-state { padding:16px 8px; }
.table-empty .empty-state h3 { font-size:var(--fs-lg); line-height:24px; }
.table-empty .empty-state .btn { margin-top:8px; }
.table-empty .lista-retry { margin-left:6px; vertical-align:middle; }
.table tr.table-empty:hover td,.table tr.table-loading:hover td { background:transparent; }
.table:has(> tbody > tr.table-empty:only-child) > thead { display:none; }
@container tbl (max-width:1199px) { .col-hide-xl { display:none; } }
@container tbl (max-width:999px)  { .col-hide-lg { display:none; } }
@container tbl (max-width:799px)  { .col-hide-md { display:none; } }
@container tbl (max-width:599px)  { .col-hide-sm { display:none; } }
/* .table-stack: em tabela estreita (<600px) cada linha vira um bloco — conteúdo à esquerda, ações/status
   (.cell-end, td.actions) à direita; td[data-label] ganha o rótulo antes do valor. Opcional por tabela. */
@container tbl (max-width:599px) {
    .table-stack > thead { display:none; }
    .table-stack,.table-stack > tbody { display:block; }
    .table-stack > tbody > tr { display:grid; grid-template-columns:minmax(0,1fr) auto; column-gap:12px; row-gap:2px; padding:12px var(--pad-card); border-bottom:1px solid var(--border); }
    .table-stack > tbody > tr:last-child { border-bottom:0; }
    .table-stack > tbody > tr > td { grid-column:1; display:block; padding:0 !important; border:0; background:transparent !important; text-align:left; min-width:0; }
    .table-stack > tbody > tr > td:is(.actions,.cell-end) { grid-column:2; grid-row:1 / span 3; align-self:center; text-align:right; width:auto; }
    /* com ações na linha, o .cell-end desce para a coluna do conteúdo (não se sobrepõe) */
    .table-stack > tbody > tr:has(> td.actions) > td.cell-end { grid-column:1; grid-row:auto; text-align:left; }
    /* tabela <600px: toda coluna marcada para sumir continua sumida no modo empilhado */
    .table-stack > tbody > tr > td:is(.col-hide-xl,.col-hide-lg,.col-hide-md,.col-hide-sm) { display:none; }
    .table-stack > tbody > tr > td[data-label]::before { content:attr(data-label) ' · '; color:var(--text-3); font-size:var(--fs-xs); }
    .table-stack > tbody > tr.table-empty,.table-stack > tbody > tr.table-loading { display:block; }
    .table-stack > tbody > tr.table-empty > td,.table-stack > tbody > tr.table-loading > td { padding:32px 16px !important; text-align:center; }
}
/* Célula de pessoa/entidade (avatar + nome + linha secundária) */
.cell-person,.aluno-cell { display:flex; align-items:center; gap:12px; min-width:0; }
.cell-person .avatar,.aluno-cell .avatar { width:var(--ic-sm); height:var(--ic-sm); border-radius:var(--r-md); font-size:var(--fs-xs); font-weight:600; flex-shrink:0; }
.cell-person > div,.aluno-cell > div { min-width:0; }
.cell-main { color:var(--text); font-weight:600; }
.cell-sub { display:block; font-size:var(--fs-xs); line-height:16px; color:var(--text-3); }
.cell-truncate { display:block; max-width:var(--cell-max,280px); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pager { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:12px var(--pad-card); border-top:1px solid var(--border); font-size:var(--fs-xs); color:var(--text-3); flex-wrap:wrap; }
.pager strong { color:var(--text-2); font-weight:600; font-variant-numeric:tabular-nums; }
.pager-pages { display:flex; gap:4px; flex-wrap:wrap; }
.pager-btn { min-width:var(--h-sm); height:var(--h-sm); padding:0 8px; border-radius:var(--r-sm); border:1px solid var(--border); background:var(--surface); color:var(--text-2); font-size:var(--fs-sm); font-weight:600; display:inline-grid; place-items:center; font-variant-numeric:tabular-nums; transition:background-color var(--dur-fast),color var(--dur-fast); }
.pager-btn:hover { background:var(--surface-hover); color:var(--text); }
[data-theme="light"] .pager-btn:hover { background:var(--surface-2); }
.pager-btn.active { background:var(--primary-500); border-color:var(--primary-500); color:#fff; }
.pager-btn:disabled { opacity:.4; pointer-events:none; }
.pager-gap { border:0; background:transparent; pointer-events:none; }
/* Rodapé de lista: paginação + seletor "N por página" (.lista-pp) na mesma faixa */
.lista-foot { display:flex; align-items:center; gap:12px; padding-right:var(--pad-card); border-top:1px solid var(--border); }
.lista-foot > .pager { flex:1 1 auto; min-width:0; border-top:0; padding-right:0; }
.lista-foot > .lista-pp { width:auto; flex:0 0 auto; }
.lista-foot:has(> .pager[hidden]) { display:none; }
.search-box { position:relative; min-width:248px; }
.search-box > i { position:absolute; left:12px; top:50%; transform:translateY(-50%); color:var(--text-3); font-size:12px; pointer-events:none; }
.search-box .input { padding-left:34px; }
.search-box .input-sm { padding-left:32px; }
.search-box:has(.input-sm) > i { left:10px; }
.count-pill { display:inline-flex; align-items:center; height:22px; font-size:var(--fs-xs); color:var(--text-2); background:var(--surface-3); padding:0 8px; border-radius:var(--r-full); white-space:nowrap; font-weight:600; font-variant-numeric:tabular-nums; }

/* Abas: sem barra de rolagem; as que não cabem vão para o menu "Mais" (EAD.abas em app.js) */
.tabs { position:relative; display:flex; align-items:stretch; gap:4px; height:44px; flex-wrap:nowrap; border-bottom:1px solid var(--border); margin-bottom:var(--gap-section); min-width:0; overflow:visible; }
.tab { position:relative; display:inline-flex; align-items:center; gap:8px; height:44px; padding:0 12px; flex-shrink:0; font-size:var(--fs-sm); line-height:20px; font-weight:500; color:var(--text-2); white-space:nowrap; z-index:0; }
.tab > i { font-size:13px; color:var(--text-3); transition:color var(--dur-fast); }
.tab:hover { color:var(--text); }
.tab:hover > i { color:var(--text-2); }
.tab::before { content:''; position:absolute; inset:6px 0; border-radius:var(--r-md); background:transparent; z-index:-1; transition:background-color var(--dur-fast); }
.tab:hover::before { background:var(--surface-hover); }
[data-theme="light"] .tab:hover::before { background:var(--surface-3); }
.tab.active { color:var(--primary-text); font-weight:600; }
.tab.active > i { color:var(--primary-text); }
.tab.active::after { content:''; position:absolute; left:12px; right:12px; bottom:-1px; height:2px; border-radius:2px 2px 0 0; background:var(--gradient-primary); }
.tab-n { display:inline-block; min-width:18px; height:18px; padding:0 6px; border-radius:var(--r-full); font-size:var(--fs-2xs); font-weight:600; line-height:18px; text-align:center; background:var(--surface-3); color:var(--text-2); font-variant-numeric:tabular-nums; }
.tab.active .tab-n { background:var(--primary-soft); color:var(--primary-text); }
.tabs-more { display:flex; flex-shrink:0; }
.tabs-more-btn > i { font-size:10px; }
.tabs-more-btn.has-active { color:var(--primary-text); font-weight:600; }
.tabs-more-btn.has-active::after { content:''; position:absolute; left:12px; right:12px; bottom:-1px; height:2px; border-radius:2px 2px 0 0; background:var(--gradient-primary); }
.tabs-more-menu { min-width:220px; }
.tabs-more-menu .tab-n { margin-left:auto; }
.tabs-more-menu a.active { color:var(--primary-text); background:var(--primary-soft); font-weight:600; }
.tabs-more-menu a.active i { color:var(--primary-text); }
.seg-tabs { display:inline-flex; align-items:center; height:var(--h-sm); background:var(--surface-2); border:1px solid var(--border); padding:2px; border-radius:var(--r-md); gap:2px; flex-wrap:nowrap; max-width:100%; }
.seg-tab { display:inline-flex; align-items:center; gap:6px; height:26px; padding:0 10px; border-radius:var(--r-sm); font-size:var(--fs-sm); line-height:20px; font-weight:500; color:var(--text-2); white-space:nowrap; transition:background-color var(--dur-fast),color var(--dur-fast); }
.seg-tab:hover { color:var(--text); }
.seg-tab.active { background:var(--surface); color:var(--text); font-weight:600; box-shadow:var(--shadow-xs); }
[data-theme="light"] .seg-tab.active { background:#fff; box-shadow:0 1px 2px rgba(16,24,40,.08); }
.seg-tab .n { min-width:18px; height:18px; line-height:18px; text-align:center; background:var(--surface-3); border-radius:var(--r-full); padding:0 6px; font-size:var(--fs-2xs); font-weight:600; font-variant-numeric:tabular-nums; }
.seg-tab.active .n { background:var(--primary-soft); color:var(--primary-text); }

/* Empty state */
.empty-state { text-align:center; padding:40px 24px; color:var(--text-2); }
/* página inteira (404, 403, módulo em migração): centrado na área útil entre topbar e rodapé */
.empty-state-lg { min-height:max(320px,calc(100vh - var(--topbar-h) - 48px - 120px)); min-height:max(320px,calc(100dvh - var(--topbar-h) - 48px - 120px)); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:0; padding-bottom:56px; }
.empty-kicker { display:block; margin-bottom:6px; font-size:var(--fs-2xs); line-height:16px; font-weight:600; letter-spacing:var(--tr-caps); text-transform:uppercase; color:var(--text-3); }
.empty-actions { display:flex; flex-wrap:wrap; justify-content:center; gap:8px; margin-top:20px; }
.empty-state .empty-actions .btn { margin-top:0; }
.empty-state .empty-ref { margin:4px auto 0; font-size:var(--fs-xs); line-height:20px; }
.empty-state .empty-actions + .empty-ref { margin-top:28px; }
.empty-ref code { font-size:var(--fs-xs); color:var(--text-2); background:var(--surface-2); border:1px solid var(--border); border-radius:var(--r-xs); padding:1px 6px; }
.empty-icon { width:48px; height:48px; border-radius:50%; background:var(--primary-soft); color:var(--primary-text); display:grid; place-items:center; font-size:20px; margin:0 auto 12px; }
.empty-state-lg .empty-icon { width:64px; height:64px; font-size:26px; margin-bottom:20px; box-shadow:0 0 0 8px rgba(var(--primary-rgb),.05); }
.empty-state-lg .empty-icon.danger { box-shadow:0 0 0 8px rgba(var(--danger-rgb),.05); }
.empty-icon.danger { background:rgba(var(--danger-rgb),.12); color:var(--danger-text); }
.empty-state p { text-wrap:balance; }
.empty-state h2,.empty-state h3 { font-size:var(--fs-lg); line-height:24px; font-weight:600; color:var(--text); margin-bottom:4px; }
.empty-state-lg h2 { font-size:var(--fs-xl); line-height:28px; margin-bottom:8px; text-wrap:balance; }
.empty-state p { max-width:420px; margin:0 auto 8px; font-size:var(--fs-sm); color:var(--text-3); }
.empty-state .btn { margin-top:16px; }

/* Skeleton */
.sk,.sk-text { position:relative; overflow:hidden; }
.sk-text.loading { color:transparent !important; border-radius:6px; background:var(--skeleton); background-size:200% 100%; animation:shimmer 1.3s infinite; }
.sk { border-radius:var(--r-md); background:var(--skeleton); background-size:200% 100%; animation:shimmer 1.3s infinite; }

/* ── Modais ───────────────────────────────────────────────── */
.modal-backdrop { position:fixed; inset:0; background:rgba(5,7,15,.55); backdrop-filter:blur(2px); -webkit-backdrop-filter:blur(2px); z-index:var(--z-modal); display:none; align-items:center; justify-content:center; padding:24px; }
[data-theme="light"] .modal-backdrop { background:rgba(15,23,42,.35); }
.modal-backdrop.open { display:flex; animation:fadeIn .15s; }
/* No desktop o modal fica ancorado no alto: cresce só para baixo quando o conteúdo carrega (não "pula") */
.modal { width:100%; max-width:560px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-lg); animation:popIn .2s var(--ease-out); max-height:calc(100vh - 48px); max-height:calc(100dvh - 48px); display:flex; flex-direction:column; min-width:0; }
/* <form> envolvendo corpo + rodapé: precisa repassar o flex, senão o corpo nunca rola e o rodapé sai da tela */
@media (min-width:641px) and (min-height:640px) { .modal-backdrop { align-items:flex-start; padding-top:min(10vh,96px); } .modal { max-height:calc(100dvh - min(10vh,96px) - 24px); } }
.modal > form { display:flex; flex-direction:column; flex:1 1 auto; min-height:0; }
.modal-sm { max-width:420px; } .modal-md { max-width:560px; } .modal-lg { max-width:760px; } .modal-xl { max-width:960px; }
.modal-head { display:flex; align-items:center; gap:12px; min-height:64px; padding:14px var(--pad-card); border-bottom:1px solid var(--border); flex-shrink:0; }
.modal-head > div:not(.card-icon) { flex:1 1 auto; min-width:0; }
.modal-head h3.truncate,.modal-head p.truncate { display:block; }
.modal-head h3 { font-size:var(--fs-lg); line-height:24px; font-weight:600; }
.modal-head p { margin:2px 0 0; font-size:var(--fs-xs); line-height:16px; color:var(--text-3); }
.modal-head .modal-close { margin-left:auto; }
.modal-body { padding:var(--pad-card); overflow-y:auto; overscroll-behavior:contain; min-height:0; }
.modal-body > :last-child { margin-bottom:0; }
/* último bloco VISÍVEL (depois dele só passos [hidden] ou prévias vazias) também sem margem */
.modal-body > :not(:has(~ :not([hidden]):not(:empty))) { margin-bottom:0; }
.modal-foot { padding:12px var(--pad-card); border-top:1px solid var(--border); display:flex; gap:8px; justify-content:flex-end; align-items:center; background:var(--surface-subtle); border-radius:0 0 var(--r-xl) var(--r-xl); flex-shrink:0; flex-wrap:wrap; }
.modal-foot.between { justify-content:space-between; }
.modal-head .modal-close { flex-shrink:0; }
/* Confirmação curta (EAD.confirm): sem faixas; texto alinhado ao título */
.modal-confirm .modal-head { border-bottom:0; min-height:0; padding-bottom:4px; }
.modal-confirm .modal-body { padding-top:0; padding-left:calc(var(--pad-card) + var(--ic-sm) + 12px); }
.modal-confirm .modal-foot { background:transparent; border-top:0; padding-top:4px; padding-bottom:var(--pad-card); }

/* ── Toasts ───────────────────────────────────────────────── */
.toasts { position:fixed; right:20px; bottom:20px; z-index:var(--z-toast); display:flex; flex-direction:column; gap:8px; width:360px; max-width:calc(100vw - 24px); }
.toast { display:flex; align-items:flex-start; gap:10px; padding:12px 12px 12px 14px; background:var(--surface); border:1px solid var(--border-strong); border-radius:var(--r-lg); box-shadow:var(--shadow-lg); font-size:var(--fs-sm); line-height:20px; color:var(--text); animation:slideIn .25s var(--ease-out); }
.toast > i { margin-top:2px; font-size:16px; color:var(--primary-text); flex-shrink:0; } .toast div { flex:1; min-width:0; }
.toast.success > i { color:var(--success); }
.toast.danger > i { color:var(--danger); }
.toast.warning > i { color:var(--warning); }
.toast.info > i { color:var(--info); }
[data-theme="light"] .toast.success > i { color:#059669; } [data-theme="light"] .toast.danger > i { color:#dc2626; }
[data-theme="light"] .toast.warning > i { color:#d97706; } [data-theme="light"] .toast.info > i { color:#0891b2; }
.t-close { width:24px; height:24px; border-radius:var(--r-sm); display:grid; place-items:center; color:var(--text-3); font-size:12px; line-height:1; flex-shrink:0; margin:-2px -2px 0 0; transition:background-color var(--dur-fast),color var(--dur-fast); }
.t-close:hover { background:var(--surface-hover); color:var(--text); }
.toast.leaving { opacity:0; transform:translateX(12px); transition:opacity .3s,transform .3s; }

/* ── Utilitários ──────────────────────────────────────────── */
.flex { display:flex; } .flex-col { flex-direction:column; } .items-center { align-items:center; } .justify-between { justify-content:space-between; } .justify-end { justify-content:flex-end; } .wrap { flex-wrap:wrap; }
.gap-1 { gap:4px; } .gap-2 { gap:8px; } .gap-3 { gap:12px; } .gap-4 { gap:16px; }
.mt-1 { margin-top:4px; } .mt-2 { margin-top:8px; } .mt-3 { margin-top:12px; } .mt-4 { margin-top:16px; } .mt-6 { margin-top:24px; }
.mb-0 { margin-bottom:0; } .mb-2 { margin-bottom:8px; } .mb-3 { margin-bottom:12px; } .mb-4 { margin-bottom:16px; }
.text-muted { color:var(--text-3); } .text-2 { color:var(--text-2); } .text-danger { color:var(--danger-text); } .text-success { color:var(--success-text); } .text-warning { color:var(--warning-text); } .text-right { text-align:right; } .text-center { text-align:center; }
.small { font-size:var(--fs-xs); } .strong { font-weight:600; color:var(--text); }
.w-100 { width:100%; } .nowrap { white-space:nowrap; } .truncate { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .min-w-0 { min-width:0; }
.tabular { font-variant-numeric:tabular-nums; }
.spacer { flex:1; }
.status-dot { display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:6px; vertical-align:middle; }
.status-dot.on { background:var(--success); box-shadow:0 0 0 3px rgba(var(--success-rgb),.2); } .status-dot.off { background:var(--text-3); } .status-dot.warn { background:var(--warning); }
kbd { display:inline-block; min-width:18px; padding:0 5px; border:1px solid var(--border-strong); border-bottom-width:2px; border-radius:var(--r-xs); font-family:var(--font); font-size:var(--fs-2xs); line-height:16px; text-align:center; color:var(--text-2); background:var(--surface-2); }

/* ── Loader personalizado (EAD.loaderHtml / EAD.loader / EAD.overlay) ── */
.ead-loader { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px; padding:40px 20px; color:var(--text-3); font-size:var(--fs-sm); font-weight:500; }
.ead-loader .orb { position:relative; width:44px; height:44px; flex-shrink:0; }
.ead-loader .orb::before,.ead-loader .orb::after { content:''; position:absolute; inset:0; border-radius:50%; border:3px solid transparent; border-top-color:var(--primary-500); border-right-color:var(--violet); animation:spin 1s linear infinite; }
.ead-loader .orb::after { inset:8px; border-top-color:var(--violet); border-right-color:var(--primary-400); animation-direction:reverse; animation-duration:.75s; }
/* Ícone do meio = logo EAD Play (assets/img/loader-eadplay.png redesenhado em SVG): triângulo laranja fixo no fundo do <i>
   e contorno numa máscara pintada com var(--text) — acompanha o tema. O glifo do Font Awesome do markup é descartado. */
.ead-loader .orb i { position:absolute; inset:0; margin:auto; width:18px; height:18px; color:var(--text); background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-7 6 320 320'%3E%3Cpath fill='%23E7511C' d='M55 97L55 288Q55 344 103 315L262 221Q310 192 262 163L103 70Q55 41 55 97Z'/%3E%3C/svg%3E") center/contain no-repeat; animation:pulse 1.5s ease-in-out infinite; }
.ead-loader .orb i::before { content:none; }
.ead-loader .orb i::after { content:''; position:absolute; inset:0; background:currentColor; -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-7 6 320 320'%3E%3Cpath fill='none' stroke='%23000' stroke-width='12' stroke-linejoin='round' d='M29 49L29 247Q29 299 74 272L239 174Q284 147 239 121L74 23Q29 -3 29 49Z'/%3E%3C/svg%3E") center/contain no-repeat; mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-7 6 320 320'%3E%3Cpath fill='none' stroke='%23000' stroke-width='12' stroke-linejoin='round' d='M29 49L29 247Q29 299 74 272L239 174Q284 147 239 121L74 23Q29 -3 29 49Z'/%3E%3C/svg%3E") center/contain no-repeat; }
.ead-loader-text::after { content:''; display:inline-block; width:1.1em; text-align:left; animation:dots 1.2s steps(4,end) infinite; }
.ead-loader.inline { flex-direction:row; padding:6px 0; gap:10px; }
.ead-loader.inline .orb { width:20px; height:20px; }
.ead-loader.inline .orb::before,.ead-loader.inline .orb::after { border-width:2px; } .ead-loader.inline .orb::after { inset:5px; } .ead-loader.inline .orb i { display:none; }
.has-overlay { position:relative; }
.ead-overlay { position:absolute; inset:0; z-index:5; display:grid; place-items:center; background:var(--surface-glass); backdrop-filter:blur(2px); -webkit-backdrop-filter:blur(2px); border-radius:inherit; animation:fadeIn .15s; }

/* ── Combo (select com busca — EAD.combo) ─────────────────── */
.combo { position:relative; min-width:0; }
.combo .combo-native { position:absolute !important; opacity:0; pointer-events:none; width:1px; height:1px; margin:0; padding:0; border:0; }
.combo-btn { display:flex; align-items:center; justify-content:space-between; gap:10px; text-align:left; cursor:pointer; }
.combo-label { flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-weight:400; } .combo-label.placeholder { color:var(--text-3); }
.combo-chev { font-size:11px; color:var(--text-3); transition:transform .2s; flex-shrink:0; } .combo.open .combo-chev { transform:rotate(180deg); }
.combo-panel { position:absolute; top:calc(100% + 6px); left:0; right:0; z-index:var(--z-dropdown); background:var(--surface); border:1px solid var(--border-strong); border-radius:var(--r-lg); box-shadow:var(--shadow-lg); display:none; overflow:hidden; }
.combo.open .combo-panel { display:block; animation:fadeUp .15s var(--ease-out); }
.combo-search { position:relative; padding:8px; border-bottom:1px solid var(--border); }
.combo-search i { position:absolute; left:18px; top:50%; transform:translateY(-50%); color:var(--text-3); font-size:12px; pointer-events:none; }
.combo-search .input { padding-left:30px; }
.combo-list { list-style:none; margin:0; padding:4px; max-height:240px; overflow-y:auto; }
.combo-opt { display:flex; align-items:center; gap:10px; min-height:32px; padding:6px 10px; border-radius:var(--r-sm); font-size:var(--fs-sm); line-height:20px; color:var(--text-2); cursor:pointer; }
.combo-opt i { width:16px; text-align:center; color:var(--text-3); } .combo-opt span { flex:1; min-width:0; } .combo-opt small { color:var(--text-3); font-size:var(--fs-xs); white-space:nowrap; }
.combo-opt:hover,.combo-opt.hover { background:var(--surface-hover); color:var(--text); }
[data-theme="light"] .combo-opt:hover,[data-theme="light"] .combo-opt.hover { background:var(--surface-2); }
.combo-opt.selected { background:var(--primary-soft); color:var(--primary-text); font-weight:600; }
.combo-opt.disabled { opacity:.45; cursor:not-allowed; }
.combo-empty { padding:14px; text-align:center; color:var(--text-3); font-size:var(--fs-sm); }
.combo.disabled .combo-btn { opacity:.6; pointer-events:none; }
.combo.is-invalid .combo-btn { border-color:var(--danger); }

/* ── Chips de seleção (checkbox/radio estilizados) ────────── */
.chips { display:flex; flex-wrap:wrap; gap:8px; }
.chip-check { position:relative; display:inline-flex; align-items:center; gap:8px; height:var(--h-sm); padding:0 12px 0 10px; border-radius:var(--r-full); border:1px solid var(--border-strong); background:var(--surface-2); font-size:var(--fs-sm); font-weight:500; color:var(--text-2); cursor:pointer; user-select:none; transition:background-color var(--dur-fast),border-color var(--dur-fast),color var(--dur-fast); white-space:nowrap; }
[data-theme="light"] .chip-check { background:var(--surface); }
.chip-check input { position:absolute; opacity:0; pointer-events:none; width:1px; height:1px; }
.chip-check .chip-ic { width:16px; height:16px; border-radius:50%; border:1.5px solid var(--border-strong); display:grid; place-items:center; font-size:8px; color:transparent; transition:all .15s; flex-shrink:0; }
.chip-check:hover { border-color:var(--border-hover); color:var(--text); }
.chip-check.selected { border-color:var(--primary-500); background:var(--primary-soft); color:var(--primary-text); font-weight:600; }
.chip-check.selected .chip-ic { background:var(--primary-500); border-color:var(--primary-500); color:#fff; }
.chip-check:focus-within { box-shadow:0 0 0 3px var(--ring); }
.chips.is-invalid .chip-check { border-color:var(--danger); }

/* ── Animações ────────────────────────────────────────────── */
@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@keyframes dots { 0%,20% { content:''; } 40% { content:'.'; } 60% { content:'..'; } 80%,100% { content:'...'; } }
@keyframes pulse { 0%,100% { transform:scale(1); opacity:1; } 50% { transform:scale(.82); opacity:.55; } }
@keyframes fadeUp { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:none; } }
@keyframes popIn { from { opacity:0; transform:scale(.97) translateY(6px); } to { opacity:1; transform:none; } }
@keyframes slideIn { from { opacity:0; transform:translateX(16px); } to { opacity:1; transform:none; } }
@keyframes shimmer { 0% { background-position:200% 0; } 100% { background-position:-200% 0; } }
@keyframes spin { to { transform:rotate(360deg); } }
@keyframes tipIn { from { opacity:0; margin-left:-4px; } to { opacity:1; margin-left:0; } }
@keyframes tipUp { from { opacity:0; margin-top:4px; } to { opacity:1; margin-top:0; } }
@keyframes tipDown { from { opacity:0; margin-top:-4px; } to { opacity:1; margin-top:0; } }
@keyframes sheetIn { from { transform:translateY(24px); opacity:.6; } to { transform:none; opacity:1; } }
@media (prefers-reduced-motion:reduce) { *,*::before,*::after { animation-duration:.01ms !important; transition-duration:.01ms !important; } }

/* ── Visibilidade por largura da tela (para o que não é coluna de tabela) ── */
@media (max-width:1279px) { .hide-lg { display:none !important; } }
@media (max-width:1024px) { .hide-md { display:none !important; } }
@media (max-width:640px)  { .hide-sm { display:none !important; } }

/* ── Responsivo ───────────────────────────────────────────── */
@media (max-width:1279px) {
    :root { --page-pad:24px; }
    .grid-2-wide { grid-template-columns:minmax(0,1fr) 320px; }
}
@media (max-width:1024px) {
    .sidebar { width:min(300px,86vw); transform:translateX(-100%); box-shadow:none; }
    body.sidebar-open .sidebar { transform:none; box-shadow:var(--shadow-lg); }
    body.sidebar-open { overflow:hidden; }
    .main { margin-left:0; }
    .icon-btn.menu-toggle,.icon-btn.sidebar-close { display:inline-grid; }
    .sidebar-foot { display:none; }
    .grid-2-wide { grid-template-columns:1fr; }
    .kpi-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:860px) {
    .quick-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:640px) {
    .back-to-top { right:16px; bottom:16px; }
    :root { --page-pad:16px; --pad-card:16px; }
    .content { padding-top:16px; padding-bottom:32px; }
    .topbar-title .t-icon,.topbar-title .t-sub { display:none; }
    .topbar-sep { display:none; }
    .user-menu .u-name,.user-menu .u-chev { display:none; }
    .user-menu .user-chip { padding:2px; }
    .crumbs > :not(:first-child):not(:nth-last-child(-n+4)) { display:none; }
    .hero { flex-direction:column; align-items:flex-start; padding:20px; }
    .hero-stat { text-align:left; }
    /* KPI no 2x2 do celular: número + ícone pequeno na 1ª linha, rótulo inteiro embaixo (todas as telas) */
    .kpi-grid { gap:12px; }
    .kpi { display:grid; grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"v i" "l l"; align-items:center; gap:4px 8px; min-height:0; padding:14px; }
    .kpi-info { display:contents; }
    .kpi-icon { grid-area:i; width:28px; height:28px; font-size:13px; border-radius:var(--r-md); }
    .kpi-value,.kpi-line { grid-area:v; font-size:var(--fs-xl); line-height:28px; }
    .kpi-line .kpi-value { font-size:inherit; line-height:inherit; }
    .kpi { align-content:start; }
    .kpi-label { grid-area:l; white-space:normal; }
    /* dashboard: hora e data numa linha no rodapé do hero; KPI com número + ícone e rótulo inteiro embaixo;
       acesso rápido vira uma lista agrupada (um cartão, linhas separadas) */
    .hero-dash { gap:16px; }
    .hero-dash .hero-side { align-self:stretch; padding-top:14px; border-top:1px solid rgba(255,255,255,.2); }
    .hero-dash .hero-stat { display:flex; align-items:baseline; justify-content:space-between; gap:12px; }
    .hero-dash .hero-stat .n { order:2; font-size:var(--fs-xl); line-height:28px; }
    .hero-dash .hero-stat .l { order:1; font-size:var(--fs-sm); line-height:20px; }
    .quick-grid { grid-template-columns:minmax(0,1fr); gap:0; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:var(--shadow-xs); overflow:hidden; }
    .quick-card { min-height:64px; padding:12px 40px 12px 14px; gap:12px; border:0; border-radius:0; box-shadow:none; background:transparent; }
    .quick-card + .quick-card { border-top:1px solid var(--border); }
    .quick-card:hover { transform:none; box-shadow:none; background:var(--surface-hover); }
    .quick-card:focus-visible { outline-offset:-2px; }
    .qc-icon { width:var(--ic-sm); height:var(--ic-sm); font-size:14px; border-radius:var(--r-md); }
    .qc-go { right:16px; opacity:.7; }
    .grid-2 { grid-template-columns:minmax(0,1fr); }
    .form-grid { grid-template-columns:minmax(0,1fr); }
    .input,.select,.textarea { font-size:16px; }
    .input:not(textarea):not(.input-sm),.select:not(.input-sm) { height:40px; }
    /* toolbars e rodapés de lista: campo compacto e botão ao lado com a mesma altura */
    .input-sm:not(textarea),.select.input-sm { height:36px; }
    :is(.card-toolbar,.lista-foot,.card-head,.card-foot) .btn-sm { height:36px; }
    :is(.card-toolbar,.lista-foot,.card-head) .btn-sm.btn-icon { width:36px; }
    /* ação única (badge/ícone) fica na linha do título em vez de descer sozinha */
    .card-head:has(> :is(.btn-icon,.icon-btn):last-child) > div:not([class]) { flex-basis:0; }
    /* badge de status ou contador no fim: desce para baixo do título (o título não espreme em 3–4 linhas) */
    .card-head:has(> :is(.badge,.count-pill):last-child) { display:grid; grid-template-columns:auto minmax(0,1fr); column-gap:12px; row-gap:6px; }
    .card-head:has(> :is(.badge,.count-pill):last-child) > .card-icon { grid-row:span 2; align-self:start; }
    .card-head:has(> :is(.badge,.count-pill):last-child) > :is(.badge,.count-pill) { grid-column:2; justify-self:start; }
    .seg-tabs { overflow-x:auto; scrollbar-width:none; }
    .seg-tabs::-webkit-scrollbar { display:none; }
    .modal-backdrop { align-items:flex-end; padding:0; }
    .modal { max-width:none !important; border-radius:var(--r-xl) var(--r-xl) 0 0; max-height:92vh; max-height:92dvh; animation:sheetIn .22s var(--ease-out); }
    .modal-foot { border-radius:0; }
    .modal-foot > .btn { flex:1; }
    .card-foot > .btn { flex:1 1 auto; }
    .toasts { left:12px; right:12px; bottom:12px; width:auto; max-width:none; }
    .dl { grid-template-columns:minmax(0,1fr); gap:2px 0; } .dl dt { font-size:var(--fs-xs); line-height:16px; } .dl dd { margin-bottom:10px; }
    .dl-rows > dt { border-bottom:0; padding-bottom:0; } .dl-rows > dd { margin-bottom:0; }
    .dl.dl-inline { grid-template-columns:max-content minmax(0,1fr); gap:8px 16px; } .dl-inline dt { font-size:var(--fs-sm); line-height:20px; } .dl-inline dd { margin-bottom:0; }
    .lista-foot { flex-wrap:wrap; padding-bottom:12px; padding-left:var(--pad-card); }
    .lista-foot > .pager { padding-left:0; flex-basis:100%; }
}
@media print { .sidebar,.topbar,.app-footer,.sidebar-backdrop,.back-to-top { display:none !important; } .main { margin:0; } }
