:root {
  --color-bg: #f6f8f7;
  --color-surface: #ffffff;
  --color-border: #dfe7e2;
  --color-text: #27332d;
  --color-muted: #5b675f;
  --color-sidebar: #f1f5f2;
  --color-green: #2d7a4b;
  --color-green-soft: #e7f1ea;
  --color-green-active: #dceee3;
  --color-orange: #d9792b;
  --shadow-header: 0 2px 12px rgba(31, 46, 38, 0.08);
  --shadow-panel: 0 16px 42px rgba(31, 46, 38, 0.08);
  --header-height: 76px;
  --historical-banner-height: 44px;
  --sidebar-width: 240px;
  --sidebar-section-gap: 20px;
  --sidebar-title-gap: 10px;
  --sidebar-option-gap: 8px;
}

* {
  box-sizing: border-box;
}

[hidden] {
  display: none !important;
}

html,
body {
  min-height: 100%;
}

body {
  margin: 0;
  background: var(--color-bg);
  color: var(--color-text);
  font-family: Arial, Helvetica, sans-serif;
}

.access-pending {
  overflow-x: hidden;
  overflow-y: auto;
}

.access-pending .top-header,
.access-pending .app-shell,
.access-pending .panel-toggle {
  display: none;
}
.gen-view-launchers{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:.75rem;margin:1rem 0}.gen-view-launchers button{display:grid;gap:.3rem;min-height:88px;text-align:left;padding:1rem;background:#f5faf7;border:1px solid #b8cec1;border-radius:10px;color:#174d30}.gen-view-launchers button:hover,.gen-view-launchers button:focus-visible{border-color:#2f7d61;box-shadow:0 0 0 3px rgb(47 125 97 / 18%)}.gen-view-launchers small{color:var(--color-muted);font-weight:500}.generador-motor-panel>details{display:none}.gen-work-view{height:clamp(520px,calc(100vh - 230px),850px);overflow-y:auto;overscroll-behavior:contain;border:1px solid #b8cec1;border-radius:12px;background:#fff;margin:1rem 0 5.5rem;padding:0 1rem 1rem}.gen-work-view>header{position:sticky;top:0;z-index:6;display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.85rem 0;background:#fff;border-bottom:1px solid #d4ded8}.gen-work-view #gen-work-content>details{display:block;margin:.75rem 0;border:0}.gen-work-view #gen-work-content>details>summary{display:none}.gen-work-view .generador-tabla-wrap{max-height:calc(100vh - 390px);overflow:auto}.gen-work-view .generador-table thead{position:sticky;top:0;z-index:4}.gen-work-view .gen-teacher-list{max-height:calc(100vh - 390px)}
.generador-motor-panel:has(.gen-work-view:not([hidden])) .gen-campaign-actions{position:static;margin-top:1rem}
@media(max-width:700px){.gen-work-view{height:auto;min-height:calc(100vh - 180px);margin-bottom:1rem}.gen-work-view>header{align-items:flex-start}.gen-work-view .generador-tabla-wrap{max-height:62vh}.gen-view-launchers{grid-template-columns:1fr}}

.authenticated-app[hidden] {
  display: none !important;
}

.access-screen {
  display: none;
}

.access-pending .login-screen,
.access-pending.mode-pending .mode-screen {
  display: grid;
  min-height: 100vh;
  padding: 24px;
  place-items: center;
  background: var(--color-bg);
}

.access-pending.mode-pending .login-screen {
  display: none;
}

.access-card {
  width: min(100%, 560px);
  padding: 34px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: var(--shadow-panel);
  text-align: center;
}

.access-kicker {
  margin: 0;
  color: var(--color-green);
  font-size: 0.92rem;
  font-weight: 800;
}

.access-card h1 {
  margin: 8px 0 0;
  color: var(--color-text);
  font-size: 1.72rem;
  line-height: 1.2;
}

.access-subtitle {
  margin: 10px 0 0;
  color: var(--color-muted);
  font-size: 1rem;
  font-weight: 600;
}

.access-options {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  margin-top: 26px;
}

.admin-mode-options {
  grid-template-columns: 1fr;
}

.login-form {
  display: grid;
  gap: 14px;
  margin-top: 24px;
  text-align: left;
}

.login-form label {
  display: grid;
  gap: 6px;
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 800;
}

.login-form input,
.admin-impersonate-select {
  min-height: 40px;
  padding: 9px 11px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.login-form button {
  min-height: 40px;
  color: #ffffff;
  font: inherit;
  font-weight: 900;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  border-radius: 8px;
  cursor: pointer;
}

.access-options button {
  display: grid;
  align-content: center;
  gap: 3px;
  min-height: 42px;
  padding: 10px 12px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.access-options button:hover {
  color: var(--color-green);
  background: var(--color-green-soft);
  border-color: #cfe3d5;
}

.option-title,
.option-meta {
  display: block;
}

.option-title {
  font-weight: 800;
}

.option-meta {
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 700;
}

.access-options button:hover .option-meta {
  color: var(--color-green);
}

.top-header {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 10;
  display: grid;
  grid-template-columns: minmax(80px, 150px) minmax(0, 1fr) minmax(220px, 260px);
  align-items: center;
  width: 100%;
  min-height: var(--header-height);
  padding: 10px 28px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
  box-shadow: var(--shadow-header);
}

.header-logo {
  display: flex;
  align-items: center;
  min-width: 0;
}

.header-logo-left {
  justify-content: flex-start;
}

.header-logo-right {
  justify-content: flex-end;
}

.header-user-actions {
  gap: 8px;
}

.header-icon-button,
.header-logout-button {
  min-height: 34px;
  padding: 6px 10px;
  color: var(--color-green);
  font: inherit;
  font-weight: 900;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.header-icon-button {
  position: relative;
  display: inline-grid;
  place-items: center;
  width: 36px;
  padding: 0;
  font-size: 1rem;
}

.header-avatar-button {
  width: 36px;
  height: 36px;
  min-height: 36px;
  aspect-ratio: 1 / 1;
  flex: 0 0 36px;
  overflow: hidden;
  padding: 0;
  border-radius: 50%;
}

.header-avatar-button img,
.header-avatar-button .header-avatar-placeholder {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  margin: 0;
  padding: 0;
}

.header-avatar-button img {
  display: block;
  object-fit: cover;
}

.header-avatar-button img[hidden],
.header-avatar-button .header-avatar-placeholder[hidden] {
  display: none;
}

.header-avatar-button:focus-visible {
  outline: 3px solid rgba(45, 122, 75, 0.35);
  outline-offset: 2px;
}

@media (max-width: 720px) {
  .libro-claustro-department-grid,
  .libro-claustro-grid[data-tamano] .libro-claustro-department-grid,
  .libro-claustro-grid[data-tamano][data-vista="alfabetica"] { grid-template-columns: 1fr; }
}

.mailbox-header-button {
  display: inline-grid;
  place-items: center;
}

.header-icon-button.active {
  color: #ffffff;
  background: var(--color-green);
  border-color: var(--color-green);
}

.mailbox-unread-count {
  position: absolute;
  top: -7px;
  right: -7px;
  display: grid;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  place-items: center;
  color: #ffffff;
  font-size: 0.68rem;
  font-weight: 900;
  line-height: 1;
  background: #c62828;
  border: 2px solid #ffffff;
  border-radius: 999px;
}

.header-logout-button {
  white-space: nowrap;
  font-size: 0.78rem;
}

.header-logo img {
  display: block;
  max-width: 100%;
  max-height: 48px;
  object-fit: contain;
}

.header-info {
  min-width: 0;
  padding: 0 18px;
  text-align: center;
}

.header-title,
.header-meta {
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 0;
  margin: 0;
  line-height: 1.35;
}

.header-title {
  gap: 10px;
  color: var(--color-text);
  font-size: 1rem;
  font-weight: 700;
}

.header-meta {
  gap: 9px;
  margin-top: 4px;
  color: var(--color-muted);
  font-size: 0.86rem;
  font-weight: 500;
}

.header-title span,
.header-meta span {
  min-width: 0;
  white-space: nowrap;
}

.header-title span + span::before,
.header-meta span + span::before {
  margin-right: 9px;
  color: var(--color-orange);
  content: "·";
}

.header-title span:first-child {
  color: var(--color-green);
}

.header-meta strong {
  color: var(--color-text);
  font-weight: 700;
}

.simulation-badge {
  padding: 2px 8px;
  color: #8a4d12;
  font-weight: 800;
  background: #fff1df;
  border: 1px solid #f0c895;
  border-radius: 999px;
}

.simulation-banner {
  position: fixed;
  top: var(--header-height);
  left: 0;
  z-index: 25;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  width: 100%;
  min-height: 36px;
  padding: 6px 18px;
  color: #743b00;
  font-size: 0.86rem;
  font-weight: 800;
  background: #fff1cf;
  border-bottom: 1px solid #e8bb69;
}

.simulation-banner[hidden] {
  display: none;
}

.simulation-banner strong {
  color: #9a4a00;
}

.test-mode-banner {
  position: fixed;
  top: var(--header-height);
  left: 0;
  z-index: 26;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  width: 100%;
  min-height: 36px;
  padding: 6px 18px;
  color: #713f12;
  font-size: 0.86rem;
  font-weight: 800;
  background: #ffedd5;
  border-bottom: 1px solid #fdba74;
}

.test-mode-banner[hidden] {
  display: none;
}

.test-mode-banner strong {
  color: #9a3412;
}

#consulta-historica-banner {
  min-height: var(--historical-banner-height);
  flex-wrap: wrap;
  padding: 7px 18px;
}

.shortcut-feedback {
  position: fixed;
  right: 22px;
  bottom: 22px;
  z-index: 60;
  max-width: 320px;
  padding: 10px 14px;
  color: #ffffff;
  font-size: 0.88rem;
  font-weight: 800;
  background: rgba(38, 107, 64, 0.94);
  border-radius: 999px;
  box-shadow: 0 10px 26px rgba(31, 46, 38, 0.18);
}

.shortcut-feedback[hidden] {
  display: none;
}

body.simulation-active .app-shell {
  padding-top: calc(var(--header-height) + 36px);
}

body.simulation-active .panel-toggle {
  top: calc(var(--header-height) + 46px);
}

body.historical-readonly .app-shell {
  padding-top: calc(var(--header-height) + var(--historical-banner-height));
}

body.historical-readonly .panel-toggle {
  top: calc(var(--header-height) + var(--historical-banner-height) + 10px);
}

.app-shell {
  display: grid;
  grid-template-columns: var(--sidebar-width) minmax(0, 1fr) var(--sidebar-width);
  height: 100vh;
  padding-top: var(--header-height);
  transition: grid-template-columns 180ms ease;
}

.app-shell.left-panel-collapsed {
  grid-template-columns: 0 minmax(0, 1fr) var(--sidebar-width);
}

.app-shell.right-panel-collapsed {
  grid-template-columns: var(--sidebar-width) minmax(0, 1fr) 0;
}

.app-shell.left-panel-collapsed.right-panel-collapsed {
  grid-template-columns: 0 minmax(0, 1fr) 0;
}

.panel-toggle {
  position: fixed;
  top: calc(var(--header-height) + 10px);
  z-index: 30;
  display: inline-grid;
  width: 34px;
  height: 34px;
  padding: 0;
  place-items: center;
  color: var(--color-green);
  font: inherit;
  font-size: 1rem;
  font-weight: 900;
  line-height: 1;
  background: #ffffff;
  border: 1px solid #cfe3d5;
  border-radius: 999px;
  box-shadow: 0 8px 20px rgba(31, 46, 38, 0.12);
  cursor: pointer;
  transition: background 150ms ease, color 150ms ease, transform 150ms ease;
}

.panel-toggle:hover {
  color: #ffffff;
  background: var(--color-green);
  transform: translateY(-1px);
}

.panel-toggle-left {
  left: calc(var(--sidebar-width) - 17px);
}

body.left-panel-collapsed .panel-toggle-left {
  left: 10px;
}

.panel-toggle-right {
  right: 10px;
}

.sidebar {
  position: sticky;
  top: var(--header-height);
  align-self: start;
  min-width: 0;
  min-height: calc(100vh - var(--header-height));
  padding: 18px 14px;
  background: var(--color-sidebar);
  border-right: 1px solid var(--color-border);
  overflow-x: hidden;
  overflow-y: auto;
  transition: opacity 160ms ease, padding 160ms ease, border-color 160ms ease;
}

body.historical-readonly .sidebar {
  top: calc(var(--header-height) + var(--historical-banner-height));
  min-height: calc(100vh - var(--header-height) - var(--historical-banner-height));
}

.app-shell.left-panel-collapsed .sidebar {
  min-width: 0;
  padding-right: 0;
  padding-left: 0;
  opacity: 0;
  pointer-events: none;
  border-right-color: transparent;
}

.sidebar:empty::after {
  display: block;
  min-height: 1px;
  content: "";
}

.sidebar-section {
  display: grid;
  gap: var(--sidebar-option-gap);
}

.sidebar > .sidebar-section:not(:first-child) {
  margin-top: var(--sidebar-section-gap);
}

.mailbox-group-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.mailbox-group-card { width: min(560px, calc(100vw - 24px)); }
.mailbox-group-card select[multiple] { min-height: 220px; width: 100%; }
@media (max-width: 600px) { .mailbox-group-actions button { flex: 1 1 140px; } }
.panel-toggle-icon { display:block; width:20px; height:20px; padding:0; margin:0; overflow:visible; }
.panel-toggle-menu path { fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; }
.panel-toggle-info circle { fill:currentColor; }
.panel-toggle-info path { fill:none; stroke:currentColor; stroke-width:2.7; stroke-linecap:round; }

.sidebar > .sidebar-section[data-menu-section="consultas"] {
  margin-top: var(--sidebar-option-gap);
}

.sidebar > .sidebar-section[data-menu-section="parte-diario"] {
  margin-top: var(--sidebar-option-gap);
}

.sidebar-section h2 {
  margin: 0 0 var(--sidebar-title-gap);
  padding: 0;
  color: var(--color-green);
  font-size: 0.72rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  line-height: 1.2;
  text-transform: uppercase;
}

.sidebar-section-toggle {
  display: flex;
  align-items: center;
  gap: 7px;
  width: 100%;
  min-height: 28px;
  padding: 4px 8px;
  color: var(--color-green);
  font: inherit;
  font-size: inherit;
  font-weight: inherit;
  letter-spacing: inherit;
  line-height: inherit;
  text-align: left;
  text-transform: inherit;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 8px;
  cursor: pointer;
}

.sidebar-section-toggle:hover {
  background: #ffffff;
  border-color: var(--color-border);
}

.sidebar-section-indicator {
  width: 12px;
  color: var(--color-orange);
  font-size: 0.8rem;
  line-height: 1;
}

.sidebar-section.collapsed {
  gap: 0;
}

.sidebar-section.collapsed h2 {
  margin-bottom: 0;
}

.sidebar-section.collapsed .sidebar-nav-button {
  display: none;
}

.sidebar-nav-button {
  display: flex;
  align-items: center;
  width: 100%;
  min-height: 31px;
  padding: 4px 12px;
  color: var(--color-text);
  font: inherit;
  font-size: 0.93rem;
  font-weight: 600;
  line-height: 1.25;
  text-align: left;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 8px;
  cursor: pointer;
}

.sidebar-nav-button:hover {
  background: #ffffff;
  border-color: var(--color-border);
}

.sidebar-nav-button.active {
  color: var(--color-green);
  background: var(--color-green-soft);
  border-color: #cfe3d5;
}

.main-panel {
  position: relative;
  height: calc(100vh - var(--header-height));
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  padding: 28px;
}

body.historical-readonly .main-panel {
  height: calc(100vh - var(--header-height) - var(--historical-banner-height));
}

.tools-panel {
  position: absolute;
  top: 28px;
  right: 28px;
  z-index: 4;
  width: min(680px, calc(100% - 56px));
}

.calendar-panel {
  position: absolute;
  top: 28px;
  right: 28px;
  z-index: 4;
  width: min(700px, calc(100% - 56px));
}

.absence-panel {
  position: absolute;
  top: 28px;
  right: 28px;
  z-index: 4;
  width: min(620px, calc(100% - 56px));
  max-height: calc(100% - 56px);
  overflow: auto;
}

#reservas-panel,
#aula-convivencia-panel {
  inset: 0;
  width: 100%;
  max-height: none;
  overflow: hidden;
}

#reservas-panel .absence-card,
#aula-convivencia-panel .absence-card {
  height: 100%;
  min-height: 0;
  border-left-width: 0;
  box-shadow: var(--shadow-panel);
}

.calendar-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 18px;
  align-items: end;
  padding: 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
  box-shadow: 0 10px 26px rgba(31, 46, 38, 0.08);
}

.calendar-card h2 {
  margin: 4px 0 0;
  color: var(--color-text);
  font-size: 1.05rem;
  line-height: 1.2;
}

.calendar-card p {
  margin: 6px 0 0;
  color: var(--color-muted);
  font-size: 0.9rem;
  line-height: 1.4;
}

.calendar-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: 8px;
}

.calendar-actions label {
  width: 100%;
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
}

.calendar-actions input,
.calendar-actions button {
  min-height: 38px;
  border-radius: 8px;
  font: inherit;
}

.school-calendar-panel {
  position: absolute;
  inset: 28px;
  z-index: 4;
  min-height: 0;
}

.school-calendar-card {
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr);
  gap: 14px;
  height: 100%;
  min-height: 0;
  padding: 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
  box-shadow: 0 10px 26px rgba(31, 46, 38, 0.08);
}

.school-calendar-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
}

.school-calendar-header h2 {
  margin: 4px 0 0;
  font-size: 1.1rem;
  line-height: 1.2;
}

.school-calendar-header p {
  margin: 6px 0 0;
  color: var(--color-muted);
  font-size: 0.9rem;
}

.school-calendar-actions,
.school-calendar-legend {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.school-calendar-actions strong {
  min-width: 130px;
  color: var(--color-green);
  font-size: 0.95rem;
  text-align: center;
  text-transform: capitalize;
}

.school-calendar-legend {
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 800;
}

.school-calendar-legend span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.school-day-swatch {
  width: 12px;
  height: 12px;
  border: 1px solid var(--color-border);
  border-radius: 3px;
}

.school-day-swatch.lectivo {
  background: #ffffff;
}

.school-day-swatch.fin_semana,
.school-day-swatch.no_lectivo {
  background: #fff1df;
}

.school-day-swatch.primer_dia_lectivo,
.school-day-swatch.ultimo_dia_lectivo {
  background: #59b9cc;
}

.school-calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(86px, 1fr));
  gap: 6px;
  min-height: 0;
  overflow: auto;
}

.school-calendar-weekday {
  position: sticky;
  top: 0;
  z-index: 1;
  padding: 8px;
  color: var(--color-green);
  font-size: 0.78rem;
  font-weight: 900;
  text-align: center;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 6px;
}

.school-calendar-day {
  display: grid;
  align-content: start;
  gap: 7px;
  min-height: 82px;
  padding: 9px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 7px;
}

.school-calendar-day strong {
  font-size: 0.98rem;
}

.school-calendar-day-state {
  color: var(--color-muted);
  font-size: 0.76rem;
  line-height: 1.25;
}

.school-calendar-day.outside-month {
  opacity: 0.48;
}

.school-calendar-day.is-non-school-day {
  background: #fff7ed;
  border-color: #f0c895;
}

.school-calendar-day.is-non-school-day strong,
.school-calendar-day.is-non-school-day .school-calendar-day-state {
  color: #8a4d12;
}

.school-calendar-day.school-day-primer_dia_lectivo,
.school-calendar-day.school-day-ultimo_dia_lectivo {
  background: #e7f8fb;
  border-color: #59b9cc;
}

.school-calendar-day.school-day-primer_dia_lectivo strong,
.school-calendar-day.school-day-primer_dia_lectivo .school-calendar-day-state,
.school-calendar-day.school-day-ultimo_dia_lectivo strong,
.school-calendar-day.school-day-ultimo_dia_lectivo .school-calendar-day-state {
  color: #176d7c;
}

.calendar-actions input {
  padding: 8px 10px;
  color: var(--color-text);
  border: 1px solid var(--color-border);
}

.calendar-actions button {
  padding: 8px 12px;
  color: #ffffff;
  font-weight: 800;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  cursor: pointer;
}

.calendar-actions .secondary-button {
  color: var(--color-green);
  background: #ffffff;
}

.calendar-actions button:hover {
  background: #23633c;
}

.calendar-actions .secondary-button:hover {
  background: var(--color-green-soft);
}

.absence-card {
  padding: 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
  box-shadow: 0 10px 26px rgba(31, 46, 38, 0.08);
}

.absence-header {
  display: flex;
  justify-content: space-between;
  align-items: start;
  gap: 18px;
  margin-bottom: 16px;
}

.absence-header h2 {
  margin: 4px 0 0;
  color: var(--color-text);
  font-size: 1.05rem;
  line-height: 1.2;
}

.absence-header p {
  margin: 6px 0 0;
  color: var(--color-muted);
  font-size: 0.9rem;
  line-height: 1.4;
}

.absence-form {
  display: grid;
  gap: 12px;
}

.substitution-overlay-panel {
  position: fixed;
  inset: 0;
  z-index: 28;
  display: grid;
  place-items: center;
  padding: 24px;
  background: rgba(20, 31, 25, 0.18);
}

.substitution-overlay-panel .absence-card {
  width: min(760px, 100%);
  max-height: min(86vh, 760px);
  overflow: auto;
  box-shadow: var(--shadow-panel);
}

.absence-field {
  display: grid;
  gap: 6px;
}

.absence-field label {
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
}

.absence-field > span {
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
}

.absence-field input,
.absence-field select,
.absence-field textarea {
  min-height: 38px;
  padding: 8px 10px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.absence-field textarea {
  min-height: 92px;
  resize: vertical;
  line-height: 1.35;
}

.absence-own-teacher {
  padding: 10px 12px;
  color: var(--color-text);
  font-size: 0.92rem;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
}

.absence-checkbox {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  width: fit-content;
  color: var(--color-text);
  font-size: 0.88rem;
  font-weight: 800;
}

.absence-checkbox input {
  width: 16px;
  height: 16px;
  accent-color: var(--color-green);
}

.absence-step {
  display: grid;
  gap: 9px;
  margin: 0;
  padding: 12px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.absence-step legend {
  padding: 0 4px;
  color: var(--color-green);
  font-size: 0.78rem;
  font-weight: 800;
}

.absence-radio {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  width: fit-content;
  color: var(--color-text);
  font-size: 0.86rem;
  font-weight: 700;
}

.absence-radio input {
  width: 15px;
  height: 15px;
  accent-color: var(--color-green);
}

.absence-dates {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.absence-days-config {
  display: grid;
  gap: 10px;
  padding: 12px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-orange);
  border-radius: 8px;
}

.absence-days-header {
  display: grid;
  gap: 2px;
}

.absence-days-header strong {
  color: var(--color-text);
  font-size: 0.92rem;
}

.absence-days-header span {
  color: var(--color-muted);
  font-size: 0.8rem;
  font-weight: 700;
}

.absence-days-list {
  display: grid;
  gap: 8px;
}

.absence-day-card {
  display: grid;
  gap: 8px;
  padding: 10px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.absence-day-card > strong {
  color: var(--color-text);
  font-size: 0.86rem;
}

.absence-day-type,
.absence-task-options {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 14px;
}

.absence-hours {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 7px;
}

.absence-hour-check {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 7px 8px;
  color: var(--color-text);
  font-size: 0.8rem;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 6px;
}

.absence-hour-check input {
  accent-color: var(--color-green);
}

.absence-hour-check.disabled {
  color: #9aa39d;
  background: #f2f4f3;
}

.absence-hour-check.disabled input {
  cursor: not-allowed;
}

.absence-task-list {
  display: grid;
  gap: 10px;
}

.absence-task-card {
  display: grid;
  gap: 6px;
  padding: 10px;
  background: #fbfcfb;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.absence-task-card strong {
  color: var(--color-text);
  font-size: 0.86rem;
  line-height: 1.25;
}

.absence-task-card span {
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 700;
}

.absence-task-card textarea {
  width: 100%;
  min-height: 72px;
  padding: 8px 10px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  resize: vertical;
}

.absence-task-file {
  display: grid;
  gap: 5px;
  color: var(--color-muted);
  font-size: 0.76rem;
  font-weight: 800;
}

.absence-task-file input {
  width: 100%;
  color: var(--color-text);
  font: inherit;
  font-size: 0.78rem;
}

.guard-removal-hours {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 7px;
}

.absence-edit-list {
  display: grid;
  gap: 8px;
}

.absence-edit-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  padding: 10px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
}

.absence-edit-info {
  display: grid;
  gap: 3px;
  min-width: 0;
}

.absence-edit-info strong {
  color: var(--color-text);
  font-size: 0.9rem;
}

.absence-edit-info span {
  color: var(--color-muted);
  font-size: 0.8rem;
  font-weight: 700;
}

.absence-edit-item button {
  min-height: 34px;
  padding: 7px 10px;
  color: #9f1d1d;
  font: inherit;
  font-size: 0.82rem;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid #efc2c2;
  border-radius: 8px;
  cursor: pointer;
}

.absence-edit-item button:hover {
  background: #fff0f0;
}

.form-message {
  min-height: 18px;
  margin: 0;
  color: var(--color-muted);
  font-size: 0.84rem;
  font-weight: 700;
}

.form-message.error {
  color: #9f1d1d;
}

.form-message.success {
  color: var(--color-green);
}

.absence-actions {
  display: flex;
  justify-content: flex-end;
}

.absence-actions-split {
  justify-content: space-between;
  gap: 12px;
}

.absence-actions button {
  min-height: 38px;
  padding: 8px 12px;
  color: #ffffff;
  font: inherit;
  font-weight: 800;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  border-radius: 8px;
  cursor: pointer;
}

.absence-actions button:hover {
  background: #23633c;
}

/* Ausencias es un destino principal del menú, no un panel flotante. */
#ausencia-panel.absence-main-panel {
  inset: 0;
  width: 100%;
  max-height: none;
  overflow: hidden;
}

#ausencia-panel .absence-main-card {
  width: 100%;
  height: 100%;
  min-width: 0;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
  border-left-width: 1px;
  box-shadow: var(--shadow-panel);
}

.absence-actions button:focus-visible {
  outline: 3px solid rgba(35, 99, 60, 0.24);
  outline-offset: 2px;
}

.absence-actions button:active {
  transform: translateY(1px);
}

.absence-actions button:disabled {
  opacity: 0.58;
  cursor: not-allowed;
}

.change-teacher-panel {
  position: fixed;
  inset: 0;
  z-index: 32;
  display: grid;
  place-items: center;
  width: auto;
  max-height: none;
  padding: 24px;
  overflow: hidden;
  background: rgba(20, 31, 25, 0.22);
}

.change-teacher-panel[hidden] {
  display: none;
}

.change-teacher-card {
  width: min(760px, 100%);
  max-height: min(88vh, 780px);
  overflow-x: hidden;
  overflow-y: auto;
  box-sizing: border-box;
  box-shadow: var(--shadow-panel);
}

.change-teacher-card,
.change-teacher-card * {
  box-sizing: border-box;
}

.change-teacher-form {
  gap: 14px;
}

.change-teacher-section {
  min-width: 0;
  padding: 12px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.change-teacher-section select,
.change-teacher-section input {
  width: 100%;
  max-width: 100%;
  min-width: 0;
}

.change-teacher-summary {
  gap: 8px;
  overflow-wrap: anywhere;
}

.change-teacher-summary strong,
.change-teacher-summary span {
  min-width: 0;
  overflow-wrap: anywhere;
}

.change-teacher-actions {
  position: sticky;
  bottom: 0;
  z-index: 2;
  gap: 10px;
  padding-top: 12px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0), var(--color-surface) 28%);
}

.change-teacher-actions .secondary-action {
  color: var(--color-green);
  background: #ffffff;
  border-color: var(--color-border);
}

.change-teacher-actions .secondary-action:hover {
  background: var(--color-green-soft);
}

.tool-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 18px;
  align-items: end;
  padding: 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
  box-shadow: 0 10px 26px rgba(31, 46, 38, 0.06);
}

.tool-card + .tool-card {
  margin-top: 14px;
}

.danger-tool-card {
  border-left-color: #c63c2f;
}

.tool-kicker {
  margin: 0;
  color: var(--color-green);
  font-size: 0.76rem;
  font-weight: 800;
  text-transform: uppercase;
}

.tool-card h2 {
  margin: 4px 0 0;
  color: var(--color-text);
  font-size: 1.05rem;
  line-height: 1.2;
}

.tool-card p {
  margin: 6px 0 0;
  color: var(--color-muted);
  font-size: 0.9rem;
  line-height: 1.4;
}

.time-simulator-form,
.simulation-tool {
  display: grid;
  gap: 7px;
}

.time-simulator-form label,
.simulation-tool label {
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
}

.time-simulator-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.time-simulator-actions input,
.time-simulator-actions button {
  min-height: 38px;
  border-radius: 8px;
  font: inherit;
}

.time-simulator-actions input {
  width: 112px;
  padding: 8px 10px;
  color: var(--color-text);
  border: 1px solid var(--color-border);
}

.time-simulator-actions button {
  padding: 8px 12px;
  color: #ffffff;
  font-weight: 800;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  cursor: pointer;
}

.time-simulator-actions button:hover {
  background: #23633c;
}

.time-simulator-actions .secondary-button {
  color: var(--color-green);
  background: #ffffff;
}

.time-simulator-actions .secondary-button:hover {
  background: var(--color-green-soft);
}

.reset-guardias-actions {
  display: grid;
  justify-items: end;
  gap: 10px;
  max-width: 420px;
}

.danger-button {
  min-height: 38px;
  padding: 8px 12px;
  color: #ffffff;
  font: inherit;
  font-weight: 800;
  background: #b83228;
  border: 1px solid #b83228;
  border-radius: 8px;
  cursor: pointer;
}

.danger-button:hover {
  background: #9f271f;
}

.reset-confirmation {
  padding: 12px;
  background: #fff5f2;
  border: 1px solid #edc5bc;
  border-left: 3px solid #c63c2f;
  border-radius: 8px;
}

.reset-confirmation p {
  margin: 0;
  color: #7b2a22;
  font-size: 0.84rem;
  font-weight: 700;
}

.reset-confirmation-buttons {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 10px;
}

.horarios-panel {
  height: 100%;
  min-height: 0;
  padding: 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: var(--shadow-panel);
}

.horarios-header {
  display: flex;
  justify-content: space-between;
  align-items: end;
  gap: 18px;
  padding-right: 20px;
  margin-bottom: 16px;
}

.module-kicker {
  margin: 0;
  color: var(--color-green);
  font-size: 0.76rem;
  font-weight: 800;
  text-transform: uppercase;
}

.horarios-header h2 {
  margin: 4px 0 0;
  color: var(--color-text);
  font-size: 1.18rem;
  line-height: 1.25;
}

.teacher-select-label {
  display: grid;
  gap: 6px;
  min-width: min(100%, 280px);
  color: var(--color-muted);
  font-size: 0.84rem;
  font-weight: 800;
}

.compact-select-label {
  min-width: 168px;
}

.teacher-select-label select,
.teacher-select-label input {
  min-height: 38px;
  padding: 7px 10px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.horarios-controls {
  display: flex;
  align-items: end;
  gap: 10px;
}

.close-module-button {
  min-height: 38px;
  padding: 8px 12px;
  color: var(--color-green);
  font: inherit;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.close-module-button:hover {
  background: var(--color-green-soft);
  border-color: #cfe3d5;
}

.horario-table-wrap {
  height: calc(100% - 78px);
  min-height: 0;
  overflow: auto;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.horario-grid {
  display: grid;
  grid-template-columns: 86px repeat(5, minmax(180px, 1fr));
  grid-template-rows: 38px repeat(6, minmax(78px, 1fr));
  min-width: 986px;
  min-height: 100%;
  background: #ffffff;
}

.schedule-corner,
.schedule-day-header,
.schedule-hour-header,
.schedule-cell {
  border-right: 1px solid #ffffff;
  border-bottom: 1px solid #ffffff;
}

.schedule-corner,
.schedule-day-header,
.schedule-hour-header {
  display: flex;
  align-items: center;
  font-weight: 800;
}

.schedule-corner,
.schedule-day-header {
  color: #ffffff;
  background: #303030;
}

.schedule-day-header {
  padding: 0 14px;
  font-size: 0.86rem;
}

.schedule-hour-header {
  justify-content: center;
  color: #ffffff;
  font-size: 0.9rem;
  background: #303030;
}

.schedule-cell {
  display: grid;
  align-content: center;
  gap: 8px;
  padding: 12px 20px;
  background: #f1f1f1;
}

.schedule-cell.empty {
  background: #f5f5f5;
}

.schedule-entry {
  display: grid;
  gap: 2px;
  color: #111111;
  line-height: 1.18;
}

.schedule-entry strong {
  font-size: 0.84rem;
  font-weight: 800;
}

.schedule-entry span {
  font-size: 0.78rem;
  font-weight: 600;
}

.schedule-entry.guardia strong,
.schedule-entry.hueco strong {
  font-size: 0.86rem;
}

.schedule-load-error {
  grid-column: 1 / -1;
  display: grid;
  min-height: 160px;
  place-items: center;
  color: var(--color-muted);
  font-weight: 800;
  background: #f5f5f5;
}

.guardia-profesores-grid .schedule-cell {
  align-content: start;
  gap: 6px;
  padding: 10px 12px;
}

.guard-duty-cell {
  min-height: 92px;
}

.guard-duty-teacher {
  display: block;
  padding: 5px 7px;
  color: var(--color-text);
  font-size: 0.82rem;
  font-weight: 700;
  line-height: 1.2;
  background: #ffffff;
  border: 1px solid #dfe7e2;
  border-left: 3px solid var(--color-green);
  border-radius: 6px;
}

.guard-duty-teacher.absent {
  color: #9f1d1d;
  background: #fff0f0;
  border-color: #efc2c2;
  border-left-color: #c83232;
}

.guard-duty-teacher.removed {
  color: #69736d;
  background: #f1f4f2;
  border-color: #d8dfda;
  border-left-color: #8b968f;
  opacity: 0.78;
}

.guard-duty-empty {
  color: #96a099;
  font-size: 0.78rem;
  font-weight: 700;
}

.editor-workspace {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 280px;
  gap: 12px;
  height: calc(100% - 78px);
  min-height: 0;
}

.editor-workspace:has(.editor-toolbar[hidden]) {
  grid-template-columns: minmax(0, 1fr);
}

.editor-schedule-area {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  min-width: 0;
  min-height: 0;
}

.editor-toolbar {
  display: grid;
  align-content: start;
  gap: 12px;
  align-items: start;
  padding: 12px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
  min-height: 0;
  overflow: auto;
}

.editor-action-card {
  display: grid;
  gap: 8px;
}

.editor-action-card strong {
  color: var(--color-text);
  font-size: 0.86rem;
}

.editor-action-row {
  display: grid;
  gap: 8px;
}

.editor-action-row select,
.editor-action-row button,
.editor-save-actions button,
.editor-remove-button {
  min-height: 34px;
  padding: 6px 9px;
  font: inherit;
  font-size: 0.82rem;
  font-weight: 800;
  border-radius: 8px;
}

.editor-action-row select {
  color: var(--color-text);
  background: #ffffff;
  border: 1px solid var(--color-border);
}

.editor-action-row button,
.editor-save-actions button,
.editor-remove-button {
  color: #ffffff;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  cursor: pointer;
}

.editor-save-actions {
  display: grid;
  gap: 8px;
}

.editor-save-actions .secondary-button {
  color: var(--color-green);
  background: #ffffff;
  border-color: var(--color-border);
}

.editor-remove-list {
  display: grid;
  max-height: 190px;
  overflow: auto;
  gap: 5px;
  padding: 8px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.editor-remove-item {
  display: flex;
  align-items: center;
  gap: 7px;
  color: var(--color-text);
  font-size: 0.8rem;
  font-weight: 700;
}

.editor-remove-item input {
  accent-color: var(--color-green);
}

.editor-schedule-wrap {
  height: 100%;
}

.editor-schedule-cell.editor-free-slot {
  background: #f7fbf8;
}

.editor-schedule-cell.editor-has-guard {
  background: var(--color-green-soft);
  border-left: 3px solid var(--color-green);
}

.aulas-table-wrap {
  height: calc(100vh - 210px);
  min-height: 360px;
  overflow: auto;
}

.aulas-table {
  min-width: 1100px;
  width: max-content;
}

.aulas-table th,
.aulas-table td {
  min-width: 145px;
  max-width: 210px;
  vertical-align: top;
}

.aulas-table .aulas-time-header,
.aulas-table .aulas-row-header {
  position: sticky;
  left: 0;
  z-index: 2;
  min-width: 138px;
}

.aulas-table .aulas-time-header {
  z-index: 3;
  background: #303030;
}

.aulas-row-header {
  color: var(--color-text);
  font-weight: 900;
  background: #f8fbf9;
  border-right: 1px solid var(--color-border);
}

.aula-cell {
  min-height: 42px;
  padding: 4px 6px;
  line-height: 1.25;
}

.aula-cell.free {
  color: var(--color-green);
  background: #eef8f1;
}

.aula-cell.occupied {
  background: #ffffff;
}

.aula-free-label {
  display: inline-block;
  color: var(--color-green);
  font-size: 0.78rem;
  font-weight: 900;
}

.aula-occupied {
  display: grid;
  gap: 3px;
}

.aula-occupied strong {
  color: var(--color-text);
  font-size: 0.8rem;
}

.aula-occupied span {
  color: var(--color-muted);
  font-size: 0.76rem;
  font-weight: 700;
}

.grupos-table-wrap {
  height: calc(100% - 78px);
}

.grupos-table {
  min-width: 780px;
}

.grupos-table th,
.grupos-table td {
  min-width: 155px;
  vertical-align: top;
}

.grupos-table .grupos-time-header,
.grupos-table .grupos-row-header {
  position: sticky;
  left: 0;
  z-index: 2;
  min-width: 120px;
}

.grupos-table .grupos-time-header {
  z-index: 3;
  background: #303030;
}

.grupos-row-header {
  color: var(--color-text);
  font-weight: 900;
  background: #f8fbf9;
  border-right: 1px solid var(--color-border);
}

.grupo-cell {
  min-height: 74px;
  line-height: 1.25;
}

.grupo-cell.empty {
  color: #8b968f;
  background: #f7faf8;
}

.grupo-cell.occupied {
  background: #ffffff;
}

.grupo-empty-label {
  color: #8b968f;
  font-size: 0.78rem;
  font-weight: 800;
}

.grupo-sessions {
  display: grid;
  gap: 6px;
}

.grupo-session {
  display: grid;
  gap: 3px;
  padding-left: 8px;
  border-left: 3px solid var(--color-green);
}

.grupo-session strong {
  color: var(--color-text);
  font-size: 0.8rem;
}

.grupo-session span {
  color: var(--color-muted);
  font-size: 0.76rem;
  font-weight: 700;
}

.ranking-table-wrap {
  height: calc(100% - 78px);
  min-height: 0;
  overflow: auto;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.ranking-table {
  width: 100%;
  min-width: 720px;
  border-collapse: collapse;
  background: #ffffff;
}

.ranking-table th,
.ranking-table td {
  padding: 10px 12px;
  border-bottom: 1px solid var(--color-border);
  text-align: left;
}

.ranking-table th {
  position: sticky;
  top: 0;
  z-index: 1;
  color: #ffffff;
  font-size: 0.78rem;
  font-weight: 800;
  background: #1A7F37;
  text-align: center;
}

.ranking-table td {
  color: var(--color-text);
  font-size: 0.84rem;
  font-weight: 700;
}

.substitution-history-table {
  min-width: 1120px;
}

.points-table {
  min-width: 880px;
}

.points-table .number-cell {
  width: 96px;
  text-align: center;
}

.points-table th:nth-child(4),
.points-table th:nth-child(5),
.points-table th:nth-child(6) {
  max-width: 120px;
  white-space: normal;
}

.points-table th:nth-child(7),
.points-table td:nth-child(7) {
  width: 82px;
  min-width: 82px;
  max-width: 82px;
  text-align: center;
}

.points-table td:nth-child(7) .table-action-button {
  margin-inline: auto;
}

.points-edit-summary {
  display: grid;
  gap: 8px;
  margin-bottom: 14px;
}

.points-edit-form {
  margin-bottom: 18px;
}

.salon-summary-wrap {
  height: auto;
  max-height: 240px;
}

.salon-summary-table {
  min-width: 720px;
}

.salon-check-block + .salon-check-block {
  margin-top: 12px;
}

.salon-check-block > strong {
  display: block;
  margin-bottom: 8px;
  color: var(--color-text);
  font-size: 0.84rem;
}

.salon-check-list {
  display: grid;
  gap: 7px;
}

.authorized-permissions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.authorized-list-section {
  margin-top: 16px;
}

.authorized-table-wrap {
  height: auto;
  max-height: 360px;
}

.authorized-table {
  min-width: 860px;
}

.authorized-revoke-button {
  white-space: nowrap;
}

.app-toast {
  position: fixed;
  right: 22px;
  bottom: 22px;
  z-index: 80;
  max-width: min(520px, calc(100vw - 44px));
  padding: 12px 16px;
  color: #17442a;
  font-size: 0.9rem;
  font-weight: 900;
  line-height: 1.35;
  background: #e7f1ea;
  border: 1px solid #bad9c4;
  border-left: 4px solid var(--color-green);
  border-radius: 8px;
  box-shadow: 0 14px 36px rgba(31, 46, 38, 0.16);
}

.app-toast.error {
  color: #7f1d1d;
  background: #fee2e2;
  border-color: #fecaca;
  border-left-color: #b91c1c;
}

.admin-module-panel .tool-card {
  gap: 16px;
}

.calendar-legend-chip {
  padding: 5px 8px;
  font-size: 0.76rem;
  font-weight: 900;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  background: #ffffff;
}

.calendar-type-lectivo,
.calendar-type-inicio_lectivo {
  background: #e7f1ea;
  border-color: #bad9c4;
}

.calendar-type-no_lectivo,
.calendar-type-fin_semana {
  background: #f3f4f6;
  border-color: #d1d5db;
}

.calendar-type-festivo,
.calendar-type-fiesta_nacional,
.calendar-type-fiesta_autonomica,
.calendar-type-fiesta_local,
.calendar-type-festivo_local {
  background: #fee2e2;
  border-color: #fecaca;
}

.calendar-type-vacaciones,
.calendar-type-navidad,
.calendar-type-semana_blanca,
.calendar-type-semana_santa,
.calendar-type-verano {
  background: #dbeafe;
  border-color: #bfdbfe;
}

.calendar-type-fin_lectivo,
.calendar-type-fin_2_bachillerato,
.calendar-type-fin_2_cfgm {
  background: #fef3c7;
  border-color: #fde68a;
}

.calendar-type-final_administrativo {
  color: #ffffff;
  background: #374151;
  border-color: #111827;
}

.calendar-type-provisional {
  outline: 2px dashed #b45309;
  outline-offset: 1px;
}

.school-calendar-day.calendar-type-lectivo,
.school-calendar-day.calendar-type-inicio_lectivo {
  background: #e7f1ea;
  border-color: #bad9c4;
}

.school-calendar-day.calendar-type-no_lectivo,
.school-calendar-day.calendar-type-fin_semana {
  background: #f3f4f6;
  border-color: #d1d5db;
}

.school-calendar-day.calendar-type-festivo,
.school-calendar-day.calendar-type-fiesta_nacional,
.school-calendar-day.calendar-type-fiesta_autonomica,
.school-calendar-day.calendar-type-fiesta_local,
.school-calendar-day.calendar-type-festivo_local {
  background: #fee2e2;
  border-color: #fecaca;
}

.school-calendar-day.calendar-type-vacaciones,
.school-calendar-day.calendar-type-navidad,
.school-calendar-day.calendar-type-semana_blanca,
.school-calendar-day.calendar-type-semana_santa,
.school-calendar-day.calendar-type-verano {
  background: #dbeafe;
  border-color: #bfdbfe;
}

.school-calendar-day.calendar-type-fin_lectivo,
.school-calendar-day.calendar-type-fin_2_bachillerato,
.school-calendar-day.calendar-type-fin_2_cfgm {
  background: #fef3c7;
  border-color: #fde68a;
}

.school-calendar-day.calendar-type-final_administrativo {
  color: #ffffff;
  background: #374151;
  border-color: #111827;
}

.school-calendar-day.calendar-type-final_administrativo .school-calendar-day-state,
.school-calendar-day.calendar-type-final_administrativo strong {
  color: #ffffff;
}

.admin-panel-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
}

.admin-summary-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 10px;
}

.admin-summary-item {
  display: grid;
  gap: 4px;
  padding: 10px 12px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
}

.admin-summary-item span {
  color: var(--color-muted);
  font-size: 0.76rem;
  font-weight: 900;
}

.admin-summary-item strong {
  color: var(--color-text);
  font-size: 0.92rem;
}

.generador-horarios-card { width:100%; max-width:none; min-width:0; }
.generador-motor-tabs{display:flex;gap:.45rem;flex-wrap:wrap}.generador-motor-tabs button.active{background:var(--primary-color,#215b4a);color:#fff}.generador-motor-panel{margin-top:1rem;padding:1rem;border:1px solid #d8e2de;border-radius:14px;background:#fff}.generador-config-grid,.generador-weight-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:.8rem}.generador-config-grid label,.generador-weight-grid label{display:flex;flex-direction:column;gap:.35rem}.generador-hard-note{padding:.8rem;border-left:4px solid #215b4a;background:#eef7f3}.generador-progress,.generador-lot{margin-top:.8rem;padding:.8rem;border-radius:10px;background:#f4f7f6}.generador-event-list{max-height:260px;overflow:auto;padding-left:1.2rem}.generador-lots{display:grid;gap:.7rem}.generador-lot.best{border:2px solid #2f7d61}.danger-button{background:#a52a2a!important;color:#fff!important}
.generador-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin: 14px 0; }
.generador-books { display: flex; gap: 6px; flex-wrap: wrap; }
.generador-book-button { border: 1px solid #b8c9bf; background: #f3f7f4; color: #294b38; padding: 8px 12px; border-radius: 8px; font-weight: 700; }
.generador-book-button.active { color: #fff; background: var(--color-primary, #17623b); border-color: var(--color-primary, #17623b); }
.generador-actions { margin: 0; flex-shrink: 0; }
.generador-actions button { width: auto; padding: 8px 12px; }
.generador-sheet-controls { display: grid; grid-template-columns: minmax(210px, 1fr) minmax(250px, 1.4fr) auto; gap: 12px; align-items: end; margin: 14px 0 10px; }
.generador-sheet-controls label { display: grid; gap: 5px; font-size: .8rem; font-weight: 700; color: var(--color-muted); }
.generador-sheet-controls select, .generador-sheet-controls input { min-height: 40px; width: 100%; }
#generador-conteo { font-weight: 700; color: var(--color-muted); padding-bottom: 10px; white-space: nowrap; }
.generador-sheet { border: 1px solid #c7d2cb; border-radius: 10px; background: #fff; overflow: hidden; box-shadow: 0 3px 14px rgb(30 70 45 / 8%); }
.generador-sheet-heading { padding: 12px 16px; background: linear-gradient(90deg, #e8f2eb, #f7faf8); border-bottom: 1px solid #c7d2cb; }
.generador-sheet-heading h3 { margin: 0; color: #174d30; }
.generador-sheet-heading p { margin: 3px 0 0; color: var(--color-muted); font-size: .78rem; }
.generador-intro { display: flex; flex-wrap: wrap; gap: 7px; padding: 10px 12px; background: #fbfdfb; border-bottom: 1px solid #dae2dd; }
.generador-intro-row { display: flex; gap: 7px; flex-wrap: wrap; padding: 5px 9px; border: 1px solid #d4ded8; border-radius: 7px; background: #fff; font-size: .82rem; }
.generador-intro-row span:nth-child(odd) { font-weight: 700; }
.generador-tabla-wrap { max-height: 58vh; overflow: auto; max-width: 100%; }
.generador-table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; font-size: .82rem; }
.generador-table th { position: sticky; top: 0; z-index: 3; padding: 9px 11px; text-align: left; color: #fff; background: #32664a; border-right: 1px solid #69907a; white-space: nowrap; }
.generador-table td { max-width: 390px; min-width: 90px; padding: 7px 11px; border-right: 1px solid #dbe3de; border-bottom: 1px solid #dbe3de; white-space: pre-wrap; vertical-align: top; }
.generador-table tbody tr:nth-child(even) td { background: #f7faf8; }
.generador-table .sticky-column { position: sticky; left: 0; z-index: 2; min-width: 180px; box-shadow: 2px 0 3px rgb(0 0 0 / 6%); }
.generador-table th.sticky-column { z-index: 4; }
.generador-table tbody tr:nth-child(odd) td.sticky-column { background: #fff; }
.generador-table tbody tr:nth-child(even) td.sticky-column { background: #f7faf8; }
.generador-table tr.tone-total td, .generador-table tr.tone-total td.sticky-column { background: #e2eee6; font-weight: 800; }
.generador-table tr.tone-success td, .generador-table tr.tone-success td.sticky-column { background: #edf8ef; }
.generador-table tr.tone-warning td, .generador-table tr.tone-warning td.sticky-column { background: #fff4cf; }
.generador-table tr.tone-danger td, .generador-table tr.tone-danger td.sticky-column { background: #fde8e8; color: #782020; }
.generador-diagnostics { margin-top: 12px; color: var(--color-muted); }
.gen-section{margin:.75rem 0;border:1px solid #d4ded8;border-radius:10px;background:#fff}.gen-section>summary{cursor:pointer;padding:.8rem 1rem;font-weight:800;color:#174d30}.gen-section>summary small{display:block;margin:.2rem 0 0 1.25rem;color:var(--color-muted);font-weight:500}.gen-section[open]>summary{border-bottom:1px solid #d4ded8;background:#f5faf7}.gen-section>*:not(summary){margin-left:1rem;margin-right:1rem}.gen-rule-tools,.gen-teacher-filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.55rem;margin-top:.8rem}.gen-rules-table th button{padding:0;border:0;background:transparent;color:#fff;font:inherit}.gen-state{display:inline-block;padding:.15rem .45rem;border-radius:999px;background:#e8f2eb;font-size:.75rem;font-weight:800}.gen-state.custom{background:#fff0c9;color:#694b00}.gen-teacher-layout{display:grid;grid-template-columns:minmax(520px,1.5fr) minmax(300px,1fr);gap:1rem;padding-bottom:1rem}.gen-teacher-list{max-height:430px}.gen-teacher-list tr{cursor:pointer}.gen-teacher-list tr:focus,.gen-teacher-list tr:hover{outline:2px solid #2f7d61;outline-offset:-2px}.gen-teacher-detail{padding:1rem;border-left:1px solid #d4ded8;background:#f8fbf9}.gen-teacher-detail label{display:grid;gap:.25rem;margin:.55rem 0}.gen-teacher-detail .inline-check{display:flex;align-items:center;gap:.4rem}.gen-workspace-tabs{display:flex;gap:.5rem;margin-top:1rem}.gen-workspace-tabs button.active{background:#215b4a;color:#fff}.gen-campaign-actions{position:sticky;bottom:0;z-index:8;display:flex;justify-content:space-between;align-items:center;gap:1rem;margin:1rem -1rem -1rem;padding:.75rem 1rem;background:#fff;border-top:1px solid #bdccc4;box-shadow:0 -4px 12px rgb(25 70 45 / 10%)}.gen-campaign-actions>div,.gen-secondary-actions{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap}.gen-campaign-actions button{width:auto;min-height:38px}.generador-motor-panel{padding-bottom:5rem}.generador-progress{min-height:100px}
.generador-diagnostics summary { cursor: pointer; font-weight: 700; }
.generador-incidencia { margin: 6px 0; padding: 9px 12px; border-radius: 8px; border-left: 4px solid #b7791f; background: #fff8e7; }
.generador-incidencia.error { border-left-color: var(--color-danger, #a32626); background: #fff0f0; }
@media (max-width: 700px) {
  .generador-motor-tabs{display:grid;grid-template-columns:1fr 1fr}.generador-motor-tabs button{min-height:44px}.generador-config-grid,.generador-weight-grid{grid-template-columns:1fr}.generador-motor-panel{padding:.75rem;overflow-wrap:anywhere}
  .generador-horarios-card { overflow-x: hidden; }
  .generador-toolbar { align-items: stretch; flex-direction: column; }
  .generador-actions { display: flex; gap: 6px; }
  .generador-actions button { flex: 0 1 auto; font-size: .78rem; }
  .generador-books { display: grid; grid-template-columns: 1fr; }
  .generador-sheet-controls { grid-template-columns: 1fr; }
  #generador-conteo { padding: 0; }
  .generador-tabla-wrap { max-height: 62vh; }
  .gen-teacher-layout{grid-template-columns:1fr}.gen-teacher-detail{border-left:0;border-top:1px solid #d4ded8}.gen-campaign-actions{position:static;align-items:stretch;flex-direction:column;margin:1rem 0 0}.generador-motor-panel{padding-bottom:.75rem}
}
@media (min-width:1500px){.generador-config-grid{grid-template-columns:repeat(4,minmax(210px,1fr))}.generador-weight-grid{grid-template-columns:repeat(3,minmax(240px,1fr))}}

.libros-header-actions, .libros-toolbar { display:flex; gap:10px; align-items:end; flex-wrap:wrap; }
.libros-toolbar { padding:12px; margin: 10px 0 6px; background: var(--color-green-soft); border: 1px solid var(--color-border); border-radius: 10px; }
.libros-toolbar label { display:grid; gap:4px; min-width: 180px; }
.libros-toolbar select { min-height: 40px; font: inherit; border: 1px solid var(--color-border); border-radius: 8px; background: #fff; }
.libros-estado-guardado { margin-left: auto; align-self: center; color: var(--color-green); font-weight: 700; }
.libros-estado-guardado.error, #libros-config-error { color: var(--color-danger, #a32626); }
.libros-leyenda { margin: 4px 0 10px; color: var(--color-muted); font-weight: 600; }
.libros-table-wrap { overflow:auto; height:calc(100vh - 285px); }
.libros-table { border-collapse:collapse; min-width:100%; }
.libros-table th,.libros-table td { border:1px solid var(--color-border); padding:6px; vertical-align:top; }
.libros-table thead th { position:sticky; top:0; z-index:3; background:#303030; color:white; }
.libros-table tbody th { position:sticky; left:0; z-index:2; background:white; min-width:210px; }
.libros-table td label { display:flex; align-items:center; gap:5px; white-space:nowrap; }
.libros-table select { width:100%; margin-top:4px; min-height: 34px; }
.libros-table td[data-materia] { min-width: 105px; }
.libros-fase-row > th strong { display:block; margin-top:4px; color:var(--color-green); font-size:.78rem; text-transform:uppercase; letter-spacing:.04em; }
.libros-fase-bloqueada > th, .libros-fase-bloqueada > td { background:#eef1ef; color:#626b65; }
.libros-fase-bloqueada { opacity:.82; }
.libros-fase-bloqueada :disabled { opacity:.72; cursor:not-allowed; }
.libros-fase-habilitada { box-shadow:inset 4px 0 0 var(--color-green); }
.libros-control { display:grid; gap:4px; }
.libros-entrega-ref { padding: 3px 5px; border-radius: 5px; background: var(--color-green-soft); font-size: .72rem; }
.libros-no-aplica { color: var(--color-muted); background: #f5f6f5; }
.libros-materias-list { display:grid; gap:8px; max-height: min(55vh, 480px); overflow:auto; margin:14px 0; padding:14px; }
.libros-materias-list label { display:flex; align-items:flex-start; gap:8px; font-weight:600; }
.libros-modal-card { width:min(620px, calc(100vw - 24px)); }
.libros-modal-card textarea, .libros-modal-card select { width:100%; font:inherit; }
.libros-observaciones-cell button { white-space:nowrap; }
.libros-configuracion-panel { overflow:hidden; padding-bottom:12px; }
.libros-config-intro { margin:4px 0 0; color:var(--color-muted); }
.libros-config-grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:10px 12px; margin-top:10px; }
.libros-config-level { min-width:0; padding:9px 12px; border:1px solid var(--color-border); border-radius:10px; background:#fff; }
.libros-config-level h3 { margin:0 0 6px; color:var(--color-green); font-size:1rem; line-height:1.15; }
.libros-config-level .libros-materias-list { grid-template-columns:repeat(2, minmax(0, 1fr)); margin:0; padding:0; border:0; max-height:none; overflow:visible; gap:3px 12px; }
.libros-config-level .libros-materias-list label { min-height:26px; align-items:center; padding:2px 4px; border-radius:5px; font-size:.9rem; line-height:1.15; cursor:pointer; }
.libros-config-level .libros-materias-list label:hover { background:var(--color-green-soft); }
.libros-config-level .libros-materias-list abbr { overflow:hidden; text-overflow:ellipsis; text-decoration:none; white-space:nowrap; }
.libros-config-level input { flex:0 0 auto; margin:0; }
@media (max-width: 700px) {
  .libros-configuracion-panel { overflow-y:auto; padding-bottom:28px; }
  .libros-config-grid { grid-template-columns:1fr; gap:10px; }
  .libros-configuracion-panel .horarios-header { align-items:stretch; }
  .libros-configuracion-panel .libros-header-actions { align-items:stretch; }
  .libros-configuracion-panel .libros-header-actions button { flex:1; }
}
@media (max-width: 390px) {
  .libros-config-level .libros-materias-list { grid-template-columns:1fr; }
}
.planos-toolbar { display:grid; grid-template-columns:max-content minmax(220px,360px) 1fr; align-items:center; gap:10px 14px; margin:10px 0; }
.planos-toolbar label, .planos-toolbar strong { color:var(--color-green); font-weight:800; }
.planos-toolbar select { width:100%; min-height:44px; padding:8px 38px 8px 11px; color:var(--color-text); font:inherit; background:#fff; border:1px solid var(--color-border); border-radius:8px; }
.planos-toolbar select:focus-visible { outline:3px solid rgba(45,122,75,.22); border-color:var(--color-green); }
.planos-mensaje { min-height:1.4em; margin:6px 0; }
.planos-visor { display:block; width:100%; height:calc(100vh - 245px); border:1px solid var(--color-border); }
.planos-preview { display:none; }
.planos-preview img { display:block; width:100%; height:auto; background:#f4f5f4; border:1px solid var(--color-border); border-radius:8px; }
.planos-paginacion { display:flex; align-items:center; justify-content:center; gap:12px; margin:10px 0; }
.planos-paginacion span { min-width:100px; text-align:center; font-weight:700; }

.datos-curso-matriculas-table-wrap [data-matriculas-orden] {
  cursor: pointer;
}

.datos-curso-matriculas-table-wrap .matriculas-cell-center {
  text-align: center;
}

.datos-curso-matriculas-table-wrap td.matriculas-cell-center .datos-curso-ver-button {
  margin-inline: auto;
}

.datos-curso-matriculas-table-wrap .matriculas-nota-cell {
  text-align: center;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

/* Tablón: foro interno del claustro */
.tablon-panel,
.tablon-detalle-panel {
  height: 100%;
  overflow-y: auto;
  padding: 2px 4px 40px;
}

.tablon-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 24px;
  padding-bottom: 22px;
  border-bottom: 1px solid var(--color-border);
}

.tablon-header h1,
.tablon-publicacion-completa h1 {
  margin: 3px 0 6px;
  color: var(--color-green);
  font-size: clamp(1.55rem, 3vw, 2.15rem);
  line-height: 1.15;
  overflow-wrap: anywhere;
}

.tablon-header p { margin: 0; color: #637067; }
.tablon-header .module-kicker { color: var(--color-orange); font-weight: 800; }
.tablon-mensaje { min-height: 22px; }
.tablon-bloque { margin-top: 28px; }
.tablon-bloque h2 { margin: 0 0 12px; color: #26382d; font-size: 1.1rem; }
.tablon-importantes { padding: 17px; background: #fbfaf3; border: 1px solid #e8dfbd; border-radius: 12px; }
.tablon-importantes h2 { color: #6e5b16; }

.tablon-tarjeta {
  margin-bottom: 10px;
  padding: 15px 17px;
  background: #fff;
  border: 1px solid var(--color-border);
  border-radius: 10px;
  cursor: pointer;
  transition: border-color 140ms ease, transform 140ms ease;
}
.tablon-tarjeta:hover, .tablon-tarjeta:focus-visible { border-color: #9dc6aa; transform: translateY(-1px); outline: none; }
.tablon-tarjeta.importante { border-left: 4px solid #c59a2a; }
.tablon-tarjeta-cabecera, .tablon-detalle-cabecera, .tablon-respuesta-cabecera, .tablon-tarjeta-pie,
.tablon-detalle-acciones, .tablon-respuesta-acciones, .tablon-form-acciones, .tablon-dialog-header {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
}
.tablon-tarjeta h3 { margin: 0; color: #22352a; font-size: 1.02rem; overflow-wrap: anywhere; }
.tablon-meta { margin: 5px 0; color: #718078; font-size: .82rem; }
.tablon-extracto { margin: 9px 0 11px; color: #39483f; line-height: 1.45; overflow-wrap: anywhere; }
.tablon-badge { flex: 0 0 auto; padding: 3px 8px; color: #715a0a; font-size: .72rem; font-weight: 800; background: #f7edc8; border-radius: 999px; }
.tablon-respuestas-contador { color: #617068; font-size: .83rem; }
.tablon-accion { padding: 4px 8px; color: var(--color-green); font-size: .78rem; background: transparent; border: 0; cursor: pointer; }
.tablon-accion:hover { text-decoration: underline; }
.tablon-accion-peligro { color: #a13b34; }
.tablon-vacio { margin: 0; padding: 15px; color: #718078; background: rgba(255,255,255,.55); border-radius: 8px; }

.tablon-volver { margin-bottom: 18px; padding: 6px 0; color: var(--color-green); background: transparent; border: 0; cursor: pointer; font-weight: 700; }
.tablon-publicacion-completa { padding: 24px; background: #fff; border: 1px solid var(--color-border); border-radius: 12px; }
.tablon-contenido-completo, .tablon-respuesta-contenido { margin: 20px 0; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }
.tablon-detalle-acciones { justify-content: flex-end; border-top: 1px solid #edf1ee; padding-top: 12px; }
.tablon-conversacion { margin-top: 25px; }
.tablon-conversacion h2 { font-size: 1.15rem; }
.tablon-respuesta { margin: 10px 0; padding: 15px 17px; background: #fff; border: 1px solid var(--color-border); border-radius: 9px; }
.tablon-respuesta-cabecera { justify-content: flex-start; flex-wrap: wrap; }
.tablon-respuesta-contenido { margin: 10px 0; }
.tablon-respuesta-acciones { justify-content: flex-end; }
.tablon-responder-form { margin-top: 20px; padding: 18px; background: var(--color-green-soft); border-radius: 10px; }
.tablon-responder-form label, .tablon-dialog label { display: grid; gap: 7px; color: #34443a; font-weight: 700; }
.tablon-responder-form textarea, .tablon-dialog textarea, .tablon-dialog input[type="text"], .tablon-dialog input:not([type]) {
  width: 100%; padding: 10px 12px; font: inherit; font-weight: 400; border: 1px solid #bfcac3; border-radius: 7px; resize: vertical;
}
.tablon-responder-form button { margin-top: 10px; }

.tablon-dialog { width: min(660px, calc(100vw - 32px)); padding: 0; border: 0; border-radius: 13px; box-shadow: 0 24px 70px rgba(20,35,26,.28); }
.tablon-dialog::backdrop { background: rgba(23,35,28,.48); }
.tablon-dialog form { display: grid; gap: 16px; padding: 24px; }
.tablon-dialog h2 { margin: 0; color: var(--color-green); }
.tablon-dialog-cerrar { padding: 0 5px; color: #617068; font-size: 1.6rem; background: transparent; border: 0; cursor: pointer; }
.tablon-importante-check { display: flex !important; grid-template-columns: auto 1fr; align-items: center; }
.tablon-form-acciones { justify-content: flex-end; }
.tablon-logo-inicio { cursor: pointer; }
.tablon-adjunto-selector { display: grid; grid-template-columns: 1fr auto; gap: 9px 12px; padding: 12px; background: #f7faf8; border: 1px solid var(--color-border); border-radius: 8px; }
.tablon-adjunto-etiqueta { display: flex; justify-content: space-between; gap: 12px; grid-column: 1 / -1; color: #34443a; font-weight: 700; }
.tablon-adjunto-etiqueta small, .tablon-archivo-seleccionado small { color: #718078; font-weight: 500; }
.tablon-adjunto-selector > .secondary-button { justify-self: start; }
.tablon-archivo-seleccionado { display: flex; align-items: center; justify-content: space-between; gap: 12px; grid-column: 1 / -1; min-width: 0; padding-top: 7px; border-top: 1px solid #dde6e0; }
.tablon-archivo-seleccionado[hidden] { display: none; }
.tablon-archivo-seleccionado > div:first-child { display: grid; min-width: 0; }
.tablon-archivo-seleccionado strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tablon-archivo-acciones { display: flex; gap: 7px; flex: 0 0 auto; }
.tablon-adjunto-enlace { display: block; max-width: 100%; overflow: hidden; text-align: left; text-overflow: ellipsis; white-space: nowrap; }
.tablon-adjunto-detalle { display: flex; align-items: center; gap: 12px; margin: 18px 0 0; padding: 12px 14px; background: #f7faf8; border: 1px solid var(--color-border); border-radius: 8px; }
.tablon-adjunto-detalle span { min-width: 0; overflow-wrap: anywhere; }
.tablon-adjunto-detalle .tablon-accion { margin-left: auto; }

@media (max-width: 720px) {
  .tablon-header { align-items: stretch; flex-direction: column; }
  .tablon-importantes { padding: 11px; }
  .tablon-publicacion-completa { padding: 17px; }
  .tablon-detalle-cabecera { align-items: flex-start; }
  .tablon-archivo-seleccionado, .tablon-adjunto-detalle { align-items: flex-start; flex-direction: column; }
  .tablon-adjunto-detalle .tablon-accion { margin-left: 0; }
}

/* DACE comparte controles, botones y tarjetas del sistema visual de ViñaNet. */
.dace-panel { height: 100%; padding: 2px 4px 45px; overflow-y: auto; }
.dace-header { padding-bottom: 18px; border-bottom: 1px solid var(--color-border); }
.dace-header h1 { margin: 3px 0 5px; color: var(--color-green); font-size: 2rem; }
.dace-header p { margin: 0; color: #637067; }
.dace-header .module-kicker { color: var(--color-orange); font-weight: 800; }
.dace-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin: 18px 0; }
.dace-calendar-button { display: inline-flex; align-items: center; gap: 7px; min-height: 40px; margin-left: auto; }
.dace-tabs button.active { color: #fff; background: var(--color-green); border-color: var(--color-green); }
.dace-form { display: grid; gap: 16px; }
.dace-form-bloque { display: grid; gap: 13px; margin: 0; padding: 18px; background: #fff; border: 1px solid var(--color-border); border-radius: 10px; }
.dace-form-bloque legend { padding: 0 7px; color: var(--color-green); font-size: 1rem; font-weight: 900; }
.dace-form-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 13px; }
.dace-campo { display: grid; align-content: start; gap: 6px; min-width: 0; color: #34443a; font-size: .86rem; font-weight: 800; }
.dace-campo input, .dace-campo select, .dace-campo textarea, .dace-form > fieldset > input[type="search"], .dace-filtros input, .dace-filtros select {
  width: 100%; min-height: 38px; padding: 8px 10px; color: var(--color-text); font: inherit; font-weight: 400; background: #fff; border: 1px solid #bdc9c1; border-radius: 7px;
}
.dace-campo textarea { min-height: 95px; resize: vertical; }
.dace-campo small { color: #718078; font-weight: 500; }
.dace-selector-lista { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 6px; max-height: 210px; padding: 9px; overflow-y: auto; background: #f8faf9; border: 1px solid #dde5df; border-radius: 7px; }
.dace-lista-grande, .dace-alumnado-selector { max-height: 285px; }
.dace-check { display: flex; align-items: flex-start; gap: 7px; padding: 6px; font-size: .84rem; font-weight: 600; border-radius: 6px; }
.dace-check:hover { background: var(--color-green-soft); }
.dace-check input { width: auto; min-height: 0; margin-top: 2px; }
.dace-grupos-acciones { display: flex; flex-wrap: wrap; gap: 7px; }
.dace-alumnado-selector { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 5px; overflow-y: auto; }
.dace-recuentos, .dace-duracion { margin: 0; padding: 9px 11px; color: var(--color-green); font-weight: 800; background: var(--color-green-soft); border-radius: 7px; }
.dace-ayuda { margin: 0; color: #637067; font-size: .84rem; }
.dace-form-acciones { gap: 9px; }
.dace-vacio { margin: 0; padding: 16px; color: #718078; background: #f8faf9; border-radius: 8px; }
.dace-filtros { display: grid; grid-template-columns: 2fr repeat(4, minmax(120px, 1fr)) auto; gap: 8px; margin-bottom: 16px; }
.dace-filtros button { min-height: 38px; padding: 8px 14px; color: #fff; font: inherit; font-weight: 800; background: var(--color-green); border: 1px solid var(--color-green); border-radius: 8px; cursor: pointer; }
.dace-listado { display: grid; gap: 10px; }
.dace-actividades-table { width: 100%; border-collapse: collapse; background: #fff; border: 1px solid var(--color-border); }
.dace-actividades-table th, .dace-actividades-table td { padding: 11px; text-align: left; vertical-align: top; border-bottom: 1px solid var(--color-border); }
.dace-actividades-table th { color: var(--color-green); background: var(--color-green-soft); }
.dace-table-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.absence-confirmation-summary { display: grid; gap: 9px; }
.absence-confirmation-summary > div { display: grid; grid-template-columns: minmax(130px, .35fr) 1fr; gap: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--color-border); }
.dace-actividad-card { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 15px 17px; background: #fff; border: 1px solid var(--color-border); border-radius: 9px; }
.dace-actividad-card h3 { margin: 0 0 5px; color: #26382d; }
.dace-actividad-card p { margin: 4px 0; }
.dace-meta { color: #718078; font-size: .82rem; }
.dace-detalle { padding: 20px; background: #fff; border: 1px solid var(--color-border); border-radius: 10px; }
.dace-detalle h2 { color: var(--color-green); }
.dace-detalle h3 { margin: 22px 0 7px; color: #33483a; }
.dace-detalle-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 18px 0; }
.dace-detalle-grid > div { display: grid; gap: 3px; padding: 10px; background: #f8faf9; border-radius: 7px; }
.dace-texto { white-space: pre-wrap; overflow-wrap: anywhere; }
.dace-contexto-item { display: grid; gap: 4px; padding: 9px 0; border-bottom: 1px solid var(--color-border); }
.dace-contexto-item:last-child { border-bottom: 0; }
.dace-contexto-item span { color: #66736b; font-size: .8rem; }
.dace-contexto-item button { justify-self: start; margin-top: 4px; }
.dace-alumnado-modal-card { width: min(850px, calc(100vw - 40px)); }
.dace-modal-bloque + .dace-modal-bloque { margin-top: 22px; padding-top: 16px; border-top: 1px solid var(--color-border); }
.dace-modal-bloque h3 { color: var(--color-green); }
.dace-modal-bloque h4 { margin: 12px 0 4px; color: #44574a; }
.dace-modal-bloque p { margin: 0; line-height: 1.5; }

@media (max-width: 980px) {
  .dace-form-grid, .dace-detalle-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dace-filtros { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 650px) {
  .dace-form-grid, .dace-detalle-grid, .dace-filtros { grid-template-columns: 1fr; }
  .dace-tabs { display: grid; grid-template-columns: 1fr 1fr; }
  .dace-calendar-button { margin-left: 0; }
  .dace-actividades-table, .dace-actividades-table tbody, .dace-actividades-table tr, .dace-actividades-table td { display: block; width: 100%; }
  .dace-actividades-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .dace-actividades-table tr { padding: 10px; border-bottom: 1px solid var(--color-border); }
  .dace-actividades-table td { padding: 5px; border: 0; overflow-wrap: anywhere; }
  .dace-actividades-table td::before { display: block; color: var(--color-green); font-size: .75rem; font-weight: 800; }
  .dace-actividades-table td:nth-child(1)::before { content: "Actividad"; }
  .dace-actividades-table td:nth-child(2)::before { content: "Fecha"; }
  .dace-actividades-table td:nth-child(3)::before { content: "Lugar y grupos"; }
  .dace-actividades-table td:nth-child(4)::before { content: "Estado"; }
  .dace-actividades-table td:nth-child(5)::before { content: "Acciones"; }
  .absence-confirmation-summary > div { grid-template-columns: 1fr; gap: 2px; }
  .dace-actividad-card { align-items: flex-start; flex-direction: column; }
}

.course-chip-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.course-chip {
  display: inline-flex;
  align-items: center;
  max-width: 100%;
  padding: 6px 9px;
  color: #1f3b2a;
  font-size: 0.82rem;
  font-weight: 800;
  line-height: 1.25;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.course-chip-empty {
  color: var(--color-muted);
  background: #f3f4f6;
}

.admin-link-button {
  text-decoration: none;
}

.datos-curso-panel {
  inset: 28px;
  width: auto;
  max-height: calc(100% - 56px);
}

.datos-curso-card {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  height: 100%;
  min-height: 0;
  overflow: hidden;
}

.datos-curso-compact-title {
  margin: 0;
  color: var(--color-green);
  font-size: 1rem;
  line-height: 1.25;
}

.datos-curso-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--color-border);
}

.datos-curso-content {
  min-height: 0;
  overflow: auto;
  padding-right: 4px;
}

.datos-curso-tab-section {
  display: grid;
  gap: 14px;
  min-width: 0;
}

.datos-curso-table-wrap {
  max-height: none;
  overflow: auto;
}

.datos-curso-table {
  min-width: 860px;
}

.datos-curso-equipo-table-wrap {
  min-height: 360px;
  max-height: none;
  overflow-x: auto;
  overflow-y: visible;
}

.datos-curso-equipo-table {
  min-width: 860px;
}

.datos-curso-table a {
  color: var(--color-green);
  font-weight: 900;
}

.datos-curso-grupos-table {
  min-width: 1720px;
  table-layout: fixed;
}

.datos-curso-grupos-table th:nth-child(1),
.datos-curso-grupos-table td:nth-child(1) {
  width: 78px;
}

.datos-curso-grupos-table th:nth-child(2),
.datos-curso-grupos-table td:nth-child(2) {
  width: 56px;
  text-align: center;
}

.datos-curso-grupos-table th:nth-child(3),
.datos-curso-grupos-table td:nth-child(3) {
  width: 74px;
  text-align: center;
}

.datos-curso-grupos-table th:nth-child(4),
.datos-curso-grupos-table td:nth-child(4) {
  width: 82px;
}

.datos-curso-grupos-table th:nth-child(5),
.datos-curso-grupos-table td:nth-child(5) {
  width: 110px;
}

.datos-curso-grupos-table th:nth-child(6),
.datos-curso-grupos-table td:nth-child(6) {
  width: 500px;
}

.datos-curso-grupos-table th:nth-child(7),
.datos-curso-grupos-table td:nth-child(7) {
  width: 650px;
}

.datos-curso-grupos-table th:nth-child(8),
.datos-curso-grupos-table td:nth-child(8) {
  width: 105px;
}

.datos-curso-carga-table {
  min-width: 860px;
}

.datos-curso-claustro-table {
  min-width: 1120px;
}

.datos-curso-claustro-cell {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
}

.datos-curso-claustro-select,
.datos-curso-claustro-hours {
  min-height: 34px;
  padding: 6px 8px;
  border: 1px solid var(--color-border);
  border-radius: 7px;
  background: #fff;
  color: var(--color-text);
  font: inherit;
}

.datos-curso-claustro-select {
  width: min(100%, 260px);
}

.datos-curso-claustro-hours {
  width: 82px;
}

.datos-curso-mini-button {
  min-height: 30px;
  padding: 4px 9px;
}

.datos-curso-inline-note {
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
}

.datos-curso-oferta-table {
  min-width: 760px;
}

#datos-curso-tab-oferta .datos-curso-filterbar {
  align-items: end;
}

#datos-curso-tab-oferta .datos-curso-filter-actions {
  margin-left: auto;
}

#datos-curso-tab-oferta .datos-curso-offer-section,
#datos-curso-tab-oferta .datos-curso-table-wrap {
  height: auto;
  min-height: auto;
  max-height: none;
  overflow-y: visible;
}

#datos-curso-tab-oferta .datos-curso-table-wrap {
  overflow-x: auto;
}

#datos-curso-tab-oferta .datos-curso-comunes-wrap {
  height: auto;
  min-height: fit-content;
  max-height: none;
  overflow-x: auto;
  overflow-y: visible;
}

#datos-curso-tab-oferta .datos-curso-matricula-blocks {
  align-items: stretch;
}

.datos-curso-itinerarios-table {
  min-width: 1120px;
}

.datos-curso-offer-grid {
  display: grid;
  gap: 14px;
  min-width: 0;
}

.datos-curso-offer-section {
  min-width: 0;
}

.datos-curso-matricula-blocks {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 10px;
}

.datos-curso-matricula-card {
  display: grid;
  gap: 8px;
  align-content: start;
  min-width: 0;
  padding: 12px;
  background: #f7fbf8;
  border: 1px solid #dcebe0;
  border-left: 4px solid var(--color-green);
  border-radius: 8px;
}

.datos-curso-matricula-card.special {
  background: #fffaf1;
  border-color: #ead7ad;
  border-left-color: var(--color-orange);
}

.datos-curso-matricula-card.diversity {
  background: #f6f8fc;
  border-color: #d9e0ee;
  border-left-color: #42649b;
}

.datos-curso-matricula-card h4 {
  margin: 0;
  color: var(--color-green);
  font-size: 0.92rem;
  line-height: 1.25;
}

.datos-curso-matricula-card ul {
  display: grid;
  gap: 5px;
  margin: 0;
  padding-left: 18px;
}

.datos-curso-matricula-card li {
  font-size: 0.88rem;
  font-weight: 800;
  line-height: 1.3;
}

.datos-curso-matricula-card p,
.datos-curso-info-text {
  margin: 0;
  color: var(--color-muted);
  font-size: 0.84rem;
  font-weight: 700;
  line-height: 1.45;
}

.datos-curso-info-text {
  margin-top: 10px;
}

.datos-curso-matriculas-layout {
  display: grid;
  gap: 14px;
  min-width: 0;
}

.datos-curso-matriculas-table-wrap {
  min-height: 360px;
  max-height: 58vh;
  overflow: auto;
}

.datos-curso-inline-actions {
  justify-content: flex-end;
  margin: -4px 0 10px;
}

.datos-curso-matriculas-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 12px;
  align-items: start;
}

.datos-curso-matricula-profile-card {
  display: grid;
  gap: 10px;
  min-width: 0;
  padding: 12px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-left: 4px solid var(--color-green);
  border-radius: 8px;
}

.datos-curso-matricula-profile-card h4 {
  margin: 0;
  color: var(--color-green);
  font-size: 0.94rem;
  line-height: 1.25;
}

.datos-curso-matricula-profile-section {
  display: grid;
  gap: 6px;
  min-width: 0;
}

.datos-curso-matricula-profile-section strong {
  color: var(--color-text);
  font-size: 0.82rem;
}

.datos-curso-matricula-profile-section ul,
.datos-curso-matriculas-incidencias ul {
  display: grid;
  gap: 5px;
  margin: 0;
  padding-left: 18px;
}

.datos-curso-matricula-profile-section li,
.datos-curso-matriculas-incidencias li {
  color: var(--color-text);
  font-size: 0.84rem;
  font-weight: 800;
  line-height: 1.35;
}

.datos-curso-offer-type {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 3px 8px;
  color: var(--color-green);
  font-size: 0.78rem;
  font-weight: 900;
  background: var(--color-green-soft);
  border: 1px solid #d8eadc;
  border-radius: 7px;
}

.datos-curso-offer-type.religion {
  color: #5f3b1f;
  background: #fff4e1;
  border-color: #edd9b6;
}

.datos-curso-offer-type.review {
  color: #8a4a00;
  background: #fff5df;
  border-color: #e9d19f;
}

.datos-curso-block-list {
  display: grid;
  gap: 5px;
  min-width: 0;
}

.datos-curso-inline-matricula {
  display: grid;
  gap: 8px;
  min-width: 280px;
  max-width: none;
}

.datos-curso-inline-links {
  display: grid;
  gap: 8px;
  min-width: 380px;
  max-width: none;
}

.datos-curso-inline-block {
  display: grid;
  grid-template-columns: 28px minmax(0, 1fr);
  gap: 7px;
  align-items: start;
  padding: 6px 7px;
  background: #f7fbf8;
  border: 1px solid #dcebe0;
  border-radius: 7px;
}

.datos-curso-inline-block-label {
  display: inline-grid;
  width: 24px;
  height: 24px;
  place-items: center;
  color: var(--color-green);
  font-size: 0.74rem;
  font-weight: 900;
  background: #ffffff;
  border: 1px solid #cfe3d5;
  border-radius: 999px;
}

.datos-curso-inline-options {
  display: grid;
  gap: 4px;
  min-width: 0;
}

.datos-curso-inline-check {
  display: grid;
  grid-template-columns: 16px minmax(0, 1fr);
  gap: 7px;
  align-items: start;
  min-height: 22px;
  color: var(--color-text);
  font-size: 0.78rem;
  font-weight: 800;
  line-height: 1.25;
}

.datos-curso-inline-check input {
  width: 15px;
  height: 15px;
  margin: 1px 0 0;
  accent-color: var(--color-green);
}

.datos-curso-inline-check span {
  min-width: 0;
  overflow-wrap: anywhere;
}

.datos-curso-inline-link-block {
  background: #fbfdfb;
}

.datos-curso-associated-line {
  display: grid;
  grid-template-columns: minmax(150px, 1fr) minmax(170px, 1.1fr);
  gap: 8px;
  align-items: center;
  min-height: 22px;
}

.datos-curso-associated-materia {
  min-width: 0;
  color: var(--color-muted);
  font-size: 0.74rem;
  font-weight: 800;
  line-height: 1.2;
  overflow-wrap: anywhere;
}

.datos-curso-associated-select {
  width: 100%;
  min-height: 26px;
  padding: 3px 6px;
  color: var(--color-text);
  font: inherit;
  font-size: 0.74rem;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 6px;
}

.datos-curso-associated-control {
  display: grid;
  gap: 3px;
  min-width: 0;
}

.datos-curso-associated-summary {
  min-width: 0;
  color: var(--color-green);
  font-size: 0.74rem;
  font-weight: 900;
  line-height: 1.15;
  white-space: normal;
  overflow-wrap: anywhere;
}

.datos-curso-associated-select:disabled {
  color: #87948c;
  background: #f2f5f3;
}

.datos-curso-group-actions {
  display: grid;
  gap: 6px;
  align-content: start;
}

.datos-curso-validation-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 24px;
  padding: 3px 7px;
  font-size: 0.68rem;
  font-weight: 900;
  line-height: 1.15;
  text-align: center;
  border-radius: 999px;
}

.datos-curso-validation-badge.pendiente {
  color: #5f3b1f;
  background: #fff4df;
  border: 1px solid #ead1a0;
}

.datos-curso-validation-badge.validado {
  color: #ffffff;
  background: var(--color-green);
  border: 1px solid #23633c;
}

.datos-curso-validation-badge.modificado {
  color: #7c3200;
  background: #ffe6cf;
  border: 1px solid #e2ad7f;
}

.datos-curso-validate-button {
  color: #ffffff !important;
  background: var(--color-green) !important;
  border-color: #23633c !important;
}

.datos-curso-remove-load-button {
  color: #7c3200 !important;
  background: #fff4e8 !important;
  border-color: #e2ad7f !important;
}

.datos-curso-remove-load-button:disabled {
  cursor: not-allowed;
  opacity: 0.48;
}

.datos-curso-block-line {
  display: grid;
  grid-template-columns: 68px minmax(0, 1fr) auto;
  align-items: start;
  gap: 7px;
  min-height: 25px;
  padding: 4px 6px;
  background: #f7fbf8;
  border: 1px solid #dcebe0;
  border-radius: 6px;
}

.datos-curso-block-line.review {
  background: #fff7e8;
  border-color: #ead2a4;
}

.datos-curso-block-label {
  color: var(--color-green);
  font-size: 0.74rem;
  font-weight: 900;
  white-space: nowrap;
}

.datos-curso-block-text {
  min-width: 0;
  overflow-wrap: anywhere;
  font-size: 0.78rem;
  font-weight: 800;
  line-height: 1.25;
}

.datos-curso-review-badge {
  align-self: center;
  padding: 2px 6px;
  color: #8a4a00;
  font-size: 0.68rem;
  font-weight: 900;
  background: #ffe8b6;
  border: 1px solid #e5bf73;
  border-radius: 999px;
}

.datos-curso-union-list .datos-curso-block-line {
  grid-template-columns: 68px minmax(0, 1fr);
}

.datos-curso-table thead th,
.datos-curso-detail-table thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  color: #ffffff;
  background: var(--color-green);
  border-bottom-color: #23633c;
  text-align: center;
}

.datos-curso-filterbar {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}

.datos-curso-filter-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-left: auto;
}

.datos-curso-group-summary {
  display: flex;
  align-items: center;
  gap: 10px;
}

.datos-curso-group-summary-item {
  display: grid;
  gap: 6px;
  min-width: 168px;
  color: var(--color-muted);
  font-size: 0.84rem;
  font-weight: 800;
}

.datos-curso-group-summary-item span {
  white-space: nowrap;
}

.datos-curso-group-summary-item strong {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 38px;
  padding: 7px 10px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #f5f7f6;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.incidencias-menu-final { margin-top: 0; }
.incidencias-operativas-layout { display: grid; gap: 18px; padding: 18px; }
.incidencias-operativas-layout .incidencias-card { padding: 18px; }
.incidencias-operativas-layout form { display: grid; gap: 14px; }
.incidencias-operativas-layout select { width: 100%; min-height: 42px; padding: 8px 38px 8px 11px; color: var(--color-text); font: inherit; background: #fff; border: 1px solid var(--color-border); border-radius: 8px; }
.incidencias-operativas-layout select:focus-visible { outline: 3px solid rgba(45, 122, 75, .22); border-color: var(--color-green); }
.incidencias-submit-actions { display: flex; justify-content: flex-end; }
.incidencias-submit-actions button { width: auto; min-width: 150px; }
.registro-docente-label { display: grid; grid-template-columns: max-content minmax(220px, 420px); align-items: center; gap: 10px; margin: 12px 0 16px; }
.registro-docente-label select { width: 100%; min-height: 42px; padding: 8px 38px 8px 11px; color: var(--color-text); font: inherit; background: #fff; border: 1px solid var(--color-border); border-radius: 8px; }
.registro-docente-label select:focus-visible { outline: 3px solid rgba(45, 122, 75, .22); border-color: var(--color-green); }
.registro-filtros { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 22px; margin: 12px 0 16px; }
.registro-filtros .registro-docente-label { margin: 0; }
.registro-tecnicas-check { display: inline-flex; align-items: center; gap: 8px; color: var(--color-text); font-size: .94rem; }
.registro-tecnicas-check input { width: 18px; height: 18px; accent-color: var(--color-green); }
.planos-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.incidencias-operativas-table-wrap { max-height: 55vh; overflow: auto; }
.incidencias-operativas-table-wrap th { position: sticky; top: 0; z-index: 1; }
.incidencia-descripcion { min-width: 260px; max-width: 520px; white-space: pre-wrap; overflow-wrap: anywhere; }
.incidencia-estado { font-weight: 700; }
.incidencia-estado.pendiente { color: #9a5b00; }
.incidencia-estado.resuelta { color: #237044; }
.incidencia-resuelta { background: #edf7f0; color: #55645a; }

@media (max-width: 900px) {
  .datos-curso-group-summary { order: 3; }
  .datos-curso-filterbar > label[for="datos-curso-grupos-buscar"] { order: 4; }
  .datos-curso-filter-actions { order: 5; margin-left: 0; }
}

.datos-curso-filterbar input,
.datos-curso-filterbar select {
  min-height: 36px;
}

.datos-curso-ver-button {
  min-height: 30px;
  padding: 5px 9px;
  font-size: 0.82rem;
}

.datos-curso-detail {
  position: absolute;
  inset: 10px;
  z-index: 8;
  display: grid;
  min-width: 0;
  background: rgba(248, 251, 249, 0.84);
}

.datos-curso-detail[hidden] {
  display: none;
}

.datos-curso-detail-card {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  padding: 14px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-left: 4px solid var(--color-green);
  border-radius: 8px;
  box-shadow: 0 18px 44px rgba(31, 46, 38, 0.16);
}

.datos-curso-detail-card h3 {
  margin: 4px 0 0;
  font-size: 1.08rem;
}

.datos-curso-detail-body {
  min-height: 0;
  overflow: auto;
}

.datos-curso-detail-stack {
  display: grid;
  gap: 14px;
}

.datos-curso-load-detail {
  min-height: 100%;
  grid-template-rows: auto minmax(420px, 1fr) auto;
}

.datos-curso-detail-table-wrap {
  max-height: min(62vh, 680px);
  overflow: auto;
}

.datos-curso-load-detail-table-wrap {
  min-height: 420px;
  height: clamp(420px, 58vh, 760px);
  max-height: none;
  overflow: auto;
}

.datos-curso-detail-table {
  min-width: 1180px;
}

.datos-curso-assignments-panel {
  min-height: 100%;
}

.datos-curso-assignments-wrap {
  min-height: 460px;
  max-height: min(70vh, 780px);
}

.datos-curso-assignments-table {
  min-width: 1320px;
}

.datos-curso-subjects-dept-wrap {
  min-height: 420px;
  max-height: min(64vh, 720px);
  overflow: auto;
}

.datos-curso-subjects-dept-table {
  min-width: 1040px;
}

.datos-curso-assignment-inputs {
  display: grid;
  gap: 6px;
  min-width: 260px;
}

.datos-curso-assignment-line {
  display: grid;
  grid-template-columns: minmax(150px, 1fr) 76px;
  gap: 8px;
  align-items: center;
  color: var(--color-text);
  font-size: 0.78rem;
  font-weight: 800;
}

.datos-curso-assignment-line input {
  min-height: 28px;
  padding: 4px 6px;
  border: 1px solid var(--color-border);
  border-radius: 6px;
}

.datos-curso-assignment-total {
  color: var(--color-green);
  font-weight: 900;
  text-align: right;
}

.datos-curso-assignments-table textarea {
  width: 100%;
  min-height: 72px;
  resize: vertical;
  padding: 6px 8px;
  font: inherit;
  font-size: 0.8rem;
  border: 1px solid var(--color-border);
  border-radius: 7px;
}

.datos-curso-reduction-line {
  display: grid;
  grid-template-columns: minmax(190px, 1fr) 90px minmax(220px, 1.3fr) auto;
  gap: 8px;
  align-items: center;
}

.datos-curso-reduction-line select,
.datos-curso-reduction-line input {
  min-height: 36px;
  padding: 7px 9px;
  border: 1px solid var(--color-border);
  border-radius: 7px;
}

.datos-curso-editor-form {
  display: grid;
  gap: 14px;
}

.datos-curso-editor-form > label {
  display: grid;
  gap: 6px;
  color: var(--color-text);
  font-size: 0.86rem;
  font-weight: 900;
}

.datos-curso-editor-form input[type="number"],
.datos-curso-editor-form input[type="text"] {
  min-height: 36px;
  padding: 7px 9px;
  border: 1px solid var(--color-border);
  border-radius: 7px;
}

.datos-curso-editor-block {
  margin: 0;
}

.datos-curso-checkbox-line {
  display: flex !important;
  grid-template-columns: none !important;
  align-items: center;
  gap: 8px !important;
  min-height: 30px;
  padding: 5px 0;
  color: var(--color-text);
  font-size: 0.88rem;
  font-weight: 800;
}

.datos-curso-checkbox-line input {
  width: 16px;
  height: 16px;
  accent-color: var(--color-green);
}

.datos-curso-compatible-box {
  display: grid;
  gap: 6px;
  padding: 10px;
  background: #f7fbf8;
  border: 1px solid #dcebe0;
  border-radius: 8px;
}

.datos-curso-compatible-box h4 {
  margin: 0;
  color: var(--color-green);
  font-size: 0.9rem;
}

.datos-curso-compatible-box p {
  margin: 0;
  color: var(--color-muted);
  font-size: 0.84rem;
  font-weight: 800;
}

.course-future-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.docentes-table {
  min-width: 1520px;
}

.docentes-table-wrap {
  height: calc(100% - 86px);
}

.docentes-table th,
.docentes-table td {
  vertical-align: middle;
}

.docentes-table th {
  color: #ffffff;
  background: #1A7F37;
  text-align: center;
}

.docentes-table .number-cell {
  text-align: center;
}

.docentes-table td:nth-child(n+5) {
  text-align: center;
}

.docente-cargos-cell {
  min-width: 150px;
  line-height: 1.3;
  white-space: pre-line;
}

.docente-name-cell {
  min-width: 220px;
}

.docente-current-name {
  display: block;
  color: var(--color-text);
  font-size: 0.86rem;
  font-weight: 900;
}

.docente-substitution-line {
  display: block;
  margin-top: 3px;
  color: var(--color-text);
  font-size: 0.76rem;
  font-weight: 800;
  line-height: 1.2;
}

.docente-photo-cell {
  min-width: 64px;
}

.docente-photo-cell img,
.docente-avatar-placeholder {
  display: inline-block;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  object-fit: cover;
  vertical-align: middle;
}

.docente-avatar-placeholder {
  position: relative;
  background: #e8efeb;
  border: 1px solid #cfdad3;
}

.docente-avatar-placeholder::before {
  position: absolute;
  top: 7px;
  left: 12px;
  width: 12px;
  height: 12px;
  content: "";
  background: #7f9187;
  border-radius: 50%;
}

.docente-avatar-placeholder::after {
  position: absolute;
  right: 8px;
  bottom: 7px;
  left: 8px;
  height: 13px;
  content: "";
  background: #7f9187;
  border-radius: 12px 12px 8px 8px;
}

.docente-groups-cell {
  max-width: 320px;
  color: var(--color-muted);
  font-size: 0.78rem;
  line-height: 1.35;
}

.table-select {
  width: 100%;
  min-width: 190px;
  min-height: 32px;
  padding: 5px 7px;
  color: var(--color-text);
  font: inherit;
  font-size: 0.8rem;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 7px;
}

.info-select {
  width: auto;
  min-width: 92px;
}

.table-checkbox {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--color-text);
  font-size: 0.8rem;
  font-weight: 800;
}

.table-checkbox input {
  accent-color: var(--color-green);
}

.docente-status {
  font-weight: 900;
}

.docente-status.sustituido,
.docente-status.inactivo {
  color: #9f1d1d;
}

.docente-status.sustituto {
  color: var(--color-green);
}

.table-action-button {
  min-height: 30px;
  padding: 5px 8px;
  color: var(--color-green);
  font: inherit;
  font-size: 0.78rem;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 7px;
  cursor: pointer;
}

.table-action-button:hover {
  background: var(--color-green-soft);
  border-color: #cfe3d5;
}

#equipos-docentes-panel .ranking-table th:nth-child(3),
#equipos-docentes-panel .ranking-table td:nth-child(3) {
  text-align: center;
}

.libro-claustro-panel {
  overflow-y: auto;
}

.libro-claustro-header {
  align-items: start;
}

.info-docente-photo {
  display: flex;
  justify-content: center;
  margin: 2px 0 20px;
}

.info-docente-photo img,
.info-docente-placeholder {
  display: block;
  width: 152px;
  height: 152px;
  object-fit: cover;
  border: 3px solid #ffffff;
  border-radius: 50%;
  box-shadow: 0 0 0 1px var(--color-border), 0 7px 20px rgba(39, 51, 45, 0.14);
}

.info-docente-placeholder::before {
  top: 35px;
  left: 55px;
  width: 40px;
  height: 40px;
}

.info-docente-placeholder::after {
  right: 29px;
  bottom: 29px;
  left: 29px;
  height: 46px;
  border-radius: 42px 42px 24px 24px;
}

@media (max-width: 600px) {
  .info-docente-photo {
    margin-bottom: 16px;
  }

  .info-docente-photo img,
  .info-docente-placeholder {
    width: 128px;
    height: 128px;
  }

  .info-docente-placeholder::before {
    top: 29px;
    left: 46px;
    width: 34px;
    height: 34px;
  }

  .info-docente-placeholder::after {
    right: 24px;
    bottom: 24px;
    left: 24px;
    height: 40px;
  }
}

.libro-claustro-header h2 {
  margin: 0;
  color: var(--color-green);
  font-size: 1.24rem;
  font-weight: 900;
  letter-spacing: 0;
}

#exportar-libro-claustro-pdf:disabled {
  cursor: wait;
  opacity: 0.7;
}
.table-action-cell { text-align: center; }
.compact-dialog { max-width: 430px; }
.danger-action { color: #8b1e1e; border-color: #c98f8f; }

.libro-claustro-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
  margin-top: 18px;
  padding-bottom: 20px;
}

.libro-claustro-grid[data-vista="departamentos"] { display: block; }
.libro-claustro-department-section { margin: 0 0 24px; }
.libro-claustro-department-title { margin: 18px 0 10px; padding-bottom: 7px; color: var(--color-green); border-bottom: 2px solid var(--color-green-soft); }
.libro-claustro-department-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.libro-claustro-grid[data-tamano="compacto"] .libro-claustro-department-grid,
.libro-claustro-grid[data-tamano="compacto"][data-vista="alfabetica"] { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.libro-claustro-grid[data-tamano="medio"] .libro-claustro-department-grid,
.libro-claustro-grid[data-tamano="medio"][data-vista="alfabetica"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.libro-claustro-grid[data-tamano="grande"] .libro-claustro-department-grid,
.libro-claustro-grid[data-tamano="grande"][data-vista="alfabetica"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.libro-claustro-grid[data-tamano="compacto"] .libro-claustro-card { min-height: 178px; padding: 10px; }
.libro-claustro-grid[data-tamano="compacto"] .libro-claustro-photo,
.libro-claustro-grid[data-tamano="compacto"] .libro-claustro-photo img,
.libro-claustro-grid[data-tamano="compacto"] .libro-claustro-avatar { width: 64px; height: 64px; }
.libro-claustro-grid[data-tamano="medio"] .libro-claustro-photo,
.libro-claustro-grid[data-tamano="medio"] .libro-claustro-photo img,
.libro-claustro-grid[data-tamano="medio"] .libro-claustro-avatar { width: 118px; height: 118px; }
.libro-claustro-grid[data-tamano="grande"] .libro-claustro-photo,
.libro-claustro-grid[data-tamano="grande"] .libro-claustro-photo img,
.libro-claustro-grid[data-tamano="grande"] .libro-claustro-avatar { width: 150px; height: 150px; }

.libro-claustro-card {
  display: grid;
  justify-items: center;
  align-content: start;
  min-height: 226px;
  padding: 16px 12px 14px;
  text-align: center;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: 0 10px 26px rgba(31, 46, 38, 0.06);
}

.libro-claustro-photo {
  display: grid;
  width: 94px;
  height: 94px;
  margin-bottom: 12px;
  place-items: center;
}

.libro-claustro-photo img,
.libro-claustro-avatar {
  display: block;
  width: 94px;
  height: 94px;
  border-radius: 50%;
  object-fit: cover;
}

.libro-claustro-avatar {
  position: relative;
  background: #e8efeb;
  border: 1px solid #cfdad3;
}

.libro-claustro-avatar::before {
  position: absolute;
  top: 18px;
  left: 34px;
  width: 24px;
  height: 24px;
  content: "";
  background: #7f9187;
  border-radius: 50%;
}

.libro-claustro-avatar::after {
  position: absolute;
  right: 20px;
  bottom: 18px;
  left: 20px;
  height: 32px;
  content: "";
  background: #7f9187;
  border-radius: 28px 28px 14px 14px;
}

.libro-claustro-card h3 {
  margin: 0;
  color: var(--color-text);
  font-size: 0.95rem;
  font-weight: 900;
  line-height: 1.2;
}

.libro-claustro-department {
  margin: 7px 0 0;
  color: var(--color-green);
  font-size: 0.82rem;
  font-weight: 900;
  line-height: 1.2;
}

.libro-claustro-roles {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 5px;
  margin-top: 9px;
}

.libro-claustro-roles span {
  max-width: 100%;
  padding: 3px 7px;
  color: var(--color-muted);
  font-size: 0.72rem;
  font-weight: 800;
  line-height: 1.2;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 999px;
}

.secondary-button {
  min-height: 34px;
  padding: 7px 10px;
  color: var(--color-green);
  font: inherit;
  font-size: 0.82rem;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.secondary-button:hover {
  background: var(--color-green-soft);
  border-color: #cfe3d5;
}

.secondary-table-action {
  color: var(--color-muted);
}

.table-actions-cell {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 190px;
}

.tutores-grupo-table {
  min-width: 760px;
}

.planes-proyectos-table {
  min-width: 980px;
}

.planes-proyectos-table-wrap {
  height: calc(100% - 110px);
}

.plan-participant-count { text-align: center; font-weight: 800; }
.planes-proyectos-table .plan-centered-column,
.planes-proyectos-table .plan-centered-cell { text-align: center; }
.planes-proyectos-table .plan-centered-cell > button,
.planes-proyectos-table .plan-centered-cell > a { margin-inline: auto; }
.planes-proyectos-table td:nth-child(4), .planes-proyectos-table td:nth-child(5), .planes-proyectos-table td:nth-child(6) { min-width: 150px; }
.planes-proyectos-table td a.table-action-button { display: inline-block; text-decoration: none; margin: 2px; }
.planes-proyectos-table .plan-mobile-toggle-cell { display: none; }
.planes-form { display: grid; gap: 14px; }
.planes-form .teacher-select-label { display: grid; gap: 6px; }
.planes-form .guard-detail-list li { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.planes-modal-card { width: min(94vw, 680px); }

.clickable-row {
  cursor: pointer;
}

.clickable-row:hover,
.clickable-row:focus {
  background: var(--color-green-soft);
  outline: none;
}

#grupos-alumnos-panel {
  display: flex;
  flex-direction: column;
}

#grupos-alumnos-panel[hidden] {
  display: none;
}

.grupos-alumnos-tabs {
  display: flex;
  flex: 1 1 auto;
  flex-wrap: wrap;
  margin: 0;
}

.grupos-alumnos-toolbar {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px 24px;
  margin: 4px 0 14px;
}

.global-student-results {
  display: grid;
  gap: 0.35rem;
  margin-top: 0.45rem;
  max-height: 18rem;
  overflow-y: auto;
}

.global-student-result {
  width: 100%;
  text-align: left;
  white-space: normal;
}

.checkbox-line {
  display: flex;
  align-items: center;
  gap: 0.55rem;
}

@media (max-width: 700px) {
  #grupos-alumnos-panel,
  .alumno-ficha-panel,
  .alumno-ficha-card,
  .grupos-alumnos-toolbar,
  .grupos-alumnos-search,
  .task-modal-card .absence-form {
    min-width: 0;
    width: 100%;
    max-width: 100%;
  }

  #grupos-alumnos-panel .ranking-table {
    width: 100%;
    min-width: 0;
    table-layout: fixed;
  }

  #grupos-alumnos-panel th,
  #grupos-alumnos-panel td {
    overflow-wrap: anywhere;
  }

  .global-student-results,
  .alumno-matricula-modal-body,
  #alumno-tareas-info-body {
    max-width: 100%;
    overflow-x: hidden;
  }
}

.grupos-alumnos-search {
  flex: 0 1 300px;
  min-width: 240px;
}

.grupos-alumnos-search .table-search-input {
  width: 100%;
}

.grupos-alumnos-repetidor {
  width: 8.5rem;
  text-align: center;
}

.grupos-alumnos-modalidad {
  width: 11rem;
  text-align: center;
}

.grupos-alumnos-section {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  min-height: 0;
}

.grupos-alumnos-section[hidden] {
  display: none;
}

.grupos-alumnos-subbar {
  justify-content: flex-start;
  margin-bottom: 10px;
}

.grupos-alumnos-table-wrap {
  flex: 1 1 auto;
  height: auto;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
}

@media (max-width: 760px) {
  .grupos-alumnos-toolbar {
    align-items: stretch;
    flex-direction: column;
  }

  .grupos-alumnos-search {
    flex-basis: auto;
    width: min(100%, 320px);
    min-width: 0;
    margin-left: auto;
  }
}

.alumno-ficha-panel {
  display: flex;
  flex-direction: column;
  max-height: calc(100vh - 24px);
  overflow-y: auto;
  overscroll-behavior: contain;
}

.alumno-ficha-panel[hidden] {
  display: none;
}

.alumno-ficha-card {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 16px;
  min-height: 0;
  padding: 18px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(31, 46, 38, 0.06);
}

.alumno-ficha-hero {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--color-border);
}

.alumno-ficha-hero h3 {
  margin: 4px 0 0;
  color: var(--color-text);
  font-size: 1.55rem;
  line-height: 1.2;
}

.alumno-ficha-meta {
  margin: 6px 0 0;
  color: var(--color-green);
  font-weight: 900;
}

.alumno-ficha-status {
  flex: 0 0 auto;
  padding: 8px 10px;
  color: var(--color-green);
  font-size: 0.86rem;
  font-weight: 900;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.alumno-ficha-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}

.alumno-ficha-section {
  min-height: 150px;
  padding: 14px;
  background: #fbfcfb;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.alumno-ficha-section h3 {
  margin: 0 0 10px;
  color: var(--color-green);
  font-size: 1rem;
  font-weight: 900;
}

.incidencias-panel {
  display: flex;
  flex-direction: column;
}

.incidencias-panel[hidden] {
  display: none;
}

.incidencias-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 340px);
  gap: 14px;
  min-height: 0;
}

.incidencias-card {
  padding: 18px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(31, 46, 38, 0.06);
}

.incidencias-register-card {
  display: grid;
  gap: 14px;
}

.incidencias-quick-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.incidencias-type-toggle {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.incidencias-type-toggle label {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 42px;
  padding: 10px 12px;
  color: var(--color-text);
  font-weight: 900;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.incidencias-form {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.incidencias-leve-mode .incidencias-form,
.incidencias-grave-mode .incidencias-form {
  grid-template-columns: 1fr;
}

.incidencias-observaciones {
  grid-column: 1 / -1;
}

.incidencias-grave-notice {
  margin: 0;
  padding: 10px 12px;
  color: #8f2626;
  font-size: 0.86rem;
  font-weight: 900;
  background: #fae7e7;
  border: 1px solid #efc5c5;
  border-radius: 8px;
}

.incidencias-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}

.incidencias-actions button {
  min-height: 38px;
  padding: 9px 14px;
  color: #ffffff;
  font: inherit;
  font-weight: 900;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  border-radius: 8px;
  cursor: pointer;
}

.incidencias-actions button:hover {
  background: #256a40;
}

.incidencias-points-preview {
  min-width: 120px;
  padding: 9px 12px;
  color: var(--color-green);
  font-weight: 900;
  text-align: center;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.incidencias-points-preview.grave {
  color: #a22d2d;
  background: #fae7e7;
  border-color: #efc5c5;
}

.incidencias-side-card {
  display: grid;
  align-content: start;
  gap: 10px;
}

.incidencias-side-card h3 {
  margin: 0;
  color: var(--color-green);
  font-size: 1rem;
}

.incidencias-history-card {
  width: min(96vw, 1280px);
}

.incidencias-summary-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
  margin-bottom: 12px;
}

.incidencias-summary-item {
  padding: 10px;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.incidencias-summary-item span,
.incidencias-summary-item strong {
  display: block;
}

.incidencias-summary-item span {
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
}

.incidencias-summary-item strong {
  margin-top: 3px;
  color: var(--color-text);
  font-size: 1rem;
  font-weight: 900;
}

.incidencias-summary-item.warning {
  background: #fff5dc;
  border-color: #efd291;
}

.incidencias-history-actions {
  display: flex;
  justify-content: flex-end;
  margin-bottom: 10px;
}

.incidencias-history-table-wrap,
.incidencias-points-table-wrap {
  max-height: 58vh;
  overflow: auto;
}

.incidencias-history-table {
  min-width: 1280px;
}

.incidencias-config-panel {
  display: flex;
  flex-direction: column;
}

.incidencias-config-panel[hidden] {
  display: none;
}

.incidencias-config-actions {
  flex-wrap: wrap;
  justify-content: flex-end;
}

.incidencias-config-actions button,
.incidencias-config-form .absence-actions button {
  min-height: 36px;
}

#guardar-puntos-incidencias,
#guardar-motivo-incidencias {
  color: #ffffff;
  font: inherit;
  font-weight: 900;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  border-radius: 8px;
  cursor: pointer;
}

.incidencias-config-card {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  min-height: 0;
  padding: 16px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(31, 46, 38, 0.06);
}

.incidencias-config-form {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 140px auto;
  align-items: end;
  gap: 12px;
  margin-bottom: 14px;
  padding: 14px;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.incidencias-config-form[hidden] {
  display: none;
}

.incidencias-config-table-wrap {
  flex: 1 1 auto;
  height: auto;
  min-height: 0;
  overflow: auto;
}

.incidencias-config-table {
  width: 100%;
  min-width: 0;
  table-layout: fixed;
}

.incidencias-config-table th:nth-child(2),
.incidencias-config-table td:nth-child(2) {
  width: 120px;
}

.incidencias-config-table th:nth-child(3),
.incidencias-config-table td:nth-child(3) {
  width: 90px;
  text-align: center;
}

.incidencias-config-table th:nth-child(4),
.incidencias-config-table td:nth-child(4) {
  width: 140px;
}

.incidencias-config-motivo-cell {
  white-space: normal;
  line-height: 1.35;
}

.selected-config-row {
  outline: 2px solid var(--color-green);
  outline-offset: -2px;
  background: var(--color-green-soft);
}

.inactive-config-row {
  color: var(--color-muted);
  background: #f3f4f3;
}

.compact-config-button {
  min-height: 30px;
  padding: 5px 8px;
  font-size: 0.76rem;
}

.expulsiones-panel {
  display: flex;
  flex-direction: column;
}

.expulsiones-panel[hidden] {
  display: none;
}

.expulsiones-card {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  min-height: 0;
  padding: 16px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(31, 46, 38, 0.06);
}

.expulsiones-table-wrap {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
}

.expulsiones-table {
  width: 100%;
  min-width: 940px;
}

.expulsiones-table td:last-child {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.expulsiones-table .secondary-button {
  min-height: 30px;
  padding: 5px 10px;
  font-size: 0.78rem;
}

.pending-task-button {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 3px;
  width: 100%;
  padding: 9px 10px;
  color: var(--color-text);
  font: inherit;
  font-size: 0.85rem;
  font-weight: 800;
  text-align: left;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.pending-task-button:hover {
  border-color: var(--color-green);
  box-shadow: 0 4px 14px rgba(31, 46, 38, 0.08);
}

.pending-task-button small {
  color: var(--color-muted);
  font-size: 0.72rem;
  font-weight: 700;
}

.alumno-info-block {
  margin-bottom: 16px;
  padding: 14px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.alumno-info-block h3 {
  margin: 0 0 10px;
  color: var(--color-green);
}

.alumno-info-table {
  min-width: 760px;
}

.incidencia-row-leve {
  background: #eef8f1;
}

.incidencia-row-grave {
  background: #fae7e7;
}

.incidencia-row-parte {
  box-shadow: inset 4px 0 0 var(--color-green);
}

.incidencias-points-input {
  width: 76px;
  min-height: 34px;
  padding: 6px 8px;
  font: inherit;
  font-weight: 800;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.plan-actions {
  display: grid;
  gap: 7px;
  min-width: 260px;
}

.plan-actions-cell {
  min-width: 300px;
}

.plan-docente-select {
  min-width: 230px;
}

.plan-participants-summary {
  margin-bottom: 6px;
  color: var(--color-green);
  font-weight: 900;
}

.planes-proyectos-table .guard-detail-list {
  margin: 0;
  padding-left: 16px;
}

.planes-proyectos-table .guard-detail-list li {
  margin-bottom: 5px;
}

.planes-proyectos-table .guard-detail-list button {
  margin-left: 8px;
}

.library-summary-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 10px;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  background: var(--color-green-soft);
  font-size: 0.82rem;
  font-weight: 800;
}

.library-summary-item strong {
  color: var(--color-green);
  font-size: 0.95rem;
}

.library-use-cell {
  text-align: center;
  font-weight: 900;
}

.library-recurso .library-use-cell {
  color: var(--color-green);
}

.library-aula .library-use-cell {
  color: var(--color-orange);
}

.library-solapamiento .library-use-cell,
.library-dudoso .library-use-cell {
  color: var(--color-orange);
}

.library-libre .library-use-cell {
  color: var(--color-muted);
}

.tutor-selector {
  min-width: 220px;
}

.tutor-option-occupied {
  color: var(--color-muted);
}

.warning-cell {
  color: #9f1d1d;
  font-weight: 800;
}

.fixed-field-value {
  min-height: 38px;
  padding: 9px 10px;
  color: var(--color-text);
  font-weight: 800;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.absence-history-card {
  width: min(820px, 100%);
}

.absence-history-summary {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 12px;
}

.absence-history-summary span {
  padding: 6px 9px;
  color: var(--color-green);
  font-size: 0.8rem;
  font-weight: 900;
  background: var(--color-green-soft);
  border: 1px solid #d8eadc;
  border-radius: 7px;
}

.absence-history-table {
  min-width: 680px;
}

.ranking-config {
  margin-bottom: 12px;
  padding: 12px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
}

.ranking-config-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.ranking-config-field {
  display: grid;
  gap: 5px;
  color: var(--color-muted);
  font-size: 0.76rem;
  font-weight: 800;
}

.ranking-config-field input {
  min-height: 34px;
  padding: 6px 8px;
  color: var(--color-text);
  font: inherit;
  font-weight: 800;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.ranking-config-actions {
  display: flex;
  justify-content: flex-end;
  margin-top: 10px;
}

.ranking-config-actions button {
  min-height: 36px;
  padding: 7px 10px;
  color: #ffffff;
  font: inherit;
  font-weight: 800;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  border-radius: 8px;
  cursor: pointer;
}

.task-modal {
  position: fixed;
  inset: 0;
  z-index: 30;
  display: grid;
  place-items: center;
  padding: 24px;
  background: rgba(20, 31, 25, 0.28);
}

.task-modal-card {
  width: min(560px, 100%);
  max-height: min(720px, 90vh);
  overflow: auto;
  padding: 18px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
  box-shadow: var(--shadow-panel);
}

.task-modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  margin-bottom: 12px;
}

.task-modal-header h2 {
  margin: 0;
  color: var(--color-text);
  font-size: 1.08rem;
}

.task-text {
  margin: 0;
  white-space: pre-wrap;
  color: var(--color-text);
  font-size: 0.95rem;
  line-height: 1.45;
}

.guard-detail-line {
  display: grid;
  gap: 3px;
  padding: 8px 0;
  border-bottom: 1px solid var(--color-border);
}

.guard-detail-line span {
  color: var(--color-muted);
  font-size: 0.76rem;
  font-weight: 800;
}

.guard-detail-line strong {
  color: var(--color-text);
  font-size: 0.95rem;
  font-weight: 800;
}

.modal-actions {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 10px;
  margin-top: 14px;
}

.info-edit-form {
  gap: 10px;
}

.task-section-title {
  margin: 14px 0 8px;
  color: var(--color-green);
  font-size: 0.92rem;
}

.mailbox-card {
  width: min(1040px, 96vw);
  max-height: min(760px, 92vh);
  overflow: hidden;
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr);
  padding: 0;
}

.mailbox-card .task-modal-header {
  margin: 0;
  padding: 18px 20px 12px;
  border-bottom: 1px solid var(--color-border);
}

.mailbox-tabs {
  display: flex;
  gap: 8px;
  padding: 12px 20px;
  background: #f8fbf9;
  border-bottom: 1px solid var(--color-border);
}

.mailbox-tab {
  min-height: 36px;
  padding: 7px 12px;
  color: var(--color-muted);
  font: inherit;
  font-size: 0.84rem;
  font-weight: 900;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.mailbox-tab.active {
  color: var(--color-green);
  background: var(--color-green-soft);
  border-color: #cfe3d5;
}

.mailbox-tab.primary {
  margin-left: auto;
  color: #ffffff;
  background: var(--color-green);
  border-color: var(--color-green);
}

.mailbox-tab.primary.active {
  background: #22663d;
}

.mailbox-layout {
  display: grid;
  grid-template-columns: minmax(260px, 340px) minmax(0, 1fr);
  min-height: 0;
  overflow: hidden;
}

.mailbox-list-panel,
.mailbox-detail,
.mailbox-compose {
  min-height: 0;
  overflow: auto;
}

.mailbox-list-panel {
  background: #fbfdfc;
  border-right: 1px solid var(--color-border);
}

.mailbox-list {
  display: grid;
  gap: 8px;
  padding: 14px;
}

.mailbox-item {
  display: grid;
  gap: 4px;
  width: 100%;
  padding: 12px;
  text-align: left;
  color: var(--color-text);
  font: inherit;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.mailbox-item:hover {
  border-color: #cfe3d5;
  box-shadow: 0 8px 20px rgba(31, 46, 38, 0.07);
}

.mailbox-item.unread {
  border-left: 4px solid #c62828;
  background: #fffafa;
}

.mailbox-item strong {
  color: var(--color-text);
  font-size: 0.9rem;
}

.mailbox-item span,
.mailbox-item small {
  overflow-wrap: anywhere;
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 700;
}

.mailbox-detail {
  padding: 18px 20px;
}

.mailbox-detail-header {
  display: flex;
  justify-content: space-between;
  align-items: start;
  gap: 14px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--color-border);
}

.mailbox-detail-header h3 {
  margin: 0;
  color: var(--color-text);
  font-size: 1.08rem;
  line-height: 1.25;
}

.mailbox-detail-header span,
.mailbox-meta-line {
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 800;
}

.mailbox-meta-line {
  margin: 10px 0 0;
  overflow-wrap: anywhere;
}

.mailbox-body-text {
  margin-top: 18px;
  padding: 16px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  color: var(--color-text);
  line-height: 1.5;
  background: #fbfdfc;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.mailbox-compose {
  grid-column: 1 / -1;
  padding: 18px 20px 20px;
}

.mailbox-compose textarea,
.mailbox-compose input,
.mailbox-compose select {
  width: 100%;
}

.mailbox-compose select[multiple] {
  min-height: 180px;
}

.mailbox-recipients-preview {
  display: grid;
  gap: 4px;
  padding: 10px 12px;
  color: var(--color-muted);
  font-size: 0.82rem;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.mailbox-recipients-preview strong {
  color: var(--color-green);
}

.mailbox-recipients-preview span {
  overflow-wrap: anywhere;
}

.task-files {
  display: grid;
  gap: 7px;
  margin-top: 12px;
}

.task-files a {
  color: var(--color-green);
  font-weight: 800;
}

.guardias-board {
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-width: 0;
  height: 100%;
  min-height: 0;
  padding: 14px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: var(--shadow-panel);
}

.parte-board-header {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 10px;
}

.parte-status {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 1 1 auto;
  min-width: 0;
  padding: 9px 12px;
  color: var(--color-green);
  font-size: 1rem;
  font-weight: 900;
  letter-spacing: 0.02em;
  text-align: center;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.parte-board-actions {
  display: flex;
  flex: 0 1 auto;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 6px;
  align-items: center;
}

.parte-action-button {
  display: inline-grid;
  place-items: center;
  width: 76px;
  min-height: 38px;
  padding: 5px 7px;
  color: var(--color-green);
  font: inherit;
  font-size: 0.74rem;
  font-weight: 900;
  line-height: 1.05;
  text-align: center;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  cursor: pointer;
}

.parte-action-button:hover {
  background: var(--color-green-soft);
  border-color: #cfe3d5;
}

.parte-action-button.active {
  color: #ffffff;
  background: var(--color-green);
  border-color: var(--color-green);
}

.parte-date-picker { position: relative; flex: 0 0 auto; }
.parte-date-trigger {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  box-sizing: border-box; min-width: 126px; min-height: 38px; height: 38px; padding: 0 12px;
  color: var(--color-green); font: inherit; font-weight: 800; letter-spacing: .02em;
  background: #fff; border: 1px solid #aac6b5; border-radius: 8px; cursor: pointer;
}
.parte-date-trigger:hover, .parte-date-trigger:focus-visible, .parte-date-trigger.active {
  background: var(--color-green-soft); border-color: var(--color-green); outline: none;
  box-shadow: 0 0 0 3px rgba(23, 75, 53, .13);
}
.parte-date-chevron { font-size: 1rem; }
.parte-date-popover {
  position: absolute; z-index: 1200; top: calc(100% + 7px); right: 0;
  width: min(294px, calc(100vw - 24px)); padding: 12px; color: var(--color-text);
  background: #fff; border: 1px solid var(--color-border); border-radius: 10px;
  box-shadow: 0 12px 30px rgba(20, 48, 36, .2);
}
.parte-date-nav, .parte-date-weekdays, .parte-date-days { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; }
.parte-date-nav { grid-template-columns: 40px 1fr 40px; align-items: center; margin-bottom: 9px; text-align: center; text-transform: capitalize; }
.parte-date-nav button, .parte-date-days button { min-width: 0; min-height: 38px; padding: 0; color: var(--color-text); background: transparent; border: 0; border-radius: 7px; }
.parte-date-nav button { font-size: 1.5rem; }
.parte-date-weekdays { margin-bottom: 3px; color: var(--color-muted); font-size: .72rem; font-weight: 800; text-align: center; }
.parte-date-days button:hover, .parte-date-days button:focus-visible { background: var(--color-green-soft); outline: 2px solid var(--color-green); }
.parte-date-days button.today { box-shadow: inset 0 0 0 1px #aac6b5; }
.parte-date-days button.selected { color: #fff; font-weight: 900; background: var(--color-green); }

.parte-status.selected-date {
  color: #8a4d12;
  background: #fff1df;
  border-color: #f0c895;
}

.guardias-scroll {
  width: 100%;
  flex: 1 1 auto;
  min-height: 0;
  overflow-x: auto;
  overflow-y: hidden;
  padding-bottom: 4px;
}

.non-school-day {
  display: grid;
  place-content: center;
  justify-items: center;
  gap: 10px;
  flex: 1 1 auto;
  min-height: 0;
  padding: 30px;
  color: #8a4d12;
  text-align: center;
  background: #fff7ed;
  border: 1px solid #f0c895;
  border-radius: 8px;
}

.non-school-day strong {
  font-size: clamp(2rem, 5vw, 4rem);
  font-weight: 900;
  letter-spacing: 0.04em;
}

.non-school-day span {
  color: var(--color-muted);
  font-size: 1rem;
  font-weight: 800;
}

.context-panel {
  min-width: 0;
  height: calc(100vh - var(--header-height));
  min-height: calc(100vh - var(--header-height));
  padding: 18px 14px;
  background: #f7faf8;
  border-left: 1px solid var(--color-border);
  overflow-x: hidden;
  overflow-y: auto;
  transition: opacity 160ms ease, padding 160ms ease, border-color 160ms ease;
}

body.historical-readonly .context-panel {
  height: calc(100vh - var(--header-height) - var(--historical-banner-height));
  min-height: calc(100vh - var(--header-height) - var(--historical-banner-height));
}

.app-shell.right-panel-collapsed .context-panel {
  min-width: 0;
  padding-right: 0;
  padding-left: 0;
  opacity: 0;
  overflow: hidden;
  pointer-events: none;
  border-left-color: transparent;
}

.context-card {
  padding: 14px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: 0 8px 22px rgba(31, 46, 38, 0.05);
}

.context-card + .context-card {
  margin-top: 14px;
}

.context-card h2 {
  margin: 0;
  color: var(--color-green);
  font-size: 0.98rem;
  line-height: 1.2;
}

.context-subsection {
  margin-top: 14px;
}

.context-subsection h3,
.context-select-label {
  margin: 0;
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
  text-transform: uppercase;
}

.empty-context {
  margin: 7px 0 0;
  color: #89958d;
  font-size: 0.82rem;
  font-weight: 700;
  line-height: 1.35;
}

.reservations-card {
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto;
  gap: 16px;
}

.reservations-header {
  align-items: flex-start;
}

.reservations-top-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  align-items: end;
  gap: 10px;
}

.reservations-top-actions input[type="date"] {
  min-height: 38px;
  padding: 8px 10px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.reservations-summary {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.reservation-summary-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.reservation-summary-item span {
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 800;
}

.reservation-summary-item strong {
  display: grid;
  place-items: center;
  min-width: 30px;
  min-height: 30px;
  color: #ffffff;
  background: var(--color-green);
  border-radius: 999px;
}

.reservation-tabs {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 8px;
  padding: 4px;
  width: fit-content;
  background: #edf4ef;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.reservation-tab {
  min-height: 34px;
  padding: 7px 12px;
  color: var(--color-muted);
  font: inherit;
  font-size: 0.86rem;
  font-weight: 800;
  background: transparent;
  border: 0;
  border-radius: 6px;
  cursor: pointer;
}

.reservation-tab.active {
  color: #ffffff;
  background: var(--color-green);
}

.reservations-grid {
  display: grid;
  align-content: start;
  gap: 18px;
  min-height: 0;
  overflow-y: auto;
  padding-right: 4px;
}

.reservation-category-section {
  display: grid;
  gap: 12px;
}

.reservation-category-section + .reservation-category-section {
  padding-top: 4px;
}

.reservation-category-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  background: var(--color-green-soft);
  border: 1px solid #cfe3d5;
  border-radius: 8px;
}

.reservation-category-header h3 {
  margin: 0;
  color: var(--color-green);
  font-size: 1rem;
}

.reservation-category-header span {
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 900;
}

.reservation-category-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(360px, 1fr));
  gap: 14px;
}

.category-aulas_especificas .reservation-category-grid {
  grid-template-columns: repeat(2, minmax(360px, 1fr));
}

.reservation-resource-card {
  display: grid;
  gap: 12px;
  padding: 14px;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-top: 3px solid var(--color-green);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(31, 46, 38, 0.06);
}

.reservation-resource-header {
  display: grid;
  gap: 3px;
}

.reservation-resource-header h3 {
  margin: 0;
  color: var(--color-text);
  font-size: 1rem;
}

.reservation-resource-header span {
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 800;
}

.reservation-slots {
  display: grid;
  gap: 8px;
}

.reservation-slot {
  display: grid;
  grid-template-columns: 70px minmax(90px, 1fr);
  align-items: center;
  gap: 10px;
  min-height: 50px;
  padding: 8px 10px;
  background: #f8fbf9;
  border: 1px solid #dde8e1;
  border-radius: 8px;
}

.reservation-slot.reserved {
  background: #fff7e9;
  border-color: #efc98f;
}

.reservation-hour {
  color: var(--color-green);
  font-size: 0.78rem;
  font-weight: 900;
}

.reservation-state {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 7px;
  min-width: 0;
}

.reservation-state strong {
  overflow-wrap: normal;
  word-break: normal;
  white-space: nowrap;
  color: var(--color-text);
  font-size: 0.85rem;
}

.reservation-own {
  padding: 2px 7px;
  color: #1f6b3f;
  font-size: 0.72rem;
  font-weight: 900;
  background: #e5f3ea;
  border-radius: 999px;
}

.reservation-actions {
  display: flex;
  grid-column: 1 / -1;
  justify-content: flex-end;
  flex-wrap: wrap;
  align-items: center;
  gap: 7px;
}

.reservation-actions button,
.reservation-cancel-button {
  min-height: 32px;
  padding: 6px 10px;
  color: #ffffff;
  font: inherit;
  font-size: 0.78rem;
  font-weight: 900;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  border-radius: 8px;
  cursor: pointer;
}

.reservation-cancel-button {
  color: #8a4d12;
  background: #fff1df;
  border-color: #f0c895;
}

.reservation-teacher-select {
  width: min(240px, 100%);
  max-width: 240px;
  min-height: 32px;
  padding: 5px 8px;
  color: var(--color-text);
  font: inherit;
  font-size: 0.78rem;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.convivencia-card {
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto;
  gap: 8px;
  max-height: none;
}

.context-absence-date {
  margin: 5px 0 0;
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 700;
  text-transform: capitalize;
}

.context-absence-navigation {
  position: relative;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  margin-top: 14px;
  min-height: 42px;
}

.context-absence-arrows {
  grid-column: 2;
  display: flex;
  gap: 8px;
}

.context-date-button {
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  padding: 0;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  background: var(--color-surface);
  color: var(--color-green);
  font: 800 1.35rem/1 inherit;
  cursor: pointer;
}

.context-date-button:hover,
.context-date-button:focus-visible {
  border-color: var(--color-green);
  background: var(--color-green-soft);
}

.context-date-calendar {
  position: relative;
  grid-column: 3;
  justify-self: end;
  font-size: 1rem;
}

.context-date-calendar input {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  pointer-events: none;
}

.convivencia-header {
  display: grid;
  grid-template-columns: minmax(180px, 1fr) minmax(220px, auto) minmax(360px, 1fr);
  align-items: center;
  gap: 12px;
  margin-bottom: 0;
  padding-bottom: 4px;
}

.convivencia-top-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 10px;
}

.vinanet-primary-action {
  min-height: 38px;
  padding: 8px 12px;
  color: #ffffff;
  font: inherit;
  font-weight: 900;
  background: var(--color-green);
  border: 1px solid var(--color-green);
  border-radius: 8px;
  cursor: pointer;
  transition: background-color 150ms ease, border-color 150ms ease, box-shadow 150ms ease;
}

.vinanet-primary-action:hover {
  background: #245c38;
  border-color: #245c38;
}

.vinanet-primary-action:focus-visible {
  outline: 3px solid rgba(47, 125, 73, 0.28);
  outline-offset: 2px;
}

.convivencia-form-panel {
  padding: 14px;
  background: #fbfdfc;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
}

.convivencia-form-title {
  margin: 0 0 12px;
  color: var(--color-green);
  font-size: 0.95rem;
}

.convivencia-form {
  grid-template-columns: minmax(220px, 1.4fr) minmax(220px, 1.4fr) minmax(150px, 0.8fr) minmax(150px, 0.8fr);
  align-items: end;
}

.convivencia-form-actions {
  grid-column: 1 / -1;
  justify-content: flex-end;
  margin-top: 0;
}

.convivencia-title-block h2 {
  margin: 0;
}

.convivencia-history-title {
  justify-self: center;
  text-align: center;
}

.convivencia-history-title h3 {
  margin: 0;
  color: var(--color-text);
  font-size: 1rem;
}

.convivencia-filter-label {
  display: flex;
  align-items: center;
  gap: 4px;
  min-width: 0;
}

.convivencia-filter-label select {
  min-width: 150px;
}

.convivencia-table-wrap {
  min-height: 0;
  height: 100%;
  overflow: auto;
}

.convivencia-table {
  min-width: 760px;
}

.convivencia-table th,
.convivencia-table td {
  text-align: center;
  vertical-align: middle;
}

.convivencia-table td:nth-child(3) {
  color: var(--color-text);
  font-weight: 900;
}

@media (max-width: 760px) {
  .convivencia-header {
    grid-template-columns: 1fr;
  }

  .convivencia-form {
    grid-template-columns: 1fr;
  }

  .convivencia-top-actions {
    align-items: stretch;
    flex-direction: column;
  }

  .convivencia-history-title {
    justify-self: start;
    text-align: left;
  }

  .reservations-summary {
    grid-template-columns: 1fr;
  }

  .reservation-category-grid {
    grid-template-columns: 1fr;
  }

  .reservation-slot {
    grid-template-columns: 1fr;
    align-items: stretch;
  }

  .reservation-actions {
    justify-content: flex-start;
    flex-wrap: wrap;
  }

  .reservation-teacher-select {
    max-width: 100%;
    width: 100%;
  }
}

.context-select-label {
  display: grid;
  gap: 7px;
  margin-top: 14px;
}

.context-select-label select {
  min-height: 36px;
  padding: 7px 9px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  text-transform: none;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.context-list {
  display: grid;
  gap: 7px;
  margin-top: 10px;
}

#contexto-guardias-list {
  min-height: 42px;
  max-height: min(320px, 34vh);
  overflow-x: hidden;
  overflow-y: auto;
  padding-right: 3px;
}

.context-teacher {
  padding: 7px 8px;
  color: var(--color-text);
  font-size: 0.82rem;
  font-weight: 700;
  line-height: 1.25;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 6px;
}

.context-teacher.absent {
  color: #9f1d1d;
  background: #fff0f0;
  border-color: #efc2c2;
  border-left-color: #c83232;
}

.context-teacher.removed {
  color: #69736d;
  background: #f1f4f2;
  border-color: #d8dfda;
  border-left-color: #8b968f;
  opacity: 0.78;
}

.context-absence {
  padding: 7px 8px;
  color: var(--color-text);
  font-size: 0.82rem;
  font-weight: 700;
  line-height: 1.25;
  background: #fffaf5;
  border: 1px solid #efd9bf;
  border-left: 3px solid var(--color-orange);
  border-radius: 6px;
}

.guardias-scroll::-webkit-scrollbar {
  height: 10px;
}

.guardias-scroll::-webkit-scrollbar-track {
  background: #edf3ef;
  border-radius: 999px;
}

.guardias-scroll::-webkit-scrollbar-thumb {
  background: #b8d4c3;
  border-radius: 999px;
}

.guardias-grid {
  display: grid;
  grid-template-columns: 120px repeat(15, 205px);
  grid-template-rows: 42px repeat(3, minmax(82px, 1fr)) 34px repeat(3, minmax(82px, 1fr));
  gap: 8px;
  width: max-content;
  min-width: 100%;
  height: 100%;
}

.grid-header,
.time-cell,
.guard-cell,
.break-row {
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.grid-header {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-green);
  font-size: 0.82rem;
  font-weight: 800;
  background: #f4f8f5;
}

.time-header,
.time-cell {
  position: sticky;
  left: 0;
  z-index: 2;
  box-shadow: 8px 0 14px rgba(31, 46, 38, 0.06);
}

.time-header {
  z-index: 3;
}

.time-cell {
  display: grid;
  align-content: center;
  gap: 4px;
  padding: 12px;
  background: #fbfcfb;
  border-left: 3px solid var(--color-green);
}

.time-cell strong {
  color: var(--color-text);
  font-size: 0.92rem;
}

.time-cell span {
  color: var(--color-muted);
  font-size: 0.76rem;
  font-weight: 700;
}

.guard-cell {
  display: grid;
  place-items: center;
  min-width: 0;
  padding: 12px;
  color: #89958d;
  font-size: 0.86rem;
  font-weight: 700;
  background: #ffffff;
}

.guard-cell.has-assignment {
  place-items: stretch;
  align-content: stretch;
  padding: 8px;
  color: var(--color-text);
}

.guard-cell.has-conflict {
  background: #fff5ed;
  border-color: #f1b783;
}

.guard-cell.has-resolved-conflict {
  background: #fffaf0;
  border-color: #ead49d;
}

.guard-empty {
  color: #89958d;
  font-size: 0.86rem;
  font-weight: 700;
}

.guard-assignment {
  display: grid;
  grid-template-rows: auto 1fr;
  gap: 4px;
  width: 100%;
  min-height: 100%;
  padding: 7px;
  background: #f8fbf9;
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  border-radius: 8px;
  align-content: start;
}

.guard-assignment.conflict {
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-rows: auto auto;
  column-gap: 6px;
  row-gap: 2px;
  background: #fff0ed;
  border-color: #e4a08d;
  border-left-color: #c63c2f;
}

.guard-assignment.conflict .guard-compact-header {
  display: contents;
}

.guard-assignment.conflict .guard-conflict-title {
  grid-column: 1;
  grid-row: 1;
  align-self: end;
}

.guard-assignment.conflict .guard-action-stack {
  grid-column: 2;
  grid-row: 1 / span 2;
}

.guard-assignment.conflict .guard-location {
  grid-column: 1;
  grid-row: 2;
  align-self: start;
}

.guard-assignment.resolved-explanation {
  background: #fffaf0;
  border-color: #ead49d;
  border-left-color: #c18a2a;
}

.guard-resolved-badge {
  width: fit-content;
  padding: 3px 7px;
  color: #8a5a12;
  font-size: 0.68rem;
  font-weight: 900;
  line-height: 1.1;
  background: #fff1cf;
  border: 1px solid #ead49d;
  border-radius: 999px;
}

.guard-assignment.free {
  background: #fbfcfb;
  border-left-color: #9fb9aa;
}

.guard-assignment.is-sobrevenida {
  border-left-color: #b36b18;
}

.guard-sobrevenida-badge {
  width: fit-content;
  padding: 2px 6px;
  color: #8b4c08;
  font-size: 0.64rem;
  font-weight: 900;
  line-height: 1.1;
  background: #fff4df;
  border: 1px solid #efcf9a;
  border-radius: 999px;
}

.guard-conflict-title {
  color: #a9281e;
  font-size: 0.68rem;
  line-height: 1.15;
}

.guard-compact-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 6px;
  color: var(--color-muted);
  font-size: 0.66rem;
  font-weight: 800;
  line-height: 1.1;
}

.guard-info-button {
  display: inline-grid;
  width: 20px;
  height: 20px;
  place-items: center;
  color: var(--color-green);
  font: inherit;
  font-size: 0.72rem;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid #cfe3d5;
  border-radius: 999px;
  cursor: pointer;
}

.guard-info-button:hover {
  background: var(--color-green-soft);
}

.guard-action-stack {
  display: grid;
  gap: 4px;
  flex: 0 0 auto;
}

.conflict-form {
  display: grid;
  gap: 10px;
  margin-top: 12px;
}

.conflict-field {
  display: grid;
  gap: 6px;
  color: var(--color-muted);
  font-size: 0.82rem;
  font-weight: 800;
}

.conflict-field select,
.conflict-field textarea {
  width: 100%;
  min-height: 38px;
  padding: 8px 10px;
  color: var(--color-text);
  font: inherit;
  font-weight: 700;
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

.conflict-field textarea {
  min-height: 92px;
  resize: vertical;
  line-height: 1.35;
}

.guard-teacher-name {
  min-width: 0;
  color: var(--color-text);
  font-size: 0.86rem;
  font-weight: 800;
  line-height: 1.12;
}

.guard-location {
  color: var(--color-text);
  font-size: 0.78rem;
  font-weight: 700;
  line-height: 1.15;
}

.guard-location strong,
.guard-location span {
  display: block;
}

.task-link-button {
  width: fit-content;
  min-height: 24px;
  padding: 3px 7px;
  color: var(--color-green);
  font: inherit;
  font-size: 0.72rem;
  font-weight: 800;
  background: #ffffff;
  border: 1px solid #cfe3d5;
  border-radius: 6px;
  cursor: pointer;
}

.task-link-button:hover {
  background: var(--color-green-soft);
}

.no-task-label {
  color: #89958d;
  font-size: 0.72rem;
  font-weight: 800;
}

.break-row {
  grid-column: 1 / -1;
  position: sticky;
  left: 0;
  z-index: 2;
  display: flex;
  align-items: center;
  padding: 0 14px;
  color: var(--color-muted);
  font-size: 0.78rem;
  font-weight: 800;
  background: linear-gradient(90deg, #eaf3ee 0, #f4f6f5 48%, #f4f6f5 100%);
  border-color: #d4e5da;
  border-left: 3px solid var(--color-green);
}

.time-cell.is-current,
.guard-cell.is-current {
  background: var(--color-green-active);
  border-color: #a9cfb6;
  animation: activeRowBreath 3s ease-in-out infinite;
}

.time-cell.is-current {
  border-left-color: var(--color-orange);
  box-shadow: 8px 0 14px rgba(31, 46, 38, 0.06), 0 0 0 1px rgba(45, 122, 75, 0.12);
}

.guard-cell.is-current {
  color: var(--color-green);
  box-shadow: 0 0 0 1px rgba(45, 122, 75, 0.1);
}

.time-cell.is-current strong {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.time-cell.is-current strong::before {
  width: 7px;
  height: 7px;
  background: var(--color-green);
  border-radius: 999px;
  box-shadow: 0 0 0 4px rgba(45, 122, 75, 0.12);
  content: "";
  animation: activeDotPulse 3s ease-in-out infinite;
}

.break-row.is-current {
  color: var(--color-green);
  background: #dceee3;
  border-color: #a9cfb6;
  border-left-color: var(--color-orange);
  animation: activeRowBreath 3s ease-in-out infinite;
  box-shadow: 0 0 0 1px rgba(45, 122, 75, 0.12);
}

.break-row.is-current::before {
  width: 7px;
  height: 7px;
  margin-right: 8px;
  background: var(--color-green);
  border-radius: 999px;
  box-shadow: 0 0 0 4px rgba(45, 122, 75, 0.12);
  content: "";
  animation: activeDotPulse 3s ease-in-out infinite;
}

@keyframes activeRowBreath {
  0%,
  100% {
    background-color: var(--color-green-active);
    box-shadow: 0 0 0 1px rgba(45, 122, 75, 0.1), 0 8px 20px rgba(45, 122, 75, 0.03);
  }

  50% {
    background-color: #cfe7d7;
    box-shadow: 0 0 0 1px rgba(45, 122, 75, 0.18), 0 10px 26px rgba(45, 122, 75, 0.08);
  }
}

@keyframes activeDotPulse {
  0%,
  100% {
    opacity: 0.82;
    transform: scale(1);
  }

  50% {
    opacity: 1;
    transform: scale(1.24);
  }
}

@media (max-width: 1180px) {
  :root {
    --header-height: 88px;
  }

  .header-meta {
    flex-wrap: wrap;
    row-gap: 1px;
  }

  .reservation-category-grid,
  .category-aulas_especificas .reservation-category-grid {
    grid-template-columns: repeat(2, minmax(340px, 1fr));
  }

  .libro-claustro-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (max-width: 860px) {
  :root {
    --header-height: 88px;
    --sidebar-width: 210px;
  }

  .top-header {
    grid-template-columns: 86px minmax(0, 1fr) 180px;
    padding: 9px 18px;
  }

  .header-logo img {
    max-height: 42px;
  }

  .header-info {
    padding: 0 10px;
  }

  .header-title {
    font-size: 0.92rem;
  }

  .header-meta {
    font-size: 0.78rem;
  }

  .access-card {
    padding: 28px;
  }

  .mailbox-layout {
    grid-template-columns: 1fr;
  }

  .mailbox-list-panel {
    max-height: 240px;
    border-right: 0;
    border-bottom: 1px solid var(--color-border);
  }

  .mailbox-tabs {
    flex-wrap: wrap;
  }

  .mailbox-tab.primary {
    margin-left: 0;
  }

  .reservation-category-grid,
  .category-aulas_especificas .reservation-category-grid {
    grid-template-columns: 1fr;
  }

  .libro-claustro-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 620px) {
  :root {
    --header-height: 104px;
  }

  .top-header {
    grid-template-columns: 54px minmax(0, 1fr) 150px;
    padding: 8px 10px;
  }

  .header-logo img {
    max-height: 34px;
  }

  .header-user-actions {
    gap: 4px;
  }

  .header-icon-button {
    width: 32px;
    min-height: 32px;
  }

  .header-info {
    padding: 0 8px;
  }

  .header-title,
  .header-meta {
    flex-wrap: wrap;
    row-gap: 1px;
  }

  .header-title {
    gap: 6px;
    font-size: 0.8rem;
  }

  .header-meta {
    gap: 5px;
    margin-top: 3px;
    font-size: 0.68rem;
  }

  .header-title span + span::before,
  .header-meta span + span::before {
    margin-right: 5px;
  }

  .libro-claustro-grid {
    grid-template-columns: 1fr;
  }

  .access-card {
    padding: 24px 18px;
  }

  .access-card h1 {
    font-size: 1.42rem;
  }

  .access-options {
    grid-template-columns: 1fr;
    margin-top: 22px;
  }

  .mailbox-card .task-modal-header {
    align-items: stretch;
    flex-direction: column;
  }

  .mailbox-tabs {
    padding: 10px;
  }

  .mailbox-tab {
    flex: 1 1 140px;
  }

  .mailbox-detail,
  .mailbox-compose {
    padding: 14px;
  }

  .app-shell {
    grid-template-columns: 1fr;
  }

  .app-shell.left-panel-collapsed,
  .app-shell.right-panel-collapsed,
  .app-shell.left-panel-collapsed.right-panel-collapsed {
    grid-template-columns: 1fr;
  }

  .app-shell.left-panel-collapsed .sidebar,
  .app-shell.right-panel-collapsed .context-panel {
    display: none;
  }

  .sidebar {
    position: static;
    min-height: auto;
    padding: 10px;
    border-right: 0;
    border-bottom: 1px solid var(--color-border);
  }

  .sidebar-section {
    display: grid;
    gap: 10px;
    margin-top: 0;
  }

  .sidebar > .sidebar-section:not(:first-child) {
    margin-top: 10px;
  }

  .sidebar-section h2 {
    margin: 0;
    padding: 0;
    white-space: nowrap;
  }

  .sidebar-nav-button {
    width: 100%;
    min-height: 28px;
    padding: 4px 10px;
    font-size: 0.82rem;
  }

  .main-panel {
    height: calc(100vh - var(--header-height));
    padding: 16px;
  }

  .context-panel {
    min-height: auto;
    padding: 10px;
    border-left: 0;
    border-top: 1px solid var(--color-border);
  }

  .tools-panel {
    top: 16px;
    right: 16px;
    width: calc(100% - 32px);
  }

  .tool-card {
    grid-template-columns: 1fr;
  }

  .calendar-panel {
    top: 16px;
    right: 16px;
    width: calc(100% - 32px);
  }

  .calendar-card {
    grid-template-columns: 1fr;
  }

  .absence-panel {
    top: 16px;
    right: 16px;
    width: calc(100% - 32px);
  }

  #reservas-panel,
  #aula-convivencia-panel {
    inset: 0;
    width: 100%;
  }

  .change-teacher-panel {
    inset: 0;
    width: auto;
    padding: 12px;
  }

  .change-teacher-card {
    width: 100%;
    max-height: calc(100vh - 24px);
  }

  .absence-header {
    align-items: stretch;
    flex-direction: column;
  }

  .absence-dates {
    grid-template-columns: 1fr;
  }

  .absence-hours {
    grid-template-columns: 1fr;
  }

  .horarios-header {
    align-items: stretch;
    flex-direction: column;
  }

  .teacher-select-label {
    min-width: 0;
  }

  .horarios-controls {
    align-items: stretch;
    flex-direction: column;
  }

  .horario-table-wrap {
    height: calc(100% - 124px);
  }

  .ranking-config-grid {
    grid-template-columns: 1fr;
  }

  .parte-board-header {
    align-items: stretch;
    flex-direction: column;
  }

  .parte-board-actions {
    flex-wrap: wrap;
  }

  .parte-action-button {
    flex: 1 1 92px;
    width: auto;
  }

  .parte-date-picker { flex: 1 1 126px; }
  .parte-date-trigger { width: 100%; }

  .alumno-ficha-hero,
  .alumno-ficha-grid {
    grid-template-columns: 1fr;
  }

  .alumno-ficha-hero {
    flex-direction: column;
  }

  .guardias-board {
    padding: 10px;
  }

  .guardias-grid {
    grid-template-columns: 112px repeat(15, 190px);
    grid-template-rows: 40px repeat(3, minmax(78px, 1fr)) 34px repeat(3, minmax(78px, 1fr));
    gap: 7px;
  }
}
.matriculas-row-inactive > td {
  background: #eef0f2;
  color: #5d636b;
}

.matriculas-row-inactive > td:first-child {
  box-shadow: inset 3px 0 0 #9aa1a9;
}

.datos-curso-group-load {
  margin: 1rem 0;
  padding: 1rem;
  border: 1px solid var(--border-color, #d8dde3);
  border-radius: 10px;
  background: #fafbfc;
}
.datos-curso-group-load h3 { margin: 0 0 .35rem; }
.datos-curso-group-load table { font-size: .88rem; }
.alumno-ficha-section-title { margin: 1.25rem 0 .6rem; color: var(--brand-green, #176b4d); }
.alumno-ficha-materias { margin: .8rem 0; padding: .8rem 1rem; border: 1px solid var(--border-color, #d8dde3); border-radius: 8px; background: #fafbfc; }
.alumno-ficha-matricula-section { grid-column: 1 / -1; width: 100%; }
.alumno-ficha-materias ul { margin: .45rem 0 0 1.2rem; columns: 2; }
@media (max-width: 700px) { .alumno-ficha-materias ul { columns: 1; } }
.alumno-matricula-modal { position: fixed; inset: 0; z-index: 1200; display: grid; place-items: center; padding: 5vh 5vw; background: rgba(20, 35, 27, .34); }
.alumno-matricula-modal[hidden] { display: none; }
.alumno-matricula-modal-card { width: min(90vw, 1100px); max-height: 88vh; display: flex; flex-direction: column; background: var(--color-surface, #fff); border: 1px solid var(--color-border, #d8dde3); border-radius: 14px; box-shadow: 0 20px 60px rgba(0,0,0,.22); overflow: hidden; }
.alumno-matricula-modal-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; padding: 1.1rem 1.35rem .9rem; border-bottom: 1px solid var(--color-border, #d8dde3); }
.alumno-matricula-modal-header h2 { margin: .15rem 0 .25rem; color: var(--color-green, #28613d); }
.alumno-matricula-modal-body { overflow-y: auto; padding: 1.2rem 1.35rem 1.5rem; }
@media (max-width: 700px) { .alumno-matricula-modal { padding: 2vh 2vw; } .alumno-matricula-modal-card { width: 96vw; max-height: 94vh; } .alumno-matricula-modal-body { padding: 1rem; } }

/* Tarea 5B: shell móvil accesible, vistas de una dimensión y targets táctiles. */
.drawer-backdrop { display: none; }

@media (max-width: 620px), (max-height: 430px) and (orientation: landscape) {
  :root { --header-height: 104px; }
  html { min-height: 100%; }
  body { min-height: 100dvh; overflow-x: hidden; }
  body.drawer-open, body.modal-open { overflow: hidden; touch-action: none; }

  .top-header {
    position: relative; z-index: 900; height: var(--header-height); min-height: var(--header-height);
    display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; grid-template-rows: 44px 44px;
    gap: 4px 8px; padding: max(6px, env(safe-area-inset-top)) max(8px, env(safe-area-inset-right)) 6px max(8px, env(safe-area-inset-left));
    box-sizing: border-box;
  }
  .header-logo-left { grid-row: 1; grid-column: 1; }
  .header-logo-left img { width: 40px; max-height: 40px; object-fit: contain; }
  .header-info { grid-row: 1; grid-column: 2 / 4; min-width: 0; padding: 0; align-self: center; }
  .header-title { display: flex; gap: 6px; font-size: .78rem; line-height: 1.15; white-space: normal; }
  .header-title span + span::before { content: "·"; margin-right: 5px; }
  .header-meta { display: flex; gap: 5px; margin-top: 3px; font-size: .66rem; line-height: 1.1; white-space: normal; }
  .header-meta > span:nth-of-type(n+3) { display: none; }
  .header-user-actions { grid-row: 2; grid-column: 1 / 4; display: flex; justify-content: flex-end; gap: 6px; min-width: 0; }
  .header-user-actions > img { display: none; }
  .header-icon-button, .header-logout-button, .panel-toggle { min-width: 44px; min-height: 44px; height: 44px; }
  .header-logout-button { padding: 0 10px; font-size: .76rem; }

  .panel-toggle { position: fixed; top: calc(env(safe-area-inset-top) + 54px); z-index: 1102; border-radius: 8px; }
  .panel-toggle-left, body.left-panel-collapsed .panel-toggle-left { left: max(8px, env(safe-area-inset-left)); }
  .panel-toggle-right { right: max(8px, env(safe-area-inset-right)); }
  .drawer-backdrop { position: fixed; inset: var(--header-height) 0 0; z-index: 1050; display: block; background: rgba(13, 25, 18, .55); touch-action: none; }
  .drawer-backdrop[hidden] { display: none; }

  .app-shell, .app-shell.left-panel-collapsed, .app-shell.right-panel-collapsed,
  .app-shell.left-panel-collapsed.right-panel-collapsed {
    display: block;
    height: auto;
    min-height: calc(100dvh - var(--header-height));
    padding-top: 0;
  }
  .sidebar, .context-panel {
    position: fixed; top: var(--header-height); bottom: 0; z-index: 1100; display: block !important;
    width: min(86vw, 340px); height: calc(100dvh - var(--header-height)); min-height: 0;
    overflow-y: auto; overscroll-behavior: contain; background: var(--color-sidebar); box-shadow: 0 12px 36px rgba(0,0,0,.28);
    transition: transform .2s ease; visibility: visible;
  }
  .sidebar { left: 0; padding: 16px 12px max(20px, env(safe-area-inset-bottom)); border: 0; transform: translateX(0); }
  .context-panel { right: 0; padding: 16px 12px max(20px, env(safe-area-inset-bottom)); border: 0; transform: translateX(0); }
  .app-shell.left-panel-collapsed .sidebar { transform: translateX(-105%); visibility: hidden; }
  .app-shell.right-panel-collapsed .context-panel { transform: translateX(105%); visibility: hidden; }
  .sidebar-nav-button, .sidebar-section-toggle { min-height: 44px; padding: 9px 12px; font-size: .9rem; }
  .main-panel { height: auto; min-height: calc(100dvh - var(--header-height)); overflow: visible; padding: 14px 12px max(24px, env(safe-area-inset-bottom)); }

  #ausencia-panel.absence-main-panel {
    position: relative;
    inset: auto;
    width: 100%;
    max-height: none;
    overflow: visible;
  }

  #ausencia-panel .absence-main-card {
    height: auto;
    overflow: visible;
  }

  button, [role="button"], input[type="button"], input[type="submit"], select { min-height: 44px; }
  input:not([type="checkbox"]):not([type="radio"]), textarea { min-height: 44px; font-size: 16px; }
  input[type="checkbox"], input[type="radio"] { width: 24px; height: 24px; }
  .horarios-header, .absence-header, .tablon-header, .parte-board-header { align-items: stretch; flex-direction: column; gap: 10px; }
  .horarios-controls, .parte-board-actions, .absence-actions, .tablon-form-acciones { display: flex; flex-wrap: wrap; gap: 8px; }
  .horarios-controls > *, .parte-board-actions > *, .absence-actions > * { flex: 1 1 140px; }
  .horarios-controls > * { flex-basis: auto; }
  .parte-date-popover { position: fixed; top: 50%; right: auto; left: 50%; transform: translate(-50%, -50%); }
  .absence-form, .absence-dates, .absence-hours, .tool-card, .reservation-category-grid,
  .category-aulas_especificas .reservation-category-grid { grid-template-columns: 1fr; }

  .task-modal, .alumno-matricula-modal { position: fixed; inset: 0; z-index: 1500; padding: 0; align-items: stretch; overscroll-behavior: contain; }
  .school-calendar-panel { position: fixed; inset: var(--header-height) 0 0; z-index: 1000; overflow: hidden; }
  .school-calendar-card { padding: 10px 8px; overflow-y: auto; }
  .school-calendar-header { flex-direction: column; }
  .school-calendar-grid { grid-template-columns: repeat(7, minmax(0, 1fr)); overflow-x: hidden; }
  .school-calendar-day { min-height: 58px; padding: 4px 2px; font-size: .68rem; overflow-wrap: anywhere; }
  .school-calendar-weekday { padding: 5px 1px; }
  .task-modal-card, .alumno-matricula-modal-card {
    width: 100vw; max-width: none; height: 100dvh; max-height: 100dvh; margin: 0; border: 0; border-radius: 0;
    display: flex; flex-direction: column; overflow: hidden;
  }
  .task-modal-header, .alumno-matricula-modal-header { position: sticky; top: 0; z-index: 2; flex: 0 0 auto; padding: max(10px, env(safe-area-inset-top)) 12px 10px; background: var(--color-surface, #fff); }
  .task-modal-body, .alumno-matricula-modal-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 14px 12px max(90px, env(safe-area-inset-bottom)); }
  .task-modal-header .close-module-button, .alumno-matricula-modal-header .close-module-button, .tablon-dialog-cerrar { min-width: 44px; min-height: 44px; }
  .modal-actions, .task-modal-body > .absence-actions { position: sticky; bottom: 0; z-index: 2; padding: 8px 0 max(8px, env(safe-area-inset-bottom)); background: var(--color-surface, #fff); }
  .tablon-dialog { width: 100vw; max-width: none; height: 100dvh; max-height: none; margin: 0; padding: 12px; border: 0; }

  .ranking-table-wrap, .guardias-scroll, .libros-table-wrap, .horario-table-wrap { height: auto; max-height: none; overflow: visible; }
  .docentes-table, .expulsiones-table, .planes-proyectos-table, .incidencias-operativas-table-wrap table,
  .incidencias-history-table { display: block; }
  .docentes-table thead, .expulsiones-table thead, .planes-proyectos-table thead,
  .incidencias-operativas-table-wrap thead, .incidencias-history-table thead { display: none; }
  .docentes-table tbody, .expulsiones-table tbody, .planes-proyectos-table tbody,
  .incidencias-operativas-table-wrap tbody, .incidencias-history-table tbody { display: grid; gap: 10px; }
  .docentes-table tr, .expulsiones-table tr, .planes-proyectos-table tr,
  .incidencias-operativas-table-wrap tr, .incidencias-history-table tr {
    display: grid; gap: 6px; padding: 12px; border: 1px solid var(--color-border); border-radius: 10px; background: #fff;
  }
  .docentes-table td, .expulsiones-table td, .planes-proyectos-table td,
  .incidencias-operativas-table-wrap td, .incidencias-history-table td { display: grid; grid-template-columns: minmax(90px, 35%) 1fr; gap: 8px; border: 0; padding: 3px; overflow-wrap: anywhere; }
  .registro-docente-label { grid-template-columns: 1fr; }
  .registro-filtros { align-items: stretch; flex-direction: column; }
  #registro-panel .ranking-table-wrap { overflow: visible; }
  #registro-panel .ranking-table, #registro-panel .ranking-table tbody, #registro-panel .ranking-table tr, #registro-panel .ranking-table td { display: block; width: 100%; min-width: 0; box-sizing: border-box; }
  #registro-panel .ranking-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  #registro-panel .ranking-table tr { margin: 0 0 12px; padding: 9px; border: 1px solid var(--color-border); border-radius: 10px; background: #fff; }
  #registro-panel .ranking-table td { display: grid; grid-template-columns: minmax(105px, 40%) minmax(0, 1fr); gap: 8px; padding: 5px 3px; border: 0; overflow-wrap: anywhere; }
  .incidencias-submit-actions button { min-height: 44px; }
  td[data-label]::before { content: attr(data-label); font-weight: 700; color: #44574a; }

  #grupos-alumnos-tab-alumnado .grupos-alumnos-table-wrap { overflow: visible; }
  #grupos-alumnos-tab-alumnado .ranking-table { display: block; width: 100%; min-width: 0; table-layout: auto; }
  #grupos-alumnos-tab-alumnado .ranking-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  #grupos-alumnos-tab-alumnado .ranking-table tbody { display: grid; gap: 10px; width: 100%; min-width: 0; }
  #grupos-alumnos-tab-alumnado .ranking-table tr { display: grid; gap: 5px; width: 100%; min-width: 0; padding: 12px; border: 1px solid var(--color-border); border-radius: 10px; background: #fff; box-sizing: border-box; }
  #grupos-alumnos-tab-alumnado .ranking-table td { display: grid; grid-template-columns: minmax(92px, 34%) minmax(0, 1fr); gap: 8px; width: 100%; min-width: 0; padding: 4px 2px; border: 0; text-align: left; white-space: normal; overflow-wrap: anywhere; box-sizing: border-box; }
  #grupos-alumnos-tab-alumnado .ranking-table td::before { content: attr(data-label); color: #44574a; font-weight: 800; }
  #grupos-alumnos-tab-alumnado .ranking-table .grupos-alumnos-nombre { grid-template-columns: 1fr; padding-bottom: 7px; color: var(--color-green-dark); font-weight: 800; font-size: 1rem; }
  #grupos-alumnos-tab-alumnado .ranking-table .grupos-alumnos-nombre::before { display: none; }
  #grupos-alumnos-tab-alumnado .grupos-alumnos-modalidad,
  #grupos-alumnos-tab-alumnado .grupos-alumnos-repetidor { width: 100%; text-align: left; }

  .aulas-table { display: block; }
  .aulas-table thead { display: none; }
  .aulas-table tbody { display: grid; gap: 10px; }
  .aulas-table tr { display: grid; gap: 6px; padding: 12px; border: 1px solid var(--color-border); border-radius: 10px; background: #fff; }
  .aulas-table td, .aulas-table th { display: block; width: auto; min-width: 0; border: 0; overflow-wrap: anywhere; }

  .libros-toolbar { display: grid; grid-template-columns: 1fr; gap: 8px; }
  .libros-mobile-nav { position: sticky; top: 0; z-index: 3; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 10px; background: #e8f2eb; border: 1px solid var(--color-border); border-radius: 10px; }
  .libros-mobile-nav p { margin: 0; }
  .libros-mobile-nav div { display: flex; gap: 6px; }
  .libros-table { display: block; min-width: 0; }
  .libros-table thead { display: none; }
  .libros-table tbody { display: block; }
  .libros-table tr { display: none; }
  .libros-table tr.libros-alumno-activo { display: grid; gap: 10px; padding: 10px 0; }
  .libros-table tr.libros-alumno-activo + tr.libros-alumno-activo { padding-top: 0; }
  .libros-table tr > th, .libros-table tr > td { display: grid; gap: 8px; width: auto; min-width: 0; padding: 12px; border: 1px solid var(--color-border); border-radius: 10px; white-space: normal; }
  .libros-table tr > th { display: flex; justify-content:space-between; align-items:center; }
  .libros-table tr > th span { display:none; }
  .libros-table .libros-todos-cell, .libros-table .libros-observaciones-cell { display:flex; align-items:center; justify-content:space-between; }
  .libros-table .libros-todos-cell::before { content:"Lote completo"; font-weight:800; color:var(--color-green); }
  .libros-table .libros-observaciones-cell::before { content:"Observaciones"; font-weight:800; color:var(--color-green); }
  .libros-table td[data-materia]::before { content: attr(data-materia); font-weight: 800; color: var(--color-green); }
  .libros-table label { display: flex; align-items: center; gap: 8px; min-height: 44px; }
  .libros-table .observaciones { width: 100%; }

  #planos-centro-panel .horarios-header { align-items:stretch; }
  .planos-actions { justify-content:stretch; }
  .planos-actions .vinanet-button { flex:1 1 120px; min-height:44px; }
  .planos-toolbar { grid-template-columns:1fr; gap:6px; }
  .planos-toolbar strong { order:-1; }
  .planos-preview { display:block; min-width:0; }
  .planos-visor { position:absolute; inline-size:1px; block-size:1px; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }
  .planos-paginacion .vinanet-button { min-height:44px; }
}

@media (max-height: 430px) and (orientation: landscape) {
  :root { --header-height: 60px; }
  .top-header { height: 60px; min-height: 60px; grid-template-columns: 44px minmax(0,1fr) auto; grid-template-rows: 44px; }
  .header-logo-left { grid-row: 1; }
  .header-info { grid-row: 1; grid-column: 2; }
  .header-user-actions { grid-row: 1; grid-column: 3; }
  .header-user-actions .header-logout-button { display: none; }
  .panel-toggle { top: calc(env(safe-area-inset-top) + 8px); }
}

/* Tarea 6: pulido móvil basado en pruebas en teléfono real. */
@media (max-width: 620px), (max-height: 430px) and (orientation: landscape) {
  *, *::before, *::after { box-sizing: border-box; }
  html, body, .top-header, .app-shell, .main-panel { width: 100%; max-width: 100%; }
  .access-screen { padding: max(20px, env(safe-area-inset-top)) 16px max(20px, env(safe-area-inset-bottom)); }
  .access-card { width: min(100%, 420px); max-width: 420px; margin: auto; padding: 26px 18px; }
  .access-options, .admin-mode-options { width: 100%; grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .access-options button, .admin-impersonate-select { width: 100%; max-width: 100%; }

  .top-header { grid-template-columns: 42px minmax(0, 1fr); grid-template-rows: 44px 44px; column-gap: 8px; overflow: hidden; }
  .header-info { grid-column: 2; }
  .header-user-actions { grid-column: 1 / 3; padding: 0 48px; justify-content: center; }
  .header-user-actions > img { display: block; flex: 0 0 auto; width: 36px; height: 36px; object-fit: contain; }
  .header-logo-left { position: absolute; top: max(6px, env(safe-area-inset-top)); left: max(8px, env(safe-area-inset-left)); }
  .header-info { grid-column: 1 / 3; padding-inline: 48px; text-align: center; }
  .header-user-actions > img { position: absolute; top: max(6px, env(safe-area-inset-top)); right: max(8px, env(safe-area-inset-right)); margin: 0; }
  .header-title { justify-content: center; }
  .header-meta { justify-content: center; }
  .header-icon-button { flex: 0 0 44px; padding: 0; }
  .header-logout-button { flex: 0 0 58px; width: 58px; padding: 0 6px; font-size: 0; }
  .header-logout-button::after { content: "Salir"; font-size: .78rem; }

  .main-panel > section, .absence-card, .horarios-card, .tool-card, .tablon-card,
  .ranking-table-wrap, .docentes-table-wrap, .planes-proyectos-table-wrap,
  .incidencias-operativas-table-wrap { width: 100%; max-width: 100%; min-width: 0; margin-inline: auto; }

  #reservas-panel,
  #aula-convivencia-panel {
    inset: 14px 12px max(24px, env(safe-area-inset-bottom));
    width: auto;
  }
  input, select, textarea, button { max-width: 100%; }
  .planes-proyectos-table { min-width: 0; width: 100%; }
  .planes-proyectos-table td { grid-template-columns: minmax(105px, 38%) minmax(0, 1fr); }
  .planes-proyectos-table td:nth-child(4), .planes-proyectos-table td:nth-child(5), .planes-proyectos-table td:nth-child(6) { min-width: 0; }
  .plan-participant-count { text-align: left; }
  input:not([type="checkbox"]):not([type="radio"]), select, textarea { width: 100%; font-size: 16px; }

  .close-module-button { flex: 0 0 auto !important; width: auto !important; min-width: 76px; min-height: 44px; align-self: flex-start; padding: 8px 14px; }
  .horarios-controls .close-module-button, .absence-actions .close-module-button { flex-grow: 0; }

  .horarios-controls > button,
  .horarios-controls > [role="button"] {
    min-height: 44px;
    padding-block: 8px;
    line-height: 1.25;
  }

  .horarios-controls > .teacher-select-label {
    flex: 0 0 auto;
    width: 100%;
  }

  .horarios-controls > .teacher-select-label select,
  .horarios-controls > .teacher-select-label input {
    width: 100%;
    min-height: 44px;
    height: 44px;
    padding-block: 8px;
    line-height: 1.2;
  }

  .grupos-alumnos-tabs .mailbox-tab,
  #programas-panel .mailbox-tab {
    flex: 1 1 calc(50% - 4px);
    min-height: 44px;
    padding: 8px;
    font-size: .8rem;
    line-height: 1.2;
  }

  .absence-actions > * {
    min-height: 44px;
    padding-block: 8px;
    line-height: 1.25;
  }

  .convivencia-table-wrap { height: auto; min-height: 0; overflow: visible; }
  .convivencia-table { display: block; width: 100%; min-width: 0; }
  .convivencia-table thead { display: none; }
  .convivencia-table tbody { display: grid; gap: 10px; }
  .convivencia-table tr { display: grid; gap: 5px; padding: 12px; border: 1px solid var(--color-border); border-radius: 10px; background: #fff; }
  .convivencia-table td { display: grid; grid-template-columns: minmax(88px, 34%) minmax(0, 1fr); gap: 8px; width: 100%; min-width: 0; padding: 4px; border: 0; text-align: left; overflow-wrap: anywhere; }
  .convivencia-table td::before { content: attr(data-label); color: #44574a; font-weight: 800; }
  .convivencia-table td:last-child { display: flex; justify-content: flex-end; }
  .convivencia-top-actions { width: 100%; }
  .convivencia-top-actions .vinanet-primary-action { width: 100%; min-height: 44px; height: auto; }

  .vinanet-primary-action { min-height: 44px; }
  .horarios-controls .vinanet-primary-action { flex: 0 0 auto; width: 100%; align-self: stretch; }

  .docentes-table { width: 100%; min-width: 0; }
  .docentes-table tbody, .docentes-table tr { width: 100%; min-width: 0; }
  .docentes-table tbody { display: grid; gap: 10px; }
  .docentes-table tr.docente-mobile-summary { cursor: default; }
  .docentes-table tr.docente-mobile-summary > td { display: none; }
  .docentes-table tr.docente-mobile-summary > td:nth-child(2),
  .docentes-table tr.docente-mobile-summary > td:nth-child(3),
  .docentes-table tr.docente-mobile-summary > .docente-mobile-open-cell { display: block; }
  .docentes-table tr.docente-mobile-summary > td:nth-child(2),
  .docentes-table tr.docente-mobile-summary > td:nth-child(3) { grid-template-columns: 1fr; }
  .docentes-table tr.docente-mobile-summary > td:nth-child(2)::before,
  .docentes-table tr.docente-mobile-summary > td:nth-child(3)::before { display: none; }
  .docente-mobile-open { width: 100%; min-height: 44px; }
  .docente-mobile-detail-open tr:not(.docente-mobile-selected) { display: none; }
  .docente-mobile-detail-open tr.docente-mobile-selected > td { display: grid; width: 100%; min-width: 0; }
  .docente-mobile-detail-open tr.docente-mobile-selected > .docente-mobile-open-cell { display: none; }
  .docente-mobile-detail-open tr.docente-mobile-selected > .docente-mobile-detail-header { display: block; order: -10; padding-bottom: 8px; }
  .docente-mobile-detail-open tr.docente-mobile-selected > td:nth-child(2),
  .docente-mobile-detail-open tr.docente-mobile-selected > td:nth-child(3) { grid-template-columns: minmax(90px, 35%) minmax(0, 1fr); }
  .docente-mobile-detail-open tr.docente-mobile-selected > td:nth-child(2)::before,
  .docente-mobile-detail-open tr.docente-mobile-selected > td:nth-child(3)::before { display: block; }
  .docente-mobile-back { width: auto; }

  .planes-proyectos-table tr.plan-mobile-summary > td:nth-child(n+6):not(.plan-mobile-toggle-cell) { display: none; }
  .planes-proyectos-table tr.plan-mobile-summary > .plan-mobile-toggle-cell { display: block; }
  .planes-proyectos-table tr.plan-mobile-summary.plan-mobile-expanded > td:nth-child(n+6):not(.plan-mobile-toggle-cell) { display: grid; }
  .planes-proyectos-table tr.plan-mobile-expanded > .plan-mobile-toggle-cell { display: block; }
  .planes-proyectos-table tr.plan-mobile-expanded > td[data-label="Opciones Dirección"] .table-action-button { width: 100%; min-height: 44px; margin: 3px 0; }
  .plan-mobile-toggle { width: 100%; }

  #libros-texto-panel button, #libros-texto-panel select, #libros-texto-panel textarea,
  .libros-mobile-nav button { font: inherit; border-radius: 8px; }
  #libros-texto-panel button { min-height: 44px; padding: 9px 13px; border: 1px solid var(--color-green); }
  #libros-texto-panel .secondary-button, .libros-mobile-nav button { color: var(--color-green); background: #fff; }
  .libros-toolbar { padding: 12px; background: var(--color-green-soft); border: 1px solid var(--color-border); border-radius: 10px; }
  .libros-mobile-nav { flex-wrap: wrap; }
  .libros-mobile-nav > div { width: 100%; }
  .libros-mobile-nav button { flex: 1; }
}

/* Tarea 9: controles coherentes y estados visibles en todos los módulos. */
button, input[type="button"], input[type="submit"] {
  min-height: 40px; padding: .55rem .9rem; border: 1px solid transparent;
  border-radius: 8px; font: 700 .9rem/1.2 inherit; cursor: pointer;
  transition: background-color .15s ease, border-color .15s ease, box-shadow .15s ease, transform .05s ease;
}
button:focus-visible, input[type="button"]:focus-visible, input[type="submit"]:focus-visible {
  outline: 3px solid rgba(33, 112, 77, .3); outline-offset: 2px;
}
button:active:not(:disabled) { transform: translateY(1px); }
button:disabled, input[type="button"]:disabled, input[type="submit"]:disabled { opacity: .55; cursor: not-allowed; }
.secondary-button, .secondary-action, .close-module-button, #libros-anterior, #libros-siguiente, #cerrar-libros-texto {
  color: var(--color-green, #28613d); background: #fff; border-color: var(--color-green, #28613d);
}
.secondary-button:hover:not(:disabled), .secondary-action:hover:not(:disabled), .close-module-button:hover:not(:disabled) { background: #edf5f0; }
.danger-button, .destructive-button { color: #fff; background: #a82c2c; border-color: #8d2222; }
.absence-confirmation-card { width: min(92vw, 600px); }
.mailbox-reply { margin-top: 1rem; }
.mailbox-thread { display: grid; gap: .75rem; max-height: min(58vh, 620px); overflow-y: auto; padding: .2rem .35rem .2rem 0; }
.mailbox-thread-message { width: min(88%, 720px); padding: .8rem .9rem; background: #fff; border: 1px solid var(--color-border); border-radius: 12px; box-shadow: 0 2px 7px rgba(31, 46, 38, .06); }
.mailbox-thread-message.sent { justify-self: end; background: var(--color-green-soft); border-color: #bad9c4; }
.mailbox-thread-message.received { justify-self: start; }
.mailbox-thread-message.selected { outline: 2px solid rgba(45, 122, 75, .28); outline-offset: 1px; }
.mailbox-thread-message-header { display: flex; justify-content: space-between; gap: 1rem; align-items: baseline; }
.mailbox-thread-message-header time { color: var(--color-muted); font-size: .75rem; white-space: nowrap; }
.mailbox-thread-subject { margin: .45rem 0 .25rem; font-weight: 800; }
.mailbox-thread-message .mailbox-meta-line { margin: .2rem 0; }
body.password-change-required #cerrar-configuracion-personal { display: none; }

@media (max-width: 600px) {
  #personal-no-docente-panel .ranking-table-wrap { overflow-x: visible; }
  #personal-no-docente-panel table,
  #personal-no-docente-panel tbody,
  #personal-no-docente-panel tr,
  #personal-no-docente-panel td { display: block; width: 100%; min-width: 0; }
  #personal-no-docente-panel thead { display: none; }
  #personal-no-docente-panel tr { padding: 12px 0; border-bottom: 1px solid var(--border-color, #d8dee8); }
  #personal-no-docente-panel td { padding: 5px 0; }
  #personal-no-docente-panel input { width: 100%; min-height: 44px; }
  #personal-no-docente-panel .absence-actions { display: grid; gap: 8px; }
  #personal-no-docente-panel .vinanet-button { width: 100%; min-height: 44px; }
}

.password-control { display: flex; align-items: stretch; width: 100%; }
.password-control input { flex: 1; min-width: 0; }
.password-toggle {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 44px; min-height: 44px; margin-left: .35rem; padding: .45rem;
  color: #fff;
}
.password-toggle svg { display: block; width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }
.file-picker { display: flex; flex-wrap: wrap; gap: .65rem; align-items: center; }
.file-picker input[type="file"] { position: absolute; width: 1px; height: 1px; opacity: 0; }
.visually-hidden, .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; }
.photo-editor { display: grid; gap: .75rem; justify-items: start; }
.photo-editor canvas { width: min(100%, 320px); height: auto; border-radius: 18px; background: #eef3f1; user-select: none; -webkit-user-select: none; touch-action: none; }
.photo-editor canvas.photo-draggable { cursor: grab; }
.photo-editor canvas.photo-dragging { cursor: grabbing; }
.photo-drag-hint { margin: -.25rem 0 0; color: var(--color-muted, #53645c); font-size: .9rem; }
.school-calendar-special { display: inline-flex; flex-wrap: wrap; align-items: center; gap: .4rem; margin: 0; }
.school-calendar-special label { color: var(--color-muted); font-size: .76rem; font-weight: 800; }
.school-calendar-special input { min-height: 34px; padding: 4px 6px; font: inherit; border: 1px solid var(--color-border); border-radius: 8px; }
.school-calendar-special .form-message { flex-basis: 100%; min-height: 0; margin: 0; font-size: .74rem; }
.context-secondary-action { width: 100%; margin-top: .75rem; }

/* Tarea 10: Administración simplificada y versionado visible. */
.environment-menu-section { margin: 8px 0; padding: 10px 0; border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); }
.environment-menu-button { color: #fff !important; font-size: .78rem; font-weight: 900; line-height: 1.25; letter-spacing: .035em; text-align: center; box-shadow: 0 5px 14px rgba(15,23,42,.2); }
.environment-menu-button.development { background: #1565c0 !important; border-color: #0d47a1 !important; }
.environment-menu-button.production { background: #b91c1c !important; border-color: #991b1b !important; }
.environment-menu-button.identity-error { background: #5b6472 !important; border-color: #374151 !important; cursor: not-allowed; }
.version-center-status { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 10px; margin: 18px 0; }
.version-center-status div { padding: 12px; background: #f3f7f5; border: 1px solid var(--color-border); border-radius: 8px; }
.version-center-status span,.version-center-status strong { display: block; }
.version-center-status span { color: var(--color-muted); font-size: .76rem; font-weight: 800; text-transform: uppercase; }
.version-action-row { display:flex; justify-content:flex-end; align-items:center; gap:10px; flex-wrap:wrap; margin-top:16px; }
.version-action-row button { width:auto; margin:0; }
.vinanet-button { box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; min-height:40px; padding:8px 14px; font:inherit; font-weight:800; line-height:1.2; border:1px solid transparent; border-radius:8px; cursor:pointer; transition:background-color .15s,border-color .15s,box-shadow .15s,transform .05s; }
.vinanet-button--primary { color:#fff; background:var(--color-green); border-color:var(--color-green); }
.vinanet-button--primary:hover { background:#23633c; border-color:#23633c; }
.vinanet-button--secondary { color:#294b38; background:#f3f7f4; border-color:#b8c9bf; }
.vinanet-button--secondary:hover { color:#174d30; background:#e6f1ea; border-color:#6f9b80; }
.vinanet-button.vinanet-button--inverse { color:var(--color-green); background:#fff; border-color:var(--color-green); }
.vinanet-button.vinanet-button--inverse:hover { color:#174d30; background:var(--color-green-soft); border-color:#174d30; }
.vinanet-button.vinanet-button--inverse:focus-visible { outline-color:rgba(35,99,60,.38); box-shadow:0 0 0 1px #fff; }
.vinanet-button.vinanet-button--inverse:active { color:#123d26; background:#dceee2; border-color:#123d26; }
.vinanet-button.vinanet-button--inverse:disabled { color:#52665a; background:#eef2ef; border-color:#91a398; opacity:.72; }
.vinanet-button:focus-visible { outline:3px solid rgba(35,99,60,.24); outline-offset:2px; }
.vinanet-button:active { transform:translateY(1px); }
.vinanet-button:disabled { opacity:.58; cursor:not-allowed; transform:none; box-shadow:none; }
.vinanet-button--standard { min-height:38px; padding:7px 12px; }
.dev-data-progress { margin-top:12px; padding:11px 13px; color:#174d30; background:#eef7f3; border-left:4px solid var(--color-green); border-radius:6px; overflow-wrap:anywhere; }
.dev-data-progress.error { color:#8d2929; background:#fff0f0; border-left-color:#b91c1c; }
.version-history-dialog { width:min(960px,calc(100vw - 32px)); max-height:85vh; }
.dev-changes-list { display: grid; gap: 12px; margin: 10px 0 18px; }
.dev-changes-list article { padding: 14px; border: 1px solid var(--color-border); border-left: 5px solid #1565c0; border-radius: 8px; }
.dev-changes-list h4,.dev-changes-list p { margin: 0 0 6px; }
.dev-change-meta { color: var(--color-muted); font-size: .78rem; font-weight: 800; }
.production-update-disabled { display: flex; flex-direction: column; gap: 4px; padding: 14px; color: #68756d; background: #eef1ef; border: 1px dashed #98a49d; border-radius: 8px; }
.promotion-preflight { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; margin: 14px 0; }
.promotion-preflight > div { padding: 10px; border-radius: 8px; background: #f3f7f5; border: 1px solid var(--color-border); }
.promotion-preflight span,.promotion-preflight strong { display: block; }
.promotion-preflight span { color: var(--color-muted); font-size: .76rem; font-weight: 800; text-transform: uppercase; }
.promotion-preflight .preflight-pass { color: #17633a; background: #eaf8f0; }
.promotion-preflight .preflight-fail { color: #8d2929; background: #fff0f0; }
.promotion-preflight .preflight-control { min-width:0; overflow-wrap:anywhere; }
.promotion-preflight .preflight-control summary { cursor:pointer; font-weight:800; }
.promotion-preflight .preflight-control p { margin:8px 0; }
.promotion-preflight .preflight-control dl { display:grid; grid-template-columns:minmax(90px,auto) 1fr; gap:4px 10px; margin:8px 0 0; font-size:.82rem; }
.promotion-preflight .preflight-control dt { font-weight:800; }
.promotion-preflight .preflight-control dd { margin:0; min-width:0; overflow-wrap:anywhere; }
.promotion-preflight .preflight-pass { color:#17633a; background:#eaf8f0; }
.promotion-preflight .preflight-block { color:#8d2929; background:#fff0f0; }
.promotion-preflight .preflight-warn,.promotion-preflight .preflight-inconclusive { color:#754500; background:#fff7e8; }
.promotion-preflight .preflight-stale,.promotion-preflight .preflight-not_run { color:#4b5563; background:#f3f4f6; }
.promotion-warning { padding: 11px 13px; border-left: 4px solid #b56b00; background: #fff7e8; font-weight: 800; }
.promotion-maintenance { position: fixed; inset: 0; z-index: 10000; display: grid; place-items: center; padding: 18px; background: rgba(14,31,24,.94); color: #fff; }
.promotion-maintenance-card { width: min(720px,100%); max-height: calc(100vh - 36px); overflow: auto; padding: clamp(22px,5vw,48px); border-radius: 16px; background: #173d2d; box-shadow: 0 22px 60px #0008; }
.promotion-maintenance h1 { margin: 4px 0 14px; color: #fff; }.promotion-maintenance-card #promotion-maintenance-time { font-size: 2rem; font-variant-numeric: tabular-nums; font-weight: 800; }.promotion-maintenance-card ol { padding-left: 22px; line-height: 1.55; }.promotion-maintenance-card li { margin: 7px 0; }.promotion-maintenance-card button { margin-top: 18px; }
.audit-action-filters { display: grid; grid-template-columns: repeat(auto-fit, minmax(145px, 1fr)); gap: 10px; margin: 14px 0; }
.audit-action-filters label { display: grid; gap: 5px; font-weight: 700; min-width: 0; }
.audit-action-filters input { width: 100%; min-width: 0; }
@media (max-width: 640px) { .audit-action-filters { grid-template-columns: 1fr; } #acciones-auditoria-panel .ranking-table-wrap { overflow-x: visible; } #acciones-auditoria-panel table, #acciones-auditoria-panel tbody, #acciones-auditoria-panel tr, #acciones-auditoria-panel td { display: block; width: 100%; } #acciones-auditoria-panel thead { display: none; } #acciones-auditoria-panel tr { margin-bottom: 12px; padding: 10px; border: 1px solid var(--color-border); border-radius: 10px; } }
.registro-alcance { color: var(--color-primary, #176b52); font-weight: 700; }
@media (max-width: 640px) { #registro-panel .ranking-table-wrap { overflow-x: visible; } #registro-panel table, #registro-panel tbody, #registro-panel tr, #registro-panel td { display: block; width: 100%; } #registro-panel thead { display: none; } #registro-panel tr { margin-bottom: 12px; padding: 10px; border: 1px solid var(--color-border); border-radius: 10px; } #registro-panel td::before { content: attr(data-label); display: block; font-weight: 700; } }
@media (max-width: 640px) { .version-center-status,.promotion-preflight { grid-template-columns: 1fr; } .version-action-row { align-items:stretch; flex-direction:column; } .version-action-row button { width:100%; } }
.version-control-card{display:block}.version-publications{display:grid;gap:12px;margin-top:16px}.version-publication{border:1px solid var(--color-border);border-radius:10px;background:#fff;overflow:hidden}.version-publication summary{display:grid;grid-template-columns:.7fr 1.2fr 1.2fr 2fr 1fr;gap:12px;padding:14px;cursor:pointer;color:var(--color-green-dark)}.version-publication summary>span{display:grid;gap:3px;min-width:0;overflow-wrap:anywhere}.version-publication summary strong{color:var(--color-muted);font-size:.72rem;text-transform:uppercase}.version-publication-body{padding:0 14px 14px;border-top:1px solid var(--color-border)}.version-publication-form{display:grid;gap:12px;margin-top:14px}.version-publication-form label{display:grid;gap:5px;font-weight:700}.version-publication-form input,.version-publication-form textarea{width:100%;box-sizing:border-box}.version-publication-form .version-visibility{display:flex;align-items:center;gap:8px}.version-publication-form .version-visibility input{width:auto}
.version-publication summary.version-publication-summary--direction{grid-template-columns:.7fr 1.2fr 1.2fr 3fr}
@media(max-width:700px){.version-publication summary,.version-publication summary.version-publication-summary--direction{grid-template-columns:1fr;gap:8px}.version-publication summary>span{grid-template-columns:minmax(105px,40%) 1fr}.version-publication-form .vinanet-button{width:100%}}
.header-version { color: #d7eadf; font-weight: 700; white-space: nowrap; }
.environment-switch-top { display: inline-grid; place-items: center; box-sizing: border-box; flex: 0 0 36px; width: 36px; height: 36px; border: 2px solid #d7eadf; border-radius: 7px; color: #fff; font-weight: 900; text-decoration: none; }
.environment-switch-top.production { background: #b91c1c; }
.environment-switch-top.development { background: #1565c0; }
.environment-switch-top:hover { color: #fff; filter: brightness(1.1); }
.environment-switch-top:disabled { opacity: .42; filter: grayscale(.55); cursor: not-allowed; box-shadow: none; }
.sidebar-final-group { margin-top: var(--sidebar-option-gap) !important; }
.sidebar-admin-toggle {
  justify-content: space-between;
  margin-top: calc(var(--sidebar-section-gap) - var(--sidebar-option-gap));
  color: #fff;
  background: var(--color-green);
  border-color: var(--color-green);
}
.sidebar-admin-toggle:hover,
.sidebar-admin-toggle.active { color: #fff; background: #24643e; border-color: #24643e; }
.sidebar-admin-toggle:focus-visible { outline-color: rgba(45, 122, 75, .45); outline-offset: 3px; }
.sidebar-admin-chevron { transition: transform .15s ease; }
.sidebar-admin-toggle[aria-expanded="true"] .sidebar-admin-chevron { transform: rotate(180deg); }
.sidebar-admin-submenu { display: grid; gap: 2px; padding: 2px 0 2px 14px; }
.sidebar-admin-submenu[hidden] { display: none; }
.sidebar-admin-option {
  width: 100%; min-height: 34px; padding: 5px 10px; color: var(--color-text); background: transparent;
  border: 0; border-left: 2px solid #bfd3c5; border-radius: 0 7px 7px 0; font-size: .84rem;
  font-weight: 600; line-height: 1.2; text-align: left;
}
.sidebar-admin-option:hover { color: var(--color-green); background: rgba(255,255,255,.72); }
.sidebar-admin-option.active { color: var(--color-green); background: var(--color-green-soft); border-left-color: var(--color-green); font-weight: 800; }
.warning-button { color: #7a2d18; background: #fff; border-color: #b75b35; }
.version-actions { display: grid; gap: .55rem; min-width: 150px; }
.version-actions details { max-width: 28rem; }
.version-actions p { white-space: normal; overflow-wrap: anywhere; }

/* Tarea 10D: escala común de los cuatro módulos de Administración. */
.tools-panel.admin-module-panel {
  inset: 28px;
  width: auto;
  max-width: none;
  overflow-y: auto;
  overflow-x: hidden;
}
.admin-module-panel > .tool-card {
  width: 100%;
  grid-template-columns: minmax(0, 1fr);
  align-items: stretch;
  box-sizing: border-box;
}
#estado-sistema-panel .admin-summary-grid { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
#versiones-panel .ranking-table-wrap { height: auto; overflow-x: visible; }
#versiones-panel .ranking-table { min-width: 0; table-layout: fixed; }
#versiones-panel .ranking-table th,
#versiones-panel .ranking-table td { overflow-wrap: anywhere; vertical-align: top; }
#versiones-panel .ranking-table th:nth-child(1) { width: 7%; }
#versiones-panel .ranking-table th:nth-child(2) { width: 13%; }
#versiones-panel .ranking-table th:nth-child(3) { width: 12%; }
#versiones-panel .ranking-table th:nth-child(4) { width: 22%; }
#versiones-panel .ranking-table th:nth-child(5) { width: 8%; }
#versiones-panel .ranking-table th:nth-child(6) { width: 18%; }
#versiones-panel .ranking-table th:nth-child(7) { width: 20%; }
.admin-backups-card { margin-top: 16px; }

@media (max-width: 700px) {
  .tools-panel.admin-module-panel { inset: 12px; }
  .sidebar-admin-option { min-height: 44px; padding: 9px 10px; }
  #versiones-panel .ranking-table { display: block; min-width: 0; }
  #versiones-panel thead { display: none; }
  #versiones-panel tbody { display: grid; gap: .75rem; }
  #versiones-panel tr { display: grid; gap: .35rem; padding: .8rem; border: 1px solid var(--color-border, #d8dde3); border-radius: 10px; }
  #versiones-panel td { display: block; width: 100%; border: 0; padding: .2rem; white-space: normal; overflow-wrap: anywhere; }
}

@media (max-height: 430px) and (orientation: landscape) {
  :root { --header-height: 104px; }
  .top-header { height: var(--header-height); min-height: var(--header-height); grid-template-columns: 42px minmax(0, 1fr); grid-template-rows: 44px 44px; }
  .header-info { grid-row: 1; grid-column: 1 / 3; }
  .header-user-actions { grid-row: 2; grid-column: 1 / 3; padding: 0 48px; justify-content: center; }
  .header-user-actions > img { display: block; width: 36px; height: 36px; }
  .header-user-actions .header-icon-button:nth-of-type(n+2), .header-user-actions .header-logout-button { display: block; }
  .panel-toggle { top: calc(env(safe-area-inset-top) + 54px); }
}
.programas-panel { width:100%; max-width:none; min-width:0; }
.programas-header { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; }
.programas-tabs-row { display:flex; align-items:center; justify-content:space-between; gap:14px; margin:12px 0 18px; }
.programas-tabs { margin:0; min-width:0; overflow-x:auto; }
.programas-anadir { flex:0 0 auto; }
.programas-filtros { display:flex; flex-wrap:wrap; align-items:end; gap:12px; margin-bottom:12px; }
.programas-busqueda-global { flex:1 1 280px; }
.programas-busqueda-global input { width:100%; }
.programas-resultados-busqueda { display:grid; gap:4px; max-height:240px; overflow-y:auto; margin-bottom:12px; }
.programas-alumno-opcion { border:1px solid #c7d9cd; background:#f5faf7; color:#244c34; border-radius:7px; padding:9px 12px; text-align:left; cursor:pointer; }
.programas-alumno-opcion:hover,.programas-alumno-opcion:focus { background:#e6f2ea; border-color:#397b50; }
.programas-tabla-wrap { overflow-x:visible; overflow-y:auto; max-height:calc(100vh - 360px); }
@media (max-width: 700px) {
  .programas-tabs-row { align-items:stretch; flex-wrap:wrap; }
  .programas-tabs { flex:1 1 100%; }
  .programas-anadir { margin-left:auto; min-height:44px; }
  .programas-filtros { display:grid; grid-template-columns:1fr; }
  .programas-tabla, .programas-tabla thead, .programas-tabla tbody, .programas-tabla tr, .programas-tabla td { display:block; width:100%; }
  .programas-tabla thead { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); }
  .programas-tabla tr { margin-bottom:10px; border:1px solid #d4e0d8; border-radius:8px; padding:6px; }
  .programas-tabla td { min-width:0; overflow-wrap:anywhere; border:0; padding:5px 8px; }
}
