/* Overrides do Grade Horária sobre o tema uBold — convenção do próprio tema
   (não editar app.min.css diretamente). As regras da grade semanal (gh-*)
   serão portadas para cá na Etapa 2. */

/* Choices.js (select múltiplo de Títulos em professores.php): o tema deixa
   min-height:auto, então a caixa fica fina quando tem poucos/nenhum item
   selecionado. Fixamos a mesma altura padrão do .form-control do Bootstrap
   para não "pular" de tamanho e ficar consistente com os outros campos. */
.choices__inner {
  min-height: calc(1.5em + 0.75rem + 2px);
}

/* Marca (logo + texto) no topo da barra lateral, dentro da estrutura
   .logo/.logo-lg/.logo-sm do tema (ele alterna a exibição dos dois sozinho
   conforme o estado da sidenav — ver comentário mais abaixo). */
.sidenav-menu .logo {
  padding: 0; /* o padding de verdade vem do .gh-brand-link, pra nao dobrar */
}
/* especificidade alta de propósito: o tema define ".logo span.logo-lg{display:
   block}" (2 classes + 1 elemento) — precisa ganhar dessa regra pra não
   voltar a empilhar a imagem e o texto em vez de ficarem lado a lado */
.sidenav-menu .logo .gh-brand-link {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  height: var(--theme-topbar-height, 70px);
  padding: 0 1rem;
  text-decoration: none;
  color: inherit;
}
/* especificidade alta de propósito: o tema define ".logo-lg img{height:
   var(--theme-logo-lg-height)}" (1 classe + 1 elemento) — sem isso, só a
   altura da imagem era sobrescrita (a largura ficava com o valor daqui),
   esmagando a proporção quadrada original do arquivo */
.sidenav-menu .logo .gh-brand-logo-lg {
  width: 34px;
  height: 34px;
  border-radius: 8px;
  flex-shrink: 0;
  object-fit: contain;
}
.gh-brand-texto {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
  overflow: hidden;
}
.gh-brand-titulo {
  font-weight: 600;
  color: #fff;
  white-space: nowrap;
}
.gh-brand-subtitulo {
  font-size: 0.7rem;
  font-weight: 400;
  color: rgba(255, 255, 255, 0.6);
  white-space: nowrap;
}

/* Logo mostrada quando a sidenav está retraída (modo condensed, ícone-only) —
   o tema alterna span.logo-lg/span.logo-sm dentro de .logo sozinho via CSS
   ([data-sidenav-size=condensed] .sidenav-menu .logo span.logo-sm{display:block},
   escondido por padrão nos outros modos). Não mexemos no display de .logo-sm
   (é do tema) — só estilizamos a imagem; a centralização vem do .logo do
   próprio tema (text-align:center + line-height:var(--theme-topbar-height)). */
.sidenav-menu .logo .gh-brand-logo-sm {
  width: 34px;
  height: 34px;
  border-radius: 8px;
  vertical-align: middle;
  object-fit: contain;
}

/* ===== Etapa 2: grade semanal — portado de assets/css/app.css (tema antigo).
   O motor de renderização (includes/grade_html.php) continua gerando
   exatamente as mesmas classes gh-*. Cores trocadas para as variáveis CSS do
   próprio tema uBold (prefixo --theme-, não o --bs- padrão do Bootstrap —
   este tema customiza $variable-prefix), que já mudam sozinhas com o tema
   claro/escuro. ===== */

/* Cards de estatística (dashboard) — não ficam dentro de um .card do Bootstrap,
   então precisam do próprio fundo tema-consciente. Usa --theme-secondary-bg
   (variável global) em vez de --theme-card-bg, que só existe dentro de um
   .card de verdade — fora dele fica indefinida e o fundo sai transparente. */
.gh-stat-card {
  border: 1px solid var(--theme-border-color);
  border-radius: .6rem;
  background: var(--theme-secondary-bg);
}

/* item "Restaurar Sistema" da sidebar: destacado em vermelho por ser uma ação
   destrutiva, diferenciando visualmente do resto do menu */
.side-nav-link[href="restaurar_sistema.php"],
.side-nav-link[href="restaurar_sistema.php"] .menu-icon i {
  color: var(--bs-danger);
}

/* Grade semanal, estilo agenda: cada aula posicionada por altura/topo proporcional
   ao horário exato (ex: 08:00-10:30 desenha até a metade da faixa das 10:00-11:00).
   gh-grade-wrap/gh-cal-canto/gh-cal-dia-nome/gh-cal-eixo-horas ficam dentro de um
   .card .card-body do Bootstrap, então "transparent" deixa o fundo do card aparecer. */
.gh-grade-wrap {
  overflow-x: auto;
  background: transparent;
}
.gh-cal {
  display: grid;
  min-width: 780px;
  font-size: .82rem;
}
.gh-cal-canto {
  border-bottom: 1px solid var(--theme-border-color);
  background: transparent;
}
.gh-cal-dia-nome {
  background: transparent;
  font-weight: 700;
  font-size: .74rem;
  letter-spacing: .03em;
  text-align: center;
  padding: .6rem .3rem;
  border-bottom: 1px solid var(--theme-border-color);
  border-left: 1px solid var(--theme-border-color);
  color: var(--cor-dia, var(--theme-body-color));
}
.gh-cal-dia-nome .gh-icone-dia {
  color: var(--cor-dia, var(--theme-body-color));
  margin-right: .25rem;
}
.gh-cal-eixo-horas {
  position: relative;
  background: transparent;
}
.gh-cal-hora-label {
  position: absolute;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  font-size: .68rem;
  font-weight: 700;
  color: var(--theme-body-color);
  text-align: right;
  padding-right: .5rem;
}
.gh-cal-hora-label .gh-icone-hora {
  margin-right: .15rem;
}
.gh-cal-dia-col {
  position: relative;
  border-left: 1px solid var(--theme-border-color);
}
.gh-cal-guia {
  position: absolute;
  left: 0;
  right: 0;
  height: 0;
  border-top: 1px dashed var(--theme-border-color);
}
.gh-aula {
  position: absolute;
  border-radius: 0;
  padding: .2rem .35rem;
  font-size: .7rem;
  line-height: 1.15;
  text-align: left;
  display: flex;
  flex-direction: column;
  justify-content: center;
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(0,0,0,.06);
}
.gh-aula strong { display: block; }
.gh-aula.gh-outras { background: #dbe8fd; border: 1px solid #b7d1fb; }
.gh-aula.gh-conflito { background: #fdeecb; border: 1px dashed #e8b84b; }

/* Faixa de horário indisponível (sala fora da disponibilidade cadastrada) —
   --theme-secondary-bg/--theme-tertiary-bg são dois tons neutros próximos que
   o tema já inverte sozinho no escuro, dando o mesmo efeito "hachurado" */
.gh-indisponivel {
  position: absolute;
  left: 0;
  right: 0;
  background: repeating-linear-gradient(45deg, var(--theme-secondary-bg), var(--theme-secondary-bg) 6px, var(--theme-tertiary-bg) 6px, var(--theme-tertiary-bg) 12px);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: .66rem;
  font-style: italic;
  color: var(--theme-secondary-color);
  overflow: hidden;
  pointer-events: none;
}

/* Card de aula "confirmada", estilo agenda colorido por dia — mistura com o
   fundo do tema (--theme-body-bg) em vez de "white" fixo, então no escuro o
   tom continua escuro (só com um leve matiz da cor do dia) em vez de ficar claro */
.gh-aula-dia {
  flex-direction: row;
  align-items: center;
  gap: .35rem;
  background: color-mix(in srgb, var(--cor-dia, #2f6fed) 12%, var(--theme-body-bg));
  border: 1px solid color-mix(in srgb, var(--cor-dia, #2f6fed) 28%, var(--theme-body-bg));
  border-left: 3px solid var(--cor-dia, #2f6fed);
  border-radius: 0;
  box-shadow: 0 2px 5px rgba(20,30,50,.07);
  padding: .25rem .4rem;
}
.gh-aula-editavel {
  cursor: pointer;
  transition: transform .1s ease, box-shadow .1s ease;
}
.gh-aula-editavel:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 10px rgba(20,30,50,.16);
}
.gh-aula-editavel[draggable="true"] {
  cursor: grab;
}
.gh-aula-arrastando {
  opacity: .35;
}
.gh-cal-dia-col.gh-drop-alvo {
  background: color-mix(in srgb, var(--theme-primary) 8%, transparent);
  outline: 2px dashed var(--theme-primary);
  outline-offset: -2px;
}
.gh-aula-icone {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--theme-body-bg);
  border: 1px solid var(--cor-dia, #2f6fed);
  color: var(--cor-dia, #2f6fed);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: .58rem;
}
.gh-aula-texto {
  display: flex;
  flex-direction: column;
  min-width: 0;
  line-height: 1.2;
}
.gh-aula-texto strong {
  font-size: .72rem;
  color: var(--theme-body-color);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.gh-aula-sala, .gh-aula-hora {
  font-size: .64rem;
  color: var(--theme-secondary-color);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.gh-legenda span {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  margin-right: 1.2rem;
  font-size: .8rem;
  color: var(--theme-secondary-color);
}
.gh-legenda i {
  width: 14px;
  height: 14px;
  border-radius: 3px;
  display: inline-block;
}

/* Painel de conflitos */
.gh-conflito-item {
  border-radius: .5rem;
  padding: .7rem .8rem;
  margin-bottom: .6rem;
  font-size: .85rem;
}
.gh-conflito-item.erro { background: #fdeceb; border: 1px solid #f6c4c0; color: #8a2c25; }
.gh-conflito-item.ok { background: #e7f7ed; border: 1px solid #b7e6c6; color: #1f6b3a; }
.gh-conflito-item .titulo {
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: .4rem;
  margin-bottom: .15rem;
}

/* Disponibilidade: arrastar e soltar entre dias */
.gh-disp-dia {
  transition: box-shadow .15s ease, opacity .15s ease;
}
.gh-disp-drag-handle {
  cursor: grab;
  color: var(--theme-secondary-color);
  font-size: .95rem;
}
.gh-disp-drag-handle:active {
  cursor: grabbing;
}
.gh-disp-dia.gh-disp-arrastando {
  opacity: .45;
}
.gh-disp-dia.gh-disp-sobre {
  box-shadow: 0 0 0 2px var(--theme-primary) inset;
  background: color-mix(in srgb, var(--theme-primary) 12%, var(--theme-body-bg));
}

/* Combobox com busca (ex: seletor de professor em Disponibilidade) */
.gh-combobox {
  position: relative;
}
.gh-combobox-lista {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: 1000;
  max-height: 240px;
  overflow-y: auto;
  background: var(--theme-secondary-bg);
  border: 1px solid var(--theme-border-color);
  border-radius: .4rem;
  box-shadow: 0 4px 12px rgba(20,30,50,.12);
  margin-top: .25rem;
}
.gh-combobox-lista.aberta {
  display: block;
}
.gh-combobox-item {
  padding: .45rem .7rem;
  cursor: pointer;
  font-size: .9rem;
  color: var(--theme-body-color);
}
.gh-combobox-item:hover,
.gh-combobox-item.ativo {
  background: color-mix(in srgb, var(--theme-primary) 12%, var(--theme-body-bg));
}
.gh-combobox-vazio {
  padding: .45rem .7rem;
  color: var(--theme-secondary-color);
  font-size: .85rem;
  font-style: italic;
}

/* Cores fixas (não derivadas do tema) que precisam de uma versão própria pro
   modo escuro, senão ficam claras demais e o texto perde contraste */
[data-bs-theme="dark"] .gh-aula.gh-outras {
  background: rgba(66, 133, 244, .18);
  border-color: rgba(96, 165, 250, .4);
  color: #cfe0ff;
}
[data-bs-theme="dark"] .gh-aula.gh-conflito {
  background: rgba(232, 184, 75, .18);
  border-color: rgba(232, 184, 75, .45);
  color: #ffe4b3;
}
[data-bs-theme="dark"] .gh-conflito-item.erro {
  background: rgba(214, 76, 60, .18);
  border-color: rgba(246, 100, 90, .4);
  color: #ffb4ac;
}
[data-bs-theme="dark"] .gh-conflito-item.ok {
  background: rgba(43, 158, 92, .18);
  border-color: rgba(93, 209, 143, .4);
  color: #a9e8bf;
}

/* Ajustes específicos do ícone Lucide (SVG) dentro da grade — a fonte antiga
   (Bootstrap Icons) escalava sozinha pelo font-size do elemento pai; o Lucide
   precisa de width/height explícitos no próprio SVG para não ficar grande
   demais dentro desses espaços pequenos. */
.gh-icone-dia,
.gh-icone-hora {
  width: 11px;
  height: 11px;
  vertical-align: -1px;
}
.gh-aula-icone svg {
  width: 11px;
  height: 11px;
}
