/*!
 * ============================================================
 * UNITDK · Tema Chamilo 1.11.x  (Fase 1 — Identidade / Dark Mode)
 * Universidade Corporativa Tradetek
 * ------------------------------------------------------------
 * Este arquivo aplica a identidade "Corporate Tech" (dark) sobre
 * o Bootstrap 3 + estilos nativos do Chamilo.
 *
 * Caminho de instalacao:
 *   app/Resources/public/css/themes/unitdk/default.css
 *
 * Estrategia: sobrescrever cores/tipografia/componentes via CSS,
 * sem quebrar o HTML nativo do Chamilo. Fidelidade de estrutura
 * (sidebar) vem em fase dedicada posterior.
 * ============================================================ */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap');
@import url('tokens.css');

/* ============================================================
   1. BASE GLOBAL
   ============================================================ */
html,
body {
  background: var(--tdk-bg) !important;
  color: var(--tdk-text) !important;
  font-family: var(--tdk-font) !important;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body > main {
  background: var(--tdk-bg) !important;
}

a {
  color: var(--tdk-accent);
  transition: color var(--tdk-trans);
}
a:hover,
a:focus {
  color: var(--tdk-accent-hov);
  text-decoration: none;
}

h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
  color: var(--tdk-text);
  font-family: var(--tdk-font-display);
  font-weight: var(--tdk-fw-semi);
  letter-spacing: -0.015em;
}

hr { border-color: var(--tdk-border); }

p, span, li, td, th, label, div {
  /* nao forcar cor em tudo p/ nao quebrar componentes; cor herda do body */
}

::selection { background: var(--tdk-accent); color: var(--tdk-on-accent); }

/* Scrollbar dark */
::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-track { background: var(--tdk-bg-2); }
::-webkit-scrollbar-thumb { background: var(--tdk-surface-3); border-radius: 6px; border: 2px solid var(--tdk-bg-2); }
::-webkit-scrollbar-thumb:hover { background: var(--tdk-border-hi); }

/* ============================================================
   2. CONTAINERS / SECOES
   ============================================================ */
#main,
#cm-content,
section#cm-content,
.actions {
  background: transparent !important;
}

#cm-content > .container {
  background: transparent;
}

/* ============================================================
   3. TOPBAR (barra admin) + NAVBAR (menu principal)
   ============================================================ */
/* Topbar admin (#toolbar-admin) */
#toolbar-admin.navbar-inverse {
  background: var(--tdk-bg-2) !important;
  border: none !important;
  border-bottom: 1px solid var(--tdk-border) !important;
  margin-bottom: 0;
}
#toolbar-admin .navbar-nav > li > a,
#toolbar-admin .navbar-brand {
  color: var(--tdk-text-2) !important;
}
#toolbar-admin .navbar-nav > li > a:hover,
#toolbar-admin .navbar-nav > .active > a,
#toolbar-admin .navbar-nav > .open > a {
  color: var(--tdk-text) !important;
  background: var(--tdk-surface) !important;
}

/* Navbar principal (menu) */
.navbar-default {
  background: var(--tdk-surface) !important;
  border: none !important;
  border-bottom: 1px solid var(--tdk-border) !important;
  border-radius: 0 !important;
  box-shadow: var(--tdk-shadow-sm);
}
.navbar-default .navbar-nav > li > a {
  color: var(--tdk-text-2) !important;
  font-weight: var(--tdk-fw-medium);
  transition: color var(--tdk-trans), background var(--tdk-trans);
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: var(--tdk-text) !important;
  background: var(--tdk-surface-2) !important;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .open > a {
  color: var(--tdk-accent) !important;
  background: var(--tdk-surface-2) !important;
}
.navbar-default .navbar-toggle { border-color: var(--tdk-border); }
.navbar-default .navbar-toggle .icon-bar { background: var(--tdk-text-2); }
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus { background: var(--tdk-surface-2); }

/* Logo no header */
#cm-header .logo img,
.logo img { max-height: 46px; width: auto; }

/* Dropdowns */
.dropdown-menu {
  background: var(--tdk-surface-3) !important;
  border: 1px solid var(--tdk-border) !important;
  border-radius: var(--tdk-radius-md) !important;
  box-shadow: var(--tdk-shadow);
  padding: 6px;
}
.dropdown-menu > li > a {
  color: var(--tdk-text-2) !important;
  border-radius: var(--tdk-radius-sm);
  padding: 8px 12px;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  background: var(--tdk-surface-2) !important;
  color: var(--tdk-text) !important;
}
.dropdown-menu .divider { background: var(--tdk-border); }
.caret { color: inherit; }

/* ============================================================
   4. BOTOES
   ============================================================ */
.btn {
  border-radius: var(--tdk-radius) !important;
  font-family: var(--tdk-font);
  font-weight: var(--tdk-fw-semi);
  transition: background var(--tdk-trans), transform var(--tdk-trans), border-color var(--tdk-trans);
}
.btn:active { transform: translateY(1px); }

.btn-primary,
.btn.btn-primary {
  background: var(--tdk-accent) !important;
  border-color: var(--tdk-accent) !important;
  color: var(--tdk-on-accent) !important;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
  background: var(--tdk-accent-hov) !important;
  border-color: var(--tdk-accent-hov) !important;
  color: var(--tdk-on-accent) !important;
}

.btn-success {
  background: var(--tdk-success) !important;
  border-color: var(--tdk-success) !important;
  color: var(--tdk-on-accent) !important;
}
.btn-info {
  background: var(--tdk-blue) !important;
  border-color: var(--tdk-blue) !important;
  color: var(--tdk-on-accent) !important;
}
.btn-warning {
  background: var(--tdk-warn) !important;
  border-color: var(--tdk-warn) !important;
  color: var(--tdk-on-accent) !important;
}
.btn-danger {
  background: var(--tdk-danger) !important;
  border-color: var(--tdk-danger) !important;
  color: var(--tdk-on-accent) !important;
}

.btn-default {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border-hi) !important;
  color: var(--tdk-text) !important;
}
.btn-default:hover,
.btn-default:focus {
  background: var(--tdk-surface-2) !important;
  border-color: var(--tdk-border-hi) !important;
  color: var(--tdk-text) !important;
}
.btn-link { color: var(--tdk-accent) !important; }
.btn-link:hover { color: var(--tdk-accent-hov) !important; }

/* ============================================================
   5. CARDS / PANELS / WELLS
   ============================================================ */
.panel,
.well,
.thumbnail {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  border-radius: var(--tdk-radius-md) !important;
  color: var(--tdk-text);
  box-shadow: var(--tdk-shadow-sm);
}
.panel-heading {
  background: transparent !important;
  border-bottom: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
  border-top-left-radius: var(--tdk-radius-md) !important;
  border-top-right-radius: var(--tdk-radius-md) !important;
  font-weight: var(--tdk-fw-semi);
}
.panel-footer {
  background: var(--tdk-bg-2) !important;
  border-top: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text-2) !important;
}
.panel-title { color: var(--tdk-text) !important; }
.panel-default > .panel-heading { color: var(--tdk-text) !important; }

/* Course/session blocks */
.course-items .panel:hover,
.items-courses .panel:hover {
  border-color: var(--tdk-border-hi) !important;
  box-shadow: var(--tdk-shadow);
  transform: translateY(-2px);
  transition: transform var(--tdk-trans), box-shadow var(--tdk-trans), border-color var(--tdk-trans);
}

/* ============================================================
   6. FORMULARIOS / INPUTS
   ============================================================ */
.form-control,
input[type="text"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="search"],
input[type="url"],
input[type="tel"],
select,
textarea {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
  border-radius: var(--tdk-radius) !important;
  box-shadow: none !important;
}
.form-control:focus,
input:focus,
select:focus,
textarea:focus {
  border-color: var(--tdk-accent) !important;
  box-shadow: 0 0 0 3px var(--tdk-accent-soft) !important;
}
.form-control::placeholder { color: var(--tdk-text-3) !important; }
.form-control[disabled],
.form-control[readonly] { background: var(--tdk-bg-2) !important; color: var(--tdk-text-3) !important; }

label,
.control-label { color: var(--tdk-text-2) !important; font-weight: var(--tdk-fw-medium); }

.input-group-addon {
  background: var(--tdk-surface-2) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text-2) !important;
}
.help-block { color: var(--tdk-text-3) !important; }

/* ============================================================
   7. TABELAS
   ============================================================ */
.table { color: var(--tdk-text) !important; }
.table > thead > tr > th {
  font-family: var(--tdk-font-mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tdk-text-2) !important;
  background: var(--tdk-bg-2) !important;
  border-color: var(--tdk-border) !important;
  border-bottom: 1px solid var(--tdk-border) !important;
  font-weight: var(--tdk-fw-semi);
}
.table > tbody > tr > td,
.table > tbody > tr > th {
  border-color: var(--tdk-border) !important;
}
.table-hover > tbody > tr:hover { background: var(--tdk-surface-2) !important; }
.table-striped > tbody > tr:nth-of-type(odd) { background: var(--tdk-bg-2) !important; }
.table-bordered { border-color: var(--tdk-border) !important; }
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > td { border-color: var(--tdk-border) !important; }

/* ============================================================
   8. PROGRESS BARS
   ============================================================ */
.progress {
  background: rgba(255,255,255,0.06) !important;
  border-radius: var(--tdk-radius-pill) !important;
  box-shadow: none !important;
  height: 8px;
}
.progress-bar {
  background: var(--tdk-accent) !important;
  border-radius: var(--tdk-radius-pill) !important;
}
.progress-bar-success { background: var(--tdk-success) !important; }
.progress-bar-warning { background: var(--tdk-warn) !important; }
.progress-bar-danger  { background: var(--tdk-danger) !important; }

/* ============================================================
   9. LABELS / BADGES / ALERTS
   ============================================================ */
.label, .badge {
  border-radius: var(--tdk-radius-pill) !important;
  font-weight: var(--tdk-fw-medium);
  font-size: 11px;
  padding: 3px 9px;
}
.label-default, .badge { background: rgba(255,255,255,0.08) !important; color: var(--tdk-text-2) !important; }
.label-primary { background: var(--tdk-accent-soft) !important; color: var(--tdk-accent) !important; }
.label-success { background: var(--tdk-success-soft) !important; color: var(--tdk-success) !important; }
.label-info    { background: var(--tdk-accent-soft) !important; color: var(--tdk-accent) !important; }
.label-warning { background: var(--tdk-warn-soft) !important; color: var(--tdk-warn) !important; }
.label-danger  { background: var(--tdk-danger-soft) !important; color: var(--tdk-danger) !important; }

.alert {
  border-radius: var(--tdk-radius-md) !important;
  border: 1px solid var(--tdk-border) !important;
  background: var(--tdk-surface) !important;
  color: var(--tdk-text) !important;
}
.alert-success { border-color: var(--tdk-success) !important; background: var(--tdk-success-soft) !important; }
.alert-info    { border-color: var(--tdk-accent) !important;  background: var(--tdk-accent-soft) !important; }
.alert-warning { border-color: var(--tdk-warn) !important;    background: var(--tdk-warn-soft) !important; }
.alert-danger  { border-color: var(--tdk-danger) !important;  background: var(--tdk-danger-soft) !important; }

/* ============================================================
   10. TABS / NAV PILLS / BREADCRUMB
   ============================================================ */
.nav-tabs { border-bottom: 1px solid var(--tdk-border) !important; }
.nav-tabs > li > a {
  color: var(--tdk-text-2) !important;
  border-radius: var(--tdk-radius-sm) var(--tdk-radius-sm) 0 0 !important;
  border: none !important;
}
.nav-tabs > li > a:hover { background: var(--tdk-surface-2) !important; border: none !important; }
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  background: transparent !important;
  color: var(--tdk-text) !important;
  border: none !important;
  border-bottom: 2px solid var(--tdk-accent) !important;
}
.nav-pills > li > a { color: var(--tdk-text-2) !important; border-radius: var(--tdk-radius) !important; }
.nav-pills > li > a:hover { background: var(--tdk-surface-2) !important; color: var(--tdk-text) !important; }
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover { background: var(--tdk-accent) !important; color: var(--tdk-on-accent) !important; }

/* Breadcrumb nativo, restilizado pra ficar IDÊNTICO ao layout proposto
   (.tdk-home-breadcrumb — ver Seção "Home breadcrumb" mais abaixo).
   Motivo: Template::set_header_parameters() do Chamilo sempre monta essa
   breadcrumb em toda página (curso + título da ferramenta), então em vez
   de reconstruir a navegação à mão página por página (que gera duplicação
   quando também temos uma própria — ver Histórico v0.12.2), fazemos a
   nativa parecer a mesma coisa aqui, uma vez só, valendo pra TODA página
   (inclusive as que ainda não foram customizadas). */
.breadcrumb {
  background: transparent !important;
  padding: var(--tdk-sp-5) 0 0;
  margin: 0 0 var(--tdk-sp-4);
  font-size: var(--tdk-fs-xs);
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
}
.breadcrumb::before {
  content: "UNITDK /";
  color: var(--tdk-text-3);
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.04em;
}
.breadcrumb img { display: none; } /* ícone home.png legado — texto já basta */
.breadcrumb > li {
  color: var(--tdk-text-2) !important;
  font-weight: var(--tdk-fw-medium);
}
.breadcrumb > li > a {
  color: var(--tdk-text-3) !important;
  font-weight: 400 !important;
  text-decoration: none !important;
}
.breadcrumb > li > a:hover { color: var(--tdk-accent) !important; }
.breadcrumb > li + li:before {
  content: "/";
  color: var(--tdk-text-3) !important;
  opacity: 0.5;
}

/* ============================================================
   11. PAGINACAO / WELL / MODAIS
   ============================================================ */
.pagination > li > a,
.pagination > li > span {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text-2) !important;
}
.pagination > li > a:hover { background: var(--tdk-surface-2) !important; color: var(--tdk-text) !important; }
.pagination > .active > a,
.pagination > .active > span {
  background: var(--tdk-accent) !important;
  border-color: var(--tdk-accent) !important;
  color: var(--tdk-on-accent) !important;
}

.modal-content {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  border-radius: var(--tdk-radius-lg) !important;
  color: var(--tdk-text);
}
.modal-header,
.modal-footer { border-color: var(--tdk-border) !important; }
.modal-backdrop { background: #000; }
.close { color: var(--tdk-text); opacity: 0.6; text-shadow: none; }
.close:hover { color: var(--tdk-text); opacity: 1; }

/* ============================================================
   12. FOOTER
   ============================================================ */
.footer,
footer.footer {
  background: var(--tdk-bg-2) !important;
  border-top: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text-3) !important;
}
.footer a, footer.footer a { color: var(--tdk-text-2) !important; }
.footer a:hover { color: var(--tdk-accent) !important; }

/* ============================================================
   13. UTILITARIOS DE MARCA (classes do tokens.css disponiveis)
   ------------------------------------------------------------
   .tdk-btn, .tdk-card, .tdk-pill, .tdk-bar etc. ja vem do
   tokens.css e podem ser usados em conteudo custom.
   ============================================================ */

/* well/panel-body texto */
.panel-body { color: var(--tdk-text); }
.text-muted { color: var(--tdk-text-3) !important; }
.well { background: var(--tdk-surface) !important; }

/* ============================================================
   14. RESPONSIVO / MOBILE (mobile-first do handoff)
   ------------------------------------------------------------
   Ajustes leves para garantir legibilidade em telas pequenas.
   A estrutura nativa do Chamilo (Bootstrap 3) ja e responsiva;
   aqui apenas reforcamos cores/contraste do menu colapsado.
   ============================================================ */
@media (max-width: 991px) {
  /* navbar colapsada: itens empilhados sobre surface */
  .navbar-default .navbar-collapse,
  .navbar-default .navbar-form {
    background: var(--tdk-surface) !important;
    border-top: 1px solid var(--tdk-border) !important;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: var(--tdk-text-2) !important;
  }
  /* botao hamburguer */
  .navbar-default .navbar-toggle {
    border-color: var(--tdk-border) !important;
  }
  .navbar-default .navbar-toggle .icon-bar {
    background-color: var(--tdk-text-2) !important;
  }
  .navbar-default .navbar-toggle:hover,
  .navbar-default .navbar-toggle:focus {
    background-color: var(--tdk-surface-2) !important;
  }
}

@media (max-width: 767px) {
  /* tabelas com scroll horizontal mantem contraste */
  .table-responsive { border-color: var(--tdk-border) !important; }
  /* cards ocupam largura total com respiro */
  .panel { margin-bottom: var(--tdk-space-4, 16px); }
}

/* ============================================================
   15. SHELL UNITDK · SIDEBAR FIXA (Fase 2)
   ------------------------------------------------------------
   Usado por chamilo/main/template/unitdk/layout/page.tpl +
   sidebar_unitdk.tpl. As classes base .tdk-shell/.tdk-sidebar/
   .tdk-nav-item ja vem do tokens.css (sec. "Layout · sidebar
   fixa") - aqui completamos o restante da casca (coluna
   principal, header interno, rodape de usuario da sidebar) e o
   fallback responsivo (sidebar deitada em telas pequenas; a tab
   bar inferior do protótipo mobile fica para a Fase 7).
   ============================================================ */
.tdk-main-col {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.tdk-header-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 8px 24px;
  min-height: 0;
  border-bottom: 1px solid var(--tdk-border);
  background: var(--tdk-bg);
}
.tdk-header-search { flex: 1; max-width: 420px; }
.tdk-header-actions { display: flex; align-items: center; gap: 14px; }

/* Widget nativo "Utilizadores online" (ul#notifications) - o link tem
   padding pensado pra navbar grande (10px 15px); aqui na faixa fina do
   header isso sozinho ja empurrava a barra pra ~73px de altura. */
.tdk-header-actions #notifications {
  display: flex;
  align-items: center;
}
.tdk-header-actions #notifications > li > a {
  display: flex !important;
  align-items: center;
  gap: 6px;
  padding: 4px 8px !important;
  color: var(--tdk-text-2) !important;
  font-size: 12.5px;
}
.tdk-header-actions #notifications > li > a:hover {
  color: var(--tdk-text) !important;
}

.tdk-sidebar-inner {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
}
/* Área rolável: logo + trilha + nav principal. Só ela rola (o rodapé
   fica fixo). O padding lateral vive aqui (não na .tdk-sidebar) pra a
   barra de rolagem não comer o respiro. */
.tdk-sidebar-scroll {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: var(--tdk-sp-4);
  padding: 20px 14px 8px;
  /* scrollbar discreta */
  scrollbar-width: thin;
  scrollbar-color: var(--tdk-border) transparent;
}
.tdk-sidebar-scroll::-webkit-scrollbar { width: 6px; }
.tdk-sidebar-scroll::-webkit-scrollbar-thumb { background: var(--tdk-border); border-radius: 3px; }

/* Rodapé fixo: Mensagens + Perfil + card do usuário, agrupados. */
.tdk-sidebar-footer {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 8px 14px 14px;
  border-top: 1px solid var(--tdk-border);
}

.tdk-sidebar-logo { display: block; padding: 4px 10px 0; }
.tdk-sidebar-logo img { height: 26px; width: auto; }

.tdk-nav { display: flex; flex-direction: column; gap: 2px; }
.tdk-nav-group-label { font-weight: var(--tdk-fw-medium); cursor: default; }
.tdk-nav-subgroup { display: flex; flex-direction: column; padding-left: 22px; }
.tdk-nav-subitem { font-size: 11.5px; padding: 6px 10px; }

/* Card do usuário — dentro do rodapé, separado de Mensagens/Perfil por
   um respiro (o border-top já é do .tdk-sidebar-footer). Avatar + nome +
   cargo real (Aluno/Professor/Administrador — dado nativo do status),
   igual à estrutura de 2 linhas do mockup, sem inventar senioridade. */
.tdk-sidebar-user {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: var(--tdk-sp-2);
  padding: 8px;
  border-radius: var(--tdk-radius-md);
  background: var(--tdk-surface-2);
  border: 1px solid var(--tdk-border);
}
.tdk-sidebar-user-link {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 1;
  min-width: 0;
  color: var(--tdk-text);
  text-decoration: none;
}
.tdk-sidebar-user-avatar { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
/* Sem foto (fallback nativo do Chamilo é unknown.jpg, um silhueta cinza
   genérica) — quadrado arredondado dourado com iniciais brancas. */
.tdk-sidebar-user-avatar--fallback {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  background: var(--tdk-gold);
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: var(--tdk-fw-bold);
  flex-shrink: 0;
}
.tdk-sidebar-user-info { display: flex; flex-direction: column; min-width: 0; gap: 1px; }
.tdk-sidebar-user-name {
  font-size: 12.5px;
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.tdk-sidebar-user-role {
  font-size: 10px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--tdk-text-3);
}
.tdk-sidebar-user-icon { color: var(--tdk-text-3); padding: 4px; text-decoration: none; flex-shrink: 0; }
.tdk-sidebar-user-icon:hover { color: var(--tdk-accent); }

/* Fallback responsivo: sidebar deitada no topo, rolagem horizontal.
   A tab bar inferior (telas 16-18 do protótipo) fica para a Fase 7. */
@media (max-width: 767px) {
  .tdk-shell { flex-direction: column; }
  .tdk-sidebar {
    flex: 0 0 auto;
    width: 100%;
    border-right: none;
    border-bottom: 1px solid var(--tdk-border);
    /* desfaz o fixo do desktop: no mobile a sidebar deita no topo e
       rola horizontalmente junto com a página */
    position: static;
    height: auto;
    overflow: visible;
  }
  .tdk-sidebar-inner { min-height: 0; }
  .tdk-sidebar-scroll {
    flex-direction: row;
    align-items: center;
    overflow-x: auto;
    overflow-y: visible;
    gap: var(--tdk-sp-3);
    padding: 10px 12px;
  }
  .tdk-sidebar-footer {
    flex-direction: row;
    align-items: center;
    border-top: none;
    padding: 10px 12px;
  }
  .tdk-sidebar-logo,
  .tdk-active-trail,
  .tdk-sidebar-user { display: none; }
  .tdk-nav { flex-direction: row; overflow-x: auto; flex: none; }
  .tdk-nav-group { flex: none; }
  .tdk-nav-item { white-space: nowrap; }
}

/* ============================================================
   16. REMOVER DUPLICACAO DA SIDEBAR NATIVA (Fase 3)
   ------------------------------------------------------------
   layout_2_col.tpl e layout_3_col.tpl (default/, nao sobrescritos)
   ainda renderizam sua propria coluna lateral nativa (.sidebar com
   Perfil/Cursos, ou #menu-wrapper com login/profile/account/etc.)
   dentro do nosso #cm-content. Como a navegacao e o card "Trilha
   ativa" ja vivem na sidebar fixa (.tdk-sidebar), essa segunda
   coluna fica redundante e bagunça o layout - escondemos via CSS
   (sem tocar nos .tpl nativos) e expandimos a coluna de conteudo.

   IMPORTANTE: só para usuario LOGADO (body.tdk-logged-in, setado em
   page.tpl). Para visitante anonimo (body.tdk-anonymous) esse mesmo
   .sidebar/#menu-wrapper e onde o login_form.tpl nativo vive - se
   escondermos sem essa condicao, o visitante perde o unico jeito de
   logar pela home (ja aconteceu uma vez, ver lição aprendida no
   README/historico).
   ============================================================ */
body.tdk-logged-in #cm-content .sidebar,
body.tdk-logged-in #cm-content #menu-wrapper {
  display: none !important;
}
body.tdk-logged-in #cm-content .col-md-9.col-md-push-3 {
  width: 100% !important;
  left: 0 !important;
  float: none !important;
}
body.tdk-logged-in #cm-content #maincontent {
  width: 100% !important;
  float: none !important;
}

/* ============================================================
   17. WIDGETS DE TERCEIROS (Fase 3 - varredura de telas)
   ------------------------------------------------------------
   Bibliotecas que o Chamilo embute (FullCalendar, jQuery UI,
   bootstrap-select) e um componente Bootstrap 4 (.card, usado em
   telas mais novas como Relatorios/mySpace) renderizam com CSS
   proprio que nao herda nossas variaveis - apareciam como caixas
   brancas/nao tematizadas. Cobertura ampla (varias telas usam as
   mesmas classes), nao exaustiva pagina-a-pagina.
   ============================================================ */

/* FullCalendar (Agenda) */
.fc-button {
  background: var(--tdk-surface) !important;
  background-image: none !important;
  border: 1px solid var(--tdk-border-hi) !important;
  color: var(--tdk-text) !important;
  text-shadow: none !important;
  box-shadow: none !important;
}
.fc-state-hover { background: var(--tdk-surface-2) !important; }
.fc-state-active,
.fc-state-down {
  background: var(--tdk-accent) !important;
  color: var(--tdk-on-accent) !important;
  border-color: var(--tdk-accent) !important;
}
.fc-state-disabled { opacity: 0.5; }
.fc th, .fc td, .fc-row, .fc-list-view, .fc-divider {
  border-color: var(--tdk-border) !important;
}
.fc-unthemed td.fc-today { background: var(--tdk-accent-soft) !important; }
.fc-toolbar h2 { color: var(--tdk-text) !important; }
.fc-day-number, .fc-list-heading-main, .fc-list-heading-alt { color: var(--tdk-text-2) !important; }
.fc-event { border-color: var(--tdk-accent) !important; }
.fc-widget-header,
.fc-day-header {
  background: var(--tdk-bg-2) !important;
  color: var(--tdk-text-2) !important;
}
.fc-other-month { background: var(--tdk-bg-2) !important; }
.fc-widget-content { background: transparent !important; }

/* bootstrap-select (selects customizados em forms) */
.bootstrap-select > .btn,
.bootstrap-select .dropdown-toggle {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
}
.bootstrap-select .dropdown-menu {
  background: var(--tdk-surface-3) !important;
  border: 1px solid var(--tdk-border) !important;
}
.bootstrap-select .dropdown-menu li a {
  color: var(--tdk-text-2) !important;
}
.bootstrap-select .dropdown-menu li a:hover,
.bootstrap-select .dropdown-menu li.selected a {
  background: var(--tdk-surface-2) !important;
  color: var(--tdk-text) !important;
}

/* Select2 (outro plugin de select customizado, DIFERENTE do bootstrap-select
   acima — usado em campos multi-seleção com chips, ex.: "Professores" e
   "Tags" nos formulários de Criar curso/Criar sessão/etc. Vem com CSS
   próprio branco por padrão — achado pelo usuário com print da tela real.
   IMPORTANTE: main/css/base.css (nativo) tem regras `!important` pra esse
   mesmo plugin com seletor composto (.select2-container--default
   .select2-selection--multiple, especificidade 0,2,0) — um seletor simples
   (.select2-selection--multiple, 0,1,0) PERDE mesmo com !important, porque
   entre duas regras !important quem desempata é especificidade, não ordem
   de carregamento. Por isso os seletores abaixo replicam o MESMO composto
   do base.css, nunca um seletor solto. */
.select2-container .select2-selection--single,
.select2-container--default .select2-selection--multiple,
.select2-container .select2-selection--multiple {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
  box-shadow: none !important;
}
.select2-container .select2-selection__rendered {
  color: var(--tdk-text) !important;
}
.select2-container .select2-selection__placeholder {
  color: var(--tdk-text-3) !important;
}
.select2-container .select2-selection__arrow b {
  border-color: var(--tdk-text-3) transparent transparent transparent !important;
}
.select2-container .select2-selection__choice {
  background: var(--tdk-surface-3) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
  border-radius: var(--tdk-radius-sm) !important;
}
.select2-container .select2-selection__choice__remove {
  color: var(--tdk-text-3) !important;
}
.select2-container .select2-selection__choice__remove:hover {
  color: var(--tdk-text) !important;
}
.select2-container .select2-search__field,
.select2-container .select2-search--inline .select2-search__field {
  background: transparent !important;
  color: var(--tdk-text) !important;
}
.select2-container .select2-search__field::placeholder { color: var(--tdk-text-3) !important; }
.select2-dropdown.select2-dropdown {
  background: var(--tdk-surface-3) !important;
  border: 1px solid var(--tdk-border) !important;
}
.select2-container .select2-results__option {
  color: var(--tdk-text-2) !important;
}
.select2-container .select2-results__option--highlighted,
.select2-container .select2-results__option[aria-selected="true"] {
  background: var(--tdk-surface-2) !important;
  color: var(--tdk-text) !important;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
}

/* jQuery UI (dialogs/botoes de modais nativos) */
.ui-widget-content,
.ui-dialog {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
}
.ui-dialog .ui-dialog-titlebar {
  background: var(--tdk-surface-2) !important;
  border-bottom: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text) !important;
}
.ui-button,
.ui-state-default {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border-hi) !important;
  color: var(--tdk-text) !important;
}
.ui-state-hover { background: var(--tdk-surface-2) !important; }
.ui-state-active {
  background: var(--tdk-accent) !important;
  color: var(--tdk-on-accent) !important;
}

/* Bootstrap 4 .card (telas mais novas, ex. Relatorios/mySpace) */
.card {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  color: var(--tdk-text);
}
.card-header, .card-footer {
  background: transparent !important;
  border-color: var(--tdk-border) !important;
}
.card-body { color: var(--tdk-text); }

/* Cards de curso no Catalogo */
.items.items-courses,
.items-courses {
  background: var(--tdk-surface) !important;
  color: var(--tdk-text);
}

/* Controles nativos do navegador (checkbox/radio/file) */
input[type="checkbox"],
input[type="radio"] {
  accent-color: var(--tdk-accent);
}
input[type="file"] {
  color: var(--tdk-text-2);
}

/* ============================================================
   18. DASHBOARD HERO (Fase 3)
   ------------------------------------------------------------
   Usado pelo plugin chamilo/plugin/unitdk_dashboard_hero (regiao
   content_top) - hero "Continuar de onde parou" + cards de stat
   no topo do dashboard do aluno.
   ============================================================ */
.tdk-dashboard-hero {
  display: flex;
  flex-wrap: wrap;
  gap: var(--tdk-sp-5);
  margin-bottom: var(--tdk-sp-6);
}
.tdk-hero-card {
  flex: 2 1 320px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.tdk-hero-course {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
}
.tdk-hero-card .tdk-btn { align-self: flex-start; }

.tdk-hero-stats {
  flex: 1 1 220px;
  display: flex;
  gap: var(--tdk-sp-4);
}
.tdk-stat-card {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
  justify-content: center;
}
.tdk-stat-value {
  font-size: var(--tdk-fs-2xl);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  font-family: var(--tdk-font-mono);
}

@media (max-width: 767px) {
  .tdk-dashboard-hero { flex-direction: column; }
  .tdk-hero-stats { flex-direction: row; }
}

/* ============================================================
   19. LOGIN SPLIT-SCREEN (Fase 3)
   ------------------------------------------------------------
   Usado por main/template/unitdk/layout/login_form.tpl. So se
   aplica para visitante anonimo (body.tdk-anonymous, setado em
   page.tpl) - colapsa a casca do app (header/footer/grid nativo)
   para o login ocupar a tela inteira em duas colunas.
   ============================================================ */
body.tdk-anonymous .tdk-header-bar,
body.tdk-anonymous .footer,
body.tdk-anonymous footer.footer {
  display: none !important;
}
body.tdk-anonymous #cm-content {
  padding: 0 !important;
}
body.tdk-anonymous #cm-content > .container {
  width: 100% !important;
  max-width: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
body.tdk-anonymous #cm-content .row {
  margin: 0 !important;
}
body.tdk-anonymous #cm-content .col-md-3.col-md-pull-9 {
  width: 100% !important;
  float: none !important;
  left: 0 !important;
  padding: 0 !important;
}
body.tdk-anonymous #cm-content .col-md-9.col-md-push-3 {
  display: none !important;
}

.tdk-login-shell {
  display: flex;
  min-height: 100vh;
}
.tdk-login-left {
  flex: 1 1 480px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 48px 64px;
  max-width: 560px;
}
.tdk-login-logo img { height: 28px; width: auto; margin-bottom: 48px; }
.tdk-login-intro { margin-bottom: 28px; }
.tdk-login-title {
  font-size: var(--tdk-fs-2xl);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 8px 0 10px;
}
.tdk-login-sub { color: var(--tdk-text-2); font-size: 14px; }
.tdk-login-card { padding: var(--tdk-sp-6); }
.tdk-login-links { margin-top: 14px; }
.tdk-login-links > li > a {
  color: var(--tdk-text-2) !important;
  font-size: 13px;
  padding: 4px 0 !important;
  background: transparent !important;
}
.tdk-login-links > li > a:hover { color: var(--tdk-accent) !important; }
.tdk-login-footer { margin-top: 24px; color: var(--tdk-text-3); font-size: 12px; }

.tdk-login-right {
  flex: 1 1 480px;
  display: flex;
  align-items: center;
  padding: 64px;
  background: var(--tdk-bg-2);
  border-left: 1px solid var(--tdk-border);
}
.tdk-login-right-inner { max-width: 480px; }
.tdk-login-right-title {
  font-size: var(--tdk-fs-xl);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 10px 0 12px;
}
.tdk-login-right-sub { color: var(--tdk-text-2); font-size: 14px; margin-bottom: 32px; }
.tdk-login-stats { display: flex; gap: var(--tdk-sp-4); }
.tdk-login-stat { flex: 1; }
.tdk-login-stat .tdk-stat-value { font-size: var(--tdk-fs-xl); }

@media (max-width: 991px) {
  .tdk-login-right { display: none; }
  .tdk-login-left { max-width: none; margin: 0 auto; }
}

/* ============================================================
   20. CATALOGO (Fase 4)
   ------------------------------------------------------------
   Usado por main/template/unitdk/catalog/course_catalog.tpl e
   course_item_catalog.tpl. Pills de categoria sao progressive
   enhancement em cima do select nativo "search_category_code"
   (ver script no .tpl) - sem inventar categoria nenhuma, so le o
   que o admin cadastrou em Categorias de Curso.
   ============================================================ */
.tdk-catalog-header { margin-bottom: var(--tdk-sp-5); }
.tdk-catalog-title {
  font-size: var(--tdk-fs-2xl);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 8px 0 0;
}

.tdk-catalog-filter-card { margin-bottom: var(--tdk-sp-5); }
.tdk-catalog-filter-form .form-inline-box,
.tdk-catalog-filter-form .input-group { width: 100%; }

.tdk-hidden-but-functional {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.tdk-pill-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}
.tdk-catalog-pill {
  border: 1px solid var(--tdk-border);
  background: transparent;
  cursor: pointer;
  transition: background var(--tdk-trans), border-color var(--tdk-trans), color var(--tdk-trans);
}
.tdk-catalog-pill:hover { background: var(--tdk-surface-2); color: var(--tdk-text); }
.tdk-catalog-pill.tdk-pill-accent { border-color: var(--tdk-accent); }

.tdk-catalog-counts {
  color: var(--tdk-text-2);
  font-size: 12.5px;
  margin-bottom: var(--tdk-sp-3);
}
.tdk-catalog-counts strong { color: var(--tdk-text); }

.tdk-course-card {
  background: var(--tdk-surface) !important;
  border: 1px solid var(--tdk-border) !important;
  border-radius: var(--tdk-radius-md) !important;
  overflow: hidden;
  height: 100%;
  display: flex;
  flex-direction: column;
  transition: border-color var(--tdk-trans), transform var(--tdk-trans);
}
.tdk-course-card:hover { border-color: var(--tdk-border-hi) !important; transform: translateY(-2px); }
.tdk-course-card-image { position: relative; background: var(--tdk-bg-2); }
.tdk-course-card-image img { width: 100%; height: auto; display: block; }
.tdk-course-card-category {
  position: absolute;
  top: 10px;
  left: 10px;
  text-decoration: none;
}
.tdk-course-card-body {
  padding: var(--tdk-sp-4) var(--tdk-sp-5);
  display: flex;
  flex-direction: column;
  gap: 6px;
  flex: 1;
}
.tdk-course-card-title {
  font-size: 15px;
  font-weight: var(--tdk-fw-semi);
  margin: 0;
}
.tdk-course-card-title a { color: var(--tdk-text) !important; text-decoration: none; }
.tdk-course-card-teacher { color: var(--tdk-text-2); font-size: 12.5px; }
.tdk-course-card-action { margin-top: auto; padding-top: 10px; }

/* ============================================================
   21. LEARNING PATH PLAYER (Fase 5)
   ------------------------------------------------------------
   Classes reais confirmadas inspecionando o player nativo em
   unitdk.test (lp_controller.php?action=view). O default.css
   ja e carregado nessa pagina (confirmado: body bg = tdk-bg),
   entao estas regras complementam o que ja temos globalmente.
   ============================================================ */
#content-scorm { min-height: 100vh; }

#learning_path_left_zone {
  background: var(--tdk-bg-2) !important;
  border-right: 1px solid var(--tdk-border) !important;
}

#scorm-info,
#panel-scorm {
  background: var(--tdk-surface) !important;
  border-bottom: 1px solid var(--tdk-border) !important;
}

.image-avatar { text-align: center; padding: var(--tdk-sp-4); }

#progress_bar .progress { margin: 0 var(--tdk-sp-4) var(--tdk-sp-3); }

#actions_lp { border-top: 1px solid var(--tdk-border); padding: var(--tdk-sp-3); }
#actions_lp .btn-group .btn { font-size: 11px; }

#toc_id.scorm-body { background: var(--tdk-bg-2) !important; }

.scorm-title { background: var(--tdk-bg-2) !important; border-bottom: 1px solid var(--tdk-border) !important; }
.scorm-title h4 { color: var(--tdk-text-2) !important; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; padding: var(--tdk-sp-3) var(--tdk-sp-4); margin: 0; }

#inner_lp_toc { padding: var(--tdk-sp-2); }
.item.level_0 { border-radius: var(--tdk-radius-sm); margin-bottom: 2px; }
.item.level_0:hover { background: var(--tdk-surface) !important; }
.item.level_0.current_element { background: var(--tdk-surface) !important; border: 1px solid var(--tdk-border) !important; }
a.items-list { color: var(--tdk-text) !important; display: block; padding: 8px 10px; font-size: 13px; }
a.items-list:hover { color: var(--tdk-accent) !important; text-decoration: none; }

#learning_path_right_zone { background: var(--tdk-bg) !important; }

.nav-tabs-bar,
#navTabsbar { background: var(--tdk-surface) !important; border-bottom: 1px solid var(--tdk-border) !important; }

#navTabs.nav-tabs { border-bottom: none !important; }
#navTabs.nav-tabs > li > a { color: var(--tdk-text-2) !important; font-size: 12px; }
#navTabs.nav-tabs > li.active > a {
  background: transparent !important;
  color: var(--tdk-text) !important;
  border-bottom: 2px solid var(--tdk-accent) !important;
  border-left: none !important;
  border-right: none !important;
  border-top: none !important;
}

#lp-view-content,
#tab-iframe { background: var(--tdk-bg) !important; }

/* ============================================================
   22. FORUM (Fase 6)
   ------------------------------------------------------------
   Classes reais inspecionadas via viewforum.php e
   forumfunction.inc.php do Chamilo 1.11. Paineis (.panel,
   .thumbnail) ja estao dark pelo Section 5 — aqui so
   adicionamos comportamentos especificos do forum.
   ============================================================ */

/* Category header with forum name */
.topic-forum h3,
.topic-forum h4 { color: var(--tdk-text); font-weight: var(--tdk-fw-semi); margin-bottom: var(--tdk-sp-3); }

/* Thread cards hover + sticky accent */
.panel.forum { transition: border-color var(--tdk-trans), transform var(--tdk-trans); }
.panel.forum:hover { border-color: var(--tdk-border-hi) !important; transform: translateY(-1px); }
.panel.forum.sticky { border-left: 3px solid var(--tdk-accent) !important; }

/* User thumbnail inside post/thread */
.forum_display .thumbnail img,
.forum_message .thumbnail img {
  border-radius: 50%;
  border: 2px solid var(--tdk-border);
}

/* Post action icon group */
.tools-icons { margin-top: var(--tdk-sp-2); }
.tools-icons a,
.tools-icons img { opacity: 0.65; transition: opacity var(--tdk-trans); }
.tools-icons a:hover,
.tools-icons img:hover { opacity: 1; }

/* Attachment comment label */
.forum_attach_comment { color: var(--tdk-text-2); font-size: 12px; font-style: italic; }

/* Thread stat cols (last reply, views) */
.forum_display .col-md-6 .row { color: var(--tdk-text-2); font-size: 12.5px; }

/* Forum toolbar (#toolbar-forum from DOM inspection) */
#toolbar-forum.actions { margin-bottom: var(--tdk-sp-4); }

/* ============================================================
   23. MENSAGENS (Fase 6)
   ------------------------------------------------------------
   Layout de 3+9 colunas: .social-network-menu (col-md-3) com
   #sn-avatar, #sn-sidebar (painel de navegacao) + coluna
   principal com lista de mensagens e formulario.
   Classes reais inspecionadas em inbox.php (unitdk.test).
   ============================================================ */

/* Avatar panel inside social sidebar */
#sn-avatar .panel { text-align: center; }
.sidebar-avatar,
.area-avatar { padding: var(--tdk-sp-3); text-align: center; }
.sidebar-avatar .img-circle,
.area-avatar .img-circle { border: 2px solid var(--tdk-accent); width: 64px; height: 64px; }

/* Social sidebar nav pills (vertical stacked) */
#sn-sidebar .nav-pills > li > a {
  color: var(--tdk-text-2) !important;
  background: transparent !important;
  border-radius: var(--tdk-radius-sm) !important;
  font-size: 13px;
  padding: 6px 12px;
  transition: background var(--tdk-trans), color var(--tdk-trans);
}
#sn-sidebar .nav-pills > li > a:hover {
  background: var(--tdk-surface-2) !important;
  color: var(--tdk-text) !important;
}
#sn-sidebar .nav-pills > li.active > a,
#sn-sidebar .nav-pills > li.active > a:hover {
  background: var(--tdk-accent) !important;
  color: var(--tdk-on-accent) !important;
}

/* Message list rows */
.list-user-data,
.list-info {
  border-bottom: 1px solid var(--tdk-border);
  padding: var(--tdk-sp-3) var(--tdk-sp-4);
  transition: background var(--tdk-trans);
}
.list-user-data:hover,
.list-info:hover { background: var(--tdk-surface-2); }

/* Message preview text */
.email-overflow {
  color: var(--tdk-text-2);
  font-size: 12.5px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Sender name */
.item-name { color: var(--tdk-text); font-weight: var(--tdk-fw-medium); }

/* User type badge */
.user-type { color: var(--tdk-text-2); font-size: 11px; }

/* ============================================================
   24. ADMIN (Fase 6)
   ------------------------------------------------------------
   Classes reais inspecionadas em /admin/index.php (unitdk.test).
   Cada bloco usa .panel.panel-default.block-admin-* (6 colunas
   side-by-side). Lista de itens: .list-items-admin com links
   icone + texto. Icones sao imagens claras — invertidas aqui.
   ============================================================ */

/* Admin block icons: invert para ficarem visiveis no dark */
.block-admin-users > .panel-heading img,
.block-admin-courses > .panel-heading img,
.block-admin-sessions > .panel-heading img,
.block-admin-platform > .panel-heading img,
.block-admin-settings > .panel-heading img,
.block-admin-skills > .panel-heading img,
.block-admin-privacy > .panel-heading img,
.block-admin-version-check > .panel-heading img {
  filter: invert(1) brightness(0.8);
  width: 22px;
  height: 22px;
}

/* Admin item list */
.list-items-admin { list-style: none; padding: 0; margin: 0; }
.list-items-admin li { border-bottom: 1px solid var(--tdk-border); }
.list-items-admin li:last-child { border-bottom: none; }
.list-items-admin li a {
  color: var(--tdk-text-2) !important;
  font-size: 13px;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 5px 6px;
  border-radius: var(--tdk-radius-sm);
  transition: background var(--tdk-trans), color var(--tdk-trans);
}
.list-items-admin li a:hover {
  background: var(--tdk-surface-2);
  color: var(--tdk-text) !important;
  text-decoration: none;
}
.list-items-admin li a img { filter: invert(0.6); width: 16px; height: 16px; }

/* Chamilo version-check alert */
.block-admin-version-check .alert-info {
  background: rgba(99,102,241,0.1) !important;
  border-color: var(--tdk-accent) !important;
  color: var(--tdk-text-2) !important;
}

/* ============================================================
   25. PLUGIN: DASHBOARD ADMIN (Fase 6)
   ------------------------------------------------------------
   Renderizado pelo plugin unitdk_admin_dashboard em content_top
   apenas na pagina main/admin/index.php. KPI cards + grafico
   Chart.js (inscricoes por trilha). Chart.js carregado via CDN
   se nao estiver presente; nenhum core editado.
   ============================================================ */

.tdk-admin-dashboard {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-5);
  margin-bottom: var(--tdk-sp-6);
}
.tdk-admin-dashboard > h3 {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--tdk-text-2);
  font-weight: var(--tdk-fw-medium);
  margin: 0 0 var(--tdk-sp-4);
}

.tdk-admin-kpi-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--tdk-sp-4);
  margin-bottom: var(--tdk-sp-5);
}
.tdk-admin-kpi-card {
  background: var(--tdk-bg-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  padding: var(--tdk-sp-4) var(--tdk-sp-5);
  text-align: center;
  transition: border-color var(--tdk-trans);
}
.tdk-admin-kpi-card:hover { border-color: var(--tdk-border-hi); }
.tdk-admin-kpi-icon { font-size: 22px; color: var(--tdk-accent); margin-bottom: var(--tdk-sp-2); }
.tdk-admin-kpi-value {
  font-size: var(--tdk-fs-2xl);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  line-height: 1.1;
}
.tdk-admin-kpi-label {
  font-size: 11px;
  color: var(--tdk-text-2);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-top: 4px;
}

.tdk-admin-chart-wrap {
  background: var(--tdk-bg-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  padding: var(--tdk-sp-4) var(--tdk-sp-5);
}
.tdk-admin-chart-title {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--tdk-text-2);
  font-weight: var(--tdk-fw-medium);
  margin: 0 0 var(--tdk-sp-3);
}

@media (max-width: 991px) {
  .tdk-admin-kpi-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 575px) {
  .tdk-admin-kpi-grid { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════════════
   26 · Perfil (main/auth/profile.php)
   ═══════════════════════════════════════════════════════════════════════ */

/* Menu lateral esquerdo */
.social-network-menu {
  background: var(--tdk-bg-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  overflow: hidden;
}
.social-network-menu .header {
  background: var(--tdk-surface);
  color: var(--tdk-text-2);
  border-bottom: 1px solid var(--tdk-border);
  padding: var(--tdk-sp-3) var(--tdk-sp-4);
  font-size: var(--tdk-fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.07em;
  font-weight: var(--tdk-fw-medium);
}
.social-network-menu ul {
  margin: 0;
  padding: var(--tdk-sp-2) 0;
  list-style: none;
}
.social-network-menu ul li a {
  display: block;
  padding: var(--tdk-sp-2) var(--tdk-sp-4);
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  transition: color var(--tdk-trans), background var(--tdk-trans);
  text-decoration: none;
}
.social-network-menu ul li a:hover {
  color: var(--tdk-text);
  background: var(--tdk-surface);
}

/* Avatar do perfil */
.profile-picture-box { text-align: center; margin-bottom: var(--tdk-sp-4); }
.profile-picture-box img {
  border: 3px solid var(--tdk-border-hi);
  border-radius: 50%;
  max-width: 120px;
}
.img-thumbnail {
  background: var(--tdk-surface) !important;
  border-color: var(--tdk-border) !important;
}

/* Labels, legend e help-text de QUALQUER formulário nativo .form-horizontal
   (não só o de Perfil — mesmo padrão do FormValidator é usado em praticamente
   toda tela de CRUD administrativa: Criar curso, Criar sessão, Criar usuário
   etc., que nunca tinham recebido nenhum tratamento). O <legend> nativo tem
   borda default do navegador (mostrava uma linha branca sem graça sob o
   título "Criar um curso") — resolvido junto. */
.form-horizontal .control-label {
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-medium);
}
.form-horizontal .help-block {
  color: var(--tdk-text-3);
  font-size: var(--tdk-fs-xs);
}
.form-horizontal fieldset > legend {
  color: var(--tdk-accent);
  border-bottom: 1px solid var(--tdk-border);
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  padding-bottom: var(--tdk-sp-2);
  margin-bottom: var(--tdk-sp-4);
  width: 100%;
}

/* Card ao redor de formulários administrativos nativos (Criar curso, Criar
   sessão, Criar usuário...) — sem isso o form flutuava solto direto no fundo
   escuro da página, sem nenhum agrupamento visual. Escopo restrito a form
   DIRETO dentro de #main_content pra não afetar form-horizontal usados
   dentro de outros widgets já estilizados (ex.: filtro do catálogo). */
#main_content > form.form-horizontal {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-6);
  max-width: 900px;
}

/* Barra de força de senha */
#password_progress .progress { background: var(--tdk-surface); border-radius: var(--tdk-radius-pill); }
#password_progress .progress-bar { background: var(--tdk-accent); border-radius: var(--tdk-radius-pill); }

/* ═══════════════════════════════════════════════════════════════════════
   27 · Gradebook e Certificados
   ═══════════════════════════════════════════════════════════════════════ */

/* Toolbar de ações */
#gradebook-actions .btn-toolbar { gap: var(--tdk-sp-2); }

/* Cards de certificado */
.certificate-container,
.certificate_container {
  background: var(--tdk-bg-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  padding: var(--tdk-sp-5) var(--tdk-sp-6);
  text-align: center;
}
.certificate-container .fa,
.certificate_container .fa {
  font-size: 48px;
  color: var(--tdk-gold);
  display: block;
  margin-bottom: var(--tdk-sp-3);
}
.certificate-container h3,
.certificate_container h3 { color: var(--tdk-text); margin-bottom: var(--tdk-sp-2); }
.certificate-container p,
.certificate_container p  { color: var(--tdk-text-2); }

/* Barra de pontuação */
.gradebook-score .progress,
.result-progress .progress {
  background: var(--tdk-surface);
  border-radius: var(--tdk-radius-pill);
  height: 8px;
}
.gradebook-score .progress-bar,
.result-progress .progress-bar {
  background: var(--tdk-accent);
  border-radius: var(--tdk-radius-pill);
}

/* Texto de % com destaque */
.learnpath-item-score { color: var(--tdk-accent); font-weight: var(--tdk-fw-medium); }

/* ═══════════════════════════════════════════════════════════════════════
   28 · Documentos e Biblioteca (main/document/document.php)
   ═══════════════════════════════════════════════════════════════════════ */

/* Toolbar */
#toolbar-document { margin-bottom: var(--tdk-sp-4); }
#toolbar-document .btn { margin-right: var(--tdk-sp-1); }

/* Botões de modo de visualização (grid/lista) */
.view-options .btn-group > .btn {
  background: var(--tdk-bg-2);
  border-color: var(--tdk-border);
  color: var(--tdk-text-2);
  transition: background var(--tdk-trans), color var(--tdk-trans);
}
.view-options .btn-group > .btn:hover,
.view-options .btn-group > .btn.active {
  background: var(--tdk-surface);
  color: var(--tdk-accent);
  border-color: var(--tdk-border-hi);
}

/* SelectPicker / bootstrap-select — seletor de pasta */
.bootstrap-select > .btn.dropdown-toggle {
  background: var(--tdk-bg-2) !important;
  border-color: var(--tdk-border) !important;
  color: var(--tdk-text) !important;
  box-shadow: none !important;
}
.bootstrap-select > .btn.dropdown-toggle:hover,
.bootstrap-select.open > .btn.dropdown-toggle {
  background: var(--tdk-surface) !important;
  border-color: var(--tdk-border-hi) !important;
}
.bootstrap-select .dropdown-menu {
  background: var(--tdk-surface) !important;
  border-color: var(--tdk-border-hi) !important;
}
.bootstrap-select .dropdown-menu > li > a {
  color: var(--tdk-text-2) !important;
  padding: var(--tdk-sp-2) var(--tdk-sp-4);
  font-size: var(--tdk-fs-sm);
  background: transparent !important;
}
.bootstrap-select .dropdown-menu > li > a:hover,
.bootstrap-select .dropdown-menu > li.selected > a {
  background: var(--tdk-surface-2) !important;
  color: var(--tdk-text) !important;
}

/* Ícone de tipo de documento */
.document-icon-type { width: 22px; text-align: center; color: var(--tdk-accent); }

/* Barra de uso de armazenamento */
.document-size,
.quota-bar-label {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin-top: var(--tdk-sp-2);
}
.quota_bar .progress     { background: var(--tdk-surface); border-radius: var(--tdk-radius-pill); height: 8px; }
.quota_bar .progress-bar { background: var(--tdk-accent);  border-radius: var(--tdk-radius-pill); }

/* Caminho da pasta (breadcrumb de documentos) */
#document-root-path { color: var(--tdk-text-2); font-size: var(--tdk-fs-sm); }
#document-root-path a { color: var(--tdk-accent); }

/* ═══════════════════════════════════════════════════════════════════════
   29 · Mobile bottom tab bar
   ═══════════════════════════════════════════════════════════════════════ */

/* Oculto por padrão em desktop */
.tdk-mobile-nav { display: none; }

@media (max-width: 767px) {
  /* Esconde sidebar — o bottom nav substitui */
  .tdk-sidebar { display: none !important; }

  /* Espaço para não ficar conteúdo embaixo da barra */
  .tdk-main-col { padding-bottom: 68px; }

  /* Barra fixa no rodapé */
  .tdk-mobile-nav {
    display: flex;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 200;
    height: 56px;
    /* Progressive enhancement: inclui safe-area para notch do iPhone */
    height: calc(56px + env(safe-area-inset-bottom, 0px));
    background: var(--tdk-surface);
    border-top: 1px solid var(--tdk-border);
    padding-bottom: env(safe-area-inset-bottom, 0px);
    align-items: stretch;
  }

  .tdk-mobile-nav-item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    color: var(--tdk-text-2);
    text-decoration: none;
    font-size: 10px;
    font-weight: var(--tdk-fw-medium);
    letter-spacing: 0.03em;
    line-height: 1;
    transition: color var(--tdk-trans);
    -webkit-tap-highlight-color: transparent;
    padding: 8px 4px;
  }

  .tdk-mobile-nav-item .fa {
    font-size: 20px;
    line-height: 1;
  }

  .tdk-mobile-nav-item:hover,
  .tdk-mobile-nav-item:active {
    color: var(--tdk-accent);
    text-decoration: none;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   30 · Home Dashboard (plugin unitdk_home_dashboard)
   ═══════════════════════════════════════════════════════════════════════ */

.tdk-home {
  padding: var(--tdk-sp-6) 0 var(--tdk-sp-10);
}

/* Cabeçalho */
.tdk-home-header  { margin-bottom: var(--tdk-sp-5); }
.tdk-home-date {
  font-size: var(--tdk-fs-xs);
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.1em;
  color: var(--tdk-text-3);
  margin: 0 0 var(--tdk-sp-2);
  text-transform: uppercase;
}
.tdk-home-greeting {
  font-size: clamp(24px, 3vw, 36px);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  letter-spacing: -0.02em;
  line-height: 1.15;
  margin: 0;
}
.tdk-home-greeting-sub {
  font-size: var(--tdk-fs-md);
  color: var(--tdk-text-2);
  font-weight: var(--tdk-fw-normal);
  margin: var(--tdk-sp-1) 0 0;
}

/* ── Hero grid ────────────────────────────────────────────────────────── */
.tdk-home-hero {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  gap: var(--tdk-sp-4);
  margin-bottom: var(--tdk-sp-5);
}

/* "Continuar de onde parou" */
.tdk-home-continue {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  display: flex;
  flex-direction: row;
  overflow: hidden;
  min-height: 200px;
}
.tdk-home-continue-thumb {
  width: 160px;
  flex-shrink: 0;
  background: linear-gradient(160deg, #1a2236 0%, #0f1623 100%);
  display: flex;
  align-items: center;
  justify-content: center;
}
.tdk-home-continue-thumb-icon {
  font-size: 40px;
  color: rgba(255,255,255,0.12);
}
.tdk-home-continue-body {
  flex: 1;
  padding: var(--tdk-sp-5) var(--tdk-sp-6);
  display: flex;
  flex-direction: column;
  gap: var(--tdk-sp-2);
}
.tdk-home-continue-label {
  font-size: var(--tdk-fs-xs);
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tdk-accent);
  margin: 0;
}
.tdk-home-continue-session {
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-text-3);
  margin: 0;
}
.tdk-home-continue-course {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0;
  line-height: 1.3;
}
.tdk-home-continue-bar {
  height: 4px;
  background: var(--tdk-surface-3);
  border-radius: var(--tdk-radius-pill);
  overflow: hidden;
  margin-top: var(--tdk-sp-1);
}
.tdk-home-continue-bar-fill {
  height: 100%;
  border-radius: var(--tdk-radius-pill);
  transition: width 0.6s ease;
}
.tdk-home-continue-progress {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: 0;
}
.tdk-home-continue-btn {
  display: inline-flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  margin-top: var(--tdk-sp-2);
  padding: 10px 20px;
  background: var(--tdk-accent);
  color: var(--tdk-on-accent);
  border-radius: var(--tdk-radius);
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-semi);
  text-decoration: none;
  transition: background var(--tdk-trans), transform var(--tdk-trans);
  width: fit-content;
}
.tdk-home-continue-btn:hover {
  background: var(--tdk-accent-hov);
  color: var(--tdk-on-accent);
  text-decoration: none;
  transform: translateY(-1px);
}
.tdk-home-continue-meta {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: 0;
}
.tdk-home-continue-actions {
  display: flex;
  gap: var(--tdk-sp-3);
  align-items: center;
  margin-top: var(--tdk-sp-2);
  flex-wrap: wrap;
}
.tdk-home-continue-btn-sec {
  display: inline-flex;
  align-items: center;
  padding: 10px 20px;
  border: 1px solid var(--tdk-border-hi);
  border-radius: var(--tdk-radius);
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text-2);
  text-decoration: none;
  transition: border-color var(--tdk-trans), color var(--tdk-trans);
}
.tdk-home-continue-btn-sec:hover {
  border-color: var(--tdk-accent);
  color: var(--tdk-text);
  text-decoration: none;
}

/* Cards de stat (horas / fórum) */
.tdk-home-stat {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-5) var(--tdk-sp-5);
  display: flex;
  flex-direction: column;
  gap: var(--tdk-sp-1);
}
.tdk-home-stat-label {
  font-size: var(--tdk-fs-xs);
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--tdk-text-2);
  margin: 0;
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
}
.tdk-home-stat-value {
  font-size: var(--tdk-fs-3xl);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  line-height: 1;
  margin: var(--tdk-sp-2) 0 0;
}
.tdk-home-stat-unit {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text-2);
  margin-left: 2px;
}
.tdk-home-stat-delta {
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-text-3);
  margin: var(--tdk-sp-1) 0 0;
}
.tdk-home-stat-delta--up   { color: var(--tdk-success); }
.tdk-home-stat-delta--down { color: var(--tdk-danger); }

.tdk-home-forum-badge {
  background: var(--tdk-accent-soft);
  color: var(--tdk-accent);
  font-size: 10px;
  padding: 2px 8px;
  border-radius: var(--tdk-radius-pill);
  font-weight: var(--tdk-fw-medium);
}
.tdk-home-forum-link {
  margin-top: auto;
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-accent);
  text-decoration: none;
}
.tdk-home-forum-link:hover { text-decoration: underline; }

/* ── Body grid ────────────────────────────────────────────────────────── */
.tdk-home-body {
  display: grid;
  grid-template-columns: 3fr 2fr;
  gap: var(--tdk-sp-4);
  align-items: start;
}

.tdk-home-section-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: var(--tdk-sp-4);
}
.tdk-home-section-header h3 {
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0;
}
.tdk-home-count       { color: var(--tdk-text-3); font-weight: var(--tdk-fw-normal); }
.tdk-home-count--warn { color: var(--tdk-warn); }
.tdk-home-see-all {
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-accent);
  text-decoration: none;
}
.tdk-home-see-all:hover { text-decoration: underline; }

.tdk-home-empty {
  text-align: center;
  padding: var(--tdk-sp-8) var(--tdk-sp-5);
  color: var(--tdk-text-3);
}
.tdk-home-empty .fa { font-size: 32px; display: block; margin-bottom: var(--tdk-sp-3); }

/* Cards de trilha */
.tdk-home-trilha-card {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  margin-bottom: var(--tdk-sp-3);
  display: flex;
  flex-direction: row;
  overflow: hidden;
  transition: border-color var(--tdk-trans);
}
.tdk-home-trilha-card:hover { border-color: var(--tdk-border-hi); }
.tdk-home-trilha-thumb {
  width: 80px;
  flex-shrink: 0;
  background: linear-gradient(160deg, #1a2236 0%, #0f1623 100%);
}
.tdk-home-trilha-body {
  flex: 1;
  padding: var(--tdk-sp-4) var(--tdk-sp-5);
  min-width: 0;
}
.tdk-home-trilha-top {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  margin-bottom: var(--tdk-sp-2);
}
.tdk-home-trilha-cat {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tdk-accent);
}
.tdk-home-trilha-badge {
  font-size: 10px;
  padding: 2px 8px;
  border-radius: var(--tdk-radius-pill);
  background: var(--tdk-surface-3);
  color: var(--tdk-text-2);
  font-weight: var(--tdk-fw-medium);
}
.tdk-home-trilha-badge--warn {
  background: var(--tdk-warn-soft);
  color: var(--tdk-warn);
}
.tdk-home-trilha-name {
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0 0 var(--tdk-sp-3);
  line-height: 1.3;
}
.tdk-home-trilha-progress-wrap {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-3);
  margin-bottom: var(--tdk-sp-2);
}
.tdk-home-trilha-bar {
  flex: 1;
  height: 5px;
  background: var(--tdk-surface-3);
  border-radius: var(--tdk-radius-pill);
  overflow: hidden;
}
.tdk-home-trilha-bar-fill {
  height: 100%;
  border-radius: var(--tdk-radius-pill);
  transition: width 0.6s ease;
}
.tdk-home-trilha-pct {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-2);
  min-width: 40px;
  text-align: right;
  font-weight: var(--tdk-fw-medium);
}
.tdk-home-trilha-pct-total { color: var(--tdk-text-3); font-weight: var(--tdk-fw-normal); }
.tdk-home-trilha-days {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: 0;
}
.tdk-home-trilha-days strong { color: var(--tdk-warn); font-weight: var(--tdk-fw-medium); }

/* Cards de prazo */
.tdk-home-deadline {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-4);
  padding: var(--tdk-sp-3) var(--tdk-sp-4);
  border-radius: var(--tdk-radius-md);
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  margin-bottom: var(--tdk-sp-3);
  transition: border-color var(--tdk-trans);
}
.tdk-home-deadline:hover { border-color: var(--tdk-border-hi); }
.tdk-home-deadline--warn   { border-color: var(--tdk-warn-soft); }
.tdk-home-deadline--urgent { border-color: var(--tdk-danger-soft); }

.tdk-home-deadline-date {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 44px;
  background: var(--tdk-surface-2);
  border-radius: var(--tdk-radius-sm);
  padding: var(--tdk-sp-1) var(--tdk-sp-2);
}
.tdk-home-deadline--warn   .tdk-home-deadline-date { background: var(--tdk-warn-soft); }
.tdk-home-deadline--urgent .tdk-home-deadline-date { background: var(--tdk-danger-soft); }

.tdk-home-deadline-day {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  line-height: 1.1;
}
.tdk-home-deadline--warn   .tdk-home-deadline-day { color: var(--tdk-warn); }
.tdk-home-deadline--urgent .tdk-home-deadline-day { color: var(--tdk-danger); }

.tdk-home-deadline-mon {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.06em;
  color: var(--tdk-text-3);
  text-transform: uppercase;
}
.tdk-home-deadline-name {
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text);
  margin: 0 0 2px;
}
.tdk-home-deadline-cat {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: 0;
}

/* ── Responsivo ───────────────────────────────────────────────────────── */
@media (max-width: 1100px) {
  .tdk-home-hero { grid-template-columns: 2fr 1fr; }
  .tdk-home-stat--forum { display: none; }
}
@media (max-width: 900px) {
  .tdk-home-continue-thumb { display: none; }
}
@media (max-width: 767px) {
  .tdk-home-hero  { grid-template-columns: 1fr; }
  .tdk-home-body  { grid-template-columns: 1fr; }
  .tdk-home-stat--forum { display: flex; }
}

/* ═══════════════════════════════════════════════════════════════════════
   31 · Sidebar nav items + Active Trail widget
   ═══════════════════════════════════════════════════════════════════════ */

/* Separador entre nav principal e Mensagens/Perfil */
.tdk-nav-sep {
  height: 1px;
  background: var(--tdk-border);
  margin: var(--tdk-sp-3) var(--tdk-sp-4);
}
/* Badge de mensagens não lidas (dado real: _u.messages_count) */
.tdk-nav-badge {
  margin-left: auto;
  background: var(--tdk-accent);
  color: #fff;
  font-size: 10px;
  font-weight: var(--tdk-fw-bold);
  min-width: 16px;
  height: 16px;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
}

/* Span de texto dentro dos nav items (já existiam como texto direto) */
.tdk-nav-item span { pointer-events: none; }

/* Actions agrupadas no footer do usuário */
.tdk-sidebar-user-actions {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-1);
  margin-left: auto;
}

/* ── Widget "Trilha Ativa" ──────────────────────────────────────────── */
/* Card de trilha compacto — vive dentro do .tdk-sidebar-scroll (gap
   próprio), então margin:0. Nome em UMA linha só com ellipsis (feedback
   do usuário: não ocupar espaço demais quando o nome do curso é grande). */
.tdk-active-trail {
  display: block;
  margin: 0;
  padding: 10px var(--tdk-sp-3);
  background: var(--tdk-surface-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  text-decoration: none;
  transition: border-color var(--tdk-trans), background var(--tdk-trans);
}
.tdk-active-trail:hover {
  border-color: var(--tdk-border-hi);
  background: var(--tdk-surface-3);
  text-decoration: none;
}
.tdk-active-trail-label {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tdk-accent);
  margin: 0 0 var(--tdk-sp-1);
}
.tdk-active-trail-name {
  font-size: 13px;
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 4px 0 8px;
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.tdk-active-trail-cat {
  color: var(--tdk-text-3);
  font-weight: var(--tdk-fw-normal);
}
.tdk-active-trail-bar-wrap {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
}
.tdk-active-trail-bar {
  flex: 1;
  height: 4px;
  background: var(--tdk-surface-3);
  border-radius: var(--tdk-radius-pill);
  overflow: hidden;
}
.tdk-active-trail-bar-fill {
  height: 100%;
  border-radius: var(--tdk-radius-pill);
  transition: width 0.6s ease;
}
.tdk-active-trail-stat {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text-2);
  min-width: 28px;
  text-align: right;
}

/* ═══════════════════════════════════════════════════════════════════════
   32 · Header search bar, notification bell, home breadcrumb
   ═══════════════════════════════════════════════════════════════════════ */

/* ── Search form ────────────────────────────────────────────────────── */
.tdk-search-form {
  position: relative;
  display: flex;
  align-items: center;
  width: 100%;
}
.tdk-search-icon {
  position: absolute;
  left: 12px;
  color: var(--tdk-text-3);
  font-size: 13px;
  pointer-events: none;
}
.tdk-search-input {
  width: 100%;
  background: var(--tdk-bg-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius);
  padding: 8px 80px 8px 34px;
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-text);
  transition: border-color var(--tdk-trans), background var(--tdk-trans);
  outline: none;
  font-family: inherit;
}
.tdk-search-input::placeholder { color: var(--tdk-text-3); }
.tdk-search-input:focus {
  border-color: var(--tdk-accent);
  background: var(--tdk-surface);
}
.tdk-search-kbd {
  position: absolute;
  right: 10px;
  font-family: inherit;
  font-size: 10px;
  color: var(--tdk-text-3);
  background: var(--tdk-surface-2);
  border: 1px solid var(--tdk-border);
  border-radius: 4px;
  padding: 2px 6px;
  pointer-events: none;
  white-space: nowrap;
}
.tdk-search-input:focus ~ .tdk-search-kbd { opacity: 0; }

/* ── Notification bell ─────────────────────────────────────────────── */
.tdk-header-notif-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: var(--tdk-radius);
  color: var(--tdk-text-2);
  text-decoration: none;
  transition: background var(--tdk-trans), color var(--tdk-trans);
  font-size: 16px;
  flex-shrink: 0;
}
.tdk-header-notif-btn:hover {
  background: var(--tdk-surface-2);
  color: var(--tdk-text);
  text-decoration: none;
}

/* ── Home breadcrumb ───────────────────────────────────────────────── */
.tdk-home-breadcrumb {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  margin-bottom: var(--tdk-sp-4);
  font-size: var(--tdk-fs-xs);
}
.tdk-home-breadcrumb-root {
  color: var(--tdk-text-3);
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.04em;
}
.tdk-home-breadcrumb-sep {
  color: var(--tdk-text-3);
  opacity: 0.5;
}
.tdk-home-breadcrumb-cur {
  color: var(--tdk-text-2);
  font-weight: var(--tdk-fw-medium);
}

/* Hide search kbd hint on very small screens */
@media (max-width: 480px) {
  .tdk-search-kbd { display: none; }
  .tdk-search-input { padding-right: 12px; }
}

/* ═══════════════════════════════════════════════════════════════════════
   33 · Catálogo de Trilhas (session_catalog.tpl override)
   ═══════════════════════════════════════════════════════════════════════ */

.tdk-catalog-section-label {
  margin: var(--tdk-sp-6) 0 var(--tdk-sp-4);
}
.tdk-catalog-pagination { margin-top: var(--tdk-sp-5); }

/* Grid de trilhas em destaque */
.tdk-trilha-grid {
  /* clear:both defensivo — ver nota em .tdk-course-grid sobre float+grid. */
  clear: both;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--tdk-sp-4);
}

/* Card de trilha */
.tdk-trilha-card {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: border-color var(--tdk-trans), transform var(--tdk-trans);
}
.tdk-trilha-card:hover {
  border-color: var(--tdk-border-hi);
  transform: translateY(-2px);
}

/* Thumbnail com listras diagonais + watermark */
.tdk-trilha-thumb {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 150px;
  text-decoration: none;
  background-color: #131a2a;
  background-image: repeating-linear-gradient(
    -45deg,
    rgba(255, 255, 255, 0.025) 0,
    rgba(255, 255, 255, 0.025) 1px,
    transparent 1px,
    transparent 11px
  );
  overflow: hidden;
}
.tdk-trilha-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.tdk-trilha-thumb-mark {
  font-size: 11px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--tdk-text-3);
  opacity: 0.7;
  text-align: center;
  padding: 0 var(--tdk-sp-4);
}

/* Corpo com a linha accent no topo (igual mockup) */
.tdk-trilha-body {
  flex: 1;
  padding: var(--tdk-sp-4) var(--tdk-sp-5) var(--tdk-sp-5);
  border-top: 2px solid var(--tdk-accent);
  display: flex;
  flex-direction: column;
  gap: var(--tdk-sp-2);
}

.tdk-trilha-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--tdk-sp-2);
  min-height: 16px;
}
.tdk-trilha-cat {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tdk-accent);
}
.tdk-trilha-badge-obrig {
  font-size: 9px;
  font-weight: var(--tdk-fw-semi);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 2px 8px;
  border-radius: var(--tdk-radius-pill);
  background: var(--tdk-warn-soft);
  color: var(--tdk-warn);
  white-space: nowrap;
}

.tdk-trilha-title {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-semi);
  line-height: 1.25;
  margin: 0;
}
.tdk-trilha-title a { color: var(--tdk-text) !important; text-decoration: none; }
.tdk-trilha-title a:hover { color: var(--tdk-accent) !important; }

.tdk-trilha-sub {
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-text-2);
  margin: 0;
}

.tdk-trilha-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--tdk-sp-4);
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin-top: auto;
  padding-top: var(--tdk-sp-2);
}
.tdk-trilha-meta .fa { margin-right: 4px; opacity: 0.8; }

/* Barra de progresso — usada em "Minhas trilhas" (plugin unitdk_my_trails),
   card já matriculado (diferente do catálogo, que só tem CTA de inscrição). */
.tdk-trilha-progress-wrap {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-3);
}
.tdk-trilha-pct {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-2);
  min-width: 40px;
  text-align: right;
  font-weight: var(--tdk-fw-medium);
}
.tdk-trilha-pct-total { color: var(--tdk-text-3); font-weight: var(--tdk-fw-normal); }

.tdk-trilha-actions {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-3);
  margin-top: var(--tdk-sp-3);
  flex-wrap: wrap;
}
.tdk-trilha-actions .btn {
  border-radius: var(--tdk-radius);
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-semi);
}
.tdk-trilha-price { color: var(--tdk-text); font-weight: var(--tdk-fw-semi); }
.tdk-trilha-subscribed { font-size: var(--tdk-fs-xs); color: var(--tdk-success); }
.tdk-trilha-edit {
  margin-left: auto;
  color: var(--tdk-text-3);
  text-decoration: none;
}
.tdk-trilha-edit:hover { color: var(--tdk-accent); }

@media (max-width: 1100px) {
  .tdk-trilha-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 700px) {
  .tdk-trilha-grid { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════════════
   34 · Catálogo — abas (Trilhas/Cursos) + cards de curso avulso
   ═══════════════════════════════════════════════════════════════════════ */

/* Switcher Trilhas / Cursos avulsos */
.tdk-catalog-tabs {
  display: flex;
  gap: var(--tdk-sp-2);
  margin-bottom: var(--tdk-sp-5);
  border-bottom: 1px solid var(--tdk-border);
}
.tdk-catalog-tab {
  display: inline-flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  padding: var(--tdk-sp-3) var(--tdk-sp-4);
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text-2);
  text-decoration: none;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  transition: color var(--tdk-trans), border-color var(--tdk-trans);
}
.tdk-catalog-tab:hover { color: var(--tdk-text); text-decoration: none; }
.tdk-catalog-tab .fa { opacity: 0.8; }
.tdk-catalog-tab.active {
  color: var(--tdk-accent);
  border-bottom-color: var(--tdk-accent);
}

/* Filtro do catálogo de cursos — linha compacta (busca + pills), sem
   caixa/borda pesada, alinhado à estética do mockup (pills soltas na
   página). {{ frm_filter }} é HTML opaco do FormValidator: só temos
   controle via CSS/JS, nunca reescrevemos os campos/URLs nativos. */
.tdk-catalog-filter-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--tdk-sp-3);
  margin-bottom: var(--tdk-sp-5);
}
.tdk-catalog-filter-form .form-horizontal { margin: 0; }
.tdk-catalog-filter-form .control-label { display: none !important; }

/* Os .form-group do FormValidator são filhos de um <fieldset> (não do
   <form> diretamente) — é ele que precisa virar flex container. Sem
   reset, <fieldset> tem min-width:min-content nativo do navegador e
   encolhe para caber só no conteúdo mais largo, quebrando o layout.
   Só sobram 2 .form-group visíveis (busca + botão) — os outros 3
   (categoria/idioma/ordenação) ganham .tdk-hidden-but-functional via JS
   e saem do fluxo (clip), então o flex abaixo só enxerga os 2 reais. */
.tdk-catalog-filter-form fieldset {
  display: flex;
  align-items: center;
  gap: 8px;
  border: 0;
  margin: 0;
  padding: 0;
  min-width: 0;
}
.tdk-catalog-filter-form .form-group {
  margin: 0;
}
.tdk-catalog-filter-form .form-group > [class*="col-"] {
  width: auto !important;
  float: none;
  padding: 0;
}
.tdk-catalog-filter-form .form-control {
  /* !important necessário: existe uma regra global anterior
     (".form-control, input[type=text], ..." — busca no header, formulários
     do site inteiro) com "background: ... !important" que, por ser
     shorthand, zera background-image/position/size mesmo vindo depois no
     cascade. Só um !important de especificidade maior (2 classes vs 1)
     consegue sobrepor outro !important. */
  background: var(--tdk-bg-2)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E")
    no-repeat 11px center / 14px !important;
  border: 1px solid var(--tdk-border) !important;
  border-radius: var(--tdk-radius-pill) !important;
  color: var(--tdk-text) !important;
  width: 260px;
  height: 38px;
  padding: 0 14px 0 34px;
  font-size: var(--tdk-fs-sm);
}
.tdk-catalog-filter-form .form-control:focus {
  border-color: var(--tdk-accent);
  outline: none;
}
.tdk-catalog-filter-form .btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  padding: 0;
  border-radius: 50%;
  background: var(--tdk-surface-2);
  border: 1px solid var(--tdk-border);
  color: var(--tdk-text-2);
  font-size: 0;
}
.tdk-catalog-filter-form .btn .fa,
.tdk-catalog-filter-form .btn em {
  font-size: 14px;
}
.tdk-catalog-filter-form .btn:hover {
  border-color: var(--tdk-accent);
  color: var(--tdk-accent);
}

/* Grid de cursos avulsos */
.tdk-course-grid {
  /* clear:both é essencial aqui: o irmão anterior (.catalog-pagination-top,
     classe Bootstrap col-md-12) usa float:left. Sem isso, o grid (que cria
     um novo contexto de formatação por ser display:grid) é posicionado ao
     lado do float e herda largura 0 — cards ficam com ~1px, invisíveis. */
  clear: both;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--tdk-sp-4);
  margin: 0;
}

/* Card de curso */
.tdk-course-card {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: border-color var(--tdk-trans), transform var(--tdk-trans);
}
.tdk-course-card:hover { border-color: var(--tdk-border-hi); transform: translateY(-2px); }

/* Thumb com listras + watermark ou imagem real */
.tdk-course-thumb {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 120px;
  text-decoration: none;
  background-color: #131a2a;
  background-image: repeating-linear-gradient(
    -45deg,
    rgba(255, 255, 255, 0.025) 0,
    rgba(255, 255, 255, 0.025) 1px,
    transparent 1px,
    transparent 11px
  );
  overflow: hidden;
}
.tdk-course-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tdk-course-thumb-mark {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--tdk-text-3);
  opacity: 0.7;
  text-align: center;
  padding: 0 var(--tdk-sp-3);
}
.tdk-course-badge-novo {
  position: absolute;
  top: 10px;
  left: 10px;
  font-size: 9px;
  font-weight: var(--tdk-fw-bold);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: var(--tdk-radius-pill);
  background: var(--tdk-accent);
  color: var(--tdk-on-accent);
}

.tdk-course-body {
  padding: var(--tdk-sp-4) var(--tdk-sp-5);
  display: flex;
  flex-direction: column;
  gap: 6px;
  flex: 1;
}
.tdk-course-cat {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tdk-accent);
  text-decoration: none;
}
.tdk-course-cat:hover { text-decoration: underline; }
.tdk-course-title {
  font-size: 15px;
  font-weight: var(--tdk-fw-semi);
  line-height: 1.3;
  margin: 0;
}
.tdk-course-title a { color: var(--tdk-text) !important; text-decoration: none; }
.tdk-course-title a:hover { color: var(--tdk-accent) !important; }
.tdk-course-edit { color: var(--tdk-text-3); margin-left: 6px; }
/* course.teacher_info é HTML nativo fixo (.block-author > img +
   .teachers-details h5/p) — restilizamos aqui em vez de reescrever,
   pra manter suporte a múltiplos professores/popover sem perder dado. */
.tdk-course-teacher {
  font-size: 12.5px;
  color: var(--tdk-text-2);
  margin: 0;
}
.tdk-course-teacher .block-author,
.tdk-course-teacher .author-card {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0;
}
.tdk-course-teacher .block-author img,
.tdk-course-teacher .author-card img {
  display: none;
}
.tdk-course-teacher .teachers-details {
  display: block;
}
.tdk-course-teacher .teachers-details h5 {
  margin: 0;
  font-size: 12.5px;
  font-weight: var(--tdk-fw-normal);
}
.tdk-course-teacher .teachers-details h5 a {
  color: var(--tdk-text-2) !important;
  text-decoration: none;
}
.tdk-course-teacher .teachers-details h5 a:hover { color: var(--tdk-accent) !important; }
/* rótulo "Professor" nativo é redundante (posição já indica o papel) */
.tdk-course-teacher .teachers-details p { display: none; }
/* caso >6 professores: botão popover (fa-graduation-cap) */
.tdk-course-teacher .panel_popover {
  padding: 2px 8px;
  font-size: 11px;
  border-radius: var(--tdk-radius-pill);
  background: var(--tdk-surface-2);
  border-color: var(--tdk-border);
  color: var(--tdk-text-2);
}

/* Botões nativos de inscrição (course.subscribe_formatted /
   already_registered_formatted / unregister_formatted) — a Chamilo
   entrega <a class="btn btn-success|primary|danger btn-sm">, só
   restilizamos o visual aqui, sem tocar em href/CSRF/funcionalidade. */
.tdk-course-action {
  margin-top: auto;
  padding-top: var(--tdk-sp-3);
  display: flex;
  gap: var(--tdk-sp-2);
  flex-wrap: wrap;
}
.tdk-course-action .btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 14px;
  border-radius: var(--tdk-radius-pill);
  font-size: 12.5px;
  font-weight: var(--tdk-fw-semi);
  border: 1px solid transparent;
  text-shadow: none;
  box-shadow: none;
}
.tdk-course-action .btn-success {
  background: var(--tdk-accent) !important;
  border-color: var(--tdk-accent) !important;
  color: var(--tdk-on-accent) !important;
}
.tdk-course-action .btn-success:hover { background: var(--tdk-accent-hov) !important; }
.tdk-course-action .btn-primary {
  background: transparent !important;
  border-color: var(--tdk-border-hi) !important;
  color: var(--tdk-text) !important;
}
.tdk-course-action .btn-primary:hover { border-color: var(--tdk-accent) !important; color: var(--tdk-accent) !important; }
.tdk-course-action .btn-danger {
  background: transparent !important;
  border-color: var(--tdk-danger-soft) !important;
  color: var(--tdk-danger) !important;
}
.tdk-course-action .btn-danger:hover { border-color: var(--tdk-danger) !important; }

@media (max-width: 1100px) {
  .tdk-course-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 767px) {
  .tdk-course-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 480px) {
  .tdk-course-grid { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════════════
   35 · Página "Sobre o curso" (course_home/about.tpl override)
   ═══════════════════════════════════════════════════════════════════════ */

.tdk-course-about { padding: var(--tdk-sp-6) 0 var(--tdk-sp-10); }

.tdk-home-breadcrumb-link {
  color: var(--tdk-text-3);
  text-decoration: none;
}
.tdk-home-breadcrumb-link:hover { color: var(--tdk-accent); text-decoration: none; }

/* ── Hero ─────────────────────────────────────────────────────────── */
.tdk-course-about-hero {
  display: grid;
  grid-template-columns: 1.6fr 1fr;
  gap: var(--tdk-sp-6);
  align-items: start;
  margin-bottom: var(--tdk-sp-6);
}
.tdk-course-about-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: var(--tdk-sp-2);
}
.tdk-course-about-title {
  font-size: clamp(24px, 3vw, 34px);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  letter-spacing: -0.02em;
  line-height: 1.15;
  margin: 0 0 var(--tdk-sp-2);
}
.tdk-course-about-teachers {
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-text-2);
  margin: 0 0 var(--tdk-sp-4);
}
.tdk-course-about-teachers .fa { margin-right: 6px; opacity: 0.7; }
.tdk-course-about-actions { margin-top: var(--tdk-sp-2); }
.tdk-course-about-price {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-3);
}
.tdk-course-about-price strong { font-size: var(--tdk-fs-xl); color: var(--tdk-text); }

.tdk-course-about-cover {
  aspect-ratio: 16 / 10;
  border-radius: var(--tdk-radius-lg);
  border: 1px solid var(--tdk-border);
  background-color: #131a2a;
  background-image: repeating-linear-gradient(
    -45deg,
    rgba(255, 255, 255, 0.025) 0,
    rgba(255, 255, 255, 0.025) 1px,
    transparent 1px,
    transparent 11px
  );
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.tdk-course-about-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tdk-course-about-cover .tdk-course-thumb-mark { font-size: 11px; padding: 0 var(--tdk-sp-5); text-align: center; }

/* ── Corpo: conteúdo + sidebar ───────────────────────────────────────── */
.tdk-course-about-body {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: var(--tdk-sp-5);
  align-items: start;
}
.tdk-course-about-section {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-6);
}
.tdk-course-about-section h3 {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0 0 var(--tdk-sp-4);
}
.tdk-course-about-desc {
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  line-height: 1.7;
}
/* course.description e topic.content vêm do editor WYSIWYG nativo (rich
   text) — podem trazer cor de texto inline (ex.: preto), pensada pra fundo
   claro. Neutraliza qualquer cor/fundo customizados nos filhos, sem
   perder negrito/itálico/listas, e trava imagens embutidas na largura. */
.tdk-course-about-desc *,
.tdk-course-about-topic > div * {
  color: inherit !important;
  background: transparent !important;
}
.tdk-course-about-desc img,
.tdk-course-about-topic > div img {
  max-width: 100%;
  height: auto;
}
.tdk-course-about-desc a,
.tdk-course-about-topic > div a {
  color: var(--tdk-accent) !important;
}
.tdk-course-about-topic { margin-top: var(--tdk-sp-5); }
.tdk-course-about-topic h4 {
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0 0 var(--tdk-sp-2);
}
.tdk-course-about-topic h4 .fa { color: var(--tdk-accent); margin-right: 6px; }
.tdk-course-about-topic > div {
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  line-height: 1.7;
}

.tdk-course-about-side {
  display: flex;
  flex-direction: column;
  gap: var(--tdk-sp-4);
}
.tdk-course-about-card {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-5);
}
.tdk-course-about-card h3 {
  font-size: 11px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--tdk-text-2);
  margin: 0 0 var(--tdk-sp-4);
}
.tdk-course-about-seqname {
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text);
  margin: var(--tdk-sp-3) 0 var(--tdk-sp-2);
}
.tdk-course-about-reqlist { list-style: none; margin: 0; padding: 0; }
.tdk-course-about-reqlist li {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 0;
  font-size: var(--tdk-fs-sm);
}
.tdk-course-about-reqlist .fa { color: var(--tdk-success); font-size: 12px; }
.tdk-course-about-reqlist a { color: var(--tdk-text-2); text-decoration: none; }
.tdk-course-about-reqlist a:hover { color: var(--tdk-accent); }

.tdk-course-about-teacher {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-3);
  padding: var(--tdk-sp-3) 0;
  border-top: 1px solid var(--tdk-border);
}
.tdk-course-about-teacher:first-of-type { border-top: none; padding-top: 0; }
.tdk-course-about-teacher-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid var(--tdk-border);
  flex-shrink: 0;
}
.tdk-course-about-teacher-name {
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text);
  margin: 0;
}
.tdk-course-about-teacher-role {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: 2px 0 0;
}

@media (max-width: 991px) {
  .tdk-course-about-hero { grid-template-columns: 1fr; }
  .tdk-course-about-cover { order: -1; aspect-ratio: 16/8; }
  .tdk-course-about-body { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════════════
   36 · Calendário / Agenda (main/calendar/agenda_js.php, FullCalendar 3.x)
   ═══════════════════════════════════════════════════════════════════════
   agenda/month.tpl (override) reaproveita o <script> nativo INTOCADO
   (~1150 linhas configurando FullCalendar + diálogos de criar/editar
   evento, convites, inscrições, lembretes — reescrever isso seria alto
   risco pra pouco ganho) e só adiciona HTML ao redor: cabeçalho,
   layout com sidebar (card "Hoje" + legenda), botão "+ Evento" (reusa o
   href do link nativo). Um <script> novo, separado do nativo, popula o
   card "Hoje" e a contagem lendo fullCalendar('clientEvents') — sem
   query extra, mesmo dado que já aparece no grid.

   LIMITAÇÃO CONHECIDA (não é bug meu, não vou tocar core): a view
   "Lista agenda" (.fc-list-item-title) tem um bug de concatenação no JS
   nativo (falta operador entre linhas em fgSegHtml, no próprio .tpl) que
   deixa o <a> do título vazio. Mês/Semana/Dia funcionam normalmente.
   ═══════════════════════════════════════════════════════════════════════ */

.tdk-agenda-header { margin: var(--tdk-sp-2) 0 var(--tdk-sp-5); }
#tdk-agenda-count { color: var(--tdk-text-3); font-weight: var(--tdk-fw-normal); }

/* Toolbar wrap: barra de ícones nativa (discreta) + botão "+ Evento" (CTA) */
#tdk-agenda-toolbar-wrap {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--tdk-sp-3);
  margin-bottom: var(--tdk-sp-4);
}
#tdk-agenda-add-btn { margin: 0; flex-shrink: 0; }

/* Barra de ícones de navegação (Agenda global/Minha agenda/Novo evento/
   Importar) — #toolbar-agenda.actions > .row > .col-sm-6:first-child > a > img.
   FIX: o seletor genérico "#toolbar-agenda a" (sem escopo) também batia nos
   <a> internos do dropdown bootstrap-select (.col-sm-6.text-right, filtro de
   sessão) — forçava esses itens do menu pra 34x34px, cortando o texto das
   opções ("Por favor selecione uma opção" virava ilegível). Agora escopado
   só à 1ª coluna (ícones), que não tem bootstrap-select dentro. */
#toolbar-agenda.actions {
  padding: var(--tdk-sp-3) var(--tdk-sp-4);
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  margin-bottom: var(--tdk-sp-4);
}
#toolbar-agenda > .row > .col-sm-6:first-child a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: var(--tdk-radius-sm);
  transition: background var(--tdk-trans);
}
#toolbar-agenda > .row > .col-sm-6:first-child a:hover { background: var(--tdk-surface-2); }
#toolbar-agenda > .row > .col-sm-6:first-child a img { opacity: 0.85; }

/* Coluna direita (filtro de sessão + botão Reiniciar) — o bootstrap-select
   por padrão usa width:auto ajustado ao texto da opção mais longa (~420px),
   o que sobrava só ~2px pra "Reiniciar" na mesma coluna e o empurrava pra
   uma 2ª linha, desalinhado. Limita a largura do dropdown pra caber os dois
   lado a lado, como o .form-inline nativo já pretendia. */
#toolbar-agenda .col-sm-6.text-right { display: flex; align-items: center; justify-content: flex-end; gap: var(--tdk-sp-2); flex-wrap: wrap; }
#toolbar-agenda .col-sm-6.text-right .bootstrap-select { max-width: 260px; }
#toolbar-agenda .col-sm-6.text-right .form-group { margin: 0; }

/* Toolbar do FullCalendar (Hoje/‹/›, título do período, Mês/Semana/Dia/Lista) */
.fc-toolbar { margin-bottom: var(--tdk-sp-4) !important; }
.fc-toolbar h2 {
  font-size: var(--tdk-fs-2xl) !important;
  font-weight: var(--tdk-fw-bold) !important;
  color: var(--tdk-text) !important;
}
.fc-button-group { border-radius: var(--tdk-radius) !important; overflow: hidden; }
.fc-button.fc-state-default {
  background: var(--tdk-surface) !important;
  background-image: none !important;
  border-color: var(--tdk-border) !important;
  color: var(--tdk-text-2) !important;
  box-shadow: none !important;
  text-shadow: none !important;
  height: auto;
  padding: 7px 14px !important;
}
.fc-button.fc-state-default:hover {
  background: var(--tdk-surface-2) !important;
  color: var(--tdk-text) !important;
}
.fc-button.fc-state-active,
.fc-button.fc-state-active:hover {
  background: var(--tdk-accent) !important;
  border-color: var(--tdk-accent) !important;
  color: var(--tdk-on-accent) !important;
}
.fc-state-disabled { opacity: 0.4 !important; }

/* Grid do mês/semana/dia */
.fc-widget-header { background: var(--tdk-surface) !important; border-color: var(--tdk-border) !important; }
.fc-widget-content { background: var(--tdk-bg) !important; border-color: var(--tdk-border) !important; }
.fc-day-header {
  color: var(--tdk-text-2) !important;
  font-weight: var(--tdk-fw-medium) !important;
  padding: var(--tdk-sp-2) 0 !important;
}
.fc-day-number {
  color: var(--tdk-text-2) !important;
  font-size: var(--tdk-fs-sm);
  padding: 6px !important;
}
.fc-other-month .fc-day-number { color: var(--tdk-text-3) !important; opacity: 0.5; }
.fc-today { background: rgba(99,102,241,0.08) !important; }
.fc-today .fc-day-number {
  color: var(--tdk-on-accent) !important;
  background: var(--tdk-accent);
  border-radius: 50%;
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0 !important;
}

/* Eventos */
.fc-event {
  border: none !important;
  border-radius: var(--tdk-radius-sm) !important;
  padding: 2px 6px !important;
  font-size: 11px !important;
}
.fc-event .fc-title { font-weight: var(--tdk-fw-medium); }
.fc-time-grid .fc-slats td { border-color: var(--tdk-border) !important; }
.fc-axis { color: var(--tdk-text-3) !important; font-size: 11px; }

/* ── Layout com sidebar (calendário + painel "Hoje"/legenda) ─────────── */
.tdk-agenda-shell {
  display: grid;
  grid-template-columns: 1fr 300px;
  gap: var(--tdk-sp-4);
  align-items: start;
}
.tdk-agenda-main { min-width: 0; }
.tdk-agenda-sidebar {
  display: flex;
  flex-direction: column;
  gap: var(--tdk-sp-4);
}

.tdk-agenda-today-card,
.tdk-agenda-legend-card {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-5);
}
.tdk-agenda-today-card #tdk-agenda-today-date,
.tdk-agenda-today-card > p {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tdk-accent);
  margin: 0 0 4px;
}
.tdk-agenda-today-card h3 {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0 0 var(--tdk-sp-4);
}
.tdk-agenda-today-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--tdk-sp-2) 0 var(--tdk-sp-2) var(--tdk-sp-3);
  border-left: 3px solid var(--tdk-accent);
  margin-bottom: var(--tdk-sp-3);
}
.tdk-agenda-today-item:last-child { margin-bottom: 0; }
.tdk-agenda-today-item-title {
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text);
}
.tdk-agenda-today-item-time {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
}

.tdk-agenda-legend-card h3 {
  font-size: 11px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--tdk-text-2);
  margin: 0 0 var(--tdk-sp-4);
}
.tdk-agenda-legend-row {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-text-2);
  padding: 5px 0;
}
.tdk-agenda-legend-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
}

@media (max-width: 991px) {
  .tdk-agenda-shell { grid-template-columns: 1fr; }
  .tdk-agenda-sidebar { order: -1; }
}

/* ═══════════════════════════════════════════════════════════════════════
   37 · Notas e Progresso (plugin unitdk_my_grades)
   ═══════════════════════════════════════════════════════════════════════ */

.tdk-grades-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--tdk-sp-4);
  flex-wrap: wrap;
}

.tdk-grades-kpis {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--tdk-sp-4);
  margin: var(--tdk-sp-5) 0 var(--tdk-sp-6);
}
.tdk-grades-kpi {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-5);
}
.tdk-grades-kpi-label {
  font-size: 10px;
  font-weight: var(--tdk-fw-medium);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--tdk-text-3);
  margin: 0 0 var(--tdk-sp-2);
}
.tdk-grades-kpi-value {
  font-size: var(--tdk-fs-3xl);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  line-height: 1;
  margin: 0;
}
.tdk-grades-kpi-unit {
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-medium);
  color: var(--tdk-text-2);
  margin-left: 4px;
}
.tdk-grades-kpi-sub {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: var(--tdk-sp-1) 0 0;
}
.tdk-grades-kpi-empty { color: var(--tdk-text-3); }

.tdk-grades-section {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-5) var(--tdk-sp-6);
}

.tdk-grades-row {
  display: grid;
  grid-template-columns: 2fr 100px 160px 90px 110px;
  align-items: center;
  gap: var(--tdk-sp-4);
  padding: var(--tdk-sp-4) 0;
  border-top: 1px solid var(--tdk-border);
}
.tdk-grades-row:first-of-type { border-top: none; }
.tdk-grades-row-name {
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 4px 0 0;
}
.tdk-grades-row-modules,
.tdk-grades-row-progress,
.tdk-grades-row-score { text-align: left; }
.tdk-grades-row-modules p:last-child,
.tdk-grades-row-score-value {
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 2px 0 0;
}
.tdk-grades-row-score-value { color: var(--tdk-success); }
.tdk-grades-row-status { justify-self: end; }

@media (max-width: 991px) {
  .tdk-grades-kpis { grid-template-columns: repeat(2, 1fr); }
  .tdk-grades-row {
    grid-template-columns: 1fr 1fr;
    grid-template-areas:
      "info info"
      "modules progress"
      "score status";
  }
  .tdk-grades-row-info { grid-area: info; }
  .tdk-grades-row-modules { grid-area: modules; }
  .tdk-grades-row-progress { grid-area: progress; }
  .tdk-grades-row-score { grid-area: score; }
  .tdk-grades-row-status { grid-area: status; justify-self: start; }
}
@media (max-width: 575px) {
  .tdk-grades-kpis { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════════════
   38 · Fórum — listagem (plugin unitdk_forum_view, handoff 07-forum.jpg)
   ═══════════════════════════════════════════════════════════════════════ */

.tdk-forum-shell {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: var(--tdk-sp-4);
  align-items: start;
}

.tdk-forum-sidebar {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-4);
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.tdk-forum-sidebar > .tdk-mono-label { margin: 0 0 var(--tdk-sp-2) var(--tdk-sp-2); }
.tdk-forum-channel {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--tdk-sp-2);
  padding: 8px var(--tdk-sp-3);
  border-radius: var(--tdk-radius-sm);
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  text-decoration: none;
  transition: background var(--tdk-trans), color var(--tdk-trans);
}
.tdk-forum-channel:hover { background: var(--tdk-surface-2); color: var(--tdk-text); text-decoration: none; }
.tdk-forum-channel.active {
  background: var(--tdk-accent-soft, rgba(90,181,255,0.12));
  color: var(--tdk-accent);
  font-weight: var(--tdk-fw-medium);
}
.tdk-forum-channel .tdk-home-count { color: inherit; opacity: 0.7; font-size: var(--tdk-fs-xs); }

.tdk-forum-filters-label { margin-top: var(--tdk-sp-4) !important; }
.tdk-forum-filter {
  display: block;
  padding: 6px var(--tdk-sp-3);
  border-radius: var(--tdk-radius-sm);
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  text-decoration: none;
  transition: background var(--tdk-trans), color var(--tdk-trans);
}
.tdk-forum-filter:hover { background: var(--tdk-surface-2); color: var(--tdk-text); text-decoration: none; }
.tdk-forum-filter.active {
  background: var(--tdk-accent-soft, rgba(90,181,255,0.12));
  color: var(--tdk-accent);
  font-weight: var(--tdk-fw-medium);
}

.tdk-forum-header-actions {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-3);
}
.tdk-forum-pending-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  border-radius: var(--tdk-radius);
  background: var(--tdk-warn-soft);
  color: var(--tdk-warn);
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-medium);
  text-decoration: none;
  white-space: nowrap;
}
.tdk-forum-pending-badge:hover { opacity: 0.85; text-decoration: none; color: var(--tdk-warn); }

.tdk-forum-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--tdk-sp-3);
  padding: var(--tdk-sp-4) var(--tdk-sp-5);
  border-bottom: 1px solid var(--tdk-border);
}
.tdk-forum-search {
  flex: 1;
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  background: var(--tdk-surface-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius);
  padding: 8px var(--tdk-sp-3);
  color: var(--tdk-text-3);
}
.tdk-forum-search input {
  flex: 1;
  background: none;
  border: none;
  outline: none;
  color: var(--tdk-text);
  font-size: var(--tdk-fs-sm);
}
.tdk-forum-search input::placeholder { color: var(--tdk-text-3); }
.tdk-forum-sort {
  flex-shrink: 0;
  font-size: var(--tdk-fs-sm);
  color: var(--tdk-text-3);
  display: flex;
  align-items: center;
  gap: 6px;
}
.tdk-forum-sort select {
  background: var(--tdk-surface-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-sm);
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  padding: 4px 8px;
}

.tdk-forum-main {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  overflow: hidden;
}

.tdk-forum-thread-row {
  display: flex;
  align-items: flex-start;
  gap: var(--tdk-sp-3);
  padding: var(--tdk-sp-4) var(--tdk-sp-5);
  border-bottom: 1px solid var(--tdk-border);
  text-decoration: none;
  transition: background var(--tdk-trans);
}
.tdk-forum-thread-row:last-child { border-bottom: none; }
.tdk-forum-thread-row:hover { background: var(--tdk-surface-2); text-decoration: none; }

.tdk-forum-avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--tdk-surface-3);
  color: #0B0D10;
  font-size: 12px;
  font-weight: var(--tdk-fw-bold);
}

.tdk-forum-thread-body { flex: 1; min-width: 0; }
.tdk-forum-thread-top {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  margin-bottom: 4px;
}
.tdk-forum-badge {
  font-size: 10px;
  font-weight: var(--tdk-fw-semi);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 2px 8px;
  border-radius: var(--tdk-radius-pill);
}
.tdk-forum-badge--fixado { background: var(--tdk-surface-3); color: var(--tdk-text-2); }
.tdk-forum-badge--ativo { background: var(--tdk-warn-soft); color: var(--tdk-warn); }
.tdk-forum-badge--resolvido { background: rgba(111,227,192,0.14); color: var(--tdk-success); }
.tdk-forum-badge--fechado { background: var(--tdk-surface-3); color: var(--tdk-text-3); }
.tdk-forum-channel-tag {
  font-size: 11px;
  color: var(--tdk-accent);
  font-weight: var(--tdk-fw-medium);
}
.tdk-forum-attach-tag {
  font-size: 11px;
  color: var(--tdk-text-3);
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.tdk-forum-attach-tag .fa { font-size: 10px; }
.tdk-forum-thread-title {
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0 0 4px;
}
.tdk-forum-thread-meta {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: 0;
}
.tdk-forum-thread-meta .fa { margin-right: 3px; }

.tdk-forum-thread-replies {
  flex-shrink: 0;
  text-align: right;
  min-width: 60px;
}
.tdk-forum-thread-replies strong {
  display: block;
  font-size: var(--tdk-fs-lg);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  line-height: 1.2;
}
.tdk-forum-thread-replies span {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--tdk-text-3);
}

@media (max-width: 767px) {
  .tdk-forum-shell { grid-template-columns: 1fr; }
  .tdk-forum-sidebar { flex-direction: row; flex-wrap: wrap; }
  .tdk-forum-header-actions { flex-wrap: wrap; width: 100%; }
  .tdk-forum-toolbar { flex-direction: column; align-items: stretch; }
  .tdk-forum-sort { justify-content: space-between; }
}

/* ═══════════════════════════════════════════════════════════════════════
   39 · Fórum — thread (override main/template/unitdk/forum/posts.tpl, handoff 07b-forum-thread.jpg)
   ═══════════════════════════════════════════════════════════════════════ */

.tdk-thread {
  background: var(--tdk-surface);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-lg);
  padding: var(--tdk-sp-5);
}

.tdk-thread-header {
  padding-bottom: var(--tdk-sp-4);
  margin-bottom: var(--tdk-sp-4);
  border-bottom: 1px solid var(--tdk-border);
}
.tdk-thread-header-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--tdk-sp-3);
  flex-wrap: wrap;
  margin-bottom: 6px;
}
.tdk-thread-meta-row {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-3);
  color: var(--tdk-text-3);
  font-size: var(--tdk-fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  margin: 0;
}
.tdk-thread-meta-row .fa { margin-right: 3px; }
.tdk-thread-title {
  font-size: var(--tdk-fs-xl);
  font-weight: var(--tdk-fw-bold);
  color: var(--tdk-text);
  margin: 0;
  line-height: 1.3;
}

.tdk-thread-header-actions {
  display: flex;
  align-items: center;
  gap: var(--tdk-sp-2);
  flex-shrink: 0;
}
.tdk-thread-follow-btn,
.tdk-thread-share-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: var(--tdk-radius-sm);
  border: 1px solid var(--tdk-border);
  background: var(--tdk-surface-2);
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-xs);
  font-family: inherit;
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
}
.tdk-thread-follow-btn:hover,
.tdk-thread-share-btn:hover { background: var(--tdk-surface-3); color: var(--tdk-text); text-decoration: none; }
.tdk-thread-follow-btn--active {
  background: var(--tdk-accent-soft, rgba(90,181,255,0.12));
  border-color: var(--tdk-accent);
  color: var(--tdk-accent);
}

.tdk-thread-op-badge {
  display: inline-block;
  margin-top: 4px;
  padding: 1px 6px;
  border-radius: var(--tdk-radius-sm);
  background: var(--tdk-accent-soft, rgba(90,181,255,0.12));
  color: var(--tdk-accent);
  font-size: 9px;
  font-weight: var(--tdk-fw-bold);
  letter-spacing: 0.04em;
}

/* forum_actions (nativo): busca/voltar/alternar árvore-lista — ícones PNG
   legados do Chamilo (ver docs/ICONES-LEGADOS-A-REVISAR.md), mesmo filtro
   de invert usado no admin (Seção 24) + botão-container pra não flutuarem
   soltos no fundo escuro. */
.tdk-thread-actions-bar {
  margin-bottom: var(--tdk-sp-4);
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 4px;
}
.tdk-thread-actions-bar a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: var(--tdk-radius-sm);
  transition: background var(--tdk-trans);
}
.tdk-thread-actions-bar a:hover { background: var(--tdk-surface-2); }
.tdk-thread-actions-bar img {
  width: 16px;
  height: 16px;
  filter: invert(0.6);
  opacity: 0.8;
}
.tdk-thread-actions-bar a:hover img { opacity: 1; }

.tdk-thread-post {
  display: flex;
  gap: var(--tdk-sp-4);
  padding: var(--tdk-sp-4) 0;
  border-bottom: 1px solid var(--tdk-border);
}
.tdk-thread-post:last-of-type { border-bottom: none; }
.tdk-thread-post--current { background: var(--tdk-danger-soft, rgba(255,107,107,0.08)); border-radius: var(--tdk-radius-md); padding-left: var(--tdk-sp-3); padding-right: var(--tdk-sp-3); }
.tdk-thread-post--revision .tdk-thread-post-text { border-left: 2px solid var(--tdk-warn); padding-left: var(--tdk-sp-3); }
.tdk-thread-post--root { padding-top: 0; }

/* post.user_data (nativo): .thumbnail img, h4.title-username, .user-type, p.post-date */
.tdk-thread-post-author {
  flex-shrink: 0;
  width: 120px;
  text-align: center;
}
.tdk-thread-post-author .thumbnail { margin: 0 auto var(--tdk-sp-2); width: 48px; }
.tdk-thread-post-author .thumbnail img {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  object-fit: cover;
}
.tdk-thread-post-author .title-username {
  font-size: var(--tdk-fs-sm);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0 0 2px;
}
.tdk-thread-post-author .title-username a { color: inherit; text-decoration: none; }
.tdk-thread-post-author .user-type { margin-bottom: 4px; }
.tdk-thread-post-author .post-date {
  font-size: var(--tdk-fs-xs);
  color: var(--tdk-text-3);
  margin: 0;
}
/* .tools-icons (editar/excluir/marcar): ícones PNG legados do Chamilo
   (ver docs/ICONES-LEGADOS-A-REVISAR.md) — mesmo filtro já usado nos
   ícones do admin (Seção 24) pra não destoarem do dark mode. */
.tdk-thread-post-author .tools-icons {
  display: flex;
  justify-content: center;
  gap: 8px;
  margin-top: 6px;
}
.tdk-thread-post-author .tools-icons img {
  width: 14px;
  height: 14px;
  filter: invert(0.6);
  opacity: 0.7;
  transition: opacity var(--tdk-trans);
}
.tdk-thread-post-author .tools-icons a:hover img { opacity: 1; }

.tdk-thread-post-body { flex: 1; min-width: 0; }

/* post.post_title (nativo): <a name> + div.post-header > h3.forum_post_title */
.tdk-thread-post-body .post-header { margin: 0 0 var(--tdk-sp-2); }
.tdk-thread-post-body .forum_post_title {
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0;
}
.tdk-thread-post-title {
  font-size: var(--tdk-fs-md);
  font-weight: var(--tdk-fw-semi);
  color: var(--tdk-text);
  margin: 0 0 var(--tdk-sp-2);
}

/* post.post_data vem do editor WYSIWYG nativo — neutraliza cor/fundo
   inline pensados pra fundo claro, sem perder negrito/itálico/listas
   (mesmo padrão de .tdk-course-about-desc). */
.tdk-thread-post-text {
  color: var(--tdk-text-2);
  font-size: var(--tdk-fs-sm);
  line-height: 1.7;
}
.tdk-thread-post-text * {
  color: inherit !important;
  background: transparent !important;
}
.tdk-thread-post-text img { max-width: 100%; height: auto; }
.tdk-thread-post-text a { color: var(--tdk-accent) !important; }
.tdk-thread-post-text p:last-child { margin-bottom: 0; }

/* post.post_attachments — REQUER patch mínimo de core (documentado no
   README, seção "Patches de core"): getAllAttachment() passa a selecionar
   `size`, e viewthread.php envolve cada anexo num <span class="tdk-attach-
   item"> (antes era uma string flat só com ícone.gif+link+comentário,
   sem como separar anexos individualmente nem mostrar tamanho). Aqui:
   card por anexo com clipe via ::before (ícone .gif legado escondido). */
.tdk-thread-post-attachments {
  margin-top: var(--tdk-sp-3);
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.tdk-attach-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 12px;
  background: var(--tdk-surface-2);
  border: 1px solid var(--tdk-border);
  border-radius: var(--tdk-radius-md);
  font-size: var(--tdk-fs-sm);
}
.tdk-attach-item img { display: none; }
.tdk-attach-item::before {
  content: "\f0c6";
  font-family: FontAwesome;
  color: var(--tdk-accent);
  font-size: 14px;
}
.tdk-attach-item a {
  color: var(--tdk-text);
  font-weight: var(--tdk-fw-medium);
  text-decoration: underline;
  text-decoration-color: var(--tdk-border);
}
.tdk-attach-item a:hover { color: var(--tdk-accent); }
.tdk-attach-size {
  color: var(--tdk-text-3);
  font-size: var(--tdk-fs-xs);
  white-space: nowrap;
}
.tdk-attach-size::before { content: "· "; }
.tdk-attach-item .forum_attach_comment {
  color: var(--tdk-text-3);
  font-size: var(--tdk-fs-xs);
}

/* post.post_buttons (nativo): toolbarButton() gera <a class="btn btn-default/
   btn-primary/btn-success"> — mantém as cores já padronizadas globalmente
   pro tema (cinza/azul/verde = ações secundária/primária/confirmação em
   todo o app), só ajusta tamanho pra caber no layout compacto do post. */
.tdk-thread-post-buttons {
  margin-top: var(--tdk-sp-3);
  display: flex;
  justify-content: flex-end;
  gap: var(--tdk-sp-2);
}
.tdk-thread-post-buttons .btn {
  font-size: var(--tdk-fs-xs);
  padding: 4px 10px;
}

.tdk-thread-reply-form {
  margin-top: var(--tdk-sp-5);
  padding-top: var(--tdk-sp-5);
  border-top: 1px solid var(--tdk-border);
}

@media (max-width: 767px) {
  .tdk-thread-post { flex-direction: column; gap: var(--tdk-sp-2); }
  .tdk-thread-post-author { width: auto; text-align: left; display: flex; align-items: center; gap: var(--tdk-sp-2); }
  .tdk-thread-post-author .thumbnail { margin: 0; }
  .tdk-thread-post-author .post-date { display: none; }
  .tdk-thread-header-top { flex-direction: column; align-items: flex-start; }
  .tdk-thread-header-actions { width: 100%; }
  .tdk-thread-follow-btn, .tdk-thread-share-btn { flex: 1; justify-content: center; }
}
