/* LAYOUT: esqueleto das telas internas — sidebar, barra superior, área de conteúdo.
   NÃO estiliza componente reutilizável nem nada específico de uma tela só. */

/* Layout Principal - Sidebar + Conteúdo */

.app-container {
  display: flex;
  min-height: 100vh;
  width: 100vw;
}

/* Barra Lateral (Sidebar) */

.sidebar {
  width: 280px;
  background-color: var(--fundo-sidebar);
  border-right: 1px solid var(--borda);
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  z-index: 100;
}

.sidebar-header {
  padding: var(--esp-6);
  border-bottom: 1px solid var(--borda);
}

/* O `justify-content: center` conserta o desalinhamento da logo.
   A CAUSA nao era padding assimetrico (o cabecalho tem 24px dos dois lados) nem
   a imagem: era este container. Ele e flex e vinha com o padrao flex-start;
   como a imagem tem max-width e fica mais estreita que o container, sobrava
   tudo de um lado so — media 24px de folga a esquerda contra 79px a direita. */
.logo {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--esp-3);
  font-size: var(--fonte-2xl);
  font-weight: 700;
  letter-spacing: -0.5px;
  color: var(--senai-vermelho);
}

.logo-icon {
  font-size: 24px;
  filter: drop-shadow(0 0 8px var(--brilho-marca));
}

/* LOGO DA SAGA NO TOPO DO MENU
   O menu tem 280px com 24px de padding de cada lado: sobram 232px. 176px deixa
   respiro e da 62px de altura (proporcao 2,86), que cabe sem empurrar o resto.

   A variante que nao combina com o tema sai com display:none. Como o seletor
   olha html[data-tema], que e o atributo que o tema.js ja alterna, a troca
   acontece no mesmo instante do clique, sem recarregar e sem JS aqui.
   Nenhuma cor nova: a cor esta dentro do PNG. */
.logo .saga-logo {
  display: block;
  width: 100%;
  max-width: 232px; /* a largura util inteira: 280 do menu menos 24 de cada lado */
  height: auto;
}

.logo .saga-logo-escura { display: none; }

html[data-tema="escuro"] .logo .saga-logo-clara { display: none; }
html[data-tema="escuro"] .logo .saga-logo-escura { display: block; }

.sidebar-menu {
  padding: var(--esp-6) var(--esp-4);
  display: flex;
  flex-direction: column;
  gap: var(--esp-2);
  flex-grow: 1;
}

.menu-item {
  display: flex;
  align-items: center;
  gap: var(--esp-4);
  padding: var(--esp-4) var(--esp-5);
  color: var(--texto-suave);
  text-decoration: none;
  font-size: var(--fonte-md);
  font-weight: 500;
  border-radius: var(--radius-md);
  transition: var(--transition-fast);
  border: 1px solid transparent;
}

.menu-item i {
  font-size: 18px;
  width: 20px;
  text-align: center;
  transition: var(--transition-fast);
}

.menu-item:hover {
  color: var(--texto);
  background-color: var(--camada-hover);
}

.menu-item.active {
  color: var(--senai-vermelho);
  background-color: var(--marca-camada);
  border: 1px solid var(--marca-borda);
  box-shadow: inset 0 0 12px var(--marca-camada);
}

.menu-item.active i {
  filter: drop-shadow(0 0 5px var(--brilho-marca));
}

.sidebar-footer {
  padding: var(--esp-5);
  border-top: 1px solid var(--borda);
}

.active-profile {
  display: flex;
  align-items: center;
  gap: var(--esp-3);
  padding: var(--esp-2);
  background: var(--camada-sutil);
  border-radius: var(--radius-md);
  border: 1px solid var(--borda);
}

.active-profile i {
  font-size: 20px;
  color: var(--info);
  background: var(--info-camada);
  padding: 10px;
  border-radius: 50%;
}

.profile-name {
  font-size: var(--fonte-sm);
  font-weight: 600;
  color: var(--texto);
}

.profile-role {
  font-size: var(--fonte-xs);
  color: var(--texto-suave);
}

/* Área de Conteúdo Principal */

.main-content {
  flex-grow: 1;
  display: flex;
  flex-direction: column;
  height: 100vh;
  overflow: hidden;
  background-image: radial-gradient(circle at 80% 20%, var(--camada-tinta-a) 0%, transparent 50%),
                    radial-gradient(circle at 10% 80%, var(--camada-tinta-b) 0%, transparent 50%);
}

/* Barra Superior */

.top-bar {
  height: 80px;
  padding: 0 var(--esp-10);
  border-bottom: 1px solid var(--borda);
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--fundo-barra-topo);
  backdrop-filter: blur(8px);
  flex-shrink: 0;
}

.top-bar-title h1 {
  font-size: var(--fonte-2xl);
  font-weight: 700;
  letter-spacing: -0.5px;
}

.top-bar-actions {
  display: flex;
  align-items: center;
  gap: var(--esp-5);
}

/* Seletor Deslizante de Turno (MANHÃ / TARDE) */

.toggle-switch-container {
  display: flex;
  align-items: center;
  gap: 10px;
}

.toggle-label {
  font-size: var(--fonte-sm);
  font-weight: 600;
  color: var(--texto-suave);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.toggle-switch {
  position: relative;
  display: flex;
  background-color: var(--camada-forte);
  padding: 4px;
  border-radius: var(--radius-lg);
  border: 1px solid var(--borda);
  width: 180px;
  height: 38px;
}

.toggle-switch input[type="radio"] {
  display: none;
}

.toggle-switch label {
  flex: 1;
  z-index: 2;
  text-align: center;
  line-height: 28px;
  font-size: var(--fonte-sm);
  font-weight: 600;
  color: var(--texto-suave);
  cursor: pointer;
  transition: var(--transition-fast);
}

.toggle-switch input[type="radio"]:checked + label {
  color: var(--texto-sobre-marca);
}

.toggle-slider {
  position: absolute;
  top: 3px;
  left: 3px;
  width: 85px;
  height: 30px;
  background-color: var(--senai-vermelho);
  border-radius: var(--radius-lg);
  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  box-shadow: 0 2px 10px var(--marca-sombra);
  z-index: 1;
}

.toggle-switch input[value="MANHÃ"]:checked ~ .toggle-slider {
  transform: translateX(0);
}

.toggle-switch input[value="TARDE"]:checked ~ .toggle-slider {
  transform: translateX(87px);
}

/* Badge de Conflitos */

.conflict-badge {
  display: flex;
  align-items: center;
  gap: var(--esp-2);
  padding: var(--esp-2) var(--esp-4);
  background: var(--camada-sutil);
  border: 1px solid var(--borda);
  border-radius: var(--radius-md);
  font-size: var(--fonte-sm);
  font-weight: 600;
  cursor: pointer;
  transition: var(--transition-fast);
  color: var(--texto-suave);
}

.conflict-badge:hover {
  background: var(--camada-hover);
  border-color: var(--borda-forte);
  color: var(--texto);
}

.conflict-badge.active-conflicts {
  background: var(--alerta-camada);
  border-color: var(--alerta-borda);
  color: var(--alerta);
  animation: pulse-danger 2s infinite;
}

.badge-count {
  background: var(--alerta);
  color: var(--texto-sobre-sinal);
  font-size: var(--fonte-xs);
  padding: 1px 6px;
  border-radius: 10px;
  margin-left: 2px;
  box-shadow: 0 0 8px var(--alerta-sombra);
  display: none;
}

.conflict-badge.active-conflicts .badge-count {
  display: inline-block;
}

/* Container de Abas */

.tab-content-container {
  flex-grow: 1;
  padding: var(--esp-6) var(--esp-8);
  overflow-y: auto;
}

.tab-pane {
  display: none;
  animation: fadeIn 0.4s ease-out;
  height: 100%;
}

.tab-pane.active {
  display: block;
}
.sidebar {
  position: relative;
  transition: width .25s ease;
}

.sidebar-toggle {
  position: absolute;
  top: 50%;
  right: -14px;
  transform: translateY(-50%);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--fundo-superficie);
  border: 1px solid var(--borda);
  color: var(--texto-suave);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: var(--shadow-main);
  z-index: 101;
  transition: var(--transition-fast);
}
.sidebar-toggle:hover {
  color: var(--senai-vermelho);
  border-color: var(--marca-borda);
  transform: translateY(-50%);
}

html[data-sidebar="recolhida"] .sidebar { width: 76px; }

/* MENU RECOLHIDO: A LOGO VIRA SÓ O "S"
   Escolhi RECORTAR em vez de reduzir ou esconder. Reduzir deixaria a palavra
   "saga" com ~10px de altura, ilegivel — seria um borrao vermelho ocupando
   espaco. Esconder deixaria o topo do menu vazio, porque o subtitulo tambem
   some quando recolhido, e o menu perderia a marca justamente no estado em que
   so ha icones para se orientar. O "S" e a parte distintiva do desenho e
   sobrevive bem em 44px.

   A conta do recorte: a tinta do "S" termina em 31,3% da largura da arte
   (medido no PNG). Com object-fit:cover numa caixa de 44x49, a imagem e
   escalada pela altura (49 x 2,86 = 140px de largura) e mostra 44/140 = 31,4%
   a partir da esquerda — exatamente o "S", sem cortar nem sobrar.

   O padding lateral do cabecalho cai para 12px porque com 24px sobrariam 28px
   uteis e nao caberia. */
html[data-sidebar="recolhida"] .sidebar-header {
  padding: var(--esp-4) var(--esp-3);
}

html[data-sidebar="recolhida"] .logo .saga-logo {
  width: 44px;
  height: 49px;
  max-width: none;
  object-fit: cover;
  object-position: left center;
}
html[data-sidebar="recolhida"] .logo span,
html[data-sidebar="recolhida"] .menu-item span,
html[data-sidebar="recolhida"] .profile-name,
html[data-sidebar="recolhida"] .profile-role { display: none; }
html[data-sidebar="recolhida"] .menu-item,
html[data-sidebar="recolhida"] .active-profile { justify-content: center; gap: 0; }

/* Grades que devem preencher a altura disponível sem sobra e sem calc(100vh)
   mágico: Docentes, Turmas e Salas. As outras telas (cards) continuam com
   altura por conteúdo. */
#tab-docentes.tab-pane.active,
#tab-turmas.tab-pane.active,
#tab-salas.tab-pane.active {
  display: flex;
  flex-direction: column;
  min-height: 0;
}
/* Pente fino SAGA: botão de sessão nunca deve herdar sublinhado de links. */
.btn,
.btn:hover,
.btn:focus,
.btn:active {
  text-decoration: none;
}

/* Pente fino SAGA: ao recolher a barra, o cartão do perfil não deve manter
   o contorno como se ainda fosse um bloco de conteúdo aberto. */
html[data-sidebar="recolhida"] .sidebar-footer {
  padding: var(--esp-3);
}
html[data-sidebar="recolhida"] .active-profile {
  border-color: transparent;
  background: transparent;
  box-shadow: none;
}
