/* ============================================================
   NEUREN — PAINÉIS (Professor · Coordenador · Responsável) — design system compartilhado
   Design tokens herdados do produto NEUREN (sage / clay / cream)
   ============================================================ */
:root{
  --sage-50:#f1f5ee; --sage-100:#dce6d2; --sage-200:#bdd1a8; --sage-300:#97b67e;
  --sage-400:#7a9c63; --sage-500:#5d7d4b; --sage-600:#46603a;
  --clay-100:#f5e3d4; --clay-200:#ecc8a8; --clay-300:#d9a87c; --clay-400:#b88052;
  --peach-100:#fadfd0; --peach-200:#f4c2a8; --butter-100:#f7ecc4; --butter-200:#edd684;
  --sky-100:#d8e6ec; --sky-200:#aed0dc; --rose-100:#f3dbd8; --rose-200:#e6b3ad;

  --r-xs:6px; --r-sm:10px; --r-md:14px; --r-lg:20px; --r-xl:28px; --r-full:99px;
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px; --s-7:32px; --s-8:40px; --s-9:48px; --s-10:64px;

  --f-display:"Fraunces", Georgia, serif;
  --f-sans:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fs-xs:12px; --fs-sm:13px; --fs-base:14.5px; --fs-lg:17px; --fs-xl:22px; --fs-2xl:30px;

  --t-fast:160ms; --t-med:260ms; --t-slow:440ms;
  --ease:cubic-bezier(.22,.61,.36,1);
  --focus-ring:0 0 0 3px rgba(122,156,99,.32);
}
:root,:root[data-theme="light"]{
  color-scheme:light;
  --bg:#fbf7f1; --bg-soft:#f5efe6; --surface:#ffffff; --surface-2:#faf5ec; --surface-3:#f0e9dc;
  /* Aliases para módulos que pediam --card/--chip (Notas, Comunicação). Antes
     não existiam em lugar nenhum, então var(--card,#fff) caía no branco fixo
     e os cards ficavam brancos no tema escuro (com títulos quase invisíveis).
     Agora seguem a superfície do tema. */
  --card:var(--surface); --chip:var(--surface-2);
  --line:#ece4d3; --line-soft:#f3ede1;
  --ink-0:#2c2620; --ink-1:#4a423a; --ink-2:#6f6759; --ink-3:#968d7e; --ink-4:#b8b1a2;
  --brand:var(--sage-500); --brand-strong:var(--sage-600); --brand-soft:#eef3e8;
  --success:#5d7d4b; --warn:#b88052; --danger:#b9544d;
  --danger-soft:#fbeae8; --warn-soft:#fbf0e2; --sky-soft:#e8f1f5;
  --shadow-sm:0 1px 2px rgba(60,48,30,.04),0 2px 8px rgba(60,48,30,.045);
  --shadow-md:0 4px 14px rgba(60,48,30,.07),0 2px 4px rgba(60,48,30,.04);
  --shadow-lg:0 14px 40px rgba(60,48,30,.10),0 4px 12px rgba(60,48,30,.05);
  --glass:rgba(251,247,241,.78);
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#1c1916; --bg-soft:#231f1a; --surface:#27221d; --surface-2:#2f2922; --surface-3:#39322a;
  --card:var(--surface); --chip:var(--surface-2);
  --line:#39332b; --line-soft:#2f2922;
  --ink-0:#f5efe2; --ink-1:#dcd4c3; --ink-2:#a89f8c; --ink-3:#827969; --ink-4:#5e574e;
  --brand:var(--sage-300); --brand-strong:var(--sage-200); --brand-soft:rgba(151,182,126,.12);
  --success:var(--sage-300); --warn:var(--clay-300); --danger:#e6b3ad;
  --danger-soft:rgba(185,84,77,.16); --warn-soft:rgba(184,128,82,.16); --sky-soft:rgba(174,208,220,.12);
  --shadow-sm:0 1px 2px rgba(0,0,0,.24);
  --shadow-md:0 4px 14px rgba(0,0,0,.30);
  --shadow-lg:0 16px 44px rgba(0,0,0,.45);
  --glass:rgba(28,25,22,.74);
}
*{box-sizing:border-box;margin:0;padding:0}
/* Atributo [hidden] tem de esconder de verdade. Os painéis só carregam panel.css
   (não o base.css), então sem esta regra o seletor de classe .notif-panel{display:flex}
   vencia o [hidden] do user-agent e a central de notificações NUNCA fechava
   (e o ponto vermelho do sino ficava preso). Uma linha resolve nos 4 painéis. */
[hidden]{display:none!important}
html,body{height:100%}
body{
  font-family:var(--f-sans); background:var(--bg); color:var(--ink-1);
  font-size:var(--fs-base); line-height:1.5; -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
body.reduce-motion *{animation-duration:.001ms!important;transition-duration:.001ms!important}
::selection{background:var(--sage-200);color:var(--ink-0)}
h1,h2,h3,h4{font-family:var(--f-display);font-weight:500;color:var(--ink-0);line-height:1.18;letter-spacing:-.01em}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
svg{display:block}
:focus-visible{outline:0;box-shadow:var(--focus-ring);border-radius:var(--r-sm)}

/* scrollbar */
*::-webkit-scrollbar{width:9px;height:9px}
*::-webkit-scrollbar-thumb{background:var(--line);border-radius:99px;border:2px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:var(--ink-4)}

/* ── App shell ── */
.app{display:grid;grid-template-columns:var(--sb-w,260px) 1fr;height:100vh;transition:grid-template-columns var(--t-med) var(--ease)}
.app.collapsed{--sb-w:74px}

/* ── Sidebar ── */
.sidebar{
  background:var(--surface);border-right:1px solid var(--line);
  display:flex;flex-direction:column;height:100vh;position:relative;z-index:40;overflow:hidden;
}
.sb-head{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-5) var(--s-5) var(--s-4)}
.logo{
  width:34px;height:34px;border-radius:10px;flex:0 0 auto;display:grid;place-items:center;
  background:linear-gradient(150deg,var(--sage-400),var(--sage-600));color:#fff;
  box-shadow:0 2px 8px rgba(93,125,75,.35);position:relative
}
.logo svg{width:19px;height:19px}
.brand-name{font-family:var(--f-display);font-size:19px;font-weight:600;color:var(--ink-0);letter-spacing:-.02em;white-space:nowrap}
.brand-sub{font-size:11px;color:var(--ink-3);letter-spacing:.04em;white-space:nowrap;margin-top:-3px}
.collapsed .brand-name,.collapsed .brand-sub,.collapsed .nav-label,.collapsed .nav-group-t,.collapsed .sb-foot .who{display:none}
.collapsed .sb-head{justify-content:center;padding-left:0;padding-right:0}

.nav{flex:1;overflow-y:auto;padding:var(--s-2) var(--s-3) var(--s-4);display:flex;flex-direction:column;gap:2px}
.nav-group-t{font-size:10.5px;letter-spacing:.10em;text-transform:uppercase;color:var(--ink-4);font-weight:600;padding:var(--s-4) var(--s-3) var(--s-2)}
.nav-item{
  display:flex;align-items:center;gap:var(--s-3);padding:9px var(--s-3);border-radius:var(--r-sm);
  color:var(--ink-2);font-weight:450;font-size:14px;position:relative;transition:background var(--t-fast),color var(--t-fast);white-space:nowrap
}
.nav-item:hover{background:var(--surface-2);color:var(--ink-0)}
.nav-item.active{background:var(--brand-soft);color:var(--brand-strong);font-weight:500}
.nav-item.active::before{content:"";position:absolute;left:-12px;top:50%;transform:translateY(-50%);width:4px;height:18px;border-radius:99px;background:var(--brand)}
.nav-item svg{width:18px;height:18px;flex:0 0 auto;stroke-width:1.9}
.collapsed .nav-item{justify-content:center;padding:10px}
.nav-badge{margin-left:auto;font-size:11px;font-weight:600;background:var(--danger-soft);color:var(--danger);padding:1px 7px;border-radius:99px}
.nav-badge.soft{background:var(--brand-soft);color:var(--brand-strong)}
.collapsed .nav-badge{position:absolute;top:4px;right:6px;margin:0;padding:0;width:8px;height:8px;font-size:0;border-radius:99px}

.sb-foot{padding:var(--s-3) var(--s-3) var(--s-4);border-top:1px solid var(--line-soft)}
.who{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-2);border-radius:var(--r-md)}
.avatar{width:34px;height:34px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;font-weight:600;font-size:13px;color:#fff;background:linear-gradient(150deg,var(--clay-300),var(--clay-400))}
.who .nm{font-size:13.5px;font-weight:500;color:var(--ink-0);line-height:1.2}
.who .rl{font-size:11.5px;color:var(--ink-3)}

/* ── Main ── */
.main{display:flex;flex-direction:column;height:100vh;overflow:hidden}
.topbar{
  height:64px;flex:0 0 auto;display:flex;align-items:center;gap:var(--s-4);
  padding:0 var(--s-6);border-bottom:1px solid var(--line);
  background:var(--glass);backdrop-filter:blur(14px);position:sticky;top:0;z-index:30
}
.icon-btn{width:38px;height:38px;border-radius:var(--r-sm);display:grid;place-items:center;color:var(--ink-2);transition:background var(--t-fast),color var(--t-fast)}
.icon-btn:hover{background:var(--surface-2);color:var(--ink-0)}
.icon-btn svg{width:19px;height:19px;stroke-width:1.9}
.search{
  flex:1;max-width:440px;display:flex;align-items:center;gap:var(--s-3);
  background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-full);
  padding:8px var(--s-4);color:var(--ink-3);transition:border var(--t-fast),box-shadow var(--t-fast)
}
.search:focus-within{border-color:var(--sage-300);box-shadow:var(--focus-ring)}
.search svg{width:16px;height:16px;flex:0 0 auto}
.search input{flex:1;border:0;background:none;outline:none;color:var(--ink-0);font-size:14px}
.search kbd{font:inherit;font-size:11px;color:var(--ink-3);background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:1px 6px}
.tb-right{margin-left:auto;display:flex;align-items:center;gap:var(--s-2)}
.dot-bell{position:relative}
.dot-bell::after{content:"";position:absolute;top:8px;right:9px;width:7px;height:7px;border-radius:99px;background:var(--danger);border:2px solid var(--glass)}

.view{flex:1;overflow-y:auto;padding:var(--s-7) var(--s-7) var(--s-9);scroll-behavior:smooth}
@media(max-width:900px){.view{padding:var(--s-5) var(--s-5) var(--s-9)}}
.view-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--s-4);margin-bottom:var(--s-6);flex-wrap:wrap}
.view-head .eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600;margin-bottom:6px}
.view-head h1{font-size:var(--fs-2xl);font-weight:500}
.view-head p.sub{color:var(--ink-2);margin-top:6px;font-size:14.5px;max-width:60ch}

/* ── Buttons ── */
.btn{display:inline-flex;align-items:center;gap:var(--s-2);padding:9px 16px;border-radius:var(--r-sm);font-size:13.5px;font-weight:500;transition:all var(--t-fast);white-space:nowrap}
.btn svg{width:16px;height:16px;stroke-width:2}
.btn.primary{background:var(--brand);color:#fff;box-shadow:0 2px 8px rgba(93,125,75,.28)}
.btn.primary:hover{background:var(--brand-strong);transform:translateY(-1px);box-shadow:0 6px 16px rgba(93,125,75,.32)}
.btn.ghost{background:var(--surface);border:1px solid var(--line);color:var(--ink-1)}
.btn.ghost:hover{background:var(--surface-2);border-color:var(--ink-4)}
.btn.soft{background:var(--brand-soft);color:var(--brand-strong)}
.btn.soft:hover{background:var(--sage-100)}

/* ── Cards / surfaces ── */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);transition:box-shadow var(--t-med) var(--ease),transform var(--t-med) var(--ease),border-color var(--t-med)}
.card.pad{padding:var(--s-5)}
.card.hover:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.card-t{display:flex;align-items:center;gap:var(--s-3);margin-bottom:var(--s-4)}
.card-t h3{font-size:16px;font-weight:500}
.card-t .ic{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand-strong);flex:0 0 auto}
.card-t .ic svg{width:17px;height:17px;stroke-width:1.9}
.card-t .more{margin-left:auto;color:var(--ink-3);font-size:13px}
.muted{color:var(--ink-3)}
.tiny{font-size:12px}

.grid{display:grid;gap:var(--s-5)}
.cols-4{grid-template-columns:repeat(4,1fr)}
.cols-3{grid-template-columns:repeat(3,1fr)}
.cols-2{grid-template-columns:repeat(2,1fr)}
@media(max-width:1180px){.cols-4{grid-template-columns:repeat(2,1fr)}.cols-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.cols-4,.cols-3,.cols-2{grid-template-columns:1fr}}
.span-2{grid-column:span 2}.span-3{grid-column:span 3}
@media(max-width:720px){.span-2,.span-3{grid-column:span 1}}

/* ── KPI ── */
.kpi{position:relative;overflow:hidden}
.kpi .lbl{font-size:12.5px;color:var(--ink-2);display:flex;align-items:center;gap:7px;font-weight:450}
.kpi .lbl .d{width:8px;height:8px;border-radius:99px}
.kpi .val{font-family:var(--f-display);font-size:34px;font-weight:500;color:var(--ink-0);margin:8px 0 4px;letter-spacing:-.02em}
.kpi .val small{font-size:16px;color:var(--ink-3);font-weight:400}
.kpi .delta{font-size:12.5px;font-weight:500;display:inline-flex;align-items:center;gap:4px}
.delta.up{color:var(--success)} .delta.down{color:var(--danger)} .delta.flat{color:var(--ink-3)}
.kpi .spark{position:absolute;right:16px;bottom:14px;opacity:.85}

/* ── Pills / chips ── */
.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;padding:4px 10px;border-radius:99px;background:var(--surface-2);color:var(--ink-2);border:1px solid var(--line)}
.chip.risk{background:var(--danger-soft);color:var(--danger);border-color:transparent}
.chip.warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.chip.ok{background:var(--brand-soft);color:var(--brand-strong);border-color:transparent}
.chip.sky{background:var(--sky-soft);color:#5a7f8c;border-color:transparent}
.chip .d{width:7px;height:7px;border-radius:99px;background:currentColor}

/* ── AI feed ── */
.ai-feed{display:flex;flex-direction:column;gap:2px}
.ai-item{display:flex;gap:var(--s-3);padding:var(--s-3);border-radius:var(--r-md);transition:background var(--t-fast)}
.ai-item:hover{background:var(--surface-2)}
.ai-ic{width:32px;height:32px;border-radius:9px;flex:0 0 auto;display:grid;place-items:center}
.ai-ic svg{width:16px;height:16px;stroke-width:1.9}
.ai-item .tt{font-size:13.5px;color:var(--ink-0);font-weight:450;line-height:1.4}
.ai-item .mt{font-size:12px;color:var(--ink-3);margin-top:2px}
.ai-item .act{margin-left:auto;align-self:center;font-size:12.5px;color:var(--brand-strong);font-weight:500;flex:0 0 auto;opacity:0;transition:opacity var(--t-fast)}
.ai-item:hover .act{opacity:1}

/* ── List rows ── */
.row{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) 0;border-top:1px solid var(--line-soft)}
.row:first-of-type{border-top:0}
.row .nm{font-weight:500;color:var(--ink-0);font-size:14px}
.row .meta{font-size:12px;color:var(--ink-3)}
.mini-av{width:30px;height:30px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;color:#fff;font-weight:600;font-size:11px}

/* ── Progress / bars ── */
.bar{height:8px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.bar>span{display:block;height:100%;border-radius:99px;background:var(--brand);transition:width var(--t-slow) var(--ease)}
.dim{display:grid;grid-template-columns:120px 1fr 38px;align-items:center;gap:var(--s-3);padding:7px 0}
.dim .dn{font-size:13px;color:var(--ink-1)}
.dim .dv{font-size:12.5px;color:var(--ink-2);text-align:right;font-variant-numeric:tabular-nums}

/* ── Tabs ── */
.tabs{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--line);padding:4px;border-radius:var(--r-full);align-self:flex-start}
.tab{padding:6px 15px;border-radius:99px;font-size:13px;font-weight:500;color:var(--ink-2);transition:all var(--t-fast)}
.tab.active{background:var(--surface);color:var(--ink-0);box-shadow:var(--shadow-sm)}

/* ── Pipeline (RAG) ── */
.pipe{display:flex;align-items:stretch;gap:0;overflow-x:auto;padding-bottom:4px}
.pstep{flex:1;min-width:118px;text-align:center;position:relative;padding:0 6px}
.pstep .node{width:46px;height:46px;border-radius:14px;margin:0 auto 10px;display:grid;place-items:center;border:1.5px solid var(--line);background:var(--surface);color:var(--ink-3);position:relative;z-index:2;transition:all var(--t-med)}
.pstep .node svg{width:21px;height:21px;stroke-width:1.8}
.pstep.done .node{background:var(--brand-soft);border-color:var(--sage-300);color:var(--brand-strong)}
.pstep.active .node{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 0 0 5px var(--brand-soft);animation:pulse 2s var(--ease) infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 5px var(--brand-soft)}50%{box-shadow:0 0 0 9px transparent}}
.pstep::after{content:"";position:absolute;top:23px;left:50%;width:100%;height:2px;background:var(--line);z-index:1}
.pstep:last-child::after{display:none}
.pstep.done::after{background:var(--sage-300)}
.pstep .pn{font-size:12.5px;font-weight:500;color:var(--ink-1)}
.pstep .ps{font-size:11px;color:var(--ink-3);margin-top:2px}

/* ── Empty state ── */
.empty{text-align:center;padding:var(--s-10) var(--s-6);max-width:440px;margin:8vh auto 0}
.empty .glyph{width:72px;height:72px;border-radius:20px;margin:0 auto var(--s-5);display:grid;place-items:center;background:var(--brand-soft);color:var(--brand-strong)}
.empty .glyph svg{width:32px;height:32px;stroke-width:1.6}
.empty h2{font-size:22px;margin-bottom:8px}
.empty p{color:var(--ink-2);margin-bottom:var(--s-5)}

/* ── Skeleton ── */
.sk{background:linear-gradient(100deg,var(--surface-2) 30%,var(--surface-3) 50%,var(--surface-2) 70%);background-size:200% 100%;animation:sh 1.3s linear infinite;border-radius:8px}
@keyframes sh{to{background-position:-200% 0}}

/* ── Segmented control ── */
.seg{display:flex;border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden}
.seg button{padding:8px 14px;font-size:13px;color:var(--ink-2);background:var(--surface);border-right:1px solid var(--line)}
.seg button:last-child{border-right:0}
.seg button.on{background:var(--brand-soft);color:var(--brand-strong);font-weight:500}

/* ── Generator ── */
.field{margin-bottom:var(--s-4)}
.field label{display:block;font-size:12.5px;font-weight:500;color:var(--ink-1);margin-bottom:7px}
.field .hint{font-size:11.5px;color:var(--ink-3);font-weight:400;margin-left:6px}
.inp,select,textarea{width:100%;font:inherit;font-size:14px;color:var(--ink-0);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 12px;transition:border var(--t-fast),box-shadow var(--t-fast)}
.inp:focus,select:focus,textarea:focus{outline:0;border-color:var(--sage-300);box-shadow:var(--focus-ring)}
textarea{resize:vertical;min-height:84px;line-height:1.5}
.ctx-tag{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;padding:6px 11px;border-radius:99px;background:var(--surface);border:1px solid var(--line);margin:4px 6px 4px 0;cursor:pointer;transition:all var(--t-fast)}
.ctx-tag .x{color:var(--ink-3);font-size:14px;line-height:1}
.ctx-tag:hover{border-color:var(--danger);color:var(--danger)}
.tmpl{display:flex;gap:var(--s-3);align-items:flex-start;padding:var(--s-3);border:1px solid var(--line);border-radius:var(--r-md);cursor:pointer;transition:all var(--t-fast);background:var(--surface)}
.tmpl:hover{border-color:var(--sage-300);background:var(--surface-2)}
.tmpl .ti{width:34px;height:34px;border-radius:10px;flex:0 0 auto;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand-strong)}
.tmpl .ti svg{width:17px;height:17px}

/* ── Mobile ── */
.scrim{display:none}
@media(max-width:900px){
  .app{grid-template-columns:1fr}
  .sidebar{position:fixed;left:0;top:0;width:280px;transform:translateX(-100%);transition:transform var(--t-med) var(--ease);box-shadow:var(--shadow-lg)}
  .app.mobile-open .sidebar{transform:none}
  .app.collapsed{--sb-w:1fr}
  .collapsed .nav-label,.collapsed .brand-name,.collapsed .brand-sub{display:block}
  .collapsed .nav-item{justify-content:flex-start;padding:9px 12px}
  .scrim{display:block;position:fixed;inset:0;background:var(--backdrop,rgba(20,15,10,.45));z-index:35;opacity:0;pointer-events:none;transition:opacity var(--t-med)}
  .app.mobile-open .scrim{opacity:1;pointer-events:auto}
  .search kbd{display:none}
  .hide-sm{display:none!important}
}
.fade{animation:fade var(--t-slow) var(--ease) both}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.stagger>*{animation:fade var(--t-slow) var(--ease) both}
.stagger>*:nth-child(1){animation-delay:.02s}.stagger>*:nth-child(2){animation-delay:.06s}
.stagger>*:nth-child(3){animation-delay:.10s}.stagger>*:nth-child(4){animation-delay:.14s}
.stagger>*:nth-child(5){animation-delay:.18s}.stagger>*:nth-child(6){animation-delay:.22s}

/* ============================================================
   Aliases de grid e helpers usados pelos painéis Coordenação e
   Responsável (g-2/g-3/g-4 ≙ cols-2/cols-3/cols-4) + .list.
   Mantém compatibilidade entre as convenções dos painéis.
   ============================================================ */
.g-2{grid-template-columns:repeat(2,1fr)}
.g-3{grid-template-columns:repeat(3,1fr)}
.g-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1180px){.g-4{grid-template-columns:repeat(2,1fr)}.g-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.g-2,.g-3,.g-4{grid-template-columns:1fr}}
/* .list: container simples de linhas .row (sem borda dupla no topo) */
.list{display:flex;flex-direction:column}
.list .row:first-child{border-top:0}

/* ============================================================
   NOTIFICATION CENTER — sino vivo + dropdown persistente (Bloco 3)
   Substitui o .dot-bell decorativo. O ponto vermelho estático some;
   quem indica não lidas é o .notif-badge (contagem real) abaixo.
   ============================================================ */
.dot-bell::after{display:none}            /* desliga o ponto estático antigo */
.icon-btn.has-unread{color:var(--ink-0)}

.notif-badge{
  position:absolute;top:3px;right:3px;min-width:16px;height:16px;padding:0 4px;
  display:grid;place-items:center;border-radius:99px;background:var(--danger);
  color:#fff;font-size:10px;font-weight:700;line-height:1;font-family:var(--f-sans);
  border:2px solid var(--surface);box-shadow:var(--shadow-sm);
}

.notif-panel{
  position:fixed;z-index:1000;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-lg);box-shadow:var(--shadow-lg);overflow:hidden;
  display:flex;flex-direction:column;max-height:min(70vh,520px);
  animation:notif-in var(--t-fast) var(--ease) both;
}
@keyframes notif-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.notif-head{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:13px 16px;border-bottom:1px solid var(--line-soft);
}
.notif-head strong{font-family:var(--f-display);font-size:15px;color:var(--ink-0)}
.notif-readall{
  font-size:12px;color:var(--brand-strong);padding:4px 8px;border-radius:var(--r-sm);
  transition:background var(--t-fast);
}
.notif-readall:hover{background:var(--brand-soft)}
.notif-list{overflow-y:auto;-webkit-overflow-scrolling:touch}
.notif-empty{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:34px 18px;color:var(--ink-3);text-align:center;font-size:13px;
}
.notif-empty svg{width:26px;height:26px;opacity:.6}
.notif-item{
  display:flex;gap:11px;align-items:flex-start;padding:12px 16px;cursor:pointer;
  border-bottom:1px solid var(--line-soft);transition:background var(--t-fast);
  position:relative;
}
.notif-item:last-child{border-bottom:0}
.notif-item:hover,.notif-item:focus{background:var(--surface-2);outline:none}
.notif-item:focus-visible{box-shadow:inset var(--focus-ring)}
.notif-item.is-unread{background:var(--brand-soft)}
.notif-item.is-unread:hover{background:var(--surface-2)}
.notif-ico{
  flex:0 0 auto;width:30px;height:30px;border-radius:var(--r-sm);display:grid;place-items:center;
  background:var(--surface-3);color:var(--ink-2);
}
.notif-item.is-unread .notif-ico{background:var(--surface);color:var(--brand-strong)}
.notif-ico svg{width:16px;height:16px}
.notif-body{flex:1;min-width:0}
.notif-title{font-size:13.5px;font-weight:600;color:var(--ink-0);line-height:1.3}
.notif-text{font-size:12.5px;color:var(--ink-2);margin-top:2px;line-height:1.4}
.notif-time{font-size:11px;color:var(--ink-3);margin-top:4px}
.notif-dot{
  flex:0 0 auto;width:8px;height:8px;border-radius:99px;background:var(--brand);
  margin-top:6px;
}
@media(max-width:720px){
  .notif-panel{max-height:70vh}
}

/* ============================================================
   INTERVENÇÕES — cartões de ação do painel do professor.
   (Eram inline em professor.html; movidos para o stylesheet
   compartilhado ao extrair a lógica para módulo ES.)
   ============================================================ */
.interv{display:flex;flex-direction:column;gap:10px}
.interv-top{display:flex;align-items:center;gap:10px}
.interv-signals{display:flex;flex-wrap:wrap;gap:6px}
.interv-action{margin-top:2px}
.interv-btn{width:100%;justify-content:center}
.interv-sug{background:var(--surface-2);border:1px solid var(--line);border-radius:14px;padding:12px 14px}
.interv-sug-t{font-family:var(--f-display);font-size:15.5px;font-weight:600;color:var(--ink-0);line-height:1.3}
.interv-alts{margin-top:8px}
.interv-alts ul{margin:4px 0 0;padding-left:18px;color:var(--ink-2)}
.interv-alts li{margin:2px 0}
.tiny-btn{font-size:12px;padding:6px 12px}

/* ============================================================
   COORDENAÇÃO / tabelas e barras de saúde (compartilhável).
   Movido do <style> inline de coordenador.html ao extrair a
   lógica para módulo ES.
   ============================================================ */
.spider-legend{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.spider-legend .lg{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2)}
.spider-legend .dot{width:9px;height:9px;border-radius:99px;flex:0 0 auto}
.cls-health{display:flex;align-items:center;gap:10px}
.health-bar{flex:1;height:7px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.health-bar>span{display:block;height:100%;border-radius:99px;transition:width var(--t-slow) var(--ease)}
.tbl{width:100%;border-collapse:collapse;font-size:13.5px}
.tbl th{text-align:left;font-weight:500;color:var(--ink-3);font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;padding:8px 10px;border-bottom:1px solid var(--line)}
.tbl td{padding:11px 10px;border-bottom:1px solid var(--line-soft);color:var(--ink-1)}
.tbl tr:last-child td{border-bottom:none}
.tbl tr.clickable{cursor:pointer;transition:background var(--t-fast)}
.tbl tr.clickable:hover{background:var(--surface-2)}

/* Subtítulo da marca em clay no painel da coordenação (era inline). */
body.panel-coord .brand-sub{color:var(--clay-400)}

/* ============================================================
   RESPONSÁVEL / abas de filhos, dimensões, ranking (compartilhável).
   Movido do <style> inline de responsavel.html.
   ============================================================ */
body.panel-resp .brand-sub{color:var(--sky-200)}
.kid-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:var(--s-5)}
.kid-tab{display:flex;align-items:center;gap:10px;padding:8px;border:1px solid var(--line);border-radius:var(--r-full);background:var(--surface);cursor:pointer;transition:all var(--t-fast);font:inherit;color:var(--ink-1)}
.kid-tab:hover{border-color:var(--sage-300);background:var(--surface-2)}
.kid-tab.on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-strong);font-weight:500}
.kid-tab .mini-av{width:30px;height:30px;font-size:12px}
.kid-tab .pad-x{padding-right:8px}
.kid-tab .x{width:20px;height:20px;border-radius:99px;display:none;place-items:center;color:var(--ink-3);font-size:14px;line-height:1}
.kid-tab:hover .x{display:grid}
.dim-row{margin-bottom:14px}
.dim-row .dh{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:5px}
.dim-row .dl{font-size:13.5px;color:var(--ink-1);font-weight:450}
.dim-row .dv{font-size:12px;color:var(--ink-3)}
.dim-row .dt{height:8px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.dim-row .dt>span{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--sage-300),var(--sage-400));transition:width var(--t-slow) var(--ease)}
.dim-hint{font-size:11.5px;color:var(--ink-3);margin-top:3px}
.rank-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line-soft)}
.rank-row:last-child{border-bottom:none}
.rank-row.you{background:var(--brand-soft);border-radius:10px;padding:8px 12px;border:none;margin:2px 0}
.rank-pos{width:24px;font-weight:600;color:var(--ink-2);text-align:center}

/* ============================================================
   ADMIN / pílulas de papel, status de assinatura, planos.
   Movido do <style> inline de admin.html (.tbl já está acima).
   ============================================================ */
body.panel-admin .brand-sub{color:var(--clay-400)}
.role-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;padding:3px 10px;border-radius:99px;background:var(--surface-3);color:var(--ink-1)}
.role-pill .d{width:7px;height:7px;border-radius:99px;flex:0 0 auto}
.r-teacher .d{background:var(--sage-400)}
.r-coordinator .d{background:var(--clay-400)}
.r-admin .d{background:#9b8fb8}
.r-student .d{background:var(--sky-200)}
.r-guardian .d{background:var(--butter-200)}
.status-badge{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:500;padding:5px 12px;border-radius:99px}
.status-paid{background:var(--sage-100);color:var(--sage-600)}
.status-free{background:var(--surface-3);color:var(--ink-2)}
.school-switch{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.school-switch select{font:inherit;padding:8px 12px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--ink-0);max-width:320px}
.mini-actions{display:flex;gap:6px;justify-content:flex-end}
.plan-card{display:flex;flex-direction:column;gap:6px}
.plan-card .price{font-family:Fraunces;font-size:30px;font-weight:600;color:var(--ink-0)}
.plan-card .price small{font-size:14px;color:var(--ink-2);font-weight:400}
.feat-line{display:flex;align-items:center;gap:9px;font-size:13.5px;color:var(--ink-1);padding:4px 0}
.feat-line svg{width:16px;height:16px;flex:0 0 auto;color:var(--sage-500)}

/* ============================================================
   GERAR MATERIAL — gerador de material didático (RAG + BNCC + individualidade)
   ============================================================ */
/* Público do material — turma × aluno específico (a escolha que molda tudo) */
.aud-seg{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:var(--s-5)}
.aud-opt{position:relative;display:flex;align-items:flex-start;gap:11px;text-align:left;padding:13px 14px;border:1.5px solid var(--line);border-radius:var(--r-md);background:var(--surface);transition:border-color var(--t-fast),background var(--t-fast),box-shadow var(--t-fast)}
.aud-opt:hover{border-color:var(--sage-300)}
.aud-opt .ai{width:34px;height:34px;flex:0 0 auto;border-radius:10px;display:grid;place-items:center;background:var(--surface-2);color:var(--ink-2);transition:background var(--t-fast),color var(--t-fast)}
.aud-opt .ai svg{width:18px;height:18px}
.aud-opt .at{display:flex;flex-direction:column;gap:2px;min-width:0}
.aud-opt .at b{font-size:13.5px;font-weight:600;color:var(--ink-0);font-family:var(--f-sans)}
.aud-opt .at i{font-style:normal;font-size:12px;line-height:1.4;color:var(--ink-2)}
.aud-opt .ac{position:absolute;top:10px;right:10px;width:18px;height:18px;border-radius:99px;display:grid;place-items:center;background:var(--brand);color:#fff;opacity:0;transform:scale(.7);transition:opacity var(--t-fast),transform var(--t-fast)}
.aud-opt .ac svg{width:11px;height:11px;stroke-width:3}
.aud-opt.on{border-color:var(--brand);background:var(--brand-soft);box-shadow:0 2px 10px rgba(93,125,75,.12)}
.aud-opt.on .ai{background:var(--brand);color:#fff}
.aud-opt.on .at b{color:var(--brand-strong)}
.aud-opt.on .ac{opacity:1;transform:scale(1)}
@media (max-width:560px){.aud-seg{grid-template-columns:1fr}}

.gen-section{margin-top:2px}
.gen-section + .gen-section{margin-top:var(--s-5);padding-top:var(--s-5);border-top:1px solid var(--line-soft)}
.gen-sec-head{display:flex;align-items:center;gap:9px;margin-bottom:12px}
.gen-sec-head .n{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand-strong);font-size:12px;font-weight:700;flex:0 0 auto}
.gen-sec-head h4{font-size:14px;font-weight:600;color:var(--ink-0);font-family:var(--f-sans)}
.gen-sec-head .tiny{margin-left:auto}

/* Faixa do "lema": destaque da individualidade humana */
.gen-creed{background:var(--brand-soft);border:1px solid var(--sage-200);border-radius:var(--r-md);padding:13px 15px;margin-bottom:14px;display:flex;gap:11px;align-items:flex-start}
.gen-creed svg{width:20px;height:20px;flex:0 0 auto;color:var(--brand-strong);margin-top:1px}
.gen-creed b{color:var(--ink-0)}
.gen-creed p{margin-top:3px;font-size:12.8px;color:var(--ink-1);line-height:1.5}

/* Chips selecionáveis (multi-escolha) */
.chip-pick{display:flex;flex-wrap:wrap;gap:8px}
.chip-pick button{display:inline-flex;align-items:center;gap:7px;font-size:12.8px;font-weight:500;color:var(--ink-1);background:var(--surface-2);border:1px solid var(--line);padding:7px 12px;border-radius:99px;transition:all var(--t-fast)}
.chip-pick button:hover{border-color:var(--sage-300);color:var(--ink-0)}
.chip-pick button .pk-dot{width:8px;height:8px;border-radius:99px;background:var(--ink-4);flex:0 0 auto;transition:background var(--t-fast)}
.chip-pick button.on{background:var(--brand-soft);border-color:var(--sage-300);color:var(--brand-strong)}
.chip-pick button.on .pk-dot{background:var(--brand)}
.chip-pick button:focus-visible{outline:none;box-shadow:var(--focus-ring)}

/* Toggles de confiabilidade */
.gen-toggle{display:flex;gap:12px;align-items:flex-start;padding:11px 0;cursor:pointer}
.gen-toggle + .gen-toggle{border-top:1px solid var(--line-soft)}
.gen-toggle .sw{flex:0 0 auto;width:38px;height:22px;border-radius:99px;background:var(--surface-3);position:relative;transition:background var(--t-fast);margin-top:1px}
.gen-toggle .sw::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:99px;background:#fff;box-shadow:var(--shadow-sm);transition:transform var(--t-fast)}
.gen-toggle.on .sw{background:var(--brand)}
.gen-toggle.on .sw::after{transform:translateX(16px)}
.gen-toggle .tg-body{flex:1;min-width:0}
.gen-toggle .tg-t{font-size:13.2px;font-weight:600;color:var(--ink-0)}
.gen-toggle .tg-d{font-size:12px;color:var(--ink-2);margin-top:2px;line-height:1.45}
.gen-toggle:focus-visible{outline:none}
.gen-toggle:focus-visible .sw{box-shadow:var(--focus-ring)}

/* Linha de motor/roteamento de modelo */
.gen-engine{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11.6px;color:var(--ink-3);margin-top:12px}
.gen-engine .eng{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:99px;background:var(--surface-3);color:var(--ink-2);font-weight:500}
.gen-engine .eng svg{width:13px;height:13px}

/* Preview do material gerado */
.mat-out h3{font-size:17px;margin-bottom:2px}
.mat-doc{font-size:13.6px;line-height:1.62;color:var(--ink-1)}
.mat-doc h2{font-size:16px;margin:18px 0 6px}
.mat-doc h3{font-size:14.5px;margin:14px 0 5px}
.mat-doc h4{font-size:13.5px;margin:12px 0 4px;color:var(--ink-0)}
.mat-doc p{margin:7px 0}
.mat-doc ul,.mat-doc ol{margin:7px 0 7px 20px}
.mat-doc li{margin:3px 0}
.mat-doc strong{color:var(--ink-0)}
.mat-doc blockquote{border-left:3px solid var(--sage-300);background:var(--brand-soft);padding:8px 13px;border-radius:0 10px 10px 0;margin:10px 0;color:var(--ink-1)}
.mat-doc code{background:var(--surface-3);padding:1px 6px;border-radius:6px;font-size:.92em}
.mat-doc hr{border:0;border-top:1px solid var(--line);margin:14px 0}
.mat-block{border:1px solid var(--line);border-radius:var(--r-md);padding:13px 15px;margin-top:14px;background:var(--surface-2)}
.mat-block-t{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;color:var(--ink-0);margin-bottom:8px}
.mat-block-t svg{width:15px;height:15px;color:var(--brand-strong)}
.mat-adapt{display:flex;flex-wrap:wrap;gap:7px}
.mat-adapt .ad{font-size:12px;padding:4px 10px;border-radius:99px;background:var(--brand-soft);color:var(--brand-strong);border:1px solid var(--sage-200)}
.source-item{display:flex;gap:10px;align-items:flex-start;padding:8px 0;font-size:12.8px;border-top:1px solid var(--line-soft)}
.source-item:first-child{border-top:0}
.source-item .sx{flex:0 0 auto;width:22px;height:22px;border-radius:7px;display:grid;place-items:center;background:var(--surface-3);color:var(--ink-2)}
.source-item .sx svg{width:13px;height:13px}
.source-item .nm{font-weight:600;color:var(--ink-0);font-size:12.8px}
.source-item .meta{font-size:11.4px}
.mat-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:16px}
.conf-line{font-size:11.6px;color:var(--ink-3);margin-top:10px;display:flex;align-items:center;gap:6px}
.conf-line svg{width:13px;height:13px;flex:0 0 auto}
@media(max-width:900px){
  #genGridMat{grid-template-columns:1fr!important}
}

/* ============================================================
   AUDITORIA — toast, modal de confirmação, menu de conta, perfil
   ============================================================ */

/* Botão de perigo (excluir / remover) — faltava */
.btn.danger{background:var(--danger);color:#fff}
.btn.danger:hover{filter:brightness(.94);transform:translateY(-1px)}

/* Toasts */
.pk-toasts{position:fixed;right:18px;bottom:18px;z-index:1200;display:flex;flex-direction:column;gap:10px;max-width:min(360px,calc(100vw - 36px));pointer-events:none}
.pk-toast{pointer-events:auto;cursor:pointer;background:var(--surface);color:var(--ink-0);border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:var(--r-sm);padding:11px 14px;font-size:13.5px;line-height:1.45;box-shadow:0 8px 24px rgba(0,0,0,.14);opacity:0;transform:translateY(8px);transition:opacity .2s ease,transform .2s ease}
.pk-toast.show{opacity:1;transform:translateY(0)}

/* Modal de confirmação */
.pk-modal-back{position:fixed;inset:0;z-index:1300;background:rgba(20,16,12,.42);display:flex;align-items:center;justify-content:center;padding:20px;animation:pkfade .14s ease}
@keyframes pkfade{from{opacity:0}to{opacity:1}}
.pk-modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md,16px);padding:22px 22px 18px;max-width:420px;width:100%;box-shadow:0 20px 50px rgba(0,0,0,.28)}
.pk-modal h3{font-size:17px;color:var(--ink-0);margin:0 0 8px}
.pk-modal p{font-size:13.6px;color:var(--ink-1);line-height:1.55;margin:0 0 18px}
.pk-modal-actions{display:flex;gap:10px;justify-content:flex-end}

/* Menu de conta (no rodapé da sidebar) */
.who{position:relative}
.who.is-menu{cursor:pointer;border-radius:12px;padding:8px;margin:-8px;transition:background var(--t-fast)}
.who.is-menu:hover{background:var(--surface-2)}
.who .who-caret{margin-left:auto;color:var(--ink-3);flex:0 0 auto}
.acct-menu{position:absolute;left:0;right:0;bottom:calc(100% + 8px);background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 40px rgba(0,0,0,.2);padding:6px;z-index:60}
.acct-menu[hidden]{display:none!important}
.acct-menu button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:0;padding:9px 10px;border-radius:8px;font-size:13.4px;color:var(--ink-1);cursor:pointer;transition:background var(--t-fast)}
.acct-menu button:hover{background:var(--surface-2);color:var(--ink-0)}
.acct-menu button.danger{color:var(--danger)}
.acct-menu button svg{width:16px;height:16px;flex:0 0 auto}
.acct-menu .sep{height:1px;background:var(--line);margin:6px 4px}

/* Formulário de perfil */
.profile-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.profile-grid .full{grid-column:1 / -1}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field label{font-size:12.5px;font-weight:500;color:var(--ink-1)}
.field input{padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink-0);font-size:14px;transition:border-color var(--t-fast)}
.field input:focus{outline:none;border-color:var(--brand)}
.field .hint{font-size:11.5px;color:var(--ink-3)}
.avatar-row{display:flex;align-items:center;gap:16px;margin-bottom:18px}
.avatar-row .avatar-lg{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:600;color:#fff;flex:0 0 auto}
@media(max-width:680px){.profile-grid{grid-template-columns:1fr}}

/* ════════════════════════════════════════════════════════════════════════
   EXTENSÃO — componentes dos módulos completos da Demo
   (calendário/agenda, atividades, metas, charts, timeline, segmented)
   Mantém a paleta sage/clay e os tokens existentes.
   ════════════════════════════════════════════════════════════════════════ */

/* grid utilitário extra */
.grid.g-2{grid-template-columns:repeat(2,1fr)}
.grid.g-3{grid-template-columns:repeat(3,1fr)}
.grid.g-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1180px){.grid.g-4{grid-template-columns:repeat(2,1fr)}.grid.g-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.grid.g-4,.grid.g-3,.grid.g-2{grid-template-columns:1fr}}
.span-2{grid-column:span 2}
@media(max-width:720px){.span-2{grid-column:span 1}}

/* segmented control (visões: mês/semana/dia, filtros) */
.seg{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);border-radius:99px;padding:3px;gap:2px}
.seg button{border:0;background:none;padding:7px 14px;border-radius:99px;font-size:13px;font-weight:500;color:var(--ink-2);cursor:pointer;transition:all var(--t-fast)}
.seg button:hover{color:var(--ink-0)}
.seg button.on{background:var(--surface);color:var(--brand-strong);box-shadow:var(--shadow-sm)}

/* toolbar genérica (acima de tabelas/calendário) */
.tbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:var(--s-5)}
.tbar .spacer{margin-left:auto}
.tbar .nav-arrows{display:inline-flex;gap:6px}
.tbar .nav-arrows button{width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--ink-1);display:grid;place-items:center;cursor:pointer;transition:all var(--t-fast)}
.tbar .nav-arrows button:hover{border-color:var(--brand);color:var(--brand-strong)}
.tbar .period-title{font-family:var(--f-display);font-size:18px;color:var(--ink-0);min-width:170px;text-transform:capitalize}

/* ── CALENDÁRIO mensal ── */
.cal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--shadow-sm)}
.cal-dow{display:grid;grid-template-columns:repeat(7,1fr);background:var(--surface-2);border-bottom:1px solid var(--line)}
.cal-dow span{padding:10px 8px;text-align:center;font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3)}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}
.cal-cell{min-height:104px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:6px 7px;position:relative;cursor:pointer;transition:background var(--t-fast);display:flex;flex-direction:column;gap:4px}
.cal-cell:nth-child(7n){border-right:0}
.cal-cell:hover{background:var(--surface-2)}
.cal-cell.out{background:var(--bg-soft);opacity:.55}
.cal-cell.today .cal-num{background:var(--brand);color:#fff}
.cal-num{font-size:12.5px;font-weight:600;color:var(--ink-1);width:26px;height:26px;display:grid;place-items:center;border-radius:50%}
.cal-ev{font-size:11px;line-height:1.25;padding:3px 7px;border-radius:7px;color:#fff;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-left:3px solid rgba(255,255,255,.45)}
.cal-ev.aula{background:var(--sage-400)}
.cal-ev.avaliacao{background:var(--clay-400)}
.cal-ev.reuniao{background:#5a7f8c}
.cal-ev.evento{background:#9b8fb8}
.cal-ev.entrega{background:#b9544d}
.cal-ev.lembrete{background:var(--butter-200);color:#6b5413}
.cal-more{font-size:10.5px;color:var(--ink-3);font-weight:600;padding-left:4px}
@media(max-width:720px){.cal-cell{min-height:64px}.cal-ev{display:none}.cal-cell::after{content:attr(data-count);position:absolute;bottom:6px;right:8px;font-size:10px;color:var(--brand-strong);font-weight:700}}

/* lista de agenda (semana/dia + responsável) */
.agenda-list{display:flex;flex-direction:column;gap:10px}
.agenda-day{margin-top:6px}
.agenda-day-h{font-size:12.5px;font-weight:600;color:var(--ink-2);text-transform:capitalize;margin:14px 0 8px;display:flex;align-items:center;gap:8px}
.agenda-day-h::after{content:"";flex:1;height:1px;background:var(--line)}
.agenda-item{display:flex;align-items:center;gap:14px;padding:13px 16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);transition:all var(--t-fast)}
.agenda-item:hover{border-color:var(--brand);box-shadow:var(--shadow-sm)}
.agenda-time{font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink-0);font-size:13.5px;min-width:54px;text-align:center}
.agenda-bar{width:4px;align-self:stretch;border-radius:4px;background:var(--brand)}
.agenda-bar.aula{background:var(--sage-400)}.agenda-bar.avaliacao{background:var(--clay-400)}
.agenda-bar.reuniao{background:#5a7f8c}.agenda-bar.evento{background:#9b8fb8}
.agenda-bar.entrega{background:#b9544d}.agenda-bar.lembrete{background:var(--butter-200)}
.agenda-body{flex:1;min-width:0}
.agenda-body .t{font-weight:500;color:var(--ink-0);font-size:14px}
.agenda-body .m{font-size:12px;color:var(--ink-3);margin-top:2px}
.agenda-type{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:4px 9px;border-radius:99px;background:var(--surface-2);color:var(--ink-2)}

/* legenda de tipos */
.legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:14px}
.legend span{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2)}
.legend i{width:11px;height:11px;border-radius:4px;display:inline-block}

/* ── ATIVIDADES ── */
.act-row{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);margin-bottom:10px;transition:all var(--t-fast)}
.act-row:hover{border-color:var(--brand);box-shadow:var(--shadow-sm)}
.act-ico{width:42px;height:42px;border-radius:11px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand-strong);flex:0 0 auto}
.act-ico svg{width:20px;height:20px}
.act-main{flex:1;min-width:0}
.act-main .t{font-weight:500;color:var(--ink-0);font-size:14.5px}
.act-main .m{font-size:12.5px;color:var(--ink-3);margin-top:3px}
.act-status{font-size:11.5px;font-weight:600;padding:5px 11px;border-radius:99px;text-transform:capitalize}
.act-status.pendente{background:var(--warn-soft);color:var(--warn)}
.act-status.entregue{background:var(--sky-soft);color:#5a7f8c}
.act-status.corrigido{background:var(--brand-soft);color:var(--brand-strong)}
.act-status.atrasado{background:var(--danger-soft);color:var(--danger)}
.act-grade{font-family:var(--f-display);font-size:19px;font-weight:600;color:var(--ink-0);min-width:54px;text-align:right}
.act-grade small{font-size:12px;color:var(--ink-3);font-weight:400}

/* ── METAS ── */
.goal{padding:16px 18px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);margin-bottom:12px;transition:all var(--t-fast)}
.goal:hover{box-shadow:var(--shadow-sm)}
.goal.done{background:var(--brand-soft);border-color:transparent}
.goal-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.goal-head .t{font-weight:500;color:var(--ink-0);font-size:14.5px;flex:1}
.goal-head .due{font-size:11.5px;color:var(--ink-3)}
.goal-check{width:24px;height:24px;border-radius:50%;border:2px solid var(--line);display:grid;place-items:center;cursor:pointer;flex:0 0 auto;color:transparent;transition:all var(--t-fast)}
.goal.done .goal-check{background:var(--brand);border-color:var(--brand);color:#fff}
.goal-check svg{width:13px;height:13px;stroke-width:3}
.goal-prog{display:flex;align-items:center;gap:12px}
.goal-prog .bar{flex:1}
.goal-prog .pct{font-size:12.5px;font-weight:600;color:var(--ink-1);min-width:64px;text-align:right;font-variant-numeric:tabular-nums}

/* ── CHART blocks (barras horizontais rotuladas + legendas) ── */
.hbar{display:flex;flex-direction:column;gap:11px}
.hbar-row{display:grid;grid-template-columns:130px 1fr 48px;align-items:center;gap:12px}
.hbar-row .lbl{font-size:13px;color:var(--ink-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hbar-row .track{height:10px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.hbar-row .track>span{display:block;height:100%;border-radius:99px;background:var(--brand);transition:width 1s var(--ease)}
.hbar-row .val{font-size:12.5px;font-weight:600;color:var(--ink-1);text-align:right;font-variant-numeric:tabular-nums}
@media(max-width:720px){.hbar-row{grid-template-columns:96px 1fr 42px}}

/* stat tiles compactos */
.stat-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}
.stat-tile{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:14px}
.stat-tile .n{font-family:var(--f-display);font-size:26px;font-weight:600;color:var(--ink-0);line-height:1}
.stat-tile .l{font-size:11.5px;color:var(--ink-3);margin-top:6px;text-transform:uppercase;letter-spacing:.04em}
.stat-tile .delta{font-size:11.5px;font-weight:600;margin-top:4px}
.stat-tile .delta.up{color:var(--success)}.stat-tile .delta.down{color:var(--danger)}

/* timeline (histórico do aluno) */
.timeline{position:relative;padding-left:28px}
.timeline::before{content:"";position:absolute;left:9px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl-item{position:relative;padding:0 0 20px}
.tl-item:last-child{padding-bottom:0}
.tl-dot{position:absolute;left:-23px;top:2px;width:20px;height:20px;border-radius:50%;background:var(--surface);border:2px solid var(--brand);display:grid;place-items:center;color:var(--brand-strong)}
.tl-dot svg{width:11px;height:11px;stroke-width:2.4}
.tl-item.achievement .tl-dot{border-color:var(--clay-400);color:var(--clay-400)}
.tl-item.level .tl-dot{border-color:#9b8fb8;color:#9b8fb8}
.tl-item.daily .tl-dot{border-color:#5a7f8c;color:#5a7f8c}
.tl-t{font-weight:500;color:var(--ink-0);font-size:14px}
.tl-m{font-size:12px;color:var(--ink-3);margin-top:2px}
.tl-xp{font-size:11.5px;font-weight:600;color:var(--brand-strong);margin-left:8px}

/* ── CONQUISTAS (grid de badges) ── */
.ach-grid2{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px}
.ach-card{text-align:center;padding:20px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);transition:all var(--t-fast);position:relative}
.ach-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.ach-card.locked{opacity:.62;filter:saturate(.4)}
.ach-medal{width:58px;height:58px;border-radius:50%;margin:0 auto 12px;display:grid;place-items:center;color:#fff;font-size:26px}
.ach-medal.bronze{background:linear-gradient(145deg,#cd9b6a,#a06b3d)}
.ach-medal.prata{background:linear-gradient(145deg,#c9ccd1,#9097a0)}
.ach-medal.ouro{background:linear-gradient(145deg,#e8c66a,#c79a2e)}
.ach-medal svg{width:26px;height:26px}
.ach-card .nm2{font-weight:600;color:var(--ink-0);font-size:13.5px}
.ach-card .ds{font-size:11.5px;color:var(--ink-3);margin-top:4px;line-height:1.4}
.ach-card .pbar{height:6px;border-radius:99px;background:var(--surface-3);overflow:hidden;margin-top:10px}
.ach-card .pbar>span{display:block;height:100%;background:var(--brand)}
.ach-card .pmeta{font-size:10.5px;color:var(--ink-3);margin-top:5px}

/* ranking list */
.rank-list{display:flex;flex-direction:column;gap:8px}
.rank-item{display:flex;align-items:center;gap:14px;padding:12px 16px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface)}
.rank-item.me{background:var(--brand-soft);border-color:transparent}
.rank-item .pos{font-family:var(--f-display);font-size:18px;font-weight:600;color:var(--ink-2);width:30px;text-align:center}
.rank-item.top1 .pos{color:#c79a2e}.rank-item.top2 .pos{color:#9097a0}.rank-item.top3 .pos{color:#a06b3d}
.rank-item .who2{flex:1;font-weight:500;color:var(--ink-0);font-size:14px}
.rank-item .xp2{font-size:13px;font-weight:600;color:var(--brand-strong);font-variant-numeric:tabular-nums}

/* mini calendar (lateral, em dashboards) */
.mini-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.mini-cal .mc-dow{font-size:10px;text-align:center;color:var(--ink-3);font-weight:600;padding-bottom:4px}
.mini-cal .mc-day{aspect-ratio:1;display:grid;place-items:center;font-size:12px;border-radius:8px;color:var(--ink-1);position:relative}
.mini-cal .mc-day.out{color:var(--ink-4)}
.mini-cal .mc-day.today{background:var(--brand);color:#fff;font-weight:600}
.mini-cal .mc-day.has::after{content:"";position:absolute;bottom:3px;width:4px;height:4px;border-radius:50%;background:var(--clay-400)}
.mini-cal .mc-day.today.has::after{background:#fff}

/* progress ring inline */
.pring{display:inline-grid;place-items:center;position:relative}
.pring .pv{position:absolute;font-family:var(--f-display);font-weight:600;color:var(--ink-0)}

/* report export cards */
.rep-card{display:flex;align-items:center;gap:16px;padding:18px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);transition:all var(--t-fast)}
.rep-card:hover{border-color:var(--brand);box-shadow:var(--shadow-sm)}
.rep-ico{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;background:var(--clay-100);color:var(--clay-400);flex:0 0 auto}
.rep-ico svg{width:22px;height:22px}
.rep-main{flex:1}
.rep-main .t{font-weight:500;color:var(--ink-0);font-size:14.5px}
.rep-main .m{font-size:12.5px;color:var(--ink-3);margin-top:3px}

/* divisor de seção */
.sec-h{display:flex;align-items:center;gap:10px;margin:var(--s-6) 0 var(--s-4)}
.sec-h h2{font-size:18px;font-weight:500;color:var(--ink-0)}
.sec-h .line{flex:1;height:1px;background:var(--line)}

/* donut-legend pair */
.donut-pair{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.donut-legend{display:flex;flex-direction:column;gap:8px;flex:1;min-width:140px}
.donut-legend .dlg{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink-1)}
.donut-legend .dlg i{width:11px;height:11px;border-radius:3px}
.donut-legend .dlg b{margin-left:auto;color:var(--ink-0);font-variant-numeric:tabular-nums}

/* ============================================================
   PATCH DE UI (correções visuais) — junho/2026
   Objetivos:
   1) Travar o tamanho dos ícones gerados por ic() (.pk-ic) como rede de
      segurança, além das dimensões já vindas por atributo.
   2) Disponibilizar SEMPRE os primitivos compartilhados .acad-table e
      .comm-tabs/.comm-tab/.comm-chip/.comm-meta. Eles eram definidos apenas
      dentro do <style> injetado pelos módulos Notas (academics.js) e
      Comunicação (comms.js); ao navegar para Relatórios (que usa .acad-table)
      ou abrir Notas sem ter passado por Comunicação, esse CSS não existia e
      a tabela/abas ficavam sem espaçamento (colunas coladas, ícones soltos).
   3) Conter qualquer SVG de ícone sem dimensão explícita para que nunca mais
      "estoure" preenchendo o contêiner.
   Tudo aqui é aditivo e usa apenas tokens já existentes (tema claro/escuro).
   ============================================================ */

/* 1) Ícones de ic() — tamanho/forma base. Regras mais específicas
   (ex.: .nav-item svg, .btn svg, .empty .glyph svg) continuam vencendo. */
.pk-ic{width:18px;height:18px;flex:0 0 auto;display:inline-block;vertical-align:-.18em}

/* 3) Rede de segurança: dentro do conteúdo das telas, um ícone sem largura
   declarada (atributo ou CSS) nunca preenche o contêiner. Gráficos têm
   width="100%"/width fixos e portanto não são afetados. */
.view svg.pk-ic:not([width]){width:18px;height:18px}

/* 2a) Tabela acadêmica/consolidada — agora global (era só do styleBlock de Notas). */
.acad-table{width:100%;border-collapse:collapse;font-size:13.5px}
.acad-table th{text-align:left;font-weight:500;color:var(--ink-3);font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.acad-table td{padding:11px 10px;border-bottom:1px solid var(--line-soft);color:var(--ink-1);vertical-align:middle}
.acad-table tbody tr:last-child td{border-bottom:none}
.acad-table tbody tr:hover{background:var(--surface-2)}
.acad-table td strong{color:var(--ink-0);font-weight:600}

/* 2b) Abas/segmentos e chips compartilhados — agora globais (eram só do
   styleBlock de Comunicação). Garante que as sub-abas de Notas
   (Notas/Frequência/Boletim) e os chips renderizem corretamente em qualquer
   página, com os ícones de ic() já dimensionados. */
.comm-tabs{display:flex;gap:6px;margin:4px 0 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.comm-tab{background:none;border:none;padding:10px 14px;font:inherit;font-weight:600;color:var(--ink-3);cursor:pointer;border-bottom:2px solid transparent;display:inline-flex;align-items:center;gap:7px;transition:color var(--t-fast),border-color var(--t-fast)}
.comm-tab:hover{color:var(--ink-1)}
.comm-tab.active{color:var(--ink-0);border-bottom-color:var(--brand)}
.comm-tab svg{width:16px;height:16px;flex:0 0 auto}
.comm-meta{font-size:12px;color:var(--ink-3)}
.comm-chip{font-size:11.5px;font-weight:600;background:var(--chip);color:var(--ink-2);padding:3px 9px;border-radius:999px;display:inline-flex;align-items:center;gap:6px}

/* 2c) "Período fechado" e estados de aviso usados em chips inline — versão
   tematizada (a versão inline antiga era rosa-claro fixo, ruim no escuro). */
.comm-chip.is-closed{background:var(--danger-soft);color:var(--danger)}

/* Toolbar acadêmica: respiro consistente acima da lista/tabela. */
.acad-toolbar{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-bottom:16px}
